From 9ead6a0577b750bc3ae3f36a7e8bfe108e979925 Mon Sep 17 00:00:00 2001 From: amankumarsingh77 Date: Sat, 2 May 2026 16:16:24 +0530 Subject: feat(domains): migrate handle_dialog --- src/domains/dialog.ts | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 src/domains/dialog.ts (limited to 'src/domains') 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> { + const params: Record = { 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 }, + }); + }, +}); -- cgit v1.2.3