@@ -30,8 +30,9 @@ type writeTool struct {
3030}
3131
3232type WriteResponseMetadata struct {
33- Additions int `json:"additions"`
34- Removals int `json:"removals"`
33+ Diff string `json:"diff"`
34+ Additions int `json:"additions"`
35+ Removals int `json:"removals"`
3536}
3637
3738const (
@@ -128,12 +129,12 @@ func (w *writeTool) Run(ctx context.Context, call ToolCall) (ToolResponse, error
128129return NewTextErrorResponse (fmt .Sprintf ("File %s already contains the exact content. No changes made." , filePath )), nil
129130}
130131} else if ! os .IsNotExist (err ) {
131- return NewTextErrorResponse ( fmt .Sprintf ( "Failed to access file: %s " , err )), nil
132+ return ToolResponse {}, fmt .Errorf ( "error checking file: %w " , err )
132133}
133134
134135dir := filepath .Dir (filePath )
135136if err = os .MkdirAll (dir , 0o755 ); err != nil {
136- return NewTextErrorResponse ( fmt .Sprintf ( "Failed to create parent directories : %s " , err )), nil
137+ return ToolResponse {}, fmt .Errorf ( "error creating directory : %w " , err )
137138}
138139
139140oldContent := ""
@@ -146,15 +147,15 @@ func (w *writeTool) Run(ctx context.Context, call ToolCall) (ToolResponse, error
146147
147148sessionID , messageID := GetContextValues (ctx )
148149if sessionID == "" || messageID == "" {
149- return NewTextErrorResponse ( "session ID or message ID is missing" ), nil
150+ return ToolResponse {}, fmt . Errorf ( "session_id and message_id are required" )
150151}
151152diff , stats , err := git .GenerateGitDiffWithStats (
152153removeWorkingDirectoryPrefix (filePath ),
153154oldContent ,
154155params .Content ,
155156)
156157if err != nil {
157- return NewTextErrorResponse ( fmt .Sprintf ( "Failed to get file diff: %s " , err )), nil
158+ return ToolResponse {}, fmt .Errorf ( "error generating diff: %w " , err )
158159}
159160p := w .permissions .Request (
160161permission.CreatePermissionRequest {
@@ -169,12 +170,12 @@ func (w *writeTool) Run(ctx context.Context, call ToolCall) (ToolResponse, error
169170},
170171)
171172if ! p {
172- return NewTextErrorResponse ( fmt . Sprintf ( "Permission denied to create file: %s" , filePath )), nil
173+ return ToolResponse {}, permission . ErrorPermissionDenied
173174}
174175
175176err = os .WriteFile (filePath , []byte (params .Content ), 0o644 )
176177if err != nil {
177- return NewTextErrorResponse ( fmt .Sprintf ( "Failed to write file: %s " , err )), nil
178+ return ToolResponse {}, fmt .Errorf ( "error writing file: %w " , err )
178179}
179180
180181recordFileWrite (filePath )
@@ -186,6 +187,7 @@ func (w *writeTool) Run(ctx context.Context, call ToolCall) (ToolResponse, error
186187result += getDiagnostics (filePath , w .lspClients )
187188return WithResponseMetadata (NewTextResponse (result ),
188189WriteResponseMetadata {
190+ Diff : diff ,
189191Additions : stats .Additions ,
190192Removals : stats .Removals ,
191193},
0 commit comments