58catmiao/dsh-sciwork

58catmiao/dsh-sciwork

给 DSH 的科研库面板与技能组:课题目录、带溯源的图表登记、草稿、文献、数据表、期刊档案、投稿台账,以及面向科研智能体的写作、引用与 Origin 出图纪律(出图需另装 dsh-origin-plugin)。

Tools & Capabilitiesdshdsh-plugin-marketdsh-plugins

dsh-sciwork · DSH 科研模式

给 DSH(DeepSeek Harness)装上一整套「做科研」的工作台:一个叫科研模式的 agent 预设,加上一个本机的实体科研库。

版本 0.3.14 · MIT · 作者 58catmiao · 仓库

English: README.en.md

这是什么

dsh-sciwork 不是一个"帮你查文献"的对话框,而是一套落在你硬盘上、可被别的工具打开的科研工作台。装上它,你会同时得到四样东西:

  1. 一个 agent 预设「科研模式」——它把绘图、写作、文献、期刊规范四条线收进同一个工作流:先找证据,再动手;出图走 Origin 真机,稿子里引用的每一条文献都必须带 DOI 或 URL。
  2. 一个本机实体科研库——一棵普通目录(课题 / 图表 / 数据 / 草稿 / 文献 / 期刊档案 / 投稿),配套一个 Python 引擎 research.py 和一个登记索引。
  3. 12 份期刊投稿档案——Nature、Science、Cell、IEEE Trans、ACS、Elsevier 通用、MDPI、PLOS ONE、中文核心、CNKI 学位论文、GB/T 7714、通用学位论文,各自的数值要求、条款与出处摘要。
  4. 一个「科研库」可视面板 + 一组技能——默认是工作台,旧面板七个页签一键可回,只读为主、能筛能导入能归档;技能负责把"该怎么画、该怎么写、该怎么引"固化成纪律。

权威来源永远是文件系统。 索引只是缓存,面板的写入永远走库脚本,不直接改索引。所以科研库随时可以整目录打包带迁移,也可以直接用资源管理器、Git、别的编辑器去碰。

  • 宿主半边是纯 Node ESM,零 npm 依赖。
  • 客户端是手写的单文件 Web 客户端,没有构建步骤。
  • 出图能力依赖上游开源插件 dsh-origin-plugin(MIT,作者 Fantasality)。本仓库不包含它,只带适配技能。详见〈与 dsh-origin-plugin 的关系〉。

0.3 有什么不同

  • 一条能力清单:动作登记表驱动面板、agent 工具与命令行三个入口,新能力只写一份。
  • 写动作要确认:先计划(会写哪些文件、有什么 warning),再确认(一次性令牌),最后留回执;读动作不写库。
  • 课题是一等公民:七阶段机 + 产物 sha256;旧库课题第一次写之前会提示迁移(先备份、幂等、可回滚)。
  • 工作台默认:默认进「工作台」(v2),页头右上角一个按钮可切回旧「列表面板」(v1),选择会被记住,切换时不再丢页签。工作台按「页头(标题 + 统计 + 中文主入口)→ 指标条(课题 / 图 / 文献 / 在投)→ 跨课题待办表格 → 概览仪表 → 课题两栏」排布;仪表有今日该做、投稿倒计时、库体检、最近动态、备份,待办行可一键复制「生成指令」;页头「快速登记」按命令清单生成中文表单(文献入库 / 登记图溯源 / 记一条投稿),提交仍走「计划 → 确认 → 回执」。
  • 七阶段可点选:课题详情里的阶段条改成按钮,点任一阶段即走 project.stage.set(跳阶段自动带 force,回退会把后续阶段重置为待办)。
  • 面板自带配色与字体:「石墨蓝」色板 12 个 --rl-* 变量(明暗两套,light-dark()),不引用宿主颜色 token,正文/次级/主色对比度 ≥ 4.5:1;字体 Noto Sans SC(回退微软雅黑 / system-ui),数字等宽对齐;表格关键列着色加粗。
  • 图表页能看见真实出图目录:_ 前缀的出图文件夹(如 figures/_ZT-1100-2h_v4/)不再被当成内部目录过滤;只排除 _history / _archive / _templates / _fetched 这类明确的内部目录。

安装

三条通道,装的是同一个东西;按你手边的界面选一条。

通道 · 怎么装 · 说明 官方插件页(侧栏「插件」→ 添加插件) · 填 github:58catmiao/dsh-sciwork · 也可以填 ZIP 解压后的绝对路径;装完点「立即启用」 终端 · dsh plugin --profile add github:58catmiao/dsh-sciwork · dsh plugin 把参数转给 profile 里的 pnpm 执行 插件市场(「插件 → 发现」) · 先加索引 URL(见通道 3),再从「发现」页装 · 市场只读你给的索引,不自动抓 GitHub

