{"schemaVersion":2,"dataVersion":"20260822T105549Z-0a0b366f","generatedAt":"2026-08-22T10:55:49.138Z","source":{"id":"sjh9714-dsh-win32","slug":"sjh9714-dsh-win32","rank":219,"url":"https://github.com/sjh9714/dsh-win32","name":"sjh9714/dsh-win32","category":"dev","description":{"zh":"补上官方缺失的 win32 进程探测，让 Minimal 模式在 Windows 上真正可用，持久 shell 才能起来。附 busybox 变体预设，其持久 shell 能在 workspace-write 受限令牌下存活（MSYS 系 shell 在那里会崩），另有基于 ConPTY 控制台进程列表的前台命令解析、GBK/UTF-16 文件读取，以及安装排障工具。","en":"Makes Minimal mode work on Windows by supplying the missing win32 process inspector, so the persistent shell actually starts. Adds a busybox-based preset whose persistent shell survives the workspace-write restricted token (MSYS shells die there), ConPTY console-list foreground resolution, GBK/UTF-16 file reads, and an install-trap doctor."},"stars":14,"starsCheckedAt":"2026-08-21","repository":{"owner":"sjh9714","repo":"dsh-win32","requestedRef":null,"subpath":""},"npm":"dsh-win32","downloads":6351,"installMode":"npm","upstreamInstall":"dsh plugin --profile web add dsh-win32","tarball":null,"added":"2026-08-15","page":"https://awesome-dsh-plugin.com/p/sjh9714/dsh-win32/","screenshots":["https://raw.githubusercontent.com/sjh9714/dsh-win32/master/assets/market-card.png","https://raw.githubusercontent.com/sjh9714/dsh-win32/master/assets/shot-persistent-sandboxed.png","https://raw.githubusercontent.com/sjh9714/dsh-win32/master/assets/shot-preset-picker.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":"sjh9714-dsh-win32","slug":"sjh9714-dsh-win32","policyVersion":"HT-DSH-0.2.2","scannedAt":"2026-08-22T08:22:24.925Z","scanStatus":"static-complete","verdict":"caution","score":89,"commit":"07eb4fda852c7bcf2b318a6c2d1bd0347e20e499","commitDate":"2026-08-22T02:18:12+09:00","artifactDigest":"sha256:c22e8c03fdfe0f6bfd996bf2aebee7c3049f2476f987e1ab597aa6a2ca273df5","downloadUrl":"https://github.com/sjh9714/dsh-win32/archive/07eb4fda852c7bcf2b318a6c2d1bd0347e20e499.tar.gz","installMode":"npm","installCommand":"dsh plugin --profile web add dsh-win32","manifest":{"found":true,"path":"package.json","parseError":null,"packageName":"dsh-win32","packageVersion":"0.15.1","bundle":{"patch":"./cordis.patch.yml"},"client":null,"lifecycleScripts":{"prepare":"npm run build"},"peerDependencies":["@deepseek-ai/cordis","@deepseek-ai/dsh-fs-local","@deepseek-ai/dsh-fs-sandbox","@deepseek-ai/dsh-subprocess-local"]},"identity":{"status":"found","installMode":"npm","upstreamNpm":"dsh-win32","manifestName":"dsh-win32","nameMatch":true,"npm":{"name":"dsh-win32","latestVersion":"0.15.0","publishedAt":"2026-08-20T13:40:34.872Z","createdAt":"2026-08-15T08:45:58.080Z","versionCount":30,"maintainers":1,"repository":"git+https://github.com/sjh9714/dsh-win32.git","hasInstallScripts":false,"deprecated":false},"repositoryMatch":"match","provenance":"none","tarballHost":null,"versionMatch":"differs"},"permissions":{"bundlePatch":"cordis.patch.yml","inserts":[{"id":"subprocess-windows","name":"dsh-win32","path":"cordis.patch.yml","disabled":false}],"overrides":[{"id":"subprocess","tier":"critical","mode":"override","disabled":false,"replacesImplementation":false,"name":null,"keys":[],"path":"cordis.patch.yml"},{"id":"persona","tier":"normal","mode":"override","disabled":false,"replacesImplementation":true,"name":"@deepseek-ai/dsh-persona","keys":["text","complete","includeRuntimeContext"],"path":"preset/minimal-windows-sandboxed/agent.cordis.yml"},{"id":"persistent-shell","tier":"normal","mode":"override","disabled":false,"replacesImplementation":true,"name":"cordis:group","keys":["0","1","2"],"path":"preset/minimal-windows-sandboxed/agent.cordis.yml"},{"id":"filesystem","tier":"normal","mode":"override","disabled":false,"replacesImplementation":true,"name":"cordis:group","keys":["0","1"],"path":"preset/minimal-windows-sandboxed/agent.cordis.yml"},{"id":"persona","tier":"normal","mode":"override","disabled":false,"replacesImplementation":true,"name":"@deepseek-ai/dsh-persona","keys":["text","complete","includeRuntimeContext"],"path":"preset/minimal-windows/agent.cordis.yml"},{"id":"persistent-shell","tier":"normal","mode":"override","disabled":false,"replacesImplementation":true,"name":"cordis:group","keys":["0","1","2"],"path":"preset/minimal-windows/agent.cordis.yml"},{"id":"filesystem","tier":"normal","mode":"override","disabled":false,"replacesImplementation":true,"name":"cordis:group","keys":["0","1"],"path":"preset/minimal-windows/agent.cordis.yml"}],"jsExpressions":4,"clientPlatform":null,"parseErrors":[]},"capabilities":["agent-control","browser-ui","environment","filesystem","host-bundle","network","subprocess"],"outboundHosts":[{"host":"frippery.org","count":2},{"host":"git-scm.com","count":1}],"findings":[{"id":"HT-EXEC-001","title":"直接创建宿主子进程","severity":"low","confidence":"medium","layer":"static","path":"bin/cli.mjs","pathClass":"source","line":8,"evidence":"execFileSync","remediation":"通过 DSH 的受控 subprocess/shell seam 执行，并公开命令、参数及审批策略。","hash":"320d29845b7d1360d1c79d94"},{"id":"HT-EXEC-001","title":"直接创建宿主子进程","severity":"low","confidence":"medium","layer":"static","path":"bin/cli.mjs","pathClass":"source","line":8,"evidence":"node:child_process","remediation":"通过 DSH 的受控 subprocess/shell seam 执行，并公开命令、参数及审批策略。","hash":"c25e42254000dff72adfbffe"},{"id":"HT-CONFIG-001","title":"Cordis 配置包含可执行 !!js 表达式","severity":"medium","confidence":"high","layer":"dsh-semantics","path":"cordis.patch.yml","pathClass":"cordis","line":8,"evidence":"!!js process.platform === 'win32'","remediation":"!!js 是 DSH 的官方配置机制；只在表达式引入模块、访问进程或网络时需要额外解释。","note":"表达式访问模块、进程或网络，超出读取注入服务的常规用法","hash":"358edab8e4a4f3b576002656"},{"id":"HT-CONFIG-001","title":"Cordis 配置包含可执行 !!js 表达式","severity":"medium","confidence":"high","layer":"dsh-semantics","path":"cordis.patch.yml","pathClass":"cordis","line":12,"evidence":"!!js process.platform !== 'win32'","remediation":"!!js 是 DSH 的官方配置机制；只在表达式引入模块、访问进程或网络时需要额外解释。","note":"表达式访问模块、进程或网络，超出读取注入服务的常规用法","hash":"415cb151a552719f13a36b12"},{"id":"HT-CLIENT-001","title":"浏览器端使用危险 HTML 注入点","severity":"medium","confidence":"low","layer":"static","path":"demo/movie.html","pathClass":"test-example-docs","line":124,"evidence":".innerHTML =","remediation":"使用安全 DOM API，并在不可避免时对不可信内容进行严格清洗。","note":"位于测试、示例或文档目录","hash":"1d6108b5d1fc7d20f9b73a3c"},{"id":"HT-CLIENT-001","title":"浏览器端使用危险 HTML 注入点","severity":"medium","confidence":"low","layer":"static","path":"demo/movie.html","pathClass":"test-example-docs","line":126,"evidence":".innerHTML =","remediation":"使用安全 DOM API，并在不可避免时对不可信内容进行严格清洗。","note":"位于测试、示例或文档目录","hash":"1d6108b5d1fc7d20f9b73a3c"},{"id":"HT-INSTALL-002","title":"Git 安装会触发 prepare 构建脚本","severity":"medium","confidence":"low","layer":"supply-chain","path":"package.json","pathClass":"manifest","line":62,"evidence":"\"prepare\": \"npm run build\"","remediation":"发布预构建制品（npm 或 GitHub Release tarball），并记录源码与发布包的一致性证明。","note":"该插件以 npm/tarball 预构建方式分发，prepare 不在用户机器上执行","hash":"d28b218339321374f2793b3b"},{"id":"HT-CONFIG-001","title":"Cordis 配置包含可执行 !!js 表达式","severity":"medium","confidence":"high","layer":"dsh-semantics","path":"preset/minimal-windows-sandboxed/agent.cordis.yml","pathClass":"cordis","line":67,"evidence":"!!js process.env.DSH_CWD ?? process.cwd()","remediation":"!!js 是 DSH 的官方配置机制；只在表达式引入模块、访问进程或网络时需要额外解释。","note":"表达式访问模块、进程或网络，超出读取注入服务的常规用法","hash":"51fd04a4889bdcc9d6aae834"},{"id":"HT-CONFIG-001","title":"Cordis 配置包含可执行 !!js 表达式","severity":"medium","confidence":"high","layer":"dsh-semantics","path":"preset/minimal-windows/agent.cordis.yml","pathClass":"cordis","line":68,"evidence":"!!js process.env.DSH_CWD ?? process.cwd()","remediation":"!!js 是 DSH 的官方配置机制；只在表达式引入模块、访问进程或网络时需要额外解释。","note":"表达式访问模块、进程或网络，超出读取注入服务的常规用法","hash":"db47e4c64e24adc83d482d98"},{"id":"HT-EXEC-001","title":"直接创建宿主子进程","severity":"low","confidence":"medium","layer":"static","path":"scripts/foreground-smoke.mjs","pathClass":"source","line":16,"evidence":"execFileSync","remediation":"通过 DSH 的受控 subprocess/shell seam 执行，并公开命令、参数及审批策略。","hash":"9c999da99f0a727f81c608ff"},{"id":"HT-EXEC-001","title":"直接创建宿主子进程","severity":"low","confidence":"medium","layer":"static","path":"scripts/foreground-smoke.mjs","pathClass":"source","line":16,"evidence":"node:child_process","remediation":"通过 DSH 的受控 subprocess/shell seam 执行，并公开命令、参数及审批策略。","hash":"d763291d8e2d8b65ceec6515"},{"id":"HT-EXEC-001","title":"直接创建宿主子进程","severity":"low","confidence":"medium","layer":"static","path":"scripts/pipeline-smoke.mjs","pathClass":"source","line":12,"evidence":"execFileSync","remediation":"通过 DSH 的受控 subprocess/shell seam 执行，并公开命令、参数及审批策略。","hash":"bae90c8f5d89e4a5ed558d29"},{"id":"HT-EXEC-001","title":"直接创建宿主子进程","severity":"low","confidence":"medium","layer":"static","path":"scripts/pipeline-smoke.mjs","pathClass":"source","line":12,"evidence":"node:child_process","remediation":"通过 DSH 的受控 subprocess/shell seam 执行，并公开命令、参数及审批策略。","hash":"b8468c3941ad8a788b2c428d"},{"id":"HT-EXEC-001","title":"直接创建宿主子进程","severity":"low","confidence":"medium","layer":"static","path":"scripts/pwsh-sandbox-probe.mjs","pathClass":"source","line":30,"evidence":"spawnSync","remediation":"通过 DSH 的受控 subprocess/shell seam 执行，并公开命令、参数及审批策略。","hash":"27579f90a1c73950150dd314"},{"id":"HT-EXEC-001","title":"直接创建宿主子进程","severity":"low","confidence":"medium","layer":"static","path":"scripts/pwsh-sandbox-probe.mjs","pathClass":"source","line":30,"evidence":"node:child_process","remediation":"通过 DSH 的受控 subprocess/shell seam 执行，并公开命令、参数及审批策略。","hash":"215d061969f173e5732b7810"},{"id":"HT-EXEC-001","title":"直接创建宿主子进程","severity":"low","confidence":"low","layer":"static","path":"src/cli-entry.test.ts","pathClass":"test-example-docs","line":18,"evidence":"spawnSync","remediation":"通过 DSH 的受控 subprocess/shell seam 执行，并公开命令、参数及审批策略。","note":"位于测试、示例或文档目录","hash":"8b9af10cb182a26ddd789967"},{"id":"HT-EXEC-001","title":"直接创建宿主子进程","severity":"low","confidence":"low","layer":"static","path":"src/cli-entry.test.ts","pathClass":"test-example-docs","line":18,"evidence":"node:child_process","remediation":"通过 DSH 的受控 subprocess/shell seam 执行，并公开命令、参数及审批策略。","note":"位于测试、示例或文档目录","hash":"b2e46773e158a7a91bd68ee9"},{"id":"HT-EXEC-001","title":"直接创建宿主子进程","severity":"low","confidence":"medium","layer":"static","path":"src/console-list.ts","pathClass":"source","line":22,"evidence":"execFileSync","remediation":"通过 DSH 的受控 subprocess/shell seam 执行，并公开命令、参数及审批策略。","hash":"e88b4319441dc4a9ae207fe3"},{"id":"HT-EXEC-001","title":"直接创建宿主子进程","severity":"low","confidence":"medium","layer":"static","path":"src/console-list.ts","pathClass":"source","line":22,"evidence":"node:child_process","remediation":"通过 DSH 的受控 subprocess/shell seam 执行，并公开命令、参数及审批策略。","hash":"c4296b42d8b132c42aa4a598"},{"id":"HT-EXEC-001","title":"直接创建宿主子进程","severity":"low","confidence":"low","layer":"static","path":"src/doctor-envelope.test.ts","pathClass":"test-example-docs","line":9,"evidence":"execFileSync","remediation":"通过 DSH 的受控 subprocess/shell seam 执行，并公开命令、参数及审批策略。","note":"位于测试、示例或文档目录","hash":"d832908654cb18397a4896df"},{"id":"HT-EXEC-001","title":"直接创建宿主子进程","severity":"low","confidence":"low","layer":"static","path":"src/doctor-envelope.test.ts","pathClass":"test-example-docs","line":9,"evidence":"node:child_process","remediation":"通过 DSH 的受控 subprocess/shell seam 执行，并公开命令、参数及审批策略。","note":"位于测试、示例或文档目录","hash":"73441139f77b09b86394b178"},{"id":"HT-EXEC-001","title":"直接创建宿主子进程","severity":"low","confidence":"medium","layer":"static","path":"src/index.ts","pathClass":"source","line":11,"evidence":"spawnSync","remediation":"通过 DSH 的受控 subprocess/shell seam 执行，并公开命令、参数及审批策略。","hash":"b2fb8deb8e91fe73513e777b"},{"id":"HT-EXEC-001","title":"直接创建宿主子进程","severity":"low","confidence":"medium","layer":"static","path":"src/index.ts","pathClass":"source","line":11,"evidence":"node:child_process","remediation":"通过 DSH 的受控 subprocess/shell seam 执行，并公开命令、参数及审批策略。","hash":"165497e2a6660ef29786eb22"},{"id":"HT-EXEC-001","title":"直接创建宿主子进程","severity":"low","confidence":"medium","layer":"static","path":"src/inspector.ts","pathClass":"source","line":14,"evidence":"execFileSync","remediation":"通过 DSH 的受控 subprocess/shell seam 执行，并公开命令、参数及审批策略。","hash":"b3b6e4740f8aa7ad5672e183"},{"id":"HT-EXEC-001","title":"直接创建宿主子进程","severity":"low","confidence":"medium","layer":"static","path":"src/inspector.ts","pathClass":"source","line":14,"evidence":"node:child_process","remediation":"通过 DSH 的受控 subprocess/shell seam 执行，并公开命令、参数及审批策略。","hash":"005b1a934304aad37c18230f"},{"id":"HT-EXEC-001","title":"直接创建宿主子进程","severity":"low","confidence":"low","layer":"static","path":"src/setup.test.ts","pathClass":"test-example-docs","line":1,"evidence":"spawnSync","remediation":"通过 DSH 的受控 subprocess/shell seam 执行，并公开命令、参数及审批策略。","note":"位于测试、示例或文档目录","hash":"394194cbf30ea4070d00ba56"},{"id":"HT-EXEC-001","title":"直接创建宿主子进程","severity":"low","confidence":"low","layer":"static","path":"src/setup.test.ts","pathClass":"test-example-docs","line":1,"evidence":"node:child_process","remediation":"通过 DSH 的受控 subprocess/shell seam 执行，并公开命令、参数及审批策略。","note":"位于测试、示例或文档目录","hash":"5a90163a8a28ab4630dc76b7"},{"id":"HT-EXEC-001","title":"直接创建宿主子进程","severity":"low","confidence":"medium","layer":"static","path":"src/terminal-wrap.ts","pathClass":"source","line":19,"evidence":"spawnSync","remediation":"通过 DSH 的受控 subprocess/shell seam 执行，并公开命令、参数及审批策略。","hash":"ee9c9b6fa52e2450494a8eaa"},{"id":"HT-EXEC-001","title":"直接创建宿主子进程","severity":"low","confidence":"medium","layer":"static","path":"src/terminal-wrap.ts","pathClass":"source","line":19,"evidence":"node:child_process","remediation":"通过 DSH 的受控 subprocess/shell seam 执行，并公开命令、参数及审批策略。","hash":"5fd8067c727e2dabf1a32449"},{"id":"HT-PERMISSION-001","title":"覆盖安全关键宿主能力","severity":"medium","confidence":"high","path":"cordis.patch.yml","line":7,"evidence":"override: id=subprocess","remediation":"安全关键 seam 的替换必须逐项解释、最小化，并接受人工复核；用户安装前应知晓该能力被谁接管。","note":"改写配置 子进程执行（subprocess）","layer":"dsh-semantics","pathClass":"cordis","hash":"be598b74dba1887657a585e5","review":{"verdict":"functional","reason":"仅在 process.platform==='win32' 时禁用官方 subprocess 并插入同名替代 subprocess-windows，与插件声明的“修复 win32 PTY 探测以支持持久 shell”目的一致，属实现该功能必需的运行时替换。","model":"sonnet@p2","reviewedAt":"2026-08-21T13:16:33.811Z"}}],"counts":{"critical":0,"high":0,"medium":5,"low":16},"rawCounts":{"critical":0,"high":0,"medium":8,"low":22},"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":57,"bytesScanned":356967,"truncated":false,"lockfiles":["package-lock.json"],"pathClasses":{"test-example-docs":25,"markdown":5,"source":18,"cordis":3,"script":1,"data":2,"manifest":1,"yaml":2}},"limitations":["此结果为源码静态检测，不等同于无漏洞证明。","尚未比对 npm 发布包与源码的一致性，也未执行隔离运行和人工复核。","危险能力可能是插件功能所需，需结合用途与证据人工判断。"],"limitationKeys":["static-analysis-only","no-artifact-runtime-human-review","capability-needs-context"],"review":{"model":"sonnet","reviewedAt":"2026-08-22T08:22:24.925Z","summary":null,"intentMatch":null,"findingsReviewed":1,"findingsCandidates":1,"fromCache":1,"usage":null}},"timeline":[{"scannedAt":"2026-08-22T08:22:24.925Z","commit":"07eb4fda852c7bcf2b318a6c2d1bd0347e20e499","policyVersion":"HT-DSH-0.2.2","verdict":"caution","status":"static-complete"},{"scannedAt":"2026-08-21T13:16:33.810Z","commit":"0eb47d0217f5745ddccf0d04c274fd0ec5e4c3d4","policyVersion":"HT-DSH-0.2.2","verdict":"caution","status":"static-complete"},{"scannedAt":"2026-08-21T13:16:14.582Z","commit":"0eb47d0217f5745ddccf0d04c274fd0ec5e4c3d4","policyVersion":"HT-DSH-0.2.2","verdict":"caution","status":"static-complete"},{"scannedAt":"2026-08-21T11:22:01.735Z","commit":"0eb47d0217f5745ddccf0d04c274fd0ec5e4c3d4","policyVersion":"HT-DSH-0.2.1","verdict":"caution","status":"static-complete"},{"scannedAt":"2026-08-21T10:50:26.594Z","commit":"0eb47d0217f5745ddccf0d04c274fd0ec5e4c3d4","policyVersion":"HT-DSH-0.2.0","verdict":"caution","status":"static-complete"}],"events":[{"kind":"commit-change","from":"0eb47d0217f5745ddccf0d04c274fd0ec5e4c3d4","to":"07eb4fda852c7bcf2b318a6c2d1bd0347e20e499","commit":"07eb4fda852c7bcf2b318a6c2d1bd0347e20e499","policyVersion":"HT-DSH-0.2.2","at":"2026-08-22T08:22:24.925Z"},{"kind":"policy-change","from":"HT-DSH-0.2.1","to":"HT-DSH-0.2.2","commit":"0eb47d0217f5745ddccf0d04c274fd0ec5e4c3d4","policyVersion":"HT-DSH-0.2.2","at":"2026-08-21T13:16:14.582Z"},{"kind":"policy-change","from":"HT-DSH-0.2.0","to":"HT-DSH-0.2.1","commit":"0eb47d0217f5745ddccf0d04c274fd0ec5e4c3d4","policyVersion":"HT-DSH-0.2.1","at":"2026-08-21T11:22:01.735Z"},{"kind":"first-scan","from":null,"to":"caution","commit":"0eb47d0217f5745ddccf0d04c274fd0ec5e4c3d4","policyVersion":"HT-DSH-0.2.0","at":"2026-08-21T10:50:26.594Z"}]}