Change summary
internal/agent/tools/delete.go | 2
internal/tui/components/chat/messages/renderer.go | 28 ++++++++
internal/tui/components/dialogs/permissions/permissions.go | 20 +++++
3 files changed, 48 insertions(+), 2 deletions(-)
Detailed changes
@@ -31,7 +31,6 @@ type DeleteParams struct {
type DeletePermissionsParams struct {
FilePath string `json:"file_path"`
Recursive bool `json:"recursive,omitempty"`
- IsDir bool `json:"is_dir,omitempty"`
}
// DeleteToolName is the name of the delete tool.
@@ -79,7 +78,6 @@ func NewDeleteTool(lspClients *csync.Map[string, *lsp.Client], permissions permi
Params: DeletePermissionsParams{
FilePath: filePath,
Recursive: params.Recursive,
- IsDir: isDir,
},
},
)
@@ -187,6 +187,7 @@ func init() {
registry.register(tools.DownloadToolName, func() renderer { return downloadRenderer{} })
registry.register(tools.ViewToolName, func() renderer { return viewRenderer{} })
registry.register(tools.EditToolName, func() renderer { return editRenderer{} })
+ registry.register(tools.DeleteToolName, func() renderer { return deleteRenderer{} })
registry.register(tools.MultiEditToolName, func() renderer { return multiEditRenderer{} })
registry.register(tools.WriteToolName, func() renderer { return writeRenderer{} })
registry.register(tools.FetchToolName, func() renderer { return simpleFetchRenderer{} })
@@ -567,6 +568,33 @@ func (mer multiEditRenderer) Render(v *toolCallCmp) string {
})
}
+// -----------------------------------------------------------------------------
+// Delete renderer
+// -----------------------------------------------------------------------------
+
+// deleteRenderer handles file/directory deletion display
+type deleteRenderer struct {
+ baseRenderer
+}
+
+// Render displays the delete operation with file path and recursive flag
+func (dr deleteRenderer) Render(v *toolCallCmp) string {
+ var params tools.DeleteParams
+ var args []string
+ if err := dr.unmarshalParams(v.call.Input, ¶ms); err == nil {
+ file := fsext.PrettyPath(params.FilePath)
+ pb := newParamBuilder().addMain(file)
+ if params.Recursive {
+ pb.addFlag("recursive", true)
+ }
+ args = pb.build()
+ }
+
+ return dr.renderWithParams(v, "Delete", args, func() string {
+ return renderPlainContent(v, v.result.Content)
+ })
+}
+
// -----------------------------------------------------------------------------
// Write renderer
// -----------------------------------------------------------------------------
@@ -451,6 +451,8 @@ func (p *permissionDialogCmp) getOrGenerateContent() string {
content = p.generateViewContent()
case tools.LSToolName:
content = p.generateLSContent()
+ case tools.DeleteToolName:
+ content = p.generateDeleteContent()
default:
content = p.generateDefaultContent()
}
@@ -659,6 +661,24 @@ func (p *permissionDialogCmp) generateLSContent() string {
return ""
}
+func (p *permissionDialogCmp) generateDeleteContent() string {
+ params, ok := p.permission.Params.(tools.DeletePermissionsParams)
+ if !ok {
+ return ""
+ }
+ t := styles.CurrentTheme()
+ baseStyle := t.S().Base.Background(t.BgSubtle)
+
+ content := fmt.Sprintf("Filepath: %s", fsext.PrettyPath(params.FilePath))
+ if params.Recursive {
+ content += " (recursive)"
+ }
+ return baseStyle.
+ Padding(1, 2).
+ Width(p.contentViewPort.Width()).
+ Render(content)
+}
+
func (p *permissionDialogCmp) generateDefaultContent() string {
t := styles.CurrentTheme()
baseStyle := t.S().Base.Background(t.BgSubtle)