diff --git a/.task/feature-material-intake-flow.md b/.task/feature-material-intake-flow.md index 00aab471..1df6d18b 100644 --- a/.task/feature-material-intake-flow.md +++ b/.task/feature-material-intake-flow.md @@ -7,43 +7,73 @@ - 权威仓:ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-System-Dev.git;目标分支:main;R0(initial_base_sha)= 555fb2162fe47e13835c592013bc3a69e46239e2 - 工作区:/home/weichen/projects/Agent-System-Dev-wt-feature-material-intake-flow(worktree);分支:feature/material-intake-flow -- 授权与交付终点:<本次允许的动作与终点;未授权事项写明> -- 交付模式:manual(逐阶段人工评审);明确授权后可记为 authorized-continuous -- 自动推进授权:无;授权范围:无;授权来源:无;授权终点:无;停止条件:无(未授权) -- 当前阶段:需求拆解;当前增量:I1(待定义) +- 授权与交付终点:用户 2026-10-11 会话批准本卡「方案与计划」节所载方案(含四项范围裁定), + 授权实施 I1–I4 增量、对应测试与真实模型/浏览器验收、Backend/UI/Frontend/Dev PR 创建与合入、 + 任务卡闭合;高后果操作仍走双钥匙。 +- 交付模式:manual(逐阶段人工评审);实施增量 I1–I4 每增量出口人工评审 +- 自动推进授权:无(阶段间评审未授权连续推进);授权范围:阶段内实施/自检/缺陷修复; + 授权来源:用户会话计划批准 2026-10-11;授权终点:I4 验收通过;停止条件:同仓规 +- 当前阶段:实施与自检;当前增量:I1 - 流程依据:仓库根目录 policy/delivery.md(归档后仍按仓库根目录定位) ## 目标与非目标 -<预期结果、受影响入口/模块/契约;明确不做什么。> +目标:把快慢双速改为默认工作方式,补齐「上传附件直接发送」的完整闭环:系统确定性启动 +材料整理后台任务(附件即保证)→ 材料完整传递给子任务 → 卡片即时展示/过程回填 → +整理完成后待确认交付物选择卡 → 选定后后台任务必启动(模型委派 + stop 兜底)且不重复派发; +容量满时系统任务排队展示;`ui.cardflow` 默认改为开。 +验收主用例:三个附件、无文字、直接发送(用户 2026-10-11 实测暴露 22 秒 0 卡 0 委派)。 +非目标:OCR/扫描件解析(MinerU 层);无附件通用意图的自动拆分兜底(用户未选); +agent-native 内核契约改动;设计系统既有约束不动。 ## 关联方向与规划 -- 适用状态:待核对(无适用规划时说明原因) -- 主记录路径/版本:待核对(路径按仓库根目录定位,归档后不变;只引用唯一正文) -- 对应里程碑:待核对 +- 适用状态:无正式规划文档(说明:本任务是已归档任务 feature/dual-speed-real-path 的闭环延续; + 用户 2026-10-11 会话中逐项裁定默认行为规则并批准方案,方向以本任务卡为凭; + 若后续演化为长期规划再按 policy/delivery.md「长期方向」节建主记录) +- 主记录路径/版本:本卡;前身:.task/archive/feature-dual-speed-real-path.md(PR #308) +- 对应里程碑:无 ## 需求分析 | ID | 描述 | 项目符合度及依据 | 优先级 | 验收条件 | 依赖 | 结论 | |---|---|---|---|---|---|---| -| R1 | 待填写 | 待评估 | 待定 | 待定义 | 待确认 | 待评审 | +| R1 | 附件即保证:任何带附件发送必出现材料整理后台任务与进度卡(无文字/大材料预启动;文字+附件回合结束兜底) | 符合;spawnBackground/createBackgroundCard 链路现成(runmgr.go:1753-1819),缺系统侧确定性触发(实测为零) | P0 | 三附件无文字直接发送:即时反馈+发送后立即建卡;文字+附件场景回合结束前必有卡(预启动或兜底) | — | 纳入本增量 | +| R2 | 材料完整传递:子任务获得原文件/解析文本路径与来源引用,不再只有一句任务描述 | 符合;inputs/*.md 已落盘(inputs.go:62),子代理有 fs 工具(sub_loop.go:24),但子 runCtx 无 inputPaths(runmgr.go:1667) | P0 | 材料子任务转录/输入含材料清单与路径,能读到解析文本 | R1 | 纳入本增量 | +| R3 | 持续展示:卡片创建即显示、按真实事件更新、完成回填同一卡;「待处理」筛选不隐藏运行中/排队中任务 | 符合;卡片事件链现成;InboxList.tsx:19 待处理筛选只显示 action_required,运行中被隐藏 | P0 | 卡片 created→updated→status 事件序完整;待处理筛选可见 active 卡 | R1,R7 | 纳入本增量(筛选修复在 I3) | +| R4 | 期间可继续对话:后台处理不阻塞会话 | 符合;detached 子 run + 通知等待 idle 现成(runmgr.go:1636,1905+) | P1 | 材料处理期间用户可发新消息并得到回复 | R1 | 纳入本增量 | +| R5 | 整理完成→待确认选择卡:基于整理结果发起交付物 choice(含依据选项+自由输入),不重复派发 | 符合;HITL choice 机制现成(runmgr.go:569-616),通知回合文案需扩展 | P0 | 整理完成后出现选择卡;弱模型不发时系统建默认选择卡兜底 | R1 | 纳入本增量 | +| R6 | 选定后必启动:选择结果回灌要求委派;未委派则 stop 兜底强制续跑一轮;同键任务不重复派发 | 符合;stop 钩子 Continue 机制现成(llm_direct.go:284-294);用户裁定混合机制 | P0 | 选定交付物后对应后台任务必启动(≤1 次兜底);重复委派同键返回既有卡 | R5 | 纳入本增量 | +| R7 | 容量与幂等:上限 3 不变;系统任务满时排队并显示;重复发送同附件幂等 | 需调整后符合;当前满则硬拒绝(runmgr.go:1761),无内容级去重 | P1 | 满 3 时材料任务显示排队中,槽位释放按序启动;同附件重复发送不重建任务 | R1 | 纳入本增量(I3) | +| R8 | ui.cardflow 默认改为开 | 符合;settings.go:60,117 默认值翻转 + fail-closed 单测调整(用户 2026-10-11 拍板) | P1 | 新会话长产物进右侧结果卡、对话留摘要;设置项可关 | — | 纳入本增量(I3) | +| R9 | 回归:无附件简单问答行为不变;mock #background 演示不破;cardflow 开启下输出符合 style-cardflow 契约 | 符合;现有单测+真实模型对照 | P0 | 既有单测全绿 + I4 回归项通过 | R1-R8 | 纳入本增量 | ## 方案与计划 -- 方案引用:待填写(含对象版本) -- 实施计划引用:待填写(含增量与需求 ID) -- 测试计划引用:待填写(含需求 ID 与验收条件) +- 方案引用:用户 2026-10-11 会话批准(四项裁定:附件即保证/整理用 chat 档/确认后混合兜底/ + cardflow 默认开)。范围裁定映射:预启动条件=无文字或材料总量≥runtime.materialIntakeChars + (默认 12000 字符);材料键=sha256(排序后 filename+字节数+解析字符数); + 材料子代理=代码内 fallback spec agent.sub.material(Model="chat", + tools=fs_read_file/fs_list_dir/knowledge_search);去重=内存活跃键集+卡片 KV 材料键扫描 + (重启安全);排队=仅系统派发任务,会话级 FIFO,decBackground 释放按序启动。 +- 实施计划引用:I1 后端确定性材料整理入口(material.go、SpawnBackgroundOpts 扩展、 + startClaimedRun 接线、turn-0 提醒改写、stop 兜底、键级防重复派发;对应 R1/R2/R3/R4/R6 部分) + → I2 待确认交付物链路(通知回合契约、选择回灌、选择后 stop 兜底、默认选择卡应急; + 对应 R5/R6)→ I3 容量排队+cardflow 默认开+UI/Frontend 跨仓+Dev pin 级联(对应 R7/R8/R3) + → I4 正式验收(真实模型前后对照 ≥3 轮 MiniMax + ≥2 轮主推组合;浏览器端到端;对应 R9 及全部)。 +- 测试计划引用:每增量 go 单测(触发矩阵/去重/排队/兜底幂等/payload/卡片事件序/契约注入); + I4 按政策 2026-10-09 裁定做真实模型任务级前后对照(BEFORE=当前 main 补跑 1 轮+用户已录现象; + AFTER=新路径多轮),浏览器端到端走 8788 评审环境;make test 组合(含 pin 级联)。 ## 阶段评审 | 阶段 | 对象版本 | 结论 | 评审人 | 时间 | 依据 | |---|---|---|---|---|---| -| 需求拆解 | 待定 | 未评审 | — | — | — | -| 需求评估 | 待定 | 未评审 | — | — | — | -| 需求表确认 | 待定 | 未评审 | — | — | — | -| 方案设计 | 待定 | 未评审 | — | — | — | -| 实施计划 | 待定 | 未评审 | — | — | — | +| 需求拆解 | 会话方案 v1 | 通过 | weichen(用户) | 2026-10-11 | 目标/场景/边界/非目标随方案一并批准 | +| 需求评估 | 会话方案 v1 | 通过 | weichen(用户) | 2026-10-11 | 三代理只读探查核实现状(入口纯建议/系统派发为零/材料不传递/筛选隐藏运行中);前身任务保留限制已确认 | +| 需求表确认 | 本卡 R1–R9 | 通过 | weichen(用户) | 2026-10-11 | 四项范围裁定(AskUserQuestion 逐项拍板:附件即保证/chat 档/混合兜底/cardflow 开) | +| 方案设计 | 会话方案 v1 | 通过 | weichen(用户) | 2026-10-11 | ExitPlanMode 计划批准;插入点带 file:line 依据 | +| 实施计划 | 会话方案 v1(I1–I4) | 通过 | weichen(用户) | 2026-10-11 | 同上;每增量出口人工评审 | | 实施与自检 | 待定 | 未评审 | — | — | — | | 正式测试与验收 | 待定 | 未评审 | — | — | — | | 代码 Review | 待定 | 未评审 | — | — | — |