dsh-sandbox-mxc

DSH PLUGIN安全与权限

仓库 bitsmug/dsh-sandbox-mxc

安全与权限 未标注验证等级 安全审查:未标注 可信度:未标注 可安装插件

为 DeepSeek Harness 提供基于 MXC 的沙箱提供者,在 Windows 上把进程关进容器,按策略限制读写与网络。

一句话选型结论

按资料字段整理

dsh-sandbox-mxc 是安全与权限类的 DSH 可安装插件,未做沙盒验证,暂无安全审查结论,列出 5 项功能,没有现成安装命令,需要按仓库 README 接入。验证通过不等于安全:插件会读写文件、执行命令或联网,装前先到仓库确认它做了什么;涉及密钥或系统权限的,建议先在隔离环境试装。

分类安全与权限 收录类型可安装插件 验证等级未标注验证等级 安全审查未标注
验证等级 UNKNOWN 未标注验证等级
GitHub 星标 1 复刻 0 · 未关闭 issue 0
最近更新 2026-10-11 创建于 2026-10-10
README 20.7 KB 正文体量,越大说明说明书写得越细

安装

可安装插件
在 DSH 里执行,装完用 dsh plugin list 确认已挂上;标了 L4 / L5 的命令已在沙盒里真实跑通
  1. 1
    确认版本与运行环境

    仓库没有标注兼容版本与 Node.js 要求,先确认你的 DSH 版本能装,再继续。

  2. 2
    执行安装命令

    在 DSH 里执行上面的命令;多包仓库要注意区分具体子包名,别装错包。

  3. 3
    确认已挂载

    用 dsh plugin list 查看列表里是否出现这个插件,出现即挂载成功。

  4. 4
    试跑并检查权限

    加载后跑一个最小用例,确认它能正常工作;同时看它申请了哪些文件、命令或网络权限。

兼容 DSH 版本未标注版本不匹配时安装会报错
Node.js 要求未标注来自仓库 package.json 的 engines 字段
前置依赖无需要同时安装的同级依赖
npm 包名未发布到 npm可用 npm view 查看包信息

能做什么

5 项功能
字段来自项目仓库与公开索引,中文说明由本站标注

dsh-sandbox-mxc:为 DeepSeek Harness 提供 MXC 进程隔离的沙箱提供方

  • 基于 MXC 的进程沙箱隔离
  • 按策略限制读写路径
  • 默认阻断外网访问
  • 自动剔除不存在的路径
  • 无需内核补丁即可替换

上游标签

dsh-pluginmxcprocess-containersandboxwindows-11

验证等级与安全审查

未标注验证等级
自动化流程结论,不是人工审核
验证等级未标注验证等级上游未给出验证结论,安装前请自行确认
安全审查未标注静态分析结论,未标注不代表已通过审查
仓库健康度未标注按仓库活跃度与最近更新时间给出
可信度未标注综合仓库活跃度与验证结果

选择建议

装之前先看这几条
按条目字段给出的判断,不替你决定用不用

值得选的地方

  • 列出了 5 项功能,能直接看出它解决什么问题。

先想清楚的地方

  • 安全审查还没结论,装之前先看仓库改了什么、要什么权限。
  • 没有现成安装命令,要按仓库 README 手动接入。
  • 验证通过不等于安全:插件会读写文件、执行命令或联网,装前先到仓库确认它做了什么。

更适合

  • 需要在安全与权限场景里给 DSH 补能力的人。
  • 能接受在本地装依赖、愿意自己确认权限的人。

不太适合

  • 只使用 DSH 官方内置能力、不接受第三方插件的人。

同类对比

6 个同类
同分类里挑最接近的几条,字段以各自详情页为准
插件验证等级安全审查星标兼容版本安装命令
dsh-sandbox-mxc当前 未做沙盒验证 未标注 1 未标注 无
dsh-infinite-gen-4 未做沙盒验证 未标注 1,611 未标注 无
cc-safety-net 未做沙盒验证 未标注 1,591 未标注 无
dsh-wallpaper-engine L5 · 运行验证通过 低风险 1,018 0.2.0-rc.2 等 10 个 有
api-relay-audit L5 · 运行验证通过 低风险 875 0.2.0-rc.2 等 10 个 有
hol-guard L4 · 沙盒安装通过 不在扫描口径 828 未标注 有