通道 1:官方插件页

侧栏「插件」→ 添加插件,输入框里填:

github:58catmiao/dsh-sciwork

装完对话框给一个「立即启用」;新组合包默认启用。重启 Harness 面板才出现。

通道 2:终端

dsh plugin --profile <profile> add github:58catmiao/dsh-sciwork
为什么带 `github:` 前缀:这个包没有发布到 npm 仓库,直接写 add dsh-sciwork 会让包管理器去 npm 找、回一个 404(或“npm 找不到这个包”)。github:58catmiao/dsh-sciwork 是从 GitHub 装,装完 profile 里会多一条 "dsh-sciwork": "github:58catmiao/dsh-sciwork"。

装完重启 Harness。

通道 3:插件市场(加索引)

DSH 的市场(插件 → 发现)不抓 GitHub、也不猜仓库名:它只读你手动填进去的索引 URL。本仓库自带一份索引(market/plugins.json,git 源、钉死到发布 commit),把这条 URL 加进市场索引即可:

https://raw.githubusercontent.com/58catmiao/dsh-sciwork/main/market/plugins.json

前提:这个市场由可选组合包 @deepseek-ai/dsh-experimental-plugin-market-bundle 提供;本机没装的话「发现」页不会出现,那就走通道 1 / 2(等价)。

第三方市场 dshmarket 用的是它自己的精选目录,读不到这份索引;想在它里面装得等它收录,或者直接走通道 1 / 2。

索引在每次发版后由 node scripts/make-market-index.mjs --commit v 重写(把版本钉到该 tag 的 commit),所以市场装到的版本是确定、可复现的。node scripts/test-install.mjs 会核对这份索引的 format 与 commit。

没有 npm / pnpm,或者上面那条命令报 npm 找不到

dsh plugin 是把参数转给 profile 里的包管理器(PNPM)执行的,所以它要求本机能跑 pnpm——有些机器上 DSH 的运行时里没有带,就会报“npm/pnpm 找不到”。这种情况不需要任何包管理器,两条退路:

退路 A(推荐):解压 ZIP + 一句话接线

  1. 在 GitHub 页面点 Code → Download ZIP,解压到一个固定目录(例如 D:/apps/dsh-sciwork);
  2. 在该目录里跑:
node scripts/install-plugin.mjs --profile <profile> --source .

它会做三件事:给 profile 的 package.json 加依赖行(link: 到该目录)、把 /node_modules/dsh-sciwork 链接过去、把 dsh-sciwork 加进 dsh.profile.bundles;改之前自动备份 package.json.bak-。加 --dry-run 可以先看会改什么。

(插件页的「添加插件」也能直接填这个解压目录的绝对路径,效果相同。)

退路 B:有 git 但没包管理器

git clone https://github.com/58catmiao/dsh-sciwork.git
cd dsh-sciwork
node scripts/install-plugin.mjs --profile <profile> --source .

装完同样要重启 Harness;验证方式是 dsh --profile --dump-config | grep -c dsh-sciwork(应大于 0)。

装完没变化 / 面板报错怎么查

现象 · 先查什么 命令回 404 或“找不到这个包” · 安装源写了吗?要写 github:58catmiao/dsh-sciwork(npm 上没有这个包) 报 npm / pnpm 找不到 · 走上文的「退路 A」,不依赖包管理器 重启后面板还是旧的 · 面板是客户端 bundle:关掉 Harness 再打开,只刷新页面不算 面板里点「检查更新」说不是 git 工作树 · 这份安装是拷贝/链接到 ZIP 目录的,不是 git 仓库;更新要重新解压 ZIP 再跑一遍 install-plugin.mjs(从市场装的也是拷贝,同理) 装了但侧栏没有「科研库」 · dsh --profile --dump-config 看有没有 name: dsh-sciwork 这一段;没有就是 bundle 没进 dsh.profile.bundles 市场「发现」页里搜不到本插件 · 索引 URL 加了吗(见通道 3);市场组合包装了吗 技能没出现 · 0.3.13 起随包注册;若 ~/.dsh/skills//SKILL.md 已存在,插件会跳过(有意为之:删掉旧目录重启即可换成包内版本)

装完后你会多出:

  • 一个 ID 为 research 的 agent 预设「科研模式」(可直接在会话里选)——科研只有一个模式:课题的七阶段

(选题 → 设计 → 数据 → 分析 → 成图 → 写作 → 投稿)都在这个模式里推进,阶段只是课题 project.json 里的一个字段, 不再单设阶段预设;

  • 侧栏多一个面板入口「科研库」(默认进工作台,页头报插件版本、可点「检查更新」);
  • 一条精确注册的只读路由 /api/research/call(面板靠它取快照与执行动作);
  • 六个技能:research-studio 总控、research-stages 七阶段路线、origin-plot、paper-writing、

