@@ -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
128129 return 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
134135 dir := filepath .Dir (filePath )
135136 if 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
139140 oldContent := ""
@@ -146,15 +147,15 @@ func (w *writeTool) Run(ctx context.Context, call ToolCall) (ToolResponse, error
146147
147148 sessionID , messageID := GetContextValues (ctx )
148149 if 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 }
151152 diff , stats , err := git .GenerateGitDiffWithStats (
152153 removeWorkingDirectoryPrefix (filePath ),
153154 oldContent ,
154155 params .Content ,
155156 )
156157 if 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 }
159160 p := w .permissions .Request (
160161 permission.CreatePermissionRequest {
@@ -169,12 +170,12 @@ func (w *writeTool) Run(ctx context.Context, call ToolCall) (ToolResponse, error
169170 },
170171 )
171172 if ! p {
172- return NewTextErrorResponse ( fmt . Sprintf ( "Permission denied to create file: %s" , filePath )), nil
173+ return ToolResponse {}, permission . ErrorPermissionDenied
173174 }
174175
175176 err = os .WriteFile (filePath , []byte (params .Content ), 0o644 )
176177 if 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
180181 recordFileWrite (filePath )
@@ -186,6 +187,7 @@ func (w *writeTool) Run(ctx context.Context, call ToolCall) (ToolResponse, error
186187 result += getDiagnostics (filePath , w .lspClients )
187188 return WithResponseMetadata (NewTextResponse (result ),
188189 WriteResponseMetadata {
190+ Diff : diff ,
189191 Additions : stats .Additions ,
190192 Removals : stats .Removals ,
191193 },
0 commit comments