5.7 KiB
5.7 KiB
要件定义书直传入口 + 移除 rag-bar(含输入区上移根治)— 实施计划
目标文件:src/genesis/server/static/chat.html、frontend/src/main.ts、frontend/src/chat.css
后端零改动(沿用 POST /api/sessions/{sid}/files,file_type=requirements)。
背景 / 问题
- 点「上传资料」展开
#upload-panel→#composer(底部锚定)变高 → 顶部输入框/按钮被顶上去。 - 需求:按钮改名「要件定义书」;只允许上传要件定义书;点击后直接打开系统文件选择框;选定即上传;其他资料改由项目配置提供。
- 另有同类“上移”来源:
#rag-bar初始hidden,建会话后被显示 → 工具栏高度变化 → 输入区再跳一次。
已确认决策
- D1 选定文件后自动上传(选定即 POST,无二次确认)。
- D2 未创建会话时点按钮 → 提示「请先发送一条消息以创建会话」。
- D3 会话内只传要件定义书(
.xlsx);模板/规则/做成说明书由项目配置提供;.xls不支持(后端EXPECTED_SUFFIX与excel_reader仅.xlsx)。 - D4 移除
#rag-bar(DOM + 相关前端 JS)。理由:影响调查已由聊天驱动(chat/agent.py意图impact,tests/test_chat_intent.py覆盖),按钮冗余;RAG 现不可用(0 片段/禁用)。“启用 RAG/影响调查”待下一轮 RAG 落地再以合适方式加回。
变更清单
chat.html
#tb-upload:📎 上传资料→📄 要件定义书;title="上传要件定义书";补aria-label。- 删除
#upload-panel整块(#file-type、.file-pick、#upload-btn、#proj-hint)。 #composer-toolbar内保留<input type="file" id="file-input" accept=".xlsx" style="display:none">与<span id="upload-status"></span>。- 删除
#rag-bar(#rag-enabled/#rag-stats/#impact-btn)。
frontend/src/main.ts
- 删除常量
fileTypeSel/projHintEl/uploadPanelEl;保留fileInputEl/uploadStatusEl。 - 删除
updateUploadBar()及全部调用点。 - 删除
UPLOAD_EXT_RULES/projectHasPrefixedType;保留pickExt。 - 新增
uploadRequirements():无sid提示 → 取文件 → 校验.xlsx→FormData(file_type=requirements)POST → 刷新标题/侧边栏 → 聊天区提示;失败提示;各路径均清空file-input.value。 - 绑定:
#tb-uploadclick →fileInputEl.click();fileInputElchange →uploadRequirements();删除#upload-btn绑定与面板切换。 - 删除 RAG 相关前端代码:常量
ragEnabledEl/ragStatsEl/ragBarEl/impactBtnEl;RAG_LS_KEY/readRagFlag/writeRagFlag/refreshRagStats()/updateImpactButton();ragEnabledElchange 监听、impactBtnElclick 监听;以及refreshRagStats()的全部调用点。 state.ts的resolveUploadType/shouldHideUploadSelect保留(node 测试覆盖),仅不再调用。
frontend/src/chat.css
- 删除死样式:
#upload-bar、#upload-bar-inner、#upload-bar select(:focus)、.file-pick(:hover)、#upload-btn(:hover)、#proj-hint、#upload-panel、label.vh。 - 删除 RAG 样式:
#rag-bar、#rag-bar label.rag-switch、#rag-bar input[type=checkbox](及:disabled)、#rag-bar .rag-stats(.ready/.zero)、#rag-bar button(:disabled/:hover:not(:disabled))。 - 保留
#upload-status。
验证
cd frontend && npm run verify(typecheck + node --test + build)。python -m pytest(覆盖率 ≥99%)。- 手动:
- 点「要件定义书」→ 弹系统文件框(过滤 .xlsx)→ 选文件自动上传 → 聊天区显示「上传完成」;
- 输入区/按钮不再上移(上传面板已删、rag-bar 已移除、工具栏高度恒定)且仍钉底;
- 无会话时提示先发消息;聊天框输入「做影响调查」仍可触发后端影响调查意图。
风险
- 会话内不再能补传模板/规则/做成说明书 → 完全依赖项目配置;未配置则生成阶段报错(符合 D3)。
- 移除 rag-bar 后,UI 不再有“启用 RAG / 影响调查”按钮;RAG 开关语义暂不可用(当前本就无效),下一轮 RAG 落地时重新引入。
- 自动上传无二次确认(符合 D1)。
评审结论与计划调整(plan-eng-review)
事实核对(Step 0)
- 后端
/files:file_type: str = Form(...)+file: UploadFile = File(...);requirements允许,白名单(".xlsx",)。✅ updateUploadBar()定义 1 处 + 调用 5 处 + 上传分支内 1 处,删函数须清干净(漏调用 tsc 会报错)。✅.vh仅用于将被删的「上传类型」label。✅- 无测试引用将删的 id。✅
采纳
- F1(同类“上移”来源):
#rag-bar建会话后出现会使工具栏变高 → 一并处理:移除 rag-bar(DOM+JS)。影响调查改由聊天驱动(已有意图解析)。 - F2:仅
.xlsx(与后端/解析一致);accept仅过滤,change再校验后缀。 - F3:所有路径清空
fileInputEl.value(同文件再次可选)。 - F4:清理上传相关死样式与
.vh。 - F7:按钮补
aria-label。
接受
- F5:会话内不再补传模板/规则 → 依赖项目配置(D3 结果)。
- F6:新上传流为 DOM 行为,无自动化测试;靠 tsc + 手动。
GSTACK REVIEW REPORT
- STATUS: DONE
- REVIEWED: docs/superpowers/plans/2026-09-12-requirements-upload.md
- FINDINGS: F1 同类上移(已采纳:移除 rag-bar) / F2 扩展名(仅 .xlsx) / F3 重复选择(已纳入) / F4 死样式清理 / F7 aria;F5/F6 接受
- KEY DECISION: 移除 rag-bar(影响调查由聊天驱动);会话内仅传 .xlsx 要件定义书,选定即上传
- NEXT: 待执行