Skip to content

bug: dws todo task delete / dws skill setup 的 -y 短选项被本地 --yes 屏蔽 #370

Description

@PeterGuy326

现象

-y 是全局 PersistentFlag 的 shorthand(dws --help 里可以看到 -y, --yes),但在 dws todo task deletedws skill setup 上不生效,只能用长写法 --yes

$ dws todo task delete --task-id <taskId> -y
{
  "error": {
    "category": "internal",
    "code": 5,
    "message": "unknown shorthand flag: 'y' in -y"
  }
}

$ dws todo task delete --task-id <taskId> --yes
{ "result": { "success": true } }

根因

internal/app/flags.go:53 全局注册了 PersistentFlag(同时含 shorthand):

cmd.PersistentFlags().BoolVarP(&flags.Yes, "yes", "y", false, "跳过确认提示 (AI Agent 模式)")

internal/helpers/todo.go:469 又在 todo task delete 子命令上注册了本地同名 flag,只有长写法:

cmd.Flags().Bool("yes", false, i18n.T("跳过确认直接删除"))

cobra 的行为是:子命令的本地 flag 会屏蔽 inherited persistent flag。结果就是全局 -y 在该子命令上"消失"。

internal/app/skill_setup.go:72 有同样问题:

cmd.Flags().Bool("yes", false, "跳过所有确认提示")

对照 internal/helpers/drive.go:552 是正确写法:

cmd.Flags().BoolP("yes", "y", false, "跳过确认直接删除")

修复方案

方案 A(最小改动):把局部注册补上 shorthand

  • internal/helpers/todo.go:469cmd.Flags().BoolP("yes", "y", false, ...)
  • internal/app/skill_setup.go:72cmd.Flags().BoolP("yes", "y", false, ...)

方案 B(推荐):直接删掉这两处局部注册,让全局 PersistentFlag 自然继承下来:

  • 所有子命令的 --yes / -y 走同一套语义,行为一致
  • 不用维护两份描述文案
  • 避免后续复制粘贴出新的同名屏蔽 bug
  • 读取处仍可用 cmd.Flags().GetBool("yes")(PersistentFlag 也会出现在 Flags() 集合里)

复现

dws todo task delete --task-id <any> -y     # 报 unknown shorthand flag: 'y' in -y
dws todo task delete --task-id <any> --yes  # OK
dws skill setup --mode mono -y              # 同样报错
dws skill setup --mode mono --yes           # OK

环境

  • branch: test/pre-mcp-discovery
  • commit: c4d8c99
  • OS: macOS

相关

Metadata

Metadata

Assignees

No one assigned

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions