aboutsummaryrefslogtreecommitdiff
path: root/src/domains
diff options
context:
space:
mode:
authoramankumarsingh77 <amankumarsingh7702@gmal.com>2026-05-02 16:16:24 +0530
committeramankumarsingh77 <amankumarsingh7702@gmal.com>2026-05-02 16:16:24 +0530
commit9ead6a0577b750bc3ae3f36a7e8bfe108e979925 (patch)
tree141234d9688912f0e5822d20fe7b420fcabca3f3 /src/domains
parent1b11036e34f5ba6b2184369e2514a48ec8ba5565 (diff)
feat(domains): migrate handle_dialog
Diffstat (limited to 'src/domains')
-rw-r--r--src/domains/dialog.ts31
1 files changed, 31 insertions, 0 deletions
diff --git a/src/domains/dialog.ts b/src/domains/dialog.ts
new file mode 100644
index 0000000..a5872a1
--- /dev/null
+++ b/src/domains/dialog.ts
@@ -0,0 +1,31 @@
+import { Type } from "typebox";
+import { type Result, err, ok } from "../util/result";
+import { defineBrowserTool, type ToolErr, type ToolOk } from "../util/tool";
+
+const HandleDialogArgs = Type.Object({
+ accept: Type.Boolean({ description: "true = accept, false = dismiss" }),
+ promptText: Type.Optional(Type.String({ description: "Text to type if dialog is a prompt()" })),
+});
+
+export const handleDialogTool = defineBrowserTool({
+ name: "browser_handle_dialog",
+ label: "Browser Handle Dialog",
+ description:
+ "Accept or dismiss the currently open JS dialog (alert/confirm/prompt/beforeunload).",
+ promptSnippet: "Accept or dismiss a JS dialog",
+ promptGuidelines: [
+ "Use after browser_page_info reports a dialog is open. Until handled, no other browser action will work.",
+ "For prompt() dialogs, supply promptText with the value to submit.",
+ ],
+ parameters: HandleDialogArgs,
+ async handler(args, { client }): Promise<Result<ToolOk, ToolErr>> {
+ const params: Record<string, unknown> = { accept: args.accept };
+ if (args.promptText !== undefined) params["promptText"] = args.promptText;
+ const r = await client.session().call("Page.handleJavaScriptDialog", params);
+ if (!r.success) return err({ kind: "cdp_error", message: r.error.message });
+ return ok({
+ text: `Dialog ${args.accept ? "accepted" : "dismissed"}`,
+ details: { accept: args.accept },
+ });
+ },
+});