fix(tools): resolve Read/Write/Edit paths against workspace directory

Previously, Read/Write/Edit tools used the global tool instances from
pi-coding-agent which had process.cwd() baked in at import time. Since
the gateway starts from /root/dev/ai/clawdbot, relative paths like
'SOUL.md' would incorrectly resolve there instead of the agent's
workspace (/root/clawd).

This fix:
- Adds workspaceDir option to createClawdbotCodingTools
- Creates fresh Read/Write/Edit tools bound to workspaceDir
- Adds cwd option to Bash tool defaults for consistency
- Passes effectiveWorkspace from pi-embedded-runner

Absolute paths and ~/... paths are unaffected. Sandboxed sessions
continue to use sandbox root as before.

Includes tests for Read/Write/Edit workspace path resolution.
This commit is contained in:
Muhammed Mukhthar CM
2026-01-10 05:36:09 +00:00
committed by Peter Steinberger
parent bf0184d0cf
commit de5b75eff6
4 changed files with 115 additions and 6 deletions

View File

@@ -61,6 +61,7 @@ export type BashToolDefaults = {
elevated?: BashElevatedDefaults;
allowBackground?: boolean;
scopeKey?: string;
cwd?: string;
};
export type ProcessToolDefaults = {
@@ -202,7 +203,8 @@ export function createBashTool(
}
const sandbox = elevatedRequested ? undefined : defaults?.sandbox;
const rawWorkdir = params.workdir?.trim() || process.cwd();
const rawWorkdir =
params.workdir?.trim() || defaults?.cwd || process.cwd();
let workdir = rawWorkdir;
let containerWorkdir = sandbox?.containerWorkdir;
if (sandbox) {