{"schemaVersion":2,"dataVersion":"20260822T105549Z-0a0b366f","generatedAt":"2026-08-22T10:55:49.138Z","source":{"id":"omdsh-dev-dsh-genui","slug":"omdsh-dev-dsh-genui","rank":35,"url":"https://github.com/omdsh-dev/dsh-genui","name":"omdsh-dev/dsh-genui","category":"ui","description":{"zh":"助手回复内渲染交互式 UI 组件：布局、图表、表单、测验、mermaid、3D 场景与回传事件循环。","en":"Interactive UI components rendered inline in replies: layout, charts, forms, quizzes, mermaid, 3D scenes, and an action event loop back to the model."},"stars":288,"starsCheckedAt":"2026-08-21","repository":{"owner":"omdsh-dev","repo":"dsh-genui","requestedRef":null,"subpath":""},"npm":null,"downloads":null,"installMode":"github-source","upstreamInstall":"dsh plugin --profile web add github:omdsh-dev/dsh-genui","tarball":null,"added":"2026-08-13","page":"https://awesome-dsh-plugin.com/p/omdsh-dev/dsh-genui/","screenshots":["https://raw.githubusercontent.com/omdsh-dev/dsh-genui/main/assets/showcase-panel.png","https://raw.githubusercontent.com/omdsh-dev/dsh-genui/main/assets/showcase-plot.png","https://raw.githubusercontent.com/omdsh-dev/dsh-genui/main/assets/showcase.png","https://raw.githubusercontent.com/omdsh-dev/dsh-genui/main/assets/demo-thumb.png"],"discovery":{"provider":"awesome-dsh-plugin","channel":"plugins.json","indexUrl":"https://github.com/awesome-dsh-plugin/awesome-dsh-plugin","selection":"all curated entries"}},"report":{"sourceId":"omdsh-dev-dsh-genui","slug":"omdsh-dev-dsh-genui","policyVersion":"HT-DSH-0.2.2","scannedAt":"2026-08-22T08:19:54.650Z","scanStatus":"static-complete","verdict":"caution","score":94,"commit":"1ca5da4eb9394972cce2c1ccacfedc22eec3166b","commitDate":"2026-08-22T12:51:35+08:00","artifactDigest":"sha256:73381aae94b9dc8f6793abaa61437b5ca62be52280d366dfe0425b32fe4a5b45","downloadUrl":"https://github.com/omdsh-dev/dsh-genui/archive/1ca5da4eb9394972cce2c1ccacfedc22eec3166b.tar.gz","installMode":"github-source","installCommand":"dsh plugin --profile web add github:omdsh-dev/dsh-genui","manifest":{"found":true,"path":"package.json","parseError":null,"packageName":"@omdsh-dev/dsh-genui","packageVersion":"0.9.1","bundle":{"patch":"./cordis.patch.yml"},"client":{"inject":[],"platform":"web"},"lifecycleScripts":{},"peerDependencies":["@deepseek-ai/dsh-client-runtime","@deepseek-ai/dsh-client-ui-conversation","@deepseek-ai/dsh-client-ui-input-trigger","@deepseek-ai/dsh-client-ui-primitives","@deepseek-ai/dsh-client-ui-slots","@deepseek-ai/dsh-client-ui-tool","@deepseek-ai/dsh-invariants","@deepseek-ai/dsh-llm","@deepseek-ai/dsh-session","@deepseek-ai/dsh-system-prompt","@deepseek-ai/dsh-tools","@deepseek-ai/cordis"]},"identity":{"status":"not-published","installMode":"github-source","upstreamNpm":null,"manifestName":"@omdsh-dev/dsh-genui","nameMatch":null,"npm":null,"repositoryMatch":"not-checked","provenance":"not-checked","tarballHost":null},"permissions":{"bundlePatch":"cordis.patch.yml","inserts":[{"id":"genui","name":"@omdsh-dev/dsh-genui","path":"cordis.patch.yml","disabled":false}],"overrides":[],"jsExpressions":0,"clientPlatform":"web","parseErrors":[]},"capabilities":["agent-control","browser-ui","credentials","environment","filesystem","host-bundle","network","session","subprocess"],"outboundHosts":[],"findings":[{"id":"HT-CLIENT-001","title":"浏览器端使用危险 HTML 注入点","severity":"medium","confidence":"medium","layer":"static","path":"lib/client.js","pathClass":"source","line":1,"evidence":"dangerouslySetInnerHTML","remediation":"使用安全 DOM API，并在不可避免时对不可信内容进行严格清洗。","hash":"48792e8ff9af270b03d1c839"},{"id":"HT-EXEC-001","title":"直接创建宿主子进程","severity":"low","confidence":"medium","layer":"static","path":"scripts/e2e-visual.mts","pathClass":"source","line":18,"evidence":"spawnSync","remediation":"通过 DSH 的受控 subprocess/shell seam 执行，并公开命令、参数及审批策略。","hash":"59a61ff9170a7f9f39541678"},{"id":"HT-EXEC-001","title":"直接创建宿主子进程","severity":"low","confidence":"medium","layer":"static","path":"scripts/e2e-visual.mts","pathClass":"source","line":18,"evidence":"node:child_process","remediation":"通过 DSH 的受控 subprocess/shell seam 执行，并公开命令、参数及审批策略。","hash":"36f9bd461b8482a49c0ed09e"},{"id":"HT-EXEC-001","title":"直接创建宿主子进程","severity":"low","confidence":"medium","layer":"static","path":"scripts/e2e.mjs","pathClass":"source","line":24,"evidence":"spawnSync","remediation":"通过 DSH 的受控 subprocess/shell seam 执行，并公开命令、参数及审批策略。","hash":"eb83aedd2a8e14980a204789"},{"id":"HT-EXEC-001","title":"直接创建宿主子进程","severity":"low","confidence":"medium","layer":"static","path":"scripts/e2e.mjs","pathClass":"source","line":24,"evidence":"node:child_process","remediation":"通过 DSH 的受控 subprocess/shell seam 执行，并公开命令、参数及审批策略。","hash":"5d36d08eb9e9676490792d68"},{"id":"HT-EXEC-001","title":"直接创建宿主子进程","severity":"low","confidence":"medium","layer":"static","path":"scripts/prepack.mjs","pathClass":"source","line":9,"evidence":"spawnSync","remediation":"通过 DSH 的受控 subprocess/shell seam 执行，并公开命令、参数及审批策略。","hash":"6283b8e46ee3d7be066b5f25"},{"id":"HT-EXEC-001","title":"直接创建宿主子进程","severity":"low","confidence":"medium","layer":"static","path":"scripts/prepack.mjs","pathClass":"source","line":9,"evidence":"node:child_process","remediation":"通过 DSH 的受控 subprocess/shell seam 执行，并公开命令、参数及审批策略。","hash":"da9087265ca0fce10d464a14"},{"id":"HT-EXEC-001","title":"直接创建宿主子进程","severity":"low","confidence":"medium","layer":"static","path":"scripts/verify-pack.mjs","pathClass":"source","line":9,"evidence":"execFileSync","remediation":"通过 DSH 的受控 subprocess/shell seam 执行，并公开命令、参数及审批策略。","hash":"251032362e017fda5f44171d"},{"id":"HT-EXEC-001","title":"直接创建宿主子进程","severity":"low","confidence":"medium","layer":"static","path":"scripts/verify-pack.mjs","pathClass":"source","line":9,"evidence":"node:child_process","remediation":"通过 DSH 的受控 subprocess/shell seam 执行，并公开命令、参数及审批策略。","hash":"0be559ad1c12f7a89fd59c06"},{"id":"HT-CLIENT-001","title":"浏览器端使用危险 HTML 注入点","severity":"medium","confidence":"low","layer":"static","path":"site/assets/index-CbA0uR5g.js","pathClass":"test-example-docs","line":78,"evidence":"dangerouslySetInnerHTML","remediation":"使用安全 DOM API，并在不可避免时对不可信内容进行严格清洗。","note":"位于测试、示例或文档目录","hash":"e7a385604c9d8a63a3639065"},{"id":"HT-CLIENT-001","title":"浏览器端使用危险 HTML 注入点","severity":"medium","confidence":"low","layer":"static","path":"site/assets/index-CbA0uR5g.js","pathClass":"test-example-docs","line":116,"evidence":"dangerouslySetInnerHTML","remediation":"使用安全 DOM API，并在不可避免时对不可信内容进行严格清洗。","note":"位于测试、示例或文档目录","hash":"e7a385604c9d8a63a3639065"},{"id":"HT-CLIENT-001","title":"浏览器端使用危险 HTML 注入点","severity":"medium","confidence":"low","layer":"static","path":"site/index.html","pathClass":"test-example-docs","line":66,"evidence":".innerHTML=","remediation":"使用安全 DOM API，并在不可避免时对不可信内容进行严格清洗。","note":"位于测试、示例或文档目录","hash":"11cd75759ad60232fb80922c"},{"id":"HT-CLIENT-001","title":"浏览器端使用危险 HTML 注入点","severity":"medium","confidence":"low","layer":"static","path":"site/index.html","pathClass":"test-example-docs","line":67,"evidence":"dangerouslySetInnerHTML","remediation":"使用安全 DOM API，并在不可避免时对不可信内容进行严格清洗。","note":"位于测试、示例或文档目录","hash":"b0a58b9345c5bbbaeb871d81"},{"id":"HT-CLIENT-002","title":"加载第三方统计或广告脚本","severity":"medium","confidence":"low","layer":"static","path":"site/index.html","pathClass":"test-example-docs","line":79,"evidence":"<script defer src=\"https://manus-analytics.com/umami","remediation":"固定并随插件分发客户端依赖，或使用带 integrity 校验的受信任来源。","note":"向 manus-analytics.com 发送浏览行为数据；位于测试、示例或文档目录","hash":"5493c335b2ec675985587cd9"},{"id":"HT-CLIENT-001","title":"浏览器端使用危险 HTML 注入点","severity":"medium","confidence":"medium","layer":"static","path":"src/client/blocks/advanced.tsx","pathClass":"source","line":254,"evidence":"dangerouslySetInnerHTML","remediation":"使用安全 DOM API，并在不可避免时对不可信内容进行严格清洗。","hash":"b8bfa9906ed01a249dd813fa"},{"id":"HT-CLIENT-001","title":"浏览器端使用危险 HTML 注入点","severity":"medium","confidence":"low","layer":"static","path":"src/client/mermaid-core.ts","pathClass":"source","line":14,"evidence":"dangerouslySetInnerHTML","remediation":"使用安全 DOM API，并在不可避免时对不可信内容进行严格清洗。","note":"附近存在清洗/转义调用","hash":"9d6faebba99d5059cee0aca7"},{"id":"HT-CLIENT-001","title":"浏览器端使用危险 HTML 注入点","severity":"medium","confidence":"low","layer":"static","path":"tests/dom-fence.spec.tsx","pathClass":"test-example-docs","line":78,"evidence":".innerHTML =","remediation":"使用安全 DOM API，并在不可避免时对不可信内容进行严格清洗。","note":"位于测试、示例或文档目录","hash":"69b86b81267d7d1342b2017e"},{"id":"HT-CLIENT-001","title":"浏览器端使用危险 HTML 注入点","severity":"medium","confidence":"low","layer":"static","path":"tests/dom-fence.spec.tsx","pathClass":"test-example-docs","line":492,"evidence":".innerHTML =","remediation":"使用安全 DOM API，并在不可避免时对不可信内容进行严格清洗。","note":"位于测试、示例或文档目录","hash":"69b86b81267d7d1342b2017e"},{"id":"HT-CLIENT-001","title":"浏览器端使用危险 HTML 注入点","severity":"medium","confidence":"low","layer":"static","path":"tests/genui-asset-loader.spec.ts","pathClass":"test-example-docs","line":9,"evidence":".innerHTML =","remediation":"使用安全 DOM API，并在不可避免时对不可信内容进行严格清洗。","note":"位于测试、示例或文档目录","hash":"e3ccd51c3712a13f4b60fe40"},{"id":"HT-CLIENT-001","title":"浏览器端使用危险 HTML 注入点","severity":"medium","confidence":"low","layer":"static","path":"tests/genui-mermaid-safe.spec.ts","pathClass":"test-example-docs","line":3,"evidence":"dangerouslySetInnerHTML","remediation":"使用安全 DOM API，并在不可避免时对不可信内容进行严格清洗。","note":"附近存在清洗/转义调用；位于测试、示例或文档目录","hash":"d8345ab4e902a27f1d071e4e"},{"id":"HT-RUNTIME-001","title":"动态代码执行","severity":"high","confidence":"low","layer":"static","path":"tests/genui-v11.spec.tsx","pathClass":"test-example-docs","line":34,"evidence":"eval(","remediation":"使用静态模块和受约束的配置解析器，避免在宿主权限下执行动态字符串。","note":"出现在字符串或注释中；位于测试、示例或文档目录","hash":"c96fe9b4bd4db6246b551fb5"},{"id":"HT-EXEC-001","title":"直接创建宿主子进程","severity":"low","confidence":"low","layer":"static","path":"tests/install-script.spec.ts","pathClass":"test-example-docs","line":8,"evidence":"execFileSync","remediation":"通过 DSH 的受控 subprocess/shell seam 执行，并公开命令、参数及审批策略。","note":"位于测试、示例或文档目录","hash":"411dd2517493d1769eba7494"},{"id":"HT-EXEC-001","title":"直接创建宿主子进程","severity":"low","confidence":"low","layer":"static","path":"tests/install-script.spec.ts","pathClass":"test-example-docs","line":8,"evidence":"node:child_process","remediation":"通过 DSH 的受控 subprocess/shell seam 执行，并公开命令、参数及审批策略。","note":"位于测试、示例或文档目录","hash":"e8679205e294f771e5ac214c"},{"id":"HT-CLIENT-001","title":"浏览器端使用危险 HTML 注入点","severity":"medium","confidence":"low","layer":"static","path":"tests/scene3d-events.spec.tsx","pathClass":"test-example-docs","line":62,"evidence":".innerHTML =","remediation":"使用安全 DOM API，并在不可避免时对不可信内容进行严格清洗。","note":"位于测试、示例或文档目录","hash":"5f7df295e73b9159a5134438"},{"id":"HT-DATA-001","title":"同一模块同时接触凭据与网络","severity":"high","confidence":"low","layer":"static","path":"scripts/e2e.mjs","pathClass":"source","line":68,"evidence":"credential access at line 68 + outbound network at line 155","remediation":"拆分能力边界，限定目的域名，并提供不会发送凭据值的可验证证明。","hash":"42a8734aef18715fcbc20c51","review":{"verdict":"placeholder","reason":"scripts/e2e.mjs 是仅用于本地端到端测试的开发脚本（未列入 package.json 的 files 清单，不随插件运行时分发），第68行只是检查 DEEPSEEK_API_KEY 是否存在以提前失败，后续网络请求是测试脚本本地启动 dsh CLI 与本地端口进行联调，并非插件运行时代码路径。","model":"sonnet@p2","reviewedAt":"2026-08-21T11:18:17.180Z"}}],"counts":{"critical":0,"high":0,"medium":2,"low":8},"rawCounts":{"critical":0,"high":2,"medium":13,"low":10},"vulnerabilities":[],"coverage":{"source":"complete","manifest":"complete","bundleConfig":"complete","dependencies":"lockfile-present","vulnerabilities":"complete","identity":"complete","artifact":"not-compared","llmReview":"complete","dynamicRuntime":"not-run","humanReview":"not-run"},"inventory":{"filesScanned":161,"bytesScanned":3497830,"truncated":false,"lockfiles":["pnpm-lock.yaml"],"pathClasses":{"test-example-docs":47,"markdown":9,"cordis":1,"source":99,"manifest":1,"yaml":2,"script":1,"data":1}},"limitations":["此结果为源码静态检测，不等同于无漏洞证明。","尚未比对 npm 发布包与源码的一致性，也未执行隔离运行和人工复核。","危险能力可能是插件功能所需，需结合用途与证据人工判断。"],"limitationKeys":["static-analysis-only","no-artifact-runtime-human-review","capability-needs-context"],"review":{"model":"sonnet","reviewedAt":"2026-08-22T08:19:54.650Z","summary":null,"intentMatch":null,"findingsReviewed":1,"findingsCandidates":1,"fromCache":1,"usage":null}},"timeline":[{"scannedAt":"2026-08-22T08:19:54.650Z","commit":"1ca5da4eb9394972cce2c1ccacfedc22eec3166b","policyVersion":"HT-DSH-0.2.2","verdict":"caution","status":"static-complete"},{"scannedAt":"2026-08-21T11:18:17.180Z","commit":"c75ca7cec500f7804fdf8be2d43bb970691a89c3","policyVersion":"HT-DSH-0.2.1","verdict":"caution","status":"static-complete"},{"scannedAt":"2026-08-21T10:46:06.495Z","commit":"4130a02d2fdf89dfe9f6d0e713f64b9523008f04","policyVersion":"HT-DSH-0.2.0","verdict":"caution","status":"static-complete"}],"events":[{"kind":"policy-change","from":"HT-DSH-0.2.1","to":"HT-DSH-0.2.2","commit":"1ca5da4eb9394972cce2c1ccacfedc22eec3166b","policyVersion":"HT-DSH-0.2.2","at":"2026-08-22T08:19:54.650Z"},{"kind":"policy-change","from":"HT-DSH-0.2.0","to":"HT-DSH-0.2.1","commit":"c75ca7cec500f7804fdf8be2d43bb970691a89c3","policyVersion":"HT-DSH-0.2.1","at":"2026-08-21T11:18:17.180Z"},{"kind":"first-scan","from":null,"to":"caution","commit":"4130a02d2fdf89dfe9f6d0e713f64b9523008f04","policyVersion":"HT-DSH-0.2.0","at":"2026-08-21T10:46:06.495Z"}]}