仓库档案

安全与权限
字段来自项目仓库与公开索引,中文说明由本站标注
作者 / 维护方bitsmug仓库 dsh-sandbox-mxc · 默认分支 master
分类安全与权限admin-security
收录类型可安装插件声明了 dsh.bundle、可用 dsh plugin add 安装的条目
开发语言JavaScript仓库主语言
许可证MIT商用或二次分发前请确认条款原文
星标 / 复刻 / issue1 / 0 / 0收录时的数值,非实时
创建 / 更新2026-10-10 · 2026-10-11最后推送 2026-10-11
本站收录2026-10-11首次进入本站目录的时间

README 全文

20.7 KB
作者原文,中文版优先;只做安全转义,不改内容

dsh-sandbox-mxc






A DeepSeek Harness sandbox provider backed by
MXC (Microsoft eXecution Containers).

It implements the harness's process-confinement seam (ctx.sandbox, a
SandboxProvider from @deepseek-ai/dsh-sandbox) by wrapping the exact argv the caller is about to
spawn:

wxc-exec.exe --config-base64  --
  • No @microsoft/mxc-sdk import. The plugin never loads the SDK's native bindings — it only needs
    the wxc-exec executable, located with require.resolve. So the SDK's
    “native stdio on Windows requires Node.js 24.21.0 or newer within Node.js 24, or Node.js 26.8.0
    or newer”
    restriction does not apply. It runs on the Node inside the harness (verified on
    v24.20.0).
  • One runtime dependency: @microsoft/mxc-sdk (declared in dependencies; used only to locate
    wxc-exec.exe). Config validation is hand-written; no schema library.
  • No kernel patch. It is a sibling provider to @deepseek-ai/dsh-sandbox-local, selected through
    the harness's normal bundle-patch layer.
  • Policy semantics are not re-implemented here. Read/write roots come from
    writableRoots(policy) / canonicalPath(path) exported by @deepseek-ai/dsh-sandbox, so the
    meaning of read-only / workspace-write stays in one place.

