@opentabs-dev/mcp-server 0.0.61 → 0.0.63
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/browser-tools/analyze-site.d.ts.map +1 -1
- package/dist/browser-tools/analyze-site.js +2 -0
- package/dist/browser-tools/analyze-site.js.map +1 -1
- package/dist/browser-tools/clear-console-logs.d.ts.map +1 -1
- package/dist/browser-tools/clear-console-logs.js +2 -0
- package/dist/browser-tools/clear-console-logs.js.map +1 -1
- package/dist/browser-tools/click-element.d.ts.map +1 -1
- package/dist/browser-tools/click-element.js +2 -0
- package/dist/browser-tools/click-element.js.map +1 -1
- package/dist/browser-tools/close-tab.d.ts.map +1 -1
- package/dist/browser-tools/close-tab.js +2 -0
- package/dist/browser-tools/close-tab.js.map +1 -1
- package/dist/browser-tools/definition.d.ts +4 -0
- package/dist/browser-tools/definition.d.ts.map +1 -1
- package/dist/browser-tools/definition.js.map +1 -1
- package/dist/browser-tools/delete-cookies.d.ts.map +1 -1
- package/dist/browser-tools/delete-cookies.js +2 -0
- package/dist/browser-tools/delete-cookies.js.map +1 -1
- package/dist/browser-tools/disable-network-capture.d.ts.map +1 -1
- package/dist/browser-tools/disable-network-capture.js +2 -0
- package/dist/browser-tools/disable-network-capture.js.map +1 -1
- package/dist/browser-tools/enable-network-capture.d.ts.map +1 -1
- package/dist/browser-tools/enable-network-capture.js +2 -0
- package/dist/browser-tools/enable-network-capture.js.map +1 -1
- package/dist/browser-tools/execute-script.d.ts.map +1 -1
- package/dist/browser-tools/execute-script.js +2 -0
- package/dist/browser-tools/execute-script.js.map +1 -1
- package/dist/browser-tools/export-har.d.ts.map +1 -1
- package/dist/browser-tools/export-har.js +2 -0
- package/dist/browser-tools/export-har.js.map +1 -1
- package/dist/browser-tools/extension-check-adapter.d.ts.map +1 -1
- package/dist/browser-tools/extension-check-adapter.js +2 -0
- package/dist/browser-tools/extension-check-adapter.js.map +1 -1
- package/dist/browser-tools/extension-force-reconnect.d.ts.map +1 -1
- package/dist/browser-tools/extension-force-reconnect.js +2 -0
- package/dist/browser-tools/extension-force-reconnect.js.map +1 -1
- package/dist/browser-tools/extension-get-logs.d.ts +1 -1
- package/dist/browser-tools/extension-get-logs.d.ts.map +1 -1
- package/dist/browser-tools/extension-get-logs.js +2 -0
- package/dist/browser-tools/extension-get-logs.js.map +1 -1
- package/dist/browser-tools/extension-get-side-panel.d.ts.map +1 -1
- package/dist/browser-tools/extension-get-side-panel.js +2 -0
- package/dist/browser-tools/extension-get-side-panel.js.map +1 -1
- package/dist/browser-tools/extension-get-state.d.ts.map +1 -1
- package/dist/browser-tools/extension-get-state.js +2 -0
- package/dist/browser-tools/extension-get-state.js.map +1 -1
- package/dist/browser-tools/focus-tab.d.ts.map +1 -1
- package/dist/browser-tools/focus-tab.js +2 -0
- package/dist/browser-tools/focus-tab.js.map +1 -1
- package/dist/browser-tools/get-console-logs.d.ts +1 -1
- package/dist/browser-tools/get-console-logs.d.ts.map +1 -1
- package/dist/browser-tools/get-console-logs.js +2 -0
- package/dist/browser-tools/get-console-logs.js.map +1 -1
- package/dist/browser-tools/get-cookies.d.ts.map +1 -1
- package/dist/browser-tools/get-cookies.js +2 -0
- package/dist/browser-tools/get-cookies.js.map +1 -1
- package/dist/browser-tools/get-network-requests.d.ts.map +1 -1
- package/dist/browser-tools/get-network-requests.js +2 -0
- package/dist/browser-tools/get-network-requests.js.map +1 -1
- package/dist/browser-tools/get-page-html.d.ts.map +1 -1
- package/dist/browser-tools/get-page-html.js +2 -0
- package/dist/browser-tools/get-page-html.js.map +1 -1
- package/dist/browser-tools/get-resource-content.d.ts.map +1 -1
- package/dist/browser-tools/get-resource-content.js +2 -0
- package/dist/browser-tools/get-resource-content.js.map +1 -1
- package/dist/browser-tools/get-storage.d.ts.map +1 -1
- package/dist/browser-tools/get-storage.js +2 -0
- package/dist/browser-tools/get-storage.js.map +1 -1
- package/dist/browser-tools/get-tab-content.d.ts.map +1 -1
- package/dist/browser-tools/get-tab-content.js +2 -0
- package/dist/browser-tools/get-tab-content.js.map +1 -1
- package/dist/browser-tools/get-tab-info.d.ts.map +1 -1
- package/dist/browser-tools/get-tab-info.js +2 -0
- package/dist/browser-tools/get-tab-info.js.map +1 -1
- package/dist/browser-tools/get-websocket-frames.d.ts.map +1 -1
- package/dist/browser-tools/get-websocket-frames.js +2 -0
- package/dist/browser-tools/get-websocket-frames.js.map +1 -1
- package/dist/browser-tools/handle-dialog.d.ts.map +1 -1
- package/dist/browser-tools/handle-dialog.js +2 -0
- package/dist/browser-tools/handle-dialog.js.map +1 -1
- package/dist/browser-tools/hover-element.d.ts.map +1 -1
- package/dist/browser-tools/hover-element.js +2 -0
- package/dist/browser-tools/hover-element.js.map +1 -1
- package/dist/browser-tools/index.d.ts.map +1 -1
- package/dist/browser-tools/index.js +5 -0
- package/dist/browser-tools/index.js.map +1 -1
- package/dist/browser-tools/list-resources.d.ts.map +1 -1
- package/dist/browser-tools/list-resources.js +2 -0
- package/dist/browser-tools/list-resources.js.map +1 -1
- package/dist/browser-tools/list-tabs.d.ts.map +1 -1
- package/dist/browser-tools/list-tabs.js +2 -0
- package/dist/browser-tools/list-tabs.js.map +1 -1
- package/dist/browser-tools/navigate-tab.d.ts.map +1 -1
- package/dist/browser-tools/navigate-tab.js +2 -0
- package/dist/browser-tools/navigate-tab.js.map +1 -1
- package/dist/browser-tools/open-tab.d.ts.map +1 -1
- package/dist/browser-tools/open-tab.js +2 -0
- package/dist/browser-tools/open-tab.js.map +1 -1
- package/dist/browser-tools/plugin-list-tabs.d.ts.map +1 -1
- package/dist/browser-tools/plugin-list-tabs.js +2 -0
- package/dist/browser-tools/plugin-list-tabs.js.map +1 -1
- package/dist/browser-tools/press-key.d.ts.map +1 -1
- package/dist/browser-tools/press-key.js +2 -0
- package/dist/browser-tools/press-key.js.map +1 -1
- package/dist/browser-tools/query-elements.d.ts.map +1 -1
- package/dist/browser-tools/query-elements.js +2 -0
- package/dist/browser-tools/query-elements.js.map +1 -1
- package/dist/browser-tools/reload-extension.d.ts.map +1 -1
- package/dist/browser-tools/reload-extension.js +2 -0
- package/dist/browser-tools/reload-extension.js.map +1 -1
- package/dist/browser-tools/screenshot-tab.d.ts.map +1 -1
- package/dist/browser-tools/screenshot-tab.js +2 -0
- package/dist/browser-tools/screenshot-tab.js.map +1 -1
- package/dist/browser-tools/scroll.d.ts.map +1 -1
- package/dist/browser-tools/scroll.js +2 -0
- package/dist/browser-tools/scroll.js.map +1 -1
- package/dist/browser-tools/select-option.d.ts.map +1 -1
- package/dist/browser-tools/select-option.js +2 -0
- package/dist/browser-tools/select-option.js.map +1 -1
- package/dist/browser-tools/set-cookie.d.ts.map +1 -1
- package/dist/browser-tools/set-cookie.js +2 -0
- package/dist/browser-tools/set-cookie.js.map +1 -1
- package/dist/browser-tools/type-text.d.ts.map +1 -1
- package/dist/browser-tools/type-text.js +2 -0
- package/dist/browser-tools/type-text.js.map +1 -1
- package/dist/browser-tools/wait-for-element.d.ts.map +1 -1
- package/dist/browser-tools/wait-for-element.js +2 -0
- package/dist/browser-tools/wait-for-element.js.map +1 -1
- package/dist/config.d.ts +16 -43
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +48 -157
- package/dist/config.js.map +1 -1
- package/dist/discovery.d.ts +1 -4
- package/dist/discovery.d.ts.map +1 -1
- package/dist/discovery.js +5 -17
- package/dist/discovery.js.map +1 -1
- package/dist/extension-handlers.d.ts +22 -14
- package/dist/extension-handlers.d.ts.map +1 -1
- package/dist/extension-handlers.js +114 -188
- package/dist/extension-handlers.js.map +1 -1
- package/dist/extension-protocol.d.ts +4 -9
- package/dist/extension-protocol.d.ts.map +1 -1
- package/dist/extension-protocol.js +16 -45
- package/dist/extension-protocol.js.map +1 -1
- package/dist/file-watcher.js +2 -2
- package/dist/file-watcher.js.map +1 -1
- package/dist/http-routes.d.ts.map +1 -1
- package/dist/http-routes.js +5 -9
- package/dist/http-routes.js.map +1 -1
- package/dist/loader.d.ts +2 -4
- package/dist/loader.d.ts.map +1 -1
- package/dist/loader.js +6 -5
- package/dist/loader.js.map +1 -1
- package/dist/mcp-setup.d.ts +11 -9
- package/dist/mcp-setup.d.ts.map +1 -1
- package/dist/mcp-setup.js +104 -27
- package/dist/mcp-setup.js.map +1 -1
- package/dist/mcp-tool-dispatch.d.ts +24 -12
- package/dist/mcp-tool-dispatch.d.ts.map +1 -1
- package/dist/mcp-tool-dispatch.js +325 -125
- package/dist/mcp-tool-dispatch.js.map +1 -1
- package/dist/plugin-management.d.ts +0 -1
- package/dist/plugin-management.d.ts.map +1 -1
- package/dist/plugin-management.js +1 -2
- package/dist/plugin-management.js.map +1 -1
- package/dist/registry.d.ts +2 -4
- package/dist/registry.d.ts.map +1 -1
- package/dist/registry.js +1 -12
- package/dist/registry.js.map +1 -1
- package/dist/reload.d.ts.map +1 -1
- package/dist/reload.js +73 -37
- package/dist/reload.js.map +1 -1
- package/dist/skip-permissions.d.ts +5 -12
- package/dist/skip-permissions.d.ts.map +1 -1
- package/dist/skip-permissions.js +7 -17
- package/dist/skip-permissions.js.map +1 -1
- package/dist/state.d.ts +42 -45
- package/dist/state.d.ts.map +1 -1
- package/dist/state.js +57 -43
- package/dist/state.js.map +1 -1
- package/dist/version-check.d.ts.map +1 -1
- package/dist/version-check.js +1 -1
- package/dist/version-check.js.map +1 -1
- package/package.json +1 -1
package/dist/config.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Config system — ~/.opentabs/config.json
|
|
3
3
|
*
|
|
4
|
-
* Single source of truth for local plugin paths and
|
|
4
|
+
* Single source of truth for local plugin paths and per-plugin permission state.
|
|
5
5
|
* Created automatically on first MCP server run with sensible defaults.
|
|
6
6
|
*
|
|
7
7
|
* The config directory defaults to ~/.opentabs but can be overridden via the
|
|
@@ -9,38 +9,24 @@
|
|
|
9
9
|
* E2E test execution where each test worker needs its own isolated config
|
|
10
10
|
* to avoid clobbering shared state.
|
|
11
11
|
*/
|
|
12
|
-
import { generateSecret, getConfigDir, getExtensionDir } from '@opentabs-dev/shared';
|
|
12
|
+
import { generateSecret, getConfigDir, getExtensionDir, type PluginPermissionConfig } from '@opentabs-dev/shared';
|
|
13
13
|
/**
|
|
14
14
|
* Shape of ~/.opentabs/config.json
|
|
15
15
|
*
|
|
16
16
|
* `localPlugins` holds local filesystem paths to plugin directories. These paths
|
|
17
17
|
* start with `./`, `../`, `/`, or `~/` and are resolved relative to the config
|
|
18
18
|
* directory. npm plugins are auto-discovered from global node_modules.
|
|
19
|
+
*
|
|
20
|
+
* `permissions` is a map of plugin name → permission config. Each entry may have
|
|
21
|
+
* a top-level `permission` (default for all tools in that plugin) and a `tools`
|
|
22
|
+
* map of tool base name → per-tool override. Browser tools use the special key
|
|
23
|
+
* `__browser__`.
|
|
19
24
|
*/
|
|
20
|
-
/** Permission policy for a tool: allow (no confirmation), ask (require confirmation), deny (block) */
|
|
21
|
-
type ToolPermission = 'allow' | 'ask' | 'deny';
|
|
22
|
-
/** Permission configuration for browser tool confirmation */
|
|
23
|
-
interface PermissionsConfig {
|
|
24
|
-
/** Domains where all tools are auto-allowed (supports glob patterns, e.g., '*.example.com') */
|
|
25
|
-
trustedDomains: string[];
|
|
26
|
-
/** Domains where all tools require confirmation regardless of tier (supports glob patterns) */
|
|
27
|
-
sensitiveDomains: string[];
|
|
28
|
-
/** Per-tool policy overrides: browser tool name → permission */
|
|
29
|
-
toolPolicy: Record<string, ToolPermission>;
|
|
30
|
-
/** Per-domain per-tool policy overrides: domain → { tool name → permission } */
|
|
31
|
-
domainToolPolicy: Record<string, Record<string, ToolPermission>>;
|
|
32
|
-
}
|
|
33
25
|
interface OpentabsConfig {
|
|
34
26
|
/** Local plugin directory paths (resolved relative to the config directory) */
|
|
35
27
|
localPlugins: string[];
|
|
36
|
-
/**
|
|
37
|
-
|
|
38
|
-
/** Browser tool enabled/disabled state: browser tool name → boolean. Absent = enabled (default). */
|
|
39
|
-
browserToolPolicy: Record<string, boolean>;
|
|
40
|
-
/** Permission configuration for browser tool confirmation */
|
|
41
|
-
permissions: PermissionsConfig;
|
|
42
|
-
/** Whether to skip all permission prompts (dangerous — disables human-in-the-loop) */
|
|
43
|
-
skipPermissions?: boolean;
|
|
28
|
+
/** Per-plugin permission configuration: plugin name → { permission?, tools? } */
|
|
29
|
+
permissions: Record<string, PluginPermissionConfig>;
|
|
44
30
|
}
|
|
45
31
|
/** Version marker file for the managed extension install */
|
|
46
32
|
declare const getExtensionVersionFile: () => string;
|
|
@@ -66,30 +52,17 @@ declare const saveConfig: (state: {
|
|
|
66
52
|
configWriteMutex: Promise<void>;
|
|
67
53
|
}, config: OpentabsConfig) => Promise<void>;
|
|
68
54
|
/**
|
|
69
|
-
* Persist
|
|
55
|
+
* Persist plugin permissions to config.json.
|
|
70
56
|
*
|
|
71
|
-
* Reads the current config from disk, updates only the `
|
|
57
|
+
* Reads the current config from disk, updates only the `permissions` field,
|
|
72
58
|
* and writes it back atomically. This prevents stale in-memory plugin
|
|
73
|
-
* paths from overwriting externally-added plugins
|
|
74
|
-
* the "plugin disappears during development" bug.
|
|
75
|
-
*
|
|
76
|
-
* The read-modify-write is serialized via state.configWriteMutex.
|
|
77
|
-
*/
|
|
78
|
-
declare const saveToolConfig: (state: {
|
|
79
|
-
configWriteMutex: Promise<void>;
|
|
80
|
-
}, tools: Record<string, boolean>) => Promise<void>;
|
|
81
|
-
/**
|
|
82
|
-
* Persist only the browser tool enabled/disabled policy to config.json.
|
|
83
|
-
*
|
|
84
|
-
* Reads the current config from disk, updates only the `browserToolPolicy`
|
|
85
|
-
* field, and writes it back atomically. Follows the same read-modify-write
|
|
86
|
-
* pattern as saveToolConfig to prevent overwriting externally-added data.
|
|
59
|
+
* paths from overwriting externally-added plugins.
|
|
87
60
|
*
|
|
88
61
|
* The read-modify-write is serialized via state.configWriteMutex.
|
|
89
62
|
*/
|
|
90
|
-
declare const
|
|
63
|
+
declare const savePluginPermissions: (state: {
|
|
91
64
|
configWriteMutex: Promise<void>;
|
|
92
|
-
},
|
|
65
|
+
}, plugins: Record<string, PluginPermissionConfig>) => Promise<void>;
|
|
93
66
|
/**
|
|
94
67
|
* Write auth.json to the managed extension directory so the Chrome extension
|
|
95
68
|
* can bootstrap the shared secret without an unauthenticated HTTP request.
|
|
@@ -103,6 +76,6 @@ declare const writeAuthFile: (secret: string) => Promise<void>;
|
|
|
103
76
|
* If auth.json exists with a valid secret, returns it without overwriting.
|
|
104
77
|
*/
|
|
105
78
|
declare const loadSecret: () => Promise<string>;
|
|
106
|
-
export type { OpentabsConfig
|
|
107
|
-
export { loadConfig, loadSecret, saveConfig,
|
|
79
|
+
export type { OpentabsConfig };
|
|
80
|
+
export { loadConfig, loadSecret, saveConfig, savePluginPermissions, writeAuthFile, generateSecret, getConfigDir, getExtensionDir, getExtensionVersionFile, getAdaptersDir, };
|
|
108
81
|
//# sourceMappingURL=config.d.ts.map
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,OAAO,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,OAAO,EAEL,cAAc,EACd,YAAY,EAEZ,eAAe,EACf,KAAK,sBAAsB,EAE5B,MAAM,sBAAsB,CAAC;AAO9B;;;;;;;;;;;GAWG;AACH,UAAU,cAAc;IACtB,+EAA+E;IAC/E,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,iFAAiF;IACjF,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC;CACrD;AAED,4DAA4D;AAC5D,QAAA,MAAM,uBAAuB,QAAO,MAAsD,CAAC;AAE3F,sEAAsE;AACtE,QAAA,MAAM,cAAc,QAAO,MAA6C,CAAC;AAiHzE;;;;;;;;GAQG;AACH,QAAA,MAAM,UAAU,QAAa,OAAO,CAAC,cAAc,CA8BlD,CAAC;AAEF;;;;;GAKG;AACH,QAAA,MAAM,UAAU,GAAU,OAAO;IAAE,gBAAgB,EAAE,OAAO,CAAC,IAAI,CAAC,CAAA;CAAE,EAAE,QAAQ,cAAc,KAAG,OAAO,CAAC,IAAI,CAY1G,CAAC;AAEF;;;;;;;;GAQG;AACH,QAAA,MAAM,qBAAqB,GACzB,OAAO;IAAE,gBAAgB,EAAE,OAAO,CAAC,IAAI,CAAC,CAAA;CAAE,EAC1C,SAAS,MAAM,CAAC,MAAM,EAAE,sBAAsB,CAAC,KAC9C,OAAO,CAAC,IAAI,CAwBd,CAAC;AAEF;;;;GAIG;AACH,QAAA,MAAM,aAAa,GAAU,QAAQ,MAAM,KAAG,OAAO,CAAC,IAAI,CAKzD,CAAC;AAEF;;;;;GAKG;AACH,QAAA,MAAM,UAAU,QAAa,OAAO,CAAC,MAAM,CA4B1C,CAAC;AAEF,YAAY,EAAE,cAAc,EAAE,CAAC;AAC/B,OAAO,EACL,UAAU,EACV,UAAU,EACV,UAAU,EACV,qBAAqB,EACrB,aAAa,EACb,cAAc,EACd,YAAY,EACZ,eAAe,EACf,uBAAuB,EACvB,cAAc,GACf,CAAC"}
|
package/dist/config.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Config system — ~/.opentabs/config.json
|
|
3
3
|
*
|
|
4
|
-
* Single source of truth for local plugin paths and
|
|
4
|
+
* Single source of truth for local plugin paths and per-plugin permission state.
|
|
5
5
|
* Created automatically on first MCP server run with sensible defaults.
|
|
6
6
|
*
|
|
7
7
|
* The config directory defaults to ~/.opentabs but can be overridden via the
|
|
@@ -11,8 +11,10 @@
|
|
|
11
11
|
*/
|
|
12
12
|
import { access, mkdir, readFile } from 'node:fs/promises';
|
|
13
13
|
import { join } from 'node:path';
|
|
14
|
-
import { atomicWrite, generateSecret, getConfigDir, getConfigPath, getExtensionDir } from '@opentabs-dev/shared';
|
|
14
|
+
import { atomicWrite, generateSecret, getConfigDir, getConfigPath, getExtensionDir, } from '@opentabs-dev/shared';
|
|
15
15
|
import { log } from './logger.js';
|
|
16
|
+
const VALID_TOOL_PERMISSIONS = new Set(['off', 'ask', 'auto']);
|
|
17
|
+
const isToolPermission = (v) => typeof v === 'string' && VALID_TOOL_PERMISSIONS.has(v);
|
|
16
18
|
/** Version marker file for the managed extension install */
|
|
17
19
|
const getExtensionVersionFile = () => join(getExtensionDir(), '.opentabs-version');
|
|
18
20
|
/** Directory for plugin adapter IIFEs inside the managed extension */
|
|
@@ -59,60 +61,47 @@ const readConfigWithRetry = async (configPath, maxRetries = 3, initialDelayMs =
|
|
|
59
61
|
}
|
|
60
62
|
return null;
|
|
61
63
|
};
|
|
62
|
-
/**
|
|
63
|
-
const
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
s.startsWith('..\\') ||
|
|
67
|
-
s.startsWith('/') ||
|
|
68
|
-
s.startsWith('~/') ||
|
|
69
|
-
/^[A-Za-z]:[/\\]/.test(s);
|
|
70
|
-
const VALID_TOOL_PERMISSIONS = new Set(['allow', 'ask', 'deny']);
|
|
71
|
-
const isToolPermission = (v) => typeof v === 'string' && VALID_TOOL_PERMISSIONS.has(v);
|
|
72
|
-
/** Default permissions config: trust localhost, everything else uses tier defaults */
|
|
73
|
-
const defaultPermissions = () => ({
|
|
74
|
-
trustedDomains: ['localhost', '127.0.0.1'],
|
|
75
|
-
sensitiveDomains: [],
|
|
76
|
-
toolPolicy: {},
|
|
77
|
-
domainToolPolicy: {},
|
|
78
|
-
});
|
|
79
|
-
/** Parse a raw permissions value from config.json into a validated PermissionsConfig */
|
|
80
|
-
const parsePermissionsConfig = (raw) => {
|
|
81
|
-
if (!raw || typeof raw !== 'object' || Array.isArray(raw)) {
|
|
82
|
-
return defaultPermissions();
|
|
83
|
-
}
|
|
64
|
+
/** Parse and validate a single PluginPermissionConfig entry from raw JSON */
|
|
65
|
+
const parsePluginPermissionEntry = (raw) => {
|
|
66
|
+
if (!raw || typeof raw !== 'object' || Array.isArray(raw))
|
|
67
|
+
return null;
|
|
84
68
|
const obj = raw;
|
|
85
|
-
const
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
if (obj.toolPolicy && typeof obj.toolPolicy === 'object' && !Array.isArray(obj.toolPolicy)) {
|
|
93
|
-
for (const [key, value] of Object.entries(obj.toolPolicy)) {
|
|
69
|
+
const result = {};
|
|
70
|
+
if (isToolPermission(obj.permission)) {
|
|
71
|
+
result.permission = obj.permission;
|
|
72
|
+
}
|
|
73
|
+
if (obj.tools && typeof obj.tools === 'object' && !Array.isArray(obj.tools)) {
|
|
74
|
+
const tools = {};
|
|
75
|
+
for (const [key, value] of Object.entries(obj.tools)) {
|
|
94
76
|
if (isToolPermission(value)) {
|
|
95
|
-
|
|
77
|
+
tools[key] = value;
|
|
96
78
|
}
|
|
97
79
|
}
|
|
80
|
+
if (Object.keys(tools).length > 0) {
|
|
81
|
+
result.tools = tools;
|
|
82
|
+
}
|
|
98
83
|
}
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
84
|
+
if (typeof obj.reviewedVersion === 'string' && obj.reviewedVersion.length > 0) {
|
|
85
|
+
result.reviewedVersion = obj.reviewedVersion;
|
|
86
|
+
}
|
|
87
|
+
// Only return if at least one field was set
|
|
88
|
+
if (result.permission !== undefined || result.tools !== undefined || result.reviewedVersion !== undefined) {
|
|
89
|
+
return result;
|
|
90
|
+
}
|
|
91
|
+
return null;
|
|
92
|
+
};
|
|
93
|
+
/** Parse the plugins map from a raw config record */
|
|
94
|
+
const parsePluginsConfig = (raw) => {
|
|
95
|
+
const result = {};
|
|
96
|
+
if (!raw || typeof raw !== 'object' || Array.isArray(raw))
|
|
97
|
+
return result;
|
|
98
|
+
for (const [pluginName, entry] of Object.entries(raw)) {
|
|
99
|
+
const parsed = parsePluginPermissionEntry(entry);
|
|
100
|
+
if (parsed) {
|
|
101
|
+
result[pluginName] = parsed;
|
|
113
102
|
}
|
|
114
103
|
}
|
|
115
|
-
return
|
|
104
|
+
return result;
|
|
116
105
|
};
|
|
117
106
|
/**
|
|
118
107
|
* Parse a raw config record into an OpentabsConfig.
|
|
@@ -122,65 +111,8 @@ const parseConfigRecord = (record) => {
|
|
|
122
111
|
const localPlugins = Array.isArray(record.localPlugins)
|
|
123
112
|
? record.localPlugins.filter((p) => typeof p === 'string')
|
|
124
113
|
: [];
|
|
125
|
-
const
|
|
126
|
-
|
|
127
|
-
for (const [key, value] of Object.entries(record.tools)) {
|
|
128
|
-
if (typeof value === 'boolean') {
|
|
129
|
-
tools[key] = value;
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
const browserToolPolicy = {};
|
|
134
|
-
if (record.browserToolPolicy &&
|
|
135
|
-
typeof record.browserToolPolicy === 'object' &&
|
|
136
|
-
!Array.isArray(record.browserToolPolicy)) {
|
|
137
|
-
for (const [key, value] of Object.entries(record.browserToolPolicy)) {
|
|
138
|
-
if (typeof value === 'boolean') {
|
|
139
|
-
browserToolPolicy[key] = value;
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
// Migration: if the old `plugins` array exists, extract local paths into localPlugins
|
|
144
|
-
// and drop npm package names (they will be auto-discovered from global node_modules).
|
|
145
|
-
if (Array.isArray(record.plugins)) {
|
|
146
|
-
const legacyPlugins = record.plugins.filter((p) => typeof p === 'string');
|
|
147
|
-
const localPaths = legacyPlugins.filter(isLocalPathEntry);
|
|
148
|
-
const npmPackages = legacyPlugins.filter(p => !isLocalPathEntry(p));
|
|
149
|
-
if (localPaths.length > 0) {
|
|
150
|
-
// Merge into localPlugins, deduplicating
|
|
151
|
-
const existing = new Set(localPlugins);
|
|
152
|
-
for (const p of localPaths) {
|
|
153
|
-
if (!existing.has(p)) {
|
|
154
|
-
localPlugins.push(p);
|
|
155
|
-
existing.add(p);
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
log.info(`Migrating ${localPaths.length} local path(s) from "plugins" to "localPlugins". ` +
|
|
159
|
-
'Update your config.json to use "localPlugins" for local plugin paths.');
|
|
160
|
-
}
|
|
161
|
-
if (npmPackages.length > 0) {
|
|
162
|
-
log.info(`Dropping ${npmPackages.length} npm package name(s) from legacy "plugins" array. ` +
|
|
163
|
-
'npm plugins are now auto-discovered from global node_modules.');
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
// Migration: merge legacy npmPlugins — these are npm packages that will be auto-discovered,
|
|
167
|
-
// so they are dropped with a notice.
|
|
168
|
-
if (Array.isArray(record.npmPlugins)) {
|
|
169
|
-
const legacyNpm = record.npmPlugins.filter((p) => typeof p === 'string');
|
|
170
|
-
if (legacyNpm.length > 0) {
|
|
171
|
-
log.info(`Dropping ${legacyNpm.length} npmPlugins entry/entries. ` +
|
|
172
|
-
'npm plugins are now auto-discovered from global node_modules.');
|
|
173
|
-
}
|
|
174
|
-
}
|
|
175
|
-
// Parse permissions config with defensive validation
|
|
176
|
-
const permissions = parsePermissionsConfig(record.permissions);
|
|
177
|
-
// Read skipPermissions (new name); fall back to skipConfirmation (old name) for backward compatibility.
|
|
178
|
-
const skipPermissions = typeof record.skipPermissions === 'boolean'
|
|
179
|
-
? record.skipPermissions
|
|
180
|
-
: typeof record.skipConfirmation === 'boolean'
|
|
181
|
-
? record.skipConfirmation
|
|
182
|
-
: undefined;
|
|
183
|
-
return { localPlugins, tools, browserToolPolicy, permissions, skipPermissions };
|
|
114
|
+
const permissions = parsePluginsConfig(record.permissions);
|
|
115
|
+
return { localPlugins, permissions };
|
|
184
116
|
};
|
|
185
117
|
/**
|
|
186
118
|
* Load config from ~/.opentabs/config.json.
|
|
@@ -198,9 +130,7 @@ const loadConfig = async () => {
|
|
|
198
130
|
if (!(await access(configPath).then(() => true, () => false))) {
|
|
199
131
|
const config = {
|
|
200
132
|
localPlugins: [],
|
|
201
|
-
|
|
202
|
-
browserToolPolicy: {},
|
|
203
|
-
permissions: defaultPermissions(),
|
|
133
|
+
permissions: {},
|
|
204
134
|
};
|
|
205
135
|
await atomicWriteConfig(configPath, `${JSON.stringify(config, null, 2)}\n`);
|
|
206
136
|
log.info(`Created default config at ${configPath}`);
|
|
@@ -235,35 +165,30 @@ const saveConfig = async (state, config) => {
|
|
|
235
165
|
await writePromise;
|
|
236
166
|
};
|
|
237
167
|
/**
|
|
238
|
-
* Persist
|
|
168
|
+
* Persist plugin permissions to config.json.
|
|
239
169
|
*
|
|
240
|
-
* Reads the current config from disk, updates only the `
|
|
170
|
+
* Reads the current config from disk, updates only the `permissions` field,
|
|
241
171
|
* and writes it back atomically. This prevents stale in-memory plugin
|
|
242
|
-
* paths from overwriting externally-added plugins
|
|
243
|
-
* the "plugin disappears during development" bug.
|
|
172
|
+
* paths from overwriting externally-added plugins.
|
|
244
173
|
*
|
|
245
174
|
* The read-modify-write is serialized via state.configWriteMutex.
|
|
246
175
|
*/
|
|
247
|
-
const
|
|
176
|
+
const savePluginPermissions = async (state, plugins) => {
|
|
248
177
|
const configDir = getConfigDir();
|
|
249
178
|
const configPath = getConfigPath();
|
|
250
179
|
const prev = state.configWriteMutex;
|
|
251
180
|
const writePromise = (async () => {
|
|
252
181
|
await prev;
|
|
253
182
|
await mkdir(configDir, { recursive: true, mode: 0o700 });
|
|
254
|
-
// Read current config from disk to preserve localPlugins
|
|
255
183
|
const record = await readConfigWithRetry(configPath, 2, 50);
|
|
256
184
|
if (!record) {
|
|
257
|
-
log.warn('Cannot persist
|
|
185
|
+
log.warn('Cannot persist plugin permissions — config file unreadable');
|
|
258
186
|
return;
|
|
259
187
|
}
|
|
260
188
|
const current = parseConfigRecord(record);
|
|
261
189
|
const updated = {
|
|
262
190
|
localPlugins: current.localPlugins,
|
|
263
|
-
|
|
264
|
-
browserToolPolicy: current.browserToolPolicy,
|
|
265
|
-
permissions: current.permissions,
|
|
266
|
-
skipPermissions: current.skipPermissions,
|
|
191
|
+
permissions: plugins,
|
|
267
192
|
};
|
|
268
193
|
await atomicWriteConfig(configPath, `${JSON.stringify(updated, null, 2)}\n`);
|
|
269
194
|
})();
|
|
@@ -271,40 +196,6 @@ const saveToolConfig = async (state, tools) => {
|
|
|
271
196
|
state.configWriteMutex = writePromise.catch(() => { });
|
|
272
197
|
await writePromise;
|
|
273
198
|
};
|
|
274
|
-
/**
|
|
275
|
-
* Persist only the browser tool enabled/disabled policy to config.json.
|
|
276
|
-
*
|
|
277
|
-
* Reads the current config from disk, updates only the `browserToolPolicy`
|
|
278
|
-
* field, and writes it back atomically. Follows the same read-modify-write
|
|
279
|
-
* pattern as saveToolConfig to prevent overwriting externally-added data.
|
|
280
|
-
*
|
|
281
|
-
* The read-modify-write is serialized via state.configWriteMutex.
|
|
282
|
-
*/
|
|
283
|
-
const saveBrowserToolPolicy = async (state, browserToolPolicy) => {
|
|
284
|
-
const configDir = getConfigDir();
|
|
285
|
-
const configPath = getConfigPath();
|
|
286
|
-
const prev = state.configWriteMutex;
|
|
287
|
-
const writePromise = (async () => {
|
|
288
|
-
await prev;
|
|
289
|
-
await mkdir(configDir, { recursive: true, mode: 0o700 });
|
|
290
|
-
const record = await readConfigWithRetry(configPath, 2, 50);
|
|
291
|
-
if (!record) {
|
|
292
|
-
log.warn('Cannot persist browser tool policy — config file unreadable');
|
|
293
|
-
return;
|
|
294
|
-
}
|
|
295
|
-
const current = parseConfigRecord(record);
|
|
296
|
-
const updated = {
|
|
297
|
-
localPlugins: current.localPlugins,
|
|
298
|
-
tools: current.tools,
|
|
299
|
-
browserToolPolicy,
|
|
300
|
-
permissions: current.permissions,
|
|
301
|
-
skipPermissions: current.skipPermissions,
|
|
302
|
-
};
|
|
303
|
-
await atomicWriteConfig(configPath, `${JSON.stringify(updated, null, 2)}\n`);
|
|
304
|
-
})();
|
|
305
|
-
state.configWriteMutex = writePromise.catch(() => { });
|
|
306
|
-
await writePromise;
|
|
307
|
-
};
|
|
308
199
|
/**
|
|
309
200
|
* Write auth.json to the managed extension directory so the Chrome extension
|
|
310
201
|
* can bootstrap the shared secret without an unauthenticated HTTP request.
|
|
@@ -346,5 +237,5 @@ const loadSecret = async () => {
|
|
|
346
237
|
log.info(`Generated WebSocket authentication secret in ${authPath}`);
|
|
347
238
|
return secret;
|
|
348
239
|
};
|
|
349
|
-
export { loadConfig, loadSecret, saveConfig,
|
|
240
|
+
export { loadConfig, loadSecret, saveConfig, savePluginPermissions, writeAuthFile, generateSecret, getConfigDir, getExtensionDir, getExtensionVersionFile, getAdaptersDir, };
|
|
350
241
|
//# sourceMappingURL=config.js.map
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/dist/discovery.d.ts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
/** Plugin discovery orchestrator: resolve → load → register pipeline. */
|
|
2
|
-
import type { TrustTier } from '@opentabs-dev/shared';
|
|
3
2
|
import type { PluginRegistry } from './state.js';
|
|
4
3
|
/** Outcome of plugin discovery: an immutable registry plus any errors from failed plugins. */
|
|
5
4
|
interface DiscoveryResult {
|
|
@@ -11,8 +10,6 @@ interface DiscoveryError {
|
|
|
11
10
|
readonly specifier: string;
|
|
12
11
|
readonly error: string;
|
|
13
12
|
}
|
|
14
|
-
/** Determine trust tier for an npm plugin directory path based on its package name. */
|
|
15
|
-
declare const npmTrustTier: (dir: string) => TrustTier;
|
|
16
13
|
/**
|
|
17
14
|
* Discover plugins from auto-discovered npm globals and explicit local paths.
|
|
18
15
|
*
|
|
@@ -23,6 +20,6 @@ declare const npmTrustTier: (dir: string) => TrustTier;
|
|
|
23
20
|
* Phase 5: Build immutable registry.
|
|
24
21
|
*/
|
|
25
22
|
declare const discoverPlugins: (localPlugins: string[], configDir: string) => Promise<DiscoveryResult>;
|
|
26
|
-
export { discoverPlugins
|
|
23
|
+
export { discoverPlugins };
|
|
27
24
|
export type { DiscoveryError, DiscoveryResult };
|
|
28
25
|
//# sourceMappingURL=discovery.d.ts.map
|
package/dist/discovery.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"discovery.d.ts","sourceRoot":"","sources":["../src/discovery.ts"],"names":[],"mappings":"AAAA,yEAAyE;
|
|
1
|
+
{"version":3,"file":"discovery.d.ts","sourceRoot":"","sources":["../src/discovery.ts"],"names":[],"mappings":"AAAA,yEAAyE;AASzE,OAAO,KAAK,EAAgB,cAAc,EAAE,MAAM,YAAY,CAAC;AAE/D,8FAA8F;AAC9F,UAAU,eAAe;IACvB,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC;IAClC,QAAQ,CAAC,MAAM,EAAE,SAAS,cAAc,EAAE,CAAC;CAC5C;AAED,yFAAyF;AACzF,UAAU,cAAc;IACtB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED;;;;;;;;GAQG;AACH,QAAA,MAAM,eAAe,GAAU,cAAc,MAAM,EAAE,EAAE,WAAW,MAAM,KAAG,OAAO,CAAC,eAAe,CA6FjG,CAAC;AAEF,OAAO,EAAE,eAAe,EAAE,CAAC;AAC3B,YAAY,EAAE,cAAc,EAAE,eAAe,EAAE,CAAC"}
|
package/dist/discovery.js
CHANGED
|
@@ -1,21 +1,10 @@
|
|
|
1
1
|
/** Plugin discovery orchestrator: resolve → load → register pipeline. */
|
|
2
|
-
import
|
|
3
|
-
import { isErr, OFFICIAL_SCOPE, toErrorMessage } from '@opentabs-dev/shared';
|
|
2
|
+
import { isErr, toErrorMessage } from '@opentabs-dev/shared';
|
|
4
3
|
import { loadPlugin } from './loader.js';
|
|
5
4
|
import { log } from './logger.js';
|
|
6
5
|
import { buildRegistry } from './registry.js';
|
|
7
6
|
import { discoverGlobalNpmPlugins, resolvePluginPath } from './resolver.js';
|
|
8
7
|
import { isSkipNpmDiscovery } from './skip-npm-discovery.js';
|
|
9
|
-
/** Determine trust tier for an npm plugin directory path based on its package name. */
|
|
10
|
-
const npmTrustTier = (dir) => {
|
|
11
|
-
// Extract the immediate parent directory name (e.g. "@opentabs-dev") from a path like
|
|
12
|
-
// "/usr/lib/node_modules/@opentabs-dev/opentabs-plugin-slack". Using basename(dirname(dir))
|
|
13
|
-
// avoids false-positives where /@opentabs-dev/ appears elsewhere in the path (e.g. a
|
|
14
|
-
// user's home directory) but is not the package scope.
|
|
15
|
-
if (path.basename(path.dirname(dir)) === OFFICIAL_SCOPE)
|
|
16
|
-
return 'official';
|
|
17
|
-
return 'community';
|
|
18
|
-
};
|
|
19
8
|
/**
|
|
20
9
|
* Discover plugins from auto-discovered npm globals and explicit local paths.
|
|
21
10
|
*
|
|
@@ -38,8 +27,7 @@ const discoverPlugins = async (localPlugins, configDir) => {
|
|
|
38
27
|
}
|
|
39
28
|
// Phase 2 + 3: Resolve and load all plugins in parallel
|
|
40
29
|
const loadNpm = npmDirs.map(async (dir) => {
|
|
41
|
-
const
|
|
42
|
-
const loadResult = await loadPlugin(dir, trustTier, 'npm');
|
|
30
|
+
const loadResult = await loadPlugin(dir, 'npm');
|
|
43
31
|
if (isErr(loadResult)) {
|
|
44
32
|
errors.push({ specifier: dir, error: loadResult.error });
|
|
45
33
|
failures.push({ path: dir, error: loadResult.error });
|
|
@@ -60,7 +48,7 @@ const discoverPlugins = async (localPlugins, configDir) => {
|
|
|
60
48
|
return null;
|
|
61
49
|
}
|
|
62
50
|
const dir = resolveResult.value;
|
|
63
|
-
const loadResult = await loadPlugin(dir, 'local'
|
|
51
|
+
const loadResult = await loadPlugin(dir, 'local');
|
|
64
52
|
if (isErr(loadResult)) {
|
|
65
53
|
errors.push({ specifier, error: loadResult.error });
|
|
66
54
|
failures.push({ path: dir, error: loadResult.error });
|
|
@@ -100,10 +88,10 @@ const discoverPlugins = async (localPlugins, configDir) => {
|
|
|
100
88
|
const registry = buildRegistry(Array.from(merged.values()), failures);
|
|
101
89
|
for (const plugin of registry.plugins.values()) {
|
|
102
90
|
const toolNames = plugin.tools.map(t => t.name).join(', ');
|
|
103
|
-
log.info(`Discovered plugin: ${plugin.name} v${plugin.version} (${plugin.
|
|
91
|
+
log.info(`Discovered plugin: ${plugin.name} v${plugin.version} (${plugin.source}) from ${plugin.sourcePath ?? '(npm)'} — tools: [${toolNames}]`);
|
|
104
92
|
}
|
|
105
93
|
log.info(`Plugin discovery complete: ${registry.plugins.size} plugin(s) loaded, ${errors.length} error(s)`);
|
|
106
94
|
return { registry, errors };
|
|
107
95
|
};
|
|
108
|
-
export { discoverPlugins
|
|
96
|
+
export { discoverPlugins };
|
|
109
97
|
//# sourceMappingURL=discovery.js.map
|
package/dist/discovery.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"discovery.js","sourceRoot":"","sources":["../src/discovery.ts"],"names":[],"mappings":"AAAA,yEAAyE;AAEzE,OAAO,
|
|
1
|
+
{"version":3,"file":"discovery.js","sourceRoot":"","sources":["../src/discovery.ts"],"names":[],"mappings":"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"}
|