diff options
Diffstat (limited to 'src/tools.ts')
| -rw-r--r-- | src/tools.ts | 101 |
1 files changed, 0 insertions, 101 deletions
diff --git a/src/tools.ts b/src/tools.ts deleted file mode 100644 index 0c8a05b..0000000 --- a/src/tools.ts +++ /dev/null @@ -1,101 +0,0 @@ -/** - * Tool registrations for pi-browser-harness. - * - * Maps browser-harness daemon methods to pi tools with TypeBox schemas, - * prompt snippets, guidelines, and TUI renderers. - */ - -import { - DEFAULT_MAX_BYTES, - DEFAULT_MAX_LINES, - formatSize, - truncateHead, - withFileMutationQueue, -} from "@mariozechner/pi-coding-agent"; -import type { ExtensionAPI } from "@mariozechner/pi-coding-agent"; -import { Text } from "@mariozechner/pi-tui"; -import { Type } from "typebox"; -import { mkdtemp, readFile, rm, writeFile } from "node:fs/promises"; -import { tmpdir } from "node:os"; -import { join } from "node:path"; -import type { BrowserDaemon } from "./daemon"; -import type { TabInfo } from "./protocol"; - -// ── AsyncFunction constructor ──────────────────────────────────────────────── - -const AsyncFunction = Object.getPrototypeOf(async () => {}).constructor as new (...args: string[]) => (...args: unknown[]) => Promise<unknown>; - -// ── Key code map ───────────────────────────────────────────────────────────── - -const SPECIAL_KEYS = [ - "Enter", "Tab", "Backspace", "Escape", "Delete", - "ArrowLeft", "ArrowUp", "ArrowRight", "ArrowDown", - "Home", "End", "PageUp", "PageDown", " ", -]; - -// ── Screenshot path ────────────────────────────────────────────────────────── - -let screenshotCounter = 0; -function nextScreenshotPath(): string { - screenshotCounter++; - return join(tmpdir(), `pi-browser-screenshot-${Date.now()}-${screenshotCounter}.png`); -} - -// ── Output truncation ──────────────────────────────────────────────────────── - -/** Track temp directories for cleanup on session shutdown. */ -const tempDirs: string[] = []; - -/** Best-effort cleanup of all tracked temp directories. */ -export async function cleanupTempDirs(): Promise<void> { - const dirs = tempDirs.splice(0); - await Promise.all( - dirs.map((d) => rm(d, { recursive: true, force: true }).catch(() => {})), - ); -} - -/** - * Truncate output to pi's built-in limits (50KB / 2000 lines). - * When truncated, writes the full output to a temp file so the LLM - * can read it via the read tool and so CTRL+O expand can show it. - */ -async function applyTruncation( - output: string, - prefix: string, -): Promise<{ - text: string; - fullOutputPath?: string; - wasTruncated: boolean; -}> { - const truncation = truncateHead(output, { - maxLines: DEFAULT_MAX_LINES, - maxBytes: DEFAULT_MAX_BYTES, - }); - - if (!truncation.truncated) { - return { text: truncation.content, wasTruncated: false }; - } - - const tempDir = await mkdtemp(join(tmpdir(), `pi-bh-${prefix}-`)); - tempDirs.push(tempDir); - - const tempFile = join(tempDir, "output.txt"); - await withFileMutationQueue(tempFile, async () => { - await writeFile(tempFile, output, "utf8"); - }); - - const omittedBytes = truncation.totalBytes - truncation.outputBytes; - let text = truncation.content; - text += `\n\n[Output truncated: ${truncation.outputLines} of ${truncation.totalLines} lines`; - text += ` (${formatSize(truncation.outputBytes)} of ${formatSize(truncation.totalBytes)}).`; - text += ` ${formatSize(omittedBytes)} omitted. Full output: ${tempFile}]`; - - return { text, fullOutputPath: tempFile, wasTruncated: true }; -} - -// ── Registration ───────────────────────────────────────────────────────────── - -// All tools migrated to src/domains/* in v0.3 — see registerAllTools. -export function registerTools(_pi: ExtensionAPI, _daemon: BrowserDaemon): void { - // intentionally empty -} |
