{"_id":"dsh-drop-caret","_rev":"10-ba1bed39b4ee8d175602a54720cc1da1","name":"dsh-drop-caret","dist-tags":{"latest":"0.2.3"},"versions":{"0.1.0":{"name":"dsh-drop-caret","version":"0.1.0","keywords":["deepseek","harness","dsh","cordis","plugin","drag","drop","upload","caret"],"license":"MIT","_id":"dsh-drop-caret@0.1.0","maintainers":[{"name":"vithrive","email":"cszr2018@gmail.com"}],"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"inject":["@deepseek-ai/dsh-client-runtime"],"platform":"web"}},"dist":{"shasum":"d7975366a49a79c1e55884d7f34af762d6ffae84","tarball":"https://registry.npmjs.org/dsh-drop-caret/-/dsh-drop-caret-0.1.0.tgz","fileCount":6,"integrity":"sha512-3BJ4ym55RZIndOjXSOS1QaEmXhnk3uVJyswB3AgXG1FSYK4nRi6Su/mDltVo5srNRmiT1GE1XRx5IhbqUQ+30w==","signatures":[{"sig":"MEQCIA0adCZbWVkozcTyiCC+m4EeXBDNJmzumBWMfmSGxRbHAiBuex/EtUa6t+t/6kOHnV5H4+y8twinPiK7i1Voys+aDw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":13948},"main":"lib/index.js","type":"module","exports":{".":"./lib/index.js","./client":"./lib/client.js","./package.json":"./package.json"},"_npmUser":{"name":"vithrive","email":"cszr2018@gmail.com"},"_npmVersion":"11.6.2","description":"DeepSeek Harness 插件：把系统文件拖进对话输入框，并在拖放点对应的精确光标位置插入文件引用（会话隔离存储，agent 可读）。","directories":{},"_nodeVersion":"25.2.1","_hasShrinkwrap":false,"peerDependencies":{"react":"^18.2.0","@deepseek-ai/cordis":"*"},"_npmOperationalInternal":{"tmp":"tmp/dsh-drop-caret_0.1.0_1786888361999_0.7767791654848728","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"dsh-drop-caret","version":"0.1.1","keywords":["deepseek","harness","dsh","cordis","plugin","drag","drop","upload","caret"],"license":"MIT","_id":"dsh-drop-caret@0.1.1","maintainers":[{"name":"vithrive","email":"cszr2018@gmail.com"}],"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"inject":["@deepseek-ai/dsh-client-runtime"],"platform":"web"}},"dist":{"shasum":"9a4779dd32698583f3d4df5bcb0f01cfd4cd8b2d","tarball":"https://registry.npmjs.org/dsh-drop-caret/-/dsh-drop-caret-0.1.1.tgz","fileCount":6,"integrity":"sha512-1GuOJEzmri2983uyHAEYC73k60X9RhTjP0tQ5agbtrTIK0dbLzhANbmCrwUp3GBm+QW7ZnJJIInBBBASlRPa6w==","signatures":[{"sig":"MEQCIE2ihu3AZ7EU6xwz01wzLWhXAdEl4FFSqd+mkJmYh+3uAiBwWmwh/fVSbINK32st3bNXN1aZPr5ZRwfTO65VzqvNkg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":17249},"main":"lib/index.js","type":"module","exports":{".":"./lib/index.js","./client":"./lib/client.js","./package.json":"./package.json"},"_npmUser":{"name":"vithrive","email":"cszr2018@gmail.com"},"_npmVersion":"11.6.2","description":"DeepSeek Harness 插件：把系统文件拖进对话输入框，并在拖放点对应的精确光标位置插入文件引用（会话隔离存储，agent 可读）。","directories":{},"_nodeVersion":"25.2.1","_hasShrinkwrap":false,"peerDependencies":{"react":"^18.2.0","@deepseek-ai/cordis":"*"},"_npmOperationalInternal":{"tmp":"tmp/dsh-drop-caret_0.1.1_1786892095429_0.27535331767549787","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"dsh-drop-caret","version":"0.1.2","keywords":["deepseek","harness","dsh","cordis","plugin","drag","drop","upload","caret"],"license":"MIT","_id":"dsh-drop-caret@0.1.2","maintainers":[{"name":"vithrive","email":"cszr2018@gmail.com"}],"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"inject":["@deepseek-ai/dsh-client-runtime"],"platform":"web"}},"dist":{"shasum":"8927e20bedb1bfb5260d5279a757fb52b0c37332","tarball":"https://registry.npmjs.org/dsh-drop-caret/-/dsh-drop-caret-0.1.2.tgz","fileCount":6,"integrity":"sha512-YVyQy2M9MrV8R6dmIYZ9hi4illFa5LASmCtSDCavJg/E3CUDai7062AiSrUtCXVG9RS232cKQxJWQnvGE27OpQ==","signatures":[{"sig":"MEUCIQC/pu5zBnxmow1ufyIt+lpc9777ergrmmzspiF62bUGOgIgb/PpwXUnCAWMeJCm3RAvqeuMlbYM42F4XNhJS5xrfuU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":17048},"main":"lib/index.js","type":"module","exports":{".":"./lib/index.js","./client":"./lib/client.js","./package.json":"./package.json"},"_npmUser":{"name":"vithrive","email":"cszr2018@gmail.com"},"_npmVersion":"11.6.2","description":"DeepSeek Harness 插件：把系统文件拖进对话输入框，并在拖放点对应的精确光标位置插入文件引用（会话隔离存储，agent 可读）。","directories":{},"_nodeVersion":"25.2.1","_hasShrinkwrap":false,"peerDependencies":{"react":"^18.2.0","@deepseek-ai/cordis":"*"},"_npmOperationalInternal":{"tmp":"tmp/dsh-drop-caret_0.1.2_1786896878567_0.36060893637110136","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"dsh-drop-caret","version":"0.1.3","keywords":["deepseek","harness","dsh","cordis","plugin","drag","drop","upload","caret"],"license":"MIT","_id":"dsh-drop-caret@0.1.3","maintainers":[{"name":"vithrive","email":"cszr2018@gmail.com"}],"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"inject":["@deepseek-ai/dsh-client-runtime"],"platform":"web"}},"dist":{"shasum":"c3cb0972e293e5430b37a8c80f47d0b26c417a65","tarball":"https://registry.npmjs.org/dsh-drop-caret/-/dsh-drop-caret-0.1.3.tgz","fileCount":6,"integrity":"sha512-o7IClgAkF2jQo0PcLFj+801c3T3bmA50ptUHpf2SMkKelvAU/vNCthS7ytt1tPGCZHMMCWs5eEjUG5WkR40fjw==","signatures":[{"sig":"MEYCIQCC8b8TFTOXbOOD4k9tYOZTb2U2J08UfftU3yaxyYkaXQIhAJYJ6d9/tuMd6dTL4dCd6JQhBwz3fozI214O6xCc0ksQ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":17564},"main":"lib/index.js","type":"module","exports":{".":"./lib/index.js","./client":"./lib/client.js","./package.json":"./package.json"},"_npmUser":{"name":"vithrive","email":"cszr2018@gmail.com"},"_npmVersion":"11.6.2","description":"DeepSeek Harness 插件：把系统文件拖进对话输入框，并在拖放点对应的精确光标位置插入文件引用（会话隔离存储，agent 可读）。","directories":{},"_nodeVersion":"25.2.1","_hasShrinkwrap":false,"peerDependencies":{"react":"^18.2.0","@deepseek-ai/cordis":"*"},"_npmOperationalInternal":{"tmp":"tmp/dsh-drop-caret_0.1.3_1786903196634_0.497599762561157","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"dsh-drop-caret","version":"0.1.4","keywords":["deepseek","harness","dsh","cordis","plugin","drag","drop","upload","caret"],"license":"MIT","_id":"dsh-drop-caret@0.1.4","maintainers":[{"name":"vithrive","email":"cszr2018@gmail.com"}],"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"inject":["@deepseek-ai/dsh-client-runtime"],"platform":"web"}},"dist":{"shasum":"9d5f3ad609eab09febdb0957e9c4d5724ba24f42","tarball":"https://registry.npmjs.org/dsh-drop-caret/-/dsh-drop-caret-0.1.4.tgz","fileCount":6,"integrity":"sha512-Rmdq5Ou5MXtgtP71WWtCCLNTNYFNsaZ/JQCKfMMQB4XRLC2Hpg+ytGgd5OUPORgctbfOfMsj+nHEj9cxUa/qbg==","signatures":[{"sig":"MEQCIFmMZfmHkxGgl99DI+uYvtVb01JYkBgacFhsCsqdDze3AiBYLLsHJ4pXYRcX84HXmdPmqqvUNXlcB0/XtYRIKRpiYw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":19312},"main":"lib/index.js","type":"module","exports":{".":"./lib/index.js","./client":"./lib/client.js","./package.json":"./package.json"},"_npmUser":{"name":"vithrive","email":"cszr2018@gmail.com"},"_npmVersion":"11.6.2","description":"DeepSeek Harness 插件：把系统文件拖进对话输入框，并在拖放点对应的精确光标位置插入文件引用（会话隔离存储，agent 可读）。","directories":{},"_nodeVersion":"25.2.1","_hasShrinkwrap":false,"peerDependencies":{"react":"^18.2.0","@deepseek-ai/cordis":"*"},"_npmOperationalInternal":{"tmp":"tmp/dsh-drop-caret_0.1.4_1786933146627_0.24388547415548034","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"dsh-drop-caret","version":"0.1.5","keywords":["deepseek","harness","dsh","cordis","plugin","drag","drop","upload","caret"],"license":"MIT","_id":"dsh-drop-caret@0.1.5","maintainers":[{"name":"vithrive","email":"cszr2018@gmail.com"}],"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"inject":["@deepseek-ai/dsh-client-runtime"],"platform":"web"}},"dist":{"shasum":"40d8e2eb4ca3515a981a4d95ba09be4d86d3c21d","tarball":"https://registry.npmjs.org/dsh-drop-caret/-/dsh-drop-caret-0.1.5.tgz","fileCount":6,"integrity":"sha512-T2Wh+IpqObV/DwlLBx3eSbAJUX7dNgO0b56m9nbvY1mnLfweVayYxD4uUPrE+Fg3IM2ZUsBVstw37CFi8hpfFg==","signatures":[{"sig":"MEQCIDfi8IO0gtuKvjVJZIzPGmkvJXtowj3Oz/2aFQfIXzxFAiAzlys28mXJauD8kdjE3qPFhrxo7oB/pLnJQ9+CgKMRTw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":19877},"main":"lib/index.js","type":"module","exports":{".":"./lib/index.js","./client":"./lib/client.js","./package.json":"./package.json"},"_npmUser":{"name":"vithrive","email":"cszr2018@gmail.com"},"_npmVersion":"11.6.2","description":"DeepSeek Harness 插件：把系统文件拖进对话输入框，并在拖放点对应的精确光标位置插入文件引用（会话隔离存储，agent 可读）。","directories":{},"_nodeVersion":"25.2.1","_hasShrinkwrap":false,"peerDependencies":{"react":"^18.2.0","@deepseek-ai/cordis":"*"},"_npmOperationalInternal":{"tmp":"tmp/dsh-drop-caret_0.1.5_1787021871080_0.3175192287572435","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"dsh-drop-caret","version":"0.2.0","keywords":["deepseek","harness","dsh","cordis","plugin","drag","drop","upload","caret"],"license":"MIT","_id":"dsh-drop-caret@0.2.0","maintainers":[{"name":"vithrive","email":"cszr2018@gmail.com"}],"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"inject":["@deepseek-ai/dsh-client-runtime"],"platform":"web"}},"dist":{"shasum":"c03293f37de27e8d352618649c2f261335a09a01","tarball":"https://registry.npmjs.org/dsh-drop-caret/-/dsh-drop-caret-0.2.0.tgz","fileCount":6,"integrity":"sha512-Ef+LWM/lzaUs8PPUw/gVhw3QWrW0F2Vwx2gPaHql5uT1rp/xKDac5D0kYUGSOonfFWGDUvLbIydbSLT5vrKjbw==","signatures":[{"sig":"MEQCIHx494Jq3kUmkoaSpwRpWoqgpapHRSIbE0MgRrgBBcvEAiA0ULUyY1e89WczmX7/Snkj5TG9dbKixGrd/9Bets3gbw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":24223},"main":"lib/index.js","type":"module","exports":{".":"./lib/index.js","./client":"./lib/client.js","./package.json":"./package.json"},"_npmUser":{"name":"vithrive","email":"cszr2018@gmail.com"},"_npmVersion":"11.6.2","description":"DeepSeek Harness 插件：把文件/文件夹从系统文件管理器或 VS Code 资源管理器拖进对话输入框，并在拖放点对应的精确光标位置插入文件引用（文件夹自动递归展开所有文件）。","directories":{},"_nodeVersion":"25.2.1","_hasShrinkwrap":false,"peerDependencies":{"react":"^18.2.0","@deepseek-ai/cordis":"*"},"_npmOperationalInternal":{"tmp":"tmp/dsh-drop-caret_0.2.0_1787110984599_0.41196597807857116","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"dsh-drop-caret","version":"0.2.1","keywords":["deepseek","harness","dsh","cordis","plugin","drag","drop","upload","caret"],"license":"MIT","_id":"dsh-drop-caret@0.2.1","maintainers":[{"name":"vithrive","email":"cszr2018@gmail.com"}],"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"inject":["@deepseek-ai/dsh-client-runtime"],"platform":"web"}},"dist":{"shasum":"489181d21a4295c41345650294fe1c659ac7b594","tarball":"https://registry.npmjs.org/dsh-drop-caret/-/dsh-drop-caret-0.2.1.tgz","fileCount":6,"integrity":"sha512-caXyvP9c07en6Mkwepzl4yOuzfMY4urwqK5I9VgwYUZu61l4HlR0cWBvA30HuQPf3fjRj45Ds3XW3PBzQk3h8g==","signatures":[{"sig":"MEYCIQCffYtmDDIwcqg4VbOn2cHpvVcmeP64hc0uXXU9ZylLdAIhALn0FESKc81Cq6sYN7EQ2en1IOpzAdBiyXdocNePLNKZ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":27979},"main":"lib/index.js","type":"module","exports":{".":"./lib/index.js","./client":"./lib/client.js","./package.json":"./package.json"},"gitHead":"0d8dc3c7264ba44c1f763710ef07ac955910f1a5","_npmUser":{"name":"vithrive","email":"cszr2018@gmail.com"},"_npmVersion":"11.6.2","description":"DeepSeek Harness 插件：把文件/文件夹从系统文件管理器或 VS Code 资源管理器拖进对话输入框，并在拖放点对应的精确光标位置插入文件引用（文件夹自动递归展开所有文件）。","directories":{},"_nodeVersion":"25.2.1","_hasShrinkwrap":false,"peerDependencies":{"react":"^18.2.0","@deepseek-ai/cordis":"*"},"_npmOperationalInternal":{"tmp":"tmp/dsh-drop-caret_0.2.1_1787128545211_0.3955053210132988","host":"s3://npm-registry-packages-npm-production"}},"0.2.2":{"name":"dsh-drop-caret","version":"0.2.2","keywords":["deepseek","harness","dsh","cordis","plugin","drag","drop","upload","caret"],"license":"MIT","_id":"dsh-drop-caret@0.2.2","maintainers":[{"name":"vithrive","email":"cszr2018@gmail.com"}],"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"inject":["@deepseek-ai/dsh-client-runtime"],"platform":"web"}},"dist":{"shasum":"59eeeec3e415d21b38022600da4693587db16c8b","tarball":"https://registry.npmjs.org/dsh-drop-caret/-/dsh-drop-caret-0.2.2.tgz","fileCount":6,"integrity":"sha512-R7g3fcLLgzc6iFYFlvth+63c4jjc00/8l0mjxOJ2xC9aMG/GziuV5ovsToY+07bqn6kiVd7bw6s/+9q4V0w7Yw==","signatures":[{"sig":"MEUCIE9tC0oRE3pAHUcIo3vmVYQEFHOGgRCOz+6F89AjMr5WAiEA6+9Gvq3EhxolKw2RBA4Gyej5C7U+8ULs3jcjN8s3Rjo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":28673},"main":"lib/index.js","type":"module","exports":{".":"./lib/index.js","./client":"./lib/client.js","./package.json":"./package.json"},"gitHead":"f6424e2df397e491912547c211593bdcd87937b2","_npmUser":{"name":"vithrive","email":"cszr2018@gmail.com"},"_npmVersion":"11.6.2","description":"DeepSeek Harness 插件：把文件/文件夹从系统文件管理器或 VS Code 资源管理器拖进对话输入框，并在拖放点对应的精确光标位置插入文件引用（文件插入 @文件名，文件夹只插入 @文件夹名、不展开子文件）。","directories":{},"_nodeVersion":"25.2.1","_hasShrinkwrap":false,"peerDependencies":{"react":"^18.2.0","@deepseek-ai/cordis":"*"},"_npmOperationalInternal":{"tmp":"tmp/dsh-drop-caret_0.2.2_1787415011277_0.5835082045009827","host":"s3://npm-registry-packages-npm-production"}},"0.2.3":{"_id":"dsh-drop-caret@0.2.3","dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"inject":["@deepseek-ai/dsh-client-runtime"],"platform":"web"}},"dist":{"shasum":"5f672171277dbf9a1574d3e55f202a82e725017a","tarball":"https://registry.npmjs.org/dsh-drop-caret/-/dsh-drop-caret-0.2.3.tgz","fileCount":6,"integrity":"sha512-3Q75rdGJ9PbIfcmEnyk//5FEubMy6RJKa+riRQQGNzUPHozH3C5ME/DCP5lcW8q1p+w6ir6rNrexrOG6NtdDrQ==","signatures":[{"sig":"MEUCIQC5T2hn128wy4vjCdJf2Q+7S4y/jgMIIb2deFE4z5X85wIgdQJeaP4NoiOx3DLVxuKWSkr9JeynLIYhPR0LeEJIArw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIGrcSQWv1tKuG9jwLQ2ty3pciuKbJSV6OJlLsnrC8aNpAiEA/M1Jb3Ct+JFIzThzNyyPbaDP+VVDyzdxQfRBSXaXWbU="}],"unpackedSize":30226},"main":"lib/index.js","name":"dsh-drop-caret","type":"module","exports":{".":"./lib/index.js","./client":"./lib/client.js","./package.json":"./package.json"},"gitHead":"fb8aa7467f0aaa7429948cb505f884f48284e303","license":"MIT","version":"0.2.3","_npmUser":{"name":"vithrive","email":"cszr2018@gmail.com"},"keywords":["deepseek","harness","dsh","cordis","plugin","drag","drop","upload","caret"],"_npmVersion":"11.19.0","description":"DeepSeek Harness 插件：把文件/文件夹从系统文件管理器或 VS Code 资源管理器拖进对话输入框，并在拖放点对应的精确光标位置插入文件引用（文件插入 @文件名，文件夹只插入 @文件夹名、不展开子文件）。","directories":{},"maintainers":[{"name":"vithrive","email":"cszr2018@gmail.com"}],"_nodeVersion":"24.20.0","_hasShrinkwrap":false,"peerDependencies":{"react":"^18.2.0","@deepseek-ai/cordis":"*"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/dsh-drop-caret_0.2.3_1789655684791_0.9914447766115304"}}},"time":{"created":"2026-08-16T13:52:41.945Z","modified":"2026-09-17T14:34:45.032Z","0.1.0":"2026-08-16T13:52:42.137Z","0.1.1":"2026-08-16T14:54:55.564Z","0.1.2":"2026-08-16T16:14:38.710Z","0.1.3":"2026-08-16T17:59:56.809Z","0.1.4":"2026-08-17T02:19:06.771Z","0.1.5":"2026-08-18T02:57:51.233Z","0.2.0":"2026-08-19T03:43:04.748Z","0.2.1":"2026-08-19T08:35:45.370Z","0.2.2":"2026-08-22T16:10:11.417Z","0.2.3":"2026-09-17T14:34:44.888Z"},"license":"MIT","keywords":["deepseek","harness","dsh","cordis","plugin","drag","drop","upload","caret"],"description":"DeepSeek Harness 插件：把文件/文件夹从系统文件管理器或 VS Code 资源管理器拖进对话输入框，并在拖放点对应的精确光标位置插入文件引用（文件插入 @文件名，文件夹只插入 @文件夹名、不展开子文件）。","maintainers":[{"name":"vithrive","email":"cszr2018@gmail.com"}],"readme":"# dsh-drop-caret\n\n> 把文件/文件夹从系统文件管理器或 VS Code 资源管理器拖进 DeepSeek Harness 对话输入框，并在**拖放点对应的精确光标位置**插入文件引用。\n\n## ✨ 特性\n\n- **精确光标定位**：拖放点自动映射到输入框光标位置，无论拖到哪里，引用就插到哪里\n- **文件夹递归展开**：拖拽文件夹时，自动递归列出所有文件并逐一插入引用\n- **多来源支持**：\n  - ✅ Windows 资源管理器 / macOS Finder\n  - ✅ VS Code 资源管理器（本地文件/文件夹）\n- **会话隔离存储**：上传的文件按 session 隔离存储到 `~/.dsh-drop/session-<id>/`，agent 可直接读取\n- **安全机制**：文件名消毒、大小上限（24 MiB）、sha256 前缀去重命名\n\n## 📦 安装\n\n```bash\ndsh plugin --profile web add dsh-drop-caret\n```\n\n安装后重启 `dsh web` 即可使用。\n\n## 🎯 使用方法\n\n1. 打开 DeepSeek Harness Web GUI 的对话输入框\n2. 从文件管理器或 VS Code 侧边栏拖拽文件/文件夹到输入框\n3. 在拖放位置自动插入文件引用（格式：`[file://...]`）\n\n### 文件夹拖拽\n\n- **系统文件管理器**：递归收集文件夹中的所有文件并上传\n- **VS Code 资源管理器**：调用 Host API 列出文件夹内容，插入本地路径引用（不复制文件）\n\n## 🖱️ 与 VS Code 扩展联动：发送选中内容到对话框\n\n安装 [DeepSeek Harness for VS Code](https://github.com/Vithrive/Deepseek-Harness-for-VS-Code) 扩展后，可以更快捷地把代码上下文送进对话：\n\n1. 在 VS Code 中**框选住代码块 / 文字块**；\n2. **右键**，点击 **「DeepSeek Harness: 发送选中内容到对话框」**：\n\n   ![右键菜单：发送选中内容到对话框](media/send-selection-menu.png)\n\n3. 该脚本对应代码块所在行数的链接（`路径:起始行-结束行`）就会被发送到对话框，插入在当前光标位置：\n\n   ![发送结果出现在 DSH 对话框中](media/send-selection-result.png)\n\n4. 在 DSH 里直接发送消息即可，模型可通过引用精确定位到代码块所在文件与行号。\n\n> 该功能由 VS Code 扩展经 webview 桥接转发给本插件处理；扩展会自动安装并管理本插件（≥0.2.1），无需手动配置。\n\n## 🔧 工作原理\n\n### Client 端（浏览器）\n\n- 监听 `dragover` / `drop` 事件\n- 使用 `document.caretRangeFromPoint(x, y)` 映射拖放点 → 光标偏移量\n- 通过 `updateValue` waterfall 在精确位置插入引用\n\n### Host 端（Node.js）\n\n- 提供 `/api/dsh-drop` 端点接收文件上传\n- 提供 `/api/dsh-drop-list-dir` 端点递归列出文件夹内容\n- 文件存储于 `~/.dsh-drop/session-<id>/`，会话隔离\n\n### 数据协议识别\n\n| 拖拽来源 | dataTransfer 内容 | 处理方式 |\n|---------|------------------|---------|\n| 系统文件管理器 | `Files` | 上传 → 插入存储路径 |\n| VS Code 资源管理器 | `text/uri-list` | 解析 `file://` → 本地路径 → 递归列出（文件夹）→ 插入路径 |\n| VS Code 资源管理器（兜底） | `application/vnd.code.tree` | 递归抽取 resource URI → 插入路径 |\n\n## 📝 已知限制\n\n- **远程 VS Code**（Remote-SSH 的 `vscode-remote://` URI）暂不支持，需要 VS Code 扩展侧配合映射远程路径\n- 文件夹拖拽的递归深度无限制（大型项目文件夹可能插入大量引用）\n\n## 🛠️ 开发\n\n```bash\n# 克隆仓库\ngit clone https://github.com/Vithrive/dsh-drop-caret.git\ncd dsh-drop-caret\n\n# 构建客户端 bundle\nnode build.mjs\n\n# 本地测试（symlink 到 web profile）\ncd ~/.dsh/profiles/web\nnpm install --save-dev /path/to/dsh-drop-caret\n\n# 发布\nnpm publish\n```\n\n## 安全\n\n```sh\ndsh plugin --profile web add dsh-drop-caret\n# 重启 dsh web\n```\n\n## 📄 安全\n\n- 上传走 host 的 HTTP 路由，存储目录按会话隔离\n- 仅 POST；文件名/会话 id 均做消毒\n- 不注入任何全局状态，插件卸载时清理 drop 监听\n\n## 📄 许可证\n\nMIT © [Vithrive](https://github.com/Vithrive)\n\n## 🔗 相关项目\n\n- [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness)\n- [DeepSeek Harness for VS Code](https://github.com/Vithrive/Deepseek-Harness-for-VS-Code)\n","readmeFilename":"README.md"}