现象
-y 是全局 PersistentFlag 的 shorthand(dws --help 里可以看到 -y, --yes),但在 dws todo task delete 和 dws 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:469 → cmd.Flags().BoolP("yes", "y", false, ...)
internal/app/skill_setup.go:72 → cmd.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
相关
现象
-y是全局 PersistentFlag 的 shorthand(dws --help里可以看到-y, --yes),但在dws todo task delete和dws skill setup上不生效,只能用长写法--yes:根因
internal/app/flags.go:53全局注册了 PersistentFlag(同时含 shorthand):但
internal/helpers/todo.go:469又在todo task delete子命令上注册了本地同名 flag,只有长写法:cobra 的行为是:子命令的本地 flag 会屏蔽 inherited persistent flag。结果就是全局
-y在该子命令上"消失"。internal/app/skill_setup.go:72有同样问题:对照
internal/helpers/drive.go:552是正确写法:修复方案
方案 A(最小改动):把局部注册补上 shorthand
internal/helpers/todo.go:469→cmd.Flags().BoolP("yes", "y", false, ...)internal/app/skill_setup.go:72→cmd.Flags().BoolP("yes", "y", false, ...)方案 B(推荐):直接删掉这两处局部注册,让全局 PersistentFlag 自然继承下来:
--yes / -y走同一套语义,行为一致cmd.Flags().GetBool("yes")(PersistentFlag 也会出现在Flags()集合里)复现
环境
test/pre-mcp-discoveryc4d8c99相关