--- status: resolved phase: 06- source: - 06-01-SUMMARY.md - 06-02-SUMMARY.md - 06-03-SUMMARY.md - 06-COMMIT-SUMMARY.md - 06-SUMMARY.md started: 2026-04-15T03:14:38Z updated: 2026-04-15T10:05:00Z --- ## Current Test [testing complete] ## Tests ### 1. 输入 @ 可看到当前线程文件候选并可过滤 expected: 在输入框输入 @ 后出现候选列表,继续输入关键字可过滤,且候选仅来自当前线程。 result: issue reported: "出现的候选列表,应该在紧贴在input的上方" severity: cosmetic ### 2. 选择候选后显示引用 chip 且支持删除/去重 expected: 选择候选后,输入区显示可删除 chip;重复选择同一文件不会重复新增;可通过删除按钮或 Backspace 移除最后一个 chip。 result: issue reported: "我希望引用的图片出现在textarea中而不是在input上方,而且不要复用tag组件" severity: major ### 3. 引用上限为 10,超过会被阻止并提示 expected: 单条消息最多只能添加 10 个引用;尝试添加第 11 个时出现错误提示且不会新增。 result: issue reported: "限制为6个。且点击后端列表的时候不要收起input" severity: major ### 4. 失效引用会被自动移除,但文本发送不被阻断 expected: 当某个已选引用失效时,发送时会提示“部分引用已失效,已自动移除”,其余内容仍成功发送。 result: skipped reason: "本地无法测试失效引用。" ### 5. 带引用的消息可正常发送并保持文件上下文 expected: 发送包含引用的消息后,消息成功进入对话流;引用对应的文件信息在后续上下文中可用。 result: issue reported: "文件信息在上下文中不可用。当前系统未被当作上下文的传参是 artifact mention(包含 ref_kind/ref_source),上传文件会被当作上下文传参;且在输入中的任何时候输入@都应出现候选列表,不应仅在输入框为空时出现。发送提及文件时也会被误认为发送文件(例如 ref_kind=mention、ref_source=upload 的对象被当作 upload)。" severity: major ## Summary total: 5 passed: 0 issues: 5 pending: 0 skipped: 1 blocked: 0 ## Gaps - truth: "在输入框输入 @ 后出现候选列表,继续输入关键字可过滤,且候选仅来自当前线程。" status: failed reason: "User reported: 出现的候选列表,应该在紧贴在input的上方" severity: cosmetic test: 1 root_cause: "候选面板使用 `DropdownMenuContent` 默认定位,且未绑定输入框锚点/上边缘约束,导致面板位置与输入区视觉预期不一致。" artifacts: - path: "frontend/src/components/workspace/input-box.tsx" issue: "mention dropdown positioned by generic menu behavior, not explicitly anchored above textarea" missing: - "将候选列表定位策略改为紧贴输入区上方(含滚动与窗口边界处理)" debug_session: "" - truth: "选择候选后,输入区显示可删除 chip;重复选择同一文件不会重复新增;可通过删除按钮或 Backspace 移除最后一个 chip。" status: failed reason: "User reported: 我希望引用的图片出现在textarea中而不是在input上方,而且不要复用tag组件" severity: major test: 2 root_cause: "当前引用展示放在输入区外层绝对定位容器,并复用了 `Tag` 组件;未实现 textarea 内联引用预览组件。" artifacts: - path: "frontend/src/components/workspace/input-box.tsx" issue: "references rendered in absolute `bottom-full` area using `Tag`" - path: "frontend/src/components/ui/tag.tsx" issue: "component reused for mention chips against UX requirement" missing: - "实现 textarea 内联引用卡片/图片缩略块" - "替换 Tag 复用,使用专用引用 UI 组件" debug_session: "" - truth: "单条消息最多只能添加 10 个引用;尝试添加第 11 个时出现错误提示且不会新增。" status: failed reason: "User reported: 限制为6个。且点击后端列表的时候不要收起input" severity: major test: 3 root_cause: "上限常量硬编码为 10;同时选择候选后调用 `setMentionOpen(false)` 并存在外部点击收起逻辑,导致输入态被打断。" artifacts: - path: "frontend/src/components/workspace/input-box.tsx" issue: "`MAX_REFERENCES_PER_MESSAGE = 10` and mention selection closes dropdown/input focus" missing: - "上限从 10 改为 6 并同步提示文案" - "选择候选后保持输入框展开与焦点,不自动收起" debug_session: "" - truth: "发送包含引用的消息后,消息成功进入对话流;引用对应的文件信息在后续上下文中可用。" status: failed reason: "User reported: 文件信息在上下文中不可用。当前系统未被当作上下文的传参是 artifact mention(包含 ref_kind/ref_source),上传文件会被当作上下文传参;且在输入中的任何时候输入@都应出现候选列表,不应仅在输入框为空时出现。" severity: major test: 5 root_cause: "artifact 引用仅以前端构造的 `additional_kwargs.files` 元数据提交,缺少后端可解析的上下文绑定信号;另外 `@` 触发依赖当前 token 解析,未覆盖“任意输入位置”策略。" artifacts: - path: "frontend/src/core/threads/submit-files.ts" issue: "references appended as metadata only; no backend-compatible context discriminator beyond ref_source" - path: "frontend/src/core/threads/hooks.ts" issue: "submit envelope does not include explicit artifact-context contract for backend resolution" - path: "frontend/src/components/workspace/input-box.tsx" issue: "mention trigger tied to `findMentionToken` result and closes when token not matched" missing: - "补充 artifact 引用的后端可消费上下文字段(与 uploads 对齐)" - "确保任意输入位置输入 `@` 都可触发候选" debug_session: "" - truth: "若已输入文本,在任意位置输入 `@` 仍应弹出候选;选择文件后不得清空已输入问题文本。" status: failed reason: "User reported: 如果已经输入了文字,再输入@的时候,应该弹出候选列表,如果选择了文件,不要清空已经输入的问题" severity: major test: 5 root_cause: "当前选择候选后会执行文本 token 替换并 `trimEnd`,在已有输入场景可能导致用户已输入问题文本被截断或清空。" artifacts: - path: "frontend/src/components/workspace/input-box.tsx" issue: "`selectMentionCandidate` mutates textarea value when resolving mention token" missing: - "选择候选后仅移除当前 mention token,不影响其余已输入文本" - "补充“已有文本 + 中途 @ + 选中文件”回归测试" debug_session: "" - truth: "提及文件(ref_kind=mention)发送时应保留 mention 语义,不应被系统识别为“本次新上传文件”。" status: failed reason: "User reported: 在发送提及文件的时候,系统误认为我的提及文件是发送文件。因为上传时传了 {filename,size,path,status,ref_kind:mention,ref_source:upload}。" severity: major test: 5 root_cause: "后端 UploadsMiddleware 在 `_files_from_kwargs` 中仅按 `filename/size/path/status` 解析 `additional_kwargs.files`,没有排除 `ref_kind=mention`,导致 mention 引用被归类为 new_files 并注入 `` 的“uploaded in this message”块。" artifacts: - path: "backend/packages/harness/deerflow/agents/middlewares/uploads_middleware.py" issue: "`_files_from_kwargs` ignores `ref_kind/ref_source` and classifies mention references as newly uploaded files" - path: "frontend/src/core/threads/submit-files.ts" issue: "references use `ref_kind=mention` with `ref_source=upload|artifact`; middleware currently does not honor this discriminator" missing: - "在 `_files_from_kwargs` 过滤 `ref_kind=mention` 条目,不将其计入 new_files" - "补充 middleware 单测覆盖 mention 条目不被识别为本次上传" debug_session: "" ## Resolution Addendum (2026-04-15) 本文件中的 issue/gap 条目保留为当时验收记录;其对应问题已在后续补丁中完成闭环: - 06-05:输入交互/上限/去歧义与回归稳定性 - 06-06:后端 mention 误判 upload 修复 - 260415-owq(quick): - mention 引用改为路径直读,不再二次上传 - mention 预览并入附件预览栏并复用附件组件 - `` 进入上下文且 memory 过滤覆盖 当前状态以 `06-VERIFICATION.md` 的最终验证结论为准。