Files
zesdex/src/features/agent/infrastructure/tools/fs/read.ts
T

33 lines
957 B
TypeScript
Raw Normal View History

/**
* Read a file from the workspace. Mirrors `tools/fs/read.rs`.
*/
import * as fs from "node:fs";
import type { JsonValue } from "@zesdex/domain";
import { type Tool, type ToolCtx } from "../mod.ts";
import { argStr, resolvePath } from "../util.ts";
/** Read the contents of a file. */
export class Read implements Tool {
name = "read";
description = "Read the contents of a file";
parameters = {
type: "object",
properties: {
path: { type: "string", description: "Path to the file to read (relative to workspace root)" },
},
required: ["path"],
};
run(ctx: ToolCtx, args: JsonValue): string {
const rel = argStr(args, "path");
const file = resolvePath(ctx.workspaces, rel);
if (!fs.existsSync(file)) {
throw new Error(`file '${rel}' does not exist`);
}
if (!fs.statSync(file).isFile()) {
throw new Error(`'${rel}' is not a file`);
}
return fs.readFileSync(file, "utf8");
}
}