{"schemaVersion":2,"dataVersion":"20260822T105549Z-0a0b366f","generatedAt":"2026-08-22T10:55:49.138Z","source":{"id":"airmetro-dsh-update-checker","slug":"airmetro-dsh-update-checker","rank":323,"url":"https://github.com/Airmetro/dsh-update-checker","name":"Airmetro/dsh-update-checker","category":"dev","description":{"zh":"全栈更新管理：对 DeepSeek Harness 主程序与每个已装第三方插件做 npm/GitHub Release 双源 semver 比对，GUI 横幅随系统语言（中/英）逐项提示可更新插件；一键更新主程序或任意插件，自动备份可回滚、插件经临时目录安装不碰其它包、更新后看门狗自动重启服务。「检查更新」设置页提供逐插件版本状态灯、实时更新进度与横幅/通知开关。跨机器零配置。","en":"Update management for the whole stack: compares DeepSeek Harness and every installed third-party plugin against npm and GitHub releases (semver-aware), shows a locale-aware banner (zh/en) with per-plugin update status, and provides one-click updates with automatic backup/rollback, temp-dir installs that never touch other packages, and a watchdog-guarded restart. A settings page adds per-plugin version lamps, live update progress, and banner/notification toggles. Zero-config on any machine."},"stars":8,"starsCheckedAt":"2026-08-21","repository":{"owner":"Airmetro","repo":"dsh-update-checker","requestedRef":null,"subpath":""},"npm":"dsh-update-checker","downloads":4053,"installMode":"npm","upstreamInstall":"dsh plugin --profile web add dsh-update-checker","tarball":null,"added":"2026-08-15","page":"https://awesome-dsh-plugin.com/p/Airmetro/dsh-update-checker/","screenshots":["https://raw.githubusercontent.com/Airmetro/dsh-update-checker/main/assets/screenshots/01-banner-update-zh.png","https://raw.githubusercontent.com/Airmetro/dsh-update-checker/main/assets/screenshots/02-banner-update-en.png","https://raw.githubusercontent.com/Airmetro/dsh-update-checker/main/assets/screenshots/03-banner-plugins.png","https://raw.githubusercontent.com/Airmetro/dsh-update-checker/main/assets/screenshots/04-settings-zh.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":"airmetro-dsh-update-checker","slug":"airmetro-dsh-update-checker","policyVersion":"HT-DSH-0.2.2","scannedAt":"2026-08-22T08:23:42.426Z","scanStatus":"static-complete","verdict":"caution","score":94,"commit":"f3b57b49e60d2d8e687d6755afde0a5b9a3651df","commitDate":"2026-08-22T09:05:21+08:00","artifactDigest":"sha256:58981938b5f982ab8fbd591c059fe02e808105af39689631311fd451e8bb1e85","downloadUrl":"https://github.com/Airmetro/dsh-update-checker/archive/f3b57b49e60d2d8e687d6755afde0a5b9a3651df.tar.gz","installMode":"npm","installCommand":"dsh plugin --profile web add dsh-update-checker","manifest":{"found":true,"path":"package.json","parseError":null,"packageName":"dsh-update-checker","packageVersion":"1.4.15","bundle":{"patch":"./cordis.patch.yml"},"client":{"inject":["@deepseek-ai/dsh-client-runtime","@deepseek-ai/dsh-client-ui-slots","@deepseek-ai/dsh-client-locale"],"platform":"web"},"lifecycleScripts":{},"peerDependencies":[]},"identity":{"status":"found","installMode":"npm","upstreamNpm":"dsh-update-checker","manifestName":"dsh-update-checker","nameMatch":true,"npm":{"name":"dsh-update-checker","latestVersion":"1.4.14","publishedAt":"2026-08-21T03:29:18.562Z","createdAt":"2026-08-15T06:15:31.401Z","versionCount":29,"maintainers":1,"repository":"git+https://github.com/Airmetro/dsh-update-checker.git","hasInstallScripts":false,"deprecated":false},"repositoryMatch":"match","provenance":"none","tarballHost":null,"versionMatch":"differs"},"permissions":{"bundlePatch":"cordis.patch.yml","inserts":[{"id":"dsh-update-checker","name":"dsh-update-checker","path":"cordis.patch.yml","disabled":false}],"overrides":[],"jsExpressions":0,"clientPlatform":"web","parseErrors":[]},"capabilities":["browser-ui","environment","filesystem","host-bundle","network","subprocess"],"outboundHosts":[{"host":"api.github.com","count":4},{"host":"codeload.github.com","count":1}],"findings":[{"id":"HT-EXEC-001","title":"直接创建宿主子进程","severity":"low","confidence":"medium","layer":"static","path":"lib/index.js","pathClass":"source","line":47,"evidence":"node:child_process","remediation":"通过 DSH 的受控 subprocess/shell seam 执行，并公开命令、参数及审批策略。","hash":"89dedaa9e6429e9e52b8af60"},{"id":"HT-EXEC-001","title":"直接创建宿主子进程","severity":"low","confidence":"medium","layer":"static","path":"scripts/main-update-worker.mjs","pathClass":"source","line":20,"evidence":"node:child_process","remediation":"通过 DSH 的受控 subprocess/shell seam 执行，并公开命令、参数及审批策略。","hash":"7cf2281cee3d58df94cc807a"},{"id":"HT-DATA-001","title":"同一模块同时接触凭据与网络","severity":"medium","confidence":"medium","layer":"static","path":"lib/index.js","pathClass":"source","line":66,"evidence":"credential access at line 66 + outbound network at line 1341","remediation":"拆分能力边界，限定目的域名，并提供不会发送凭据值的可验证证明。","hash":"01b0b988fa81a627a63ff5ab","review":{"verdict":"functional","reason":"GH_TOKEN 取自用户自身环境变量，仅用于插件声明的 GitHub Release 双源比对请求（受 GH_INSECURE_HOST_RE 限定为 github.com/githubusercontent.com 等域名），属于更新检查功能所必需的凭据用途。","model":"sonnet","reviewedAt":"2026-08-22T08:23:42.426Z"}}],"counts":{"critical":0,"high":0,"medium":1,"low":2},"rawCounts":{"critical":0,"high":0,"medium":1,"low":2},"vulnerabilities":[],"coverage":{"source":"complete","manifest":"complete","bundleConfig":"complete","dependencies":"lockfile-missing","vulnerabilities":"lockfile-missing","identity":"complete","artifact":"not-compared","llmReview":"complete","dynamicRuntime":"not-run","humanReview":"not-run"},"inventory":{"filesScanned":27,"bytesScanned":339182,"truncated":false,"lockfiles":[],"pathClasses":{"markdown":3,"cordis":1,"source":4,"manifest":1,"test-example-docs":16,"script":2}},"limitations":["此结果为源码静态检测，不等同于无漏洞证明。","尚未比对 npm 发布包与源码的一致性，也未执行隔离运行和人工复核。","危险能力可能是插件功能所需，需结合用途与证据人工判断。"],"limitationKeys":["static-analysis-only","no-artifact-runtime-human-review","capability-needs-context"],"review":{"model":"sonnet","reviewedAt":"2026-08-22T08:23:42.426Z","summary":"该插件用途为检查 DSH 主程序及第三方插件更新（npm/GitHub Release 双源），代码读取 GH_TOKEN 环境变量用于访问 GitHub API 避免限流，属于用户自行配置的凭据且仅发往受正则限定的 GitHub 相关域名，与插件描述的更新检查功能一致，未见凭据外泄迹象；需关注的是插件具备一键更新/自动重启及子进程执行能力，属高权限操作，用户应确保插件来源可信。","intentMatch":"consistent","findingsReviewed":1,"findingsCandidates":1,"fromCache":0,"usage":{"inputTokens":2,"outputTokens":669,"costUsd":0.018571999999999998,"durationMs":11241}}},"timeline":[{"scannedAt":"2026-08-22T08:23:42.426Z","commit":"f3b57b49e60d2d8e687d6755afde0a5b9a3651df","policyVersion":"HT-DSH-0.2.2","verdict":"caution","status":"static-complete"},{"scannedAt":"2026-08-21T11:23:23.444Z","commit":"cb38f68323eaa3893248a5c6197627c013d3f020","policyVersion":"HT-DSH-0.2.1","verdict":"caution","status":"static-complete"},{"scannedAt":"2026-08-21T10:52:10.029Z","commit":"cb38f68323eaa3893248a5c6197627c013d3f020","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":"f3b57b49e60d2d8e687d6755afde0a5b9a3651df","policyVersion":"HT-DSH-0.2.2","at":"2026-08-22T08:23:42.426Z"},{"kind":"policy-change","from":"HT-DSH-0.2.0","to":"HT-DSH-0.2.1","commit":"cb38f68323eaa3893248a5c6197627c013d3f020","policyVersion":"HT-DSH-0.2.1","at":"2026-08-21T11:23:23.444Z"},{"kind":"first-scan","from":null,"to":"caution","commit":"cb38f68323eaa3893248a5c6197627c013d3f020","policyVersion":"HT-DSH-0.2.0","at":"2026-08-21T10:52:10.029Z"}]}