{"schemaVersion":2,"dataVersion":"20260822T105549Z-0a0b366f","generatedAt":"2026-08-22T10:55:49.138Z","source":{"id":"maple-pwn-paperlab","slug":"maple-pwn-paperlab","rank":703,"url":"https://github.com/maple-pwn/paperlab","name":"maple-pwn/paperlab","category":"docs","description":{"zh":"Overleaf 式 LaTeX 论文工作台：在渲染后的 PDF 上选中任意文字批注，由 dsh agent 改写源文件、编译验证并提交 git 修订。","en":"Overleaf-style LaTeX paper workbench: annotate any text in the rendered PDF and let a dsh agent revise the sources with compile checks and git history."},"stars":3,"starsCheckedAt":"2026-08-21","repository":{"owner":"maple-pwn","repo":"paperlab","requestedRef":null,"subpath":""},"npm":"dsh-paperlab","downloads":511,"installMode":"npm","upstreamInstall":"dsh plugin --profile web add dsh-paperlab","tarball":null,"added":"2026-08-16","page":"https://awesome-dsh-plugin.com/p/maple-pwn/paperlab/","screenshots":["https://raw.githubusercontent.com/maple-pwn/paperlab/main/docs/assets/screenshot.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":"maple-pwn-paperlab","slug":"maple-pwn-paperlab","policyVersion":"HT-DSH-0.2.2","scannedAt":"2026-08-22T08:28:07.661Z","scanStatus":"static-complete","verdict":"caution","score":89,"commit":"2792dc632634835f81b2d1cac27daa2a28bf4491","commitDate":"2026-08-16T02:28:26+08:00","artifactDigest":"sha256:ef41bb808a5204bca3dd5b96351b2b76275e443cce9355821e47009b91bc28ee","downloadUrl":"https://github.com/maple-pwn/paperlab/archive/2792dc632634835f81b2d1cac27daa2a28bf4491.tar.gz","installMode":"npm","installCommand":"dsh plugin --profile web add dsh-paperlab","manifest":{"found":true,"path":"package.json","parseError":null,"packageName":"dsh-paperlab","packageVersion":"0.1.2","bundle":{"patch":"./cordis.patch.yml"},"client":null,"lifecycleScripts":{},"peerDependencies":["@deepseek-ai/cordis","@deepseek-ai/dsh-agent","@deepseek-ai/dsh-llm","@deepseek-ai/dsh-session","@deepseek-ai/dsh-system-prompt","@deepseek-ai/dsh-tools"]},"identity":{"status":"found","installMode":"npm","upstreamNpm":"dsh-paperlab","manifestName":"dsh-paperlab","nameMatch":true,"npm":{"name":"dsh-paperlab","latestVersion":"0.1.2","publishedAt":"2026-08-15T18:29:35.091Z","createdAt":"2026-08-15T18:08:52.794Z","versionCount":3,"maintainers":1,"repository":"git+https://github.com/maple-pwn/paperlab.git","hasInstallScripts":false,"deprecated":false},"repositoryMatch":"match","provenance":"none","tarballHost":null,"versionMatch":"match"},"permissions":{"bundlePatch":"cordis.patch.yml","inserts":[{"id":"paperlab","name":"dsh-paperlab","path":"cordis.patch.yml","disabled":false}],"overrides":[],"jsExpressions":0,"clientPlatform":null,"parseErrors":[]},"capabilities":["agent-control","browser-ui","credentials","environment","filesystem","host-bundle","network","session","subprocess"],"outboundHosts":[],"findings":[{"id":"HT-EXEC-001","title":"直接创建宿主子进程","severity":"low","confidence":"medium","layer":"static","path":"lib/index.js","pathClass":"source","line":801,"evidence":"child_process","remediation":"通过 DSH 的受控 subprocess/shell seam 执行，并公开命令、参数及审批策略。","hash":"347addbba75485af13ffa571"},{"id":"HT-RUNTIME-001","title":"动态代码执行","severity":"medium","confidence":"medium","layer":"static","path":"lib/index.js","pathClass":"source","line":233,"evidence":"new Function(","remediation":"使用静态模块和受约束的配置解析器，避免在宿主权限下执行动态字符串。","hash":"3e8500af280669a276314770","review":{"verdict":"functional","reason":"该 new Function 位于打包进来的第三方 schemastery 库（vendor/schemastery）中，用于反序列化 schema.callback 字符串为函数，是校验库固有机制，非插件为 @file 功能自写逻辑，且有 typeof 检查与 try/catch 包裹。","model":"sonnet@p2","reviewedAt":"2026-08-21T11:17:59.472Z"}},{"id":"HT-EXEC-001","title":"直接创建宿主子进程","severity":"low","confidence":"medium","layer":"static","path":"plugin/src/backend.ts","pathClass":"source","line":2,"evidence":"node:child_process","remediation":"通过 DSH 的受控 subprocess/shell seam 执行，并公开命令、参数及审批策略。","hash":"6363dab7aae86c30a78b5a6e"},{"id":"HT-EXEC-001","title":"直接创建宿主子进程","severity":"low","confidence":"low","layer":"static","path":"plugin/test/mock-driver.js","pathClass":"test-example-docs","line":2,"evidence":"execFileSync","remediation":"通过 DSH 的受控 subprocess/shell seam 执行，并公开命令、参数及审批策略。","note":"位于测试、示例或文档目录","hash":"d4bab5f236266c5654f657e1"},{"id":"HT-EXEC-001","title":"直接创建宿主子进程","severity":"low","confidence":"low","layer":"static","path":"plugin/test/mock-driver.js","pathClass":"test-example-docs","line":2,"evidence":"node:child_process","remediation":"通过 DSH 的受控 subprocess/shell seam 执行，并公开命令、参数及审批策略。","note":"位于测试、示例或文档目录","hash":"b5df17d2b211c590bfb2f808"},{"id":"HT-EXEC-001","title":"直接创建宿主子进程","severity":"low","confidence":"medium","layer":"static","path":"server/app/compile_service.py","pathClass":"source","line":50,"evidence":"subprocess.run","remediation":"通过 DSH 的受控 subprocess/shell seam 执行，并公开命令、参数及审批策略。","hash":"60154ce7120b6d7090b7d5a2"},{"id":"HT-EXEC-001","title":"直接创建宿主子进程","severity":"low","confidence":"medium","layer":"static","path":"server/app/project_store.py","pathClass":"source","line":48,"evidence":"subprocess.run","remediation":"通过 DSH 的受控 subprocess/shell seam 执行，并公开命令、参数及审批策略。","hash":"c85236cca161e9a60e710420"},{"id":"HT-CLIENT-001","title":"浏览器端使用危险 HTML 注入点","severity":"medium","confidence":"medium","layer":"static","path":"web/src/components/PdfPreview.tsx","pathClass":"source","line":66,"evidence":".innerHTML =","remediation":"使用安全 DOM API，并在不可避免时对不可信内容进行严格清洗。","hash":"02b3e7084079ac1480d195a2"},{"id":"HT-CLIENT-001","title":"浏览器端使用危险 HTML 注入点","severity":"medium","confidence":"medium","layer":"static","path":"web/src/components/PreviewPane.tsx","pathClass":"source","line":45,"evidence":"dangerouslySetInnerHTML","remediation":"使用安全 DOM API，并在不可避免时对不可信内容进行严格清洗。","hash":"5a056b3886b7eb96cc349452"}],"counts":{"critical":0,"high":0,"medium":3,"low":4},"rawCounts":{"critical":0,"high":0,"medium":3,"low":6},"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":53,"bytesScanned":434714,"truncated":false,"lockfiles":["pnpm-lock.yaml"],"pathClasses":{"markdown":5,"cordis":1,"source":32,"manifest":3,"yaml":5,"test-example-docs":2,"data":2,"script":2,"html":1}},"limitations":["此结果为源码静态检测，不等同于无漏洞证明。","尚未比对 npm 发布包与源码的一致性，也未执行隔离运行和人工复核。","危险能力可能是插件功能所需，需结合用途与证据人工判断。"],"limitationKeys":["static-analysis-only","no-artifact-runtime-human-review","capability-needs-context"],"review":{"model":"sonnet","reviewedAt":"2026-08-22T08:28:07.661Z","summary":null,"intentMatch":null,"findingsReviewed":1,"findingsCandidates":1,"fromCache":1,"usage":null}},"timeline":[{"scannedAt":"2026-08-22T08:28:07.661Z","commit":"2792dc632634835f81b2d1cac27daa2a28bf4491","policyVersion":"HT-DSH-0.2.2","verdict":"caution","status":"static-complete"},{"scannedAt":"2026-08-21T11:29:55.072Z","commit":"2792dc632634835f81b2d1cac27daa2a28bf4491","policyVersion":"HT-DSH-0.2.1","verdict":"caution","status":"static-complete"},{"scannedAt":"2026-08-21T10:58:40.253Z","commit":"2792dc632634835f81b2d1cac27daa2a28bf4491","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":"2792dc632634835f81b2d1cac27daa2a28bf4491","policyVersion":"HT-DSH-0.2.2","at":"2026-08-22T08:28:07.661Z"},{"kind":"policy-change","from":"HT-DSH-0.2.0","to":"HT-DSH-0.2.1","commit":"2792dc632634835f81b2d1cac27daa2a28bf4491","policyVersion":"HT-DSH-0.2.1","at":"2026-08-21T11:29:55.072Z"},{"kind":"first-scan","from":null,"to":"caution","commit":"2792dc632634835f81b2d1cac27daa2a28bf4491","policyVersion":"HT-DSH-0.2.0","at":"2026-08-21T10:58:40.253Z"}]}