diff --git a/internal/app/root_help_test.go b/internal/app/root_help_test.go index ec6d93f7..25279aed 100644 --- a/internal/app/root_help_test.go +++ b/internal/app/root_help_test.go @@ -90,6 +90,56 @@ func TestChatAgentGuidanceRendersOnlyOnStdout(t *testing.T) { } } +func TestCandidateAlignmentChatGuidance(t *testing.T) { + tests := []struct { + args []string + wants []string + }{ + {[]string{"chat", "message", "query-send-status", "--help"}, []string{"sendStatus=SUCCESS", "FAILED"}}, + {[]string{"chat", "+messages-query-send-status", "--help"}, []string{"sendStatus=SUCCESS", "openTaskId"}}, + {[]string{"chat", "message", "set-pin-msg", "--help"}, []string{"openTaskId", "set-top-msg", "chat set-top"}}, + {[]string{"chat", "message", "unset-pin-msg", "--help"}, []string{"复用", "unset-top-msg"}}, + {[]string{"chat", "message", "add-emoji", "--help"}, []string{"同一条真实消息", "openTaskId"}}, + {[]string{"chat", "message", "remove-emoji", "--help"}, []string{"复用", "表情名称"}}, + {[]string{"chat", "group", "members", "remove", "--help"}, []string{"群主", "转让群主"}}, + {[]string{"chat", "group", "update-icon", "--help"}, []string{"dentryId", "能力边界"}}, + {[]string{"chat", "group", "update-settings", "--help"}, []string{"群级设置", "user-settings set"}}, + {[]string{"chat", "group", "user-settings", "query", "--help"}, []string{"当前用户视角", "保存原值"}}, + {[]string{"chat", "group", "user-settings", "set", "--help"}, []string{"再次 query", "真实值恢复"}}, + } + for _, tc := range tests { + cmd := NewRootCommand() + var stdout bytes.Buffer + cmd.SetOut(&stdout) + cmd.SetErr(io.Discard) + cmd.SetArgs(tc.args) + if err := cmd.Execute(); err != nil { + t.Fatalf("%v: %v", tc.args, err) + } + for _, want := range tc.wants { + if !strings.Contains(stdout.String(), want) { + t.Fatalf("%v help missing %q:\n%s", tc.args, want, stdout.String()) + } + } + } +} + +func TestCandidateAlignmentDriveUploadSchemaGuidance(t *testing.T) { + cmd := NewRootCommand() + var stdout bytes.Buffer + cmd.SetOut(&stdout) + cmd.SetErr(io.Discard) + cmd.SetArgs([]string{"schema", "drive.upload", "--format", "json"}) + if err := cmd.Execute(); err != nil { + t.Fatalf("drive.upload schema: %v", err) + } + for _, want := range []string{"暂时不要发送", "不会发送聊天消息"} { + if !strings.Contains(stdout.String(), want) { + t.Fatalf("drive.upload schema missing %q:\n%s", want, stdout.String()) + } + } +} + func TestRootKeepsMainBranchChatCompatibilityCommands(t *testing.T) { root := NewRootCommand() listDirect := mustFindCommand(t, root, "chat", "message", "list-direct") diff --git a/internal/cli/schema_agent_metadata/chat.json b/internal/cli/schema_agent_metadata/chat.json index 48636b35..3a554022 100644 --- a/internal/cli/schema_agent_metadata/chat.json +++ b/internal/cli/schema_agent_metadata/chat.json @@ -9301,11 +9301,11 @@ ] }, "chat +messages-query-send-status": { - "agent_summary": "查询消息发送状态", + "agent_summary": "查询消息发送任务的业务终态,只有 sendStatus=SUCCESS 才表示真正发送成功", "agent_summary_source": "dws-agent-selection/chat", "availability": "available", "avoid_when": [ - "需要该 Shortcut 未公开的底层参数、原始响应或不同执行语义时,改用对应原子命令" + "需要该 Shortcut 未公开的底层参数、原始响应或不同执行语义时,改用对应原子命令;不要把 openTaskId 当 openMessageId 做 Pin、置顶或表情操作" ], "confirmation": "not_required", "effect": "read", @@ -9315,14 +9315,14 @@ ], "field_provenance": { "agent_summary": { - "value": "查询消息发送状态", + "value": "查询消息发送任务的业务终态,只有 sendStatus=SUCCESS 才表示真正发送成功", "source": "internal/cli/schema_hints/selection/chat.json", "precedence": "reviewed_explicit", "resolution": "highest_precedence", "review_reason": "Agent-authored and reviewed from the built-in Shortcut intent, executable Cobra path, and declared outcome; it affects selection only and does not alter execution or safety facts.", "candidates": [ { - "value": "查询消息发送状态", + "value": "查询消息发送任务的业务终态,只有 sendStatus=SUCCESS 才表示真正发送成功", "source": "internal/cli/schema_hints/selection/chat.json", "precedence": "reviewed_explicit", "selected": true, @@ -9348,7 +9348,7 @@ }, "avoid_when": { "value": [ - "需要该 Shortcut 未公开的底层参数、原始响应或不同执行语义时,改用对应原子命令" + "需要该 Shortcut 未公开的底层参数、原始响应或不同执行语义时,改用对应原子命令;不要把 openTaskId 当 openMessageId 做 Pin、置顶或表情操作" ], "source": "internal/cli/schema_hints/selection/chat.json", "precedence": "reviewed_explicit", @@ -9357,7 +9357,7 @@ "candidates": [ { "value": [ - "需要该 Shortcut 未公开的底层参数、原始响应或不同执行语义时,改用对应原子命令" + "需要该 Shortcut 未公开的底层参数、原始响应或不同执行语义时,改用对应原子命令;不要把 openTaskId 当 openMessageId 做 Pin、置顶或表情操作" ], "source": "internal/cli/schema_hints/selection/chat.json", "precedence": "reviewed_explicit", @@ -9523,7 +9523,7 @@ }, "use_when": { "value": [ - "当你发消息后拿到 openTaskId、想确认这条消息是否发送成功时使用;只读返回发送状态,需传 --open-task-id。" + "当你发消息后拿到 openTaskId、想确认这条消息是否发送成功时使用;只读返回发送状态,需传 --open-task-id;FAILED 必须如实报告,不能因外层 success=true 宣称成功。" ], "source": "internal/cli/schema_hints/selection/chat.json", "precedence": "reviewed_explicit", @@ -9532,7 +9532,7 @@ "candidates": [ { "value": [ - "当你发消息后拿到 openTaskId、想确认这条消息是否发送成功时使用;只读返回发送状态,需传 --open-task-id。" + "当你发消息后拿到 openTaskId、想确认这条消息是否发送成功时使用;只读返回发送状态,需传 --open-task-id;FAILED 必须如实报告,不能因外层 success=true 宣称成功。" ], "source": "internal/cli/schema_hints/selection/chat.json", "precedence": "reviewed_explicit", @@ -9555,7 +9555,7 @@ "internal/cli/schema_hints/selection/chat.json" ], "use_when": [ - "当你发消息后拿到 openTaskId、想确认这条消息是否发送成功时使用;只读返回发送状态,需传 --open-task-id。" + "当你发消息后拿到 openTaskId、想确认这条消息是否发送成功时使用;只读返回发送状态,需传 --open-task-id;FAILED 必须如实报告,不能因外层 success=true 宣称成功。" ] }, "chat +messages-read-status": { @@ -20567,7 +20567,7 @@ "agent_summary_source": "dws-agent-selection/chat", "availability": "available", "avoid_when": [ - "移除机器人时使用 chat group members remove-bot" + "移除机器人时使用 chat group members remove-bot;不要把建群者或群主加入 --users,也不要为了清理成员而转让群主" ], "confirmation": "not_required", "effect": "write", @@ -20616,7 +20616,7 @@ }, "avoid_when": { "value": [ - "移除机器人时使用 chat group members remove-bot" + "移除机器人时使用 chat group members remove-bot;不要把建群者或群主加入 --users,也不要为了清理成员而转让群主" ], "source": "internal/cli/schema_hints/selection/chat.json", "precedence": "reviewed_explicit", @@ -20625,7 +20625,7 @@ "candidates": [ { "value": [ - "移除机器人时使用 chat group members remove-bot" + "移除机器人时使用 chat group members remove-bot;不要把建群者或群主加入 --users,也不要为了清理成员而转让群主" ], "source": "internal/cli/schema_hints/selection/chat.json", "precedence": "reviewed_explicit", @@ -20804,7 +20804,7 @@ }, "use_when": { "value": [ - "群管理员明确要移除一个或多个普通成员时" + "群管理员明确要移除一个或多个普通成员时;清理临时群只传本次加入的普通成员" ], "source": "internal/cli/schema_hints/selection/chat.json", "precedence": "reviewed_explicit", @@ -20813,7 +20813,7 @@ "candidates": [ { "value": [ - "群管理员明确要移除一个或多个普通成员时" + "群管理员明确要移除一个或多个普通成员时;清理临时群只传本次加入的普通成员" ], "source": "internal/cli/schema_hints/selection/chat.json", "precedence": "reviewed_explicit", @@ -20844,7 +20844,7 @@ "skills/mono/references/products/chat.md" ], "use_when": [ - "群管理员明确要移除一个或多个普通成员时" + "群管理员明确要移除一个或多个普通成员时;清理临时群只传本次加入的普通成员" ] }, "chat group members remove-bot": { @@ -24064,7 +24064,7 @@ "agent_summary_source": "dws-agent-selection/chat", "availability": "available", "avoid_when": [ - "没有真实可用 mediaId 时先完成媒体上传" + "本地图片路径、钉盘 dentryId、聊天文件 uploadKey 都不能代替 icon-media-id;当前 CLI 无本地图片转群头像 mediaId 的能力,缺少 mediaId 时应如实报告能力边界" ], "confirmation": "not_required", "effect": "write", @@ -24113,7 +24113,7 @@ }, "avoid_when": { "value": [ - "没有真实可用 mediaId 时先完成媒体上传" + "本地图片路径、钉盘 dentryId、聊天文件 uploadKey 都不能代替 icon-media-id;当前 CLI 无本地图片转群头像 mediaId 的能力,缺少 mediaId 时应如实报告能力边界" ], "source": "internal/cli/schema_hints/selection/chat.json", "precedence": "reviewed_explicit", @@ -24122,7 +24122,7 @@ "candidates": [ { "value": [ - "没有真实可用 mediaId 时先完成媒体上传" + "本地图片路径、钉盘 dentryId、聊天文件 uploadKey 都不能代替 icon-media-id;当前 CLI 无本地图片转群头像 mediaId 的能力,缺少 mediaId 时应如实报告能力边界" ], "source": "internal/cli/schema_hints/selection/chat.json", "precedence": "reviewed_explicit", @@ -24268,7 +24268,7 @@ }, "use_when": { "value": [ - "已有上传后的头像 mediaId 并要修改群头像时" + "已有可用于群头像接口的真实 mediaId 并要修改群头像时" ], "source": "internal/cli/schema_hints/selection/chat.json", "precedence": "reviewed_explicit", @@ -24277,7 +24277,7 @@ "candidates": [ { "value": [ - "已有上传后的头像 mediaId 并要修改群头像时" + "已有可用于群头像接口的真实 mediaId 并要修改群头像时" ], "source": "internal/cli/schema_hints/selection/chat.json", "precedence": "reviewed_explicit", @@ -24306,7 +24306,7 @@ "skills/mono/references/products/chat.md" ], "use_when": [ - "已有上传后的头像 mediaId 并要修改群头像时" + "已有可用于群头像接口的真实 mediaId 并要修改群头像时" ] }, "chat group update-nick": { @@ -24602,7 +24602,7 @@ "agent_summary_source": "dws-agent-selection/chat", "availability": "available", "avoid_when": [ - "全员禁言和成员禁言使用专门的 mute 命令" + "全员禁言和成员禁言使用专门的 mute 命令;当前用户自己的会话置顶或免打扰使用 group user-settings set" ], "confirmation": "not_required", "effect": "write", @@ -24651,7 +24651,7 @@ }, "avoid_when": { "value": [ - "全员禁言和成员禁言使用专门的 mute 命令" + "全员禁言和成员禁言使用专门的 mute 命令;当前用户自己的会话置顶或免打扰使用 group user-settings set" ], "source": "internal/cli/schema_hints/selection/chat.json", "precedence": "reviewed_explicit", @@ -24660,7 +24660,7 @@ "candidates": [ { "value": [ - "全员禁言和成员禁言使用专门的 mute 命令" + "全员禁言和成员禁言使用专门的 mute 命令;当前用户自己的会话置顶或免打扰使用 group user-settings set" ], "source": "internal/cli/schema_hints/selection/chat.json", "precedence": "reviewed_explicit", @@ -24806,7 +24806,7 @@ }, "use_when": { "value": [ - "需要调整 searchable、入群验证或群权限等设置时" + "需要调整 searchable、入群验证、@所有人权限等群级设置时;修改后用群信息或设置查询核对终态" ], "source": "internal/cli/schema_hints/selection/chat.json", "precedence": "reviewed_explicit", @@ -24815,7 +24815,7 @@ "candidates": [ { "value": [ - "需要调整 searchable、入群验证或群权限等设置时" + "需要调整 searchable、入群验证、@所有人权限等群级设置时;修改后用群信息或设置查询核对终态" ], "source": "internal/cli/schema_hints/selection/chat.json", "precedence": "reviewed_explicit", @@ -24844,7 +24844,7 @@ "skills/mono/references/products/chat.md" ], "use_when": [ - "需要调整 searchable、入群验证或群权限等设置时" + "需要调整 searchable、入群验证、@所有人权限等群级设置时;修改后用群信息或设置查询核对终态" ] }, "chat group upgrade-to-external": { @@ -25112,7 +25112,7 @@ "agent_summary_source": "dws-agent-selection/chat", "availability": "available", "avoid_when": [ - "管理员级群功能开关用 chat group update-settings" + "管理员级群功能开关用 chat group update-settings;查询结果是当前用户视角,不代表群级设置" ], "confirmation": "not_required", "effect": "read", @@ -25155,7 +25155,7 @@ }, "avoid_when": { "value": [ - "管理员级群功能开关用 chat group update-settings" + "管理员级群功能开关用 chat group update-settings;查询结果是当前用户视角,不代表群级设置" ], "source": "internal/cli/schema_hints/selection/chat.json", "precedence": "reviewed_explicit", @@ -25164,7 +25164,7 @@ "candidates": [ { "value": [ - "管理员级群功能开关用 chat group update-settings" + "管理员级群功能开关用 chat group update-settings;查询结果是当前用户视角,不代表群级设置" ], "source": "internal/cli/schema_hints/selection/chat.json", "precedence": "reviewed_explicit", @@ -25330,7 +25330,7 @@ }, "use_when": { "value": [ - "用户说 看下这些群我的置顶和免打扰设置" + "用户说看下这些群中我自己的置顶和免打扰设置;修改前先查询并保存原值用于恢复" ], "source": "internal/cli/schema_hints/selection/chat.json", "precedence": "reviewed_explicit", @@ -25339,7 +25339,7 @@ "candidates": [ { "value": [ - "用户说 看下这些群我的置顶和免打扰设置" + "用户说看下这些群中我自己的置顶和免打扰设置;修改前先查询并保存原值用于恢复" ], "source": "internal/cli/schema_hints/selection/chat.json", "precedence": "reviewed_explicit", @@ -25362,7 +25362,7 @@ "wukong-develop:wukong/products" ], "use_when": [ - "用户说 看下这些群我的置顶和免打扰设置" + "用户说看下这些群中我自己的置顶和免打扰设置;修改前先查询并保存原值用于恢复" ] }, "chat group user-settings set": { @@ -25370,7 +25370,7 @@ "agent_summary_source": "dws-agent-selection/chat", "availability": "available", "avoid_when": [ - "单个群昵称优先 chat group update-nick" + "单个群昵称优先 chat group update-nick;不要用本命令修改 searchable、@所有人权限等群级开关;临时测试结束时按修改前 query 的真实值恢复" ], "confirmation": "not_required", "effect": "write", @@ -25413,7 +25413,7 @@ }, "avoid_when": { "value": [ - "单个群昵称优先 chat group update-nick" + "单个群昵称优先 chat group update-nick;不要用本命令修改 searchable、@所有人权限等群级开关;临时测试结束时按修改前 query 的真实值恢复" ], "source": "internal/cli/schema_hints/selection/chat.json", "precedence": "reviewed_explicit", @@ -25422,7 +25422,7 @@ "candidates": [ { "value": [ - "单个群昵称优先 chat group update-nick" + "单个群昵称优先 chat group update-nick;不要用本命令修改 searchable、@所有人权限等群级开关;临时测试结束时按修改前 query 的真实值恢复" ], "source": "internal/cli/schema_hints/selection/chat.json", "precedence": "reviewed_explicit", @@ -25588,7 +25588,7 @@ }, "use_when": { "value": [ - "用户说 把这些群都设为免打扰/置顶" + "用户说把这些群都设为免打扰或置顶;items 中只写需要改变的当前用户设置,完成后再次 query 验证" ], "source": "internal/cli/schema_hints/selection/chat.json", "precedence": "reviewed_explicit", @@ -25597,7 +25597,7 @@ "candidates": [ { "value": [ - "用户说 把这些群都设为免打扰/置顶" + "用户说把这些群都设为免打扰或置顶;items 中只写需要改变的当前用户设置,完成后再次 query 验证" ], "source": "internal/cli/schema_hints/selection/chat.json", "precedence": "reviewed_explicit", @@ -25620,7 +25620,7 @@ "wukong-develop:wukong/products" ], "use_when": [ - "用户说 把这些群都设为免打扰/置顶" + "用户说把这些群都设为免打扰或置顶;items 中只写需要改变的当前用户设置,完成后再次 query 验证" ] }, "chat group-mute": { @@ -29273,11 +29273,11 @@ ] }, "chat message add-emoji": { - "agent_summary": "给指定消息添加表情回应", + "agent_summary": "使用同一会话中真实的 openMessageId 给指定消息添加表情回应", "agent_summary_source": "dws-agent-selection/chat", "availability": "available", "avoid_when": [ - "发送文本消息或文字表情时不要使用" + "发送文本消息或文字表情时不要使用;不要把 openTaskId 当作 msg-id" ], "confirmation": "not_required", "effect": "write", @@ -29287,14 +29287,14 @@ ], "field_provenance": { "agent_summary": { - "value": "给指定消息添加表情回应", + "value": "使用同一会话中真实的 openMessageId 给指定消息添加表情回应", "source": "internal/cli/schema_hints/selection/chat.json", "precedence": "reviewed_explicit", "resolution": "highest_precedence", "review_reason": "AI 生成并复核的 Agent 选择语义,依据精确 CommandRegistry identity、真实 Cobra help 与产品参考,不改写执行、安全或接口事实。", "candidates": [ { - "value": "给指定消息添加表情回应", + "value": "使用同一会话中真实的 openMessageId 给指定消息添加表情回应", "source": "internal/cli/schema_hints/selection/chat.json", "precedence": "reviewed_explicit", "selected": true, @@ -29326,7 +29326,7 @@ }, "avoid_when": { "value": [ - "发送文本消息或文字表情时不要使用" + "发送文本消息或文字表情时不要使用;不要把 openTaskId 当作 msg-id" ], "source": "internal/cli/schema_hints/selection/chat.json", "precedence": "reviewed_explicit", @@ -29335,7 +29335,7 @@ "candidates": [ { "value": [ - "发送文本消息或文字表情时不要使用" + "发送文本消息或文字表情时不要使用;不要把 openTaskId 当作 msg-id" ], "source": "internal/cli/schema_hints/selection/chat.json", "precedence": "reviewed_explicit", @@ -29489,7 +29489,7 @@ }, "use_when": { "value": [ - "需要对已有消息添加一个 emoji reaction 时" + "需要对已有消息添加一个 emoji reaction 时;conversation-id 与 msg-id 必须来自同一条真实消息" ], "source": "internal/cli/schema_hints/selection/chat.json", "precedence": "reviewed_explicit", @@ -29498,7 +29498,7 @@ "candidates": [ { "value": [ - "需要对已有消息添加一个 emoji reaction 时" + "需要对已有消息添加一个 emoji reaction 时;conversation-id 与 msg-id 必须来自同一条真实消息" ], "source": "internal/cli/schema_hints/selection/chat.json", "precedence": "reviewed_explicit", @@ -29526,7 +29526,7 @@ "skills/mono/references/products/chat.md" ], "use_when": [ - "需要对已有消息添加一个 emoji reaction 时" + "需要对已有消息添加一个 emoji reaction 时;conversation-id 与 msg-id 必须来自同一条真实消息" ] }, "chat message add-favorite": { @@ -34634,11 +34634,11 @@ ] }, "chat message query-send-status": { - "agent_summary": "查询异步消息发送任务的状态", + "agent_summary": "查询异步消息发送任务的业务终态,并按 sendStatus 判断是否真正投递成功", "agent_summary_source": "dws-agent-selection/chat", "availability": "available", "avoid_when": [ - "没有 message send 真实返回的 openTaskId 时不要使用;openMessageId 和会话 ID 都不能代替 openTaskId" + "没有 message send 真实返回的 openTaskId 时不要使用;openMessageId 和会话 ID 都不能代替 openTaskId;FAILED 不得当作接口成功" ], "confirmation": "not_required", "effect": "read", @@ -34648,14 +34648,14 @@ ], "field_provenance": { "agent_summary": { - "value": "查询异步消息发送任务的状态", + "value": "查询异步消息发送任务的业务终态,并按 sendStatus 判断是否真正投递成功", "source": "internal/cli/schema_hints/selection/chat.json", "precedence": "reviewed_explicit", "resolution": "highest_precedence", "review_reason": "AI 生成并复核的 Agent 选择语义,依据精确 CommandRegistry identity、真实 Cobra help 与产品参考,不改写执行、安全或接口事实。", "candidates": [ { - "value": "查询异步消息发送任务的状态", + "value": "查询异步消息发送任务的业务终态,并按 sendStatus 判断是否真正投递成功", "source": "internal/cli/schema_hints/selection/chat.json", "precedence": "reviewed_explicit", "selected": true, @@ -34687,7 +34687,7 @@ }, "avoid_when": { "value": [ - "没有 message send 真实返回的 openTaskId 时不要使用;openMessageId 和会话 ID 都不能代替 openTaskId" + "没有 message send 真实返回的 openTaskId 时不要使用;openMessageId 和会话 ID 都不能代替 openTaskId;FAILED 不得当作接口成功" ], "source": "internal/cli/schema_hints/selection/chat.json", "precedence": "reviewed_explicit", @@ -34696,7 +34696,7 @@ "candidates": [ { "value": [ - "没有 message send 真实返回的 openTaskId 时不要使用;openMessageId 和会话 ID 都不能代替 openTaskId" + "没有 message send 真实返回的 openTaskId 时不要使用;openMessageId 和会话 ID 都不能代替 openTaskId;FAILED 不得当作接口成功" ], "source": "internal/cli/schema_hints/selection/chat.json", "precedence": "reviewed_explicit", @@ -34842,7 +34842,7 @@ }, "use_when": { "value": [ - "发送命令返回 openTaskId 后需要确认投递结果时" + "发送命令返回 openTaskId 后需要确认投递结果时;只有 sendStatus=SUCCESS 才能宣称消息发送成功" ], "source": "internal/cli/schema_hints/selection/chat.json", "precedence": "reviewed_explicit", @@ -34851,7 +34851,7 @@ "candidates": [ { "value": [ - "发送命令返回 openTaskId 后需要确认投递结果时" + "发送命令返回 openTaskId 后需要确认投递结果时;只有 sendStatus=SUCCESS 才能宣称消息发送成功" ], "source": "internal/cli/schema_hints/selection/chat.json", "precedence": "reviewed_explicit", @@ -34880,7 +34880,7 @@ "skills/mono/references/products/chat.md" ], "use_when": [ - "发送命令返回 openTaskId 后需要确认投递结果时" + "发送命令返回 openTaskId 后需要确认投递结果时;只有 sendStatus=SUCCESS 才能宣称消息发送成功" ] }, "chat message read-status": { @@ -35691,11 +35691,11 @@ ] }, "chat message remove-emoji": { - "agent_summary": "移除指定消息上的表情回应", + "agent_summary": "从同一条真实消息移除此前添加的同名表情回应", "agent_summary_source": "dws-agent-selection/chat", "availability": "available", "avoid_when": [ - "移除文字表情时使用 chat message remove-text-emotion" + "移除文字表情时使用 chat message remove-text-emotion;不要猜测新的消息 ID 或表情名称" ], "confirmation": "not_required", "effect": "write", @@ -35705,14 +35705,14 @@ ], "field_provenance": { "agent_summary": { - "value": "移除指定消息上的表情回应", + "value": "从同一条真实消息移除此前添加的同名表情回应", "source": "internal/cli/schema_hints/selection/chat.json", "precedence": "reviewed_explicit", "resolution": "highest_precedence", "review_reason": "AI 生成并复核的 Agent 选择语义,依据精确 CommandRegistry identity、真实 Cobra help 与产品参考,不改写执行、安全或接口事实。", "candidates": [ { - "value": "移除指定消息上的表情回应", + "value": "从同一条真实消息移除此前添加的同名表情回应", "source": "internal/cli/schema_hints/selection/chat.json", "precedence": "reviewed_explicit", "selected": true, @@ -35744,7 +35744,7 @@ }, "avoid_when": { "value": [ - "移除文字表情时使用 chat message remove-text-emotion" + "移除文字表情时使用 chat message remove-text-emotion;不要猜测新的消息 ID 或表情名称" ], "source": "internal/cli/schema_hints/selection/chat.json", "precedence": "reviewed_explicit", @@ -35753,7 +35753,7 @@ "candidates": [ { "value": [ - "移除文字表情时使用 chat message remove-text-emotion" + "移除文字表情时使用 chat message remove-text-emotion;不要猜测新的消息 ID 或表情名称" ], "source": "internal/cli/schema_hints/selection/chat.json", "precedence": "reviewed_explicit", @@ -35907,7 +35907,7 @@ }, "use_when": { "value": [ - "需要取消此前添加的 emoji reaction 时" + "需要取消此前添加的 emoji reaction 时;复用添加时的 conversation-id、msg-id 和 emoji" ], "source": "internal/cli/schema_hints/selection/chat.json", "precedence": "reviewed_explicit", @@ -35916,7 +35916,7 @@ "candidates": [ { "value": [ - "需要取消此前添加的 emoji reaction 时" + "需要取消此前添加的 emoji reaction 时;复用添加时的 conversation-id、msg-id 和 emoji" ], "source": "internal/cli/schema_hints/selection/chat.json", "precedence": "reviewed_explicit", @@ -35944,7 +35944,7 @@ "skills/mono/references/products/chat.md" ], "use_when": [ - "需要取消此前添加的 emoji reaction 时" + "需要取消此前添加的 emoji reaction 时;复用添加时的 conversation-id、msg-id 和 emoji" ] }, "chat message remove-favorite": { @@ -38319,11 +38319,11 @@ ] }, "chat message set-pin-msg": { - "agent_summary": "把指定消息设为会话置顶消息", + "agent_summary": "使用同源的 openConversationId 和 openMessageId 把指定消息设为 Pin", "agent_summary_source": "dws-agent-selection/chat", "availability": "available", "avoid_when": [ - "取消置顶使用 chat message unset-pin-msg" + "取消 Pin 使用 chat message unset-pin-msg;置顶到会话顶部使用 set-top-msg,置顶整个会话使用 chat set-top" ], "confirmation": "not_required", "effect": "write", @@ -38333,14 +38333,14 @@ ], "field_provenance": { "agent_summary": { - "value": "把指定消息设为会话置顶消息", + "value": "使用同源的 openConversationId 和 openMessageId 把指定消息设为 Pin", "source": "internal/cli/schema_hints/selection/chat.json", "precedence": "reviewed_explicit", "resolution": "highest_precedence", "review_reason": "AI 生成并复核的 Agent 选择语义,依据精确 CommandRegistry identity、真实 Cobra help 与产品参考,不改写执行、安全或接口事实。", "candidates": [ { - "value": "把指定消息设为会话置顶消息", + "value": "使用同源的 openConversationId 和 openMessageId 把指定消息设为 Pin", "source": "internal/cli/schema_hints/selection/chat.json", "precedence": "reviewed_explicit", "selected": true, @@ -38372,7 +38372,7 @@ }, "avoid_when": { "value": [ - "取消置顶使用 chat message unset-pin-msg" + "取消 Pin 使用 chat message unset-pin-msg;置顶到会话顶部使用 set-top-msg,置顶整个会话使用 chat set-top" ], "source": "internal/cli/schema_hints/selection/chat.json", "precedence": "reviewed_explicit", @@ -38381,7 +38381,7 @@ "candidates": [ { "value": [ - "取消置顶使用 chat message unset-pin-msg" + "取消 Pin 使用 chat message unset-pin-msg;置顶到会话顶部使用 set-top-msg,置顶整个会话使用 chat set-top" ], "source": "internal/cli/schema_hints/selection/chat.json", "precedence": "reviewed_explicit", @@ -38527,7 +38527,7 @@ }, "use_when": { "value": [ - "需要在会话中置顶一条已知消息时" + "需要在会话中钉住一条已知消息时;若发送只返回 openTaskId,先确认发送终态,再从消息查询结果取得真实 openMessageId" ], "source": "internal/cli/schema_hints/selection/chat.json", "precedence": "reviewed_explicit", @@ -38536,7 +38536,7 @@ "candidates": [ { "value": [ - "需要在会话中置顶一条已知消息时" + "需要在会话中钉住一条已知消息时;若发送只返回 openTaskId,先确认发送终态,再从消息查询结果取得真实 openMessageId" ], "source": "internal/cli/schema_hints/selection/chat.json", "precedence": "reviewed_explicit", @@ -38565,7 +38565,7 @@ "skills/mono/references/products/chat.md" ], "use_when": [ - "需要在会话中置顶一条已知消息时" + "需要在会话中钉住一条已知消息时;若发送只返回 openTaskId,先确认发送终态,再从消息查询结果取得真实 openMessageId" ] }, "chat message set-top-msg": { @@ -38854,11 +38854,11 @@ ] }, "chat message unset-pin-msg": { - "agent_summary": "取消指定消息的会话置顶", + "agent_summary": "使用设置 Pin 时的同源会话和消息 ID 取消指定消息的 Pin", "agent_summary_source": "dws-agent-selection/chat", "availability": "available", "avoid_when": [ - "新增置顶使用 chat message set-pin-msg" + "新增 Pin 使用 chat message set-pin-msg;不要改用 unset-top-msg 或 chat set-top --off" ], "confirmation": "not_required", "effect": "write", @@ -38868,14 +38868,14 @@ ], "field_provenance": { "agent_summary": { - "value": "取消指定消息的会话置顶", + "value": "使用设置 Pin 时的同源会话和消息 ID 取消指定消息的 Pin", "source": "internal/cli/schema_hints/selection/chat.json", "precedence": "reviewed_explicit", "resolution": "highest_precedence", "review_reason": "AI 生成并复核的 Agent 选择语义,依据精确 CommandRegistry identity、真实 Cobra help 与产品参考,不改写执行、安全或接口事实。", "candidates": [ { - "value": "取消指定消息的会话置顶", + "value": "使用设置 Pin 时的同源会话和消息 ID 取消指定消息的 Pin", "source": "internal/cli/schema_hints/selection/chat.json", "precedence": "reviewed_explicit", "selected": true, @@ -38907,7 +38907,7 @@ }, "avoid_when": { "value": [ - "新增置顶使用 chat message set-pin-msg" + "新增 Pin 使用 chat message set-pin-msg;不要改用 unset-top-msg 或 chat set-top --off" ], "source": "internal/cli/schema_hints/selection/chat.json", "precedence": "reviewed_explicit", @@ -38916,7 +38916,7 @@ "candidates": [ { "value": [ - "新增置顶使用 chat message set-pin-msg" + "新增 Pin 使用 chat message set-pin-msg;不要改用 unset-top-msg 或 chat set-top --off" ], "source": "internal/cli/schema_hints/selection/chat.json", "precedence": "reviewed_explicit", @@ -39062,7 +39062,7 @@ }, "use_when": { "value": [ - "需要移除一条已知置顶消息时" + "需要移除一条已知 Pin 消息时;复用 set-pin-msg 成功时的 openConversationId 和 openMessageId" ], "source": "internal/cli/schema_hints/selection/chat.json", "precedence": "reviewed_explicit", @@ -39071,7 +39071,7 @@ "candidates": [ { "value": [ - "需要移除一条已知置顶消息时" + "需要移除一条已知 Pin 消息时;复用 set-pin-msg 成功时的 openConversationId 和 openMessageId" ], "source": "internal/cli/schema_hints/selection/chat.json", "precedence": "reviewed_explicit", @@ -39100,7 +39100,7 @@ "skills/mono/references/products/chat.md" ], "use_when": [ - "需要移除一条已知置顶消息时" + "需要移除一条已知 Pin 消息时;复用 set-pin-msg 成功时的 openConversationId 和 openMessageId" ] }, "chat message unset-top-msg": { diff --git a/internal/cli/schema_agent_metadata/drive.json b/internal/cli/schema_agent_metadata/drive.json index a46029fa..233c3b9d 100644 --- a/internal/cli/schema_agent_metadata/drive.json +++ b/internal/cli/schema_agent_metadata/drive.json @@ -10478,6 +10478,7 @@ "agent_summary_source": "dws-agent-selection/drive", "availability": "available", "avoid_when": [ + "用户要把文件发送到群聊或单聊时使用 chat message send --msg-type file --file-path;drive upload 不会发送聊天消息", "常规场景不要拆成 upload-info + 手动 PUT + commit;仅自定义流式上传才用三步", "要把文件作为文档正文附件插入改用 dws doc media insert", "用户明确说文档空间且走 doc 兼容入口时可用 dws doc upload,默认仍推荐本命令", @@ -10525,6 +10526,7 @@ }, "avoid_when": { "value": [ + "用户要把文件发送到群聊或单聊时使用 chat message send --msg-type file --file-path;drive upload 不会发送聊天消息", "常规场景不要拆成 upload-info + 手动 PUT + commit;仅自定义流式上传才用三步", "要把文件作为文档正文附件插入改用 dws doc media insert", "用户明确说文档空间且走 doc 兼容入口时可用 dws doc upload,默认仍推荐本命令", @@ -10537,6 +10539,7 @@ "candidates": [ { "value": [ + "用户要把文件发送到群聊或单聊时使用 chat message send --msg-type file --file-path;drive upload 不会发送聊天消息", "常规场景不要拆成 upload-info + 手动 PUT + commit;仅自定义流式上传才用三步", "要把文件作为文档正文附件插入改用 dws doc media insert", "用户明确说文档空间且走 doc 兼容入口时可用 dws doc upload,默认仍推荐本命令", @@ -10733,6 +10736,7 @@ "use_when": { "value": [ "用户要把本地文件上传到钉盘/我的文件(首选一条命令自动完成凭证+PUT+提交)时", + "用户明确要求只上传或暂存附件、暂时不要发送到任何聊天会话时", "上传到知识库/文档空间时加 --workspace;需要转在线文档时加 --convert", "用户明确要求用本地文件替换已有钉盘/文档空间文件时传 --node;该模式会覆盖远端内容并要求确认" ], @@ -10744,6 +10748,7 @@ { "value": [ "用户要把本地文件上传到钉盘/我的文件(首选一条命令自动完成凭证+PUT+提交)时", + "用户明确要求只上传或暂存附件、暂时不要发送到任何聊天会话时", "上传到知识库/文档空间时加 --workspace;需要转在线文档时加 --convert", "用户明确要求用本地文件替换已有钉盘/文档空间文件时传 --node;该模式会覆盖远端内容并要求确认" ], @@ -10774,6 +10779,7 @@ ], "use_when": [ "用户要把本地文件上传到钉盘/我的文件(首选一条命令自动完成凭证+PUT+提交)时", + "用户明确要求只上传或暂存附件、暂时不要发送到任何聊天会话时", "上传到知识库/文档空间时加 --workspace;需要转在线文档时加 --convert", "用户明确要求用本地文件替换已有钉盘/文档空间文件时传 --node;该模式会覆盖远端内容并要求确认" ] diff --git a/internal/cli/schema_agent_metadata/index.json b/internal/cli/schema_agent_metadata/index.json index eccbea94..fb72b4b4 100644 --- a/internal/cli/schema_agent_metadata/index.json +++ b/internal/cli/schema_agent_metadata/index.json @@ -1,6 +1,6 @@ { "version": 1, - "source_hash": "sha256:eedf9163f496888aa3a065bdbd85647e3702a73ce74703f27083059e22a74098", + "source_hash": "sha256:add7be57e9ed6b69783be5df6d321c83ebe3b9c71a934e9991d91ee41fea23f4", "surface_hash": "sha256:4897d582a472d9d3596f88fb4546e7795d6b9bc334d020712f5d895ce894f7a7", "coverage": { "surface_products": 26, diff --git a/internal/cli/schema_agent_metadata_audit.json b/internal/cli/schema_agent_metadata_audit.json index ebda6ced..f265adaf 100644 --- a/internal/cli/schema_agent_metadata_audit.json +++ b/internal/cli/schema_agent_metadata_audit.json @@ -1,6 +1,6 @@ { "version": 1, - "source_hash": "sha256:eedf9163f496888aa3a065bdbd85647e3702a73ce74703f27083059e22a74098", + "source_hash": "sha256:add7be57e9ed6b69783be5df6d321c83ebe3b9c71a934e9991d91ee41fea23f4", "surface_hash": "sha256:4897d582a472d9d3596f88fb4546e7795d6b9bc334d020712f5d895ce894f7a7", "source_files": 160, "hint_files": 54, diff --git a/internal/cli/schema_catalog/catalog.json b/internal/cli/schema_catalog/catalog.json index 4267c709..b5bc81cf 100644 --- a/internal/cli/schema_catalog/catalog.json +++ b/internal/cli/schema_catalog/catalog.json @@ -1,12 +1,12 @@ { "version": 1, "surface_hash": "sha256:4897d582a472d9d3596f88fb4546e7795d6b9bc334d020712f5d895ce894f7a7", - "source_hash": "sha256:113dbc3507c5e4d871802d567e960c4947b8066472c28fb8a6dc64e9fef36da9", + "source_hash": "sha256:2bdcd3ac9d59f625cd4ed1e97938357b68ac483ef213a9e739baac67e3a1db3b", "catalog": { "agent_metadata": { "products_with_metadata": 26, "source": "embedded-skill-metadata", - "source_hash": "sha256:eedf9163f496888aa3a065bdbd85647e3702a73ce74703f27083059e22a74098", + "source_hash": "sha256:add7be57e9ed6b69783be5df6d321c83ebe3b9c71a934e9991d91ee41fea23f4", "surface_hash": "sha256:4897d582a472d9d3596f88fb4546e7795d6b9bc334d020712f5d895ce894f7a7", "surface_products": 26, "surface_tools": 875, @@ -7784,11 +7784,11 @@ }, { "agent_metadata_source": "embedded-skill-metadata", - "agent_summary": "给指定消息添加表情回应", + "agent_summary": "使用同一会话中真实的 openMessageId 给指定消息添加表情回应", "agent_summary_source": "dws-agent-selection/chat", "availability": "available", "avoid_when": [ - "发送文本消息或文字表情时不要使用" + "发送文本消息或文字表情时不要使用;不要把 openTaskId 当作 msg-id" ], "canonical_path": "chat.add_emoji_reaction", "cli_name": "add-emoji", @@ -7810,7 +7810,7 @@ "risk": "medium", "title": "对消息添加 emoji 表情回应", "use_when": [ - "需要对已有消息添加一个 emoji reaction 时" + "需要对已有消息添加一个 emoji reaction 时;conversation-id 与 msg-id 必须来自同一条真实消息" ] }, { @@ -7967,7 +7967,7 @@ "agent_summary_source": "dws-agent-selection/chat", "availability": "available", "avoid_when": [ - "管理员级群功能开关用 chat group update-settings" + "管理员级群功能开关用 chat group update-settings;查询结果是当前用户视角,不代表群级设置" ], "canonical_path": "chat.batch_query_group_chat_settings", "cli_name": "query", @@ -7985,7 +7985,7 @@ "risk": "low", "title": "批量查询当前用户的群会话设置", "use_when": [ - "用户说 看下这些群我的置顶和免打扰设置" + "用户说看下这些群中我自己的置顶和免打扰设置;修改前先查询并保存原值用于恢复" ] }, { @@ -7994,7 +7994,7 @@ "agent_summary_source": "dws-agent-selection/chat", "availability": "available", "avoid_when": [ - "单个群昵称优先 chat group update-nick" + "单个群昵称优先 chat group update-nick;不要用本命令修改 searchable、@所有人权限等群级开关;临时测试结束时按修改前 query 的真实值恢复" ], "canonical_path": "chat.batch_update_group_chat_settings", "cli_name": "set", @@ -8012,7 +8012,7 @@ "risk": "medium", "title": "批量更新当前用户的群会话设置", "use_when": [ - "用户说 把这些群都设为免打扰/置顶" + "用户说把这些群都设为免打扰或置顶;items 中只写需要改变的当前用户设置,完成后再次 query 验证" ] }, { @@ -9430,11 +9430,11 @@ }, { "agent_metadata_source": "embedded-skill-metadata", - "agent_summary": "查询异步消息发送任务的状态", + "agent_summary": "查询异步消息发送任务的业务终态,并按 sendStatus 判断是否真正投递成功", "agent_summary_source": "dws-agent-selection/chat", "availability": "available", "avoid_when": [ - "没有 message send 真实返回的 openTaskId 时不要使用;openMessageId 和会话 ID 都不能代替 openTaskId" + "没有 message send 真实返回的 openTaskId 时不要使用;openMessageId 和会话 ID 都不能代替 openTaskId;FAILED 不得当作接口成功" ], "canonical_path": "chat.query_message_send_status", "cli_name": "query-send-status", @@ -9456,7 +9456,7 @@ "risk": "low", "title": "查询消息发送状态", "use_when": [ - "发送命令返回 openTaskId 后需要确认投递结果时" + "发送命令返回 openTaskId 后需要确认投递结果时;只有 sendStatus=SUCCESS 才能宣称消息发送成功" ] }, { @@ -9672,11 +9672,11 @@ }, { "agent_metadata_source": "embedded-skill-metadata", - "agent_summary": "移除指定消息上的表情回应", + "agent_summary": "从同一条真实消息移除此前添加的同名表情回应", "agent_summary_source": "dws-agent-selection/chat", "availability": "available", "avoid_when": [ - "移除文字表情时使用 chat message remove-text-emotion" + "移除文字表情时使用 chat message remove-text-emotion;不要猜测新的消息 ID 或表情名称" ], "canonical_path": "chat.remove_emoji_reaction", "cli_name": "remove-emoji", @@ -9698,7 +9698,7 @@ "risk": "medium", "title": "移除消息的 emoji 表情回应", "use_when": [ - "需要取消此前添加的 emoji reaction 时" + "需要取消此前添加的 emoji reaction 时;复用添加时的 conversation-id、msg-id 和 emoji" ] }, { @@ -9707,7 +9707,7 @@ "agent_summary_source": "dws-agent-selection/chat", "availability": "available", "avoid_when": [ - "移除机器人时使用 chat group members remove-bot" + "移除机器人时使用 chat group members remove-bot;不要把建群者或群主加入 --users,也不要为了清理成员而转让群主" ], "canonical_path": "chat.remove_group_member", "cli_name": "remove", @@ -9729,7 +9729,7 @@ "risk": "medium", "title": "移除群成员", "use_when": [ - "群管理员明确要移除一个或多个普通成员时" + "群管理员明确要移除一个或多个普通成员时;清理临时群只传本次加入的普通成员" ] }, { @@ -10342,11 +10342,11 @@ }, { "agent_metadata_source": "embedded-skill-metadata", - "agent_summary": "把指定消息设为会话置顶消息", + "agent_summary": "使用同源的 openConversationId 和 openMessageId 把指定消息设为 Pin", "agent_summary_source": "dws-agent-selection/chat", "availability": "available", "avoid_when": [ - "取消置顶使用 chat message unset-pin-msg" + "取消 Pin 使用 chat message unset-pin-msg;置顶到会话顶部使用 set-top-msg,置顶整个会话使用 chat set-top" ], "canonical_path": "chat.set_pin_message", "cli_name": "set-pin-msg", @@ -10368,7 +10368,7 @@ "risk": "medium", "title": "钉住消息(Pin)", "use_when": [ - "需要在会话中置顶一条已知消息时" + "需要在会话中钉住一条已知消息时;若发送只返回 openTaskId,先确认发送终态,再从消息查询结果取得真实 openMessageId" ] }, { @@ -11393,11 +11393,11 @@ }, { "agent_metadata_source": "embedded-skill-metadata", - "agent_summary": "查询消息发送状态", + "agent_summary": "查询消息发送任务的业务终态,只有 sendStatus=SUCCESS 才表示真正发送成功", "agent_summary_source": "dws-agent-selection/chat", "availability": "available", "avoid_when": [ - "需要该 Shortcut 未公开的底层参数、原始响应或不同执行语义时,改用对应原子命令" + "需要该 Shortcut 未公开的底层参数、原始响应或不同执行语义时,改用对应原子命令;不要把 openTaskId 当 openMessageId 做 Pin、置顶或表情操作" ], "canonical_path": "chat.shortcut_messages_query_send_status", "cli_name": "+messages-query-send-status", @@ -11414,7 +11414,7 @@ "risk": "low", "title": "查询消息发送状态", "use_when": [ - "当你发消息后拿到 openTaskId、想确认这条消息是否发送成功时使用;只读返回发送状态,需传 --open-task-id。" + "当你发消息后拿到 openTaskId、想确认这条消息是否发送成功时使用;只读返回发送状态,需传 --open-task-id;FAILED 必须如实报告,不能因外层 success=true 宣称成功。" ] }, { @@ -11768,11 +11768,11 @@ }, { "agent_metadata_source": "embedded-skill-metadata", - "agent_summary": "取消指定消息的会话置顶", + "agent_summary": "使用设置 Pin 时的同源会话和消息 ID 取消指定消息的 Pin", "agent_summary_source": "dws-agent-selection/chat", "availability": "available", "avoid_when": [ - "新增置顶使用 chat message set-pin-msg" + "新增 Pin 使用 chat message set-pin-msg;不要改用 unset-top-msg 或 chat set-top --off" ], "canonical_path": "chat.unset_pin_message", "cli_name": "unset-pin-msg", @@ -11794,7 +11794,7 @@ "risk": "medium", "title": "取消钉住消息(Unpin)", "use_when": [ - "需要移除一条已知置顶消息时" + "需要移除一条已知 Pin 消息时;复用 set-pin-msg 成功时的 openConversationId 和 openMessageId" ] }, { @@ -11918,7 +11918,7 @@ "agent_summary_source": "dws-agent-selection/chat", "availability": "available", "avoid_when": [ - "没有真实可用 mediaId 时先完成媒体上传" + "本地图片路径、钉盘 dentryId、聊天文件 uploadKey 都不能代替 icon-media-id;当前 CLI 无本地图片转群头像 mediaId 的能力,缺少 mediaId 时应如实报告能力边界" ], "canonical_path": "chat.update_group_icon", "cli_name": "update-icon", @@ -11940,7 +11940,7 @@ "risk": "medium", "title": "更新群头像", "use_when": [ - "已有上传后的头像 mediaId 并要修改群头像时" + "已有可用于群头像接口的真实 mediaId 并要修改群头像时" ] }, { @@ -12007,7 +12007,7 @@ "agent_summary_source": "dws-agent-selection/chat", "availability": "available", "avoid_when": [ - "全员禁言和成员禁言使用专门的 mute 命令" + "全员禁言和成员禁言使用专门的 mute 命令;当前用户自己的会话置顶或免打扰使用 group user-settings set" ], "canonical_path": "chat.update_group_settings", "cli_name": "update-settings", @@ -12029,7 +12029,7 @@ "risk": "medium", "title": "更新群设置", "use_when": [ - "需要调整 searchable、入群验证或群权限等设置时" + "需要调整 searchable、入群验证、@所有人权限等群级设置时;修改后用群信息或设置查询核对终态" ] }, { @@ -18283,6 +18283,7 @@ "agent_summary_source": "dws-agent-selection/drive", "availability": "available", "avoid_when": [ + "用户要把文件发送到群聊或单聊时使用 chat message send --msg-type file --file-path;drive upload 不会发送聊天消息", "常规场景不要拆成 upload-info + 手动 PUT + commit;仅自定义流式上传才用三步", "要把文件作为文档正文附件插入改用 dws doc media insert", "用户明确说文档空间且走 doc 兼容入口时可用 dws doc upload,默认仍推荐本命令", @@ -18307,6 +18308,7 @@ "title": "上传本地文件到钉盘或文档空间", "use_when": [ "用户要把本地文件上传到钉盘/我的文件(首选一条命令自动完成凭证+PUT+提交)时", + "用户明确要求只上传或暂存附件、暂时不要发送到任何聊天会话时", "上传到知识库/文档空间时加 --workspace;需要转在线文档时加 --convert", "用户明确要求用本地文件替换已有钉盘/文档空间文件时传 --node;该模式会覆盖远端内容并要求确认" ] diff --git a/internal/cli/schema_catalog/tools/chat.json b/internal/cli/schema_catalog/tools/chat.json index 7ea74b6e..5b3be451 100644 --- a/internal/cli/schema_catalog/tools/chat.json +++ b/internal/cli/schema_catalog/tools/chat.json @@ -1158,11 +1158,11 @@ "skills/mono/SKILL.md", "skills/mono/references/products/chat.md" ], - "agent_summary": "给指定消息添加表情回应", + "agent_summary": "使用同一会话中真实的 openMessageId 给指定消息添加表情回应", "agent_summary_source": "dws-agent-selection/chat", "availability": "available", "avoid_when": [ - "发送文本消息或文字表情时不要使用" + "发送文本消息或文字表情时不要使用;不要把 openTaskId 当作 msg-id" ], "canonical_path": "chat.add_emoji_reaction", "cli_name": "add-emoji", @@ -1193,14 +1193,14 @@ "review_reason": "AI 生成并复核的 Agent 选择语义,依据精确 CommandRegistry identity、真实 Cobra help 与产品参考,不改写执行、安全或接口事实。", "selected": true, "source": "internal/cli/schema_hints/selection/chat.json", - "value": "给指定消息添加表情回应" + "value": "使用同一会话中真实的 openMessageId 给指定消息添加表情回应" } ], "precedence": "reviewed_explicit", "resolution": "highest_precedence", "review_reason": "AI 生成并复核的 Agent 选择语义,依据精确 CommandRegistry identity、真实 Cobra help 与产品参考,不改写执行、安全或接口事实。", "source": "internal/cli/schema_hints/selection/chat.json", - "value": "给指定消息添加表情回应" + "value": "使用同一会话中真实的 openMessageId 给指定消息添加表情回应" }, "availability": { "candidates": [ @@ -1232,7 +1232,7 @@ "selected": true, "source": "internal/cli/schema_hints/selection/chat.json", "value": [ - "发送文本消息或文字表情时不要使用" + "发送文本消息或文字表情时不要使用;不要把 openTaskId 当作 msg-id" ] } ], @@ -1241,7 +1241,7 @@ "review_reason": "AI 生成并复核的 Agent 选择语义,依据精确 CommandRegistry identity、真实 Cobra help 与产品参考,不改写执行、安全或接口事实。", "source": "internal/cli/schema_hints/selection/chat.json", "value": [ - "发送文本消息或文字表情时不要使用" + "发送文本消息或文字表情时不要使用;不要把 openTaskId 当作 msg-id" ] }, "canonical_path": { @@ -1479,7 +1479,7 @@ "selected": true, "source": "internal/cli/schema_hints/selection/chat.json", "value": [ - "需要对已有消息添加一个 emoji reaction 时" + "需要对已有消息添加一个 emoji reaction 时;conversation-id 与 msg-id 必须来自同一条真实消息" ] } ], @@ -1488,7 +1488,7 @@ "review_reason": "AI 生成并复核的 Agent 选择语义,依据精确 CommandRegistry identity、真实 Cobra help 与产品参考,不改写执行、安全或接口事实。", "source": "internal/cli/schema_hints/selection/chat.json", "value": [ - "需要对已有消息添加一个 emoji reaction 时" + "需要对已有消息添加一个 emoji reaction 时;conversation-id 与 msg-id 必须来自同一条真实消息" ] } }, @@ -2220,7 +2220,7 @@ "source": "reviewed_command_registry", "title": "对消息添加 emoji 表情回应", "use_when": [ - "需要对已有消息添加一个 emoji reaction 时" + "需要对已有消息添加一个 emoji reaction 时;conversation-id 与 msg-id 必须来自同一条真实消息" ] }, "chat.add_group_member": { @@ -6372,7 +6372,7 @@ "agent_summary_source": "dws-agent-selection/chat", "availability": "available", "avoid_when": [ - "管理员级群功能开关用 chat group update-settings" + "管理员级群功能开关用 chat group update-settings;查询结果是当前用户视角,不代表群级设置" ], "canonical_path": "chat.batch_query_group_chat_settings", "cli_name": "query", @@ -6426,7 +6426,7 @@ "selected": true, "source": "internal/cli/schema_hints/selection/chat.json", "value": [ - "管理员级群功能开关用 chat group update-settings" + "管理员级群功能开关用 chat group update-settings;查询结果是当前用户视角,不代表群级设置" ] } ], @@ -6435,7 +6435,7 @@ "review_reason": "人工审阅:对照悟空 develop 同名命令实现、Cobra Long/Example 与 Runtime 确认门禁移植;不改变命令身份、参数契约或接口绑定。", "source": "internal/cli/schema_hints/selection/chat.json", "value": [ - "管理员级群功能开关用 chat group update-settings" + "管理员级群功能开关用 chat group update-settings;查询结果是当前用户视角,不代表群级设置" ] }, "canonical_path": { @@ -6645,7 +6645,7 @@ "selected": true, "source": "internal/cli/schema_hints/selection/chat.json", "value": [ - "用户说 看下这些群我的置顶和免打扰设置" + "用户说看下这些群中我自己的置顶和免打扰设置;修改前先查询并保存原值用于恢复" ] } ], @@ -6654,7 +6654,7 @@ "review_reason": "人工审阅:对照悟空 develop 同名命令实现、Cobra Long/Example 与 Runtime 确认门禁移植;不改变命令身份、参数契约或接口绑定。", "source": "internal/cli/schema_hints/selection/chat.json", "value": [ - "用户说 看下这些群我的置顶和免打扰设置" + "用户说看下这些群中我自己的置顶和免打扰设置;修改前先查询并保存原值用于恢复" ] } }, @@ -6773,7 +6773,7 @@ "source": "reviewed_command_registry", "title": "批量查询当前用户的群会话设置", "use_when": [ - "用户说 看下这些群我的置顶和免打扰设置" + "用户说看下这些群中我自己的置顶和免打扰设置;修改前先查询并保存原值用于恢复" ] }, "chat.batch_update_group_chat_settings": { @@ -6789,7 +6789,7 @@ "agent_summary_source": "dws-agent-selection/chat", "availability": "available", "avoid_when": [ - "单个群昵称优先 chat group update-nick" + "单个群昵称优先 chat group update-nick;不要用本命令修改 searchable、@所有人权限等群级开关;临时测试结束时按修改前 query 的真实值恢复" ], "canonical_path": "chat.batch_update_group_chat_settings", "cli_name": "set", @@ -6843,7 +6843,7 @@ "selected": true, "source": "internal/cli/schema_hints/selection/chat.json", "value": [ - "单个群昵称优先 chat group update-nick" + "单个群昵称优先 chat group update-nick;不要用本命令修改 searchable、@所有人权限等群级开关;临时测试结束时按修改前 query 的真实值恢复" ] } ], @@ -6852,7 +6852,7 @@ "review_reason": "人工审阅:对照悟空 develop 同名命令实现、Cobra Long/Example 与 Runtime 确认门禁移植;不改变命令身份、参数契约或接口绑定。", "source": "internal/cli/schema_hints/selection/chat.json", "value": [ - "单个群昵称优先 chat group update-nick" + "单个群昵称优先 chat group update-nick;不要用本命令修改 searchable、@所有人权限等群级开关;临时测试结束时按修改前 query 的真实值恢复" ] }, "canonical_path": { @@ -7062,7 +7062,7 @@ "selected": true, "source": "internal/cli/schema_hints/selection/chat.json", "value": [ - "用户说 把这些群都设为免打扰/置顶" + "用户说把这些群都设为免打扰或置顶;items 中只写需要改变的当前用户设置,完成后再次 query 验证" ] } ], @@ -7071,7 +7071,7 @@ "review_reason": "人工审阅:对照悟空 develop 同名命令实现、Cobra Long/Example 与 Runtime 确认门禁移植;不改变命令身份、参数契约或接口绑定。", "source": "internal/cli/schema_hints/selection/chat.json", "value": [ - "用户说 把这些群都设为免打扰/置顶" + "用户说把这些群都设为免打扰或置顶;items 中只写需要改变的当前用户设置,完成后再次 query 验证" ] } }, @@ -7190,7 +7190,7 @@ "source": "reviewed_command_registry", "title": "批量更新当前用户的群会话设置", "use_when": [ - "用户说 把这些群都设为免打扰/置顶" + "用户说把这些群都设为免打扰或置顶;items 中只写需要改变的当前用户设置,完成后再次 query 验证" ] }, "chat.clear_all_red_point": { @@ -38313,11 +38313,11 @@ "skills/mono/references/intent-guide.md", "skills/mono/references/products/chat.md" ], - "agent_summary": "查询异步消息发送任务的状态", + "agent_summary": "查询异步消息发送任务的业务终态,并按 sendStatus 判断是否真正投递成功", "agent_summary_source": "dws-agent-selection/chat", "availability": "available", "avoid_when": [ - "没有 message send 真实返回的 openTaskId 时不要使用;openMessageId 和会话 ID 都不能代替 openTaskId" + "没有 message send 真实返回的 openTaskId 时不要使用;openMessageId 和会话 ID 都不能代替 openTaskId;FAILED 不得当作接口成功" ], "canonical_path": "chat.query_message_send_status", "cli_name": "query-send-status", @@ -38338,14 +38338,14 @@ "review_reason": "AI 生成并复核的 Agent 选择语义,依据精确 CommandRegistry identity、真实 Cobra help 与产品参考,不改写执行、安全或接口事实。", "selected": true, "source": "internal/cli/schema_hints/selection/chat.json", - "value": "查询异步消息发送任务的状态" + "value": "查询异步消息发送任务的业务终态,并按 sendStatus 判断是否真正投递成功" } ], "precedence": "reviewed_explicit", "resolution": "highest_precedence", "review_reason": "AI 生成并复核的 Agent 选择语义,依据精确 CommandRegistry identity、真实 Cobra help 与产品参考,不改写执行、安全或接口事实。", "source": "internal/cli/schema_hints/selection/chat.json", - "value": "查询异步消息发送任务的状态" + "value": "查询异步消息发送任务的业务终态,并按 sendStatus 判断是否真正投递成功" }, "availability": { "candidates": [ @@ -38377,7 +38377,7 @@ "selected": true, "source": "internal/cli/schema_hints/selection/chat.json", "value": [ - "没有 message send 真实返回的 openTaskId 时不要使用;openMessageId 和会话 ID 都不能代替 openTaskId" + "没有 message send 真实返回的 openTaskId 时不要使用;openMessageId 和会话 ID 都不能代替 openTaskId;FAILED 不得当作接口成功" ] } ], @@ -38386,7 +38386,7 @@ "review_reason": "AI 生成并复核的 Agent 选择语义,依据精确 CommandRegistry identity、真实 Cobra help 与产品参考,不改写执行、安全或接口事实。", "source": "internal/cli/schema_hints/selection/chat.json", "value": [ - "没有 message send 真实返回的 openTaskId 时不要使用;openMessageId 和会话 ID 都不能代替 openTaskId" + "没有 message send 真实返回的 openTaskId 时不要使用;openMessageId 和会话 ID 都不能代替 openTaskId;FAILED 不得当作接口成功" ] }, "canonical_path": { @@ -38608,7 +38608,7 @@ "selected": true, "source": "internal/cli/schema_hints/selection/chat.json", "value": [ - "发送命令返回 openTaskId 后需要确认投递结果时" + "发送命令返回 openTaskId 后需要确认投递结果时;只有 sendStatus=SUCCESS 才能宣称消息发送成功" ] } ], @@ -38617,7 +38617,7 @@ "review_reason": "AI 生成并复核的 Agent 选择语义,依据精确 CommandRegistry identity、真实 Cobra help 与产品参考,不改写执行、安全或接口事实。", "source": "internal/cli/schema_hints/selection/chat.json", "value": [ - "发送命令返回 openTaskId 后需要确认投递结果时" + "发送命令返回 openTaskId 后需要确认投递结果时;只有 sendStatus=SUCCESS 才能宣称消息发送成功" ] } }, @@ -38767,7 +38767,7 @@ "source": "reviewed_command_registry", "title": "查询消息发送状态", "use_when": [ - "发送命令返回 openTaskId 后需要确认投递结果时" + "发送命令返回 openTaskId 后需要确认投递结果时;只有 sendStatus=SUCCESS 才能宣称消息发送成功" ] }, "chat.query_msg_read_status": { @@ -43352,11 +43352,11 @@ "skills/mono/SKILL.md", "skills/mono/references/products/chat.md" ], - "agent_summary": "移除指定消息上的表情回应", + "agent_summary": "从同一条真实消息移除此前添加的同名表情回应", "agent_summary_source": "dws-agent-selection/chat", "availability": "available", "avoid_when": [ - "移除文字表情时使用 chat message remove-text-emotion" + "移除文字表情时使用 chat message remove-text-emotion;不要猜测新的消息 ID 或表情名称" ], "canonical_path": "chat.remove_emoji_reaction", "cli_name": "remove-emoji", @@ -43387,14 +43387,14 @@ "review_reason": "AI 生成并复核的 Agent 选择语义,依据精确 CommandRegistry identity、真实 Cobra help 与产品参考,不改写执行、安全或接口事实。", "selected": true, "source": "internal/cli/schema_hints/selection/chat.json", - "value": "移除指定消息上的表情回应" + "value": "从同一条真实消息移除此前添加的同名表情回应" } ], "precedence": "reviewed_explicit", "resolution": "highest_precedence", "review_reason": "AI 生成并复核的 Agent 选择语义,依据精确 CommandRegistry identity、真实 Cobra help 与产品参考,不改写执行、安全或接口事实。", "source": "internal/cli/schema_hints/selection/chat.json", - "value": "移除指定消息上的表情回应" + "value": "从同一条真实消息移除此前添加的同名表情回应" }, "availability": { "candidates": [ @@ -43426,7 +43426,7 @@ "selected": true, "source": "internal/cli/schema_hints/selection/chat.json", "value": [ - "移除文字表情时使用 chat message remove-text-emotion" + "移除文字表情时使用 chat message remove-text-emotion;不要猜测新的消息 ID 或表情名称" ] } ], @@ -43435,7 +43435,7 @@ "review_reason": "AI 生成并复核的 Agent 选择语义,依据精确 CommandRegistry identity、真实 Cobra help 与产品参考,不改写执行、安全或接口事实。", "source": "internal/cli/schema_hints/selection/chat.json", "value": [ - "移除文字表情时使用 chat message remove-text-emotion" + "移除文字表情时使用 chat message remove-text-emotion;不要猜测新的消息 ID 或表情名称" ] }, "canonical_path": { @@ -43673,7 +43673,7 @@ "selected": true, "source": "internal/cli/schema_hints/selection/chat.json", "value": [ - "需要取消此前添加的 emoji reaction 时" + "需要取消此前添加的 emoji reaction 时;复用添加时的 conversation-id、msg-id 和 emoji" ] } ], @@ -43682,7 +43682,7 @@ "review_reason": "AI 生成并复核的 Agent 选择语义,依据精确 CommandRegistry identity、真实 Cobra help 与产品参考,不改写执行、安全或接口事实。", "source": "internal/cli/schema_hints/selection/chat.json", "value": [ - "需要取消此前添加的 emoji reaction 时" + "需要取消此前添加的 emoji reaction 时;复用添加时的 conversation-id、msg-id 和 emoji" ] } }, @@ -44414,7 +44414,7 @@ "source": "reviewed_command_registry", "title": "移除消息的 emoji 表情回应", "use_when": [ - "需要取消此前添加的 emoji reaction 时" + "需要取消此前添加的 emoji reaction 时;复用添加时的 conversation-id、msg-id 和 emoji" ] }, "chat.remove_group_member": { @@ -44435,7 +44435,7 @@ "agent_summary_source": "dws-agent-selection/chat", "availability": "available", "avoid_when": [ - "移除机器人时使用 chat group members remove-bot" + "移除机器人时使用 chat group members remove-bot;不要把建群者或群主加入 --users,也不要为了清理成员而转让群主" ], "canonical_path": "chat.remove_group_member", "cli_name": "remove", @@ -44495,7 +44495,7 @@ "selected": true, "source": "internal/cli/schema_hints/selection/chat.json", "value": [ - "移除机器人时使用 chat group members remove-bot" + "移除机器人时使用 chat group members remove-bot;不要把建群者或群主加入 --users,也不要为了清理成员而转让群主" ] } ], @@ -44504,7 +44504,7 @@ "review_reason": "AI 生成并复核的 Agent 选择语义,依据精确 CommandRegistry identity、真实 Cobra help 与产品参考,不改写执行、安全或接口事实。", "source": "internal/cli/schema_hints/selection/chat.json", "value": [ - "移除机器人时使用 chat group members remove-bot" + "移除机器人时使用 chat group members remove-bot;不要把建群者或群主加入 --users,也不要为了清理成员而转让群主" ] }, "canonical_path": { @@ -44759,7 +44759,7 @@ "selected": true, "source": "internal/cli/schema_hints/selection/chat.json", "value": [ - "群管理员明确要移除一个或多个普通成员时" + "群管理员明确要移除一个或多个普通成员时;清理临时群只传本次加入的普通成员" ] } ], @@ -44768,7 +44768,7 @@ "review_reason": "AI 生成并复核的 Agent 选择语义,依据精确 CommandRegistry identity、真实 Cobra help 与产品参考,不改写执行、安全或接口事实。", "source": "internal/cli/schema_hints/selection/chat.json", "value": [ - "群管理员明确要移除一个或多个普通成员时" + "群管理员明确要移除一个或多个普通成员时;清理临时群只传本次加入的普通成员" ] } }, @@ -45075,7 +45075,7 @@ "source": "reviewed_command_registry", "title": "移除群成员", "use_when": [ - "群管理员明确要移除一个或多个普通成员时" + "群管理员明确要移除一个或多个普通成员时;清理临时群只传本次加入的普通成员" ] }, "chat.remove_message_favorite": { @@ -65014,11 +65014,11 @@ "skills/mono/references/intent-guide.md", "skills/mono/references/products/chat.md" ], - "agent_summary": "把指定消息设为会话置顶消息", + "agent_summary": "使用同源的 openConversationId 和 openMessageId 把指定消息设为 Pin", "agent_summary_source": "dws-agent-selection/chat", "availability": "available", "avoid_when": [ - "取消置顶使用 chat message unset-pin-msg" + "取消 Pin 使用 chat message unset-pin-msg;置顶到会话顶部使用 set-top-msg,置顶整个会话使用 chat set-top" ], "canonical_path": "chat.set_pin_message", "cli_name": "set-pin-msg", @@ -65039,14 +65039,14 @@ "review_reason": "AI 生成并复核的 Agent 选择语义,依据精确 CommandRegistry identity、真实 Cobra help 与产品参考,不改写执行、安全或接口事实。", "selected": true, "source": "internal/cli/schema_hints/selection/chat.json", - "value": "把指定消息设为会话置顶消息" + "value": "使用同源的 openConversationId 和 openMessageId 把指定消息设为 Pin" } ], "precedence": "reviewed_explicit", "resolution": "highest_precedence", "review_reason": "AI 生成并复核的 Agent 选择语义,依据精确 CommandRegistry identity、真实 Cobra help 与产品参考,不改写执行、安全或接口事实。", "source": "internal/cli/schema_hints/selection/chat.json", - "value": "把指定消息设为会话置顶消息" + "value": "使用同源的 openConversationId 和 openMessageId 把指定消息设为 Pin" }, "availability": { "candidates": [ @@ -65078,7 +65078,7 @@ "selected": true, "source": "internal/cli/schema_hints/selection/chat.json", "value": [ - "取消置顶使用 chat message unset-pin-msg" + "取消 Pin 使用 chat message unset-pin-msg;置顶到会话顶部使用 set-top-msg,置顶整个会话使用 chat set-top" ] } ], @@ -65087,7 +65087,7 @@ "review_reason": "AI 生成并复核的 Agent 选择语义,依据精确 CommandRegistry identity、真实 Cobra help 与产品参考,不改写执行、安全或接口事实。", "source": "internal/cli/schema_hints/selection/chat.json", "value": [ - "取消置顶使用 chat message unset-pin-msg" + "取消 Pin 使用 chat message unset-pin-msg;置顶到会话顶部使用 set-top-msg,置顶整个会话使用 chat set-top" ] }, "canonical_path": { @@ -65309,7 +65309,7 @@ "selected": true, "source": "internal/cli/schema_hints/selection/chat.json", "value": [ - "需要在会话中置顶一条已知消息时" + "需要在会话中钉住一条已知消息时;若发送只返回 openTaskId,先确认发送终态,再从消息查询结果取得真实 openMessageId" ] } ], @@ -65318,7 +65318,7 @@ "review_reason": "AI 生成并复核的 Agent 选择语义,依据精确 CommandRegistry identity、真实 Cobra help 与产品参考,不改写执行、安全或接口事实。", "source": "internal/cli/schema_hints/selection/chat.json", "value": [ - "需要在会话中置顶一条已知消息时" + "需要在会话中钉住一条已知消息时;若发送只返回 openTaskId,先确认发送终态,再从消息查询结果取得真实 openMessageId" ] } }, @@ -65598,7 +65598,7 @@ "source": "reviewed_command_registry", "title": "钉住消息(Pin)", "use_when": [ - "需要在会话中置顶一条已知消息时" + "需要在会话中钉住一条已知消息时;若发送只返回 openTaskId,先确认发送终态,再从消息查询结果取得真实 openMessageId" ] }, "chat.set_top_conversation": { @@ -87865,11 +87865,11 @@ "internal/cli/schema_hints/metadata/chat.json", "internal/cli/schema_hints/selection/chat.json" ], - "agent_summary": "查询消息发送状态", + "agent_summary": "查询消息发送任务的业务终态,只有 sendStatus=SUCCESS 才表示真正发送成功", "agent_summary_source": "dws-agent-selection/chat", "availability": "available", "avoid_when": [ - "需要该 Shortcut 未公开的底层参数、原始响应或不同执行语义时,改用对应原子命令" + "需要该 Shortcut 未公开的底层参数、原始响应或不同执行语义时,改用对应原子命令;不要把 openTaskId 当 openMessageId 做 Pin、置顶或表情操作" ], "canonical_path": "chat.shortcut_messages_query_send_status", "cli_name": "+messages-query-send-status", @@ -87890,14 +87890,14 @@ "review_reason": "Agent-authored and reviewed from the built-in Shortcut intent, executable Cobra path, and declared outcome; it affects selection only and does not alter execution or safety facts.", "selected": true, "source": "internal/cli/schema_hints/selection/chat.json", - "value": "查询消息发送状态" + "value": "查询消息发送任务的业务终态,只有 sendStatus=SUCCESS 才表示真正发送成功" } ], "precedence": "reviewed_explicit", "resolution": "highest_precedence", "review_reason": "Agent-authored and reviewed from the built-in Shortcut intent, executable Cobra path, and declared outcome; it affects selection only and does not alter execution or safety facts.", "source": "internal/cli/schema_hints/selection/chat.json", - "value": "查询消息发送状态" + "value": "查询消息发送任务的业务终态,只有 sendStatus=SUCCESS 才表示真正发送成功" }, "availability": { "candidates": [ @@ -87923,7 +87923,7 @@ "selected": true, "source": "internal/cli/schema_hints/selection/chat.json", "value": [ - "需要该 Shortcut 未公开的底层参数、原始响应或不同执行语义时,改用对应原子命令" + "需要该 Shortcut 未公开的底层参数、原始响应或不同执行语义时,改用对应原子命令;不要把 openTaskId 当 openMessageId 做 Pin、置顶或表情操作" ] } ], @@ -87932,7 +87932,7 @@ "review_reason": "Agent-authored and reviewed from the built-in Shortcut intent, executable Cobra path, and declared outcome; it affects selection only and does not alter execution or safety facts.", "source": "internal/cli/schema_hints/selection/chat.json", "value": [ - "需要该 Shortcut 未公开的底层参数、原始响应或不同执行语义时,改用对应原子命令" + "需要该 Shortcut 未公开的底层参数、原始响应或不同执行语义时,改用对应原子命令;不要把 openTaskId 当 openMessageId 做 Pin、置顶或表情操作" ] }, "canonical_path": { @@ -88142,7 +88142,7 @@ "selected": true, "source": "internal/cli/schema_hints/selection/chat.json", "value": [ - "当你发消息后拿到 openTaskId、想确认这条消息是否发送成功时使用;只读返回发送状态,需传 --open-task-id。" + "当你发消息后拿到 openTaskId、想确认这条消息是否发送成功时使用;只读返回发送状态,需传 --open-task-id;FAILED 必须如实报告,不能因外层 success=true 宣称成功。" ] } ], @@ -88151,7 +88151,7 @@ "review_reason": "Agent-authored and reviewed from the built-in Shortcut intent, executable Cobra path, and declared outcome; it affects selection only and does not alter execution or safety facts.", "source": "internal/cli/schema_hints/selection/chat.json", "value": [ - "当你发消息后拿到 openTaskId、想确认这条消息是否发送成功时使用;只读返回发送状态,需传 --open-task-id。" + "当你发消息后拿到 openTaskId、想确认这条消息是否发送成功时使用;只读返回发送状态,需传 --open-task-id;FAILED 必须如实报告,不能因外层 success=true 宣称成功。" ] } }, @@ -88268,7 +88268,7 @@ "source": "reviewed_command_registry", "title": "查询消息发送状态", "use_when": [ - "当你发消息后拿到 openTaskId、想确认这条消息是否发送成功时使用;只读返回发送状态,需传 --open-task-id。" + "当你发消息后拿到 openTaskId、想确认这条消息是否发送成功时使用;只读返回发送状态,需传 --open-task-id;FAILED 必须如实报告,不能因外层 success=true 宣称成功。" ] }, "chat.shortcut_messages_read_status": { @@ -101127,11 +101127,11 @@ "skills/mono/references/intent-guide.md", "skills/mono/references/products/chat.md" ], - "agent_summary": "取消指定消息的会话置顶", + "agent_summary": "使用设置 Pin 时的同源会话和消息 ID 取消指定消息的 Pin", "agent_summary_source": "dws-agent-selection/chat", "availability": "available", "avoid_when": [ - "新增置顶使用 chat message set-pin-msg" + "新增 Pin 使用 chat message set-pin-msg;不要改用 unset-top-msg 或 chat set-top --off" ], "canonical_path": "chat.unset_pin_message", "cli_name": "unset-pin-msg", @@ -101152,14 +101152,14 @@ "review_reason": "AI 生成并复核的 Agent 选择语义,依据精确 CommandRegistry identity、真实 Cobra help 与产品参考,不改写执行、安全或接口事实。", "selected": true, "source": "internal/cli/schema_hints/selection/chat.json", - "value": "取消指定消息的会话置顶" + "value": "使用设置 Pin 时的同源会话和消息 ID 取消指定消息的 Pin" } ], "precedence": "reviewed_explicit", "resolution": "highest_precedence", "review_reason": "AI 生成并复核的 Agent 选择语义,依据精确 CommandRegistry identity、真实 Cobra help 与产品参考,不改写执行、安全或接口事实。", "source": "internal/cli/schema_hints/selection/chat.json", - "value": "取消指定消息的会话置顶" + "value": "使用设置 Pin 时的同源会话和消息 ID 取消指定消息的 Pin" }, "availability": { "candidates": [ @@ -101191,7 +101191,7 @@ "selected": true, "source": "internal/cli/schema_hints/selection/chat.json", "value": [ - "新增置顶使用 chat message set-pin-msg" + "新增 Pin 使用 chat message set-pin-msg;不要改用 unset-top-msg 或 chat set-top --off" ] } ], @@ -101200,7 +101200,7 @@ "review_reason": "AI 生成并复核的 Agent 选择语义,依据精确 CommandRegistry identity、真实 Cobra help 与产品参考,不改写执行、安全或接口事实。", "source": "internal/cli/schema_hints/selection/chat.json", "value": [ - "新增置顶使用 chat message set-pin-msg" + "新增 Pin 使用 chat message set-pin-msg;不要改用 unset-top-msg 或 chat set-top --off" ] }, "canonical_path": { @@ -101422,7 +101422,7 @@ "selected": true, "source": "internal/cli/schema_hints/selection/chat.json", "value": [ - "需要移除一条已知置顶消息时" + "需要移除一条已知 Pin 消息时;复用 set-pin-msg 成功时的 openConversationId 和 openMessageId" ] } ], @@ -101431,7 +101431,7 @@ "review_reason": "AI 生成并复核的 Agent 选择语义,依据精确 CommandRegistry identity、真实 Cobra help 与产品参考,不改写执行、安全或接口事实。", "source": "internal/cli/schema_hints/selection/chat.json", "value": [ - "需要移除一条已知置顶消息时" + "需要移除一条已知 Pin 消息时;复用 set-pin-msg 成功时的 openConversationId 和 openMessageId" ] } }, @@ -101711,7 +101711,7 @@ "source": "reviewed_command_registry", "title": "取消钉住消息(Unpin)", "use_when": [ - "需要移除一条已知置顶消息时" + "需要移除一条已知 Pin 消息时;复用 set-pin-msg 成功时的 openConversationId 和 openMessageId" ] }, "chat.unset_top_message": { @@ -104378,7 +104378,7 @@ "agent_summary_source": "dws-agent-selection/chat", "availability": "available", "avoid_when": [ - "没有真实可用 mediaId 时先完成媒体上传" + "本地图片路径、钉盘 dentryId、聊天文件 uploadKey 都不能代替 icon-media-id;当前 CLI 无本地图片转群头像 mediaId 的能力,缺少 mediaId 时应如实报告能力边界" ], "canonical_path": "chat.update_group_icon", "cli_name": "update-icon", @@ -104438,7 +104438,7 @@ "selected": true, "source": "internal/cli/schema_hints/selection/chat.json", "value": [ - "没有真实可用 mediaId 时先完成媒体上传" + "本地图片路径、钉盘 dentryId、聊天文件 uploadKey 都不能代替 icon-media-id;当前 CLI 无本地图片转群头像 mediaId 的能力,缺少 mediaId 时应如实报告能力边界" ] } ], @@ -104447,7 +104447,7 @@ "review_reason": "AI 生成并复核的 Agent 选择语义,依据精确 CommandRegistry identity、真实 Cobra help 与产品参考,不改写执行、安全或接口事实。", "source": "internal/cli/schema_hints/selection/chat.json", "value": [ - "没有真实可用 mediaId 时先完成媒体上传" + "本地图片路径、钉盘 dentryId、聊天文件 uploadKey 都不能代替 icon-media-id;当前 CLI 无本地图片转群头像 mediaId 的能力,缺少 mediaId 时应如实报告能力边界" ] }, "canonical_path": { @@ -104669,7 +104669,7 @@ "selected": true, "source": "internal/cli/schema_hints/selection/chat.json", "value": [ - "已有上传后的头像 mediaId 并要修改群头像时" + "已有可用于群头像接口的真实 mediaId 并要修改群头像时" ] } ], @@ -104678,7 +104678,7 @@ "review_reason": "AI 生成并复核的 Agent 选择语义,依据精确 CommandRegistry identity、真实 Cobra help 与产品参考,不改写执行、安全或接口事实。", "source": "internal/cli/schema_hints/selection/chat.json", "value": [ - "已有上传后的头像 mediaId 并要修改群头像时" + "已有可用于群头像接口的真实 mediaId 并要修改群头像时" ] } }, @@ -105000,7 +105000,7 @@ "source": "reviewed_command_registry", "title": "更新群头像", "use_when": [ - "已有上传后的头像 mediaId 并要修改群头像时" + "已有可用于群头像接口的真实 mediaId 并要修改群头像时" ] }, "chat.update_group_name": { @@ -106217,7 +106217,7 @@ "agent_summary_source": "dws-agent-selection/chat", "availability": "available", "avoid_when": [ - "全员禁言和成员禁言使用专门的 mute 命令" + "全员禁言和成员禁言使用专门的 mute 命令;当前用户自己的会话置顶或免打扰使用 group user-settings set" ], "canonical_path": "chat.update_group_settings", "cli_name": "update-settings", @@ -106277,7 +106277,7 @@ "selected": true, "source": "internal/cli/schema_hints/selection/chat.json", "value": [ - "全员禁言和成员禁言使用专门的 mute 命令" + "全员禁言和成员禁言使用专门的 mute 命令;当前用户自己的会话置顶或免打扰使用 group user-settings set" ] } ], @@ -106286,7 +106286,7 @@ "review_reason": "AI 生成并复核的 Agent 选择语义,依据精确 CommandRegistry identity、真实 Cobra help 与产品参考,不改写执行、安全或接口事实。", "source": "internal/cli/schema_hints/selection/chat.json", "value": [ - "全员禁言和成员禁言使用专门的 mute 命令" + "全员禁言和成员禁言使用专门的 mute 命令;当前用户自己的会话置顶或免打扰使用 group user-settings set" ] }, "canonical_path": { @@ -106508,7 +106508,7 @@ "selected": true, "source": "internal/cli/schema_hints/selection/chat.json", "value": [ - "需要调整 searchable、入群验证或群权限等设置时" + "需要调整 searchable、入群验证、@所有人权限等群级设置时;修改后用群信息或设置查询核对终态" ] } ], @@ -106517,7 +106517,7 @@ "review_reason": "AI 生成并复核的 Agent 选择语义,依据精确 CommandRegistry identity、真实 Cobra help 与产品参考,不改写执行、安全或接口事实。", "source": "internal/cli/schema_hints/selection/chat.json", "value": [ - "需要调整 searchable、入群验证或群权限等设置时" + "需要调整 searchable、入群验证、@所有人权限等群级设置时;修改后用群信息或设置查询核对终态" ] } }, @@ -106921,7 +106921,7 @@ "source": "reviewed_command_registry", "title": "更新群设置", "use_when": [ - "需要调整 searchable、入群验证或群权限等设置时" + "需要调整 searchable、入群验证、@所有人权限等群级设置时;修改后用群信息或设置查询核对终态" ] }, "chat.update_notification_off": { diff --git a/internal/cli/schema_catalog/tools/drive.json b/internal/cli/schema_catalog/tools/drive.json index 0581d77a..e422fa92 100644 --- a/internal/cli/schema_catalog/tools/drive.json +++ b/internal/cli/schema_catalog/tools/drive.json @@ -27242,6 +27242,7 @@ "agent_summary_source": "dws-agent-selection/drive", "availability": "available", "avoid_when": [ + "用户要把文件发送到群聊或单聊时使用 chat message send --msg-type file --file-path;drive upload 不会发送聊天消息", "常规场景不要拆成 upload-info + 手动 PUT + commit;仅自定义流式上传才用三步", "要把文件作为文档正文附件插入改用 dws doc media insert", "用户明确说文档空间且走 doc 兼容入口时可用 dws doc upload,默认仍推荐本命令", @@ -27303,6 +27304,7 @@ "selected": true, "source": "internal/cli/schema_hints/selection/drive.json", "value": [ + "用户要把文件发送到群聊或单聊时使用 chat message send --msg-type file --file-path;drive upload 不会发送聊天消息", "常规场景不要拆成 upload-info + 手动 PUT + commit;仅自定义流式上传才用三步", "要把文件作为文档正文附件插入改用 dws doc media insert", "用户明确说文档空间且走 doc 兼容入口时可用 dws doc upload,默认仍推荐本命令", @@ -27315,6 +27317,7 @@ "review_reason": "人工审阅:结合本机 dws schema 实时 MCP description/parameters(经 interface_ref)、产品 Skill、Cobra Long 与 Runtime 确认门禁,按飞书风格重写选型文案;不改变命令身份、参数契约或接口绑定。", "source": "internal/cli/schema_hints/selection/drive.json", "value": [ + "用户要把文件发送到群聊或单聊时使用 chat message send --msg-type file --file-path;drive upload 不会发送聊天消息", "常规场景不要拆成 upload-info + 手动 PUT + commit;仅自定义流式上传才用三步", "要把文件作为文档正文附件插入改用 dws doc media insert", "用户明确说文档空间且走 doc 兼容入口时可用 dws doc upload,默认仍推荐本命令", @@ -27585,6 +27588,7 @@ "source": "internal/cli/schema_hints/selection/drive.json", "value": [ "用户要把本地文件上传到钉盘/我的文件(首选一条命令自动完成凭证+PUT+提交)时", + "用户明确要求只上传或暂存附件、暂时不要发送到任何聊天会话时", "上传到知识库/文档空间时加 --workspace;需要转在线文档时加 --convert", "用户明确要求用本地文件替换已有钉盘/文档空间文件时传 --node;该模式会覆盖远端内容并要求确认" ] @@ -27596,6 +27600,7 @@ "source": "internal/cli/schema_hints/selection/drive.json", "value": [ "用户要把本地文件上传到钉盘/我的文件(首选一条命令自动完成凭证+PUT+提交)时", + "用户明确要求只上传或暂存附件、暂时不要发送到任何聊天会话时", "上传到知识库/文档空间时加 --workspace;需要转在线文档时加 --convert", "用户明确要求用本地文件替换已有钉盘/文档空间文件时传 --node;该模式会覆盖远端内容并要求确认" ] @@ -28319,6 +28324,7 @@ "title": "上传本地文件到钉盘或文档空间", "use_when": [ "用户要把本地文件上传到钉盘/我的文件(首选一条命令自动完成凭证+PUT+提交)时", + "用户明确要求只上传或暂存附件、暂时不要发送到任何聊天会话时", "上传到知识库/文档空间时加 --workspace;需要转在线文档时加 --convert", "用户明确要求用本地文件替换已有钉盘/文档空间文件时传 --node;该模式会覆盖远端内容并要求确认" ] diff --git a/internal/cli/schema_hints/selection/chat.json b/internal/cli/schema_hints/selection/chat.json index 69c9ab9e..728dfc84 100644 --- a/internal/cli/schema_hints/selection/chat.json +++ b/internal/cli/schema_hints/selection/chat.json @@ -29,12 +29,12 @@ ] }, "chat.add_emoji_reaction": { - "agent_summary": "给指定消息添加表情回应", + "agent_summary": "使用同一会话中真实的 openMessageId 给指定消息添加表情回应", "use_when": [ - "需要对已有消息添加一个 emoji reaction 时" + "需要对已有消息添加一个 emoji reaction 时;conversation-id 与 msg-id 必须来自同一条真实消息" ], "avoid_when": [ - "发送文本消息或文字表情时不要使用" + "发送文本消息或文字表情时不要使用;不要把 openTaskId 当作 msg-id" ], "examples": [ "dws chat message add-emoji --conversation-id --msg-id --emoji \"赞\"" @@ -658,12 +658,12 @@ ] }, "chat.query_message_send_status": { - "agent_summary": "查询异步消息发送任务的状态", + "agent_summary": "查询异步消息发送任务的业务终态,并按 sendStatus 判断是否真正投递成功", "use_when": [ - "发送命令返回 openTaskId 后需要确认投递结果时" + "发送命令返回 openTaskId 后需要确认投递结果时;只有 sendStatus=SUCCESS 才能宣称消息发送成功" ], "avoid_when": [ - "没有 message send 真实返回的 openTaskId 时不要使用;openMessageId 和会话 ID 都不能代替 openTaskId" + "没有 message send 真实返回的 openTaskId 时不要使用;openMessageId 和会话 ID 都不能代替 openTaskId;FAILED 不得当作接口成功" ], "examples": [ "dws chat message query-send-status --open-task-id " @@ -802,12 +802,12 @@ ] }, "chat.remove_emoji_reaction": { - "agent_summary": "移除指定消息上的表情回应", + "agent_summary": "从同一条真实消息移除此前添加的同名表情回应", "use_when": [ - "需要取消此前添加的 emoji reaction 时" + "需要取消此前添加的 emoji reaction 时;复用添加时的 conversation-id、msg-id 和 emoji" ], "avoid_when": [ - "移除文字表情时使用 chat message remove-text-emotion" + "移除文字表情时使用 chat message remove-text-emotion;不要猜测新的消息 ID 或表情名称" ], "examples": [ "dws chat message remove-emoji --conversation-id --msg-id --emoji \"赞\"" @@ -824,10 +824,10 @@ "chat.remove_group_member": { "agent_summary": "从指定群聊移除成员", "use_when": [ - "群管理员明确要移除一个或多个普通成员时" + "群管理员明确要移除一个或多个普通成员时;清理临时群只传本次加入的普通成员" ], "avoid_when": [ - "移除机器人时使用 chat group members remove-bot" + "移除机器人时使用 chat group members remove-bot;不要把建群者或群主加入 --users,也不要为了清理成员而转让群主" ], "examples": [ "dws chat group members remove --id --users userId1,userId2" @@ -1236,12 +1236,12 @@ ] }, "chat.set_pin_message": { - "agent_summary": "把指定消息设为会话置顶消息", + "agent_summary": "使用同源的 openConversationId 和 openMessageId 把指定消息设为 Pin", "use_when": [ - "需要在会话中置顶一条已知消息时" + "需要在会话中钉住一条已知消息时;若发送只返回 openTaskId,先确认发送终态,再从消息查询结果取得真实 openMessageId" ], "avoid_when": [ - "取消置顶使用 chat message unset-pin-msg" + "取消 Pin 使用 chat message unset-pin-msg;置顶到会话顶部使用 set-top-msg,置顶整个会话使用 chat set-top" ], "examples": [ "dws chat message set-pin-msg --open-conversation-id --msg-id " @@ -1316,12 +1316,12 @@ ] }, "chat.unset_pin_message": { - "agent_summary": "取消指定消息的会话置顶", + "agent_summary": "使用设置 Pin 时的同源会话和消息 ID 取消指定消息的 Pin", "use_when": [ - "需要移除一条已知置顶消息时" + "需要移除一条已知 Pin 消息时;复用 set-pin-msg 成功时的 openConversationId 和 openMessageId" ], "avoid_when": [ - "新增置顶使用 chat message set-pin-msg" + "新增 Pin 使用 chat message set-pin-msg;不要改用 unset-top-msg 或 chat set-top --off" ], "examples": [ "dws chat message unset-pin-msg --open-conversation-id --msg-id " @@ -1378,10 +1378,10 @@ "chat.update_group_icon": { "agent_summary": "使用真实媒体 ID 更新群头像", "use_when": [ - "已有上传后的头像 mediaId 并要修改群头像时" + "已有可用于群头像接口的真实 mediaId 并要修改群头像时" ], "avoid_when": [ - "没有真实可用 mediaId 时先完成媒体上传" + "本地图片路径、钉盘 dentryId、聊天文件 uploadKey 都不能代替 icon-media-id;当前 CLI 无本地图片转群头像 mediaId 的能力,缺少 mediaId 时应如实报告能力边界" ], "examples": [ "dws chat group update-icon --group --icon-media-id @mediaId" @@ -1418,10 +1418,10 @@ "chat.update_group_settings": { "agent_summary": "更新指定群聊的一项设置开关", "use_when": [ - "需要调整 searchable、入群验证或群权限等设置时" + "需要调整 searchable、入群验证、@所有人权限等群级设置时;修改后用群信息或设置查询核对终态" ], "avoid_when": [ - "全员禁言和成员禁言使用专门的 mute 命令" + "全员禁言和成员禁言使用专门的 mute 命令;当前用户自己的会话置顶或免打扰使用 group user-settings set" ], "examples": [ "dws chat group update-settings --group --setting-key searchable --status 1" @@ -2845,12 +2845,12 @@ ] }, "chat.shortcut_messages_query_send_status": { - "agent_summary": "查询消息发送状态", + "agent_summary": "查询消息发送任务的业务终态,只有 sendStatus=SUCCESS 才表示真正发送成功", "use_when": [ - "当你发消息后拿到 openTaskId、想确认这条消息是否发送成功时使用;只读返回发送状态,需传 --open-task-id。" + "当你发消息后拿到 openTaskId、想确认这条消息是否发送成功时使用;只读返回发送状态,需传 --open-task-id;FAILED 必须如实报告,不能因外层 success=true 宣称成功。" ], "avoid_when": [ - "需要该 Shortcut 未公开的底层参数、原始响应或不同执行语义时,改用对应原子命令" + "需要该 Shortcut 未公开的底层参数、原始响应或不同执行语义时,改用对应原子命令;不要把 openTaskId 当 openMessageId 做 Pin、置顶或表情操作" ], "examples": [ "dws chat +messages-query-send-status --open-task-id " @@ -3142,10 +3142,10 @@ "chat.batch_query_group_chat_settings": { "agent_summary": "批量查询当前用户自己的群会话设置(置顶/免打扰/群昵称/群备注)", "use_when": [ - "用户说 看下这些群我的置顶和免打扰设置" + "用户说看下这些群中我自己的置顶和免打扰设置;修改前先查询并保存原值用于恢复" ], "avoid_when": [ - "管理员级群功能开关用 chat group update-settings" + "管理员级群功能开关用 chat group update-settings;查询结果是当前用户视角,不代表群级设置" ], "examples": [ "dws chat group user-settings query --groups cid1,cid2 --format json" @@ -3161,10 +3161,10 @@ "chat.batch_update_group_chat_settings": { "agent_summary": "批量更新当前用户自己的群会话设置(置顶/免打扰/群昵称/群备注)", "use_when": [ - "用户说 把这些群都设为免打扰/置顶" + "用户说把这些群都设为免打扰或置顶;items 中只写需要改变的当前用户设置,完成后再次 query 验证" ], "avoid_when": [ - "单个群昵称优先 chat group update-nick" + "单个群昵称优先 chat group update-nick;不要用本命令修改 searchable、@所有人权限等群级开关;临时测试结束时按修改前 query 的真实值恢复" ], "examples": [ "dws chat group user-settings set --items '[{\"openConversationId\":\"cid1\",\"top\":true,\"mute\":false}]' --format json" diff --git a/internal/cli/schema_hints/selection/drive.json b/internal/cli/schema_hints/selection/drive.json index f34254e6..6fd18126 100644 --- a/internal/cli/schema_hints/selection/drive.json +++ b/internal/cli/schema_hints/selection/drive.json @@ -910,10 +910,12 @@ "agent_summary": "上传本地文件到钉盘或文档空间,或按节点 ID 确认覆盖已有文件", "use_when": [ "用户要把本地文件上传到钉盘/我的文件(首选一条命令自动完成凭证+PUT+提交)时", + "用户明确要求只上传或暂存附件、暂时不要发送到任何聊天会话时", "上传到知识库/文档空间时加 --workspace;需要转在线文档时加 --convert", "用户明确要求用本地文件替换已有钉盘/文档空间文件时传 --node;该模式会覆盖远端内容并要求确认" ], "avoid_when": [ + "用户要把文件发送到群聊或单聊时使用 chat message send --msg-type file --file-path;drive upload 不会发送聊天消息", "常规场景不要拆成 upload-info + 手动 PUT + commit;仅自定义流式上传才用三步", "要把文件作为文档正文附件插入改用 dws doc media insert", "用户明确说文档空间且走 doc 兼容入口时可用 dws doc upload,默认仍推荐本命令", diff --git a/internal/helpers/chat.go b/internal/helpers/chat.go index 53975905..c5aede58 100644 --- a/internal/helpers/chat.go +++ b/internal/helpers/chat.go @@ -462,9 +462,12 @@ func guardGroupOwnerRemoval(ctx context.Context, openConversationID string, remo if err != nil || ownerOpenID == "" { return nil } - ownerErr := fmt.Errorf( - "refusing to remove the group owner: 被移除列表包含群主,移出群主将导致群无群主(孤儿群)\n hint: 先执行 dws chat group transfer-owner --group %s --user 转让群主后再移除", - openConversationID, + ownerErr := apperrors.NewValidation( + "被移除列表包含群主,不能直接移出群主", + apperrors.WithReason("group_owner_in_remove_list"), + apperrors.WithHint("清理临时群成员时应从 --users 中移除群主,只移除本次加入的普通成员;只有用户明确要求变更群主时才单独执行 transfer-owner。"), + apperrors.WithActions("从 --users 中移除群主后重试", "若用户明确要求转让群主,先确认新群主再单独执行 transfer-owner"), + apperrors.WithExamples(fmt.Sprintf("dws chat group members remove --id %s --users <普通成员userId列表> --format json", openConversationID)), ) userIDs, openDingTalkIDs := splitChatIDValues(removeValues) for _, id := range openDingTalkIDs { diff --git a/internal/helpers/chat_coverage_more_test.go b/internal/helpers/chat_coverage_more_test.go index 053f5e53..8e7a7e04 100644 --- a/internal/helpers/chat_coverage_more_test.go +++ b/internal/helpers/chat_coverage_more_test.go @@ -10,6 +10,7 @@ import ( "strings" "testing" + apperrors "github.com/DingTalk-Real-AI/dingtalk-workspace-cli/internal/errors" "github.com/spf13/cobra" ) @@ -406,7 +407,13 @@ func TestCrossPlatformCoverageGuardGroupOwnerRemovalCoverage(t *testing.T) { t.Run(tc.name, func(t *testing.T) { caller := &scriptedToolCaller{steps: tc.steps} installScriptedCaller(t, caller) - _ = guardGroupOwnerRemoval(context.Background(), "group", tc.remove) + err := guardGroupOwnerRemoval(context.Background(), "group", tc.remove) + if tc.name == "owner-open" { + var typed *apperrors.Error + if !errors.As(err, &typed) || typed.Reason != "group_owner_in_remove_list" || !strings.Contains(typed.Hint, "从 --users 中移除群主") || strings.Contains(typed.Hint, "先执行 dws chat group transfer-owner") { + t.Fatalf("owner removal hint = %v", err) + } + } }) } caller := &scriptedToolCaller{steps: []scriptedToolStep{{text: `{}`}}}