{"_id":"@alain-prot0s5/dsh-screenshot","_rev":"6-a3a3bd84c0dcc83316e3c0421039e4ca","name":"@alain-prot0s5/dsh-screenshot","dist-tags":{"latest":"1.0.4"},"versions":{"0.1.0":{"name":"@alain-prot0s5/dsh-screenshot","version":"0.1.0","keywords":["dsh","dsh-plugin","deepseek-harness","cordis-plugin","screenshot","windows","hotkey","clipboard"],"license":"MIT","_id":"@alain-prot0s5/dsh-screenshot@0.1.0","maintainers":[{"name":"alain-prot0s5","email":"prot0s5shenzu@gmail.com"}],"homepage":"https://github.com/alain-prot0s5/dsh-screenshot#readme","bugs":{"url":"https://github.com/alain-prot0s5/dsh-screenshot/issues"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"inject":["@deepseek-ai/dsh-client-runtime","@deepseek-ai/dsh-client-ui-slots","@deepseek-ai/dsh-client-ui-conversation","@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-client-connection","@deepseek-ai/dsh-api-remotes"],"platform":"web"}},"dist":{"shasum":"5832be7e7a920c9fa646f9b50036c002848cba8e","tarball":"https://registry.npmjs.org/@alain-prot0s5/dsh-screenshot/-/dsh-screenshot-0.1.0.tgz","fileCount":7,"integrity":"sha512-X3xPBb2wDGoKs/Zb9V8tkMgyd5z8O6EaQzKH5z2ArtMGQirUXfU2G1z56UTqiwyUI6k1dP2IqP9dhVY05337Ew==","signatures":[{"sig":"MEYCIQDm5WNCoSVB+Dh2tKvQLEwYn2z+RNeFqF8GncsLtYQbRgIhAL9bGEjzDAmyGzs+txlWOn0fSUYD4GnJPOBkvSmmyfk+","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":44277},"main":"lib/index.js","type":"module","exports":{".":"./lib/index.js","./client":"./lib/client.js","./package.json":"./package.json"},"gitHead":"c3aaf184a41e77ae4017ec6f1b4a0c34ba147521","_npmUser":{"name":"alain-prot0s5","email":"prot0s5shenzu@gmail.com"},"repository":{"url":"git+https://github.com/alain-prot0s5/dsh-screenshot.git","type":"git"},"_npmVersion":"11.17.0","description":"Screenshot-to-input for DeepSeek Harness: composer camera button + global hotkey (Alt+A) + listener bound to the app lifecycle, configurable in settings. 截图自动粘贴到 DSH 输入框：相机按钮 + 全局快捷键 + 生命周期绑定 + 设置页配置。","directories":{},"_nodeVersion":"24.19.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"react":"^18.2.0","@deepseek-ai/cordis":"^4.0.1","@deepseek-ai/schemastery":"^3.18.1","@deepseek-ai/dsh-settings":"^0.1.0-rc.7","@deepseek-ai/dsh-api-remotes":"^0.1.0-rc.7","@deepseek-ai/dsh-client-runtime":"^0.1.0-rc.7","@deepseek-ai/dsh-client-ui-slots":"^0.1.0-rc.7","@deepseek-ai/dsh-client-connection":"^0.1.0-rc.7","@deepseek-ai/dsh-client-ui-settings":"^0.1.0-rc.7","@deepseek-ai/dsh-client-ui-conversation":"^0.1.0-rc.7"},"_npmOperationalInternal":{"tmp":"tmp/dsh-screenshot_0.1.0_1787340245195_0.03033675967236027","host":"s3://npm-registry-packages-npm-production"}},"1.0.0":{"name":"@alain-prot0s5/dsh-screenshot","version":"1.0.0","keywords":["dsh","dsh-plugin","deepseek-harness","cordis-plugin","screenshot","windows","hotkey","clipboard"],"license":"MIT","_id":"@alain-prot0s5/dsh-screenshot@1.0.0","maintainers":[{"name":"alain-prot0s5","email":"prot0s5shenzu@gmail.com"}],"homepage":"https://github.com/alain-prot0s5/dsh-screenshot#readme","bugs":{"url":"https://github.com/alain-prot0s5/dsh-screenshot/issues"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"inject":["@deepseek-ai/dsh-client-runtime","@deepseek-ai/dsh-client-ui-slots","@deepseek-ai/dsh-client-ui-conversation","@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-client-connection","@deepseek-ai/dsh-api-remotes"],"platform":"web"}},"dist":{"shasum":"ee9c563b2e3df6d6fca3b0d7d1ee07ee536636f8","tarball":"https://registry.npmjs.org/@alain-prot0s5/dsh-screenshot/-/dsh-screenshot-1.0.0.tgz","fileCount":7,"integrity":"sha512-NKBhfo9jNFoSBFgJjXrH3wqrxYPz785+0wdBHQEq8u6erQGvRI4ACEpuACZwujAMyfT/Fer+p0CA2KUy4ETivw==","signatures":[{"sig":"MEQCIAMYCS3EKCHKg5ftmWtesxI1cYSSL1dIuIV4JoovX9SNAiA6zEqajTAprcjctOm+V9PCCT09lvHnyuQb2g2jfB2kGA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":44277},"main":"lib/index.js","type":"module","exports":{".":"./lib/index.js","./client":"./lib/client.js","./package.json":"./package.json"},"gitHead":"174d11200852f3636f5eade02d788fe6ba8598d9","_npmUser":{"name":"alain-prot0s5","email":"prot0s5shenzu@gmail.com"},"repository":{"url":"git+https://github.com/alain-prot0s5/dsh-screenshot.git","type":"git"},"_npmVersion":"11.17.0","description":"Screenshot-to-input for DeepSeek Harness: composer camera button + global hotkey (Alt+A) + listener bound to the app lifecycle, configurable in settings. 截图自动粘贴到 DSH 输入框：相机按钮 + 全局快捷键 + 生命周期绑定 + 设置页配置。","directories":{},"_nodeVersion":"24.19.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"react":"^18.2.0","@deepseek-ai/cordis":"^4.0.1","@deepseek-ai/schemastery":"^3.18.1","@deepseek-ai/dsh-settings":"^0.1.0-rc.7","@deepseek-ai/dsh-api-remotes":"^0.1.0-rc.7","@deepseek-ai/dsh-client-runtime":"^0.1.0-rc.7","@deepseek-ai/dsh-client-ui-slots":"^0.1.0-rc.7","@deepseek-ai/dsh-client-connection":"^0.1.0-rc.7","@deepseek-ai/dsh-client-ui-settings":"^0.1.0-rc.7","@deepseek-ai/dsh-client-ui-conversation":"^0.1.0-rc.7"},"_npmOperationalInternal":{"tmp":"tmp/dsh-screenshot_1.0.0_1787341869349_0.40899985792210614","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@alain-prot0s5/dsh-screenshot","version":"1.0.1","keywords":["dsh","dsh-plugin","deepseek-harness","cordis-plugin","screenshot","windows","hotkey","clipboard"],"author":{"name":"Alain-Prot0s5","email":"prot0s5shenzu@gmail.com"},"license":"MIT","_id":"@alain-prot0s5/dsh-screenshot@1.0.1","maintainers":[{"name":"alain-prot0s5","email":"prot0s5shenzu@gmail.com"}],"homepage":"https://github.com/alain-prot0s5/dsh-screenshot#readme","bugs":{"url":"https://github.com/alain-prot0s5/dsh-screenshot/issues"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"inject":["@deepseek-ai/dsh-client-runtime","@deepseek-ai/dsh-client-ui-slots","@deepseek-ai/dsh-client-ui-conversation","@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-client-connection","@deepseek-ai/dsh-api-remotes"],"platform":"web"}},"dist":{"shasum":"8d00f87d5d807025db1781406ea1857ee137ddf9","tarball":"https://registry.npmjs.org/@alain-prot0s5/dsh-screenshot/-/dsh-screenshot-1.0.1.tgz","fileCount":7,"integrity":"sha512-iHjplJbOKG8O2JFi+jOYYpRbmEvXFqExERvj9AerQklDnKH7ux7uLOb8j772CQ/Jpc0/EP8QkuQ9EZf3wFibhw==","signatures":[{"sig":"MEYCIQDe0IHI8Q/1kh84/76FXWHqecYInRE+RXGure3jXD+fTwIhAPrFmJ2NOgn1NBYPjqDCfYrniYTUR2H7bJ84uqF2Lz17","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":47013},"main":"lib/index.js","type":"module","exports":{".":"./lib/index.js","./client":"./lib/client.js","./package.json":"./package.json"},"gitHead":"7d66f01a77f7837b3efc95d1e5a895d3621d52e5","_npmUser":{"name":"alain-prot0s5","email":"prot0s5shenzu@gmail.com"},"repository":{"url":"git+https://github.com/alain-prot0s5/dsh-screenshot.git","type":"git"},"_npmVersion":"11.17.0","description":"Screenshot-to-input for DeepSeek Harness: composer camera button + global hotkey (Alt+A) + listener bound to the app lifecycle, configurable in settings. 截图自动粘贴到 DSH 输入框：相机按钮 + 全局快捷键 + 生命周期绑定 + 设置页配置。","directories":{},"_nodeVersion":"24.19.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"react":"^18.2.0","@deepseek-ai/cordis":"^4.0.1","@deepseek-ai/schemastery":"^3.18.1","@deepseek-ai/dsh-settings":"^0.1.0-rc.7","@deepseek-ai/dsh-api-remotes":"^0.1.0-rc.7","@deepseek-ai/dsh-client-runtime":"^0.1.0-rc.7","@deepseek-ai/dsh-client-ui-slots":"^0.1.0-rc.7","@deepseek-ai/dsh-client-connection":"^0.1.0-rc.7","@deepseek-ai/dsh-client-ui-settings":"^0.1.0-rc.7","@deepseek-ai/dsh-client-ui-conversation":"^0.1.0-rc.7"},"_npmOperationalInternal":{"tmp":"tmp/dsh-screenshot_1.0.1_1787346579988_0.4391883771499179","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@alain-prot0s5/dsh-screenshot","version":"1.0.2","keywords":["dsh","dsh-plugin","deepseek-harness","cordis-plugin","screenshot","windows","hotkey","clipboard"],"author":{"name":"Alain-Prot0s5","email":"prot0s5shenzu@gmail.com"},"license":"MIT","_id":"@alain-prot0s5/dsh-screenshot@1.0.2","maintainers":[{"name":"alain-prot0s5","email":"prot0s5shenzu@gmail.com"}],"homepage":"https://github.com/alain-prot0s5/dsh-screenshot#readme","bugs":{"url":"https://github.com/alain-prot0s5/dsh-screenshot/issues"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"inject":["@deepseek-ai/dsh-client-runtime","@deepseek-ai/dsh-client-ui-slots","@deepseek-ai/dsh-client-ui-conversation","@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-client-connection","@deepseek-ai/dsh-api-remotes"],"platform":"web"}},"dist":{"shasum":"e71d096e2152747d8f9a86ad46b55399d8e9d75e","tarball":"https://registry.npmjs.org/@alain-prot0s5/dsh-screenshot/-/dsh-screenshot-1.0.2.tgz","fileCount":8,"integrity":"sha512-WIu5wb0Bv6yXw6V09o6MVbsnYeEA9w3Fe1cFnF/gFKvYGacMQ7xfe5+iKQbLSnCuKeWB5sCKJHbvldBHib0itw==","signatures":[{"sig":"MEYCIQD1mABnRTx4N+G1ZZQabWYksWeKRfQeEoySyaKfVhoFewIhAJJvyuaH5Qx3HLRGYgA28pOTlvtYhdmZf3z4XKuNfLKN","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":52664},"main":"lib/index.js","type":"module","exports":{".":"./lib/index.js","./client":"./lib/client.js","./package.json":"./package.json"},"gitHead":"fdf54304d6a909c6788819b86c47310a9e933933","_npmUser":{"name":"alain-prot0s5","email":"prot0s5shenzu@gmail.com"},"repository":{"url":"git+https://github.com/alain-prot0s5/dsh-screenshot.git","type":"git"},"_npmVersion":"11.17.0","description":"Screenshot-to-input for DeepSeek Harness: composer camera button + global hotkey (Alt+A) + listener bound to the app lifecycle, configurable in settings. 截图自动粘贴到 DSH 输入框：相机按钮 + 全局快捷键 + 生命周期绑定 + 设置页配置。","directories":{},"_nodeVersion":"24.19.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"react":"^18.2.0","@deepseek-ai/cordis":"^4.0.1","@deepseek-ai/schemastery":"^3.18.1","@deepseek-ai/dsh-settings":"^0.1.0-rc.7","@deepseek-ai/dsh-api-remotes":"^0.1.0-rc.7","@deepseek-ai/dsh-client-runtime":"^0.1.0-rc.7","@deepseek-ai/dsh-client-ui-slots":"^0.1.0-rc.7","@deepseek-ai/dsh-client-connection":"^0.1.0-rc.7","@deepseek-ai/dsh-client-ui-settings":"^0.1.0-rc.7","@deepseek-ai/dsh-client-ui-conversation":"^0.1.0-rc.7"},"_npmOperationalInternal":{"tmp":"tmp/dsh-screenshot_1.0.2_1787348393128_0.6171605526925645","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"@alain-prot0s5/dsh-screenshot","version":"1.0.3","keywords":["dsh","dsh-plugin","deepseek-harness","cordis-plugin","screenshot","windows","hotkey","clipboard"],"author":{"name":"Alain-Prot0s5","email":"prot0s5shenzu@gmail.com"},"license":"MIT","_id":"@alain-prot0s5/dsh-screenshot@1.0.3","maintainers":[{"name":"alain-prot0s5","email":"prot0s5shenzu@gmail.com"}],"homepage":"https://github.com/alain-prot0s5/dsh-screenshot#readme","bugs":{"url":"https://github.com/alain-prot0s5/dsh-screenshot/issues"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"inject":["@deepseek-ai/dsh-client-runtime","@deepseek-ai/dsh-client-ui-slots","@deepseek-ai/dsh-client-ui-conversation","@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-client-connection","@deepseek-ai/dsh-api-remotes"],"platform":"web"}},"dist":{"shasum":"8d712dba85a6e9c695bdded6ff359d6b26e95db8","tarball":"https://registry.npmjs.org/@alain-prot0s5/dsh-screenshot/-/dsh-screenshot-1.0.3.tgz","fileCount":12,"integrity":"sha512-vu0vbsk+Nhg7qptCSTvOYQmjmvL/51umFL1/QxwfRxVCj1yUzllSLE94pv9NNpeaPYKAy0vPFrmM3DbaProNGQ==","signatures":[{"sig":"MEUCIAOJHVrn7/TRf/Gj6b12TWuEYleIfD46LdioQyjYVDGfAiEAjRTMdZdSaKMC8LLzrw9rrCcv4y4AZIYWlibFhlm6mbc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":219920},"main":"lib/index.js","type":"module","exports":{".":"./lib/index.js","./client":"./lib/client.js","./package.json":"./package.json"},"gitHead":"298785f3083ac2fdf2d9eea03a80a7c81879a449","_npmUser":{"name":"alain-prot0s5","email":"prot0s5shenzu@gmail.com"},"repository":{"url":"git+https://github.com/alain-prot0s5/dsh-screenshot.git","type":"git"},"_npmVersion":"11.17.0","description":"Screenshot-to-input for DeepSeek Harness: composer camera button + global hotkey (Alt+A) + listener bound to the app lifecycle, configurable in settings. 截图自动粘贴到 DSH 输入框：相机按钮 + 全局快捷键 + 生命周期绑定 + 设置页配置。","directories":{},"_nodeVersion":"24.19.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"react":"^18.2.0","@deepseek-ai/cordis":"^4.0.1","@deepseek-ai/schemastery":"^3.18.1","@deepseek-ai/dsh-settings":"^0.1.0-rc.7","@deepseek-ai/dsh-api-remotes":"^0.1.0-rc.7","@deepseek-ai/dsh-client-runtime":"^0.1.0-rc.7","@deepseek-ai/dsh-client-ui-slots":"^0.1.0-rc.7","@deepseek-ai/dsh-client-connection":"^0.1.0-rc.7","@deepseek-ai/dsh-client-ui-settings":"^0.1.0-rc.7","@deepseek-ai/dsh-client-ui-conversation":"^0.1.0-rc.7"},"_npmOperationalInternal":{"tmp":"tmp/dsh-screenshot_1.0.3_1787424310348_0.4683834192733889","host":"s3://npm-registry-packages-npm-production"}},"1.0.4":{"name":"@alain-prot0s5/dsh-screenshot","version":"1.0.4","description":"Screenshot-to-input for DeepSeek Harness: composer camera button + global hotkey (Alt+A) + listener bound to the app lifecycle, configurable in settings. 截图自动粘贴到 DSH 输入框：相机按钮 + 全局快捷键 + 生命周期绑定 + 设置页配置。","author":{"name":"Alain-Prot0s5","email":"prot0s5shenzu@gmail.com"},"type":"module","main":"lib/index.js","exports":{".":"./lib/index.js","./client":"./lib/client.js","./package.json":"./package.json"},"repository":{"type":"git","url":"git+https://github.com/Alain-Prot0s5/dsh-screenshot.git"},"homepage":"https://github.com/Alain-Prot0s5/dsh-screenshot#readme","bugs":{"url":"https://github.com/Alain-Prot0s5/dsh-screenshot/issues"},"keywords":["dsh","dsh-plugin","deepseek-harness","cordis-plugin","screenshot","windows","hotkey","clipboard"],"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"dsh":{"client":{"inject":["@deepseek-ai/dsh-client-runtime","@deepseek-ai/dsh-client-ui-slots","@deepseek-ai/dsh-client-ui-conversation","@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-client-connection","@deepseek-ai/dsh-api-remotes"],"platform":"web"},"bundle":{"patch":"./cordis.patch.yml"}},"peerDependencies":{"react":"^18.2.0","@deepseek-ai/cordis":"^4.0.1","@deepseek-ai/schemastery":"^3.18.1","@deepseek-ai/dsh-settings":"^0.1.0-rc.7","@deepseek-ai/dsh-client-runtime":"^0.1.0-rc.7","@deepseek-ai/dsh-client-ui-slots":"^0.1.0-rc.7","@deepseek-ai/dsh-client-ui-conversation":"^0.1.0-rc.7","@deepseek-ai/dsh-client-ui-settings":"^0.1.0-rc.7","@deepseek-ai/dsh-client-connection":"^0.1.0-rc.7","@deepseek-ai/dsh-api-remotes":"^0.1.0-rc.7"},"license":"MIT","gitHead":"043a5f4bc6eb340944fe2835a71cc32cddc85a89","_id":"@alain-prot0s5/dsh-screenshot@1.0.4","_nodeVersion":"24.19.0","_npmVersion":"11.17.0","dist":{"integrity":"sha512-hzunNKAAjBEvGlUjZ4BPksNn+0T5M21BDjEFupto4TZ3J6n/PsUOg2S3f+a7OH94oMd9sFG7lddazKT9Vpqeng==","shasum":"bc8dbb392cb02d49e2a61eb8aa0d98a9dd22038b","tarball":"https://registry.npmjs.org/@alain-prot0s5/dsh-screenshot/-/dsh-screenshot-1.0.4.tgz","fileCount":12,"unpackedSize":222816,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@alain-prot0s5%2fdsh-screenshot@1.0.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIBG5JJhq5EvslOEcVm6Bgy35+xZrE6EaNDVxJYQw19DrAiEAszalSBbbc4GsFST6rdqaAbmnls8Ny3iOAdsbayqQA7o="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:199fa8b7-3b23-430c-aff3-4dcac395580d"}},"directories":{},"maintainers":[{"name":"alain-prot0s5","email":"prot0s5shenzu@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/dsh-screenshot_1.0.4_1787553411274_0.2506529819805794"},"_hasShrinkwrap":false}},"time":{"created":"2026-08-21T19:24:05.027Z","modified":"2026-08-24T06:36:51.824Z","0.1.0":"2026-08-21T19:24:05.342Z","1.0.0":"2026-08-21T19:51:09.496Z","1.0.1":"2026-08-21T21:09:40.134Z","1.0.2":"2026-08-21T21:39:53.296Z","1.0.3":"2026-08-22T18:45:10.495Z","1.0.4":"2026-08-24T06:36:51.468Z"},"bugs":{"url":"https://github.com/Alain-Prot0s5/dsh-screenshot/issues"},"author":{"name":"Alain-Prot0s5","email":"prot0s5shenzu@gmail.com"},"license":"MIT","homepage":"https://github.com/Alain-Prot0s5/dsh-screenshot#readme","keywords":["dsh","dsh-plugin","deepseek-harness","cordis-plugin","screenshot","windows","hotkey","clipboard"],"repository":{"type":"git","url":"git+https://github.com/Alain-Prot0s5/dsh-screenshot.git"},"description":"Screenshot-to-input for DeepSeek Harness: composer camera button + global hotkey (Alt+A) + listener bound to the app lifecycle, configurable in settings. 截图自动粘贴到 DSH 输入框：相机按钮 + 全局快捷键 + 生命周期绑定 + 设置页配置。","maintainers":[{"name":"alain-prot0s5","email":"prot0s5shenzu@gmail.com"}],"readme":"# dsh-screenshot\n\n**Screenshot-to-input for DeepSeek Harness — 截图自动粘贴到 DSH 输入框**\n\nOne-click screenshot straight into the Harness composer: a camera button next to the input box, a global hotkey (default **Alt+A**), and a listener that follows the DSH Desktop app lifecycle. Everything is configurable from the plugin settings page.\n\n一键截图并自动粘贴到 DeepSeek Harness 输入框：输入框旁的相机按钮、全局快捷键（默认 **Alt+A**）、监听器随 DSH Desktop 生命周期启停。快捷键、自动粘贴、后台跳转均可从设置页配置。\n\n> **⚠️ 项目性质 / Project nature**：这是一个**纯 AI 生成的、面向新手**的项目（AI-generated, beginner-level code），未经专业安全审计，生产环境使用前请自行审阅代码。欢迎提 Issue / PR 改进。\n>\n> **🖥️ 平台 / Platform**：**仅支持 Windows 10（1809+）与 Windows 11**——依赖系统自带截图工具（`ms-screenclip:`）与 Win32 API。macOS / Linux / Windows 7/8 不支持。\n>\n> **🧭 建议搭配 / Recommended companion**：**[dsh-vision-router](https://github.com/ysr666/dsh-vision-router)** —— 截图自动粘进输入框后，由 vision-router 负责图片的视觉路由，实现「截图 → 提问 → 图片理解」的完整流程。\n\n---\n\n## 适用范围与 DSH Desktop 绑定（重要） / Scope & DSH Desktop binding (important)\n\n**本插件是 DSH Desktop 专用**，与桌面版存在三层绑定：\n\n1. **宿主生命周期 / Host lifecycle**：`lib/index.js`（node ESM 宿主插件）运行在 DSH Desktop 的主机进程内，随应用启动拉起监听器、应用关闭时停止。**浏览器版 Web 端没有这个宿主进程**，监听器无法自动启停。\n2. **看门狗 / Watchdog**：监听器始终以 `-ExitWhenDshGone` 启动，监视 `DSH Desktop` 进程——检测不到该进程约 8 秒后自动退出。纯 Web 环境下监听器无法常驻。\n3. **前台判断 / Foreground detection**：热键「是否自动粘贴」取决于 DSH Desktop 窗口是否在前台（`Get-Process 'DSH Desktop'` + `GetForegroundWindow`）。Web 端没有该窗口，行为等同「DSH 不在前台」——只截图、不自动粘贴。\n\n**Web 端（浏览器版）能用吗？ / What about the Web version?**\n\n- 部分可用、**未实测**、体验不完整。\n- 相机按钮（`conversation.input.right` 槽位）与设置卡片属于客户端 UI，理论上能注入 Web 版输入框，点击走本机 `http://127.0.0.1:17890/trigger` 触发服务；\n- 但触发服务需要监听器在跑——Web 版可改用**独立版监听器**（`dsh-screenshot-script/`，默认常驻、可开机自启、不带生命周期绑定）来提供；\n- 受上述第 3 条限制，Web 版下自动粘贴判断不生效，截图只会留在剪贴板。\n\n**结论 / Conclusion：以 DSH Desktop 使用为主；Web 端场景建议用独立版监听器，并接受行为受限。**\n\n## Features / 功能\n\n- 🖼️ **Camera button** in the composer tool row — click, snip, auto-paste\n  输入框右侧**相机按钮**：点击 → 系统截图 → 拉框完成自动粘贴\n- ⌨️ **Global hotkey** (default `Alt+A`, modifier/key configurable)\n  全局**快捷键**（默认 `Alt+A`，修饰键与按键可配置）\n- 🔄 **Listener bound to the app lifecycle** — starts with DSH Desktop, stops when it closes (no OS autostart needed)\n  监听器随 **DSH Desktop 生命周期**启停（无需开机自启）\n- ⚙️ **Settings page** — hotkey / auto-paste toggle / background-switch toggle, applied live\n  **设置页**：快捷键 / 是否自动粘贴 / 后台是否跳转粘贴，即时生效\n- 🧹 **Resilient** — non-blocking clipboard wait, single-flight debounce, cancel detection, stale SnippingTool cleanup, watchdog fallback\n  可靠性：非阻塞等待、单飞防抖、取消检测、SnippingTool 卡死自愈、看门狗兜底\n\n## Screenshots / 截图\n\n| Screenshots / 截图 | Description / 说明 |\n|---|---|\n| ![Screenshot 1 - composer](assets/screenshot-1.png) | DSH Desktop composer with the camera button in the tool row / 输入框工具行里的相机按钮 |\n| ![Screenshot 2 - snipping toolbar](assets/screenshot-2.png) | System snipping tool (camera highlighted) / 系统截图工具（相机高亮） |\n| ![Screenshot 3 - copied to clipboard](assets/screenshot-3.png) | Screenshot copied to clipboard & saved automatically / 截图已复制到剪贴板并自动保存 |\n| ![Screenshot 4 - plugin settings](assets/screenshot-4.png) | `dsh-screenshot` plugin settings card / 插件设置卡片 |\n\n## Requirements / 使用环境\n\n- **Windows 10（1809+）/ Windows 11** — uses the built-in system Snipping Tool\n  (`ms-screenclip:`) and Win32 APIs（hotkey registration, clipboard, foreground\n  switching）; PowerShell 5.1 ships with both OSes.\n  **Windows 10（1809+）与 Windows 11 均支持**：依赖系统自带截图工具\n  （`ms-screenclip:`）与 Win32 API（热键注册、剪贴板、前台切换），\n  PowerShell 5.1 两者均自带，无需额外安装。\n- **DeepSeek Harness Desktop**（`desktop` profile）— requires the client/host\n  plugin mechanism（详见上方「DSH Desktop 绑定」）。\n  **DSH Desktop 应用**（`desktop` profile）：需要客户端/宿主插件机制（绑定关系见上）。\n- **Not supported / 不支持**：macOS / Linux（PowerShell + Win32 + 系统截图工具\n  均为 Windows 专属）；Windows 7/8（无 `ms-screenclip:`，且未自带 PowerShell 5.1）。\n\n## Install / 安装\n\n**From GitHub / 从 GitHub 安装**（需机器上有 dsh CLI）：\n\n```powershell\ndsh plugin --profile desktop add github:alain-prot0s5/dsh-screenshot\n# or / 或\ndsh plugin add https://github.com/alain-prot0s5/dsh-screenshot\n```\n\n**From npm / 从 npm 安装**（DSH Desktop 市场受管安装，走标准插件验证）：\n\n```powershell\ndsh plugin add @alain-prot0s5/dsh-screenshot\n```\n\n**Manual / 手动安装**（Desktop app 无独立 CLI 时）：\n\n```powershell\n# 1) copy the package into the profile's node_modules under its FULL package name\n#    (DSH Desktop >= 2.0.2 enforces package identity: the folder, the manifest\n#    `name`, the bundle entry and the client id must all be the scoped name)\nNew-Item -ItemType Directory -Force \"$env:USERPROFILE\\.dsh\\profiles\\desktop\\node_modules\\@alain-prot0s5\"\nCopy-Item -Path '<this folder>' -Destination \"$env:USERPROFILE\\.dsh\\profiles\\desktop\\node_modules\\@alain-prot0s5\\dsh-screenshot\" -Recurse\n# 2) add \"@alain-prot0s5/dsh-screenshot\" to dsh.profile.bundles in the profile\n#    package.json (UTF-8 WITHOUT BOM!)\n# 3) restart DSH Desktop\n```\n\n> **DSH Desktop >= 2.0.2 compatibility / 兼容性说明**：the loader requires the\n> profile bundle entry, the plugin manifest `name`, the `cordis.patch.yml` row\n> `name` and the client bundle id to all be the exact npm package name\n> `@alain-prot0s5/dsh-screenshot` (no bare short names). This package complies.\n> DSH Desktop 2.0.2+ 要求 profile 的 bundles 条目、插件 package.json 的 `name`、\n> `cordis.patch.yml` 行 `name`、客户端 bundle id 全部等于完整包名\n> `@alain-prot0s5/dsh-screenshot`（不能用短名）。本包已按此规范发布。\n\nRestart and you should see the camera button next to the composer; the listener log is `dsh-screenshot.log` inside the plugin folder (look for `模式：热键=… 自动粘贴=… 后台跳转粘贴=…`).\n重启后输入框旁出现相机按钮；监听器日志在插件目录 `dsh-screenshot.log`（启动行含\"模式：热键=… 自动粘贴=… 后台跳转粘贴=…\"）。\n\n## Settings / 设置项（设置 → 插件 → 可配置插件 → dsh-screenshot）\n\n| Setting / 设置 | Default / 默认 | Description / 说明 |\n|---|---|---|\n| Global hotkey / 全局快捷键 | Alt+A | Modifier + key (A–Z); listener restarts automatically / 修饰键 + 键（A–Z），修改后自动生效 |\n| Auto-paste to input / 自动粘贴到输入框 | On / 开 | Off = snip only, image stays in clipboard / 关 = 只截图，图片留在剪贴板 |\n| Switch to foreground & paste when DSH is in background / 后台跳转粘贴 | Off / 关 | On = always bring DSH to front and paste / 开 = 后台触发时也切到前台并粘贴 |\n\n## How it works / 原理\n\n- **Client / 客户端**：camera button（keeps composer focus via `onMouseDown preventDefault`）+ settings card（`settingsScope`）\n- **Host / 宿主**：starts/stops the bundled `dsh-screenshot.ps1 -ExitWhenDshGone`；registers the `dsh-screenshot` settings namespace，restarts the listener on change\n- **Listener / 监听器**：`ms-screenclip:` opens the system snip（no synthetic keystrokes）→ waits for the clipboard（non-blocking + single-flight + cancel detection）→ `Ctrl+V`；auto-exits ~8 s after the DSH process disappears（watchdog）\n\n## Files / 文件\n\n- `lib/client.js` — camera button + settings card（ModuleLoader format，no build step）\n- `lib/index.js` — host：listener lifecycle + settings namespace\n- `dsh-screenshot.ps1` — bundled listener script（standalone copy kept in sync with `dsh-screenshot-script/`）\n- `cordis.patch.yml` / `package.json` — bundle manifest（`dsh.bundle.patch` + `dsh.client`）\n\n## License\n\n[MIT](LICENSE)\n","readmeFilename":"README.md"}