@btraut/browser-bridge 0.12.1 → 0.13.1

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
@@ -28,6 +28,7 @@ var import_commander = require("commander");
28
28
 
29
29
  // packages/shared/src/core-readiness.ts
30
30
  var import_promises = require("node:timers/promises");
31
+ var import_node_net = require("node:net");
31
32
 
32
33
  // packages/shared/src/logging.ts
33
34
  var import_node_fs2 = require("node:fs");
@@ -45,9 +46,49 @@ var ENV_CORE_PORT = "BROWSER_BRIDGE_CORE_PORT";
45
46
  var ENV_VISION_PORT = "BROWSER_VISION_CORE_PORT";
46
47
  var ENV_ISOLATED_MODE = "BROWSER_BRIDGE_ISOLATED_MODE";
47
48
  var ENV_VISION_ISOLATED_MODE = "BROWSER_VISION_ISOLATED_MODE";
49
+ var ENV_BRIDGE_CWD = "BROWSER_BRIDGE_CWD";
50
+ var ENV_PROCESS_PWD = "PWD";
51
+ var ENV_PROCESS_INIT_CWD = "INIT_CWD";
52
+ var ENV_PROCESS_HOME = "HOME";
48
53
  var RUNTIME_METADATA_RELATIVE_PATH = ".context/browser-bridge/dev.json";
49
54
  var DEFAULT_LOG_DIRECTORY_RELATIVE_PATH = ".context/logs/browser-bridge";
