diff --git a/.planning/ROADMAP.md b/.planning/ROADMAP.md index 109a2c05..f15a587a 100644 --- a/.planning/ROADMAP.md +++ b/.planning/ROADMAP.md @@ -76,6 +76,7 @@ Plans: Plans: - [x] 07-01-PLAN.md — 提交态增强文本组装 + 三入口统一透传 + 显示态/提交态分离回归 +- [ ] 07-02-PLAN.md — gap closure:修复 ContextMenu 自动引用、提示前缀唯一化、Skill 使用 id 拼接 --- *Next command:* `/gsd-verify-work` diff --git a/.planning/phases/07-phase-06-mention-upload/07-02-PLAN.md b/.planning/phases/07-phase-06-mention-upload/07-02-PLAN.md new file mode 100644 index 00000000..4ff5e98f --- /dev/null +++ b/.planning/phases/07-phase-06-mention-upload/07-02-PLAN.md @@ -0,0 +1,97 @@ +--- +phase: 07-phase-06-mention-upload +plan: 02 +type: execute +wave: 1 +depends_on: + - 07-01 +files_modified: + - frontend/src/components/workspace/artifacts/artifact-file-list.tsx + - frontend/src/components/workspace/messages/message-list-item.tsx + - frontend/src/core/threads/hooks.ts + - frontend/src/core/threads/priority-hint.ts + - frontend/src/core/messages/utils.ts + - frontend/src/core/threads/hooks.test.ts + - frontend/tests/e2e/input-and-compose.spec.ts +autonomous: true +gap_closure: true +requirements: + - P7-01 + - P7-02 + - P7-03 + - P7-04 +must_haves: + truths: + - "右键仅打开 ContextMenu,不会在未点击‘引用’前触发引用动作。" + - "拼接提示统一为‘XClaw优先使用...’,并在消息区剥离该后缀。" + - "提交态拼接 Skill 标识使用 skill_id,不使用 skill 的展示名。" + artifacts: + - path: "frontend/src/components/workspace/artifacts/artifact-file-list.tsx" + provides: "ContextMenu 引用动作改为显式点击触发" + contains: "ContextMenuItem reference handler" + - path: "frontend/src/core/threads/hooks.ts" + provides: "skill_id 拼接入 submitText" + contains: "selected skills mapping" + - path: "frontend/src/core/messages/utils.ts" + provides: "XClaw 前缀剥离" + contains: "stripPriorityHintSuffix" +--- + + +关闭 07-UAT 中 3 个 gap:ContextMenu 自动引用、拼接前缀不够独特、Skill 使用 title 而非 id。 + +Purpose: 让提示拼接语义更可追踪,避免误触引用,同时保持 UI 展示与提交 payload 语义解耦。 +Output: 修复提交链路与右键引用交互,并补齐回归测试。 + + + + + + Task 1: 修复 ContextMenu 引用误触发 + frontend/src/components/workspace/artifacts/artifact-file-list.tsx, frontend/src/components/workspace/messages/message-list-item.tsx + + 将“引用”动作从易误触发的 `onSelect` 路径收敛到显式点击触发;确保仅在用户明确选择“引用”菜单项时才 dispatch mention event。 + + + - 右键打开菜单时不会自动触发引用。 + - 菜单项点击后才触发引用并回填输入区。 + + + + + Task 2: 拼接前缀改为 XClaw优先使用 + frontend/src/core/threads/priority-hint.ts, frontend/src/core/messages/utils.ts, frontend/src/core/threads/hooks.test.ts + + 将提示前缀从“优先使用”统一替换为“XClaw优先使用”,并同步更新消息区剥离逻辑与单测断言。 + + + - 请求 payload 中出现“XClaw优先使用【...】”。 + - 消息区仍不显示该后缀。 + - 单测全部通过。 + + + + + Task 3: Skill 提示使用 skill_id + frontend/src/core/threads/hooks.ts, frontend/tests/e2e/input-and-compose.spec.ts + + 提交文本组装时将 Skill 输入源改为 `selectedSkills.skill_id`,不要使用 `title`。补充/调整 E2E 断言验证请求体中的 skill_id 出现。 + + + - 拼接中 Skill 部分使用 id 列表。 + - 发送按钮与回车路径行为一致。 + + + + + + +- `cd frontend && node --test src/core/threads/hooks.test.ts` +- `cd frontend && pnpm -s typecheck` +- `cd frontend && pnpm -s test:e2e --grep "DF-INPUT-008A|reference|context menu"` + + + +- 07-UAT 提到的 3 条 gap 在代码和测试层均可回归。 +- 形成可直接执行的 gap closure 计划。 +