@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/CHANGELOG.md +34 -1
- package/README.md +9 -9
- package/dist/api.js +1109 -447
- package/dist/api.js.map +4 -4
- package/dist/index.js +689 -438
- package/dist/index.js.map +4 -4
- package/extension/dist/background.js +310 -52
- package/extension/dist/background.js.map +3 -3
- package/extension/dist/content.js +42 -4
- package/extension/dist/content.js.map +3 -3
- package/extension/dist/options-ui.js +80 -0
- package/extension/dist/options-ui.js.map +2 -2
- package/extension/manifest.json +14 -4
- package/package.json +1 -1
- package/skills/browser-bridge/SKILL.md +3 -4
- package/skills/browser-bridge/skill.json +1 -1
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
|
|
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
|
|
196
|
-
let current = (
|
|
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
|
-
|
|
633
|
-
const controller = new AbortController();
|
|
634
|
-
const timeout = setTimeout(() => controller.abort(), healthTimeoutMs);
|
|
694
|
+
for (const method of ["POST", "GET"]) {
|
|
635
695
|
try {
|
|
636
|
-
|
|
696
|
+
const controller = new AbortController();
|
|
697
|
+
const timeout = setTimeout(() => controller.abort(), healthTimeoutMs);
|
|
637
698
|
try {
|
|
638
|
-
response
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
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
|
-
|
|
716
|
+
method,
|
|
717
|
+
error
|
|
647
718
|
});
|
|
648
|
-
|
|
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
|
-
|
|
671
|
-
|
|
672
|
-
|
|
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
|
|
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
|
|
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:
|
|
791
|
-
retryable:
|
|
792
|
-
|
|
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 =
|
|
795
|
-
ok:
|
|
927
|
+
var ErrorEnvelopeSchema = import_zod2.z.object({
|
|
928
|
+
ok: import_zod2.z.literal(false),
|
|
796
929
|
error: ErrorInfoSchema
|
|
797
930
|
});
|
|
798
|
-
var successEnvelopeSchema = (result) =>
|
|
799
|
-
ok:
|
|
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
|
|
805
|
-
var LocatorRoleSchema =
|
|
806
|
-
name:
|
|
807
|
-
value:
|
|
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 =
|
|
810
|
-
ref:
|
|
811
|
-
testid:
|
|
812
|
-
css:
|
|
813
|
-
text:
|
|
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 =
|
|
824
|
-
ok:
|
|
825
|
-
message:
|
|
826
|
-
warnings:
|
|
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 =
|
|
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 =
|
|
839
|
-
session_id:
|
|
971
|
+
var SessionInfoSchema = import_zod3.z.object({
|
|
972
|
+
session_id: import_zod3.z.string(),
|
|
840
973
|
state: SessionStateSchema,
|
|
841
|
-
created_at:
|
|
974
|
+
created_at: import_zod3.z.string().datetime().optional()
|
|
842
975
|
});
|
|
843
|
-
var SessionPlaneStatusSchema =
|
|
844
|
-
connected:
|
|
845
|
-
last_seen_at:
|
|
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 =
|
|
849
|
-
session_id:
|
|
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:
|
|
986
|
+
updated_at: import_zod3.z.string().datetime().optional()
|
|
854
987
|
});
|
|
855
|
-
var RecoverResultSchema =
|
|
856
|
-
session_id:
|
|
857
|
-
recovered:
|
|
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:
|
|
992
|
+
message: import_zod3.z.string().optional()
|
|
860
993
|
});
|
|
861
|
-
var DiagnosticCheckSchema =
|
|
862
|
-
name:
|
|
863
|
-
ok:
|
|
864
|
-
message:
|
|
865
|
-
details:
|
|
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 =
|
|
868
|
-
host:
|
|
869
|
-
port:
|
|
870
|
-
base_url:
|
|
871
|
-
host_source:
|
|
872
|
-
port_source:
|
|
873
|
-
metadata_path:
|
|
874
|
-
isolated_mode:
|
|
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 =
|
|
877
|
-
component:
|
|
878
|
-
version:
|
|
879
|
-
pid:
|
|
880
|
-
node_version:
|
|
881
|
-
binary_path:
|
|
882
|
-
argv_entry:
|
|
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 =
|
|
1017
|
+
var DiagnosticsRuntimeCallerSchema = import_zod3.z.object({
|
|
885
1018
|
endpoint: DiagnosticsRuntimeEndpointSchema.optional(),
|
|
886
1019
|
process: DiagnosticsRuntimeProcessSchema.optional()
|
|
887
1020
|
});
|
|
888
|
-
var DiagnosticsRuntimeContextSchema =
|
|
1021
|
+
var DiagnosticsRuntimeContextSchema = import_zod3.z.object({
|
|
889
1022
|
caller: DiagnosticsRuntimeCallerSchema.optional(),
|
|
890
|
-
core:
|
|
1023
|
+
core: import_zod3.z.object({
|
|
891
1024
|
endpoint: DiagnosticsRuntimeEndpointSchema.optional(),
|
|
892
1025
|
process: DiagnosticsRuntimeProcessSchema.optional()
|
|
893
1026
|
}).optional(),
|
|
894
|
-
extension:
|
|
895
|
-
version:
|
|
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:
|
|
1033
|
+
port_source: import_zod3.z.enum(["default", "storage"]).optional()
|
|
898
1034
|
}).optional()
|
|
899
1035
|
});
|
|
900
|
-
var DiagnosticReportSchema =
|
|
901
|
-
ok:
|
|
902
|
-
session_id:
|
|
903
|
-
checks:
|
|
904
|
-
sessions:
|
|
905
|
-
count:
|
|
906
|
-
max_age_ms:
|
|
907
|
-
max_idle_ms:
|
|
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:
|
|
910
|
-
connected:
|
|
911
|
-
version:
|
|
912
|
-
last_seen_at:
|
|
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:
|
|
915
|
-
attached:
|
|
916
|
-
idle_timeout_ms:
|
|
917
|
-
console_buffer_size:
|
|
918
|
-
network_buffer_size:
|
|
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:
|
|
922
|
-
root_dir:
|
|
1057
|
+
artifacts: import_zod3.z.object({
|
|
1058
|
+
root_dir: import_zod3.z.string().optional()
|
|
923
1059
|
}).optional(),
|
|
924
|
-
recovery:
|
|
925
|
-
last_attempt:
|
|
926
|
-
session_id:
|
|
927
|
-
recovered:
|
|
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:
|
|
930
|
-
at:
|
|
1065
|
+
message: import_zod3.z.string().optional(),
|
|
1066
|
+
at: import_zod3.z.string()
|
|
931
1067
|
}).optional(),
|
|
932
|
-
attempts:
|
|
933
|
-
|
|
934
|
-
session_id:
|
|
935
|
-
recovered:
|
|
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:
|
|
938
|
-
at:
|
|
1073
|
+
message: import_zod3.z.string().optional(),
|
|
1074
|
+
at: import_zod3.z.string()
|
|
939
1075
|
})
|
|
940
1076
|
).optional(),
|
|
941
|
-
success_count:
|
|
942
|
-
failure_count:
|
|
943
|
-
success_rate:
|
|
944
|
-
recent_failure_count:
|
|
945
|
-
loop_detected:
|
|
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:
|
|
948
|
-
notes:
|
|
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 =
|
|
952
|
-
session_id:
|
|
1087
|
+
var SessionIdSchema = import_zod3.z.object({
|
|
1088
|
+
session_id: import_zod3.z.string().min(1)
|
|
953
1089
|
});
|
|
954
|
-
var SessionCreateInputSchema =
|
|
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 =
|
|
962
|
-
ok:
|
|
1097
|
+
var SessionCloseOutputSchema = import_zod3.z.object({
|
|
1098
|
+
ok: import_zod3.z.boolean()
|
|
963
1099
|
});
|
|
964
|
-
var DriveWaitConditionSchema =
|
|
965
|
-
kind:
|
|
966
|
-
value:
|
|
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 =
|
|
969
|
-
session_id:
|
|
970
|
-
url:
|
|
971
|
-
tab_id:
|
|
972
|
-
wait:
|
|
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
|
|
975
|
-
|
|
976
|
-
|
|
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 =
|
|
981
|
-
session_id:
|
|
982
|
-
tab_id:
|
|
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
|
|
986
|
-
|
|
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:
|
|
993
|
-
click_count:
|
|
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 =
|
|
997
|
-
session_id:
|
|
1130
|
+
var DriveHoverInputSchema = import_zod3.z.object({
|
|
1131
|
+
session_id: import_zod3.z.string().min(1),
|
|
998
1132
|
locator: LocatorSchema,
|
|
999
|
-
delay_ms:
|
|
1000
|
-
tab_id:
|
|
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 =
|
|
1003
|
-
format:
|
|
1004
|
-
snapshot:
|
|
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 =
|
|
1007
|
-
session_id:
|
|
1140
|
+
var DriveSelectInputSchema = import_zod3.z.object({
|
|
1141
|
+
session_id: import_zod3.z.string().min(1),
|
|
1008
1142
|
locator: LocatorSchema,
|
|
1009
|
-
value:
|
|
1010
|
-
text:
|
|
1011
|
-
index:
|
|
1012
|
-
tab_id:
|
|
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 =
|
|
1019
|
-
session_id:
|
|
1152
|
+
var DriveTypeInputSchema = import_zod3.z.object({
|
|
1153
|
+
session_id: import_zod3.z.string().min(1),
|
|
1020
1154
|
locator: LocatorSchema.optional(),
|
|
1021
|
-
text:
|
|
1022
|
-
tab_id:
|
|
1023
|
-
clear:
|
|
1024
|
-
submit:
|
|
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 =
|
|
1028
|
-
selector:
|
|
1161
|
+
var DriveFillFormFieldSchema = import_zod3.z.object({
|
|
1162
|
+
selector: import_zod3.z.string().min(1).optional(),
|
|
1029
1163
|
locator: LocatorSchema.optional(),
|
|
1030
|
-
value:
|
|
1031
|
-
type:
|
|
1032
|
-
submit:
|
|
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 =
|
|
1038
|
-
session_id:
|
|
1039
|
-
fields:
|
|
1040
|
-
tab_id:
|
|
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 =
|
|
1043
|
-
filled:
|
|
1044
|
-
attempted:
|
|
1045
|
-
errors:
|
|
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 =
|
|
1048
|
-
session_id:
|
|
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:
|
|
1052
|
-
tab_id:
|
|
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 =
|
|
1056
|
-
session_id:
|
|
1057
|
-
action:
|
|
1058
|
-
promptText:
|
|
1059
|
-
tab_id:
|
|
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:
|
|
1064
|
-
tab_id:
|
|
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:
|
|
1202
|
+
tab_id: import_zod3.z.number().finite().optional()
|
|
1069
1203
|
});
|
|
1070
1204
|
var DialogDismissOutputSchema = OpResultSchema;
|
|
1071
|
-
var DriveKeyModifiersSchema =
|
|
1072
|
-
ctrl:
|
|
1073
|
-
alt:
|
|
1074
|
-
shift:
|
|
1075
|
-
meta:
|
|
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 =
|
|
1078
|
-
session_id:
|
|
1079
|
-
key:
|
|
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:
|
|
1215
|
+
tab_id: import_zod3.z.number().finite().optional()
|
|
1082
1216
|
});
|
|
1083
1217
|
var DriveKeyPressOutputSchema = OpResultSchema;
|
|
1084
|
-
var DriveKeyModifierSchema =
|
|
1085
|
-
var DriveKeyInputSchema =
|
|
1086
|
-
session_id:
|
|
1087
|
-
key:
|
|
1088
|
-
modifiers:
|
|
1089
|
-
repeat:
|
|
1090
|
-
tab_id:
|
|
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 =
|
|
1094
|
-
session_id:
|
|
1095
|
-
delta_x:
|
|
1096
|
-
delta_y:
|
|
1097
|
-
top:
|
|
1098
|
-
left:
|
|
1099
|
-
behavior:
|
|
1100
|
-
tab_id:
|
|
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 =
|
|
1110
|
-
session_id:
|
|
1243
|
+
var DriveWaitForInputSchema = import_zod3.z.object({
|
|
1244
|
+
session_id: import_zod3.z.string().min(1),
|
|
1111
1245
|
condition: DriveWaitConditionSchema,
|
|
1112
|
-
timeout_ms:
|
|
1113
|
-
tab_id:
|
|
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 =
|
|
1117
|
-
tab_id:
|
|
1118
|
-
window_id:
|
|
1119
|
-
url:
|
|
1120
|
-
title:
|
|
1121
|
-
active:
|
|
1122
|
-
last_active_at:
|
|
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 =
|
|
1126
|
-
tabs:
|
|
1259
|
+
var DriveTabListOutputSchema = import_zod3.z.object({
|
|
1260
|
+
tabs: import_zod3.z.array(DriveTabInfoSchema)
|
|
1127
1261
|
});
|
|
1128
|
-
var DriveTabActivateInputSchema =
|
|
1129
|
-
session_id:
|
|
1130
|
-
tab_id:
|
|
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 =
|
|
1134
|
-
session_id:
|
|
1135
|
-
tab_id:
|
|
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 =
|
|
1139
|
-
var InspectConsistencySchema =
|
|
1140
|
-
var TargetHintSchema =
|
|
1141
|
-
url:
|
|
1142
|
-
title:
|
|
1143
|
-
last_active_at:
|
|
1144
|
-
lastActiveAt:
|
|
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 =
|
|
1147
|
-
name:
|
|
1148
|
-
type:
|
|
1149
|
-
value:
|
|
1150
|
-
options:
|
|
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 =
|
|
1153
|
-
selector:
|
|
1154
|
-
action:
|
|
1155
|
-
method:
|
|
1156
|
-
fields:
|
|
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 =
|
|
1159
|
-
key:
|
|
1160
|
-
value:
|
|
1292
|
+
var StorageEntrySchema = import_zod3.z.object({
|
|
1293
|
+
key: import_zod3.z.string(),
|
|
1294
|
+
value: import_zod3.z.string()
|
|
1161
1295
|
});
|
|
1162
|
-
var PageStateSchema =
|
|
1163
|
-
forms:
|
|
1164
|
-
localStorage:
|
|
1165
|
-
sessionStorage:
|
|
1166
|
-
cookies:
|
|
1167
|
-
warnings:
|
|
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 =
|
|
1303
|
+
var DomSnapshotSchema = import_zod3.z.object({
|
|
1170
1304
|
format: InspectDomFormatSchema,
|
|
1171
|
-
snapshot:
|
|
1305
|
+
snapshot: import_zod3.z.unknown()
|
|
1172
1306
|
}).passthrough();
|
|
1173
|
-
var InspectDomSnapshotInputSchema =
|
|
1174
|
-
session_id:
|
|
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:
|
|
1178
|
-
compact:
|
|
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:
|
|
1182
|
-
selector:
|
|
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 =
|
|
1187
|
-
added:
|
|
1188
|
-
removed:
|
|
1189
|
-
changed:
|
|
1190
|
-
summary:
|
|
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:
|
|
1196
|
-
role:
|
|
1197
|
-
name:
|
|
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:
|
|
1202
|
-
text:
|
|
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:
|
|
1207
|
-
label:
|
|
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 =
|
|
1344
|
+
var InspectFindInputSchema = import_zod3.z.discriminatedUnion("kind", [
|
|
1211
1345
|
InspectFindRoleInputSchema,
|
|
1212
1346
|
InspectFindTextInputSchema,
|
|
1213
1347
|
InspectFindLabelInputSchema
|
|
1214
1348
|
]);
|
|
1215
|
-
var InspectFindMatchSchema =
|
|
1216
|
-
ref:
|
|
1217
|
-
role:
|
|
1218
|
-
name:
|
|
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 =
|
|
1221
|
-
matches:
|
|
1222
|
-
warnings:
|
|
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 =
|
|
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:
|
|
1369
|
+
include_metadata: import_zod3.z.boolean().default(true),
|
|
1236
1370
|
target: TargetHintSchema.optional()
|
|
1237
1371
|
});
|
|
1238
|
-
var InspectExtractContentOutputSchema =
|
|
1239
|
-
content:
|
|
1240
|
-
title:
|
|
1241
|
-
byline:
|
|
1242
|
-
excerpt:
|
|
1243
|
-
siteName:
|
|
1244
|
-
warnings:
|
|
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 =
|
|
1250
|
-
url:
|
|
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:
|
|
1253
|
-
column:
|
|
1386
|
+
line: import_zod3.z.number().int().positive().optional(),
|
|
1387
|
+
column: import_zod3.z.number().int().positive().optional()
|
|
1254
1388
|
}).passthrough();
|
|
1255
|
-
var ConsoleStackFrameSchema =
|
|
1256
|
-
functionName:
|
|
1257
|
-
url:
|
|
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:
|
|
1260
|
-
column:
|
|
1393
|
+
line: import_zod3.z.number().int().positive().optional(),
|
|
1394
|
+
column: import_zod3.z.number().int().positive().optional()
|
|
1261
1395
|
}).passthrough();
|
|
1262
|
-
var ConsoleRemoteObjectSchema =
|
|
1263
|
-
type:
|
|
1264
|
-
subtype:
|
|
1265
|
-
description:
|
|
1266
|
-
value:
|
|
1267
|
-
unserializableValue:
|
|
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 =
|
|
1270
|
-
level:
|
|
1271
|
-
text:
|
|
1272
|
-
timestamp:
|
|
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:
|
|
1408
|
+
stack: import_zod3.z.array(ConsoleStackFrameSchema).optional(),
|
|
1275
1409
|
exception: ConsoleRemoteObjectSchema.optional(),
|
|
1276
|
-
args:
|
|
1410
|
+
args: import_zod3.z.array(ConsoleRemoteObjectSchema).optional()
|
|
1277
1411
|
}).passthrough();
|
|
1278
|
-
var ConsoleListSchema =
|
|
1279
|
-
entries:
|
|
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 =
|
|
1283
|
-
artifact_id:
|
|
1284
|
-
path:
|
|
1285
|
-
mime:
|
|
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 =
|
|
1292
|
-
session_id:
|
|
1293
|
-
expression:
|
|
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 =
|
|
1297
|
-
value:
|
|
1298
|
-
exception:
|
|
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 =
|
|
1305
|
-
name:
|
|
1306
|
-
value:
|
|
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 =
|
|
1309
|
-
metrics:
|
|
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 =
|
|
1313
|
-
session_id:
|
|
1314
|
-
target:
|
|
1315
|
-
fullPage:
|
|
1316
|
-
selector:
|
|
1317
|
-
format:
|
|
1318
|
-
quality:
|
|
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 =
|
|
1322
|
-
var HealthCheckOutputSchema =
|
|
1323
|
-
started_at:
|
|
1324
|
-
uptime_ms:
|
|
1325
|
-
memory:
|
|
1326
|
-
rss:
|
|
1327
|
-
heapTotal:
|
|
1328
|
-
heapUsed:
|
|
1329
|
-
external:
|
|
1330
|
-
arrayBuffers:
|
|
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:
|
|
1333
|
-
active:
|
|
1466
|
+
sessions: import_zod3.z.object({
|
|
1467
|
+
active: import_zod3.z.number().finite().nonnegative()
|
|
1334
1468
|
}).passthrough(),
|
|
1335
|
-
extension:
|
|
1336
|
-
connected:
|
|
1337
|
-
last_seen_at:
|
|
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 =
|
|
1341
|
-
session_id:
|
|
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
|
|
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
|
-
|
|
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
|
|
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("
|
|
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
|
|
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
|
-
|
|
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("
|
|
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
|
|
1931
|
+
const aliasPayload = parseInput(DialogDismissInputSchema, {
|
|
1747
1932
|
session_id: options.sessionId,
|
|
1748
1933
|
tab_id: parseNumber2(options.tabId)
|
|
1749
1934
|
});
|
|
1750
|
-
|
|
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
|
|
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("/
|
|
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").
|
|
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("
|
|
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(
|
|
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/
|
|
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("
|
|
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(
|
|
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/
|
|
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: "
|
|
2669
|
-
inputSchema:
|
|
2670
|
-
outputSchema: envelope(
|
|
2671
|
-
corePath: "/drive/
|
|
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: "
|
|
2679
|
-
inputSchema:
|
|
2680
|
-
outputSchema: envelope(
|
|
2681
|
-
corePath: "/drive/
|
|
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: "
|
|
2989
|
+
description: "Deprecated alias for drive.handle_dialog (action=accept).",
|
|
2759
2990
|
inputSchema: DialogAcceptInputSchema,
|
|
2760
2991
|
outputSchema: envelope(DialogAcceptOutputSchema),
|
|
2761
|
-
corePath: "/
|
|
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: "
|
|
3004
|
+
description: "Deprecated alias for drive.handle_dialog (action=dismiss).",
|
|
2769
3005
|
inputSchema: DialogDismissInputSchema,
|
|
2770
3006
|
outputSchema: envelope(DialogDismissOutputSchema),
|
|
2771
|
-
corePath: "/
|
|
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: "/
|
|
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(
|
|
2971
|
-
|
|
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(
|
|
3237
|
+
createToolHandler(
|
|
3238
|
+
clientProvider,
|
|
3239
|
+
tool.config.corePath,
|
|
3240
|
+
tool.config.deprecationAlias,
|
|
3241
|
+
tool.config.transformInput
|
|
3242
|
+
)
|
|
2992
3243
|
);
|
|
2993
3244
|
}
|
|
2994
3245
|
};
|