@@ -165,13 +165,20 @@ func processMultiEditWithCreation(edit editContext, params MultiEditParams, call
165 // Check permissions
165 // Check permissions
166 _, additions, removals := diff.GenerateDiff("", currentContent, strings.TrimPrefix(params.FilePath, edit.workingDir))
166 _, additions, removals := diff.GenerateDiff("", currentContent, strings.TrimPrefix(params.FilePath, edit.workingDir))
168+ editsApplied := len(params.Edits) - len(failedEdits)
169+ var description string
170+ if len(failedEdits) > 0 {
171+ description = fmt.Sprintf("Create file %s with %d of %d edits (%d failed)", params.FilePath, editsApplied, len(params.Edits), len(failedEdits))
173+ description = fmt.Sprintf("Create file %s with %d edits", params.FilePath, editsApplied)
168 p := edit.permissions.Request(permission.CreatePermissionRequest{
175 p := edit.permissions.Request(permission.CreatePermissionRequest{
169 SessionID: sessionID,
176 SessionID: sessionID,
170 Path: fsext.PathOrPrefix(params.FilePath, edit.workingDir),
177 Path: fsext.PathOrPrefix(params.FilePath, edit.workingDir),
171 ToolCallID: call.ID,
178 ToolCallID: call.ID,
172 ToolName: MultiEditToolName,
179 ToolName: MultiEditToolName,
173 Action: "write",
180 Action: "write",
174− Description: fmt.Sprintf("Create file %s with %d edits", params.FilePath, len(params.Edits)),
181+ Description: description,
175 Params: MultiEditPermissionsParams{
182 Params: MultiEditPermissionsParams{
176 FilePath: params.FilePath,
183 FilePath: params.FilePath,
177 OldContent: "",
184 OldContent: "",
@@ -202,7 +209,6 @@ func processMultiEditWithCreation(edit editContext, params MultiEditParams, call
202 recordFileWrite(params.FilePath)
209 recordFileWrite(params.FilePath)
203 recordFileRead(params.FilePath)
210 recordFileRead(params.FilePath)
205− editsApplied := len(params.Edits) - len(failedEdits)
206 var message string
212 var message string
207 if len(failedEdits) > 0 {
213 if len(failedEdits) > 0 {
208 message = fmt.Sprintf("File created with %d of %d edits: %s (%d edit(s) failed)", editsApplied, len(params.Edits), params.FilePath, len(failedEdits))
214 message = fmt.Sprintf("File created with %d of %d edits: %s (%d edit(s) failed)", editsApplied, len(params.Edits), params.FilePath, len(failedEdits))
@@ -299,13 +305,21 @@ func processMultiEditExistingFile(edit editContext, params MultiEditParams, call
300 // Generate diff and check permissions
306 // Generate diff and check permissions
301 _, additions, removals := diff.GenerateDiff(oldContent, currentContent, strings.TrimPrefix(params.FilePath, edit.workingDir))
307 _, additions, removals := diff.GenerateDiff(oldContent, currentContent, strings.TrimPrefix(params.FilePath, edit.workingDir))
309+ editsApplied := len(params.Edits) - len(failedEdits)
310+ var description string
311+ if len(failedEdits) > 0 {
312+ description = fmt.Sprintf("Apply %d of %d edits to file %s (%d failed)", editsApplied, len(params.Edits), params.FilePath, len(failedEdits))
314+ description = fmt.Sprintf("Apply %d edits to file %s", editsApplied, params.FilePath)
302 p := edit.permissions.Request(permission.CreatePermissionRequest{
316 p := edit.permissions.Request(permission.CreatePermissionRequest{
303 SessionID: sessionID,
317 SessionID: sessionID,
304 Path: fsext.PathOrPrefix(params.FilePath, edit.workingDir),
318 Path: fsext.PathOrPrefix(params.FilePath, edit.workingDir),
305 ToolCallID: call.ID,
319 ToolCallID: call.ID,
306 ToolName: MultiEditToolName,
320 ToolName: MultiEditToolName,
307 Action: "write",
321 Action: "write",
308− Description: fmt.Sprintf("Apply %d edits to file %s", len(params.Edits), params.FilePath),
322+ Description: description,
309 Params: MultiEditPermissionsParams{
323 Params: MultiEditPermissionsParams{
310 FilePath: params.FilePath,
324 FilePath: params.FilePath,
311 OldContent: oldContent,
325 OldContent: oldContent,
@@ -351,7 +365,6 @@ func processMultiEditExistingFile(edit editContext, params MultiEditParams, call
351 recordFileWrite(params.FilePath)
365 recordFileWrite(params.FilePath)
352 recordFileRead(params.FilePath)
366 recordFileRead(params.FilePath)
354− editsApplied := len(params.Edits) - len(failedEdits)
355 var message string
368 var message string
356 if len(failedEdits) > 0 {
369 if len(failedEdits) > 0 {
357 message = fmt.Sprintf("Applied %d of %d edits to file: %s (%d edit(s) failed)", editsApplied, len(params.Edits), params.FilePath, len(failedEdits))
370 message = fmt.Sprintf("Applied %d of %d edits to file: %s (%d edit(s) failed)", editsApplied, len(params.Edits), params.FilePath, len(failedEdits))