@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/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) => resolveCoreRuntime({
1677
- host: options.host,
1678
- port: options.port,
1679
- strictEnvPort: true
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
- "Persist worktree runtime metadata and open extension options for activation"
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 this worktree"
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
- program.name("browser-bridge").description("Browser Bridge CLI").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");
3843
- registerSessionCommands(program);
3844
- registerDriveCommands(program);
3845
- registerInspectCommands(program);
3846
- registerArtifactsCommands(program);
3847
- registerDiagnosticsCommands(program);
3848
- registerDialogCommands(program);
3849
- registerDevCommands(program);
3850
- registerOpenArtifactsCommand(program);
3851
- registerMcpCommand(program);
3852
- registerSkillCommands(program);
3853
- registerInstallCommand(program);
3854
- void program.parseAsync(process.argv);
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