import { createBashToolDefinition, type ExtensionAPI, getAgentDir, SettingsManager, } from "@earendil-works/pi-coding-agent"; import { guardExtensionApi } from "./prompt-guard.ts"; type BashDefinition = ReturnType; /** Re-register Pi's bash so tools.jsonc can append to its model-facing description; execution stays upstream. */ export default function bashOverrideExtension(pi: ExtensionAPI): void { const sessionDefinitions = new Map(); const sessionDefinition = (cwd: string): BashDefinition => { let definition = sessionDefinitions.get(cwd); if (definition === undefined) { const settings = SettingsManager.create(cwd, getAgentDir()); definition = createBashToolDefinition(cwd, { shellPath: settings.getShellPath(), commandPrefix: settings.getShellCommandPrefix(), }); sessionDefinitions.set(cwd, definition); } return definition; }; guardExtensionApi(pi).registerTool({ ...sessionDefinition(process.cwd()), execute: (toolCallId, params, signal, onUpdate, ctx) => sessionDefinition(ctx?.cwd ?? process.cwd()).execute( toolCallId, params, signal, onUpdate, ctx, ), }); }