dsh-web
zhu1090093659/dsh-webDeepSeek Harness(DSH)Web 插件聚合生态包 · 一切皆插件,创意工坊分发(dsh-market.com)
English · 简体中文 · Español · Português · हिन्दी
dsh-drill-script-check reads one emergency drill script — the drill header plus one row per step — and checks that script's own completeness and arithmetic: that each step records its drill phase or its script content, that it names a commander, that the response level comes from the vocabulary you configure, that a step with a script action lists the resources it needs, that the step durations total the drill's planned duration, that a key checkpoint states its judgement condition, that no step number is repeated, and that the header names the drill and the organising unit.
dsh plugin --profile <name> add dsh-drill-script-check
dsh --profile <name> --dump-config | grep 'dsh-drill-script-check'*Workflow overview: document → rule pack → findings. The examples below use the real command surface.*
The table below is the example set: the first row is the detailed walkthrough, the remaining rows are short cases.
Tool drill_script_check
Input
~~~json {"rows":[{"序号":"1","演练阶段":"","脚本内容":"","指挥人":"张指挥", ...}]} ~~~
Output
~~~json { "id": "dsh-drill-script-check.DR-001.de09b5a6", "ruleId": "DR-001", "severity": "warn", "locator": { "row": 1, "field": "phase" }, "found": "第 1 行 phase、script 都为空", "expected": "phase、script 至少应填写一项", "fix": "补填演练阶段与脚本内容;本条只核对是否填写,不判断处置是否正确" } ~~~
*Observed from dsh-drill-script-check/tests/fixtures/DR-001/DR-001-unsafe.json; dsh-drill-script-check/tests/fixtures/DR-001/cases.json; dsh-drill-script-check/rules/drill-script-check.yaml; dsh-drill-script-check/tests/index.test.ts*
You ask · What it answers A step has neither its drill phase nor its script content filled in. Is that reported? · Yes. DR-001 asks for the phase and script columns together and reports the step where neither of the two is filled — one of them is enough to pass. It checks that the column is filled, not whether the action is correct or matches your emergency plan. I filled in the response level, but DR-003 reports itself in skipped. Why? · DR-003 compares the level column with the vocabulary in values, which ships empty, so until you configure your own levels the rule reports that it could not run instead of passing silently. It only checks that the value is one of yours — it never judges which level an event should trigger. A step that is purely informational lists no equipment. Is that flagged? · No. DR-004 asks for the resource column only when that step's script content is filled, so an informational step is not asked for equipment. It checks that the resources are listed, not that they are sufficient or that they match what is actually on site. The step durations do not add up to the drill's planned duration. Will the check catch it? · Yes. DR-005 adds the durationMin values of the steps and compares that total with totalDurationMin, which it takes from the header of the material — it looks inside the row first and falls back to the header. It is an addition check only: it does not judge whether the time arrangement is reasonable or sufficient. What must the checkpoint column of a step contain? · DR-006 requires the checkpoint column — the key node together with its judgement condition — to be filled on the step. It checks that something has been written there, not that the condition is observable or appropriate. One phase is split over three action rows and two of them carry the same step number. · DR-007 reports the repeated stepNo, because a repeat makes the duration total and the step count unreliable. Splitting one phase into several action rows is normal — give each row its own step number.
Document · Number · Cited by rules 《生产安全事故应急演练基本规范》 · YJ/T 9007—2019(原 AQ/T 9007—2019,2025 年第 1 号公告调整代号;本次未取得条文) · DR-001, DR-002, DR-004, DR-005, DR-006, DR-007, DR-008 本单位应急预案体系(本机构配置) · 无统一标准(本条依据为本机构预案的分级口径) · DR-003
Boundary: this plugin checks an 应急演练脚本 for completeness and arithmetic — that each step names its phase and script content, that it names a commander, that the response level comes from your vocabulary, that a step with an action lists the resources it needs, that the step durations total the drill's planned duration, that key checkpoints state their judgement condition, that step numbers are unique, and that the script names its drill and organiser. It does not decide whether a drill was realistic or effective, whether the response level was right, whether the actions were correct, or whether the drill met its objectives.
### ⚠️ Read this before trusting a citation in the report
**Every excerpt in this plugin's rule pack says, in so many words, that the clause text was notobtained.** The regime lives in AQ/T 9007—2019, 《生产安全事故应急条例》(国务院令第708号) and each
institution's emergency plans. The verification pass could not retrieve verbatim clause text, so rather than
paraphrase a quotation the pack states the gap in the excerpt field itself and puts the honest reasoning innote. Every rule is thereforewarnorinfo, and a test asserts that no rule claims a quotation it does
not have. **When the texts are in hand, replace eachexcerptwith the real clause and raisekindto
direct.**No response-level scale is built in. Levels differ between plan systems — general / larger / major /
especially major, or a unit's own Ⅰ–Ⅳ — soDR-003reports itself inskippeduntil you configure your
vocabulary, and it never judges which level an event should trigger. That is the incident commander's call.
The resource rule fires only when a script action is present, so a step that is purely informational is not
asked for equipment. And the duration total is read from the header, where a drill's planned length normally
lives.
Surface · Status Harness · Peer range >=0.1.2-rc.1 =0.2.0-0 =0.2.1-0 =24.0.0 Platforms · All (plain ESM; no native code, no network, no model call) Tool mode · Works in native and ptc; for a full script use ptc
Registers the drill_script_check tool. It reads one drill script — the drill header plus one row per step — applies a versioned rule pack, and returns a report.
Rule · Check · Severity · Basis kind DR-001 · the phase and script content are recorded · warn · principle DR-002 · a commander is named · warn · principle DR-003 · the response level comes from your vocabulary (off by default) · info · local DR-004 · a step with an action lists its resources · warn · principle DR-005 · step durations total the planned duration · warn · principle DR-006 · a checkpoint states its judgement condition · warn · principle DR-007 · step numbers are unique · warn · principle DR-008 · the script names its drill and organiser · warn · principle
Key · Type · Default · Description rulesFile · string · rules/drill-script-check.yaml · Rule-pack path, relative to the package root disabledRules · string[] · [] · Rule ids to stop running; each appears in skipped onlyRules · string[] · [] · Run only these rule ids; empty runs every rule skipNotes · string · "" · Note appended to every skipped reason timeoutMs · number · 120000 · Cooperative tool timeout budget
Rule-level parameters worth knowing:
DR-003 values — your response levels, e.g. [Ⅰ级, Ⅱ级, Ⅲ级, Ⅳ级]. Empty means no check.DR-005 field / headerField / tolerance — the duration column and the header total it must match.DR-004 conditionField / requiredFields — what triggers the resource requirement.The tool accepts JSON or YAML:
drillName: 某某装置泄漏事故应急演练
drillType: 综合演练
organizer: 某某公司应急管理部
plannedAt: 2026-06-10
totalDurationMin: '15'
rows:
- { 序号: '1', 演练阶段: 预警与信息报告,
脚本内容: 值班员发现泄漏报警,电话报告应急指挥部,
指挥人: 张指挥, 参演人员: 值班员、调度员,
所需资源: 对讲机 4 台、气体检测仪 2 台, 计划时长: '15',
响应级别: Ⅲ级, 关键节点: 指挥部确认接报并启动响应(判定条件:指挥人下达启动指令) }Column names are matched case-insensitively and ignoring spaces, underscores and hyphens; the script's own column names are kept, so a finding names the column it read. The duration total may live in the header.
Rule data lives in rules/drill-script-check.yaml. The pack's header states the citation gap in full, and each rule's note repeats the part that matters for that rule. The load-time guard that normally enforces "an excerpt must be a real quotation of at least eight characters" cannot tell a quotation from a description — so this pack leans on the header, the per-rule notes and a test that asserts every excerpt admits the gap.
a missing step or a mistyped figure.
resources named. If the step genuinely needs none, say so in the cell rather than leaving it blank.
main resolves to lib/index.mjs andthat pnpm run build produced it; a wrong main makes the loader skip the entry silently.
0.1.x and 0.2.x; ifyour runtime sits outside it, grant an explicit exemption: dsh plugin --profile allow-version dsh-drill-script-check@0.1.0 --dsh-version --accept-risk
range that predates the 0.2 line. The runtime enforces peer compatibility at install time, so the declared range is the correct one; this is a known upstream issue in dsh-plugin-dev.
pnpm install
pnpm run typecheck # tsc --noEmit
pnpm test # vitest, the shared table-plugin suite plus paired fixtures
pnpm run build # tsdown -> lib/index.mjs + lib/index.d.mts
node ../scripts/sync-shared.mjs dsh-drill-script-check # refresh src/shared from ../_sharedThe plugin is data-only: src/model.ts declares the table shape, the shared kit supplies the reader and the check engine, and the rule pack declares every check.
This project is part of the DeepSeek Harness plugin family from PerryLink. The roster stays collapsed below so every README keeps a short first screen; expand it to see every row and its status.
Expand all plugins
Plugin · Status dsh-aqua-input-check · dsh-archive-check · dsh-auto-review · dsh-autotier · dsh-bid-ca-precheck · dsh-bid-qual-check · dsh-cert-mcp · dsh-checkpoint-rewind · dsh-click · dsh-composer-history · dsh-contract-stance · dsh-customs-doc-check · dsh-data-quality · dsh-demurrage-ledger · dsh-doublecheck · dsh-drill-script-check · dsh-eia-guide-check · dsh-emergency-plan · dsh-essay-rubric-check · dsh-evidence-check · dsh-export-ctl-check · dsh-fast · dsh-fmea-table-check · dsh-forecast-penalty · dsh-fund-research · dsh-github · dsh-gongwen-flow-check · dsh-gongwen-word-check · dsh-guard-plan-qc · dsh-hazchem-check · dsh-hazplan-check · dsh-hidden-risk-map · dsh-hs-classify · dsh-icd-rule-check · dsh-industry-research · dsh-lawcite-adapter · dsh-laya · dsh-lc-doc-check · dsh-learning-gap-check · dsh-library · dsh-local-ai · dsh-lsp-actions · dsh-mask · dsh-mcp-panel · dsh-medrec-qc · dsh-memento · dsh-nsfc-form-check · dsh-nurse-record-check · dsh-observe · dsh-origin-rvc-check · dsh-ota-review-check · dsh-output-styles · dsh-paper-doc-adapter · dsh-permission-rules · dsh-permit-report-check · dsh-pipeline-check · dsh-pleading-draft · dsh-plugin-doctor · dsh-plugin-guide · dsh-plugin-kit · dsh-plugin-upgrade · dsh-policy-brief-draft · dsh-power-loss-split · dsh-power-ticket-check · dsh-ppap-check · dsh-protest-deadline · dsh-railway-window · dsh-repair-order-qc · dsh-research-report · dsh-review-reply-check · dsh-rulefile-check · dsh-safety-brief-check · dsh-score · dsh-session-sync · dsh-site-log-check · dsh-skill-pack-security · dsh-soe-decision-check · dsh-soilwater-check · dsh-sop-sync-check · dsh-spc-gbt-adapter · dsh-talk · dsh-tender-extract · dsh-tender-matrix · dsh-test-drive · dsh-ticktick · dsh-translate · dsh-warranty-calc · dsh-budget · 🧊 FROZEN — see the repo README dsh-claude-move · 🧊 FROZEN — see the repo README dsh-defend · 🧊 FROZEN — see the repo README dsh-draw · 🧊 FROZEN — see the repo README dsh-reach · 🧊 FROZEN — see the repo README dsh-background-agents · 🚫 RETIRED — see the repo README dsh-session-pin · 🚫 RETIRED — see the repo README dsh-team-rooms · 🚫 RETIRED — see the repo README
Apache License 2.0 © 2026 dsh-drill-script-check contributors.