
omdsh-dev/dsh-tool-schema
30最近提交 2026年8月14日
dsh-tool-schema DSH 插件
dsh-tool-schema 在 DSH 中提供纯函数 JSON Schema 验证内核。支持四种动作:validate(完整验证并返回路径错误)、paths(仅返回失败路径)、explain(静态约束树)、normalize(深拷贝+应用默认值+重新验证)。安全模型严格:无动态代码执行、无网络访问、不支持的关键字会报告为 schema 问题。
如何安装 dsh-tool-schema DSH 插件
dsh plugin --profile web add github:omdsh-dev/dsh-tool-schema复制不会执行命令。安装 dsh-tool-schema DSH 插件前请核对仓库和版本。
dsh-tool-schema DSH 插件数据来源
dsh-tool-schema DSH 插件快照日期:2026年8月16日
discovered
dsh-tool-schema DSH 插件能做什么
- 对任意 JSON Schema(draft 2020-12 子集)验证 JSON 数据,返回 RFC 6901 路径错误
- 仅列出失败路径与关键字摘要,快速定位问题
- 以静态节点树解释 schema 约束,无需自然语言
- 规范化输入:应用 `properties` 中的显式默认值并重新验证
- ReDoS 防护:所有 pattern 校验在 worker 线程内执行,1,000ms 硬预算;data 和 schema 各限 256 KiB
- 原型污染防护:仅使用 `Object.hasOwn`,`__proto__`/`constructor`/`prototype` 视为普通 JSON 键
dsh-tool-schema DSH 插件适合哪些场景
- 在 Agent 工作流中验证 API 响应结构是否符合预期 schema
- 检查插件 manifest 或配置文件是否符合 schema 要求
- 精确定位哪些字段未通过 schema 验证,附带路径信息
- 从 schema 中提取默认值应用到数据对象并验证结果
dsh-tool-schema DSH 插件适合谁
- 需要在 DSH 工具内进行可靠 JSON Schema 验证的 Agent 开发者
- 希望不依赖模型猜测来验证数据完整性的 DSH 用户
dsh-tool-schema DSH 插件的限制
- 仅支持 draft 2020-12 子集,不支持 `$dynamicRef`、`$vocabulary` 等;默认情况下不支持的关键字会导致验证失败
- data 和 schema 各限 256 KiB;嵌套深度 ≤ 64;schema 节点 ≤ 10,000;遍历节点 ≤ 100,000
- `$ref` 仅支持本地引用(以 `#` 开头),不支持远程引用
- `normalize` 仅当缺失字段的默认值通过其子 schema 时才应用;oneOf/anyOf 分支在模糊时跳过
- pattern 校验在 worker 线程内执行,1,000ms 预算;超时可能导致匹配不完全
dsh-tool-schema DSH 插件的仓库 README 摘录
以下文字摘自 dsh-tool-schema DSH 插件的上游仓库 omdsh-dev/dsh-tool-schema 的 README,版权归原作者,仅作引用。
DSH JSON Schema 验证工具插件 —— 验证数据、列出失败路径、解释 schema 约束、安全应用 default。零网络、零动态代码执行。 [](LICENSE) ## 动机 Agent 需要验证任意 JSON 数据是否符合 schema(API 响应结构、插件 manifest、配置文件、会话事件),并定位失败路径。现有路径没有这个能力: 1. **`defineTool` 参数 DSL 是作者 DSL**——面向插件作者声明工具参数,不是面向任意用户 schema 的通用验证服务 2. **`dsh-tool-json` 只提供查询**——能取路径、能筛选,但不验证结构、不给 RFC 6901 失败定位 3. **模型"目测"验证不可靠**——复杂嵌套 schema(allOf/oneOf/`$ref`/pattern)组合下,手算通过/失败极易出错,且无法展示可验证的过程 本插件提供独立的纯函数 JSON Schema 验证内核:一次函数调用返回 verdict、路径化错误与 schema 问题。不执行任何代码、不访问网络,**绝不静默忽略不支持的 schema 关键字**。 ## 安全模型 - **零动态执行**:验证内核是纯数据遍历,不构造 `RegExp`(pattern 在独立 worker 内执行)、不 `eval`、不访问网络、不读文件 - **不支持关键字绝不静默忽略**:报告 `unsupported-keyword` schema issue;`strictSchema=true`(默认)直接失败(`valid:false` / `complete:false`),`strictSchema=false` 验证已支持子集(`valid:null` / `complete:false` / `supportedSubsetValid`) - **ReDoS 防线**:所有 `pattern` 校验在**可终止的 worker 线程**内共享 1,000ms 硬预算,超时 `terminate()` 并报错——灾难性回溯不能阻塞宿主进程;pattern ≤ 16 KiB、每 schema ≤ 100 个 - **原型污染防护**:所有对象访问用 `Object.hasOwn`,`__proto__` / `constructor` / `prototype` 只作为普通 JSON 键处理 - **`$ref` 安全性**:仅支持本地引用(`#` 与 `#/$defs/<token>`,RFC 6901 转义);目标必须存在;环检测(schema-check 静态报告 `ref-cycle`
阅读完整 README仓库许可: MIT
dsh-tool-schema DSH 插件常见问题
如何将 dsh-tool-schema 安装到我的 DSH profile 中?
使用 bundle 安装命令:`dsh plugin --profile web add github:omdsh-dev/dsh-tool-schema`(web profile),或替换为 `headless`。安装后用 `dsh --profile web --dump-config | grep tool-schema` 验证。也可以从本地 npm pack tarball 路径安装。
这个插件支持远程 $ref 引用吗?
不支持,仅支持本地引用(`#` 和 `#/$defs/<token>`)。插件不访问网络,保持零网络验证。如果你需要验证远程 schema,请先将其解析为本地对象再传入。
如果我使用了不支持的 schema 关键字会怎样?
默认 `strictSchema: true` 时,验证会失败,报告 schema issue,并设置 `valid: false` 和 `complete: false`。若设置 `strictSchema: false`,则只验证支持的子集,返回 `valid: null` 并指示 `supportedSubsetValid`。不支持的关键字绝不会被静默忽略。
这个插件能处理很大的数据或很深的 schema 吗?
有硬性限制:data 和 schema 各不能超过 256 KiB,嵌套深度 ≤ 64,schema 节点 ≤ 10,000,遍历节点 ≤ 100,000。超出限制会立即报错。对于非常大的数据,建议先拆分或预处理。
插件如何防范 ReDoS 攻击?
所有 `pattern` 关键字校验在独立的 worker 线程中执行,共享 1,000ms 硬预算。如果超时,worker 会被终止并报错。此外,每个 pattern 不超过 16 KiB,每个 schema 最多 100 个 pattern。这防止了灾难性回溯阻塞宿主进程。