literature-refs、journal-profile。0.3.13 起由插件激活时注册(runtime 技能),不必再手动跑 scripts/install.mjs;你自己往 ~/.dsh/skills 装过同名的,插件会跳过、不覆盖。

前置:本机有 Node(宿主半边与自检脚本用它)与一个可用的 Python 3 解释器(科研库引擎 research.py 用它)。不要求 `python` 出现在 PATH 上——启动器会按「显式配置 → SCIWORK_PYTHON → 库自己的 venv → Origin 插件目录的 venv → PATH」逐个探测。出图另需 Origin,见下文。

快速开始

1. 建库

# 先预检:不写任何文件,只报告缺什么
node scripts/install.mjs --verify-only

# 预检通过后建库
node scripts/install.mjs

安装脚本会建出库根目录、.research/ 引擎与索引、journals/ 期刊档案、refs/ 文献库。库根默认是 /Research(Windows 即 %USERPROFILE%\Research),可用环境变量 SCIWORK_LIBRARY 改。

安装脚本的可用开关:

开关 · 说明 --verify-only · 只检查,不写任何文件。 --library-root · 指定库根,覆盖配置里的 libraryRoot。 --skip-library · 不铺科研库骨架(只装插件半边)。 --force-skills · 目标已存在且没有 SKILL.md 时也覆盖安装技能目录。

库根解析顺序:--library-root / 环境变量 SCIWORK_LIBRARY(旧名 RESEARCH_LIBRARY 兼容)→ 内核 library/config.json 的 libraryRoot → /Research。注意库内已有的 .research/config.json 里的 libraryRoot 也会覆盖环境变量——面板与引擎优先听库自己的配置。

2. 打开面板

在 DSH 侧栏点「科研库」。默认进工作台:页头右上角写着当前库根与实时计数(课题 / 图 / 草稿 / 数据 / 文献 / 期刊档案 / 投稿 / 索引时间),下面是待办与概览;点右上角按钮可切到列表面板的七个页签。

3. 让 agent 建课题

在会话里选「科研模式」预设,然后直接说:

建一个课题,叫 zt-ceremic,研究 ZrB₂-SiC 陶瓷的氧化行为。

agent 会走 research.py new-project 落目录,之后它画的每一张图、写的每一段结果,都会各自归位到该课题的 figures/、origin/、data/、drafts/ 下。你也可以在面板里点「新建课题」自己建。

4. 出图

面板自己不出图(2026-10-13 起移除)。要出图,直接跟 agent 说:

把 projects/zt-ceremic/data/ 里那组 XRD 数据画成对比图,按 MDPI 的排版要求。

agent 会走 Origin 真机绘图、核验、导出,并把图的溯源信息登记回库。

面板:工作台与七个页签

侧栏「科研库」。默认是工作台(v2),页头右上角可切到列表面板(v1)。列表面板有七个页签(图表 / 草稿 / 文献 / 数据 / 期刊档案 / 投稿 / 归档),另有顶部的计数行与「命令台」弹层(两者都不是页签):

工作台(v2)一屏看全库:页头(标题 + 统计 + 快速登记 / 新建课题 / 导入数据 / 检查更新 / 刷新)、指标条(课题 / 图 / 文献 / 在投)、跨课题待办表、概览(今日该做 / 投稿倒计时 / 库体检 / 最近动态 / 备份)、课题两栏。页签行右侧的搜索框在 v2 里筛的是课题与待办:课题列表、跨课题待办、今日该做、库体检、最近动态一起过滤,顶部给命中数与「清空筛选」,空结果按种类给明确空状态(指标条始终按全库算,不随筛选变)。选中课题后,详情里还有一条本课题产物速览(图 / 草稿 / 数据 / 表 / 工程 / 文献 / 在投):数字是该课题已登记的产物数与相关文献、在投记录;点数字跳到列表页签并自动带上这个课题当筛选词,只留它的条目(数量为 0 的按钮置灰)。页头还报出插件当前版本:首屏只读本地 package.json,点「检查更新」才去 GitHub 比对,有新版本时旁边给「更新到 vX.Y.Z」——更新做到 git pull --ff-only,只对干净的 git 工作树生效,完成后提示重启 Harness。

