{"schemaVersion":2,"dataVersion":"20260822T105549Z-0a0b366f","generatedAt":"2026-08-22T10:55:49.138Z","source":{"id":"plutokeating-dsh-lark-bot","slug":"plutokeating-dsh-lark-bot","rank":142,"url":"https://github.com/PlutoKeating/dsh-lark-bot","name":"PlutoKeating/dsh-lark-bot","category":"notify","description":{"zh":"把 DeepSeek Harness 装进飞书的桥接插件：扫码绑定 PersonalAgent、流式卡片、git worktree 项目工作区、scope 并行任务、多角色 Agent、跨会话通知、对话内模型/密钥管理，以及 dsh 崩溃后仍在飞书应答的安全网守护。","en":"Feishu/Lark bridge for DeepSeek Harness: scan-to-connect PersonalAgent binding, streaming cards, git-worktree project workspaces, parallel per-scope tasks, multi-role agents, cross-session notify, in-chat model/key management, and a safety-net guardian that still answers in Feishu after dsh crashes."},"stars":28,"starsCheckedAt":"2026-08-21","repository":{"owner":"PlutoKeating","repo":"dsh-lark-bot","requestedRef":null,"subpath":""},"npm":"dsh-lark-bot","downloads":7390,"installMode":"npm","upstreamInstall":"dsh plugin --profile web add dsh-lark-bot","tarball":null,"added":"2026-08-18","page":"https://awesome-dsh-plugin.com/p/PlutoKeating/dsh-lark-bot/","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":"plutokeating-dsh-lark-bot","slug":"plutokeating-dsh-lark-bot","policyVersion":"HT-DSH-0.2.2","scannedAt":"2026-08-22T08:21:30.036Z","scanStatus":"static-complete","verdict":"caution","score":89,"commit":"2812c8ed93be1c1a676f1d59a25952fdca915af9","commitDate":"2026-08-22T06:35:02+08:00","artifactDigest":"sha256:50e3e09f938193cdcd659b401913c7888a3bfd2a1b3db9b106a48974965ca077","downloadUrl":"https://github.com/PlutoKeating/dsh-lark-bot/archive/2812c8ed93be1c1a676f1d59a25952fdca915af9.tar.gz","installMode":"npm","installCommand":"dsh plugin --profile web add dsh-lark-bot","manifest":{"found":true,"path":"package.json","parseError":null,"packageName":"dsh-lark-bot","packageVersion":"0.17.0","bundle":{"patch":"./cordis.patch.yml"},"client":{"platform":"web","inject":["@deepseek-ai/dsh-client-ui-settings-plugins"]},"lifecycleScripts":{"prepare":"pnpm build"},"peerDependencies":["@deepseek-ai/cordis"]},"identity":{"status":"found","installMode":"npm","upstreamNpm":"dsh-lark-bot","manifestName":"dsh-lark-bot","nameMatch":true,"npm":{"name":"dsh-lark-bot","latestVersion":"0.16.0","publishedAt":"2026-08-20T07:00:09.953Z","createdAt":"2026-08-13T21:59:24.237Z","versionCount":48,"maintainers":1,"repository":"git+https://github.com/PlutoKeating/dsh-lark-bot.git","hasInstallScripts":false,"deprecated":false},"repositoryMatch":"match","provenance":"attested","tarballHost":null,"versionMatch":"differs"},"permissions":{"bundlePatch":"cordis.patch.yml","inserts":[{"id":"dsh-lark-bot","name":"dsh-lark-bot/plugin","path":"cordis.patch.yml","disabled":false},{"id":"lark-notify","name":"dsh-lark-bot/notify","path":"cordis.patch.yml","disabled":false},{"id":"lark-file","name":"dsh-lark-bot/file","path":"cordis.patch.yml","disabled":false},{"id":"lark-plan-approval","name":"dsh-lark-bot/plan","path":"cordis.patch.yml","disabled":false},{"id":"lark-approval-answerer","name":"dsh-lark-bot/approval","path":"cordis.patch.yml","disabled":false}],"overrides":[],"jsExpressions":20,"clientPlatform":"web","parseErrors":[]},"capabilities":["agent-control","browser-ui","credentials","environment","filesystem","host-bundle","network","session","subprocess"],"outboundHosts":[{"host":"api.github.com","count":3},{"host":"open.larksuite.com","count":3},{"host":"open.feishu.cn","count":3},{"host":"www.apple.com","count":2},{"host":"npm.pkg.github.com","count":1},{"host":"www.kingapi.xyz","count":1},{"host":"gateway.example","count":1},{"host":"applink.feishu.cn","count":1},{"host":"api.deepseek.com","count":1}],"findings":[{"id":"HT-CONFIG-001","title":"Cordis 配置包含可执行 !!js 表达式","severity":"medium","confidence":"high","layer":"dsh-semantics","path":"cordis.patch.yml","pathClass":"cordis","line":23,"evidence":"!!js process.env.DSH_LARK_PROFILE ?? 'default'","remediation":"!!js 是 DSH 的官方配置机制；只在表达式引入模块、访问进程或网络时需要额外解释。","note":"表达式访问模块、进程或网络，超出读取注入服务的常规用法","hash":"a0b009f9ab58f6f94ca17dd2"},{"id":"HT-CONFIG-001","title":"Cordis 配置包含可执行 !!js 表达式","severity":"medium","confidence":"high","layer":"dsh-semantics","path":"cordis.patch.yml","pathClass":"cordis","line":24,"evidence":"!!js process.env.DSH_LARK_HOME","remediation":"!!js 是 DSH 的官方配置机制；只在表达式引入模块、访问进程或网络时需要额外解释。","note":"表达式访问模块、进程或网络，超出读取注入服务的常规用法","hash":"fba8c7bd9b3acd469d9aef20"},{"id":"HT-INSTALL-001","title":"安装阶段执行高风险生命周期脚本","severity":"high","confidence":"low","layer":"supply-chain","path":"package.json","pathClass":"manifest","line":106,"evidence":"\"install\": \"docs/QUICK_START.md\"","remediation":"移除安装期执行，或提供可复现构建产物并将脚本降为显式命令。","hash":"428f287d3a17cf26b5c9046f","review":{"verdict":"placeholder","reason":"package.json:106 的 install 字段位于 dshWorkshop.evidence 元数据块，只是指向 docs/QUICK_START.md 的文档引用，并非 npm scripts.install 可执行脚本，不会在安装时被执行。","model":"sonnet","reviewedAt":"2026-08-21T10:48:40.190Z"}},{"id":"HT-INSTALL-002","title":"Git 安装会触发 prepare 构建脚本","severity":"medium","confidence":"low","layer":"supply-chain","path":"package.json","pathClass":"manifest","line":131,"evidence":"\"prepare\": \"pnpm build\"","remediation":"发布预构建制品（npm 或 GitHub Release tarball），并记录源码与发布包的一致性证明。","note":"该插件以 npm/tarball 预构建方式分发，prepare 不在用户机器上执行","hash":"619d136d2740ac49e3552764"},{"id":"HT-EXEC-001","title":"直接创建宿主子进程","severity":"low","confidence":"medium","layer":"static","path":"scripts/check-tui-admission.mjs","pathClass":"source","line":2,"evidence":"execFileSync","remediation":"通过 DSH 的受控 subprocess/shell seam 执行，并公开命令、参数及审批策略。","hash":"5a42cd2dcba933c0ee071839"},{"id":"HT-EXEC-001","title":"直接创建宿主子进程","severity":"low","confidence":"medium","layer":"static","path":"scripts/check-tui-admission.mjs","pathClass":"source","line":2,"evidence":"node:child_process","remediation":"通过 DSH 的受控 subprocess/shell seam 执行，并公开命令、参数及审批策略。","hash":"9e9da475d3fc4eb4df14bb85"},{"id":"HT-EXEC-001","title":"直接创建宿主子进程","severity":"low","confidence":"medium","layer":"static","path":"scripts/check-tui-tty.mjs","pathClass":"source","line":1,"evidence":"spawnSync","remediation":"通过 DSH 的受控 subprocess/shell seam 执行，并公开命令、参数及审批策略。","hash":"58e0acfcf4992e0ba656536b"},{"id":"HT-EXEC-001","title":"直接创建宿主子进程","severity":"low","confidence":"medium","layer":"static","path":"scripts/check-tui-tty.mjs","pathClass":"source","line":1,"evidence":"node:child_process","remediation":"通过 DSH 的受控 subprocess/shell seam 执行，并公开命令、参数及审批策略。","hash":"a7eff9f97531b5f9dd42a7cf"},{"id":"HT-EXEC-001","title":"直接创建宿主子进程","severity":"low","confidence":"medium","layer":"static","path":"scripts/probe-dsh-compat.mjs","pathClass":"source","line":10,"evidence":"node:child_process","remediation":"通过 DSH 的受控 subprocess/shell seam 执行，并公开命令、参数及审批策略。","hash":"d0fd888324616a22d3d2b130"},{"id":"HT-EXEC-001","title":"直接创建宿主子进程","severity":"low","confidence":"medium","layer":"static","path":"scripts/publish-dual-packages.mjs","pathClass":"source","line":10,"evidence":"node:child_process","remediation":"通过 DSH 的受控 subprocess/shell seam 执行，并公开命令、参数及审批策略。","hash":"5df93bb71bf77e88756a3c85"},{"id":"HT-EXEC-001","title":"直接创建宿主子进程","severity":"low","confidence":"medium","layer":"static","path":"scripts/release-notes.mjs","pathClass":"source","line":11,"evidence":"spawnSync","remediation":"通过 DSH 的受控 subprocess/shell seam 执行，并公开命令、参数及审批策略。","hash":"d880b58f99a746f046621075"},{"id":"HT-EXEC-001","title":"直接创建宿主子进程","severity":"low","confidence":"medium","layer":"static","path":"scripts/release-notes.mjs","pathClass":"source","line":11,"evidence":"node:child_process","remediation":"通过 DSH 的受控 subprocess/shell seam 执行，并公开命令、参数及审批策略。","hash":"38fac615aeac894f47ef8e2a"},{"id":"HT-EXEC-001","title":"直接创建宿主子进程","severity":"low","confidence":"medium","layer":"static","path":"src/adapters/dsh/acp-adapter.ts","pathClass":"source","line":7,"evidence":"node:child_process","remediation":"通过 DSH 的受控 subprocess/shell seam 执行，并公开命令、参数及审批策略。","hash":"dbd8ae79e352c56f098a9f99"},{"id":"HT-EXEC-001","title":"直接创建宿主子进程","severity":"low","confidence":"medium","layer":"static","path":"src/adapters/dsh/adapter.ts","pathClass":"source","line":3,"evidence":"node:child_process","remediation":"通过 DSH 的受控 subprocess/shell seam 执行，并公开命令、参数及审批策略。","hash":"c2130c769cb281d423446bbd"},{"id":"HT-EXEC-001","title":"直接创建宿主子进程","severity":"low","confidence":"medium","layer":"static","path":"src/cli/commands/service-run.ts","pathClass":"source","line":1,"evidence":"node:child_process","remediation":"通过 DSH 的受控 subprocess/shell seam 执行，并公开命令、参数及审批策略。","hash":"11bf1e5c02b89887cec3bb8b"},{"id":"HT-EXEC-001","title":"直接创建宿主子进程","severity":"low","confidence":"medium","layer":"static","path":"src/cli/commands/service.ts","pathClass":"source","line":1,"evidence":"node:child_process","remediation":"通过 DSH 的受控 subprocess/shell seam 执行，并公开命令、参数及审批策略。","hash":"0d3bc6cd2e513bd1a4a7e925"},{"id":"HT-EXEC-001","title":"直接创建宿主子进程","severity":"low","confidence":"medium","layer":"static","path":"src/cli/commands/setup.ts","pathClass":"source","line":1,"evidence":"node:child_process","remediation":"通过 DSH 的受控 subprocess/shell seam 执行，并公开命令、参数及审批策略。","hash":"a8d9f3c03c7b2d19c312911c"},{"id":"HT-EXEC-001","title":"直接创建宿主子进程","severity":"low","confidence":"medium","layer":"static","path":"src/cli/commands/supervise.ts","pathClass":"source","line":1,"evidence":"node:child_process","remediation":"通过 DSH 的受控 subprocess/shell seam 执行，并公开命令、参数及审批策略。","hash":"3c5266f702412511c5504912"},{"id":"HT-EXEC-001","title":"直接创建宿主子进程","severity":"low","confidence":"medium","layer":"static","path":"src/guardian/process.ts","pathClass":"source","line":1,"evidence":"node:child_process","remediation":"通过 DSH 的受控 subprocess/shell seam 执行，并公开命令、参数及审批策略。","hash":"a80b50b69ed8ba1eeb8930cd"},{"id":"HT-EXEC-001","title":"直接创建宿主子进程","severity":"low","confidence":"medium","layer":"static","path":"src/guardian/safe-profile.ts","pathClass":"source","line":153,"evidence":"node:child_process","remediation":"通过 DSH 的受控 subprocess/shell seam 执行，并公开命令、参数及审批策略。","hash":"f5d4eac4cd293acc40be4c84"},{"id":"HT-EXEC-001","title":"直接创建宿主子进程","severity":"low","confidence":"medium","layer":"static","path":"src/service/command.ts","pathClass":"source","line":1,"evidence":"node:child_process","remediation":"通过 DSH 的受控 subprocess/shell seam 执行，并公开命令、参数及审批策略。","hash":"56afbdd7e5d2d55c543e19b1"},{"id":"HT-EXEC-001","title":"直接创建宿主子进程","severity":"low","confidence":"medium","layer":"static","path":"src/service/portable.ts","pathClass":"source","line":1,"evidence":"node:child_process","remediation":"通过 DSH 的受控 subprocess/shell seam 执行，并公开命令、参数及审批策略。","hash":"6d0838a23d2bcda30894369b"},{"id":"HT-EXEC-001","title":"直接创建宿主子进程","severity":"low","confidence":"medium","layer":"static","path":"src/session/archive.ts","pathClass":"source","line":1,"evidence":"node:child_process","remediation":"通过 DSH 的受控 subprocess/shell seam 执行，并公开命令、参数及审批策略。","hash":"584229cd7bc4b3b17604575b"},{"id":"HT-EXEC-001","title":"直接创建宿主子进程","severity":"low","confidence":"medium","layer":"static","path":"src/workspace/git-worktree.ts","pathClass":"source","line":1,"evidence":"node:child_process","remediation":"通过 DSH 的受控 subprocess/shell seam 执行，并公开命令、参数及审批策略。","hash":"aabaa61e7ce1678105a5092d"},{"id":"HT-EXEC-001","title":"直接创建宿主子进程","severity":"low","confidence":"low","layer":"static","path":"test/cli/commands/setup.test.ts","pathClass":"test-example-docs","line":1,"evidence":"node:child_process","remediation":"通过 DSH 的受控 subprocess/shell seam 执行，并公开命令、参数及审批策略。","note":"位于测试、示例或文档目录","hash":"fc69cc8e59e020881ef8191c"},{"id":"HT-EXEC-001","title":"直接创建宿主子进程","severity":"low","confidence":"low","layer":"static","path":"test/cli/commands/setup.test.ts","pathClass":"test-example-docs","line":9,"evidence":"node:child_process","remediation":"通过 DSH 的受控 subprocess/shell seam 执行，并公开命令、参数及审批策略。","note":"位于测试、示例或文档目录","hash":"fc69cc8e59e020881ef8191c"},{"id":"HT-EXEC-001","title":"直接创建宿主子进程","severity":"low","confidence":"low","layer":"static","path":"test/e2e/dsh-runtimes.e2e.test.ts","pathClass":"test-example-docs","line":3,"evidence":"node:child_process","remediation":"通过 DSH 的受控 subprocess/shell seam 执行，并公开命令、参数及审批策略。","note":"位于测试、示例或文档目录","hash":"f723affd2e9fd092e8efd1be"},{"id":"HT-DATA-001","title":"同一模块同时接触凭据与网络","severity":"medium","confidence":"medium","layer":"static","path":"src/notify/approval-answerer.ts","pathClass":"source","line":85,"evidence":"credential access at line 85 + outbound network at line 90","remediation":"拆分能力边界，限定目的域名，并提供不会发送凭据值的可验证证明。","hash":"71b68d8e2e5522c261f411fe","review":{"verdict":"functional","reason":"token 为 DSH_LARK_NOTIFY_TOKEN，是插件自身通知服务器的内部鉴权令牌，随 fetch 发往同一 bridge 配置的 DSH_LARK_APPROVAL_URL，用于实现飞书审批回传，属于安全网守护功能的必要实现。","model":"sonnet@p2","reviewedAt":"2026-08-21T11:20:46.334Z"}},{"id":"HT-DATA-001","title":"同一模块同时接触凭据与网络","severity":"medium","confidence":"medium","layer":"static","path":"src/notify/ask-tool.ts","pathClass":"source","line":103,"evidence":"credential access at line 103 + outbound network at line 116","remediation":"拆分能力边界，限定目的域名，并提供不会发送凭据值的可验证证明。","hash":"2fd371a78830e34ebb585277","review":{"verdict":"functional","reason":"同样使用 config.token/DSH_LARK_NOTIFY_TOKEN 作为内部令牌发往自身 DSH_LARK_ASK_URL，用于把 lark_ask_user 提问路由回飞书 bridge，是对话内交互功能的必需部分，非用户凭据外泄。","model":"sonnet@p2","reviewedAt":"2026-08-21T11:20:46.334Z"}},{"id":"HT-DATA-001","title":"同一模块同时接触凭据与网络","severity":"medium","confidence":"medium","layer":"static","path":"src/notify/file-tool.ts","pathClass":"source","line":48,"evidence":"credential access at line 48 + outbound network at line 54","remediation":"拆分能力边界，限定目的域名，并提供不会发送凭据值的可验证证明。","hash":"a8294ea3df11aef89cb31d3f","review":{"verdict":"functional","reason":"lark_send_file 用同一内部 token 调用自身 DSH_LARK_FILE_URL 上传文件到飞书会话，是文件回传能力的核心实现，端点与令牌均来自插件自身配置而非第三方。","model":"sonnet@p2","reviewedAt":"2026-08-21T11:20:46.334Z"}}],"counts":{"critical":0,"high":0,"medium":5,"low":20},"rawCounts":{"critical":0,"high":1,"medium":6,"low":23},"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":358,"bytesScanned":3062559,"truncated":false,"lockfiles":["pnpm-lock.yaml"],"pathClasses":{"test-example-docs":146,"markdown":50,"source":157,"cordis":1,"data":2,"manifest":1,"yaml":1}},"limitations":["此结果为源码静态检测，不等同于无漏洞证明。","尚未比对 npm 发布包与源码的一致性，也未执行隔离运行和人工复核。","危险能力可能是插件功能所需，需结合用途与证据人工判断。"],"limitationKeys":["static-analysis-only","no-artifact-runtime-human-review","capability-needs-context"],"review":{"model":"sonnet","reviewedAt":"2026-08-22T08:21:30.036Z","summary":null,"intentMatch":null,"findingsReviewed":4,"findingsCandidates":4,"fromCache":4,"usage":null}},"timeline":[{"scannedAt":"2026-08-22T08:21:30.036Z","commit":"2812c8ed93be1c1a676f1d59a25952fdca915af9","policyVersion":"HT-DSH-0.2.2","verdict":"caution","status":"static-complete"},{"scannedAt":"2026-08-21T11:20:46.334Z","commit":"8bdcb9a6d40db8a46b633a8398a1306205393e03","policyVersion":"HT-DSH-0.2.1","verdict":"caution","status":"static-complete"},{"scannedAt":"2026-08-21T10:48:40.190Z","commit":"8bdcb9a6d40db8a46b633a8398a1306205393e03","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":"2812c8ed93be1c1a676f1d59a25952fdca915af9","policyVersion":"HT-DSH-0.2.2","at":"2026-08-22T08:21:30.036Z"},{"kind":"policy-change","from":"HT-DSH-0.2.0","to":"HT-DSH-0.2.1","commit":"8bdcb9a6d40db8a46b633a8398a1306205393e03","policyVersion":"HT-DSH-0.2.1","at":"2026-08-21T11:20:46.334Z"},{"kind":"first-scan","from":null,"to":"caution","commit":"8bdcb9a6d40db8a46b633a8398a1306205393e03","policyVersion":"HT-DSH-0.2.0","at":"2026-08-21T10:48:40.190Z"}]}