@browserbridge/bbx 1.0.1 → 1.1.0
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/README.md +4 -4
- package/package.json +11 -13
- package/packages/agent-client/src/cli-helpers.js +33 -0
- package/packages/agent-client/src/cli.js +116 -41
- package/packages/agent-client/src/client.js +29 -4
- package/packages/agent-client/src/command-registry.js +3 -0
- package/packages/agent-client/src/detect.js +159 -48
- package/packages/agent-client/src/install.js +24 -1
- package/packages/agent-client/src/mcp-config.js +29 -10
- package/packages/agent-client/src/setup-status.js +12 -4
- package/packages/mcp-server/src/bin.js +57 -5
- package/packages/mcp-server/src/handlers.js +28 -7
- package/packages/mcp-server/src/server.js +12 -2
- package/packages/native-host/bin/bridge-daemon.js +33 -4
- package/packages/native-host/bin/install-manifest.js +24 -2
- package/packages/native-host/src/config.js +131 -6
- package/packages/native-host/src/daemon-process.js +396 -0
- package/packages/native-host/src/daemon.js +217 -68
- package/packages/native-host/src/framing.js +131 -11
- package/packages/native-host/src/install-manifest.js +121 -7
- package/packages/native-host/src/native-host.js +110 -73
- package/packages/protocol/src/capabilities.js +3 -0
- package/packages/protocol/src/defaults.js +1 -0
- package/packages/protocol/src/errors.js +4 -0
- package/packages/protocol/src/payload-cost.js +19 -6
- package/packages/protocol/src/protocol.js +143 -7
- package/packages/protocol/src/registry.js +11 -0
- package/packages/protocol/src/summary.js +18 -10
- package/packages/protocol/src/types.js +28 -3
- package/skills/browser-bridge/SKILL.md +2 -1
- package/skills/browser-bridge/references/interaction.md +1 -0
- package/skills/browser-bridge/references/protocol.md +2 -1
- package/CHANGELOG.md +0 -55
- package/assets/banner.jpg +0 -0
- package/assets/logo.png +0 -0
- package/assets/logo.svg +0 -65
- package/docs/api-reference.md +0 -157
- package/docs/cli-guide.md +0 -128
- package/docs/index.md +0 -25
- package/docs/manual-setup.md +0 -140
- package/docs/mcp-vs-cli.md +0 -258
- package/docs/publishing.md +0 -112
- package/docs/quickstart.md +0 -104
- package/docs/troubleshooting.md +0 -59
- package/docs/unpacked-extension.md +0 -72
- package/docs/usage-scenarios.md +0 -136
- package/manifest.json +0 -38
- package/packages/extension/assets/icon-128.png +0 -0
- package/packages/extension/assets/icon-16.png +0 -0
- package/packages/extension/assets/icon-32.png +0 -0
- package/packages/extension/assets/icon-48.png +0 -0
- package/packages/extension/src/background-helpers.js +0 -474
- package/packages/extension/src/background-routing.js +0 -89
- package/packages/extension/src/background.js +0 -3490
- package/packages/extension/src/content-script-helpers.js +0 -282
- package/packages/extension/src/content-script.js +0 -2043
- package/packages/extension/src/debugger-coordinator.js +0 -188
- package/packages/extension/src/sidepanel-helpers.js +0 -104
- package/packages/extension/ui/popup.html +0 -35
- package/packages/extension/ui/popup.js +0 -298
- package/packages/extension/ui/sidepanel.html +0 -102
- package/packages/extension/ui/sidepanel.js +0 -1771
- package/packages/extension/ui/ui.css +0 -1160
|
@@ -1,89 +0,0 @@
|
|
|
1
|
-
// @ts-check
|
|
2
|
-
|
|
3
|
-
import { ERROR_CODES } from '../../protocol/src/index.js';
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* @typedef {{
|
|
7
|
-
* tabId: number,
|
|
8
|
-
* windowId: number,
|
|
9
|
-
* title: string,
|
|
10
|
-
* url: string
|
|
11
|
-
* }} ResolvedTabTarget
|
|
12
|
-
*/
|
|
13
|
-
|
|
14
|
-
/**
|
|
15
|
-
* @param {string} url
|
|
16
|
-
* @returns {boolean}
|
|
17
|
-
*/
|
|
18
|
-
export function isRestrictedAutomationUrl(url) {
|
|
19
|
-
return /^(about:|chrome:|chrome-extension:|chrome-search:|devtools:|edge:|brave:|moz-extension:|view-source:)/i.test(
|
|
20
|
-
url
|
|
21
|
-
);
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
/**
|
|
25
|
-
* @param {number | null | undefined} requestTabId
|
|
26
|
-
* @param {chrome.tabs.Tab | null | undefined} explicitTab
|
|
27
|
-
* @param {chrome.tabs.Tab | null | undefined} activeTab
|
|
28
|
-
* @returns {chrome.tabs.Tab | null}
|
|
29
|
-
*/
|
|
30
|
-
export function selectRequestTabCandidate(requestTabId, explicitTab, activeTab) {
|
|
31
|
-
if (typeof requestTabId === 'number' && Number.isFinite(requestTabId)) {
|
|
32
|
-
return explicitTab ?? null;
|
|
33
|
-
}
|
|
34
|
-
return activeTab ?? null;
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
/**
|
|
38
|
-
* @param {chrome.tabs.Tab | null | undefined} tab
|
|
39
|
-
* @param {number} enabledWindowId
|
|
40
|
-
* @param {{ requireScriptable?: boolean }} [options]
|
|
41
|
-
* @returns {ResolvedTabTarget}
|
|
42
|
-
*/
|
|
43
|
-
export function resolveWindowScopedTab(tab, enabledWindowId, options = {}) {
|
|
44
|
-
const requireScriptable = options.requireScriptable !== false;
|
|
45
|
-
if (typeof tab?.id !== 'number' || !Number.isFinite(tab.id) || typeof tab.windowId !== 'number') {
|
|
46
|
-
throw new Error(ERROR_CODES.TAB_MISMATCH);
|
|
47
|
-
}
|
|
48
|
-
if (tab.windowId !== enabledWindowId) {
|
|
49
|
-
throw new Error(ERROR_CODES.ACCESS_DENIED);
|
|
50
|
-
}
|
|
51
|
-
if (typeof tab.url !== 'string' || !tab.url) {
|
|
52
|
-
throw new Error(ERROR_CODES.TAB_MISMATCH);
|
|
53
|
-
}
|
|
54
|
-
if (requireScriptable && isRestrictedAutomationUrl(tab.url)) {
|
|
55
|
-
throw new Error(ERROR_CODES.ACCESS_DENIED);
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
return {
|
|
59
|
-
tabId: tab.id,
|
|
60
|
-
windowId: tab.windowId,
|
|
61
|
-
title: tab.title ?? '',
|
|
62
|
-
url: tab.url,
|
|
63
|
-
};
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
/**
|
|
67
|
-
* @param {chrome.tabs.Tab | null | undefined} tab
|
|
68
|
-
* @returns {ResolvedTabTarget | null}
|
|
69
|
-
*/
|
|
70
|
-
export function normalizeRequestedAccessTab(tab) {
|
|
71
|
-
if (
|
|
72
|
-
typeof tab?.id !== 'number' ||
|
|
73
|
-
!Number.isFinite(tab.id) ||
|
|
74
|
-
typeof tab.windowId !== 'number' ||
|
|
75
|
-
typeof tab.url !== 'string' ||
|
|
76
|
-
!tab.url
|
|
77
|
-
) {
|
|
78
|
-
return null;
|
|
79
|
-
}
|
|
80
|
-
if (isRestrictedAutomationUrl(tab.url)) {
|
|
81
|
-
return null;
|
|
82
|
-
}
|
|
83
|
-
return {
|
|
84
|
-
tabId: tab.id,
|
|
85
|
-
windowId: tab.windowId,
|
|
86
|
-
title: tab.title ?? '',
|
|
87
|
-
url: tab.url,
|
|
88
|
-
};
|
|
89
|
-
}
|