页签 · 看什么 · 能做什么 计数行(面板顶部,不是页签) · 库根路径、课题/图/草稿/数据/文献/期刊档案/投稿七项实时计数、索引时间、采集警告 · 点「刷新」重取快照;点「引导」走一遍带高亮的界面导览 图表 · 已登记的图,含每条图的登记溯源(数据源、脚本、生成时间);按课题分组 · 看图、看 PDF 附带件、复制路径、归档、删除 草稿 · drafts/ 下的 Markdown 手稿 · 就地读;新建草稿;编辑保存;归档;删除 文献 · refs/refs.json 里的条目与 refs/pdf/ 下的本地 PDF 附件 · 导入(必须带 DOI 或 URL 才登记,PDF 可选)、看 PDF、归档、删除 数据 · data/ 下的数据文件(.txt/.csv/.dat 等)与按课题分组的分组头 · 预览行列、数据变换(6 个算子)、归档、删除 期刊档案 · 12 份档案的 id、严格度(high / medium / low)与更新日期 · 读条款与数值要求;筛选;归档 投稿 · submissions/ 下的投稿记录(目标刊、状态、时间线) · 读记录;筛选;归档;投稿闸门:选期刊 → 合规体检 → 导出投稿包 归档 · .research/archive// 里的批次清单 + 真删记录 · 整批 / 单文件「恢复」搬回原位;真删记录只留名字 命令台(弹层,不是页签) · research.py 的子命令清单与参数表单 · 选命令 → 填参 → 执行 → 看 stdout / stderr / JSON 结果

数据变换的 6 个算子:normalize(归一化)、baseline(扣基线)、smooth(平滑)、peaks(找峰)、integrate(积分)、linear(线性变换)。每次变换都会在新表旁落一份溯源记录(.research/transforms//.json),并把产物写进课题的 tables/。

投稿闸门(0.2 新增):在「投稿」页签选一个课题与期刊档案,点「体检」得到逐条结论——图宽是否够单/双栏、分辨率够不够、格式该不该矢量、图注有没有、标题与摘要字数、参考文献与 DOI 覆盖、草稿里的引用键是否都在库里。每条标 pass / warn / fail / na,并写明依据(source)与置信度;档案没写的项一律 `na`,不拿默认值冒充期刊要求。点「导出投稿包」把稿件、图、数据、refs.bib 收进一个 zip(含逐文件 sha256 的 manifest 与 checklist),路径落在 submissions/packages/。体检结果与期刊档案一样,最终以刊方现行要求为准。

面板的边界,一句话说清:能看、能筛、能导入、能归档、能删、能对表格做数据变换、能做投稿前体检和打包;不出图。所有写入都经库脚本落文件并登记,面板自身不碰登记索引。

配置

配置有两层,库内 `/.research/config.json` 是权威;环境变量用来告诉 DSH 去哪找库、用哪个 Python。

环境变量 · 默认值 · 说明 SCIWORK_LIBRARY · /Research · 科研库根目录。改这里等于换库。 RESEARCH_LIBRARY · 未设置 · 旧名,兼容保留;SCIWORK_LIBRARY 优先。 SCIWORK_PYTHON · 依平台探测 · 跑 research.py 用的 Python 解释器。推荐显式指向 venv 里的 python。 SCIWORK_ORIGIN_PLUGIN · 未设置 · dsh-origin-plugin 所在目录,供适配技能定位它。

库内权威配置:

路径 · 说明 /.research/config.json · 权威配置:库根、语言、期刊档案严格度偏好、索引设置等。 /.research/index.json · 登记索引(只是缓存,可由 research.py reindex 从文件系统重建)。 /.research/archive/ · 归档区。面板上的「归档」是移动到此处,可恢复。 /.research/lock · 库写锁,防止并发写入互相踩。

目录结构

<库根>/                          # 默认 <用户目录>/Research,可用 SCIWORK_LIBRARY 改
├── projects/
│   └── <课题>/
│       ├── figures/             # 成图(导出的 png / svg / pdf / tif)
│       ├── origin/              # Origin 工程文件(.opju),可在 Origin 里继续编辑
│       ├── data/                # 原始数据
│       ├── tables/              # 由数据变换派生的表
│       └── drafts/              # 该课题的手稿片段
├── refs/
│   ├── refs.json                # 文献条目(必须带 DOI 或 URL)
│   └── pdf/                     # 本地 PDF 附件(可选)
├── journals/                    # 期刊投稿档案
├── submissions/                  # 投稿记录与时间线
└── .research/                   # 引擎与元数据
    ├── research.py              # 库操作的唯一权威入口
    ├── config.json              # 权威配置
    ├── index.json               # 登记索引(缓存,可重建)
    ├── archive/                 # 归档区(可恢复)
    ├── transforms/<课题>/       # 数据变换的溯源记录
    └── lock                     # 写锁

登记(加文献、登记出图溯源、重建索引)永远由 `research.py` 做,面板不代劳。常用子命令:new-project、add-ref、register-figure、add-submission、reindex。

科研库的权威入口:research.py

库的一切结构化写入都由它完成(面板的「命令台」弹层就是它的可视化前端)。