Requirements

  • Windows. This provider drives MXC's Windows backends (wxc-exec.exe, ProcessContainer / AppContainer).
  • DeepSeek Harness that mounts the sandbox service (@deepseek-ai/dsh-sandbox — declared in peerDependencies; never bundled).
  • Node.js >=22 — the harness's own Node is fine.
  • wxc-exec.exe — resolved in this order: config.wxcExecPath → $DSH_MXC_WXC → the installed
    @microsoft/mxc-sdk's bin//wxc-exec.exe (arm64 / x64), then its bin/wxc-exec.exe.
  • MXC >= 1.0.1 for the allowHostLoopback knob: the ProcessContainer host-loopback fix on PSEC 1.0
    (microsoft/mxc#1490) ships in 1.0.1.
  • An unpackaged PowerShell, when the profile's pwsh tool points at a Store/MSIX build: MXC containers cannot launch packaged (MSIX) apps
    (The target executable '…\WindowsApps\…\pwsh.exe' appears to be a packaged (MSIX) app). Point the executor's pwshPath at an unpackaged
    build — e.g. the official ZIP extracted to a stable directory of your choosing.
  • That shell's own install directory must be readable inside the container — list it in config.readonlyPaths. An unpackaged PowerShell
    resolves its own path at startup and otherwise fails with Failed to resolve full path of the current executable.
  • Paths that do not exist on this machine are dropped automatically. Handing one to MXC makes it reject the whole policy
    (DACL fallback requires write-DACL permission on '/tmp' — /tmp is what the shared harness code contributes on Windows), so the
    provider filters every path list through an existence check before building the policy.
  • On MXC's appcontainer-dacl tier, the account must be able to write a DACL for every path in the policy. When it cannot — a volume
    owned by another SID, or a path the container turns out not to be able to read — the provider drops that path and prints why, instead
    of failing the command, and caches the verdict. It never asks for per-machine ACL surgery. The strong base-container tier needs no
    DACL work at all. Which case applies is read from the probe's needsDaclAugmentation flag rather than from the tier name, so a tier
    this plugin has never heard of does not accidentally trigger DACL surgery.

Verified environment

Measured on the development machine; it is a record, not a claim about yours.

Item Value
OS Windows (x64)
Harness DSH 0.2.0-rc.2 (the repository source is at 0.2.1-rc.2; this plugin's range covers both)
Node.js v24.20.0 (the harness's own)
Shell PowerShell 7.7.0-preview.5, unpackaged (ZIP-extracted)
MXC @microsoft/mxc-sdk 1.0.1; wxc-exec --probe reported the BaseContainer tier on a Windows 11 host and the AppContainer + DACL tier on a Windows 10 host

Measured behaviour (the full matrix is under ## Security posture): workspace writes allowed; writes outside the policy denied;
outbound network blocked by default; clipboard isolated from the host. Reads are not an absolute boundary — see the
security-posture notes below before trusting a machine. Three tier-dependent facts are worth knowing:

  • base-container needs Windows 11; Windows 10 can only use the DACL tier. Same binary, two hosts:
    on Windows 11 (build ≥ 26100) wxc-exec --probe reports tier=base-container / needsDaclAugmentation=false / baseContainerApiPresent=true; on Windows 10 it reports tier=appcontainer-dacl / needsDaclAugmentation=true / baseContainerApiPresent=false — the process-security-environment API the strong tier needs is
    simply not there, so on Windows 10 every path in the policy must be DACL-augmentable (see ## Requirements, where the provider
    handles that by dropping and reporting). wxc-host-prep.exe (elevated) clears the system-drive and NUL-device warnings but
    cannot create the missing API.

Install

Two things are independent: (a) installing this plugin, and (b) making a wxc-exec
executable reachable.

(a) Install the plugin into a profile

Local checkout (development, and the usual way for a git-only plugin):

# 1. put the repo somewhere stable, then link it into the profile
#    /package.json :  "dsh-sandbox-mxc": "link:"
# 2. add it to the profile's bundle list:
#    "dsh": { "profile": { "bundles": [ "...", "dsh-sandbox-mxc" ] } }
# 3. create the node_modules junction:
#    /node_modules/dsh-sandbox-mxc  ->

From a registry (if you publish it):

dsh plugin --profile  add dsh-sandbox-mxc

Either way the plugin's own cordis.patch.yml is applied, which

  1. disables the default provider row (- id: sandbox → @deepseek-ai/dsh-sandbox-local), and
  2. inserts this plugin — it provides the same service name sandbox, so every consumer
    (pwsh, bash, and filesystem tool families) is unchanged.

> The Cordis patch dialect treats a truthy name as an assertion on an existing row, not a
> rename — which is why the patch disables the old row and inserts a new one instead of editing
> name in place.
>
> Restart the profile after changing the patch: the provider lives on the host plane.

(b) Make wxc-exec reachable

In order of precedence:

  1. plugin config.wxcExecPath (absolute path to wxc-exec.exe);
  2. environment variable DSH_MXC_WXC;
  3. derivation from an installed @microsoft/mxc-sdk: /bin//wxc-exec.exe (the SDK's own
    layout — arm64 on Arm64 hosts, x64 elsewhere), then /bin/wxc-exec.exe (older layout).

If none resolves, the plugin throws while the profile loads (see Host readiness — the same executor
must also pass --probe), and confine() fails closed with SandboxUnavailableError (code
SANDBOX_UNAVAILABLE) rather than letting a command run unconfined. Installing
@microsoft/mxc-sdk is a normal runtime dependency (declared in dependencies, installed from npm);
it is never imported — it is used only to locate wxc-exec.exe.

Configuration

Unknown keys fail the profile load with an actionable error naming the key and the valid set (the
plugin is the config boundary: a misspelled or stale key silently dropping your safety intent is worse
than a loud failure). The valid keys are exactly the table below.

Key Default Meaning
wxcExecPath '' Absolute path to wxc-exec.exe. Empty ⇒ try DSH_MXC_WXC, then derive from @microsoft/mxc-sdk (bin/ then bin).
readonlyPaths [] Extra roots the container may read (beyond the workspace).
extraWritablePaths [] Extra roots the container may write (beyond writableRoots(policy)).
deniedPaths [] Roots the container may never touch (MXC filesystem.deniedPaths).
denyMustExist true Any deniedPaths entry missing on this machine ⇒ refuse that command (MXC rejects a policy containing a missing path).
network omitted Escape hatch, passed through verbatim. Omitted ⇒ MXC's default, which is block (measured default_policy=block). The MXC 1.0 contract accepts only egress and ingress here; the always-supported shape is { egress: { default: 'deny' } }.
allowHostLoopback false Narrow knob over the above: true ⇒ the policy gets network.ingress.hostLoopback: 'allow'. Only host loopback is opened (egress stays blocked). Needed by tools that must start a loopback TCP server (measured case: Simulink inside the container fails with Failed to start server: 127.0.0.1:31540 while loopback is denied). It only fills in / overrides network.ingress.hostLoopback and never touches other network fields; false ⇒ no network key at all. Requires MXC >= 1.0.1 for the PSEC 1.0 fix.
timeoutMs 0 Per-execution timeout in milliseconds; 0 = none.
containerIdPrefix 'dsh-mxc' Prefix for the diagnostic container name.
sandboxEnv [] Extra KEY=VALUE entries for the container's process.env, layered on the backend default (inheritDefaultEnv: true). Entries without = are dropped with a warning (MXC rejects such a command outright).
injectNodePipeShim true Inject NODE_OPTIONS=--import data:text/javascript,… so Node inside the container captures child-process output through file handles instead of named pipes, and fails fast on the async APIs. false leaves process.env / process.inheritDefaultEnv untouched. See Container environment below.
readinessCheck true Run the host-readiness gate while the profile loads (Windows only): resolve the executor and require wxc-exec --probe to select an isolation tier. false skips the gate entirely. See Host readiness.
probeTimeoutMs 15000 Upper bound for one wxc-exec --probe call, in milliseconds.
validateTimeoutMs 60000 Upper bound for the DACL-tier policy self-check command, in milliseconds.

Both timeout keys must be a finite number >= 1: Node treats timeout: 0 as no timeout, the
opposite of what these fields promise.

- insert:
- id: sandbox-mxc
name: dsh-sandbox-mxc
config:
wxcExecPath: !!js process.env.DSH_MXC_WXC ?? ''
readonlyPaths: []

Host readiness

While the profile loads (Windows only, readinessCheck: true by default) the plugin resolves
wxc-exec and runs that same executable's own host probe, wxc-exec --probe:

  • No executor resolvable, or --probe failing to start (ENOENT, timeout, non-zero exit without JSON),
    or the probe selecting no isolation tier ⇒ the plugin throws with an actionable error and the
    profile does not load. A provider that cannot confine would fail every command anyway; a loud failure
    at load is the honest one. Run "" --probe yourself to see the facts.
  • Tier-degradation warnings from the probe are reported but never block (MXC explains why it
    degraded), and allowHostLoopback is reported when the probe says the host cannot do
    ingressHostLoopbackAllow.
  • The system drive is checked for AppContainer directory access (icacls \ must list
    S-1-15-2-1 / APPLICATION PACKAGES); when missing, the plugin warns with the exact fix —
    an elevated wxc-host-prep prepare-system-drive (the command ships in @microsoft/mxc-sdk/bin//).
    Without it, directory listing (e.g. dir) inside the container fails with Access is denied, while
    reads and writes still work. Non-fatal.

Set readinessCheck: false to skip the gate; confine() then fails closed on the first command
instead of the profile load.

What the container can see of your invocation

The command, its environment, and the whole policy travel to the executor as a base64 request
envelope on argv
(--config-base64). A host user with process-inspection rights can read that
while the process runs, so do not put secrets in command arguments or sandboxEnv values until MXC
provides a non-argv transport (microsoft/mxc#626).
An inline NODE_OPTIONS shim also widens the command line: see Container environment below for the
measured size budget.

Container environment (the Node named-pipe shim)

Inside an MXC container the process token cannot create named pipes — which is exactly how libuv
implements stdio: 'pipe'. Measured in one container on this machine:

Call inside the container Result
spawnSync(cmd.exe, ['/c','echo','hi'], { encoding: 'utf8', timeout: 300 }) never returns; timeout / killSignal do not fire
spawnSync(…, { stdio: ['ignore', fd, fd] }) (file handles) returns in 6–10 ms
stdio: 'inherit' / 'ignore' returns in 6–10 ms
.NET NamedPipeServerStream / net.listen Access to the path is denied / EADDRINUSE

So with injectNodePipeShim: true (the default) the provider adds one NODE_OPTIONS entry — an inline
data:text/javascript,… preload, so no file is written — which, inside the container, changes
child_process for every Node process the command starts:

  • spawnSync / execFileSync / execSync — stdout/stderr are captured through temporary file
    descriptors
    and read back; a slot stays a pipe only if the caller asked for something else.
    execFileSync / execSync are re-implemented on purpose: Node’s own implementations do not go
    through the overridden spawnSync export, so overriding the export alone would not cover them. The
    exec*Sync error shape (status / stdout / stderr, message starting with Command failed:) and
    Node's default encoding: 'buffer' are preserved; maxBuffer no longer applies (output goes to a file).
  • spawn / exec / execFile / fork — throw immediately with
    code: 'MXC_NAMED_PIPE_UNAVAILABLE' and a message naming the API, instead of hanging forever.

Notes: the shim also governs any Node process the container’s command starts (NODE_OPTIONS is
inherited — that is the point), and a command that genuinely needs asynchronous child processes has to
run outside the container. Set injectNodePipeShim: false to leave the container environment exactly
as it was before this feature.

The shim travels in the command line (environment → config JSON → --config-base64), and Windows
caps a command line at ≈32767 characters — so the inlined source is kept comment-lean, and the test
suite asserts the encoded size (measured: ≈14579 characters for the NODE_OPTIONS entry and ≈20148 for
the whole policy envelope).

Mode mapping

Harness mode MXC filesystem
read-only readwritePaths: [], and the workspace root is added to readonlyPaths (without that, the container could not even read the workspace)
workspace-write readwritePaths: writableRoots(policy) (workspace root + platform temp areas)
danger-full-access confine() is not called by the harness

ui is always pinned to { disable: false, clipboard: 'none', injection: false } and
processContainer.ui to { isolation: 'container', desktopSystemControl: false, systemSettings: 'none', ime: false }.

Security posture (measured, not assumed)

Property Measured result
Backend BaseContainer (confirmed from --debug native logs; no --experimental needed)
ACL augmentation --probe reports needsDaclAugmentation: false — it does not need the write-authorization step that the bundled ACL provider requires
Enforcement reported to the harness partial — MXC governs the writes it is asked to govern, but not every file effect (see the filesystem row)
Filesystem (writes) A write outside readwritePaths is denied, on every volume tested (拒绝访问。 from cmd, status 1, no file created); a read-only root cannot be written
Filesystem (reads) Not an absolute boundary. Measured on the base-container tier with MXC 1.0.1: reading a file in the user profile is denied, and enumerating a directory outside the policy is denied — but a plain file read outside the policy on the workspace's own volume succeeded. MXC documents deniedPaths interactions as backend-specific, so treat reads as volume/DACL-dependent rather than granted-or-denied
Network Blocked by default (omitted egress resolves to "deny"; measured default_policy=block)
Clipboard clipboard:'none' is enforced: a host clipboard marker was invisible to the container, and a container marker never reached the host clipboard. Note: enforcement is a silent no-op — it does not raise an error.
ui.disable Must be false, otherwise the container blocks Win32k and node.exe / pwsh fail with 0xC0000142 STATUS_DLL_INIT_FAILED
Container environment The container does not inherit the host PATH / environment — configure environment when your commands need a toolchain
Screen / desktop Undetermined. Window enumeration returned 0 inside the container (14 on the host), but “separate desktop” and “synthetic user without enumeration rights” both explain that, so no conclusion is drawn

Cost of ui.disable: false: Win32k becomes reachable from the container, i.e. the kernel attack
surface is wider than a fully UI-less container — the unavoidable price of running a native Windows
node.exe/pwsh. Clipboard and input injection stay closed, and the harness's bundled ACL provider
does not isolate that surface either, so this is not a regression there.

Denial and runner-failure evidence

confine() returns two pieces of evidence the harness uses to tell "confinement worked and blocked it"
apart from "the runner never ran the command":

  • denialSignatures — the denial dialect this backend actually produces, matched case-insensitively:
    Access is denied, Access to the path, Permission denied, Operation not permitted, and 拒绝访问.
    Measured: the harness's normal executor (pwsh/.NET) prints Access to the path '' is denied.; Node's
    EACCES/EPERM show up as their messages (permission denied / operation not permitted) — the
    bare errno names never appear in stderr and are deliberately not listed. cmd.exe on a Chinese
    system prints 「拒绝访问。」 as GBK bytes (BE DC BE F8 B7 C3 CE CA), so the listed Chinese form does
    not survive a UTF-8 read: a cmd-driven denial is reported per the English/errno forms only.
  • runnerFailureRules — five fatal stderr signatures that mean the command never ran:
    BaseContainer is unavailable, DACL fallback requires write-DACL permission on,
    appears to be a packaged (MSIX) app, STATUS_DLL_INIT_FAILED, 0xC0000142. Deliberately no
    allowedExitCodes gate: wxc-exec exits 1 for its own errors while a confined command may also exit 1,
    so an exit gate would conflate the two (the harness's dsh-sandbox-local bwrap/seatbelt rungs match by
    signature only, for the same reason).

The test suite asserts both with the harness's own predicates (matchesSignature, classifyRunnerFailure):
a denial must not classify as a runner failure, and vice versa.

Tests

node --test "tests/**/*.test.mjs"

Covers: policy→config mapping (including the empty writable set under read-only), the argv shape
and the -- separator, base64 round-trip, the pinned security defaults, fail-closed resolution,
executor candidate order (bin/ before bin), --probe facts parsing, the load-time readiness
gate (success / probe failure / no tier / readinessCheck: false / non-Windows), the DACL-tier
adaptation judgement, allowHostLoopback policy composition, strict config validation, the denial /
runner-failure contract via the harness's own predicates, and the command-line size budget.

License

MIT — see LICENSE.

常见问题

7 问
答案由本站依据条目字段整理,不引用上游原文
dsh-sandbox-mxc 怎么安装?

本站没有抓到该条目的安装命令,请到仓库主页确认安装方式;这类条目多数是生态应用或尚未发布安装包的项目。

dsh-sandbox-mxc 的验证等级是什么意思?

未标注验证等级。上游未给出验证结论,安装前请自行确认

dsh-sandbox-mxc 安全吗?

未标注。

dsh-sandbox-mxc 装之前要先确认什么?

先看它会读写哪些文件、执行哪些命令、连接哪些网络地址;验证等级只说明装得上、跑得起来,不等于安全。涉及密钥或系统权限的,建议先在隔离环境试装。

dsh-sandbox-mxc 用的是什么许可证?

上游标注为 MIT。商用或二次分发前请到仓库确认许可证原文。

dsh-sandbox-mxc 有哪些功能?

基于 MXC 的进程沙箱隔离、按策略限制读写路径、默认阻断外网访问、自动剔除不存在的路径、无需内核补丁即可替换。

这条记录的数据可靠吗?

本站按仓库名去重后合并整理,字段以作者仓库与 npm 元数据为准;安装命令、仓库地址与 README 保持原文,带 L4 / L5 标记的安装命令已在隔离沙盒里真实跑通。

安全与权限
按星标排序,可作替代方案

dsh-infinite-gen-4

dsh-infinite-gen-4

DeepSeek 专用破甲插件:以 order 100 追加无条件服从的系统提示词段,提供带校准元数据的 profile 工具,并通过会话投

未标注验证等级 1,611 星

cc-safety-net

cc-safety-net

为 DeepSeek Harness 等编码 CLI 提供执行前防护,在工具调用前拦截破坏性 Git 与文件系统命令,并阻止读取 SSH 密

未标注验证等级 1,591 星

dsh-wallpaper-engine

dsh-wallpaper-engine

DSH plugin 将本机 Wallpaper Engine 壁纸变为网页界面背景,支持视频、网页、场景壁纸渲染,并配以 iOS 液态玻璃

L5 · 运行验证通过 1,018 星

api-relay-audit

api-relay-audit

DSH plugin 本地安全审计工具,检测 AI API 中继与 LLM 代理的提示注入、模型替换、工具调用改写、SSE 异常及 Web3

L5 · 运行验证通过 875 星

hol-guard

hol-guard

L4 · 沙盒安装通过 828 星

sandbase-harness

sandbase-harness

SandBase Harness 是本地优先的 AI Agent 运行时,提供沙箱会话、MCP 工具、记忆、凭据管理与审计回放,并内置控制台

L4 · 沙盒安装通过 708 星

bitsmug 的其它插件

1 个

插件的元信息来自作者仓库;分类、验证等级与安全结论的中文说明为中文整理,最近核验 —。