# 路线图 本文件记录**尚未完成**的工作与明确暂缓的方向。已完成的能力见 [README](README.md) 与 [docs/PRODUCT.md](docs/PRODUCT.md) §6。 优先级不构成承诺,实际顺序取决于 DSH 上游契约的演进与本项目维护带宽。欢迎在 Issue 中讨论或直接提 PR。 ## 近期(已有接口或明确入口,可直接动手) ### 1. 宿主动作缺失降级的自动化测试 **现状**:`inputActions` 缺失时按钮禁用并给出说明的守卫逻辑只有代码审查确认,**无自动化测试覆盖**。守卫实际分布在五处: | 文件 | 形态 | 备注 | | --- | --- | --- | | `src/research-workbench.js` | `hasDraftAction` / `hasSubmitAction` 布尔开关 | 控制按钮禁用与提示 | | `src/composer-overlay.js` | 启动弹窗内的布尔开关 | 工作流启动路径 | | `src/research-vault.js` | 非函数时 `setError` | **异步分支**,最易漏测 | | `src/database-query-panel.js` | `canWrite` / `canSubmit` | **含 submit 降级路径** | | `src/research-evidence-vault.js` | `canWrite` → 写入按钮禁用、引用块转为手工复制 | 随 §4c 新增;决策层已有 `planCitationWrite({ canWrite: false })` 覆盖,缺的是渲染层 | **要做**:补不传 `inputActions` 的渲染级测试,对表中五处逐一断言——按钮处于禁用态或降级提示存在、视图不抛错。 **前置障碍(2026-09-11 核实)**:仓库当前**没有可在 Node 中挂载 React 组件的渲染测试运行时**,已有的是纯逻辑断言与源码/产物文本断言。因此本项不是「补几个用例」,而是**先引入或搭建渲染测试 harness**(真实 React + DOM,能挂载分区组件并触发事件);在这一步落地前,各处降级的自动化覆盖只能停在决策层。 **为什么重要**:这是插件与宿主契约之间最主要的降级路径,也是真实 profile 烟测中唯一无法从外部构造的项。 ### 2. 工作台左列 sticky **现状**:分区① 左列(资源列表)非 sticky。右列详情可达约 1044px,左列仅约 415px 且随页面滚走——滚到详情底部的出口按钮时,列表已完全滑出视口。 **要做**:给左列加 `position: sticky` + 视口内高度约束。 **注意**:同一分区内的祖先 `overflow` 会夺走 sticky 参照系,参考[架构文档 §2.3](docs/ARCHITECTURE.md) 中方法工坊的两条 vendor 解绑记录。 ### 3. 证据图谱连线的方向表达(已完成 · 随 §4d 落地) **已完成(2026-09-11)。** 原状是连线固定「从左缘连到右缘」,边方向本身逆向时(如 `workflow → resource`,工作流列在资源列右侧)线段会穿过节点、产生穿越感;当时没有数据会触发该路径。§4d 把已保存证据接入图谱后产生了该方向的边,本项随之落地:箭头按两端节点的**实际水平位置**选锚点——正向走「右缘 → 左缘」,逆向走「左缘 → 右缘」,不再固定「左进右出」。因锚点自适应会让箭头指向不再自明,图谱说明显式标注「箭头表示关系方向」。 实现见 `src/research-evidence-graph.js` 的 `edgePoints()`;真实验收见 [MANUAL-QA](docs/MANUAL-QA.md) 的 G4。 > 编号未回填:§4 及其下的 4a–4d 切片编号被多份文档与源码注释引用,重编号会让这些引用失效。本节保留原位置与编号,只更新状态。 ## 中期(需要上游支持或较大改动) ### 4. 研究资产库:本地证据库 **目标**:在沉淀层「研究资产库」中维护与「灵感资产」并列的「证据库」子模块,沉淀用户**明确保存且可追溯**的论文、数据集、临床试验和数据库记录,供后续研究任务检索与复用。 **产品定位**:不新增第五个并列工作台分区。沉淀层在 4a–4b 落地后已更名为「研究资产库」,内含「灵感资产 / 证据库」两个子模块:灵感资产回答“想过什么”,证据库回答“依据什么”。关系可视化由既有的独立第四分区「研究证据图谱」承担,它是只读的,不替代证据条目的管理与核验。 **隐私与数据边界**(不可协商,适用于下面每一个切片): - 仅持久化用户确认的元数据与主动写下的笔记;默认不保存原始 API 响应、检索词、完整全文、附件或未经用户确认的模型摘要; - 本地持久化改用 IndexedDB,而不是无上限扩张 `localStorage`;提供按项目导出、导入与彻底删除; - 不在草稿增强、工作流启动或 Agent 调用时静默注入历史证据;所有复用必须经历“检索 → 预览 → 用户勾选 → 写入 Prompt”; - 写入 Prompt 时不得将本地条目表述为已证实结论,必须保留来源与人工核验责任。 **交付切片**:按依赖顺序拆为四片,**每片独立验收、独立上线**。四片截至 2026-09-11 **已全部交付**,各片的范围与验收结论保留如下(逐片细节见 [CHANGELOG](CHANGELOG.md),现场验收项见 [MANUAL-QA](docs/MANUAL-QA.md))。 **已完成:4a 保存与条目。** 条目字段(标题 / 来源数据库 / 稳定标识符 / 原始链接 / 保存时间 / 项目 / 标签 / 保存原因 / 用户笔记 / 核验状态)已落地,持久化直接建 IndexedDB 最小 schema;保存入口在查询结果条目上逐条触发,列表在沉淀层分区的「证据库」子模块。细节见 [CHANGELOG](CHANGELOG.md)。 **已完成:4b 持久化与项目隔离。** 跨刷新持久化走 IndexedDB;按项目隔离与切换,当前项目作为工作上下文跨会话保留;同一稳定标识符在**同项目内**去重(跨项目不去重——项目隔离优先),命中重复时交给用户裁决「覆盖已有 / 仍然另存」,不自动合并;单条删除与按项目彻底删除;按项目导出 JSON 备份与增量导入(已存在条目跳过,恢复是补齐不是回滚)。细节见 [CHANGELOG](CHANGELOG.md)。 **已完成:4c 勾选写入 Prompt。** 证据库子模块内勾选条目后给出引用块预览,「写入 Prompt(N)」把带来源链接与「尚未经逐条核验、不得据此直接断言结论」边界的引用块写入当前会话输入框;宿主未提供输入框操作时按钮禁用、引用块转为手工复制。选择以**全部证据条目**为基准,不随筛选条件变化被静默撤销。注入与否由纯函数 `planCitationWrite()` 决策(`empty / unsupported / write` 三态,仅 `write` 允许调用 `setDraft`),本节原定的两项验收——「未选择不注入」回归测试与写入边界断言——均已落地。**真实 profile 验收([MANUAL-QA](docs/MANUAL-QA.md) 的 W1–W3)已于 2026-09-11 通过**:勾选后按钮可用、未选择时按钮点不动、写入不自动发送且提示条数与实际注入一致。细节见 [CHANGELOG](CHANGELOG.md)。 **已完成:4d 图谱接入。** 已保存证据作为独立节点接入图谱,节点上展示来源库、稳定标识符与核验状态,**不携带笔记、全文或检索词**;证据按来源库连到同库资源节点,并按 URL 或稳定标识符匹配本会话查询来源,工作流仍经资源节点形成可追溯链路。原先「连线方向表达」的遗留问题随之解决——箭头按两端节点的实际水平位置选择左右锚点,逆向关系不再固定「左进右出」。**真实 profile 验收已于 2026-09-11 通过**:测试证据与 PubMed 资源共呈 2 个节点 / 1 条关系,图谱说明明确标注箭头含义。细节见 [CHANGELOG](CHANGELOG.md)。 **整体验收**:四片已全部落地,其中 4c、4d 已在真实 DSH profile 上验收(见 [MANUAL-QA](docs/MANUAL-QA.md) 的 W1–W3 与 G1–G4)。 ### 5. Memory Center 项目记忆检索 **目标**:让 Agent 能引用项目历史决策与既有证据。 **硬约束**(不可协商):检索 → 显示来源与文本摘要 → 用户选择 → 组装 Prompt。**禁止静默注入。** **与 §4 的边界**:两者流程完全相同(检索 → 预览 → 用户勾选 → 写入 Prompt),差别只在内容归属——可追溯到外部稳定标识符(DOI / PMID / NCT / 数据集 ID)的来源归证据库,项目内部的决策与上下文归 Memory Center。这条判据需要在动手前定死,否则会做成两个互相抢内容的收件箱。 **现状**:上下文桥已预留接口,检索路由尚未接入 Research Kit 的依赖范围。 ### 6. 宿主能力探测 **目标**:按 DSH 实际已连接的 MCP / 工具标注数据源与技能,而不是让用户自己判断。 **要做**:新增独立的 `HostCapabilitiesProvider`,返回**已经验证过**的能力(例如 `{ web: true, mcpServers: ['pubmed'] }`)。目录卡片与发送前检查只读该 provider,**不得根据资源名称推断数据库已可用**。 **门槛**:只有实现了真实探测并覆盖自动化测试后,条目才允许从 `requires-mcp` 升级为 `available-in-host`。 **与 `available-in-plugin` 的区别**:本项解决的是「宿主给了什么」,与插件自身是否已实现直查无关。11 个条目已因插件内置适配器标为 `available-in-plugin`(由目录与实现的契约校验守护),不构成本项的交付,也不因此免除能力探测。 ### 7. 发送前自动增强 **目标**:在用户点发送时自动对草稿做一次增强。 **阻塞项**:依赖宿主下发「发送当前草稿」钩子(onSubmitDraft),当前 DSH 槽位契约未提供。上游支持前不做。 ### 8. 目录内容扩充(工作流) **现状**:`catalog/workflows.json` 共 65 条,六个类目——基因组学 22 / 论文与手稿 13 / 文献研究 12 / 数据分析 11 / 临床研究 5 / 研究设计 2。蛋白组学、药物发现、机器学习**尚无独立类目**(蛋白相关内容目前散落在 5 条基因组学工作流中)。 **要做**:扩充类目与工作流。每条新增工作流至少做一次「最小材料」人工走查——检查模型是否被引导为虚构事实、过度承诺或遗漏不确定性。 ### 9. 科研模式领域预设 **现状**:`src/research-workbench.js` 的 `SCIENCE_MODE_PRESETS` 只有三个预设(基因遗传 / 临床队列 / 通用科研)。 **要做**:新增领域预设只需在该常量中加条目。 **注意**:本节与 §8 是不同文件、不同层——工作流是目录资产,领域预设是附加到 Prompt 上的科研纪律段,两者不可互相替代。 ### 10. vendored 工件的可维护化 **现状**:`vendor/promptkit-embed.js` 是 SHA 锁定的生成工件,约 637 KB,已进入 bundle。 **动机**:主要不是体积——对本地插件而言 637 KB 不是主要成本——而是它**不可手改、不可逐行 review,且 SHA 锁定意味着任何升级都只能整体替换**。目标是逐步换成可维护、可审查的源码子模块。 **要做**:视维护需要逐步替换。 **门槛**:替换后的模块必须在真实 DSH profile 上通过 [MANUAL-QA.md](docs/MANUAL-QA.md) 的完整清单。 ## 明确暂缓(不做或暂不做) 以下方向**刻意不做**,理由是它们会重复 DSH 已承担的能力,并带来权限、保密、成本与状态同步问题: - 自动并行子 Agent; - 长任务调度与后台恢复; - 自动化事实核查结论; - 独立沙箱、成本限额与计算资源管理; - 对原始科研数据的自动修改; - 自带模型路由、自持 API Key 或独立 Agent 运行时。 若你认为其中某项对你有价值,欢迎开 Issue 说明使用场景——"暂缓"不等于"永不",但需要有能说服人的理由。