export { type BashOperations, type BashSpawnContext, type BashSpawnHook, type BashToolDetails, type BashToolInput, type BashToolOptions, createBashTool, createBashToolDefinition, createLocalBashOperations, } from "./bash.ts"; export { createEditTool, createEditToolDefinition, type EditOperations, type EditToolDetails, type EditToolInput, type EditToolOptions, } from "./edit.ts"; export { withFileMutationQueue } from "./file-mutation-queue.ts"; export { createFindTool, createFindToolDefinition, type FindOperations, type FindToolDetails, type FindToolInput, type FindToolOptions, } from "./find.ts"; export { createGrepTool, createGrepToolDefinition, type GrepOperations, type GrepToolDetails, type GrepToolInput, type GrepToolOptions, } from "./grep.ts"; export { createLsTool, createLsToolDefinition, type LsOperations, type LsToolDetails, type LsToolInput, type LsToolOptions, } from "./ls.ts"; export { createLocalPowerShellOperations, createPowerShellTool, createPowerShellToolDefinition, type PowerShellOperations, type PowerShellSpawnContext, type PowerShellSpawnHook, type PowerShellToolDetails, type PowerShellToolInput, type PowerShellToolOptions, } from "./powershell.ts"; export { createReadTool, createReadToolDefinition, type ReadOperations, type ReadToolDetails, type ReadToolInput, type ReadToolOptions, } from "./read.ts"; export { DEFAULT_MAX_BYTES, DEFAULT_MAX_LINES, formatSize, type TruncationOptions, type TruncationResult, truncateHead, truncateLine, truncateTail, } from "./truncate.ts"; export { createWriteTool, createWriteToolDefinition, type WriteOperations, type WriteToolInput, type WriteToolOptions, } from "./write.ts"; import type { AgentTool } from "@earendil-works/pi-agent-core"; import type { ToolDefinition } from "../extensions/types.ts"; import { type BashToolOptions, createBashTool, createBashToolDefinition } from "./bash.ts"; import { createEditTool, createEditToolDefinition, type EditToolOptions } from "./edit.ts"; import { createFindTool, createFindToolDefinition, type FindToolOptions } from "./find.ts"; import { createGrepTool, createGrepToolDefinition, type GrepToolOptions } from "./grep.ts"; import { createLsTool, createLsToolDefinition, type LsToolOptions } from "./ls.ts"; import { createPowerShellTool, createPowerShellToolDefinition, type PowerShellToolOptions } from "./powershell.ts"; import { createReadTool, createReadToolDefinition, type ReadToolOptions } from "./read.ts"; import { createWriteTool, createWriteToolDefinition, type WriteToolOptions } from "./write.ts"; export type Tool = AgentTool; export type ToolDef = ToolDefinition; export type ToolName = "read" | "bash" | "powershell" | "edit" | "write" | "grep" | "find" | "ls"; export const allToolNames: Set = new Set([ "read", "bash", "powershell", "edit", "write", "grep", "find", "ls", ]); export interface ToolsOptions { read?: ReadToolOptions; bash?: BashToolOptions; powershell?: PowerShellToolOptions; write?: WriteToolOptions; edit?: EditToolOptions; grep?: GrepToolOptions; find?: FindToolOptions; ls?: LsToolOptions; } export function createToolDefinition(toolName: ToolName, cwd: string, options?: ToolsOptions): ToolDef { switch (toolName) { case "read": return createReadToolDefinition(cwd, options?.read); case "bash": return createBashToolDefinition(cwd, options?.bash); case "powershell": return createPowerShellToolDefinition(cwd, options?.powershell); case "edit": return createEditToolDefinition(cwd, options?.edit); case "write": return createWriteToolDefinition(cwd, options?.write); case "grep": return createGrepToolDefinition(cwd, options?.grep); case "find": return createFindToolDefinition(cwd, options?.find); case "ls": return createLsToolDefinition(cwd, options?.ls); default: throw new Error(`Unknown tool name: ${toolName}`); } } export function createTool(toolName: ToolName, cwd: string, options?: ToolsOptions): Tool { switch (toolName) { case "read": return createReadTool(cwd, options?.read); case "bash": return createBashTool(cwd, options?.bash); case "powershell": return createPowerShellTool(cwd, options?.powershell); case "edit": return createEditTool(cwd, options?.edit); case "write": return createWriteTool(cwd, options?.write); case "grep": return createGrepTool(cwd, options?.grep); case "find": return createFindTool(cwd, options?.find); case "ls": return createLsTool(cwd, options?.ls); default: throw new Error(`Unknown tool name: ${toolName}`); } } export function createCodingToolDefinitions(cwd: string, options?: ToolsOptions): ToolDef[] { return [ createReadToolDefinition(cwd, options?.read), createBashToolDefinition(cwd, options?.bash), createEditToolDefinition(cwd, options?.edit), createWriteToolDefinition(cwd, options?.write), ]; } export function createReadOnlyToolDefinitions(cwd: string, options?: ToolsOptions): ToolDef[] { return [ createReadToolDefinition(cwd, options?.read), createGrepToolDefinition(cwd, options?.grep), createFindToolDefinition(cwd, options?.find), createLsToolDefinition(cwd, options?.ls), ]; } export function createAllToolDefinitions(cwd: string, options?: ToolsOptions): Record { return { read: createReadToolDefinition(cwd, options?.read), bash: createBashToolDefinition(cwd, options?.bash), powershell: createPowerShellToolDefinition(cwd, options?.powershell), edit: createEditToolDefinition(cwd, options?.edit), write: createWriteToolDefinition(cwd, options?.write), grep: createGrepToolDefinition(cwd, options?.grep), find: createFindToolDefinition(cwd, options?.find), ls: createLsToolDefinition(cwd, options?.ls), }; } export function createCodingTools(cwd: string, options?: ToolsOptions): Tool[] { return [ createReadTool(cwd, options?.read), createBashTool(cwd, options?.bash), createEditTool(cwd, options?.edit), createWriteTool(cwd, options?.write), ]; } export function createReadOnlyTools(cwd: string, options?: ToolsOptions): Tool[] { return [ createReadTool(cwd, options?.read), createGrepTool(cwd, options?.grep), createFindTool(cwd, options?.find), createLsTool(cwd, options?.ls), ]; } export function createAllTools(cwd: string, options?: ToolsOptions): Record { return { read: createReadTool(cwd, options?.read), bash: createBashTool(cwd, options?.bash), powershell: createPowerShellTool(cwd, options?.powershell), edit: createEditTool(cwd, options?.edit), write: createWriteTool(cwd, options?.write), grep: createGrepTool(cwd, options?.grep), find: createFindTool(cwd, options?.find), ls: createLsTool(cwd, options?.ls), }; }