50
- var resolveCwd = (cwd) => (0, import_node_path.resolve)(cwd ?? process.cwd());
55
+ var normalizeCandidatePath = (value) => {
56
+ if (typeof value !== "string") {
57
+ return void 0;
58
+ }
59
+ const trimmed = value.trim();
60
+ if (trimmed.length === 0) {
61
+ return void 0;
62
+ }
63
+ return (0, import_node_path.resolve)(trimmed);
64
+ };
65
+ var resolveCwd = (cwd) => {
66
+ const explicit = normalizeCandidatePath(cwd);
67
+ if (explicit) {
68
+ return explicit;
69
+ }
70
+ const envExplicit = normalizeCandidatePath(process.env[ENV_BRIDGE_CWD]);
71
+ if (envExplicit) {
72
+ return envExplicit;
73
+ }
74
+ const processCwd = normalizeCandidatePath(process.cwd());
75
+ if (processCwd && processCwd !== "/") {
76
+ return processCwd;
77
+ }
78
+ const processPwd = normalizeCandidatePath(process.env[ENV_PROCESS_PWD]);
79
+ if (processPwd && processPwd !== "/") {
80
+ return processPwd;
81
+ }
82
+ const initCwd = normalizeCandidatePath(process.env[ENV_PROCESS_INIT_CWD]);
83
+ if (initCwd && initCwd !== "/") {
84
+ return initCwd;
85
+ }
86
+ const home = normalizeCandidatePath(process.env[ENV_PROCESS_HOME]);
87
+ if (home) {
88
+ return home;
89
+ }
90
+ return processCwd ?? (0, import_node_path.resolve)(".");
91
+ };
51
92
  var resolveOptionalPath = (cwd, value) => {
52
93
  if (!value) {
53
94
  return void 0;
@@ -192,8 +233,8 @@ var sanitizeMetadata = (raw) => {
192
233
  updated_at: updatedAt
193
234
  };
194
235
  };
195
- var findGitRoot = (cwd = process.cwd()) => {
196
- let current = (0, import_node_path.resolve)(cwd);
236
+ var findGitRoot = (cwd) => {
237
+ let current = resolveCwd(cwd);
197
238
  while (true) {
198
239
  if ((0, import_node_fs.existsSync)((0, import_node_path.join)(current, ".git"))) {
199
240
  return current;
@@ -564,6 +605,27 @@ var DEFAULT_HEALTH_RETRY_MS = 250;
564
605
  var DEFAULT_HEALTH_ATTEMPTS = 20;
565
606
  var DEFAULT_HEALTH_TIMEOUT_MS = 2e3;
566
607
  var DEFAULT_HEALTH_BUDGET_MS = 15e3;
608
+ var DEFAULT_PORT_REACHABILITY_TIMEOUT_MS = 300;
609
+ var isPortReachableDefault = async (runtime) => {
610
+ return await new Promise((resolve4) => {
611
+ const socket = new import_node_net.Socket();
612
+ let settled = false;
613
+ const finish = (reachable) => {
614
+ if (settled) {
615
+ return;
616
+ }
617
+ settled = true;
618
+ socket.removeAllListeners();
619
+ socket.destroy();
620
+ resolve4(reachable);
621
+ };
622
+ socket.setTimeout(DEFAULT_PORT_REACHABILITY_TIMEOUT_MS);
623
+ socket.once("connect", () => finish(true));
624
+ socket.once("timeout", () => finish(false));
625
+ socket.once("error", () => finish(false));
626
+ socket.connect(runtime.port, runtime.host);
627
+ });
628
+ };
567
629
  var resolveTimeoutMs = (timeoutMs) => {
568
630
  const candidate = timeoutMs ?? (process.env.BROWSER_BRIDGE_CORE_TIMEOUT_MS ? Number.parseInt(process.env.BROWSER_BRIDGE_CORE_TIMEOUT_MS, 10) : process.env.BROWSER_VISION_CORE_TIMEOUT_MS ? Number.parseInt(process.env.BROWSER_VISION_CORE_TIMEOUT_MS, 10) : void 0);
569
631
  if (candidate === void 0 || candidate === null) {
@@ -629,57 +691,71 @@ var createCoreReadinessController = (options = {}) => {
629
691
  baseUrl = `http://${runtime.host}:${runtime.port}`;
630
692
  };
631
693
  const checkHealth = async () => {
632
- try {
633
- const controller = new AbortController();
634
- const timeout = setTimeout(() => controller.abort(), healthTimeoutMs);
694
+ for (const method of ["POST", "GET"]) {
635
695
  try {
636
- let response;
696
+ const controller = new AbortController();
697
+ const timeout = setTimeout(() => controller.abort(), healthTimeoutMs);
637
698
  try {
638
- response = await fetchImpl(`${baseUrl}/health`, {
639
- method: "GET",
640
- signal: controller.signal
641
- });
642
- } catch (error) {
643
- if (controller.signal.aborted || error instanceof Error && error.name === "AbortError") {
644
- logger.warn(`${logPrefix}.health.timeout`, {
699
+ let response;
700
+ try {
701
+ response = await fetchImpl(`${baseUrl}/health`, {
702
+ method,
703
+ signal: controller.signal
704
+ });
705
+ } catch (error) {
706
+ if (controller.signal.aborted || error instanceof Error && error.name === "AbortError") {
707
+ logger.warn(`${logPrefix}.health.timeout`, {
708
+ base_url: baseUrl,
709
+ method,
710
+ timeout_ms: healthTimeoutMs
711
+ });
712
+ continue;
713
+ }
714
+ logger.warn(`${logPrefix}.health.fetch_failed`, {
645
715
  base_url: baseUrl,
646
- timeout_ms: healthTimeoutMs
716
+ method,
717
+ error
647
718
  });
648
- return false;
719
+ throw error;
720
+ }
721
+ if (!response.ok) {
722
+ logger.warn(`${logPrefix}.health.non_ok`, {
723
+ base_url: baseUrl,
724
+ method,
725
+ status: response.status
726
+ });
727
+ continue;
728
+ }
729
+ const data = await response.json().catch(() => null);
730
+ const ok = Boolean(data?.ok);
731
+ if (ok) {
732
+ if (method === "GET") {
733
+ logger.info(`${logPrefix}.health.compat_probe`, {
734
+ base_url: baseUrl,
735
+ method
736
+ });
737
+ }
738
+ return true;
649
739
  }
650
- logger.warn(`${logPrefix}.health.fetch_failed`, {
651
- base_url: baseUrl,
652
- error
653
- });
654
- throw error;
655
- }
656
- if (!response.ok) {
657
- logger.warn(`${logPrefix}.health.non_ok`, {
658
- base_url: baseUrl,
659
- status: response.status
660
- });
661
- return false;
662
- }
663
- const data = await response.json().catch(() => null);
664
- const ok = Boolean(data?.ok);
665
- if (!ok) {
666
740
  logger.warn(`${logPrefix}.health.not_ready`, {
667
- base_url: baseUrl
741
+ base_url: baseUrl,
742
+ method
668
743
  });
744
+ } finally {
745
+ clearTimeout(timeout);
669
746
  }
670
- return ok;
671
- } finally {
672
- clearTimeout(timeout);
747
+ } catch (error) {
748
+ logger.warn(`${logPrefix}.health.error`, {
749
+ base_url: baseUrl,
750
+ method,
751
+ error
752
+ });
673
753
  }
674
- } catch (error) {
675
- logger.warn(`${logPrefix}.health.error`, {
676
- base_url: baseUrl,
677
- error
678
- });
679
- return false;
680
754
  }
755
+ return false;
681
756
  };
682
757
  const ensureCoreRunning = async () => {
758
+ const portReachabilityCheck = options.portReachabilityCheck ?? isPortReachableDefault;
683
759
  refreshRuntime();
684
760
  if (await checkHealth()) {
685
761
  logger.debug(`${logPrefix}.ensure_ready.already_running`, {
@@ -720,6 +796,21 @@ var createCoreReadinessController = (options = {}) => {
720
796
  health_budget_ms: healthBudgetMs,
721
797
  health_timeout_ms: healthTimeoutMs
722
798
  });
799
+ let portOccupied = false;
800
+ try {
801
+ portOccupied = await portReachabilityCheck(runtime);
802
+ } catch (error) {
803
+ logger.warn(`${logPrefix}.ensure_ready.port_probe_failed`, {
804
+ host: runtime.host,
805
+ port: runtime.port,
806
+ error
807
+ });
808
+ }
809
+ if (portOccupied) {
810
+ throw new Error(
811
+ `Core daemon failed to start on ${runtime.host}:${runtime.port}. A process is already listening on this port but did not pass Browser Bridge health checks. Retry with --no-daemon to reuse it, or enable isolated mode (BROWSER_BRIDGE_ISOLATED_MODE=1) for per-worktree ports.`
812
+ );
813
+ }
723
814
  throw new Error(
724
815
  `Core daemon failed to start on ${runtime.host}:${runtime.port}.`
725
816
  );
@@ -750,9 +841,24 @@ var createCoreReadinessController = (options = {}) => {
750
841
  };
751
842
  };
752
843
 
844
+ // packages/shared/src/contract-version.ts
845
+ var HTTP_CONTRACT_VERSION_HEADER = "x-browser-bridge-contract-version";
846
+ var HTTP_CONTRACT_VERSION = "2026-02-17.1";
847
+
753
848
  // packages/shared/src/errors.ts
849
+ var import_zod2 = require("zod");
850
+
851
+ // packages/shared/src/retry-policy.ts
754
852
  var import_zod = require("zod");
755
- var ErrorCodeSchema = import_zod.z.enum([
853
+ var RetryHintSchema = import_zod.z.object({
854
+ retryable: import_zod.z.boolean(),
855
+ reason: import_zod.z.string().optional(),
856
+ retry_after_ms: import_zod.z.number().int().nonnegative().optional(),
857
+ max_attempts: import_zod.z.number().int().positive().optional()
858
+ });
859
+
860
+ // packages/shared/src/errors.ts
861
+ var ErrorCodeSchema = import_zod2.z.enum([
756
862
  "UNKNOWN",
757
863
  "INVALID_ARGUMENT",
758
864
  "NOT_FOUND",
@@ -785,32 +891,59 @@ var ErrorCodeSchema = import_zod.z.enum([
785
891
  "EVALUATION_FAILED",
786
892
  "ARTIFACT_IO_ERROR"
787
893
  ]);
788
- var ErrorInfoSchema = import_zod.z.object({
894
+ var PublicErrorCodeSchema = import_zod2.z.enum([
895
+ "UNKNOWN",
896
+ "INVALID_ARGUMENT",
897
+ "NOT_FOUND",
898
+ "ALREADY_EXISTS",
899
+ "FAILED_PRECONDITION",
900
+ "UNAUTHORIZED",
901
+ "FORBIDDEN",
902
+ "CONFLICT",
903
+ "TIMEOUT",
904
+ "CANCELLED",
905
+ "UNAVAILABLE",
906
+ "RATE_LIMITED",
907
+ "NOT_IMPLEMENTED",
908
+ "INTERNAL"
909
+ ]);
910
+ var PublicErrorDetailsSchema = import_zod2.z.object({
911
+ legacy_code: ErrorCodeSchema.optional(),
912
+ reason: import_zod2.z.string().optional(),
913
+ resource: import_zod2.z.string().optional(),
914
+ field: import_zod2.z.string().optional(),
915
+ session_id: import_zod2.z.string().optional(),
916
+ tab_id: import_zod2.z.number().finite().optional(),
917
+ retry_after_ms: import_zod2.z.number().finite().optional(),
918
+ next_step: import_zod2.z.string().optional()
919
+ }).catchall(import_zod2.z.unknown());
920
+ var ErrorInfoSchema = import_zod2.z.object({
789
921
  code: ErrorCodeSchema,
790
- message: import_zod.z.string(),
791
- retryable: import_zod.z.boolean(),
792
- details: import_zod.z.record(import_zod.z.string(), import_zod.z.unknown()).optional()
922
+ message: import_zod2.z.string(),
923
+ retryable: import_zod2.z.boolean(),
924
+ retry: RetryHintSchema.optional(),
925
+ details: import_zod2.z.record(import_zod2.z.string(), import_zod2.z.unknown()).optional()
793
926
  });
794
- var ErrorEnvelopeSchema = import_zod.z.object({
795
- ok: import_zod.z.literal(false),
927
+ var ErrorEnvelopeSchema = import_zod2.z.object({
928
+ ok: import_zod2.z.literal(false),
796
929
  error: ErrorInfoSchema
797
930
  });
798
- var successEnvelopeSchema = (result) => import_zod.z.object({
799
- ok: import_zod.z.literal(true),
931
+ var successEnvelopeSchema = (result) => import_zod2.z.object({
932
+ ok: import_zod2.z.literal(true),
800
933
  result
801
934
  });
802
935
 
803
936
  // packages/shared/src/schemas.ts
804
- var import_zod2 = require("zod");
805
- var LocatorRoleSchema = import_zod2.z.object({
806
- name: import_zod2.z.string(),
807
- value: import_zod2.z.string().optional()
937
+ var import_zod3 = require("zod");
938
+ var LocatorRoleSchema = import_zod3.z.object({
939
+ name: import_zod3.z.string(),
940
+ value: import_zod3.z.string().optional()
808
941
  });
809
- var LocatorSchema = import_zod2.z.object({
810
- ref: import_zod2.z.string().min(1).optional(),
811
- testid: import_zod2.z.string().min(1).optional(),
812
- css: import_zod2.z.string().min(1).optional(),
813
- text: import_zod2.z.string().min(1).optional(),
942
+ var LocatorSchema = import_zod3.z.object({
943
+ ref: import_zod3.z.string().min(1).optional(),
944
+ testid: import_zod3.z.string().min(1).optional(),
945
+ css: import_zod3.z.string().min(1).optional(),
946
+ text: import_zod3.z.string().min(1).optional(),
814
947
  role: LocatorRoleSchema.optional()
815
948
  }).refine(
816
949
  (value) => Boolean(
@@ -820,12 +953,12 @@ var LocatorSchema = import_zod2.z.object({
820
953
  message: "Locator must include at least one selector."
821
954
  }
822
955
  );
823
- var OpResultSchema = import_zod2.z.object({
824
- ok: import_zod2.z.literal(true),
825
- message: import_zod2.z.string().optional(),
826
- warnings: import_zod2.z.array(import_zod2.z.string()).optional()
956
+ var OpResultSchema = import_zod3.z.object({
957
+ ok: import_zod3.z.literal(true),
958
+ message: import_zod3.z.string().optional(),
959
+ warnings: import_zod3.z.array(import_zod3.z.string()).optional()
827
960
  });
828
- var SessionStateSchema = import_zod2.z.enum([
961
+ var SessionStateSchema = import_zod3.z.enum([
829
962
  "INIT",
830
963
  "DRIVE_READY",
831
964
  "INSPECT_READY",
@@ -835,269 +968,270 @@ var SessionStateSchema = import_zod2.z.enum([
835
968
  "BROKEN",
836
969
  "CLOSED"
837
970
  ]);
838
- var SessionInfoSchema = import_zod2.z.object({
839
- session_id: import_zod2.z.string(),
971
+ var SessionInfoSchema = import_zod3.z.object({
972
+ session_id: import_zod3.z.string(),
840
973
  state: SessionStateSchema,
841
- created_at: import_zod2.z.string().datetime().optional()
974
+ created_at: import_zod3.z.string().datetime().optional()
842
975
  });
843
- var SessionPlaneStatusSchema = import_zod2.z.object({
844
- connected: import_zod2.z.boolean(),
845
- last_seen_at: import_zod2.z.string().datetime().optional(),
976
+ var SessionPlaneStatusSchema = import_zod3.z.object({
977
+ connected: import_zod3.z.boolean(),
978
+ last_seen_at: import_zod3.z.string().datetime().optional(),
846
979
  error: ErrorInfoSchema.optional()
847
980
  });
848
- var SessionStatusSchema = import_zod2.z.object({
849
- session_id: import_zod2.z.string(),
981
+ var SessionStatusSchema = import_zod3.z.object({
982
+ session_id: import_zod3.z.string(),
850
983
  state: SessionStateSchema,
851
984
  drive: SessionPlaneStatusSchema.optional(),
852
985
  inspect: SessionPlaneStatusSchema.optional(),
853
- updated_at: import_zod2.z.string().datetime().optional()
986
+ updated_at: import_zod3.z.string().datetime().optional()
854
987
  });
855
- var RecoverResultSchema = import_zod2.z.object({
856
- session_id: import_zod2.z.string(),
857
- recovered: import_zod2.z.boolean(),
988
+ var RecoverResultSchema = import_zod3.z.object({
989
+ session_id: import_zod3.z.string(),
990
+ recovered: import_zod3.z.boolean(),
858
991
  state: SessionStateSchema,
859
- message: import_zod2.z.string().optional()
992
+ message: import_zod3.z.string().optional()
860
993
  });
861
- var DiagnosticCheckSchema = import_zod2.z.object({
862
- name: import_zod2.z.string(),
863
- ok: import_zod2.z.boolean(),
864
- message: import_zod2.z.string().optional(),
865
- details: import_zod2.z.record(import_zod2.z.string(), import_zod2.z.unknown()).optional()
994
+ var DiagnosticCheckSchema = import_zod3.z.object({
995
+ name: import_zod3.z.string(),
996
+ ok: import_zod3.z.boolean(),
997
+ message: import_zod3.z.string().optional(),
998
+ details: import_zod3.z.record(import_zod3.z.string(), import_zod3.z.unknown()).optional()
866
999
  });
867
- var DiagnosticsRuntimeEndpointSchema = import_zod2.z.object({
868
- host: import_zod2.z.string().optional(),
869
- port: import_zod2.z.number().finite().optional(),
870
- base_url: import_zod2.z.string().optional(),
871
- host_source: import_zod2.z.string().optional(),
872
- port_source: import_zod2.z.string().optional(),
873
- metadata_path: import_zod2.z.string().optional(),
874
- isolated_mode: import_zod2.z.boolean().optional()
1000
+ var DiagnosticsRuntimeEndpointSchema = import_zod3.z.object({
1001
+ host: import_zod3.z.string().optional(),
1002
+ port: import_zod3.z.number().finite().optional(),
1003
+ base_url: import_zod3.z.string().optional(),
1004
+ host_source: import_zod3.z.string().optional(),
1005
+ port_source: import_zod3.z.string().optional(),
1006
+ metadata_path: import_zod3.z.string().optional(),
1007
+ isolated_mode: import_zod3.z.boolean().optional()
875
1008
  });
876
- var DiagnosticsRuntimeProcessSchema = import_zod2.z.object({
877
- component: import_zod2.z.enum(["cli", "mcp", "core"]).optional(),
878
- version: import_zod2.z.string().optional(),
879
- pid: import_zod2.z.number().int().positive().optional(),
880
- node_version: import_zod2.z.string().optional(),
881
- binary_path: import_zod2.z.string().optional(),
882
- argv_entry: import_zod2.z.string().optional()
1009
+ var DiagnosticsRuntimeProcessSchema = import_zod3.z.object({
1010
+ component: import_zod3.z.enum(["cli", "mcp", "core"]).optional(),
1011
+ version: import_zod3.z.string().optional(),
1012
+ pid: import_zod3.z.number().int().positive().optional(),
1013
+ node_version: import_zod3.z.string().optional(),
1014
+ binary_path: import_zod3.z.string().optional(),
1015
+ argv_entry: import_zod3.z.string().optional()
883
1016
  });
884
- var DiagnosticsRuntimeCallerSchema = import_zod2.z.object({
1017
+ var DiagnosticsRuntimeCallerSchema = import_zod3.z.object({
885
1018
  endpoint: DiagnosticsRuntimeEndpointSchema.optional(),
886
1019
  process: DiagnosticsRuntimeProcessSchema.optional()
887
1020
  });
888
- var DiagnosticsRuntimeContextSchema = import_zod2.z.object({
1021
+ var DiagnosticsRuntimeContextSchema = import_zod3.z.object({
889
1022
  caller: DiagnosticsRuntimeCallerSchema.optional(),
890
- core: import_zod2.z.object({
1023
+ core: import_zod3.z.object({
891
1024
  endpoint: DiagnosticsRuntimeEndpointSchema.optional(),
892
1025
  process: DiagnosticsRuntimeProcessSchema.optional()
893
1026
  }).optional(),
894
- extension: import_zod2.z.object({
895
- version: import_zod2.z.string().optional(),
1027
+ extension: import_zod3.z.object({
1028
+ version: import_zod3.z.string().optional(),
1029
+ protocol_version: import_zod3.z.string().optional(),
1030
+ capability_negotiated: import_zod3.z.boolean().optional(),
1031
+ capabilities: import_zod3.z.record(import_zod3.z.string(), import_zod3.z.boolean()).optional(),
896
1032
  endpoint: DiagnosticsRuntimeEndpointSchema.optional(),
897
- port_source: import_zod2.z.enum(["default", "storage"]).optional()
1033
+ port_source: import_zod3.z.enum(["default", "storage"]).optional()
898
1034
  }).optional()
899
1035
  });
900
- var DiagnosticReportSchema = import_zod2.z.object({
901
- ok: import_zod2.z.boolean(),
902
- session_id: import_zod2.z.string().optional(),
903
- checks: import_zod2.z.array(DiagnosticCheckSchema).optional(),
904
- sessions: import_zod2.z.object({
905
- count: import_zod2.z.number().finite().optional(),
906
- max_age_ms: import_zod2.z.number().finite().optional(),
907
- max_idle_ms: import_zod2.z.number().finite().optional()
1036
+ var DiagnosticReportSchema = import_zod3.z.object({
1037
+ ok: import_zod3.z.boolean(),
1038
+ session_id: import_zod3.z.string().optional(),
1039
+ checks: import_zod3.z.array(DiagnosticCheckSchema).optional(),
1040
+ sessions: import_zod3.z.object({
1041
+ count: import_zod3.z.number().finite().optional(),
1042
+ max_age_ms: import_zod3.z.number().finite().optional(),
1043
+ max_idle_ms: import_zod3.z.number().finite().optional()
908
1044
  }).optional(),
909
- extension: import_zod2.z.object({
910
- connected: import_zod2.z.boolean().optional(),
911
- version: import_zod2.z.string().optional(),
912
- last_seen_at: import_zod2.z.string().datetime().optional()
1045
+ extension: import_zod3.z.object({
1046
+ connected: import_zod3.z.boolean().optional(),
1047
+ version: import_zod3.z.string().optional(),
1048
+ last_seen_at: import_zod3.z.string().datetime().optional()
913
1049
  }).optional(),
914
- debugger: import_zod2.z.object({
915
- attached: import_zod2.z.boolean().optional(),
916
- idle_timeout_ms: import_zod2.z.number().finite().optional(),
917
- console_buffer_size: import_zod2.z.number().finite().optional(),
918
- network_buffer_size: import_zod2.z.number().finite().optional(),
1050
+ debugger: import_zod3.z.object({
1051
+ attached: import_zod3.z.boolean().optional(),
1052
+ idle_timeout_ms: import_zod3.z.number().finite().optional(),
1053
+ console_buffer_size: import_zod3.z.number().finite().optional(),
1054
+ network_buffer_size: import_zod3.z.number().finite().optional(),
919
1055
  last_error: ErrorInfoSchema.optional()
920
1056
  }).optional(),
921
- artifacts: import_zod2.z.object({
922
- root_dir: import_zod2.z.string().optional()
1057
+ artifacts: import_zod3.z.object({
1058
+ root_dir: import_zod3.z.string().optional()
923
1059
  }).optional(),
924
- recovery: import_zod2.z.object({
925
- last_attempt: import_zod2.z.object({
926
- session_id: import_zod2.z.string(),
927
- recovered: import_zod2.z.boolean(),
1060
+ recovery: import_zod3.z.object({
1061
+ last_attempt: import_zod3.z.object({
1062
+ session_id: import_zod3.z.string(),
1063
+ recovered: import_zod3.z.boolean(),
928
1064
  state: SessionStateSchema,
929
- message: import_zod2.z.string().optional(),
930
- at: import_zod2.z.string()
1065
+ message: import_zod3.z.string().optional(),
1066
+ at: import_zod3.z.string()
931
1067
  }).optional(),
932
- attempts: import_zod2.z.array(
933
- import_zod2.z.object({
934
- session_id: import_zod2.z.string(),
935
- recovered: import_zod2.z.boolean(),
1068
+ attempts: import_zod3.z.array(
1069
+ import_zod3.z.object({
1070
+ session_id: import_zod3.z.string(),
1071
+ recovered: import_zod3.z.boolean(),
936
1072
  state: SessionStateSchema,
937
- message: import_zod2.z.string().optional(),
938
- at: import_zod2.z.string()
1073
+ message: import_zod3.z.string().optional(),
1074
+ at: import_zod3.z.string()
939
1075
  })
940
1076
  ).optional(),
941
- success_count: import_zod2.z.number().finite().optional(),
942
- failure_count: import_zod2.z.number().finite().optional(),
943
- success_rate: import_zod2.z.number().finite().optional(),
944
- recent_failure_count: import_zod2.z.number().finite().optional(),
945
- loop_detected: import_zod2.z.boolean().optional()
1077
+ success_count: import_zod3.z.number().finite().optional(),
1078
+ failure_count: import_zod3.z.number().finite().optional(),
1079
+ success_rate: import_zod3.z.number().finite().optional(),
1080
+ recent_failure_count: import_zod3.z.number().finite().optional(),
1081
+ loop_detected: import_zod3.z.boolean().optional()
946
1082
  }).optional(),
947
- warnings: import_zod2.z.array(import_zod2.z.string()).optional(),
948
- notes: import_zod2.z.array(import_zod2.z.string()).optional(),
1083
+ warnings: import_zod3.z.array(import_zod3.z.string()).optional(),
1084
+ notes: import_zod3.z.array(import_zod3.z.string()).optional(),
949
1085
  runtime: DiagnosticsRuntimeContextSchema.optional()
950
1086
  });
951
- var SessionIdSchema = import_zod2.z.object({
952
- session_id: import_zod2.z.string().min(1)
1087
+ var SessionIdSchema = import_zod3.z.object({
1088
+ session_id: import_zod3.z.string().min(1)
953
1089
  });
954
- var SessionCreateInputSchema = import_zod2.z.object({}).strict().default({});
1090
+ var SessionCreateInputSchema = import_zod3.z.object({}).strict().default({});
955
1091
  var SessionCreateOutputSchema = SessionInfoSchema;
956
1092
  var SessionStatusInputSchema = SessionIdSchema;
957
1093
  var SessionStatusOutputSchema = SessionStatusSchema;
958
1094
  var SessionRecoverInputSchema = SessionIdSchema;
959
1095
  var SessionRecoverOutputSchema = RecoverResultSchema;
960
1096
  var SessionCloseInputSchema = SessionIdSchema;
961
- var SessionCloseOutputSchema = import_zod2.z.object({
962
- ok: import_zod2.z.boolean()
1097
+ var SessionCloseOutputSchema = import_zod3.z.object({
1098
+ ok: import_zod3.z.boolean()
963
1099
  });
964
- var DriveWaitConditionSchema = import_zod2.z.object({
965
- kind: import_zod2.z.enum(["locator_visible", "text_present", "url_matches"]),
966
- value: import_zod2.z.string().min(1)
1100
+ var DriveWaitConditionSchema = import_zod3.z.object({
1101
+ kind: import_zod3.z.enum(["locator_visible", "text_present", "url_matches"]),
1102
+ value: import_zod3.z.string().min(1)
967
1103
  });
968
- var DriveNavigateInputSchema = import_zod2.z.object({
969
- session_id: import_zod2.z.string().min(1),
970
- url: import_zod2.z.string().min(1),
971
- tab_id: import_zod2.z.number().finite().optional(),
972
- wait: import_zod2.z.enum(["none", "domcontentloaded"]).default("domcontentloaded")
1104
+ var DriveNavigateInputSchema = import_zod3.z.object({
1105
+ session_id: import_zod3.z.string().min(1).optional(),
1106
+ url: import_zod3.z.string().min(1),
1107
+ tab_id: import_zod3.z.number().finite().optional(),
1108
+ wait: import_zod3.z.enum(["none", "domcontentloaded"]).default("domcontentloaded")
1109
+ });
1110
+ var DriveNavigateOutputSchema = OpResultSchema.extend({
1111
+ session_id: import_zod3.z.string().min(1)
973
1112
  });
974
- var DriveNavigateOutputSchema = OpResultSchema;
975
- var DriveGoBackInputSchema = import_zod2.z.object({
976
- session_id: import_zod2.z.string().min(1),
977
- tab_id: import_zod2.z.number().finite().optional()
1113
+ var DriveGoBackInputSchema = import_zod3.z.object({
1114
+ session_id: import_zod3.z.string().min(1),
1115
+ tab_id: import_zod3.z.number().finite().optional()
978
1116
  });
979
1117
  var DriveGoBackOutputSchema = OpResultSchema;
980
- var DriveGoForwardInputSchema = import_zod2.z.object({
981
- session_id: import_zod2.z.string().min(1),
982
- tab_id: import_zod2.z.number().finite().optional()
1118
+ var DriveGoForwardInputSchema = import_zod3.z.object({
1119
+ session_id: import_zod3.z.string().min(1),
1120
+ tab_id: import_zod3.z.number().finite().optional()
983
1121
  });
984
1122
  var DriveGoForwardOutputSchema = OpResultSchema;
985
- var DriveBackInputSchema = DriveGoBackInputSchema;
986
- var DriveBackOutputSchema = OpResultSchema;
987
- var DriveForwardInputSchema = DriveGoForwardInputSchema;
988
- var DriveForwardOutputSchema = OpResultSchema;
989
- var DriveClickInputSchema = import_zod2.z.object({
990
- session_id: import_zod2.z.string().min(1),
1123
+ var DriveClickInputSchema = import_zod3.z.object({
1124
+ session_id: import_zod3.z.string().min(1),
991
1125
  locator: LocatorSchema,
992
- tab_id: import_zod2.z.number().finite().optional(),
993
- click_count: import_zod2.z.number().finite().optional()
1126
+ tab_id: import_zod3.z.number().finite().optional(),
1127
+ click_count: import_zod3.z.number().finite().optional()
994
1128
  });
995
1129
  var DriveClickOutputSchema = OpResultSchema;
996
- var DriveHoverInputSchema = import_zod2.z.object({
997
- session_id: import_zod2.z.string().min(1),
1130
+ var DriveHoverInputSchema = import_zod3.z.object({
1131
+ session_id: import_zod3.z.string().min(1),
998
1132
  locator: LocatorSchema,
999
- delay_ms: import_zod2.z.number().min(0).max(1e4).optional(),
1000
- tab_id: import_zod2.z.number().finite().optional()
1133
+ delay_ms: import_zod3.z.number().min(0).max(1e4).optional(),
1134
+ tab_id: import_zod3.z.number().finite().optional()
1001
1135
  });
1002
- var DriveHoverOutputSchema = import_zod2.z.object({
1003
- format: import_zod2.z.literal("html"),
1004
- snapshot: import_zod2.z.string()
1136
+ var DriveHoverOutputSchema = import_zod3.z.object({
1137
+ format: import_zod3.z.literal("html"),
1138
+ snapshot: import_zod3.z.string()
1005
1139
  });
1006
- var DriveSelectInputSchema = import_zod2.z.object({
1007
- session_id: import_zod2.z.string().min(1),
1140
+ var DriveSelectInputSchema = import_zod3.z.object({
1141
+ session_id: import_zod3.z.string().min(1),
1008
1142
  locator: LocatorSchema,
1009
- value: import_zod2.z.string().min(1).optional(),
1010
- text: import_zod2.z.string().min(1).optional(),
1011
- index: import_zod2.z.number().int().min(0).optional(),
1012
- tab_id: import_zod2.z.number().finite().optional()
1143
+ value: import_zod3.z.string().min(1).optional(),
1144
+ text: import_zod3.z.string().min(1).optional(),
1145
+ index: import_zod3.z.number().int().min(0).optional(),
1146
+ tab_id: import_zod3.z.number().finite().optional()
1013
1147
  }).refine((value) => value.value || value.text || value.index !== void 0, {
1014
1148
  message: "Either value, text, or index must be provided.",
1015
1149
  path: ["select"]
1016
1150
  });
1017
1151
  var DriveSelectOutputSchema = OpResultSchema;
1018
- var DriveTypeInputSchema = import_zod2.z.object({
1019
- session_id: import_zod2.z.string().min(1),
1152
+ var DriveTypeInputSchema = import_zod3.z.object({
1153
+ session_id: import_zod3.z.string().min(1),
1020
1154
  locator: LocatorSchema.optional(),
1021
- text: import_zod2.z.string().min(1),
1022
- tab_id: import_zod2.z.number().finite().optional(),
1023
- clear: import_zod2.z.boolean().default(false),
1024
- submit: import_zod2.z.boolean().default(false)
1155
+ text: import_zod3.z.string().min(1),
1156
+ tab_id: import_zod3.z.number().finite().optional(),
1157
+ clear: import_zod3.z.boolean().default(false),
1158
+ submit: import_zod3.z.boolean().default(false)
1025
1159
  });
1026
1160
  var DriveTypeOutputSchema = OpResultSchema;
1027
- var DriveFillFormFieldSchema = import_zod2.z.object({
1028
- selector: import_zod2.z.string().min(1).optional(),
1161
+ var DriveFillFormFieldSchema = import_zod3.z.object({
1162
+ selector: import_zod3.z.string().min(1).optional(),
1029
1163
  locator: LocatorSchema.optional(),
1030
- value: import_zod2.z.union([import_zod2.z.string(), import_zod2.z.boolean()]),
1031
- type: import_zod2.z.enum(["auto", "text", "select", "checkbox", "radio", "contentEditable"]).default("auto"),
1032
- submit: import_zod2.z.boolean().default(false)
1164
+ value: import_zod3.z.union([import_zod3.z.string(), import_zod3.z.boolean()]),
1165
+ type: import_zod3.z.enum(["auto", "text", "select", "checkbox", "radio", "contentEditable"]).default("auto"),
1166
+ submit: import_zod3.z.boolean().default(false)
1033
1167
  }).refine((value) => Boolean(value.selector || value.locator), {
1034
1168
  message: "fill_form field requires selector or locator.",
1035
1169
  path: ["selector"]
1036
1170
  });
1037
- var DriveFillFormInputSchema = import_zod2.z.object({
1038
- session_id: import_zod2.z.string().min(1),
1039
- fields: import_zod2.z.array(DriveFillFormFieldSchema).min(1),
1040
- tab_id: import_zod2.z.number().finite().optional()
1171
+ var DriveFillFormInputSchema = import_zod3.z.object({
1172
+ session_id: import_zod3.z.string().min(1),
1173
+ fields: import_zod3.z.array(DriveFillFormFieldSchema).min(1),
1174
+ tab_id: import_zod3.z.number().finite().optional()
1041
1175
  });
1042
- var DriveFillFormOutputSchema = import_zod2.z.object({
1043
- filled: import_zod2.z.number().finite(),
1044
- attempted: import_zod2.z.number().finite(),
1045
- errors: import_zod2.z.array(import_zod2.z.string()).optional()
1176
+ var DriveFillFormOutputSchema = import_zod3.z.object({
1177
+ filled: import_zod3.z.number().finite(),
1178
+ attempted: import_zod3.z.number().finite(),
1179
+ errors: import_zod3.z.array(import_zod3.z.string()).optional()
1046
1180
  });
1047
- var DriveDragInputSchema = import_zod2.z.object({
1048
- session_id: import_zod2.z.string().min(1),
1181
+ var DriveDragInputSchema = import_zod3.z.object({
1182
+ session_id: import_zod3.z.string().min(1),
1049
1183
  from: LocatorSchema,
1050
1184
  to: LocatorSchema,
1051
- steps: import_zod2.z.number().min(1).max(50).default(12),
1052
- tab_id: import_zod2.z.number().finite().optional()
1185
+ steps: import_zod3.z.number().min(1).max(50).default(12),
1186
+ tab_id: import_zod3.z.number().finite().optional()
1053
1187
  });
1054
1188
  var DriveDragOutputSchema = OpResultSchema;
1055
- var DriveHandleDialogInputSchema = import_zod2.z.object({
1056
- session_id: import_zod2.z.string().min(1),
1057
- action: import_zod2.z.enum(["accept", "dismiss"]),
1058
- promptText: import_zod2.z.string().optional(),
1059
- tab_id: import_zod2.z.number().finite().optional()
1189
+ var DriveHandleDialogInputSchema = import_zod3.z.object({
1190
+ session_id: import_zod3.z.string().min(1),
1191
+ action: import_zod3.z.enum(["accept", "dismiss"]),
1192
+ promptText: import_zod3.z.string().optional(),
1193
+ tab_id: import_zod3.z.number().finite().optional()
1060
1194
  });
1061
1195
  var DriveHandleDialogOutputSchema = OpResultSchema;
1062
1196
  var DialogAcceptInputSchema = SessionIdSchema.extend({
1063
- promptText: import_zod2.z.string().optional(),
1064
- tab_id: import_zod2.z.number().finite().optional()
1197
+ promptText: import_zod3.z.string().optional(),
1198
+ tab_id: import_zod3.z.number().finite().optional()
1065
1199
  });
1066
1200
  var DialogAcceptOutputSchema = OpResultSchema;
1067
1201
  var DialogDismissInputSchema = SessionIdSchema.extend({
1068
- tab_id: import_zod2.z.number().finite().optional()
1202
+ tab_id: import_zod3.z.number().finite().optional()
1069
1203
  });
1070
1204
  var DialogDismissOutputSchema = OpResultSchema;
1071
- var DriveKeyModifiersSchema = import_zod2.z.object({
1072
- ctrl: import_zod2.z.boolean().optional(),
1073
- alt: import_zod2.z.boolean().optional(),
1074
- shift: import_zod2.z.boolean().optional(),
1075
- meta: import_zod2.z.boolean().optional()
1205
+ var DriveKeyModifiersSchema = import_zod3.z.object({
1206
+ ctrl: import_zod3.z.boolean().optional(),
1207
+ alt: import_zod3.z.boolean().optional(),
1208
+ shift: import_zod3.z.boolean().optional(),
1209
+ meta: import_zod3.z.boolean().optional()
1076
1210
  });
1077
- var DriveKeyPressInputSchema = import_zod2.z.object({
1078
- session_id: import_zod2.z.string().min(1),
1079
- key: import_zod2.z.string().min(1),
1211
+ var DriveKeyPressInputSchema = import_zod3.z.object({
1212
+ session_id: import_zod3.z.string().min(1),
1213
+ key: import_zod3.z.string().min(1),
1080
1214
  modifiers: DriveKeyModifiersSchema.optional(),
1081
- tab_id: import_zod2.z.number().finite().optional()
1215
+ tab_id: import_zod3.z.number().finite().optional()
1082
1216
  });
1083
1217
  var DriveKeyPressOutputSchema = OpResultSchema;
1084
- var DriveKeyModifierSchema = import_zod2.z.enum(["ctrl", "alt", "shift", "meta"]);
1085
- var DriveKeyInputSchema = import_zod2.z.object({
1086
- session_id: import_zod2.z.string().min(1),
1087
- key: import_zod2.z.string().min(1),
1088
- modifiers: import_zod2.z.array(DriveKeyModifierSchema).optional(),
1089
- repeat: import_zod2.z.number().int().min(1).max(50).optional(),
1090
- tab_id: import_zod2.z.number().finite().optional()
1218
+ var DriveKeyModifierSchema = import_zod3.z.enum(["ctrl", "alt", "shift", "meta"]);
1219
+ var DriveKeyInputSchema = import_zod3.z.object({
1220
+ session_id: import_zod3.z.string().min(1),
1221
+ key: import_zod3.z.string().min(1),
1222
+ modifiers: import_zod3.z.array(DriveKeyModifierSchema).optional(),
1223
+ repeat: import_zod3.z.number().int().min(1).max(50).optional(),
1224
+ tab_id: import_zod3.z.number().finite().optional()
1091
1225
  });
1092
1226
  var DriveKeyOutputSchema = OpResultSchema;
1093
- var DriveScrollInputSchema = import_zod2.z.object({
1094
- session_id: import_zod2.z.string().min(1),
1095
- delta_x: import_zod2.z.number().finite().optional(),
1096
- delta_y: import_zod2.z.number().finite().optional(),
1097
- top: import_zod2.z.number().finite().optional(),
1098
- left: import_zod2.z.number().finite().optional(),
1099
- behavior: import_zod2.z.enum(["auto", "smooth"]).optional(),
1100
- tab_id: import_zod2.z.number().finite().optional()
1227
+ var DriveScrollInputSchema = import_zod3.z.object({
1228
+ session_id: import_zod3.z.string().min(1),
1229
+ delta_x: import_zod3.z.number().finite().optional(),
1230
+ delta_y: import_zod3.z.number().finite().optional(),
1231
+ top: import_zod3.z.number().finite().optional(),
1232
+ left: import_zod3.z.number().finite().optional(),
1233
+ behavior: import_zod3.z.enum(["auto", "smooth"]).optional(),
1234
+ tab_id: import_zod3.z.number().finite().optional()
1101
1235
  }).refine(
1102
1236
  (value) => value.delta_x !== void 0 || value.delta_y !== void 0 || value.top !== void 0 || value.left !== void 0,
1103
1237
  {
@@ -1106,245 +1240,245 @@ var DriveScrollInputSchema = import_zod2.z.object({
1106
1240
  }
1107
1241
  );
1108
1242
  var DriveScrollOutputSchema = OpResultSchema;
1109
- var DriveWaitForInputSchema = import_zod2.z.object({
1110
- session_id: import_zod2.z.string().min(1),
1243
+ var DriveWaitForInputSchema = import_zod3.z.object({
1244
+ session_id: import_zod3.z.string().min(1),
1111
1245
  condition: DriveWaitConditionSchema,
1112
- timeout_ms: import_zod2.z.number().finite().optional(),
1113
- tab_id: import_zod2.z.number().finite().optional()
1246
+ timeout_ms: import_zod3.z.number().finite().optional(),
1247
+ tab_id: import_zod3.z.number().finite().optional()
1114
1248
  });
1115
1249
  var DriveWaitForOutputSchema = OpResultSchema;
1116
- var DriveTabInfoSchema = import_zod2.z.object({
1117
- tab_id: import_zod2.z.number().finite(),
1118
- window_id: import_zod2.z.number().finite(),
1119
- url: import_zod2.z.string().min(1),
1120
- title: import_zod2.z.string(),
1121
- active: import_zod2.z.boolean().optional(),
1122
- last_active_at: import_zod2.z.string().datetime().optional()
1250
+ var DriveTabInfoSchema = import_zod3.z.object({
1251
+ tab_id: import_zod3.z.number().finite(),
1252
+ window_id: import_zod3.z.number().finite(),
1253
+ url: import_zod3.z.string().min(1),
1254
+ title: import_zod3.z.string(),
1255
+ active: import_zod3.z.boolean().optional(),
1256
+ last_active_at: import_zod3.z.string().datetime().optional()
1123
1257
  });
1124
1258
  var DriveTabListInputSchema = SessionIdSchema;
1125
- var DriveTabListOutputSchema = import_zod2.z.object({
1126
- tabs: import_zod2.z.array(DriveTabInfoSchema)
1259
+ var DriveTabListOutputSchema = import_zod3.z.object({
1260
+ tabs: import_zod3.z.array(DriveTabInfoSchema)
1127
1261
  });
1128
- var DriveTabActivateInputSchema = import_zod2.z.object({
1129
- session_id: import_zod2.z.string().min(1),
1130
- tab_id: import_zod2.z.number().finite()
1262
+ var DriveTabActivateInputSchema = import_zod3.z.object({
1263
+ session_id: import_zod3.z.string().min(1),
1264
+ tab_id: import_zod3.z.number().finite()
1131
1265
  });
1132
1266
  var DriveTabActivateOutputSchema = OpResultSchema;
1133
- var DriveTabCloseInputSchema = import_zod2.z.object({
1134
- session_id: import_zod2.z.string().min(1),
1135
- tab_id: import_zod2.z.number().finite()
1267
+ var DriveTabCloseInputSchema = import_zod3.z.object({
1268
+ session_id: import_zod3.z.string().min(1),
1269
+ tab_id: import_zod3.z.number().finite()
1136
1270
  });
1137
1271
  var DriveTabCloseOutputSchema = OpResultSchema;
1138
- var InspectDomFormatSchema = import_zod2.z.enum(["ax", "html"]);
1139
- var InspectConsistencySchema = import_zod2.z.enum(["best_effort", "quiesce"]);
1140
- var TargetHintSchema = import_zod2.z.object({
1141
- url: import_zod2.z.string().min(1).optional(),
1142
- title: import_zod2.z.string().min(1).optional(),
1143
- last_active_at: import_zod2.z.string().optional(),
1144
- lastActiveAt: import_zod2.z.string().optional()
1272
+ var InspectDomFormatSchema = import_zod3.z.enum(["ax", "html"]);
1273
+ var InspectConsistencySchema = import_zod3.z.enum(["best_effort", "quiesce"]);
1274
+ var TargetHintSchema = import_zod3.z.object({
1275
+ url: import_zod3.z.string().min(1).optional(),
1276
+ title: import_zod3.z.string().min(1).optional(),
1277
+ last_active_at: import_zod3.z.string().optional(),
1278
+ lastActiveAt: import_zod3.z.string().optional()
1145
1279
  });
1146
- var FormFieldInfoSchema = import_zod2.z.object({
1147
- name: import_zod2.z.string(),
1148
- type: import_zod2.z.string(),
1149
- value: import_zod2.z.string(),
1150
- options: import_zod2.z.array(import_zod2.z.string()).optional()
1280
+ var FormFieldInfoSchema = import_zod3.z.object({
1281
+ name: import_zod3.z.string(),
1282
+ type: import_zod3.z.string(),
1283
+ value: import_zod3.z.string(),
1284
+ options: import_zod3.z.array(import_zod3.z.string()).optional()
1151
1285
  });
1152
- var FormInfoSchema = import_zod2.z.object({
1153
- selector: import_zod2.z.string(),
1154
- action: import_zod2.z.string().optional(),
1155
- method: import_zod2.z.string().optional(),
1156
- fields: import_zod2.z.array(FormFieldInfoSchema)
1286
+ var FormInfoSchema = import_zod3.z.object({
1287
+ selector: import_zod3.z.string(),
1288
+ action: import_zod3.z.string().optional(),
1289
+ method: import_zod3.z.string().optional(),
1290
+ fields: import_zod3.z.array(FormFieldInfoSchema)
1157
1291
  });
1158
- var StorageEntrySchema = import_zod2.z.object({
1159
- key: import_zod2.z.string(),
1160
- value: import_zod2.z.string()
1292
+ var StorageEntrySchema = import_zod3.z.object({
1293
+ key: import_zod3.z.string(),
1294
+ value: import_zod3.z.string()
1161
1295
  });
1162
- var PageStateSchema = import_zod2.z.object({
1163
- forms: import_zod2.z.array(FormInfoSchema),
1164
- localStorage: import_zod2.z.array(StorageEntrySchema),
1165
- sessionStorage: import_zod2.z.array(StorageEntrySchema),
1166
- cookies: import_zod2.z.array(StorageEntrySchema),
1167
- warnings: import_zod2.z.array(import_zod2.z.string()).optional()
1296
+ var PageStateSchema = import_zod3.z.object({
1297
+ forms: import_zod3.z.array(FormInfoSchema),
1298
+ localStorage: import_zod3.z.array(StorageEntrySchema),
1299
+ sessionStorage: import_zod3.z.array(StorageEntrySchema),
1300
+ cookies: import_zod3.z.array(StorageEntrySchema),
1301
+ warnings: import_zod3.z.array(import_zod3.z.string()).optional()
1168
1302
  });
1169
- var DomSnapshotSchema = import_zod2.z.object({
1303
+ var DomSnapshotSchema = import_zod3.z.object({
1170
1304
  format: InspectDomFormatSchema,
1171
- snapshot: import_zod2.z.unknown()
1305
+ snapshot: import_zod3.z.unknown()
1172
1306
  }).passthrough();
1173
- var InspectDomSnapshotInputSchema = import_zod2.z.object({
1174
- session_id: import_zod2.z.string().min(1),
1307
+ var InspectDomSnapshotInputSchema = import_zod3.z.object({
1308
+ session_id: import_zod3.z.string().min(1),
1175
1309
  format: InspectDomFormatSchema.default("ax"),
1176
1310
  consistency: InspectConsistencySchema.default("best_effort"),
1177
- interactive: import_zod2.z.boolean().default(false),
1178
- compact: import_zod2.z.boolean().default(false),
1311
+ interactive: import_zod3.z.boolean().default(false),
1312
+ compact: import_zod3.z.boolean().default(false),
1179
1313
  // Used primarily to bound large AX trees for LLM/agent consumption.
1180
1314
  // CLI passes this as a string, so coerce for convenience.
1181
- max_nodes: import_zod2.z.coerce.number().int().positive().max(5e4).optional(),
1182
- selector: import_zod2.z.string().min(1).optional(),
1315
+ max_nodes: import_zod3.z.coerce.number().int().positive().max(5e4).optional(),
1316
+ selector: import_zod3.z.string().min(1).optional(),
1183
1317
  target: TargetHintSchema.optional()
1184
1318
  });
1185
1319
  var InspectDomSnapshotOutputSchema = DomSnapshotSchema;
1186
- var DomDiffResultSchema = import_zod2.z.object({
1187
- added: import_zod2.z.array(import_zod2.z.string()),
1188
- removed: import_zod2.z.array(import_zod2.z.string()),
1189
- changed: import_zod2.z.array(import_zod2.z.string()),
1190
- summary: import_zod2.z.string()
1320
+ var DomDiffResultSchema = import_zod3.z.object({
1321
+ added: import_zod3.z.array(import_zod3.z.string()),
1322
+ removed: import_zod3.z.array(import_zod3.z.string()),
1323
+ changed: import_zod3.z.array(import_zod3.z.string()),
1324
+ summary: import_zod3.z.string()
1191
1325
  });
1192
1326
  var InspectDomDiffInputSchema = SessionIdSchema;
1193
1327
  var InspectDomDiffOutputSchema = DomDiffResultSchema;
1194
1328
  var InspectFindRoleInputSchema = SessionIdSchema.extend({
1195
- kind: import_zod2.z.literal("role"),
1196
- role: import_zod2.z.string().min(1),
1197
- name: import_zod2.z.string().min(1).optional(),
1329
+ kind: import_zod3.z.literal("role"),
1330
+ role: import_zod3.z.string().min(1),
1331
+ name: import_zod3.z.string().min(1).optional(),
1198
1332
  target: TargetHintSchema.optional()
1199
1333
  });
1200
1334
  var InspectFindTextInputSchema = SessionIdSchema.extend({
1201
- kind: import_zod2.z.literal("text"),
1202
- text: import_zod2.z.string().min(1),
1335
+ kind: import_zod3.z.literal("text"),
1336
+ text: import_zod3.z.string().min(1),
1203
1337
  target: TargetHintSchema.optional()
1204
1338
  });
1205
1339
  var InspectFindLabelInputSchema = SessionIdSchema.extend({
1206
- kind: import_zod2.z.literal("label"),
1207
- label: import_zod2.z.string().min(1),
1340
+ kind: import_zod3.z.literal("label"),
1341
+ label: import_zod3.z.string().min(1),
1208
1342
  target: TargetHintSchema.optional()
1209
1343
  });
1210
- var InspectFindInputSchema = import_zod2.z.discriminatedUnion("kind", [
1344
+ var InspectFindInputSchema = import_zod3.z.discriminatedUnion("kind", [
1211
1345
  InspectFindRoleInputSchema,
1212
1346
  InspectFindTextInputSchema,
1213
1347
  InspectFindLabelInputSchema
1214
1348
  ]);
1215
- var InspectFindMatchSchema = import_zod2.z.object({
1216
- ref: import_zod2.z.string(),
1217
- role: import_zod2.z.string().optional(),
1218
- name: import_zod2.z.string().optional()
1349
+ var InspectFindMatchSchema = import_zod3.z.object({
1350
+ ref: import_zod3.z.string(),
1351
+ role: import_zod3.z.string().optional(),
1352
+ name: import_zod3.z.string().optional()
1219
1353
  });
1220
- var InspectFindOutputSchema = import_zod2.z.object({
1221
- matches: import_zod2.z.array(InspectFindMatchSchema),
1222
- warnings: import_zod2.z.array(import_zod2.z.string()).optional()
1354
+ var InspectFindOutputSchema = import_zod3.z.object({
1355
+ matches: import_zod3.z.array(InspectFindMatchSchema),
1356
+ warnings: import_zod3.z.array(import_zod3.z.string()).optional()
1223
1357
  });
1224
1358
  var InspectPageStateInputSchema = SessionIdSchema.extend({
1225
1359
  target: TargetHintSchema.optional()
1226
1360
  });
1227
1361
  var InspectPageStateOutputSchema = PageStateSchema;
1228
- var InspectExtractContentFormatSchema = import_zod2.z.enum([
1362
+ var InspectExtractContentFormatSchema = import_zod3.z.enum([
1229
1363
  "markdown",
1230
1364
  "text",
1231
1365
  "article_json"
1232
1366
  ]);
1233
1367
  var InspectExtractContentInputSchema = SessionIdSchema.extend({
1234
1368
  format: InspectExtractContentFormatSchema.default("markdown"),
1235
- include_metadata: import_zod2.z.boolean().default(true),
1369
+ include_metadata: import_zod3.z.boolean().default(true),
1236
1370
  target: TargetHintSchema.optional()
1237
1371
  });
1238
- var InspectExtractContentOutputSchema = import_zod2.z.object({
1239
- content: import_zod2.z.string(),
1240
- title: import_zod2.z.string().optional(),
1241
- byline: import_zod2.z.string().optional(),
1242
- excerpt: import_zod2.z.string().optional(),
1243
- siteName: import_zod2.z.string().optional(),
1244
- warnings: import_zod2.z.array(import_zod2.z.string()).optional()
1372
+ var InspectExtractContentOutputSchema = import_zod3.z.object({
1373
+ content: import_zod3.z.string(),
1374
+ title: import_zod3.z.string().optional(),
1375
+ byline: import_zod3.z.string().optional(),
1376
+ excerpt: import_zod3.z.string().optional(),
1377
+ siteName: import_zod3.z.string().optional(),
1378
+ warnings: import_zod3.z.array(import_zod3.z.string()).optional()
1245
1379
  });
1246
1380
  var InspectConsoleListInputSchema = SessionIdSchema.extend({
1247
1381
  target: TargetHintSchema.optional()
1248
1382
  });
1249
- var ConsoleSourceLocationSchema = import_zod2.z.object({
1250
- url: import_zod2.z.string().optional(),
1383
+ var ConsoleSourceLocationSchema = import_zod3.z.object({
1384
+ url: import_zod3.z.string().optional(),
1251
1385
  // 1-based line/column for human readability.
1252
- line: import_zod2.z.number().int().positive().optional(),
1253
- column: import_zod2.z.number().int().positive().optional()
1386
+ line: import_zod3.z.number().int().positive().optional(),
1387
+ column: import_zod3.z.number().int().positive().optional()
1254
1388
  }).passthrough();
1255
- var ConsoleStackFrameSchema = import_zod2.z.object({
1256
- functionName: import_zod2.z.string().optional(),
1257
- url: import_zod2.z.string().optional(),
1389
+ var ConsoleStackFrameSchema = import_zod3.z.object({
1390
+ functionName: import_zod3.z.string().optional(),
1391
+ url: import_zod3.z.string().optional(),
1258
1392
  // 1-based line/column for human readability.
1259
- line: import_zod2.z.number().int().positive().optional(),
1260
- column: import_zod2.z.number().int().positive().optional()
1393
+ line: import_zod3.z.number().int().positive().optional(),
1394
+ column: import_zod3.z.number().int().positive().optional()
1261
1395
  }).passthrough();
1262
- var ConsoleRemoteObjectSchema = import_zod2.z.object({
1263
- type: import_zod2.z.string().optional(),
1264
- subtype: import_zod2.z.string().optional(),
1265
- description: import_zod2.z.string().optional(),
1266
- value: import_zod2.z.unknown().optional(),
1267
- unserializableValue: import_zod2.z.string().optional()
1396
+ var ConsoleRemoteObjectSchema = import_zod3.z.object({
1397
+ type: import_zod3.z.string().optional(),
1398
+ subtype: import_zod3.z.string().optional(),
1399
+ description: import_zod3.z.string().optional(),
1400
+ value: import_zod3.z.unknown().optional(),
1401
+ unserializableValue: import_zod3.z.string().optional()
1268
1402
  }).passthrough();
1269
- var ConsoleEntrySchema = import_zod2.z.object({
1270
- level: import_zod2.z.string().optional(),
1271
- text: import_zod2.z.string().optional(),
1272
- timestamp: import_zod2.z.string().datetime().optional(),
1403
+ var ConsoleEntrySchema = import_zod3.z.object({
1404
+ level: import_zod3.z.string().optional(),
1405
+ text: import_zod3.z.string().optional(),
1406
+ timestamp: import_zod3.z.string().datetime().optional(),
1273
1407
  source: ConsoleSourceLocationSchema.optional(),
1274
- stack: import_zod2.z.array(ConsoleStackFrameSchema).optional(),
1408
+ stack: import_zod3.z.array(ConsoleStackFrameSchema).optional(),
1275
1409
  exception: ConsoleRemoteObjectSchema.optional(),
1276
- args: import_zod2.z.array(ConsoleRemoteObjectSchema).optional()
1410
+ args: import_zod3.z.array(ConsoleRemoteObjectSchema).optional()
1277
1411
  }).passthrough();
1278
- var ConsoleListSchema = import_zod2.z.object({
1279
- entries: import_zod2.z.array(ConsoleEntrySchema)
1412
+ var ConsoleListSchema = import_zod3.z.object({
1413
+ entries: import_zod3.z.array(ConsoleEntrySchema)
1280
1414
  }).passthrough();
1281
1415
  var InspectConsoleListOutputSchema = ConsoleListSchema;
1282
- var ArtifactInfoSchema = import_zod2.z.object({
1283
- artifact_id: import_zod2.z.string(),
1284
- path: import_zod2.z.string(),
1285
- mime: import_zod2.z.string()
1416
+ var ArtifactInfoSchema = import_zod3.z.object({
1417
+ artifact_id: import_zod3.z.string(),
1418
+ path: import_zod3.z.string(),
1419
+ mime: import_zod3.z.string()
1286
1420
  });
1287
1421
  var InspectNetworkHarInputSchema = SessionIdSchema.extend({
1288
1422
  target: TargetHintSchema.optional()
1289
1423
  });
1290
1424
  var InspectNetworkHarOutputSchema = ArtifactInfoSchema;
1291
- var InspectEvaluateInputSchema = import_zod2.z.object({
1292
- session_id: import_zod2.z.string().min(1),
1293
- expression: import_zod2.z.string().min(1).optional(),
1425
+ var InspectEvaluateInputSchema = import_zod3.z.object({
1426
+ session_id: import_zod3.z.string().min(1),
1427
+ expression: import_zod3.z.string().min(1).optional(),
1294
1428
  target: TargetHintSchema.optional()
1295
1429
  });
1296
- var EvaluateResultSchema = import_zod2.z.object({
1297
- value: import_zod2.z.unknown().optional(),
1298
- exception: import_zod2.z.unknown().optional()
1430
+ var EvaluateResultSchema = import_zod3.z.object({
1431
+ value: import_zod3.z.unknown().optional(),
1432
+ exception: import_zod3.z.unknown().optional()
1299
1433
  }).passthrough();
1300
1434
  var InspectEvaluateOutputSchema = EvaluateResultSchema;
1301
1435
  var InspectPerformanceMetricsInputSchema = SessionIdSchema.extend({
1302
1436
  target: TargetHintSchema.optional()
1303
1437
  });
1304
- var PerformanceMetricSchema = import_zod2.z.object({
1305
- name: import_zod2.z.string(),
1306
- value: import_zod2.z.number().finite()
1438
+ var PerformanceMetricSchema = import_zod3.z.object({
1439
+ name: import_zod3.z.string(),
1440
+ value: import_zod3.z.number().finite()
1307
1441
  }).passthrough();
1308
- var PerformanceMetricsSchema = import_zod2.z.object({
1309
- metrics: import_zod2.z.array(PerformanceMetricSchema)
1442
+ var PerformanceMetricsSchema = import_zod3.z.object({
1443
+ metrics: import_zod3.z.array(PerformanceMetricSchema)
1310
1444
  }).passthrough();
1311
1445
  var InspectPerformanceMetricsOutputSchema = PerformanceMetricsSchema;
1312
- var ArtifactsScreenshotInputSchema = import_zod2.z.object({
1313
- session_id: import_zod2.z.string().min(1),
1314
- target: import_zod2.z.enum(["viewport", "full"]).default("viewport"),
1315
- fullPage: import_zod2.z.boolean().default(false),
1316
- selector: import_zod2.z.string().min(1).optional(),
1317
- format: import_zod2.z.enum(["png", "jpeg", "webp"]).default("png"),
1318
- quality: import_zod2.z.number().min(0).max(100).optional()
1446
+ var ArtifactsScreenshotInputSchema = import_zod3.z.object({
1447
+ session_id: import_zod3.z.string().min(1),
1448
+ target: import_zod3.z.enum(["viewport", "full"]).default("viewport"),
1449
+ fullPage: import_zod3.z.boolean().default(false),
1450
+ selector: import_zod3.z.string().min(1).optional(),
1451
+ format: import_zod3.z.enum(["png", "jpeg", "webp"]).default("png"),
1452
+ quality: import_zod3.z.number().min(0).max(100).optional()
1319
1453
  });
1320
1454
  var ArtifactsScreenshotOutputSchema = ArtifactInfoSchema;
1321
- var HealthCheckInputSchema = import_zod2.z.object({});
1322
- var HealthCheckOutputSchema = import_zod2.z.object({
1323
- started_at: import_zod2.z.string().min(1),
1324
- uptime_ms: import_zod2.z.number().finite().nonnegative(),
1325
- memory: import_zod2.z.object({
1326
- rss: import_zod2.z.number().finite().nonnegative(),
1327
- heapTotal: import_zod2.z.number().finite().nonnegative(),
1328
- heapUsed: import_zod2.z.number().finite().nonnegative(),
1329
- external: import_zod2.z.number().finite().nonnegative(),
1330
- arrayBuffers: import_zod2.z.number().finite().nonnegative().optional()
1455
+ var HealthCheckInputSchema = import_zod3.z.object({});
1456
+ var HealthCheckOutputSchema = import_zod3.z.object({
1457
+ started_at: import_zod3.z.string().min(1),
1458
+ uptime_ms: import_zod3.z.number().finite().nonnegative(),
1459
+ memory: import_zod3.z.object({
1460
+ rss: import_zod3.z.number().finite().nonnegative(),
1461
+ heapTotal: import_zod3.z.number().finite().nonnegative(),
1462
+ heapUsed: import_zod3.z.number().finite().nonnegative(),
1463
+ external: import_zod3.z.number().finite().nonnegative(),
1464
+ arrayBuffers: import_zod3.z.number().finite().nonnegative().optional()
1331
1465
  }).passthrough(),
1332
- sessions: import_zod2.z.object({
1333
- active: import_zod2.z.number().finite().nonnegative()
1466
+ sessions: import_zod3.z.object({
1467
+ active: import_zod3.z.number().finite().nonnegative()
1334
1468
  }).passthrough(),
1335
- extension: import_zod2.z.object({
1336
- connected: import_zod2.z.boolean(),
1337
- last_seen_at: import_zod2.z.string().min(1).optional()
1469
+ extension: import_zod3.z.object({
1470
+ connected: import_zod3.z.boolean(),
1471
+ last_seen_at: import_zod3.z.string().min(1).optional()
1338
1472
  }).passthrough()
1339
1473
  }).passthrough();
1340
- var DiagnosticsDoctorInputSchema = import_zod2.z.object({
1341
- session_id: import_zod2.z.string().min(1).optional(),
1474
+ var DiagnosticsDoctorInputSchema = import_zod3.z.object({
1475
+ session_id: import_zod3.z.string().min(1).optional(),
1342
1476
  caller: DiagnosticsRuntimeCallerSchema.optional()
1343
1477
  });
1344
1478
  var DiagnosticsDoctorOutputSchema = DiagnosticReportSchema;
1345
1479
 
1346
1480
  // packages/cli/src/cli-output.ts
1347
- var import_zod3 = require("zod");
1481
+ var import_zod4 = require("zod");
1348
1482
 
1349
1483
  // packages/cli/src/core-client.ts
1350
1484
  var import_node_child_process = require("node:child_process");
@@ -1378,6 +1512,7 @@ var createCoreClient = (options = {}) => {
1378
1512
  const fetchImpl = options.fetchImpl ?? fetch;
1379
1513
  const spawnImpl = options.spawnImpl ?? import_node_child_process.spawn;
1380
1514
  const timeoutMs = resolveTimeoutMs2(options.timeoutMs);
1515
+ const componentVersion = process.env.BROWSER_BRIDGE_VERSION ?? process.env.npm_package_version;
1381
1516
  const readiness = createCoreReadinessController({
1382
1517
  host: options.host,
1383
1518
  port: options.port,
@@ -1441,7 +1576,8 @@ startCoreServer({ ${startOptions.join(
1441
1576
  response = await fetchImpl(`${readiness.baseUrl}${requestPath}`, {
1442
1577
  method,
1443
1578
  headers: {
1444
- "content-type": "application/json"
1579
+ "content-type": "application/json",
1580
+ [HTTP_CONTRACT_VERSION_HEADER]: HTTP_CONTRACT_VERSION
1445
1581
  },
1446
1582
  body: body === void 0 ? void 0 : JSON.stringify(body),
1447
1583
  signal: controller.signal
@@ -1459,6 +1595,12 @@ startCoreServer({ ${startOptions.join(
1459
1595
  code: "TIMEOUT",
1460
1596
  message: `Core request timed out after ${timeoutMs}ms.`,
1461
1597
  retryable: true,
1598
+ retry: {
1599
+ retryable: true,
1600
+ reason: "core_request_timeout",
1601
+ retry_after_ms: 250,
1602
+ max_attempts: 1
1603
+ },
1462
1604
  details: {
1463
1605
  timeout_ms: timeoutMs,
1464
1606
  base_url: readiness.baseUrl,
@@ -1515,7 +1657,29 @@ startCoreServer({ ${startOptions.join(
1515
1657
  const post = async (path9, body) => {
1516
1658
  await readiness.ensureReady();
1517
1659
  readiness.refreshRuntime();
1518
- return requestJson("POST", path9, body);
1660
+ const payload = path9 === "/diagnostics/doctor" && (!body || typeof body === "object" && !Array.isArray(body)) ? {
1661
+ ...body && typeof body === "object" ? body : {},
1662
+ caller: {
1663
+ endpoint: {
1664
+ host: readiness.runtime.host,
1665
+ port: readiness.runtime.port,
1666
+ base_url: readiness.baseUrl,
1667
+ host_source: readiness.runtime.hostSource,
1668
+ port_source: readiness.runtime.portSource,
1669
+ metadata_path: readiness.runtime.metadataPath,
1670
+ isolated_mode: readiness.runtime.isolatedMode
1671
+ },
1672
+ process: {
1673
+ component: "cli",
1674
+ version: componentVersion,
1675
+ pid: process.pid,
1676
+ node_version: process.version,
1677
+ binary_path: process.execPath,
1678
+ argv_entry: process.argv[1]
1679
+ }
1680
+ }
1681
+ } : body;
1682
+ return requestJson("POST", path9, payload);
1519
1683
  };
1520
1684
  return {
1521
1685
  get baseUrl() {
@@ -1571,7 +1735,7 @@ var toErrorInfo = (error) => {
1571
1735
  if (error instanceof CoreClientError) {
1572
1736
  return error.info;
1573
1737
  }
1574
- if (error instanceof import_zod3.ZodError) {
1738
+ if (error instanceof import_zod4.ZodError) {
1575
1739
  const [issue] = error.issues;
1576
1740
  return {
1577
1741
  code: "INVALID_ARGUMENT",
@@ -1729,25 +1893,52 @@ var parseNumber2 = (value) => {
1729
1893
  const parsed = Number(value);
1730
1894
  return Number.isFinite(parsed) ? parsed : Number.NaN;
1731
1895
  };
1896
+ var addDeprecatedDialogAliasWarning = (envelope2, aliasName) => {
1897
+ if (!envelope2.ok || typeof envelope2.result !== "object" || !envelope2.result) {
1898
+ return envelope2;
1899
+ }
1900
+ const warning = `${aliasName} is deprecated; use drive.handle_dialog.`;
1901
+ const result = envelope2.result;
1902
+ const existingWarnings = Array.isArray(result.warnings) ? result.warnings.filter((item) => typeof item === "string") : [];
1903
+ return {
1904
+ ok: true,
1905
+ result: {
1906
+ ...result,
1907
+ warnings: existingWarnings.includes(warning) ? existingWarnings : [...existingWarnings, warning]
1908
+ }
1909
+ };
1910
+ };
1732
1911
  var registerDialogCommands = (program2) => {
1733
1912
  const dialog = program2.command("dialog").description("Dialog commands");
1734
- dialog.command("accept").description("Accept a JavaScript dialog").requiredOption("--session-id <id>", "Session identifier").option("--prompt-text <text>", "Prompt text for prompt() dialogs").option("--tab-id <id>", "Tab identifier").action(async (options, command) => {
1913
+ dialog.command("accept").description("Deprecated alias for drive handle-dialog --action accept").requiredOption("--session-id <id>", "Session identifier").option("--prompt-text <text>", "Prompt text for prompt() dialogs").option("--tab-id <id>", "Tab identifier").action(async (options, command) => {
1735
1914
  await runCommand(command, (client) => {
1736
- const payload = parseInput(DialogAcceptInputSchema, {
1915
+ const aliasPayload = parseInput(DialogAcceptInputSchema, {
1737
1916
  session_id: options.sessionId,
1738
1917
  promptText: options.promptText,
1739
1918
  tab_id: parseNumber2(options.tabId)
1740
1919
  });
1741
- return client.post("/dialog/accept", payload);
1920
+ const payload = parseInput(DriveHandleDialogInputSchema, {
1921
+ ...aliasPayload,
1922
+ action: "accept"
1923
+ });
1924
+ return client.post("/drive/handle_dialog", payload).then(
1925
+ (envelope2) => addDeprecatedDialogAliasWarning(envelope2, "dialog.accept")
1926
+ );
1742
1927
  });
1743
1928
  });
1744
- dialog.command("dismiss").description("Dismiss a JavaScript dialog").requiredOption("--session-id <id>", "Session identifier").option("--tab-id <id>", "Tab identifier").action(async (options, command) => {
1929
+ dialog.command("dismiss").description("Deprecated alias for drive handle-dialog --action dismiss").requiredOption("--session-id <id>", "Session identifier").option("--tab-id <id>", "Tab identifier").action(async (options, command) => {
1745
1930
  await runCommand(command, (client) => {
1746
- const payload = parseInput(DialogDismissInputSchema, {
1931
+ const aliasPayload = parseInput(DialogDismissInputSchema, {
1747
1932
  session_id: options.sessionId,
1748
1933
  tab_id: parseNumber2(options.tabId)
1749
1934
  });
1750
- return client.post("/dialog/dismiss", payload);
1935
+ const payload = parseInput(DriveHandleDialogInputSchema, {
1936
+ ...aliasPayload,
1937
+ action: "dismiss"
1938
+ });
1939
+ return client.post("/drive/handle_dialog", payload).then(
1940
+ (envelope2) => addDeprecatedDialogAliasWarning(envelope2, "dialog.dismiss")
1941
+ );
1751
1942
  });
1752
1943
  });
1753
1944
  };
@@ -1756,26 +1947,9 @@ var registerDialogCommands = (program2) => {
1756
1947
  var registerDiagnosticsCommands = (program2) => {
1757
1948
  const diagnostics = program2.command("diagnostics").description("Diagnostics commands");
1758
1949
  diagnostics.command("doctor").description("Run diagnostics").option("--session-id <id>", "Session identifier").action(async (options, command) => {
1759
- await runCommand(command, (client, globalOptions) => {
1760
- const runtime = resolveCoreRuntime({
1761
- host: globalOptions.host,
1762
- port: globalOptions.port,
1763
- strictEnvPort: true
1764
- });
1950
+ await runCommand(command, (client) => {
1765
1951
  const payload = parseInput(DiagnosticsDoctorInputSchema, {
1766
- session_id: options.sessionId,
1767
- caller: {
1768
- endpoint: {
1769
- host: runtime.host,
1770
- port: runtime.port,
1771
- base_url: `http://${runtime.host}:${runtime.port}`,
1772
- host_source: runtime.hostSource,
1773
- port_source: runtime.portSource
1774
- },
1775
- process: {
1776
- component: "cli"
1777
- }
1778
- }
1952
+ session_id: options.sessionId
1779
1953
  });
1780
1954
  return client.post("/diagnostics/doctor", payload);
1781
1955
  });
@@ -1783,7 +1957,7 @@ var registerDiagnosticsCommands = (program2) => {
1783
1957
  diagnostics.command("health-check").description("Run a lightweight health check").action(async (_options, command) => {
1784
1958
  await runCommand(command, (client) => {
1785
1959
  const payload = parseInput(HealthCheckInputSchema, {});
1786
- return client.post("/health_check", payload);
1960
+ return client.post("/health/check", payload);
1787
1961
  });
1788
1962
  });
1789
1963
  };
@@ -2004,12 +2178,30 @@ var parseJson = (value, label) => {
2004
2178
  throw new Error(`${label} must be valid JSON.`);
2005
2179
  }
2006
2180
  };
2181
+ var addDeprecatedAliasWarning = (envelope2, aliasName, replacementName) => {
2182
+ if (!envelope2.ok || typeof envelope2.result !== "object" || !envelope2.result) {
2183
+ return envelope2;
2184
+ }
2185
+ const warning = `${aliasName} is deprecated; use ${replacementName}.`;
2186
+ const result = envelope2.result;
2187
+ const existingWarnings = Array.isArray(result.warnings) ? result.warnings.filter((item) => typeof item === "string") : [];
2188
+ return {
2189
+ ok: true,
2190
+ result: {
2191
+ ...result,
2192
+ warnings: existingWarnings.includes(warning) ? existingWarnings : [...existingWarnings, warning]
2193
+ }
2194
+ };
2195
+ };
2007
2196
  var registerDriveCommands = (program2) => {
2008
2197
  const drive = program2.command("drive").description("Drive commands");
2009
- drive.command("navigate").description("Navigate to a URL").requiredOption("--session-id <id>", "Session identifier").requiredOption("--url <url>", "URL to navigate to").option("--tab-id <id>", "Tab identifier (defaults to agent window/tab)").option("--wait <mode>", "Wait mode (none, domcontentloaded)").action(async (options, command) => {
2198
+ drive.command("navigate").description("Navigate to a URL").option(
2199
+ "--session-id <id>",
2200
+ "Session identifier (auto-created when omitted)"
2201
+ ).requiredOption("--url <url>", "URL to navigate to").option("--tab-id <id>", "Tab identifier (defaults to agent window/tab)").option("--wait <mode>", "Wait mode (none, domcontentloaded)").action(async (options, command) => {
2010
2202
  await runCommand(command, (client) => {
2011
2203
  const payload = parseInput(DriveNavigateInputSchema, {
2012
- session_id: options.sessionId,
2204
+ ...options.sessionId ? { session_id: options.sessionId } : {},
2013
2205
  url: options.url,
2014
2206
  tab_id: parseNumber3(options.tabId),
2015
2207
  wait: options.wait
@@ -2026,13 +2218,15 @@ var registerDriveCommands = (program2) => {
2026
2218
  return client.post("/drive/go_back", payload);
2027
2219
  });
2028
2220
  });
2029
- drive.command("back").description("Go back in browser history").requiredOption("--session-id <id>", "Session identifier").option("--tab-id <id>", "Tab identifier (defaults to agent window/tab)").action(async (options, command) => {
2221
+ drive.command("back").description("Deprecated alias for go-back").requiredOption("--session-id <id>", "Session identifier").option("--tab-id <id>", "Tab identifier (defaults to agent window/tab)").action(async (options, command) => {
2030
2222
  await runCommand(command, (client) => {
2031
- const payload = parseInput(DriveBackInputSchema, {
2223
+ const payload = parseInput(DriveGoBackInputSchema, {
2032
2224
  session_id: options.sessionId,
2033
2225
  tab_id: parseNumber3(options.tabId)
2034
2226
  });
2035
- return client.post("/drive/back", payload);
2227
+ return client.post("/drive/go_back", payload).then(
2228
+ (envelope2) => addDeprecatedAliasWarning(envelope2, "drive.back", "drive.go_back")
2229
+ );
2036
2230
  });
2037
2231
  });
2038
2232
  drive.command("go-forward").description("Go forward in browser history").requiredOption("--session-id <id>", "Session identifier").option("--tab-id <id>", "Tab identifier (defaults to agent window/tab)").action(async (options, command) => {
@@ -2044,13 +2238,19 @@ var registerDriveCommands = (program2) => {
2044
2238
  return client.post("/drive/go_forward", payload);
2045
2239
  });
2046
2240
  });
2047
- drive.command("forward").description("Go forward in browser history").requiredOption("--session-id <id>", "Session identifier").option("--tab-id <id>", "Tab identifier (defaults to agent window/tab)").action(async (options, command) => {
2241
+ drive.command("forward").description("Deprecated alias for go-forward").requiredOption("--session-id <id>", "Session identifier").option("--tab-id <id>", "Tab identifier (defaults to agent window/tab)").action(async (options, command) => {
2048
2242
  await runCommand(command, (client) => {
2049
- const payload = parseInput(DriveForwardInputSchema, {
2243
+ const payload = parseInput(DriveGoForwardInputSchema, {
2050
2244
  session_id: options.sessionId,
2051
2245
  tab_id: parseNumber3(options.tabId)
2052
2246
  });
2053
- return client.post("/drive/forward", payload);
2247
+ return client.post("/drive/go_forward", payload).then(
2248
+ (envelope2) => addDeprecatedAliasWarning(
2249
+ envelope2,
2250
+ "drive.forward",
2251
+ "drive.go_forward"
2252
+ )
2253
+ );
2054
2254
  });
2055
2255
  });
2056
2256
  drive.command("click").description("Click an element").requiredOption("--session-id <id>", "Session identifier").option("--tab-id <id>", "Tab identifier (defaults to agent window/tab)").option("--locator-ref <ref>", "Locator ref (e.g., @e1)").option("--locator-testid <id>", "Locator test id").option("--locator-css <selector>", "Locator CSS selector").option("--locator-text <text>", "Locator text").option("--locator-role <role>", "Locator role name").option("--locator-role-value <value>", "Locator role value").option("--click-count <count>", "Click count").action(async (options, command) => {
@@ -2400,6 +2600,12 @@ var toReadinessErrorEnvelope = (error, baseUrl) => ({
2400
2600
  code: "UNAVAILABLE",
2401
2601
  message: error instanceof Error ? `Core not ready at ${baseUrl}: ${error.message}` : `Core not ready at ${baseUrl}.`,
2402
2602
  retryable: true,
2603
+ retry: {
2604
+ retryable: true,
2605
+ reason: "core_not_ready",
2606
+ retry_after_ms: 250,
2607
+ max_attempts: 1
2608
+ },
2403
2609
  details: {
2404
2610
  base_url: baseUrl
2405
2611
  }
@@ -2477,7 +2683,8 @@ startCoreServer({ ${startOptions.join(
2477
2683
  const response = await fetchImpl(`${readiness.baseUrl}${requestPath}`, {
2478
2684
  method: "POST",
2479
2685
  headers: {
2480
- "content-type": "application/json"
2686
+ "content-type": "application/json",
2687
+ [HTTP_CONTRACT_VERSION_HEADER]: HTTP_CONTRACT_VERSION
2481
2688
  },
2482
2689
  body: body === void 0 ? void 0 : JSON.stringify(body),
2483
2690
  signal: controller.signal
@@ -2590,6 +2797,22 @@ var toInternalErrorEnvelope = (error) => ({
2590
2797
  }
2591
2798
  });
2592
2799
  var envelope = (schema) => successEnvelopeSchema(schema);
2800
+ var isRecord = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
2801
+ var addDeprecatedAliasWarning2 = (envelopeResult, deprecationAlias) => {
2802
+ if (!deprecationAlias || !envelopeResult.ok || typeof envelopeResult.result !== "object" || !envelopeResult.result) {
2803
+ return envelopeResult;
2804
+ }
2805
+ const warning = `${deprecationAlias.alias} is deprecated; use ${deprecationAlias.replacement}.`;
2806
+ const result = envelopeResult.result;
2807
+ const existingWarnings = Array.isArray(result.warnings) ? result.warnings.filter((item) => typeof item === "string") : [];
2808
+ return {
2809
+ ok: true,
2810
+ result: {
2811
+ ...result,
2812
+ warnings: existingWarnings.includes(warning) ? existingWarnings : [...existingWarnings, warning]
2813
+ }
2814
+ };
2815
+ };
2593
2816
  var TOOL_DEFINITIONS = [
2594
2817
  {
2595
2818
  name: "session.create",
@@ -2665,20 +2888,28 @@ var TOOL_DEFINITIONS = [
2665
2888
  name: "drive.back",
2666
2889
  config: {
2667
2890
  title: "Drive Back",
2668
- description: "Go back in browser history.",
2669
- inputSchema: DriveBackInputSchema,
2670
- outputSchema: envelope(DriveBackOutputSchema),
2671
- corePath: "/drive/back"
2891
+ description: "Deprecated alias for drive.go_back.",
2892
+ inputSchema: DriveGoBackInputSchema,
2893
+ outputSchema: envelope(DriveGoBackOutputSchema),
2894
+ corePath: "/drive/go_back",
2895
+ deprecationAlias: {
2896
+ alias: "drive.back",
2897
+ replacement: "drive.go_back"
2898
+ }
2672
2899
  }
2673
2900
  },
2674
2901
  {
2675
2902
  name: "drive.forward",
2676
2903
  config: {
2677
2904
  title: "Drive Forward",
2678
- description: "Go forward in browser history.",
2679
- inputSchema: DriveForwardInputSchema,
2680
- outputSchema: envelope(DriveForwardOutputSchema),
2681
- corePath: "/drive/forward"
2905
+ description: "Deprecated alias for drive.go_forward.",
2906
+ inputSchema: DriveGoForwardInputSchema,
2907
+ outputSchema: envelope(DriveGoForwardOutputSchema),
2908
+ corePath: "/drive/go_forward",
2909
+ deprecationAlias: {
2910
+ alias: "drive.forward",
2911
+ replacement: "drive.go_forward"
2912
+ }
2682
2913
  }
2683
2914
  },
2684
2915
  {
@@ -2755,20 +2986,30 @@ var TOOL_DEFINITIONS = [
2755
2986
  name: "dialog.accept",
2756
2987
  config: {
2757
2988
  title: "Dialog Accept",
2758
- description: "Accept a JavaScript dialog.",
2989
+ description: "Deprecated alias for drive.handle_dialog (action=accept).",
2759
2990
  inputSchema: DialogAcceptInputSchema,
2760
2991
  outputSchema: envelope(DialogAcceptOutputSchema),
2761
- corePath: "/dialog/accept"
2992
+ corePath: "/drive/handle_dialog",
2993
+ deprecationAlias: {
2994
+ alias: "dialog.accept",
2995
+ replacement: "drive.handle_dialog"
2996
+ },
2997
+ transformInput: (args) => isRecord(args) ? { ...args, action: "accept" } : args
2762
2998
  }
2763
2999
  },
2764
3000
  {
2765
3001
  name: "dialog.dismiss",
2766
3002
  config: {
2767
3003
  title: "Dialog Dismiss",
2768
- description: "Dismiss a JavaScript dialog.",
3004
+ description: "Deprecated alias for drive.handle_dialog (action=dismiss).",
2769
3005
  inputSchema: DialogDismissInputSchema,
2770
3006
  outputSchema: envelope(DialogDismissOutputSchema),
2771
- corePath: "/dialog/dismiss"
3007
+ corePath: "/drive/handle_dialog",
3008
+ deprecationAlias: {
3009
+ alias: "dialog.dismiss",
3010
+ replacement: "drive.handle_dialog"
3011
+ },
3012
+ transformInput: (args) => isRecord(args) ? { ...args, action: "dismiss" } : args
2772
3013
  }
2773
3014
  },
2774
3015
  {
@@ -2948,7 +3189,7 @@ var TOOL_DEFINITIONS = [
2948
3189
  description: "Check server health including uptime, memory usage, active session count, and extension connection status.",
2949
3190
  inputSchema: HealthCheckInputSchema,
2950
3191
  outputSchema: envelope(HealthCheckOutputSchema),
2951
- corePath: "/health_check"
3192
+ corePath: "/health/check"
2952
3193
  }
2953
3194
  },
2954
3195
  {
@@ -2962,13 +3203,18 @@ var TOOL_DEFINITIONS = [
2962
3203
  }
2963
3204
  }
2964
3205
  ];
2965
- var createToolHandler = (clientProvider, corePath) => {
3206
+ var createToolHandler = (clientProvider, corePath, deprecationAlias, transformInput) => {
2966
3207
  return (async (args, _extra) => {
2967
3208
  void _extra;
2968
3209
  try {
2969
3210
  const client = typeof clientProvider === "function" ? await clientProvider() : clientProvider;
2970
- const envelopeResult = await client.post(corePath, args);
2971
- return toToolResult(envelopeResult);
3211
+ const envelopeResult = await client.post(
3212
+ corePath,
3213
+ transformInput ? transformInput(args) : args
3214
+ );
3215
+ return toToolResult(
3216
+ addDeprecatedAliasWarning2(envelopeResult, deprecationAlias)
3217
+ );
2972
3218
  } catch (error) {
2973
3219
  const parsed = ErrorEnvelopeSchema.safeParse(error);
2974
3220
  if (parsed.success) {
@@ -2988,7 +3234,12 @@ var registerBrowserBridgeTools = (server, clientProvider) => {
2988
3234
  inputSchema: tool.config.inputSchema,
2989
3235
  outputSchema: tool.config.outputSchema
2990
3236
  },
2991
- createToolHandler(clientProvider, tool.config.corePath)
3237
+ createToolHandler(
3238
+ clientProvider,
3239
+ tool.config.corePath,
3240
+ tool.config.deprecationAlias,
3241
+ tool.config.transformInput
3242
+ )
2992
3243
  );
2993
3244
  }
2994
3245
  };