1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
import { Type } from "typebox";
import { Text } from "@mariozechner/pi-tui";
import type { Result } from "../util/result";
import { err, ok } from "../util/result";
import { defineBrowserTool, type ToolErr, type ToolOk } from "../util/tool";
import { performSetup } from "../setup";
const SetupArgs = Type.Object({});
export const setupTool = defineBrowserTool({
name: "browser_setup",
label: "Browser Setup",
description:
"Initialize browser control. Spawns the daemon, connects to Chrome, opens a test tab. " +
"Call when browser tools fail with 'Browser harness not initialized'. Idempotent.",
promptSnippet: "Initialize browser connection",
promptGuidelines: [
"After browser_setup succeeds, retry the browser tool that failed.",
],
parameters: SetupArgs,
concurrency: "parallel",
ensureAlive: false,
renderCall: () => new Text("🔧 Initializing browser...", 0, 0),
async handler(_args, { client, extensionCtx }): Promise<Result<ToolOk, ToolErr>> {
const result = await performSetup(client, extensionCtx);
if (result.success) {
return ok({ text: result.data });
}
return err({ kind: "internal", message: result.error });
},
});
|