aboutsummaryrefslogtreecommitdiff
path: root/src/domains/setup.ts
blob: 3f241a9ed72400da119cb1f3b050257d175b9ead (plain)
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 });
  },
});