{"schemaVersion":2,"dataVersion":"20260822T105549Z-0a0b366f","generatedAt":"2026-08-22T10:55:49.138Z","source":{"id":"strukto-ai-mirage-dsh","slug":"strukto-ai-mirage-dsh","rank":7,"url":"https://github.com/strukto-ai/mirage/tree/main/typescript/packages/dsh","name":"strukto-ai/mirage#dsh","category":"dev","description":{"zh":"把文件系统与 bash 提供者换成 mirage 虚拟工作区：文件工具与 shell 命令作用于挂载的资源（RAM、S3、Redis、Slack、Gmail、Notion、Postgres）而非宿主磁盘，支持按挂载点设置读/写/执行模式、按命令选择沙箱（进程内 monty、pyodide、quickjs；远程 docker、e2b、daytona），并可在虚拟终端中安装 CLI（git、gh、slack、linear、ntn、gws，或自行注册的程序树）作为命令头词。","en":"Swaps the filesystem and bash providers for a mirage virtual workspace: file tools and shell commands run over mounted resources (RAM, S3, Redis, Slack, Gmail, Notion, Postgres) instead of the host disk, with per-mount read/write/exec modes, per-command sandbox routing (monty, pyodide, quickjs in process; docker, e2b, daytona remote), and installed CLIs (git, gh, slack, linear, ntn, gws, or one you register) as head words in the virtual terminal."},"stars":3546,"starsCheckedAt":"2026-08-21","repository":{"owner":"strukto-ai","repo":"mirage","requestedRef":"main","subpath":"typescript/packages/dsh"},"npm":"@struktoai/mirage-dsh","downloads":1438,"installMode":"npm","upstreamInstall":"dsh plugin --profile web add @struktoai/mirage-dsh","tarball":null,"added":"2026-08-15","page":"https://awesome-dsh-plugin.com/p/strukto-ai/mirage--typescript-packages-dsh/","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":"strukto-ai-mirage-dsh","slug":"strukto-ai-mirage-dsh","policyVersion":"HT-DSH-0.2.2","scannedAt":"2026-08-22T08:19:29.716Z","scanStatus":"static-complete","verdict":"caution","score":85,"commit":"b425d0fcf53165237635050872eb6d32edd7c454","commitDate":"2026-08-22T00:05:18-07:00","artifactDigest":"sha256:71c896277654a84c99ad35594b78d7caf7d0fb57fd1c8a2b258b09826586fb3e","downloadUrl":"https://github.com/strukto-ai/mirage/archive/b425d0fcf53165237635050872eb6d32edd7c454.tar.gz","installMode":"npm","installCommand":"dsh plugin --profile web add @struktoai/mirage-dsh","manifest":{"found":true,"path":"package.json","parseError":null,"packageName":"@struktoai/mirage-dsh","packageVersion":"0.0.1","bundle":{"patch":"./cordis.patch.yml"},"client":null,"lifecycleScripts":{},"peerDependencies":["@deepseek-ai/cordis","@deepseek-ai/dsh-fs","@deepseek-ai/dsh-shell"]},"identity":{"status":"found","installMode":"npm","upstreamNpm":"@struktoai/mirage-dsh","manifestName":"@struktoai/mirage-dsh","nameMatch":true,"npm":{"name":"@struktoai/mirage-dsh","latestVersion":"0.0.1","publishedAt":"2026-08-15T00:45:06.483Z","createdAt":"2026-08-15T00:03:35.834Z","versionCount":2,"maintainers":1,"repository":"git+https://github.com/strukto-ai/mirage.git","hasInstallScripts":false,"deprecated":false},"repositoryMatch":"match","provenance":"none","tarballHost":null,"versionMatch":"match"},"permissions":{"bundlePatch":"cordis.patch.yml","inserts":[{"id":"mirage","name":"@struktoai/mirage-dsh/service","path":"cordis.patch.yml","disabled":false},{"id":"mirage-fs","name":"@struktoai/mirage-dsh/fs","path":"cordis.patch.yml","disabled":false},{"id":"mirage-shell","name":"@struktoai/mirage-dsh/shell","path":"cordis.patch.yml","disabled":false}],"overrides":[{"id":"fs-sandbox","tier":"normal","mode":"override","disabled":true,"replacesImplementation":false,"name":null,"keys":[],"path":"cordis.patch.yml"},{"id":"bash-sandbox","tier":"critical","mode":"override","disabled":true,"replacesImplementation":false,"name":null,"keys":[],"path":"cordis.patch.yml"},{"id":"pwsh-sandbox","tier":"critical","mode":"override","disabled":true,"replacesImplementation":false,"name":null,"keys":[],"path":"cordis.patch.yml"},{"id":"tool-pwsh","tier":"sensitive","mode":"override","disabled":true,"replacesImplementation":false,"name":null,"keys":[],"path":"cordis.patch.yml"},{"id":"tool-fs-search","tier":"sensitive","mode":"override","disabled":true,"replacesImplementation":false,"name":null,"keys":[],"path":"cordis.patch.yml"}],"jsExpressions":0,"clientPlatform":null,"parseErrors":[]},"capabilities":["environment","filesystem","host-bundle"],"outboundHosts":[{"host":"www.apache.org","count":11}],"findings":[{"id":"HT-CONFIG-001","title":"Cordis 配置包含可执行 !!js 表达式","severity":"medium","confidence":"high","layer":"dsh-semantics","path":"cordis.patch.yml","pathClass":"cordis","line":19,"evidence":"!!js process.env.SLACK_BOT_TOKEN }","remediation":"!!js 是 DSH 的官方配置机制；只在表达式引入模块、访问进程或网络时需要额外解释。","note":"表达式访问模块、进程或网络，超出读取注入服务的常规用法","hash":"37bbd9ab54f5ad129b66ef2b"},{"id":"HT-PERMISSION-001","title":"覆盖安全关键宿主能力","severity":"medium","confidence":"high","path":"cordis.patch.yml","line":43,"evidence":"override: id=bash-sandbox disabled=true","remediation":"安全关键 seam 的替换必须逐项解释、最小化，并接受人工复核；用户安装前应知晓该能力被谁接管。","note":"关闭 Bash 沙箱（bash-sandbox）；关闭安全关键能力意味着后续所有工具调用都不再经过它","layer":"dsh-semantics","pathClass":"cordis","hash":"86b134b85813164d0df11909","review":{"verdict":"functional","reason":"disabled bash-sandbox 是插件核心功能所需——用 mirage-shell 替换宿主 bash 提供者，且其自身按 DSH_PERMISSION_MODE 收紧挂载点为只读来强制策略，属于声明用途的必要替换而非单纯移除防护。","model":"sonnet@p2","reviewedAt":"2026-08-21T13:16:27.690Z"}},{"id":"HT-PERMISSION-001","title":"覆盖安全关键宿主能力","severity":"medium","confidence":"high","path":"cordis.patch.yml","line":50,"evidence":"override: id=pwsh-sandbox disabled=true","remediation":"安全关键 seam 的替换必须逐项解释、最小化，并接受人工复核；用户安装前应知晓该能力被谁接管。","note":"关闭 PowerShell 沙箱（pwsh-sandbox）；关闭安全关键能力意味着后续所有工具调用都不再经过它","layer":"dsh-semantics","pathClass":"cordis","hash":"5a6a9a4bb32464a6fdd5b30c","review":{"verdict":"functional","reason":"disabled pwsh-sandbox 同时连带禁用 tool-pwsh（因 mirage 虚拟世界不含宿主子进程能力），是移除整条不再存在的功能路径而非留下无防护的能力，符合插件替换 fs/shell 提供者的声明意图。","model":"sonnet@p2","reviewedAt":"2026-08-21T13:16:27.690Z"}},{"id":"HT-PERMISSION-002","title":"覆盖敏感宿主能力","severity":"medium","confidence":"high","path":"cordis.patch.yml","line":52,"evidence":"override: id=tool-pwsh disabled=true","remediation":"安全关键 seam 的替换必须逐项解释、最小化，并接受人工复核；用户安装前应知晓该能力被谁接管。","note":"关闭 tool-pwsh","layer":"dsh-semantics","pathClass":"cordis","hash":"df874a66a5547f68f93034d7"},{"id":"HT-PERMISSION-002","title":"覆盖敏感宿主能力","severity":"medium","confidence":"high","path":"cordis.patch.yml","line":55,"evidence":"override: id=tool-fs-search disabled=true","remediation":"安全关键 seam 的替换必须逐项解释、最小化，并接受人工复核；用户安装前应知晓该能力被谁接管。","note":"关闭 tool-fs-search","layer":"dsh-semantics","pathClass":"cordis","hash":"e0a2359bdc33f8915835baeb"}],"counts":{"critical":0,"high":0,"medium":5,"low":0},"rawCounts":{"critical":0,"high":0,"medium":5,"low":0},"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":21,"bytesScanned":170182,"truncated":false,"lockfiles":[],"pathClasses":{"cordis":1,"manifest":1,"test-example-docs":7,"source":11,"data":1}},"limitations":["此结果为源码静态检测，不等同于无漏洞证明。","尚未比对 npm 发布包与源码的一致性，也未执行隔离运行和人工复核。","危险能力可能是插件功能所需，需结合用途与证据人工判断。"],"limitationKeys":["static-analysis-only","no-artifact-runtime-human-review","capability-needs-context"],"review":{"model":"sonnet","reviewedAt":"2026-08-22T08:19:29.716Z","summary":null,"intentMatch":null,"findingsReviewed":2,"findingsCandidates":2,"fromCache":2,"usage":null}},"timeline":[{"scannedAt":"2026-08-22T08:19:29.716Z","commit":"b425d0fcf53165237635050872eb6d32edd7c454","policyVersion":"HT-DSH-0.2.2","verdict":"caution","status":"static-complete"},{"scannedAt":"2026-08-21T13:16:27.690Z","commit":"43e8a67180a1a834b1176447a65f2562ed707a16","policyVersion":"HT-DSH-0.2.2","verdict":"caution","status":"static-complete"},{"scannedAt":"2026-08-21T13:16:10.245Z","commit":"43e8a67180a1a834b1176447a65f2562ed707a16","policyVersion":"HT-DSH-0.2.2","verdict":"caution","status":"static-complete"},{"scannedAt":"2026-08-21T11:17:16.054Z","commit":"43e8a67180a1a834b1176447a65f2562ed707a16","policyVersion":"HT-DSH-0.2.1","verdict":"caution","status":"static-complete"},{"scannedAt":"2026-08-21T10:43:58.335Z","commit":"df179bbfcef1c32da9d0ab3b845d2a95aacdfc74","policyVersion":"HT-DSH-0.2.0","verdict":"caution","status":"static-complete"}],"events":[{"kind":"commit-change","from":"43e8a67180a1a834b1176447a65f2562ed707a16","to":"b425d0fcf53165237635050872eb6d32edd7c454","commit":"b425d0fcf53165237635050872eb6d32edd7c454","policyVersion":"HT-DSH-0.2.2","at":"2026-08-22T08:19:29.716Z"},{"kind":"policy-change","from":"HT-DSH-0.2.1","to":"HT-DSH-0.2.2","commit":"43e8a67180a1a834b1176447a65f2562ed707a16","policyVersion":"HT-DSH-0.2.2","at":"2026-08-21T13:16:10.245Z"},{"kind":"policy-change","from":"HT-DSH-0.2.0","to":"HT-DSH-0.2.1","commit":"43e8a67180a1a834b1176447a65f2562ed707a16","policyVersion":"HT-DSH-0.2.1","at":"2026-08-21T11:17:16.054Z"},{"kind":"first-scan","from":null,"to":"caution","commit":"df179bbfcef1c32da9d0ab3b845d2a95aacdfc74","policyVersion":"HT-DSH-0.2.0","at":"2026-08-21T10:43:58.335Z"}]}