{"schemaVersion":2,"dataVersion":"20260822T105549Z-0a0b366f","generatedAt":"2026-08-22T10:55:49.138Z","source":{"id":"perrylink-dsh-github","slug":"perrylink-dsh-github","rank":694,"url":"https://github.com/PerryLink/dsh-github","name":"PerryLink/dsh-github","category":"git","description":{"zh":"官方级 GitHub CI 集成：composite action.yml、轮询 PR 评审机器人（幂等行内评论 + status-check 门禁）以及 PR/issue 工具，所有写入走人工审批门。","en":"Official-grade GitHub CI integration: a composite action.yml, a polling PR review bot with idempotent inline comments and a status-check gate, plus PR/issues tools with every write gated by human approval."},"stars":3,"starsCheckedAt":"2026-08-21","repository":{"owner":"PerryLink","repo":"dsh-github","requestedRef":null,"subpath":""},"npm":"@perrylink/dsh-github","downloads":661,"installMode":"npm","upstreamInstall":"dsh plugin --profile web add @perrylink/dsh-github","tarball":null,"added":"2026-08-16","page":"https://awesome-dsh-plugin.com/p/PerryLink/dsh-github/","screenshots":[],"discovery":{"provider":"awesome-dsh-plugin","channel":"plugins.json","indexUrl":"https://github.com/awesome-dsh-plugin/awesome-dsh-plugin","selection":"all curated entries"}},"report":{"sourceId":"perrylink-dsh-github","slug":"perrylink-dsh-github","policyVersion":"HT-DSH-0.2.2","scannedAt":"2026-08-22T08:27:36.671Z","scanStatus":"static-complete","verdict":"caution","score":94,"commit":"20665e5f325355b893da6d33dcf22b45d52f683e","commitDate":"2026-08-22T13:45:07+08:00","artifactDigest":"sha256:0a96d8dcd2effac77b2fbfb8fd91da8d7faa6ed2b2d5430763bcce855751dcae","downloadUrl":"https://github.com/PerryLink/dsh-github/archive/20665e5f325355b893da6d33dcf22b45d52f683e.tar.gz","installMode":"npm","installCommand":"dsh plugin --profile web add @perrylink/dsh-github","manifest":{"found":true,"path":"package.json","parseError":null,"packageName":"@perrylink/dsh-github","packageVersion":"0.6.3","bundle":{"patch":"./cordis.patch.yml"},"client":{"inject":["@deepseek-ai/dsh-client-connection","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-runtime","@deepseek-ai/dsh-client-ui-slots"],"platform":"web"},"lifecycleScripts":{"prepare":"node scripts/prepare.mjs"},"peerDependencies":["@deepseek-ai/cordis","@deepseek-ai/dsh-credentials","@deepseek-ai/dsh-llm","@deepseek-ai/dsh-session","@deepseek-ai/dsh-settings","@deepseek-ai/dsh-tools"]},"identity":{"status":"found","installMode":"npm","upstreamNpm":"@perrylink/dsh-github","manifestName":"@perrylink/dsh-github","nameMatch":true,"npm":{"name":"@perrylink/dsh-github","latestVersion":"0.6.3","publishedAt":"2026-08-21T05:51:26.228Z","createdAt":"2026-08-14T11:20:57.922Z","versionCount":6,"maintainers":1,"repository":"git+https://github.com/PerryLink/dsh-github.git","hasInstallScripts":false,"deprecated":false},"repositoryMatch":"match","provenance":"none","tarballHost":null,"versionMatch":"match"},"permissions":{"bundlePatch":"cordis.patch.yml","inserts":[{"id":"dsh-github","name":"@perrylink/dsh-github","path":"cordis.patch.yml","disabled":false}],"overrides":[],"jsExpressions":0,"clientPlatform":"web","parseErrors":[]},"capabilities":["agent-control","browser-ui","credentials","environment","filesystem","host-bundle","mcp","network","subprocess","telemetry"],"outboundHosts":[{"host":"api.github.com","count":3}],"findings":[{"id":"HT-EXEC-001","title":"直接创建宿主子进程","severity":"low","confidence":"medium","layer":"static","path":"lib/credential.js","pathClass":"source","line":12,"evidence":"node:child_process","remediation":"通过 DSH 的受控 subprocess/shell seam 执行，并公开命令、参数及审批策略。","hash":"c146e6299bfa44cc8dd18edb"},{"id":"HT-EXEC-001","title":"直接创建宿主子进程","severity":"low","confidence":"medium","layer":"static","path":"lib/git.js","pathClass":"source","line":8,"evidence":"node:child_process","remediation":"通过 DSH 的受控 subprocess/shell seam 执行，并公开命令、参数及审批策略。","hash":"2493b5f25f1f97c58af76ef7"},{"id":"HT-INSTALL-002","title":"Git 安装会触发 prepare 构建脚本","severity":"medium","confidence":"low","layer":"supply-chain","path":"package.json","pathClass":"manifest","line":33,"evidence":"\"prepare\": \"node scripts/prepare.mjs\"","remediation":"发布预构建制品（npm 或 GitHub Release tarball），并记录源码与发布包的一致性证明。","note":"该插件以 npm/tarball 预构建方式分发，prepare 不在用户机器上执行","hash":"fe611574a2e9dd5156aca68d"},{"id":"HT-EXEC-001","title":"直接创建宿主子进程","severity":"low","confidence":"medium","layer":"static","path":"scripts/local-test.mjs","pathClass":"source","line":25,"evidence":"spawnSync","remediation":"通过 DSH 的受控 subprocess/shell seam 执行，并公开命令、参数及审批策略。","hash":"e0a8bff534d47588f0296bb0"},{"id":"HT-EXEC-001","title":"直接创建宿主子进程","severity":"low","confidence":"medium","layer":"static","path":"scripts/local-test.mjs","pathClass":"source","line":25,"evidence":"node:child_process","remediation":"通过 DSH 的受控 subprocess/shell seam 执行，并公开命令、参数及审批策略。","hash":"8f1163fef15c8a9c2e6a5288"},{"id":"HT-EXEC-001","title":"直接创建宿主子进程","severity":"low","confidence":"medium","layer":"static","path":"scripts/prepare.mjs","pathClass":"source","line":9,"evidence":"spawnSync","remediation":"通过 DSH 的受控 subprocess/shell seam 执行，并公开命令、参数及审批策略。","hash":"a25b2e787ff1f6e5fc685d33"},{"id":"HT-EXEC-001","title":"直接创建宿主子进程","severity":"low","confidence":"medium","layer":"static","path":"scripts/prepare.mjs","pathClass":"source","line":9,"evidence":"node:child_process","remediation":"通过 DSH 的受控 subprocess/shell seam 执行，并公开命令、参数及审批策略。","hash":"7f1b508b50e536d42221f442"},{"id":"HT-EXEC-001","title":"直接创建宿主子进程","severity":"low","confidence":"medium","layer":"static","path":"scripts/verify-artifacts.mjs","pathClass":"source","line":7,"evidence":"execFileSync","remediation":"通过 DSH 的受控 subprocess/shell seam 执行，并公开命令、参数及审批策略。","hash":"309f2fc4707d8e487c23ef10"},{"id":"HT-EXEC-001","title":"直接创建宿主子进程","severity":"low","confidence":"medium","layer":"static","path":"scripts/verify-artifacts.mjs","pathClass":"source","line":7,"evidence":"node:child_process","remediation":"通过 DSH 的受控 subprocess/shell seam 执行，并公开命令、参数及审批策略。","hash":"4d3264e6977950901b849b57"},{"id":"HT-EXEC-001","title":"直接创建宿主子进程","severity":"low","confidence":"medium","layer":"static","path":"src/credential.ts","pathClass":"source","line":13,"evidence":"node:child_process","remediation":"通过 DSH 的受控 subprocess/shell seam 执行，并公开命令、参数及审批策略。","hash":"fc6074aeb6e16b9a774904ae"},{"id":"HT-EXEC-001","title":"直接创建宿主子进程","severity":"low","confidence":"medium","layer":"static","path":"src/git.ts","pathClass":"source","line":8,"evidence":"node:child_process","remediation":"通过 DSH 的受控 subprocess/shell seam 执行，并公开命令、参数及审批策略。","hash":"bdc87ed605fa8a9fcf276b39"},{"id":"HT-OBFUSCATION-001","title":"源码呈现混淆或载荷隐藏特征","severity":"medium","confidence":"high","layer":"static","path":"src/tools.ts","pathClass":"source","line":1370,"evidence":"Buffer.from(raw, 'base64').toString('utf8') : raw const capped = capText(text, maxChars) const value: FileVal","remediation":"以可读源码分发；若必须打包，请同时提供可复现构建与 source map。","note":"解码后直接进入执行","hash":"f35af31db742fdcb4012ea61","review":{"verdict":"functional","reason":"这是gh_file工具对GitHub Contents API返回的base64编码文件内容做Buffer.from(...).toString('utf8')解码后原样作为文本返回给调用者展示，未做eval/exec等执行操作，属于文件读取功能的必要环节。","model":"sonnet@p2","reviewedAt":"2026-08-21T11:29:24.047Z"}},{"id":"HT-EXEC-001","title":"直接创建宿主子进程","severity":"low","confidence":"low","layer":"static","path":"test/action-guard.test.ts","pathClass":"test-example-docs","line":12,"evidence":"spawnSync","remediation":"通过 DSH 的受控 subprocess/shell seam 执行，并公开命令、参数及审批策略。","note":"位于测试、示例或文档目录","hash":"fa3e9e0a227e5b9c4fd9e78c"},{"id":"HT-EXEC-001","title":"直接创建宿主子进程","severity":"low","confidence":"low","layer":"static","path":"test/action-guard.test.ts","pathClass":"test-example-docs","line":12,"evidence":"node:child_process","remediation":"通过 DSH 的受控 subprocess/shell seam 执行，并公开命令、参数及审批策略。","note":"位于测试、示例或文档目录","hash":"3930f4ed238c41f14e9f37ed"},{"id":"HT-RUNTIME-001","title":"动态代码执行","severity":"high","confidence":"low","layer":"static","path":"test/review.test.ts","pathClass":"test-example-docs","line":14,"evidence":"eval(","remediation":"使用静态模块和受约束的配置解析器，避免在宿主权限下执行动态字符串。","note":"出现在字符串或注释中；位于测试、示例或文档目录","hash":"4a006af1406906644dd66948"}],"counts":{"critical":0,"high":0,"medium":1,"low":10},"rawCounts":{"critical":0,"high":1,"medium":2,"low":12},"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":104,"bytesScanned":910186,"truncated":false,"lockfiles":["pnpm-lock.yaml"],"pathClasses":{"test-example-docs":26,"markdown":8,"yaml":3,"cordis":1,"source":64,"manifest":1,"data":1}},"limitations":["此结果为源码静态检测，不等同于无漏洞证明。","尚未比对 npm 发布包与源码的一致性，也未执行隔离运行和人工复核。","危险能力可能是插件功能所需，需结合用途与证据人工判断。"],"limitationKeys":["static-analysis-only","no-artifact-runtime-human-review","capability-needs-context"],"review":{"model":"sonnet","reviewedAt":"2026-08-22T08:27:36.671Z","summary":null,"intentMatch":null,"findingsReviewed":1,"findingsCandidates":1,"fromCache":1,"usage":null}},"timeline":[{"scannedAt":"2026-08-22T08:27:36.671Z","commit":"20665e5f325355b893da6d33dcf22b45d52f683e","policyVersion":"HT-DSH-0.2.2","verdict":"caution","status":"static-complete"},{"scannedAt":"2026-08-21T11:29:24.047Z","commit":"f440c5fe9b822800e8d2043135cc6277e6d3fff3","policyVersion":"HT-DSH-0.2.1","verdict":"caution","status":"static-complete"},{"scannedAt":"2026-08-21T10:58:33.598Z","commit":"f440c5fe9b822800e8d2043135cc6277e6d3fff3","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":"20665e5f325355b893da6d33dcf22b45d52f683e","policyVersion":"HT-DSH-0.2.2","at":"2026-08-22T08:27:36.671Z"},{"kind":"policy-change","from":"HT-DSH-0.2.0","to":"HT-DSH-0.2.1","commit":"f440c5fe9b822800e8d2043135cc6277e6d3fff3","policyVersion":"HT-DSH-0.2.1","at":"2026-08-21T11:29:24.047Z"},{"kind":"first-scan","from":null,"to":"caution","commit":"f440c5fe9b822800e8d2043135cc6277e6d3fff3","policyVersion":"HT-DSH-0.2.0","at":"2026-08-21T10:58:33.598Z"}]}