When 429/500 errors occur during tool execution, empty assistant messages with stopReason='error' get persisted. These break the tool_use -> tool_result chain for Claude/Gemini APIs. Added centralized filtering in transformMessages to skip assistant messages with empty content and no tool calls. Provider-level filters remain for defense-in-depth.
102 lines
3.1 KiB
TypeScript
102 lines
3.1 KiB
TypeScript
export {
|
|
type BashOperations,
|
|
type BashToolDetails,
|
|
type BashToolOptions,
|
|
bashTool,
|
|
createBashTool,
|
|
} from "./bash.js";
|
|
export { createEditTool, type EditOperations, type EditToolDetails, type EditToolOptions, editTool } from "./edit.js";
|
|
export { createFindTool, type FindOperations, type FindToolDetails, type FindToolOptions, findTool } from "./find.js";
|
|
export { createGrepTool, type GrepOperations, type GrepToolDetails, type GrepToolOptions, grepTool } from "./grep.js";
|
|
export { createLsTool, type LsOperations, type LsToolDetails, type LsToolOptions, lsTool } from "./ls.js";
|
|
export {
|
|
createReadTool,
|
|
type ReadOperations,
|
|
type ReadToolDetails,
|
|
type ReadToolOptions,
|
|
readTool,
|
|
} from "./read.js";
|
|
export {
|
|
DEFAULT_MAX_BYTES,
|
|
DEFAULT_MAX_LINES,
|
|
formatSize,
|
|
type TruncationOptions,
|
|
type TruncationResult,
|
|
truncateHead,
|
|
truncateLine,
|
|
truncateTail,
|
|
} from "./truncate.js";
|
|
export { createWriteTool, type WriteOperations, type WriteToolOptions, writeTool } from "./write.js";
|
|
|
|
import type { AgentTool } from "@mariozechner/pi-agent-core";
|
|
import { type BashToolOptions, bashTool, createBashTool } from "./bash.js";
|
|
import { createEditTool, editTool } from "./edit.js";
|
|
import { createFindTool, findTool } from "./find.js";
|
|
import { createGrepTool, grepTool } from "./grep.js";
|
|
import { createLsTool, lsTool } from "./ls.js";
|
|
import { createReadTool, type ReadToolOptions, readTool } from "./read.js";
|
|
import { createWriteTool, writeTool } from "./write.js";
|
|
|
|
/** Tool type (AgentTool from pi-ai) */
|
|
export type Tool = AgentTool<any>;
|
|
|
|
// Default tools for full access mode (using process.cwd())
|
|
export const codingTools: Tool[] = [readTool, bashTool, editTool, writeTool];
|
|
|
|
// Read-only tools for exploration without modification (using process.cwd())
|
|
export const readOnlyTools: Tool[] = [readTool, grepTool, findTool, lsTool];
|
|
|
|
// All available tools (using process.cwd())
|
|
export const allTools = {
|
|
read: readTool,
|
|
bash: bashTool,
|
|
edit: editTool,
|
|
write: writeTool,
|
|
grep: grepTool,
|
|
find: findTool,
|
|
ls: lsTool,
|
|
};
|
|
|
|
export type ToolName = keyof typeof allTools;
|
|
|
|
export interface ToolsOptions {
|
|
/** Options for the read tool */
|
|
read?: ReadToolOptions;
|
|
/** Options for the bash tool */
|
|
bash?: BashToolOptions;
|
|
}
|
|
|
|
/**
|
|
* Create coding tools configured for a specific working directory.
|
|
*/
|
|
export function createCodingTools(cwd: string, options?: ToolsOptions): Tool[] {
|
|
return [
|
|
createReadTool(cwd, options?.read),
|
|
createBashTool(cwd, options?.bash),
|
|
createEditTool(cwd),
|
|
createWriteTool(cwd),
|
|
];
|
|
}
|
|
|
|
/**
|
|
* Create read-only tools configured for a specific working directory.
|
|
*/
|
|
export function createReadOnlyTools(cwd: string, options?: ToolsOptions): Tool[] {
|
|
return [createReadTool(cwd, options?.read), createGrepTool(cwd), createFindTool(cwd), createLsTool(cwd)];
|
|
}
|
|
|
|
/**
|
|
* Create all tools configured for a specific working directory.
|
|
*/
|
|
export function createAllTools(cwd: string, options?: ToolsOptions): Record<ToolName, Tool> {
|
|
return {
|
|
read: createReadTool(cwd, options?.read),
|
|
bash: createBashTool(cwd, options?.bash),
|
|
edit: createEditTool(cwd),
|
|
write: createWriteTool(cwd),
|
|
grep: createGrepTool(cwd),
|
|
find: createFindTool(cwd),
|
|
ls: createLsTool(cwd),
|
|
};
|
|
}
|