UNPKG

@agentforce/adk

Version:

AgentForce Agent Development Kit - A powerful framework for building AI agents and servers

86 lines (79 loc) 3.08 kB
import { writeFileSync, mkdirSync } from "fs"; import { resolve, dirname } from "path"; import type { ToolImplementation } from "../types"; /** * File system write tool - writes content to a file * Creates parent directories if they don't exist */ export const fs_write_file: ToolImplementation = { definition: { type: "function", function: { name: "fs_write_file", description: "Write content to a file, creating parent directories if needed", parameters: { type: "object", properties: { path: { type: "string", description: "The file path to write to (relative to current directory)", }, content: { type: "string", description: "The content to write to the file", }, encoding: { type: "string", description: "The encoding to use (default: utf-8)", enum: ["utf-8", "base64", "hex", "ascii"], }, create_dirs: { type: "boolean", description: "Whether to create parent directories if they don't exist (default: true)", }, }, required: ["path", "content"], }, }, }, execute: async (args: Record<string, any>) => { const filePath = args.path; const content = args.content; const encoding = args.encoding || "utf-8"; const createDirs = args.create_dirs !== false; try { // Resolve the absolute path const absolutePath = resolve(process.cwd(), filePath); // Security check: ensure we're not writing outside the current working directory const cwd = resolve(process.cwd()); if (!absolutePath.startsWith(cwd)) { return { success: false, error: "Access denied: cannot write outside current working directory", path: filePath, }; } // Create parent directories if needed if (createDirs) { const dir = dirname(absolutePath); mkdirSync(dir, { recursive: true }); } // Write the file writeFileSync(absolutePath, content, encoding as BufferEncoding); return { success: true, path: filePath, absolutePath: absolutePath, encoding: encoding, size: content.length, message: `Successfully wrote ${content.length} characters to ${filePath}`, }; } catch (error: any) { return { success: false, error: error.message, path: filePath, }; } }, };