🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

基金申请书核对 PerryLink/dsh-nsfc-form-check

DeepSeek Harness
PerryLink27 天前有提交已提供中文文档扫描:含敏感能力

对照单位名册审查 NSFC 申请书并提示身份线索

30/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/10/8 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add PerryLink/dsh-nsfc-form-check
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:需留意
是什么
dsh 原生插件 · tool
装得上吗
实装验证未通过(unknown),装前请到仓库确认最近更新与 issue
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 27 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
⚠︎ 实装验证未通过(unknown · 2026/11/4) ——可能是验证环境差异,装前建议到 GitHub 仓库确认最近更新与 issue。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

读写/删除本地文件
查看扫描证据(共 1 处,展示前 1 条)
  • 读取本地文件
    samples/quickstart/run.mjs:46
    const expected = JSON.parse(await readFile(join(here, 'expected', 'result.json'), 'utf8'))
扫描于 2026/11/4(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh-package-manifest@deepseek-ai/dsh-tools@deepseek-ai/schemastery
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 对照单位名册审查申请书
  • 提示身份线索
  • 仅提示差异

基金申请书核对:依据《国家自然科学基金条例》《2026 年度国家自然科学基金项目指南·申请规定》(国务院令第796号、2026 年度)。仅提示差异,不作出定性结论。

README

由 DeepSeek 最新模型翻译生成
dsh-nsfc-form-check — 对照单位自己的名册,审查 NSFC 申请书表单并提示身份线索 dsh-nsfc-form-check 读取一份 NSFC 申请书——正文各行、电子文档属性,以及单位自己的身份词名册——再拿这些材料对照一份带版本号的规则包做检查:名册到底配没配,配置好的申请人、单位、导师词在正文里出现在哪、是否落在配置的行号范围内,标题、作者、公司、最后修改者这几个属性里写了什么,材料有没有超出部署设定的长度上限,配置好的形式审查项和重复申请声明在不在,导师姓名有没有按年度指南的要求填上,以及有没有出现任何配置好的涉密或敏感词。每条发现都会点名它出自哪一条款,说明该条款是硬性要求、原则还是本地配置;每一项没能跑起来的检查都会列进 skipped,并附上原因。 它能回答什么 | 你问 | 它答 | | 没人填申请人姓名列表。身份检查就这么过了? | 不会。authorNames、institutionNames、advisorNames 全为空时,NF-001 是第一条报出来的东西;每一项需要这些词的身份检查都会把自己列进 skipped,并附上原因。所以发现列表为空从来不等于没问题——下结论之前先读 NF-001 和 skipped 里的条目。 | | 正文里出现了一位与申请人同姓的共同作者。
展开完整文档(README 剩余 1 节)
dsh-nsfc-form-check — 对照单位自己的名册,审查 NSFC 申请书表单并提示身份线索

dsh-nsfc-form-check 读取一份 NSFC 申请书——正文各行、电子文档属性,以及单位自己的身份词名册——再拿这些材料对照一份带版本号的规则包做检查:名册到底配没配,配置好的申请人、单位、导师词在正文里出现在哪、是否落在配置的行号范围内,标题、作者、公司、最后修改者这几个属性里写了什么,材料有没有超出部署设定的长度上限,配置好的形式审查项和重复申请声明在不在,导师姓名有没有按年度指南的要求填上,以及有没有出现任何配置好的涉密或敏感词。每条发现都会点名它出自哪一条款,说明该条款是硬性要求、原则还是本地配置;每一项没能跑起来的检查都会列进 skipped,并附上原因。

它能回答什么

| 你问 | 它答 |
| 没人填申请人姓名列表。身份检查就这么过了? | 不会。authorNames、institutionNames、advisorNames 全为空时,NF-001 是第一条报出来的东西;每一项需要这些词的身份检查都会把自己列进 skipped,并附上原因。所以发现列表为空从来不等于没问题——下结论之前先读 NF-001 和 skipped 里的条目。 |
| 正文里出现了一位与申请人同姓的共同作者。 | NF-002 逐行按字面匹配配置好的 authorNames,所以重名、常见姓氏、引用别人的工作,都可能被报出来。这条发现只是技术提示——《国家自然科学基金条例》(国务院令第796号) 第二十一条要求评审人保密,并没有禁止正文里出现姓名——所以已经排除干净的词可以加进 allowList。 |
| 作者属性里写了个名字。这会被报出来吗?需要配好列表吗? | 会报,但不需要列表。NF-006 不依赖名册:authorNames 为空时,它照样报出任何非空的作者属性;配了名册时,它会说明该值是否匹配某位申请人姓名。NF-005、NF-007、NF-008 确实需要身份词列表,没有就进 skipped。这四项都只读属性,所以对正文内容不作任何判断。 |
| 页数和字数上限我自己填了。它会告诉我申请书太长吗? | 只在你设的范围内判断。NF-010 出厂时 maxLines 和 maxChars 都没设,直接进 skipped,因为这些上限每年、每个项目类型都在变;你填上之后,它会报出超出上限的提取段落数或字符总数。maxLines 数的是提取出的段落,不是排版页数,所以跟页数不是一回事。 |
| 材料里是否包含我们科研管理部门要求的每一项形式审查内容? | 在配置 require 之前,NF-011 会把自己报告为 skipped;没有清单时,插件不会假装自己知道该查什么。配置之后,它会按字面匹配你的 match 短语,并报告找不到的那些。它只检查短语是否存在,不检查那一栏是否填对,也不检查签名是否真实。 |
| 我们在重新提交去年的申请书。披露说明必须在吗? | NF-012 需要同时配置 markerPatterns 和 requiredDisclosure:前者识别你模板里表示重复申请或后续申请的说法,后者列出必须披露的内容。两者任一未设置,它就进入 skipped;配置了标记但没找到声明时,它报告这条规则不适用。它从不假设披露该怎么写,也从不判定某份申请书真的是重复申请。 |

遵循的标准

| 文件 | 编号 | 引用它的规则 |
| 《国家自然科学基金条例》 | 国务院令第796号 | NF-001, NF-002, NF-003, NF-004, NF-005, NF-006, NF-007, NF-008, NF-009, NF-010, NF-011, NF-012, NF-013, NF-014, NF-015 |
| 《2026 年度国家自然科学基金项目指南·申请规定》 | 2026 年度(逐年更新) | NF-014, NF-015 |

边界: 这个插件检查 NSFC 申请书的正文和电子文档属性,报告它找到的身份线索,同时报告部署时配置的长度项和形式审查项。它不是 dsh-rulefile-check(审计法规文件是否合法),不是 dsh-policy-brief-draft(起草政策解读),也不是 dsh-review-reply-check(跟踪评审意见)。它只读一份申请书,报告与所引条款的字面匹配结果。

⚠️ 使用匿名性检查前请先读这段

目前没有任何国家层面的规定禁止申请人的姓名、单位或导师出现在 NSFC 申请书里。 为这个插件完整读了三份独立文本——《国家自然科学基金条例》(国务院令第796号)、2026 年度《项目指南·申请规定》,以及 2019 年度指南——其中都没有 匿名、盲审、活页,也没有任何关于身份「不得出现」的表述。条例里根本没有「匿名」这个词。它的回避条款(第二十条)要求来自申请人本单位的评审专家回避,这恰恰以系统知道申请人所在单位为前提——与匿名流程正好相反。

所以这个插件就姓名或单位给出的每一条结论,都是供人判断的技术观察,标注为 身份线索词,绝不写成违规。它适合科研管理部门自查,拿它当合规闸门是错的。有两条规则更进一步,逐字引用指南:NF-014 检查导师姓名是否填写,因为年度指南要求填写;NF-015 检查 涉密与敏感信息,这是真正存在的唯一一条「不得出现」要求——而它的对象是涉密信息,不是身份。

兼容性

| 层面 | 状态 |
| Harness | 对等版本范围 >=0.1.2-rc.1 <0.2.0 \|\| >=0.2.0-0 <0.3.0 —— 已验证可接受 0.2.0-rc.2 和 0.2.1-alpha.1。刻意不声明 engines.dsh:它没有读取方,也无法拒绝宿主 |
| Node | ^22.19.0 || >=24.0.0 |
| 平台 | 全部(纯 ESM;无原生代码、无网络、不调用模型) |
| 工具模式 | 在 native、ptc 和 both 下均可工作;批量提交建议时用 ptc |

功能说明

注册 nsfc_form_check 工具。它读取一份申请书 —— 正文、文档属性,以及机构自己的身份词表 —— 套用带版本号的规则包,返回一份报告。报告里每条发现都注明来自哪一条款,并说明该条款是硬性要求、原则,还是本地配置。

| 规则 | 检查内容 | 严重级别 | 依据类型 |
| NF-001 | 已配置词表,否则身份检查无法运行 | warn | principle |
| NF-002 | 正文提到申请人姓名 | warn | principle |
| NF-003 | 正文提到机构名称 | warn | principle |
| NF-004 | 正文提到导师姓名 | warn | principle |
| NF-005 | 文档标题属性含身份线索 | info | principle |
| NF-006 | 作者属性非空,或写明申请人 | info | principle |
| NF-007 | 公司属性写明机构 | info | principle |
| NF-008 | 最后修改者属性写明申请人 | info | principle |
| NF-009 | 配置行范围内的身份线索 | info | principle |
| NF-010 | 材料符合配置的长度上限 | info | local |
| NF-011 | 材料包含配置的形式审查项 | info | local |
| NF-012 | 重复或后续申请书带有配置的披露说明 | info | local |
| NF-013 | 配置范围内的身份线索 | info | principle |
| NF-014 | 导师姓名确实出现,符合年度指南要求 | info | local |
| NF-015 | 材料不含配置的涉密词 | info | local |

阈值按年度或按项目类型变化的规则,出厂时故意留空。在配置之前,它们会在 skipped 里自我报告,所以未填写的阈值绝不会被读成「没有问题」。

安装

dsh plugin --profile <name> add dsh-nsfc-form-check
dsh --profile <name> --dump-config | grep 'dsh-nsfc-form-check'

配置

所有可调项都在 src/config.ts 的 Schemastery schema 里。词表是这个插件唯一离不开的东西:身份检查需要一份待查词表,而这份词表因机构而异,所以它留在部署方自己的配置里,不随包分发。

| 键 | 类型 | 默认值 | 说明 |
| rulesFile | string | rules/nsfc-form-check.yaml | 规则包路径,相对于包根目录 |
| disabledRules | string[] | [] | 要停止运行的规则 id;每个都会出现在 skipped 里 |
| onlyRules | string[] | [] | 只运行这些规则 id;留空则运行全部规则 |
| skipNotes | string | "" | 追加到每条 skipped 原因后面的备注 |
| authorNames | string[] | [] | 要查找的申请人姓名 |
| institutionNames | string[] | [] | 要查找的机构和单位名称 |
| advisorNames | string[] | [] | 要查找的导师姓名 |
| allowList | string[] | [] | 即使匹配也忽略的词条 |
| timeoutMs | number | 120000 | 协作式工具超时预算 |

几个值得了解的规则级参数:

- NF-009 coverLines —— 开头多少行算封面。留空表示插件不预设任何机构的模板。
- NF-010 maxLines / maxChars —— 你申报的年度和项目类型对应的长度上限。maxLines 数的是提取出的段落,跟排版页数不是一回事。
- NF-011 require —— 你的形式审查条目清单,写成 [{ label, match }] 对。
- NF-012 markerPatterns / requiredDisclosure —— 你的模板里怎么识别重复申报,以及必须披露什么。
- NF-014 requireMention + advisorNames —— 反向检查,默认关闭,等你为当年启用后才生效。
- NF-015 secretTerms —— 你单位保密部门的词条清单。插件不带任何词条,因为什么算涉密由国家保密规定界定,不由本插件界定。

材料格式

把工具指向 .docx,它会自己读取正文和文档属性。.pdf 不会解析:按页精确提取是另一类问题,失败方式也不同,而且页码错了比没有页码更糟,所以请用你自己的工具提取文本再传进来。.txt、.md 和 .json 也接受;JSON 形式会显式带上两部分内容。

{
"lines": ["申请代码:H0301", "一、立项依据与研究内容", "……"],
"metadata": { "title": "某信号通路机制研究", "author": "", "company": "", "lastModifiedBy": "" }
}

匹配是字面匹配、按行进行的,所以每条发现都带行号,你可以直接跳过去。少于两个字的词条会被忽略,allowList 里的内容也会被忽略,否则常见姓氏会把报告淹没。

规则来源

规则数据放在 rules/nsfc-form-check.yaml。每条规则都带一份文件、一个文号、按来源自身编号体系给出的条款、一段逐字摘录,以及摘录读自哪个 URL。加载器会强制要求摘录是至少八个字的真实引用,并且只靠一条一般原则或地方政策支撑的检查,永远不能标为 error。

有四条发现塑造了这个规则包:

1. 条例修订了。《国家自然科学基金条例》现在是 国务院令第796号(2024-11-08 修订,2025-01-01 施行),取代国务院令第487号(2007)。条款号变了:评审保密义务现在是第二十一条,不再是旧版的第二十四条。本规则包只引用当前修订版,并且有测试断言被取代的订单号绝不会出现。
2. 匿名没有法律依据,理由已在本文件开头说明。规则在自己的注释里也写明了这一点,读者看报告就能知道,不必再翻 README。
3. 导师姓名是必填,不是禁止填写。 年度指南要求申请人如实填写研究生和博士后导师姓名。所以 NF-014 检查的内容与 NF-004 相反,规则包也解释了这两条为何并存。
4. 年度政策属于配置,不是代码。 页数与字数限制、各类申报数量上限、哪些项目类型使用包干制预算、年度不予受理情形清单,这些每年都会变;每一项默认都留空。

完整的条款核验报告,包括已核查和已排除的来源,见 rules/evidence/clause-verification.md。

疑难解答

- 插件装上了,但工具一直不出现。 检查 main 是否指向 lib/index.mjs,以及 pnpm run build 是否生成了它;main 写错会让加载器静默跳过入口。
- 所有身份检查都被跳过。 没有配置名单。填好 authorNames、institutionNames 和 advisorNames,NF-001 就不会再报警。
- 报告里常见姓氏太吵。 把该词加进 allowList;插件不会去猜哪些匹配有意义。
- .pdf 被拒绝。 这是有意为之。用你信得过的工具提取文本,再通过 text 传入,或者把申报书转成 .docx。
- dsh plugin add 以不兼容为由拒绝该包。 peer 范围覆盖 0.1.x 和 0.2.x;如果你的运行时不在其中,显式授予豁免: dsh plugin --profile <name> allow-version dsh-nsfc-form-check@0.1.0 --dsh-version <runtime> --accept-risk
- check 报告 manifest-peers 失败。 静态检查器比对的是一个硬编码的 peer 范围,早于 0.2 系列。运行时会在安装时强制校验 peer 兼容性,所以声明的范围才是正确的;这是 dsh-plugin-dev 中已知的上游问题。

开发

pnpm install
pnpm run typecheck # tsc --noEmit
pnpm test # vitest, paired fixtures per rule, plus a real .docx round trip
pnpm run build # tsdown -> lib/index.mjs + lib/index.d.mts
node ../scripts/sync-shared.mjs dsh-nsfc-form-check # refresh src/shared from ../_shared

tests/docx-fixture.ts 在内存中构建真正的 .docx 包(货真价实的 ZIP,条目经过 deflate 压缩),所以 docx 这条路径能端到端跑通,同时测试夹具仍是可审阅的 JSON。

许可证

Apache License 2.0 © 2026 dsh-nsfc-form-check contributors。
预览分享卡片长什么样 ↓PerryLink/dsh-nsfc-form-check
分享 · DeepSeek Harness Hub
PerryLink/dsh-nsfc-form-check

对照单位名册审查 NSFC 申请书并提示身份线索

这是你的仓库?认领条目

回到顶部