dsh-source-cnki
Chinese-literature records: import your export, cite it in GB/T 7714, check the metadata — without scraping CNKI.
No login, no scraping, no CNKI API (none is public for this purpose). The plugin reads RIS/EndNote-style or labeled text exports, assigns stable record ids, formats GB/T 7714-2015 (顺序编码制) or APA 7, and runs structural validation.
English · 简体中文
Scope decision (read first)
CNKI has no public API for this purpose. This plugin therefore does not log in, scrape, or bypass any access control. You export the records yourself (RIS/EndNote-style tagged text, or labeled text with 题名:/作者:/来源:), and the plugin works on that export. If your export lacks a field, the plugin says "missing" — it never invents a journal, year, volume, page range or DOI.
What it does
cnki_import— parses RIS/EndNote-style and labeled text exports, assigns a stablerecordId(DOI-based when present, otherwise title+year), detects language, and validates structure. The export becomes REP evidence whenpersistis on.cnki_cite— GB/T 7714-2015 顺序编码制 ([1] 作者. 题名[J]. 刊名, 年, 卷(期): 页码.), the same without numbering, or APA 7. Author rules: GB/T ≤3 all, otherwise first 3 +等/et al; Western names becomeSURNAME I; APA becomesSurname, I..cnki_check— structural validation: missing title/journal/year/authors, implausible year, malformed DOI, non-numeric pages, duplicates, journal without volume or issue.
What it does not do
- No CNKI access. No login, no cookies, no scraping, no unofficial endpoints.
- No content verification. It does not check that the record matches the real paper; use
dsh-cite-verifyfor DOIs. - No semantic fields. No cited-by counts, impact factors or fund numbers.
- No DOCX/PDF. Export as RIS/labeled text (PDF text extraction:
dsh-doc-anchor). - No claim of GB/T completeness. Variants exist (著者-出版年制, [EB/OL] carriers, [J/OL] with URLs); v0.1 implements the common journal/thesis/conference/book cases and says so.
Formats
| Format | Recognized |
|---|---|
| RIS/EndNote | TY, AU, TI, JO, PY, VL, IS, SP, EP, DO, KW, AB, ER (first tag wins per field, authors accumulate) |
| Labeled text | 题名/标题/篇名, 作者, 来源/刊名, 年/发表时间, 卷, 期, 页码, DOI, 关键词, 摘要, 类型; blank line separates records |
Unknown tags are ignored, not guessed.
Tools
cnki_import
{ text? | path?, format?, persist? } → { ok, records, validation, evidenceId?, recordPath? }.
cnki_cite
{ records, style?, startIndex? } → { ok, citations, text }.
cnki_check
{ records } → { ok, validation }.
Error codes
INVALID_INPUT · NOT_FOUND · PATH_ESCAPE · NOT_A_FILE · TOO_LARGE · UNSUPPORTED_FILE · NO_RECORDS · STORE_ERROR
Compatibility & install
| DeepSeek Harness | dsh-v0.2.1-rc.5 (verified 2026-11-08); peer >=0.2.1-0 <0.3.0 || >=0.2.2-0 <0.3.0 |
| Node | ^22.19.0 || >=24.9.0 (tested 24.22.1), ESM only |
| Peers | @perrylink/dsh-research-core ^0.1.0, @deepseek-ai/cordis ^4.0.5-alpha.1, @deepseek-ai/dsh-tools, @deepseek-ai/schemastery ^3.18.5-alpha.1 |
| Runtime dependencies | zero |
dsh plugin --profile <name> add @perrylink/dsh-research-core dsh-source-cnki
dsh --profile <name> --dump-config | grep dsh-source-cnki
Configuration
| Key | Default | Meaning |
|---|---|---|
enabled |
true |
false mounts nothing |
root |
.source-cnki |
store/record root |
workspaceRoot |
process.cwd() |
paths must resolve inside it |
maxChars |
2000000 |
export cap (fails, never truncates) |
persist |
true |
store the export as REP evidence + record |
style |
gbt7714-numeric |
default citation style |
Security boundaries
- No network at all: no CNKI, no DOI resolution, no telemetry.
- Read-only on the export; writes only under
root. realpathcontainment; DOCX/PDF rejected with a conversion hint.- The export is data. Instruction-like text inside a title or abstract is never executed (there is no executor).
Evaluation
23 tests: RIS and labeled parsing (Chinese and English records, CRLF/BOM exports, DOI-based ids, language detection), auto-detection and empty/unrecognized rejection, GB/T journal citation with en-dash pages, ≤3 vs >3 author rules (等 / et al), missing-journal marker, thesis marker, sequential numbering, APA author/year/journal/volume/DOI, validation codes (missing title/journal, implausible year including far-future dates, malformed DOI, odd pages, duplicates), runtime (valid REP record, cite/check, traversal/symlink/DOCX/oversize rejection, malformed records and null text rejected), tool schemas, import→cite→check end to end, failure branches, plugin contract, package contract.
No benchmark is claimed: the ground truth is your export; correctness of the formatter is checked against the GB/T rules above with fixtures.
Known limitations (v0.1)
- GB/T 7714 著者-出版年制,
[J/OL]/[EB/OL]carriers and English journal abbreviation rules are not implemented. - Conference and book records reuse the
journalfield for proceedings/publisher (the export formats rarely carry separate fields). - Parsing is line-oriented; deeply wrapped multi-line abstracts in labeled exports may merge into the previous field.
- No CNKI record id (
CNKI:/DBID) retention beyond what the export contains.
License
Apache-2.0. No third-party runtime code.
No comments yet. Be the first to write one.