@btraut/browser-bridge 0.9.0 → 0.11.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/CHANGELOG.md +22 -0
- package/README.md +19 -5
- package/dist/api.js +63 -12
- package/dist/api.js.map +2 -2
- package/dist/index.js +88 -26
- package/dist/index.js.map +2 -2
- package/extension/dist/options-ui.js +4 -4
- package/extension/dist/options-ui.js.map +2 -2
- package/extension/manifest.json +1 -1
- package/package.json +1 -1
- package/skills/browser-bridge/skill.json +1 -1
package/dist/index.js
CHANGED
|
@@ -90,6 +90,8 @@ var ENV_CORE_HOST = "BROWSER_BRIDGE_CORE_HOST";
|
|
|
90
90
|
var ENV_VISION_HOST = "BROWSER_VISION_CORE_HOST";
|
|
91
91
|
var ENV_CORE_PORT = "BROWSER_BRIDGE_CORE_PORT";
|
|
92
92
|
var ENV_VISION_PORT = "BROWSER_VISION_CORE_PORT";
|
|
93
|
+
var ENV_ISOLATED_MODE = "BROWSER_BRIDGE_ISOLATED_MODE";
|
|
94
|
+
var ENV_VISION_ISOLATED_MODE = "BROWSER_VISION_ISOLATED_MODE";
|
|
93
95
|
var RUNTIME_METADATA_RELATIVE_PATH = ".context/browser-bridge/dev.json";
|
|
94
96
|
var DEFAULT_LOG_DIRECTORY_RELATIVE_PATH = ".context/logs/browser-bridge";
|
|
95
97
|
var resolveCwd = (cwd) => (0, import_node_path.resolve)(cwd ?? process.cwd());
|
|
@@ -106,6 +108,22 @@ var normalizeHost = (value) => {
|
|
|
106
108
|
const trimmed = value.trim();
|
|
107
109
|
return trimmed.length > 0 ? trimmed : void 0;
|
|
108
110
|
};
|
|
111
|
+
var parseBoolean = (value) => {
|
|
112
|
+
if (typeof value === "boolean") {
|
|
113
|
+
return value;
|
|
114
|
+
}
|
|
115
|
+
if (typeof value !== "string") {
|
|
116
|
+
return void 0;
|
|
117
|
+
}
|
|
118
|
+
const normalized = value.trim().toLowerCase();
|
|
119
|
+
if (normalized === "1" || normalized === "true" || normalized === "yes" || normalized === "on") {
|
|
120
|
+
return true;
|
|
121
|
+
}
|
|
122
|
+
if (normalized === "0" || normalized === "false" || normalized === "no" || normalized === "off") {
|
|
123
|
+
return false;
|
|
124
|
+
}
|
|
125
|
+
return void 0;
|
|
126
|
+
};
|
|
109
127
|
var parsePort = (value, label, invalidPolicy) => {
|
|
110
128
|
if (value === void 0 || value === null) {
|
|
111
129
|
return void 0;
|
|
@@ -189,6 +207,13 @@ var resolveEnvPortRaw = (env) => {
|
|
|
189
207
|
}
|
|
190
208
|
return env[ENV_VISION_PORT];
|
|
191
209
|
};
|
|
210
|
+
var resolveEnvIsolatedMode = (env) => {
|
|
211
|
+
const bridge = parseBoolean(env[ENV_ISOLATED_MODE]);
|
|
212
|
+
if (bridge !== void 0) {
|
|
213
|
+
return bridge;
|
|
214
|
+
}
|
|
215
|
+
return parseBoolean(env[ENV_VISION_ISOLATED_MODE]);
|
|
216
|
+
};
|
|
192
217
|
var sanitizeMetadata = (raw) => {
|
|
193
218
|
if (!raw || typeof raw !== "object") {
|
|
194
219
|
return null;
|
|
@@ -199,8 +224,9 @@ var sanitizeMetadata = (raw) => {
|
|
|
199
224
|
const gitRoot = normalizeHost(candidate.git_root);
|
|
200
225
|
const worktreeId = normalizeHost(candidate.worktree_id);
|
|
201
226
|
const extensionId = normalizeHost(candidate.extension_id);
|
|
227
|
+
const isolatedMode = parseBoolean(candidate.isolated_mode);
|
|
202
228
|
const updatedAt = normalizeHost(candidate.updated_at);
|
|
203
|
-
if (!host && port === void 0 && !gitRoot && !worktreeId && !extensionId && !updatedAt) {
|
|
229
|
+
if (!host && port === void 0 && !gitRoot && !worktreeId && !extensionId && isolatedMode === void 0 && !updatedAt) {
|
|
204
230
|
return null;
|
|
205
231
|
}
|
|
206
232
|
return {
|
|
@@ -209,6 +235,7 @@ var sanitizeMetadata = (raw) => {
|
|
|
209
235
|
git_root: gitRoot,
|
|
210
236
|
worktree_id: worktreeId,
|
|
211
237
|
extension_id: extensionId,
|
|
238
|
+
isolated_mode: isolatedMode,
|
|
212
239
|
updated_at: updatedAt
|
|
213
240
|
};
|
|
214
241
|
};
|
|
@@ -334,6 +361,11 @@ var resolveCoreRuntime = (options = {}) => {
|
|
|
334
361
|
options.strictEnvPort ? "throw" : "ignore"
|
|
335
362
|
);
|
|
336
363
|
const metadataPort = parsePort(metadata?.port, "port", "ignore");
|
|
364
|
+
const optionIsolatedMode = options.isolatedMode;
|
|
365
|
+
const envIsolatedMode = resolveEnvIsolatedMode(env);
|
|
366
|
+
const metadataIsolatedMode = metadata?.isolated_mode;
|
|
367
|
+
const isolatedMode = optionIsolatedMode ?? envIsolatedMode ?? metadataIsolatedMode ?? false;
|
|
368
|
+
const isolatedModeSource = optionIsolatedMode !== void 0 ? "option" : envIsolatedMode !== void 0 ? "env" : metadataIsolatedMode !== void 0 ? "metadata" : "default";
|
|
337
369
|
let port;
|
|
338
370
|
let portSource;
|
|
339
371
|
if (optionPort !== void 0) {
|
|
@@ -342,12 +374,15 @@ var resolveCoreRuntime = (options = {}) => {
|
|
|
342
374
|
} else if (envPort !== void 0) {
|
|
343
375
|
port = envPort;
|
|
344
376
|
portSource = "env";
|
|
345
|
-
} else if (metadataPort !== void 0) {
|
|
377
|
+
} else if (metadataPort !== void 0 && isolatedMode) {
|
|
346
378
|
port = metadataPort;
|
|
347
379
|
portSource = "metadata";
|
|
348
|
-
} else {
|
|
380
|
+
} else if (isolatedMode) {
|
|
349
381
|
port = deterministicPort;
|
|
350
382
|
portSource = "deterministic";
|
|
383
|
+
} else {
|
|
384
|
+
port = LEGACY_DEFAULT_PORT;
|
|
385
|
+
portSource = "default";
|
|
351
386
|
}
|
|
352
387
|
return {
|
|
353
388
|
host,
|
|
@@ -358,7 +393,9 @@ var resolveCoreRuntime = (options = {}) => {
|
|
|
358
393
|
metadata,
|
|
359
394
|
gitRoot,
|
|
360
395
|
worktreeId: resolveWorktreeId({ cwd: resolvedCwd, gitRoot }),
|
|
361
|
-
deterministicPort
|
|
396
|
+
deterministicPort,
|
|
397
|
+
isolatedMode,
|
|
398
|
+
isolatedModeSource
|
|
362
399
|
};
|
|
363
400
|
};
|
|
364
401
|
|
|
@@ -1666,18 +1703,26 @@ var buildActivationOptionsUrl = (options) => {
|
|
|
1666
1703
|
return `chrome-extension://${options.extensionId}/options.html?${search.toString()}`;
|
|
1667
1704
|
};
|
|
1668
1705
|
var buildPersistedRuntimeMetadata = (runtime, extensionId) => ({
|
|
1706
|
+
...runtime.metadata ?? {},
|
|
1669
1707
|
host: runtime.host,
|
|
1670
1708
|
port: runtime.port,
|
|
1671
1709
|
git_root: runtime.gitRoot ?? runtime.metadata?.git_root,
|
|
1672
1710
|
worktree_id: runtime.worktreeId ?? runtime.metadata?.worktree_id,
|
|
1673
1711
|
extension_id: extensionId,
|
|
1712
|
+
isolated_mode: true,
|
|
1674
1713
|
updated_at: (/* @__PURE__ */ new Date()).toISOString()
|
|
1675
1714
|
});
|
|
1676
|
-
var resolveRuntimeForCommand = (options) =>
|
|
1677
|
-
|
|
1678
|
-
|
|
1679
|
-
|
|
1680
|
-
|
|
1715
|
+
var resolveRuntimeForCommand = (options, overrides = {}) => {
|
|
1716
|
+
const runtimeOptions = {
|
|
1717
|
+
host: options.host,
|
|
1718
|
+
port: options.port,
|
|
1719
|
+
strictEnvPort: true
|
|
1720
|
+
};
|
|
1721
|
+
if (overrides.isolatedMode !== void 0) {
|
|
1722
|
+
runtimeOptions.isolatedMode = overrides.isolatedMode;
|
|
1723
|
+
}
|
|
1724
|
+
return resolveCoreRuntime(runtimeOptions);
|
|
1725
|
+
};
|
|
1681
1726
|
var registerDevCommands = (program2) => {
|
|
1682
1727
|
const dev = program2.command("dev").description("Development commands");
|
|
1683
1728
|
dev.command("info").description("Print resolved runtime details for the current worktree").action(async (_options, command) => {
|
|
@@ -1701,13 +1746,15 @@ var registerDevCommands = (program2) => {
|
|
|
1701
1746
|
});
|
|
1702
1747
|
});
|
|
1703
1748
|
dev.command("activate").description(
|
|
1704
|
-
"
|
|
1749
|
+
"Enable isolated worktree routing and open extension options for activation"
|
|
1705
1750
|
).option(
|
|
1706
1751
|
"--extension-id <id>",
|
|
1707
|
-
"Chrome extension id to activate for
|
|
1752
|
+
"Chrome extension id to activate for isolated worktree routing"
|
|
1708
1753
|
).action(async (options, command) => {
|
|
1709
1754
|
await runLocal(command, async (globalOptions) => {
|
|
1710
|
-
const runtime = resolveRuntimeForCommand(globalOptions
|
|
1755
|
+
const runtime = resolveRuntimeForCommand(globalOptions, {
|
|
1756
|
+
isolatedMode: true
|
|
1757
|
+
});
|
|
1711
1758
|
const extension = resolveActivationExtensionId({
|
|
1712
1759
|
optionExtensionId: options.extensionId,
|
|
1713
1760
|
envExtensionId: process.env[ENV_EXTENSION_ID],
|
|
@@ -1716,7 +1763,7 @@ var registerDevCommands = (program2) => {
|
|
|
1716
1763
|
if (!extension) {
|
|
1717
1764
|
throw new CliError({
|
|
1718
1765
|
code: "INVALID_ARGUMENT",
|
|
1719
|
-
message: "Missing extension id. Provide --extension-id <id>, set BROWSER_BRIDGE_EXTENSION_ID, or persist extension_id in metadata by running dev activate with --extension-id once.",
|
|
1766
|
+
message: "Missing extension id. Provide --extension-id <id>, set BROWSER_BRIDGE_EXTENSION_ID, or persist extension_id in metadata by running dev activate with --extension-id once (only needed for isolated worktree routing).",
|
|
1720
1767
|
retryable: false,
|
|
1721
1768
|
details: {
|
|
1722
1769
|
metadataPath: runtime.metadataPath
|
|
@@ -1740,6 +1787,7 @@ var registerDevCommands = (program2) => {
|
|
|
1740
1787
|
extensionIdSource: extension.source,
|
|
1741
1788
|
host: runtime.host,
|
|
1742
1789
|
port: runtime.port,
|
|
1790
|
+
isolatedMode: true,
|
|
1743
1791
|
metadataPath,
|
|
1744
1792
|
activationUrl
|
|
1745
1793
|
}
|
|
@@ -3839,17 +3887,31 @@ var registerInstallCommand = (program2) => {
|
|
|
3839
3887
|
|
|
3840
3888
|
// packages/cli/src/index.ts
|
|
3841
3889
|
var program = new import_commander.Command();
|
|
3842
|
-
|
|
3843
|
-
|
|
3844
|
-
|
|
3845
|
-
|
|
3846
|
-
|
|
3847
|
-
|
|
3848
|
-
|
|
3849
|
-
|
|
3850
|
-
|
|
3851
|
-
|
|
3852
|
-
|
|
3853
|
-
|
|
3854
|
-
|
|
3890
|
+
var resolveCliVersion = async () => {
|
|
3891
|
+
try {
|
|
3892
|
+
return await readCliPackageVersion();
|
|
3893
|
+
} catch {
|
|
3894
|
+
return "0.0.0-unknown";
|
|
3895
|
+
}
|
|
3896
|
+
};
|
|
3897
|
+
var main = async () => {
|
|
3898
|
+
program.name("browser-bridge").description("Browser Bridge CLI").version(
|
|
3899
|
+
await resolveCliVersion(),
|
|
3900
|
+
"-v, --version",
|
|
3901
|
+
"Output Browser Bridge CLI version"
|
|
3902
|
+
).option("--host <host>", "Core host (default: 127.0.0.1)").option("--port <port>", "Core port (default: 3210)").option("--json", "Output JSON").option("--no-daemon", "Disable auto-starting Core");
|
|
3903
|
+
registerSessionCommands(program);
|
|
3904
|
+
registerDriveCommands(program);
|
|
3905
|
+
registerInspectCommands(program);
|
|
3906
|
+
registerArtifactsCommands(program);
|
|
3907
|
+
registerDiagnosticsCommands(program);
|
|
3908
|
+
registerDialogCommands(program);
|
|
3909
|
+
registerDevCommands(program);
|
|
3910
|
+
registerOpenArtifactsCommand(program);
|
|
3911
|
+
registerMcpCommand(program);
|
|
3912
|
+
registerSkillCommands(program);
|
|
3913
|
+
registerInstallCommand(program);
|
|
3914
|
+
await program.parseAsync(process.argv);
|
|
3915
|
+
};
|
|
3916
|
+
void main();
|
|
3855
3917
|
//# sourceMappingURL=index.js.map
|