{"_id":"@andykwok/dsh-desktop","_rev":"13-36d6e51b70eaadb10fab0b5d2b280bdc","name":"@andykwok/dsh-desktop","dist-tags":{"latest":"0.3.2"},"versions":{"0.2.0":{"name":"@andykwok/dsh-desktop","version":"0.2.0","keywords":["dsh","deepseek-harness","desktop","webview2","shell","windows","gui","plugin","dsh-plugin"],"license":"MIT","_id":"@andykwok/dsh-desktop@0.2.0","maintainers":[{"name":"andykwok","email":"andykwok@qq.com"}],"homepage":"https://github.com/andykwokatgithub/dsh-desktop#readme","bugs":{"url":"https://github.com/andykwokatgithub/dsh-desktop/issues"},"os":["win32"],"bin":{"dsh-desktop":"bin/dsh-desktop.mjs"},"cpu":["x64"],"dsh":{"bundle":{"patch":"./cordis.patch.yml"}},"dist":{"shasum":"3e5be16eb6a43ced301df2992d531cbe9e9a9c29","tarball":"https://registry.npmjs.org/@andykwok/dsh-desktop/-/dsh-desktop-0.2.0.tgz","fileCount":6,"integrity":"sha512-FEjlMdBXDaaaLFmZDMx+JuHrxKZJXX3oe6P4lNtOrCma1fWMzzIZuajoz+/Put/tT548xMNxtUYf8lb3cRsH3A==","signatures":[{"sig":"MEUCIGYyNoc3RJKlZJwYZ6/01SjRfCCL0BN8Y8DrqS4yXhXgAiEAlccTISRDIs4973oiHw+VvXJZSd3wVzvu+6wcOk3vb+E=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":17700},"engines":{"node":">=18"},"gitHead":"b0b2b7051265fbd547ff6855a73990b89ff56fcb","private":false,"scripts":{"build":"powershell -NoProfile -ExecutionPolicy Bypass -File build.ps1","postinstall":"node scripts/fetch-exe.mjs"},"_npmUser":{"name":"andykwok","email":"andykwok@qq.com"},"repository":{"url":"git+https://github.com/andykwokatgithub/dsh-desktop.git","type":"git"},"_npmVersion":"11.19.1","description":"A Go + WebView2 desktop shell for the DeepSeek Harness Web UI (dsh web). Prebuilt Windows x64 binary installed from GitHub Releases.","directories":{},"_nodeVersion":"25.9.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/dsh-desktop_0.2.0_1788347112609_0.8736523639601681","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@andykwok/dsh-desktop","version":"0.2.1","keywords":["dsh","deepseek-harness","desktop","webview2","shell","windows","gui","plugin","dsh-plugin"],"license":"MIT","_id":"@andykwok/dsh-desktop@0.2.1","maintainers":[{"name":"andykwok","email":"andykwok@qq.com"}],"homepage":"https://github.com/andykwokatgithub/dsh-desktop#readme","bugs":{"url":"https://github.com/andykwokatgithub/dsh-desktop/issues"},"os":["win32"],"bin":{"dsh-desktop":"bin/dsh-desktop.mjs"},"cpu":["x64"],"dsh":{"bundle":{"patch":"./cordis.patch.yml"}},"dist":{"shasum":"86b0bc75133c1563e73721ec6acfb98df0009c1a","tarball":"https://registry.npmjs.org/@andykwok/dsh-desktop/-/dsh-desktop-0.2.1.tgz","fileCount":6,"integrity":"sha512-UifPJbV0Opr8xVX02kDSB3hQe8GoQkOxxZ5Y+U4ksIkUv8MSTJG0XYJBjuExHvQAr8IuAzlkOsbkNEB0nrZ/9A==","signatures":[{"sig":"MEYCIQDM8bSrs0RcdIfXtqX8xgJwFqs9IJ0/bsHKYJ7qkth+AgIhAJbRlcf9SHldyqLw/cUWIjZMqWqpZIO//L+Uf1/PxN27","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":17613},"engines":{"node":">=18"},"gitHead":"183099c12b2d0715b2cd0a968ffbf542f1ceb633","private":false,"scripts":{"build":"powershell -NoProfile -ExecutionPolicy Bypass -File build.ps1","postinstall":"node scripts/fetch-exe.mjs"},"_npmUser":{"name":"andykwok","email":"andykwok@qq.com"},"repository":{"url":"git+https://github.com/andykwokatgithub/dsh-desktop.git","type":"git"},"_npmVersion":"10.8.2","description":"A Go + WebView2 desktop shell for the DeepSeek Harness Web UI (dsh web). Prebuilt Windows x64 binary installed from GitHub Releases.","directories":{},"_nodeVersion":"20.20.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/dsh-desktop_0.2.1_1788397577715_0.8517832101840446","host":"s3://npm-registry-packages-npm-production"}},"0.2.2":{"name":"@andykwok/dsh-desktop","version":"0.2.2","keywords":["dsh","deepseek-harness","desktop","webview2","shell","windows","gui","plugin","dsh-plugin"],"license":"MIT","_id":"@andykwok/dsh-desktop@0.2.2","maintainers":[{"name":"andykwok","email":"andykwok@qq.com"}],"homepage":"https://github.com/andykwokatgithub/dsh-desktop#readme","bugs":{"url":"https://github.com/andykwokatgithub/dsh-desktop/issues"},"os":["win32"],"bin":{"dsh-desktop":"bin/dsh-desktop.mjs"},"cpu":["x64"],"dsh":{"bundle":{"patch":"./cordis.patch.yml"}},"dist":{"shasum":"bb33d2b71f65a5c2f721aa6822a34d6431e0e1b9","tarball":"https://registry.npmjs.org/@andykwok/dsh-desktop/-/dsh-desktop-0.2.2.tgz","fileCount":7,"integrity":"sha512-EH0sQktTjV2FB3IEFk8Y04P5+QGwsJpkwF+slg/l9B6WgOD+lUqeqVrea8K6vbbUXI6BWAGx9gnt8THe7J9nEQ==","signatures":[{"sig":"MEUCICl2s/3xgYNWt+tSjQRBj13csOi0RKQeFAdgeT/UujbDAiEAzUENoyrDD+vdnMJHIjORvK3GzZltGnyGolPa5lxoU60=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":15321939},"engines":{"node":">=18"},"gitHead":"c7e8d3838e1b7944fdc6df9b3aa703b69cae1085","private":false,"scripts":{"build":"powershell -NoProfile -ExecutionPolicy Bypass -File build.ps1","postinstall":"node scripts/fetch-exe.mjs"},"_npmUser":{"name":"andykwok","email":"andykwok@qq.com"},"repository":{"url":"git+https://github.com/andykwokatgithub/dsh-desktop.git","type":"git"},"_npmVersion":"10.8.2","description":"A Go + WebView2 desktop shell for the DeepSeek Harness Web UI (dsh web). Prebuilt Windows x64 binary bundled in the package (no runtime download needed).","directories":{},"_nodeVersion":"20.20.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/dsh-desktop_0.2.2_1788398074635_0.21487537358833153","host":"s3://npm-registry-packages-npm-production"}},"0.2.3":{"name":"@andykwok/dsh-desktop","version":"0.2.3","keywords":["dsh","deepseek-harness","desktop","webview2","shell","windows","gui","plugin","dsh-plugin"],"license":"MIT","_id":"@andykwok/dsh-desktop@0.2.3","maintainers":[{"name":"andykwok","email":"andykwok@qq.com"}],"homepage":"https://github.com/andykwokatgithub/dsh-desktop#readme","bugs":{"url":"https://github.com/andykwokatgithub/dsh-desktop/issues"},"os":["win32"],"bin":{"dsh-desktop":"bin/dsh-desktop.mjs"},"cpu":["x64"],"dsh":{"bundle":{"patch":"./cordis.patch.yml"}},"dist":{"shasum":"d19c2afb2818f6365c42478f6660f3a9b093578d","tarball":"https://registry.npmjs.org/@andykwok/dsh-desktop/-/dsh-desktop-0.2.3.tgz","fileCount":7,"integrity":"sha512-2j/QmKCQjjeUHNNH/l2hTlWev9LtZGCEOjuTGKaC3fmvseftrrNsXLqC9QLqYIdCkZJOIcuOgGMfwVg9lVcNBA==","signatures":[{"sig":"MEUCIBoR7IEw7izuUENc8C8jgmoqoukqkiA9/yZ1cZdl2bUCAiEA5Auqeil6IUz33xJnL72qLaRsJ7DbBUHYYtBwUjr/Mpo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":15321896},"engines":{"node":">=18"},"gitHead":"a02c94aabb5a10cd60e2a6077e9e44089de9628f","private":false,"scripts":{"build":"powershell -NoProfile -ExecutionPolicy Bypass -File build.ps1"},"_npmUser":{"name":"andykwok","email":"andykwok@qq.com"},"repository":{"url":"git+https://github.com/andykwokatgithub/dsh-desktop.git","type":"git"},"_npmVersion":"10.8.2","description":"A Go + WebView2 desktop shell for the DeepSeek Harness Web UI (dsh web). Prebuilt Windows x64 binary bundled in the package; no install script and no runtime download needed.","directories":{},"_nodeVersion":"20.20.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/dsh-desktop_0.2.3_1788400042370_0.8252084254190675","host":"s3://npm-registry-packages-npm-production"}},"0.2.4":{"name":"@andykwok/dsh-desktop","version":"0.2.4","keywords":["dsh","deepseek-harness","desktop","webview2","shell","windows","gui","plugin","dsh-plugin"],"license":"MIT","_id":"@andykwok/dsh-desktop@0.2.4","maintainers":[{"name":"andykwok","email":"andykwok@qq.com"}],"homepage":"https://github.com/andykwokatgithub/dsh-desktop#readme","bugs":{"url":"https://github.com/andykwokatgithub/dsh-desktop/issues"},"os":["win32"],"bin":{"dsh-desktop":"bin/dsh-desktop.mjs"},"cpu":["x64"],"dsh":{"bundle":{"patch":"./cordis.patch.yml"}},"dist":{"shasum":"a1ddacc7f3dc61eccb4596690bc1c63710716b5a","tarball":"https://registry.npmjs.org/@andykwok/dsh-desktop/-/dsh-desktop-0.2.4.tgz","fileCount":7,"integrity":"sha512-Y5/5nKP+GsSUSvTjezDSGSe5rmVxdrLlvNS+9miEsMBWIp+fY7w5a8avurKW/ljw00XvKv9bjHDkR8r8wtt0gg==","signatures":[{"sig":"MEUCIFrip5wj9U6yapivQCp4intHmE/qamBOfHHkVLsPxWZcAiEA5cvBi0rjjgBxtZQdwq+6+pv1XCh9G3L2B7C6LcywvNk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":15322626},"engines":{"node":">=18"},"gitHead":"e185f16fae1f7f8c47ac40d903ed4b061491345a","private":false,"scripts":{"build":"powershell -NoProfile -ExecutionPolicy Bypass -File build.ps1"},"_npmUser":{"name":"andykwok","email":"andykwok@qq.com"},"repository":{"url":"git+https://github.com/andykwokatgithub/dsh-desktop.git","type":"git"},"_npmVersion":"10.8.2","description":"A Go + WebView2 desktop shell for the DeepSeek Harness Web UI (dsh web). Prebuilt Windows x64 binary bundled in the package; no install script and no runtime download needed.","directories":{},"_nodeVersion":"20.20.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/dsh-desktop_0.2.4_1788400825354_0.41317893994119825","host":"s3://npm-registry-packages-npm-production"}},"0.2.5":{"name":"@andykwok/dsh-desktop","version":"0.2.5","keywords":["dsh","deepseek-harness","desktop","webview2","shell","windows","gui","plugin","dsh-plugin"],"license":"MIT","_id":"@andykwok/dsh-desktop@0.2.5","maintainers":[{"name":"andykwok","email":"andykwok@qq.com"}],"homepage":"https://github.com/andykwokatgithub/dsh-desktop#readme","bugs":{"url":"https://github.com/andykwokatgithub/dsh-desktop/issues"},"os":["win32"],"bin":{"dsh-desktop":"bin/dsh-desktop.mjs"},"cpu":["x64"],"dsh":{"bundle":{"patch":"./cordis.patch.yml"}},"dist":{"shasum":"41c8f13eb4ef259c770b4621fac4cfed84882c2c","tarball":"https://registry.npmjs.org/@andykwok/dsh-desktop/-/dsh-desktop-0.2.5.tgz","fileCount":7,"integrity":"sha512-p7LJRzNYbizU/Yvxpl8JeaIAvSg34k1S8mH1rqqzQfvvCuakx/SnDlzqwPLS7bvqtXNYvqMDbw4DKctMh1ibdg==","signatures":[{"sig":"MEQCIAWIE1qx/yEWp19Ew+yj2dR623Z1vJyvP6DC6WZLhW3pAiAzAPe2nIapTuGB/n+N2UbbXn6IdAkYGcxXN+fqnJ1ijw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":15325123},"engines":{"node":">=18"},"gitHead":"4b06682f77df9c692aa2ae83ebc4d1f0ed462c86","private":false,"scripts":{"build":"powershell -NoProfile -ExecutionPolicy Bypass -File build.ps1"},"_npmUser":{"name":"andykwok","email":"andykwok@qq.com"},"repository":{"url":"git+https://github.com/andykwokatgithub/dsh-desktop.git","type":"git"},"_npmVersion":"10.8.2","description":"A Go + WebView2 desktop shell for the DeepSeek Harness Web UI (dsh web). Prebuilt Windows x64 binary bundled in the package; no install script and no runtime download needed.","directories":{},"_nodeVersion":"20.20.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/dsh-desktop_0.2.5_1788401849262_0.3706846010953173","host":"s3://npm-registry-packages-npm-production"}},"0.2.6":{"name":"@andykwok/dsh-desktop","version":"0.2.6","keywords":["dsh","deepseek-harness","desktop","webview2","shell","windows","gui","plugin","dsh-plugin"],"license":"MIT","_id":"@andykwok/dsh-desktop@0.2.6","maintainers":[{"name":"andykwok","email":"andykwok@qq.com"}],"homepage":"https://github.com/andykwokatgithub/dsh-desktop#readme","bugs":{"url":"https://github.com/andykwokatgithub/dsh-desktop/issues"},"os":["win32"],"bin":{"dsh-desktop":"bin/dsh-desktop.mjs"},"cpu":["x64"],"dsh":{"bundle":{"patch":"./cordis.patch.yml"}},"dist":{"shasum":"83e1c92bdbcd9d598276a382125748652579974b","tarball":"https://registry.npmjs.org/@andykwok/dsh-desktop/-/dsh-desktop-0.2.6.tgz","fileCount":7,"integrity":"sha512-1FzZ25EdQHNKCxC4lrFQIKwZNbuqgoh53k64ZvMNg8Awb1hutTdblwzuVAtsb7yuBruZ+ubkfUlRcWiYuACyqA==","signatures":[{"sig":"MEQCIFSQGrk6F9VhZaWvZbZNz5rjtW4PPliaxh5npRdoS46wAiBUraXU18n1O/8txKmFtr9Tc2XNVN3SdIUJGDkzkOvgDA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":15340992},"engines":{"node":">=18"},"gitHead":"46211f871db522e67f48a000b40ff45185f62a51","private":false,"scripts":{"build":"powershell -NoProfile -ExecutionPolicy Bypass -File build.ps1"},"_npmUser":{"name":"andykwok","email":"andykwok@qq.com"},"repository":{"url":"git+https://github.com/andykwokatgithub/dsh-desktop.git","type":"git"},"_npmVersion":"10.8.2","description":"A Go + WebView2 desktop shell for the DeepSeek Harness Web UI (dsh web). Prebuilt Windows x64 binary bundled in the package; no install script and no runtime download needed.","directories":{},"_nodeVersion":"20.20.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/dsh-desktop_0.2.6_1788685469905_0.5454421646951839","host":"s3://npm-registry-packages-npm-production"}},"0.2.7":{"name":"@andykwok/dsh-desktop","version":"0.2.7","keywords":["dsh","deepseek-harness","desktop","webview2","shell","windows","gui","plugin","dsh-plugin"],"license":"MIT","_id":"@andykwok/dsh-desktop@0.2.7","maintainers":[{"name":"andykwok","email":"andykwok@qq.com"}],"homepage":"https://github.com/andykwokatgithub/dsh-desktop#readme","bugs":{"url":"https://github.com/andykwokatgithub/dsh-desktop/issues"},"os":["win32"],"bin":{"dsh-desktop":"bin/dsh-desktop.mjs"},"cpu":["x64"],"dsh":{"bundle":{"patch":"./cordis.patch.yml"}},"dist":{"shasum":"a195656b3aa393faa609f87aae9062fe301682de","tarball":"https://registry.npmjs.org/@andykwok/dsh-desktop/-/dsh-desktop-0.2.7.tgz","fileCount":7,"integrity":"sha512-KK0BTOrlEKrpsOf4o0Bp34A8BBeGW1nyclGrcyCqzPueoSqWeYhGn/t/beFiXVMcl2tMqTvXgLrWimHELZZpnA==","signatures":[{"sig":"MEYCIQD8zA6VJXDa3HznrvmP0rmuaShvonMn6pPc/XywiSKx0wIhALs01CkSJhAQOsRD49/v613TlWD2ibD5TwYI9vRporjj","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":15361415},"engines":{"node":">=18"},"gitHead":"62a25ce5d89f15323952636d3e7b96458008ce6b","private":false,"scripts":{"build":"powershell -NoProfile -ExecutionPolicy Bypass -File build.ps1"},"_npmUser":{"name":"andykwok","email":"andykwok@qq.com"},"repository":{"url":"git+https://github.com/andykwokatgithub/dsh-desktop.git","type":"git"},"_npmVersion":"10.8.2","description":"A Go + WebView2 desktop shell for the DeepSeek Harness Web UI (dsh web). Prebuilt Windows x64 binary bundled in the package; no install script and no runtime download needed.","directories":{},"_nodeVersion":"20.20.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/dsh-desktop_0.2.7_1788758020957_0.11136374223381607","host":"s3://npm-registry-packages-npm-production"}},"0.2.8":{"name":"@andykwok/dsh-desktop","version":"0.2.8","keywords":["dsh","deepseek-harness","desktop","webview2","shell","windows","gui","plugin","dsh-plugin"],"license":"MIT","_id":"@andykwok/dsh-desktop@0.2.8","maintainers":[{"name":"andykwok","email":"andykwok@qq.com"}],"homepage":"https://github.com/andykwokatgithub/dsh-desktop#readme","bugs":{"url":"https://github.com/andykwokatgithub/dsh-desktop/issues"},"os":["win32"],"bin":{"dsh-desktop":"bin/dsh-desktop.mjs"},"cpu":["x64"],"dsh":{"bundle":{"patch":"./cordis.patch.yml"}},"dist":{"shasum":"b1542081c46c90d4541fa4db90c80bfa94a49ad1","tarball":"https://registry.npmjs.org/@andykwok/dsh-desktop/-/dsh-desktop-0.2.8.tgz","fileCount":7,"integrity":"sha512-G7nyRgpB61IjAiznfpajNLdtLsMEK/4V/jJFh6JcWXYKn4w1WN01ng87zPkbjxXkiJ5r3vInGRayKcYwchjslQ==","signatures":[{"sig":"MEUCIE3Rlw8MOEl2W42tV8virIvmjmZN5/fcJ+Te94/6Pov9AiEAr6j1U1V1D4w3QO/0AU5qUjoXtTw70enGENB6osyfPA0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":15361415},"engines":{"node":">=18"},"gitHead":"62a25ce5d89f15323952636d3e7b96458008ce6b","private":false,"scripts":{"build":"powershell -NoProfile -ExecutionPolicy Bypass -File build.ps1"},"_npmUser":{"name":"andykwok","email":"andykwok@qq.com"},"repository":{"url":"git+https://github.com/andykwokatgithub/dsh-desktop.git","type":"git"},"_npmVersion":"10.8.2","description":"A Go + WebView2 desktop shell for the DeepSeek Harness Web UI (dsh web). Prebuilt Windows x64 binary bundled in the package; no install script and no runtime download needed.","directories":{},"_nodeVersion":"20.20.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/dsh-desktop_0.2.8_1788758489978_0.6178293787850939","host":"s3://npm-registry-packages-npm-production"}},"0.2.9":{"name":"@andykwok/dsh-desktop","version":"0.2.9","keywords":["dsh","deepseek-harness","desktop","webview2","shell","windows","gui","plugin","dsh-plugin"],"license":"MIT","_id":"@andykwok/dsh-desktop@0.2.9","maintainers":[{"name":"andykwok","email":"andykwok@qq.com"}],"homepage":"https://github.com/andykwokatgithub/dsh-desktop#readme","bugs":{"url":"https://github.com/andykwokatgithub/dsh-desktop/issues"},"os":["win32"],"bin":{"dsh-desktop":"bin/dsh-desktop.mjs"},"cpu":["x64"],"dsh":{"bundle":{"patch":"./cordis.patch.yml"}},"dist":{"shasum":"82bdc45382cdb9af4c50bb6532734049106b75bb","tarball":"https://registry.npmjs.org/@andykwok/dsh-desktop/-/dsh-desktop-0.2.9.tgz","fileCount":7,"integrity":"sha512-Mclh0m2cQuhBHvbRyTG3g31ZzGVr0FK34A3TkITJ3fLqxk7Zp9Z0YgNNZehboxgMikgYCnDkmDBG6gKsIs0qFg==","signatures":[{"sig":"MEUCIQDFoGhUECbIjlpiprnPjS+g0dOFPuQKleoI16WfDoMFxAIgEl6JP0gh9KoPMonCEWTcDIfjIRXjdAhwCkmH5D8pMA4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":15381206},"engines":{"node":">=18"},"gitHead":"fb59eb793c3671497bfabd7a8d60088208c9920b","private":false,"scripts":{"build":"powershell -NoProfile -ExecutionPolicy Bypass -File build.ps1"},"_npmUser":{"name":"andykwok","email":"andykwok@qq.com"},"repository":{"url":"git+https://github.com/andykwokatgithub/dsh-desktop.git","type":"git"},"_npmVersion":"10.8.2","description":"A Go + WebView2 desktop shell for the DeepSeek Harness Web UI (dsh web). Prebuilt Windows x64 binary bundled in the package; no install script and no runtime download needed.","directories":{},"_nodeVersion":"20.20.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/dsh-desktop_0.2.9_1788772587480_0.9310819271672481","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@andykwok/dsh-desktop","version":"0.3.0","keywords":["dsh","deepseek-harness","desktop","webview2","shell","windows","gui","plugin","dsh-plugin"],"license":"MIT","_id":"@andykwok/dsh-desktop@0.3.0","maintainers":[{"name":"andykwok","email":"andykwok@qq.com"}],"homepage":"https://github.com/andykwokatgithub/dsh-desktop#readme","bugs":{"url":"https://github.com/andykwokatgithub/dsh-desktop/issues"},"os":["win32"],"bin":{"dsh-desktop":"bin/dsh-desktop.mjs"},"cpu":["x64"],"dsh":{"bundle":{"patch":"./cordis.patch.yml"}},"dist":{"shasum":"310b29a30de11fb62d4f55265ffbe7087156d19d","tarball":"https://registry.npmjs.org/@andykwok/dsh-desktop/-/dsh-desktop-0.3.0.tgz","fileCount":7,"integrity":"sha512-9HJ+OXgh+l0filZMhilcSclaMWqXV9faHRKwqGe25n4xOTUfFRWZZYk14lQaeussfc+WuuDyvnQGOqGFw5jJ/g==","signatures":[{"sig":"MEUCIH+7e4XE1i0ydakItEm8KMqPXp0RMD9xdaWJNG1l7ZdgAiEAlm3UsqGQ54yp5IJ42oSnnyEGQJli9rD9w44BYf4lxiI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDlE5zlRNCpydJdneCZ+sK6qxO94f7QCSdw3jh1TcBS1gIgOnElZNigi93ZHyrkOnls7DcYria6hVyDHxIgVL50K+s=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":16151752},"engines":{"node":">=18"},"gitHead":"eb17710bc4e09936b18c7f99e82374c748368daa","private":false,"scripts":{"build":"powershell -NoProfile -ExecutionPolicy Bypass -File build.ps1"},"_npmUser":{"name":"andykwok","email":"andykwok@qq.com"},"repository":{"url":"git+https://github.com/andykwokatgithub/dsh-desktop.git","type":"git"},"_npmVersion":"10.8.2","description":"A Go + WebView2 desktop shell for the DeepSeek Harness Web UI (dsh web). Prebuilt Windows x64 binary bundled in the package; no install script and no runtime download needed.","directories":{},"_nodeVersion":"20.20.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/dsh-desktop_0.3.0_1789094511323_0.14471116175261844","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"@andykwok/dsh-desktop","version":"0.3.1","keywords":["dsh","deepseek-harness","desktop","webview2","shell","windows","gui","plugin","dsh-plugin"],"license":"MIT","_id":"@andykwok/dsh-desktop@0.3.1","maintainers":[{"name":"andykwok","email":"andykwok@qq.com"}],"homepage":"https://github.com/andykwokatgithub/dsh-desktop#readme","bugs":{"url":"https://github.com/andykwokatgithub/dsh-desktop/issues"},"os":["win32"],"bin":{"dsh-desktop":"bin/dsh-desktop.mjs"},"cpu":["x64"],"dsh":{"bundle":{"patch":"./cordis.patch.yml"}},"dist":{"shasum":"3c0649a6b10ee46048f4eb93b046096f44f0b6bd","tarball":"https://registry.npmjs.org/@andykwok/dsh-desktop/-/dsh-desktop-0.3.1.tgz","fileCount":7,"integrity":"sha512-H0v1/j08rCSyVoJ8vltJ/RVg0PdT0LWZDUzyV86EljFVUjhaaE9JY8D202nH+s67mXX1Ki91mzTI8QYJ9VM7hA==","signatures":[{"sig":"MEQCIBaYFwCRnPtid9HiO/QjE8FdWd6icCJh98IOvfwoCGP3AiArh+qmICN816j85EoUYxj4MWsKwL3GoYfTpoesIqNrQA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIGC7sUlZ2N6NQI1sukZBrJPUC84chQJvN0ia5p5aByN2AiB8JdbgKwXaBiZaNrebF5/2I8WoIEf/iPE7TGIAduhQLQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":16167205},"engines":{"node":">=18"},"gitHead":"ed89657d77458748a6548eed8a4f0a77644f1f71","private":false,"scripts":{"build":"powershell -NoProfile -ExecutionPolicy Bypass -File build.ps1"},"_npmUser":{"name":"andykwok","email":"andykwok@qq.com"},"repository":{"url":"git+https://github.com/andykwokatgithub/dsh-desktop.git","type":"git"},"_npmVersion":"10.8.2","description":"A Go + WebView2 desktop shell for the DeepSeek Harness Web UI (dsh web). Prebuilt Windows x64 binary bundled in the package; no install script and no runtime download needed.","directories":{},"_nodeVersion":"20.20.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/dsh-desktop_0.3.1_1789353276585_0.18311694072123408","host":"s3://npm-registry-packages-npm-production"}},"0.3.2":{"os":["win32"],"_id":"@andykwok/dsh-desktop@0.3.2","bin":{"dsh-desktop":"bin/dsh-desktop.mjs"},"cpu":["x64"],"dsh":{"bundle":{"patch":"./cordis.patch.yml"}},"bugs":{"url":"https://github.com/andykwokatgithub/dsh-desktop/issues"},"dist":{"shasum":"0ac901bcb229141c080af73e4c1a505b67f5ae58","tarball":"https://registry.npmjs.org/@andykwok/dsh-desktop/-/dsh-desktop-0.3.2.tgz","fileCount":7,"integrity":"sha512-CYqsC8pCeOW+f4GS3HLtk9TpyGYNUlUEDQOcLwqbMw08CeiCbxgFGzV4gT+dYkk8M4aJ2M3U7RS/FAMBsA1grQ==","signatures":[{"sig":"MEQCIGTNBZ30GJtlcARF6RLpwAGD8wPJsmLmzZMfVGFP6YIwAiBVKEndEjTnyxmOBCwppshlrJf3xXr6+UI8asz94JUqNg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQC3PXBxWdr2ONOKIFi5imoR2FYT9/iRYCTEDMjKxicM4AIhANg2iO68XlQZXwZyUMYy+qI94uwQzVw7ZSXDwFP3SlX2"}],"unpackedSize":16223413},"name":"@andykwok/dsh-desktop","engines":{"node":">=18"},"gitHead":"af0a6e5fe065273394c0d01af60b5922eb92fd54","license":"MIT","private":false,"scripts":{"build":"powershell -NoProfile -ExecutionPolicy Bypass -File build.ps1"},"version":"0.3.2","_npmUser":{"name":"andykwok","email":"andykwok@qq.com"},"homepage":"https://github.com/andykwokatgithub/dsh-desktop#readme","keywords":["dsh","deepseek-harness","desktop","webview2","shell","windows","gui","plugin","dsh-plugin"],"repository":{"url":"git+https://github.com/andykwokatgithub/dsh-desktop.git","type":"git"},"_npmVersion":"10.8.2","description":"A Go + WebView2 desktop shell for the DeepSeek Harness Web UI (dsh web). Prebuilt Windows x64 binary bundled in the package; no install script and no runtime download needed.","directories":{},"maintainers":[{"name":"andykwok","email":"andykwok@qq.com"}],"_nodeVersion":"20.20.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/dsh-desktop_0.3.2_1789436626627_0.5410474317411955"}}},"time":{"created":"2026-09-02T11:05:12.345Z","modified":"2026-09-15T01:43:47.057Z","0.2.0":"2026-09-02T11:05:12.748Z","0.2.1":"2026-09-03T01:06:17.868Z","0.2.2":"2026-09-03T01:14:34.912Z","0.2.3":"2026-09-03T01:47:22.634Z","0.2.4":"2026-09-03T02:00:25.594Z","0.2.5":"2026-09-03T02:17:29.474Z","0.2.6":"2026-09-06T09:04:30.171Z","0.2.7":"2026-09-07T05:13:41.201Z","0.2.8":"2026-09-07T05:21:30.200Z","0.2.9":"2026-09-07T09:16:27.706Z","0.3.0":"2026-09-11T02:41:51.547Z","0.3.1":"2026-09-14T02:34:36.774Z","0.3.2":"2026-09-15T01:43:46.904Z"},"bugs":{"url":"https://github.com/andykwokatgithub/dsh-desktop/issues"},"license":"MIT","homepage":"https://github.com/andykwokatgithub/dsh-desktop#readme","keywords":["dsh","deepseek-harness","desktop","webview2","shell","windows","gui","plugin","dsh-plugin"],"repository":{"url":"git+https://github.com/andykwokatgithub/dsh-desktop.git","type":"git"},"description":"A Go + WebView2 desktop shell for the DeepSeek Harness Web UI (dsh web). Prebuilt Windows x64 binary bundled in the package; no install script and no runtime download needed.","maintainers":[{"name":"andykwok","email":"andykwok@qq.com"}],"readme":"# dsh-desktop\n\n> DeepSeek Harness(`dsh web`)的 **Windows 桌面壳**(Go + WebView2)——把 DSH Web UI 装进原生窗口,\n> 而不是丢进浏览器标签页。可作 DSH 插件 bundle 发布,在插件市场(dshmarket)被发现,通过\n> `dsh plugin` 或 npm 一键安装、更新。\n\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)\n[![Go](https://img.shields.io/badge/Go-1.21+-00ADD8?style=flat&logo=go)](go.mod)\n[![Platform](https://img.shields.io/badge/Platform-Windows%20x64-0078D4?style=flat&logo=windows)](README.md)\n[![GitHub release](https://img.shields.io/github/v/release/andykwokatgithub/dsh-desktop)](https://github.com/andykwokatgithub/dsh-desktop/releases)\n[![npm](https://img.shields.io/npm/v/@andykwok/dsh-desktop)](https://www.npmjs.com/package/@andykwok/dsh-desktop)\n\n---\n\n## 演示\n\n<!-- TODO: 请替换为真实运行截图(需要在能拉起 dsh web 的环境下截取 1-2 张,建议 1280px 宽)。\n     素材放 assets/,例如 assets/screenshot-main.png,并用相对路径引用。 -->\n> 占位:主窗口加载 DSH Web UI、加载态/错误态示意。\n\n---\n\n## 是什么 / 为什么\n\n`dsh-desktop` 是 `dsh web`(默认 `http://127.0.0.1:3080`)的**壳**,只做这几件事:\n\n- **内嵌渲染**:WebView2 加载 DSH Web UI。\n- **服务生命周期**:探测并静默启动/复用/停止 `dsh web` 后端。\n- **实例认人**:识别端口占用者(监听 PID / 镜像路径 / 命令行),只复用与停止**本壳自己启动**的实例。\n- **单实例防重**:重复启动时激活已有窗口并退出。\n- **打包体验**:console 子系统构建(GUI 启动时隐藏控制台)+ DeepSeek 图标 + 内嵌 loading/error/token 页。\n\n**为什么值得用**:相比直接 `dsh web` 在浏览器开标签页,本壳给你一个独立的原生窗口、\n单实例(不会重复弹窗/堆积标签页)、默认复用已在跑的服务(二次启动更快),且 GUI 启动时不闪黑色控制台。\n同时它对**不属于自己的进程零伤害**:端口被占不会去\"抢\"或杀掉占用者,而是换端口;关窗时也只停\n归属可证的实例(见[实例识别与安全边界](#实例识别与安全边界))。\n\n**边界**:它**不承载任何 Harness 逻辑**——`/api` 的执行/读写库、workflow 等能力全部由 `dsh`\n负责,本壳只负责把 Web UI 包进 Windows 窗口。\n\n需求与设计见[产品 PRD](docs/dsh-desktop-prd.md)(V1.2)与[技术设计](docs/dsh-desktop-technical-design.md)。\n\n---\n\n## 目录\n\n- [环境要求](#环境要求)\n- [安装与更新](#安装与更新)\n- [快速上手](#快速上手)\n- [配置](#配置)\n- [实例识别与安全边界](#实例识别与安全边界)\n- [构建](#构建)\n- [目录结构](#目录结构)\n- [贡献与安全](#贡献与安全)\n- [许可与商标](#许可与商标)\n- [文档](#文档)\n\n---\n\n## 环境要求\n\n| 场景 | 需要什么 |\n| :-- | :-- |\n| **终端用户**(下载 EXE) | Windows 10 (1803+) / Windows 11;WebView2 Evergreen 运行时(Win11 预装,Win10 需装) |\n| **运行时**(任何场景) | 全局安装 `dsh`(`npm i -g @deepseek-ai/dsh`),且 `node`、`dsh` 均在 `PATH` |\n| **构建者**(从源码) | 额外需要 Go 1.21+(含 CGO)+ GCC/mingw-w64;重建图标时才需要 Node + `sharp` |\n\n---\n\n## 安装与更新\n\n### 1. GitHub Releases 直接下载(终端用户推荐)\n\n到 [Releases](https://github.com/andykwokatgithub/dsh-desktop/releases) 下载\n`dsh-desktop-win-x64.exe`,双击即可。该 EXE 内置自更新:\n\n```powershell\n.\\dsh-desktop.exe --check-update   # 检查是否有新版本(输出到控制台)\n.\\dsh-desktop.exe --update         # 下载并应用,退出(不弹窗体;请重新运行以使用新版本)\n```\n\n> 说明:这两个命令是纯 CLI 命令,结果直接输出到**控制台**(stdout/stderr),并同时写入\n> `%LOCALAPPDATA%\\dsh-desktop\\dsh-desktop.log`,不再弹出原生提示框,也不弹窗体。\n>\n> **控制台同步**:该 EXE 用**控制台子系统**构建(不再用 `-H=windowsgui`),所以 `--version`/\n> `--check-update`/`--update` 在 PowerShell/cmd 中会像普通命令一样**同步等待并内联输出**,无副作用。\n>\n> **GUI 启动**:不带这些 flag 启动时,程序会 `ShowWindow(SW_HIDE)` 隐藏双击产生的控制台窗口\n> (双击有极短暂的黑框闪现);从已有终端(PowerShell/cmd)启动 GUI 时会**复用该终端控制台**,\n> PowerShell 会**阻塞直到窗体关闭**,或在已有实例时激活现有窗体并快速退出。\n\n### 2. npm / `dsh plugin`(插件市场发现与一键管理)\n\n本项目是 DSH 插件 bundle(npm 包,`package.json` 声明了 `dsh.bundle`),可被插件市场\n(dshmarket 等)发现并一键安装:\n\n```powershell\n# 通过 npm 全局安装\nnpm i -g @andykwok/dsh-desktop\ndsh-desktop\n\n# 通过 dsh 插件系统安装到某个 profile(会初始化/复用该 profile)\ndsh plugin --profile web add github:andykwokatgithub/dsh-desktop\n```\n\n更新:\n\n```powershell\nnpm update -g @andykwok/dsh-desktop   # npm 途径\ndsh plugin --profile web update          # dsh 插件途径(自动激活升到新版本的 bundle)\n```\n\n> 注:`dsh plugin add github:...` 会安装 git 源并运行包的脚本;pnpm 可能要求先在 profile 的\n> `pnpm-workspace.yaml` 的 `allowBuilds` 里放行本包,命令失败时按 pnpm 提示操作即可。\n> **npm 途径安装后,命令是 `dsh-desktop`(不带 `.exe`)**,没有 install 脚本——预编译 EXE 已内置,\n> 首次运行 `dsh-desktop` 时自动拷贝到 `%LOCALAPPDATA%\\dsh-desktop\\dsh-desktop.exe`(不在 PATH)并启动,\n> 不联网。\n\n### 3. 从源码构建(贡献者)\n\n见[构建](#构建)。\n\n---\n\n## 快速上手\n\n```powershell\n# 通过 npm / dsh plugin 安装后,命令是 dsh-desktop(不带 .exe):\ndsh-desktop\n\n# 直接使用从 GitHub 下载或本地构建的 EXE:\n.\\dsh-desktop.exe\n```\n\n> npm 安装后,真正的二进制在 `C:\\Users\\<你>\\AppData\\Local\\dsh-desktop\\dsh-desktop.exe`,并不在\n> PATH 上;`dsh-desktop` 命令会把它拷贝到位并启动。想直接双击/引用它,可用上面这个路径。\n\n典型场景:\n\n- **冷启动**(服务未跑):自动 `dsh web --no-open` 拉起服务,先显示加载态,健康后再跳转 UI。\n- **热启动**(服务已在跑,且是本壳启动的):健康校验通过后直接复用,快速进入(≤3s)。\n- **认证失效自愈**(自有实例的 cookie 失效/过期):自动停掉该**自有**实例并以新 token 重新拉起,\n  不把用户留在 401 页面上;非本壳实例不会被停,只转 token 输入页。\n- **附着别人的实例**(端口上是你自己 `dsh web` 起的实例):先按持久化 cookie 直接进入;若取不到\n  验证(cookie 失效/过期)则显示 **token 输入页**——把 `dsh web` 打印的整条认证 URL(或裸 token)\n  粘进去即可附着,也可以点\"改用本应用自己的实例\"在 ≥10000 端口自建一个。\n- **端口被别的进程占用**(非 dsh):**不动占用者**,自动在 `10000-65535` 里挑一个空闲端口自建,\n  占用者身份写入日志。\n- **重复启动**(窗口已存在):激活已有窗口并置顶(即使最小化),新进程立即退出。\n\n> 所有交互(加载/错误/token/更新询问)都由窗口内的**本地 HTML 页**承载,由 `Bind` 桥接回调 Go。\n> **参数/配置错误一律走控制台**(stderr,exit code 2,同时写入\n> `%LOCALAPPDATA%\\dsh-desktop\\dsh-desktop.log`),**不弹原生对话框**——参数写错的人一定是在终端/shortcut\n> 里发起的,错误就该留在他看的那个终端里。原生 MessageBox 只保留给窗口创建前的**非命令行**失败\n> (单实例/建窗),窗口创建之后的错误一律显示在页面上(错误原因可注入、可重试)。\n\n---\n\n## 配置\n\n命令行 flags(`--url` `--host` `--port` `--command` `--stop-on-exit` `--devtools` `--context-menu`\n`--startup-timeout` `--poll-ms` `--width` `--height` `--title` `--version` `--check-update` `--update`):\n\n| Flag | 默认值 | 说明 |\n| :-- | :-- | :-- |\n| `--url` | （空，自动派生） | 可选覆盖:要附着的 DSH Web UI 地址,可携带启动 token(`--url \"http://127.0.0.1:34567/?token=…\"`)。**未**显式给 `--host`/`--port` 时,URL 的 host/port 会被采纳;若与显式 `--host`/`--port` 冲突则报错。URL 必须含**显式端口** |\n| `--host` | `127.0.0.1` | 健康探测与 spawn 的绑定 host(校验阶段即拒绝 `0.0.0.0`) |\n| `--port` | `3080` | `dsh web` 的监听端口(1-65535);被非 dsh 进程占用时自动改用 `10000-65535` 的空闲端口 |\n| `--command` | `web` | 要 spawn 的 `dsh` 子命令(`web` = `--profile web` 别名) |\n| `--stop-on-exit` | `false` | 关闭窗口时是否同时停止 dsh 服务(默认保留,二次启动更快)。只停**本壳自己的、归属可证**的实例(含本壳**上一次**运行启动的实例);附着或他人启动的实例**永不**停止 |\n| `--devtools` | `false` | 开启 WebView2 开发者工具(安全默认:关闭) |\n| `--context-menu` | `true` | 保留 WebView2 默认右键菜单(默认开启;如需禁用传 `--context-menu=false`) |\n| `--startup-timeout` | `30` | 等待服务就绪的超时(秒,须>0) |\n| `--poll-ms` | `500` | 健康校验轮询间隔(毫秒,须>0) |\n| `--width` | `1200` | 窗口宽度(须>0) |\n| `--height` | `800` | 窗口高度(须>0) |\n| `--title` | `DeepSeek Harness Desktop {version}` | 窗口标题(仅用于显示;单实例定位不依赖标题)。默认带 `{version}` 占位符,展开为运行时版本(如 `DeepSeek Harness Desktop 0.3.2`);自定义标题不含占位符时**原样显示**,需要显示版本就自己写上 `{version}` |\n| `--version` | `false` | 打印版本并退出 |\n| `--check-update` | `false` | 检查 GitHub Releases 是否有新版本并退出 |\n| `--update` | `false` | 下载并应用最新版本,然后退出 |\n\n> 参数校验：`--host/--port/--width/--height/--startup-timeout/--poll-ms/--url` 在启动前做语义校验，\n> 值非法即**在控制台**报错并退出(exit code 2,写入 `%LOCALAPPDATA%\\dsh-desktop\\dsh-desktop.log`),\n> **既不弹原生对话框、也不开窗口**。错误只打印**一次**且**跟随系统语言**(中文/英文),未知 flag 会附带\n> 最接近的建议,随后是该语言的用法,例如:\n>\n> ```text\n> $ dsh-desktop --updaetg\n> 配置错误: 未知参数 --updaetg（是否想用 --update？）\n> 用法: dsh-desktop [选项]\n>\n> 选项:\n>   --check-update            检查 GitHub Releases 是否有新版本并退出\n>   --command                要启动的 dsh 子命令 (web)  (默认 web)\n>   ...\n> ```\n>\n> 同类消息还有 `参数 --port 的取值 \"abc\" 无效`、`参数 --port 缺少取值`、`参数 --port 必须在 1-65535 之间,\n> 当前为 70000` 等;英文系统下分别是 `unknown flag --updaetg (did you mean --update?)`、\n> `invalid value \"abc\" for flag --port`、`flag --port needs an argument`、`--port must be between 1 and 65535, got 70000`。\n> 规范写法为双横杠 `--flag`；Go 的 `flag` 包同时兼容单横杠 `-flag` 输入。\n>\n> **`--help` 文案跟随系统语言**:优先取 `LC_ALL`/`LC_MESSAGES`/`LANG`,未设置时回退 Windows 用户界面\n> 语言(`GetUserDefaultUILanguage`)——中文系统显示中文,其他显示英文。`--check-update`/`--update`\n> 的控制台输出同样如此。\n\n---\n\n## 实例识别与安全边界\n\n本壳对\"端口上的 dsh 是谁起的\"分三层判定,结论决定它**复用**、**附着**还是**避让**:\n\n| 层 | 判据 | 命中后的行为 |\n| :-- | :-- | :-- |\n| **L1 归属记录** | `%LOCALAPPDATA%\\dsh-desktop\\web-endpoint.json`:`spawnerPid`(本壳 spawn 的 `cmd.exe` 包装器)是**本壳直接子进程**或仍以记录中的启动时间在运行 ⇒ 肯定是本壳启动的;`listenerPid` + 进程启动时间(±1s)仍与当前监听者一致也判定为本壳启动的 | 健康则直接复用(带持久化 cookie) |\n| **L2 强证据** | 监听 PID 的命令行含 `@deepseek-ai\\dsh`/`deepseek-harness`/`dsh web`/`…\\dsh\\lib\\bin.js` 等强关键字 | 健康则先按 cookie 附着;取不到验证转 token 输入页 |\n| **L3 弱证据** | 裸 `dsh`、`--port <该端口>` 这类弱关键字(本壳自身的 `dsh-desktop.exe --port …` 也会命中) | 不足以判定为 dsh,只作参考 |\n\n判定与终止的安全约定:\n\n- 监听者身份来自 **Win32 API**(`GetExtendedTcpTable(TCP_TABLE_OWNER_PID_LISTENER)` 取监听 PID、\n  `QueryFullProcessImageNameW` 取镜像、`NtQueryInformationProcess` 取命令行),**不解析 `netstat` 文本**、\n  不 spawn PowerShell/CIM;HTTP 侧认 dsh 的**认证边界**(`200`/`303`,或 `401` + 认证栅栏文案),\n  不是\"只看 200\"。\n- **终止进程必须有证明**:`--stop-on-exit` 与认证栅栏自愈都走 `service.StopOwned`。归属是**一条血脉**,\n  不是单个 PID:主目标是本壳 spawn 的 `cmd.exe` **包装器进程树**(`spawnerPid`)——它随实例终生存在,\n  `taskkill /T` 能连带干掉当前真正服务端口的进程(哪怕服务进程换了 PID、记录里的监听 PID 已过期);\n  记录中的监听 PID 作为第二目标。终止前必须有证明:包装器是**本壳的直接子进程**(本次启动),或它仍以\n  **记录中的启动时间**在运行(上一次启动,跨会话可证);监听 PID 则以\"记录中的启动时间仍一致\"为证。\n  证明不成立就**放弃终止**并如实记日志——但**绝不假装成功**:端口上仍有实例而无法证明归属时报\n  `ErrNotOwned`,实例已退出则记\"无需停止\"(宁可不杀,也不误杀)。\n- **任何分支都不终止端口占用者**:端口被别人占用时只换端口,不做抢占或清理。\n- **token 是凭据**:只在页面 → Go → `Navigate(?token=…)` 之间于内存流转,**不落盘、不入日志**;\n  日志只记 `host:port` 与占用者身份。\n\n---\n\n## 构建\n\n推荐(也会内嵌 DeepSeek 图标):\n\n```powershell\n.\\build.ps1\n```\n\n或直接构建(默认即 console 子系统,无需 `-H=windowsgui`):\n\n```powershell\ngo build -o dsh-desktop.exe .\n```\n\n版本号可通过 `build.ps1 -Version X.Y.Z` 或 `-ldflags` 注入:\n\n```powershell\n.\\build.ps1 -Version 1.2.3\ngo run . -version   # -> dsh-desktop 1.2.3\n```\n\n> **构建形态**:出于让 CLI 命令在 PowerShell/cmd 中同步输出等考量,EXE 用 **console 子系统**构建\n> (不再用 `-H=windowsgui`)。GUI 运行时 `main.hideConsole()` 会隐藏双击产生的控制台窗口(有极短的\n> 黑框闪现);从已有终端启动 GUI 时复用该终端控制台,PowerShell 会阻塞直到窗体关闭。\n> **参数错误在 `hideConsole()` 之前就打印并退出**,所以终端里一定看得到,不会弹对话框。\n> `webview_go` 依赖 CGO,需要本机 Windows + GCC;不能跨平台交叉编译。\n> 运行 `dsh-desktop.exe` 会真的拉起 `dsh web`,不要在无 DSH 环境时盲目运行;验证请用\n> `go run . -version` 或单测。\n\n### 应用图标\n\n- `assets/deepseek.ico`(16–256px)、`assets/deepseek-256.png`。\n- `tools/make-icon.mjs` 用 `sharp` 从官方 SVG 重新生成 ICO。\n- `rsrc_windows_amd64.syso` 内嵌图标;`build.ps1` 在 ICO 更新时自动用\n  `github.com/akavel/rsrc` 重建。\n\n---\n\n## 目录结构\n\n```\nmain.go                         入口(配置→单实例→建窗→启动决策:复用/附着/token/自建;含自更新命令)\ninternal/appdir/                %LOCALAPPDATA%\\dsh-desktop 状态目录(日志/端点记录)\ninternal/config/                运行配置与 flag;Version 常量;系统语言检测(中文/英文文案)\ninternal/service/               服务探测/spawn/生命周期;端点归属记录;回退端口;token 解析与校验\ninternal/procinfo/              端口占用者识别:监听 PID/镜像路径/命令行 + DSH 关键字匹配(纯 Win32)\ninternal/singleinstance/        互斥体+原生窗口类+激活消息+Win32 封装\ninternal/update/                GitHub Releases 自更新(校验+下载+应用)\ninternal/webview/               安全脚本/外链交接/认证栅栏探测 + 页面 Bind 桥接\ninternal/ui/                    go:embed 的 loading/error/token 页\nbin/                            npm 启动器\nscripts/fetch-exe.mjs           下载并校验预编译 EXE(npm postinstall)\ncordis.patch.yml                DSH bundle patch 层(市场/插件系统识别)\nassets/                         应用图标\ntools/make-icon.mjs             用 SVG 重新生成 .ico\nrsrc_windows_amd64.syso         嵌入图标的资源对象\nbuild.ps1                       一键构建\n.github/workflows/              CI 与发版流水线\ndocs/                           PRD + 技术设计 + 发布指南\n```\n\n---\n\n## 贡献与安全\n\n- **贡献**:环境要求、开发命令与提交约定见[`CONTRIBUTING.md`](CONTRIBUTING.md)。\n- **安全**:漏报私报方式、下载/更新校验与品牌资产关注点见[`SECURITY.md`](SECURITY.md)。\n- **变更日志**:见[`CHANGELOG.md`](CHANGELOG.md)(Keep a Changelog + 语义化版本)。\n\n---\n\n## 许可与商标\n\nMIT License(详见[`LICENSE`](LICENSE))。项目内置的 DeepSeek 鲸鱼图标及其品牌元素属于\nDeepSeek 方,本许可**不**授予商标/Logo/品牌资产使用权,相关使用需另行取得品牌方许可。\n\n---\n\n## 文档\n\n- 需求基线:[`docs/dsh-desktop-prd.md`](docs/dsh-desktop-prd.md)\n- 技术设计:[`docs/dsh-desktop-technical-design.md`](docs/dsh-desktop-technical-design.md)\n- 发布/收录/安装/更新指南(面向市场与维护者):[`docs/publish.md`](docs/publish.md)\n- README 自身的需求基线:[`docs/dsh-desktop-readme-prd.md`](docs/dsh-desktop-readme-prd.md)\n","readmeFilename":"README.md"}