{"_id":"@alexpeng/dsh-custom-plugin","_rev":"12-0132c51b67ce3d6e559fd7815c0d7e87","name":"@alexpeng/dsh-custom-plugin","dist-tags":{"latest":"0.6.0"},"versions":{"0.1.0":{"name":"@alexpeng/dsh-custom-plugin","version":"0.1.0","license":"Apache-2.0","_id":"@alexpeng/dsh-custom-plugin@0.1.0","maintainers":[{"name":"alexpeng","email":"alexpeng07@outlook.com"}],"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"inject":["@deepseek-ai/dsh-client-runtime"],"platform":"web"}},"dist":{"shasum":"c92aa993c4c668d7aab2dd82cf38672cb177ab4c","tarball":"https://registry.npmjs.org/@alexpeng/dsh-custom-plugin/-/dsh-custom-plugin-0.1.0.tgz","fileCount":25,"integrity":"sha512-AThmh7U+B3Aga/FkfwRlW8zA6x0EeX8uy8eRq2M8ajO+zb15t3qmbbSJqmQUv4q4ffG4rxNo3ZVyPi5d9beYqA==","signatures":[{"sig":"MEUCIQCl0k/Vz9BM8meA+gbVOezq9hizXqie6I5wdEKc070IdgIgJL9tSo0nKf/RzD9PTSCkXDrJJSyaspoZriSp00nSzls=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":724488},"main":"lib/index.js","type":"module","types":"lib/types/index.d.ts","exports":{".":{"types":"./lib/types/index.d.ts","default":"./lib/index.js"},"./src/*":"./src/*","./client":{"types":"./lib/types/client/index.d.ts","default":"./lib/client.js"},"./package.json":"./package.json"},"gitHead":"809815f38df7b55a97a1c34d19dbf670702d54f3","scripts":{"test":"vitest run","build":"tsc -p tsconfig.build.json && tsdown","watch":"tsdown --watch","bundle":"tsdown","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"alexpeng","email":"alexpeng07@outlook.com"},"_npmVersion":"11.17.0","description":"Custom convenience suite for the dsh web GUI: background colors with weather FX, liquid glass, a per-user-message timeline rail with stars and branching, multi-level project folders, prompt library, conversation export (JSON / Markdown / PDF-with-images),","directories":{},"_nodeVersion":"24.19.0","dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^25.0.0","react":"^18.3.1","tsdown":"0.22.2","vitest":"^3.0.0","react-dom":"^18.3.1","typescript":"~5.7.2","@types/node":"^22.20.0","@types/react":"~18.3.1","@types/react-dom":"^18.3.5","@deepseek-ai/cordis":"^4.0.1","@deepseek-ai/dsh-llm":"^0.1.1-rc.1","@deepseek-ai/dsh-tools":"^0.1.1-rc.1","@deepseek-ai/dsh-session":"^0.1.1-rc.1","@deepseek-ai/dsh-settings":"^0.1.1-rc.1","@deepseek-ai/dsh-attachment":"^0.1.1-rc.1","@deepseek-ai/dsh-client-locale":"^0.1.1-rc.1","@deepseek-ai/dsh-session-query":"^0.1.1-rc.1","@deepseek-ai/dsh-system-prompt":"^0.1.1-rc.1","@deepseek-ai/dsh-client-runtime":"^0.1.1-rc.1","@deepseek-ai/dsh-host-webserver":"^0.1.1-rc.1","@deepseek-ai/dsh-client-ui-slots":"^0.1.1-rc.1","@deepseek-ai/dsh-client-ui-theme":"^0.1.1-rc.1","@deepseek-ai/dsh-client-ui-conversation":"^0.1.1-rc.1"},"peerDependencies":{"@deepseek-ai/cordis":"^4.0.1"},"_npmOperationalInternal":{"tmp":"tmp/dsh-custom-plugin_0.1.0_1787409934553_0.907975106537988","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@alexpeng/dsh-custom-plugin","version":"0.1.1","author":"AlexPeng <alexpeng07@outlook.com>","license":"Apache-2.0","_id":"@alexpeng/dsh-custom-plugin@0.1.1","maintainers":[{"name":"alexpeng","email":"alexpeng07@outlook.com"}],"homepage":"https://github.com/AlexPeng07/dsh-custom-plugin#readme","bugs":"https://github.com/AlexPeng07/dsh-custom-plugin/issues","dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"inject":["@deepseek-ai/dsh-client-runtime"],"platform":"web"}},"dist":{"shasum":"56ab9eb5b108fbfe1f10bd157b08523b4c9310d9","tarball":"https://registry.npmjs.org/@alexpeng/dsh-custom-plugin/-/dsh-custom-plugin-0.1.1.tgz","fileCount":25,"integrity":"sha512-CTnkJ6mud3r81L4A4yCArLSQHldnHLyPNBZEquVp0oY1q0rnuNDx0geAiz8YjHR2AT5xhu52hbMVpiI0EbBYMA==","signatures":[{"sig":"MEUCIQC+QNIDENvRb//vhC/whUINw5K5CllbUjJBFTcFpxMlMAIgBYTxS0rBCBsvMpzOpGxilCyfdXY//66BguMBj4iv/bs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":525573},"main":"lib/index.js","type":"module","types":"lib/types/index.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./lib/types/index.d.ts","default":"./lib/index.js"},"./client":{"types":"./lib/types/client/index.d.ts","default":"./lib/client.js"},"./package.json":"./package.json"},"scripts":{"test":"vitest run","build":"tsc -p tsconfig.build.json && tsdown","watch":"tsdown --watch","bundle":"tsdown","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"alexpeng","email":"alexpeng07@outlook.com"},"repository":{"url":"git+https://github.com/AlexPeng07/dsh-custom-plugin.git","type":"git"},"description":"Custom convenience suite for the dsh web GUI: background colors with weather FX, liquid glass, a per-user-message timeline rail with stars and branching, multi-level project folders, prompt library, conversation export (JSON / Markdown / PDF-with-images),","directories":{},"_nodeVersion":"24.19.0","dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"react":"^18.3.1","tsdown":"0.22.2","vitest":"^3.0.0","react-dom":"^18.3.1","typescript":"~5.7.2","@types/node":"^22.20.0","@types/react":"~18.3.1","@types/react-dom":"^18.3.5","@deepseek-ai/cordis":"^4.0.1","@deepseek-ai/dsh-llm":"^0.1.1-rc.1","@deepseek-ai/dsh-tools":"^0.1.1-rc.1","@deepseek-ai/dsh-session":"^0.1.1-rc.1","@deepseek-ai/dsh-attachment":"^0.1.1-rc.1","@deepseek-ai/dsh-session-query":"^0.1.1-rc.1","@deepseek-ai/dsh-client-runtime":"^0.1.1-rc.1","@deepseek-ai/dsh-host-webserver":"^0.1.1-rc.1","@deepseek-ai/dsh-client-ui-slots":"^0.1.1-rc.1","@deepseek-ai/dsh-client-ui-theme":"^0.1.1-rc.1"},"peerDependencies":{"@deepseek-ai/cordis":"^4.0.1","@deepseek-ai/dsh-tools":"^0.1.1-rc.1"},"_npmOperationalInternal":{"tmp":"tmp/dsh-custom-plugin_0.1.1_1787416000865_0.36941480939068927","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@alexpeng/dsh-custom-plugin","version":"0.1.2","author":{"name":"AlexPeng","email":"alexpeng07@outlook.com"},"license":"Apache-2.0","_id":"@alexpeng/dsh-custom-plugin@0.1.2","maintainers":[{"name":"alexpeng","email":"alexpeng07@outlook.com"}],"homepage":"https://github.com/AlexPeng07/dsh-custom-plugin#readme","bugs":{"url":"https://github.com/AlexPeng07/dsh-custom-plugin/issues"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"inject":["@deepseek-ai/dsh-client-runtime"],"platform":"web"}},"dist":{"shasum":"c607cc1a3851fc3de6b0f4555c8106796baf3a3a","tarball":"https://registry.npmjs.org/@alexpeng/dsh-custom-plugin/-/dsh-custom-plugin-0.1.2.tgz","fileCount":26,"integrity":"sha512-/be/MNzSJC9kiplwYtEuw6NGlaoFLtpxaMT0nmtz/JRfq4WpbrpWd53OW8S03z1AnOhuPZEnFE0Q5J7lAtjnKA==","signatures":[{"sig":"MEYCIQC2p3JT011FPB6HoTGqc43HAT9jEk/DfXtrbb/GB1WJWQIhAN7/pFIcjIx2pZB7Dv1v/ZC8HNe893ZG4JYmuAVBL/1D","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":566641},"main":"lib/index.js","type":"module","types":"lib/types/index.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./lib/types/index.d.ts","default":"./lib/index.js"},"./client":{"types":"./lib/types/client/index.d.ts","default":"./lib/client.js"},"./package.json":"./package.json"},"gitHead":"b0dcdb5e92f6ca107d0873d3baae98765d91af7a","scripts":{"test":"vitest run","build":"tsc -p tsconfig.build.json && tsdown","watch":"tsdown --watch","bundle":"tsdown","prepare":"pnpm build","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"pnpm typecheck && pnpm test"},"_npmUser":{"name":"alexpeng","email":"alexpeng07@outlook.com"},"repository":{"url":"git+https://github.com/AlexPeng07/dsh-custom-plugin.git","type":"git"},"_npmVersion":"11.17.0","description":"Custom convenience suite for the dsh web GUI: background colors with weather FX, liquid glass, a per-user-message timeline rail with stars and branching, multi-level project folders, prompt library, conversation export (JSON / Markdown / PDF-with-images),","directories":{},"_nodeVersion":"24.19.0","dependencies":{"mermaid":"^11.6.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"react":"^18.3.1","tsdown":"0.22.2","vitest":"^3.0.0","react-dom":"^18.3.1","typescript":"~5.7.2","@types/node":"^22.20.0","@types/react":"~18.3.1","@types/react-dom":"^18.3.5","@deepseek-ai/cordis":"^4.0.1","@deepseek-ai/dsh-llm":"^0.1.1-rc.1","@deepseek-ai/dsh-tools":"^0.1.1-rc.1","@deepseek-ai/dsh-session":"^0.1.1-rc.1","@deepseek-ai/dsh-attachment":"^0.1.1-rc.1","@deepseek-ai/dsh-session-query":"^0.1.1-rc.1","@deepseek-ai/dsh-client-runtime":"^0.1.1-rc.1","@deepseek-ai/dsh-host-webserver":"^0.1.1-rc.1","@deepseek-ai/dsh-client-ui-slots":"^0.1.1-rc.1","@deepseek-ai/dsh-client-ui-theme":"^0.1.1-rc.1"},"peerDependencies":{"@deepseek-ai/cordis":"^4.0.1","@deepseek-ai/dsh-tools":"^0.1.1-rc.1"},"_npmOperationalInternal":{"tmp":"tmp/dsh-custom-plugin_0.1.2_1787458170559_0.23734036141105452","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@alexpeng/dsh-custom-plugin","version":"0.1.3","author":{"name":"AlexPeng","email":"alexpeng07@outlook.com"},"license":"Apache-2.0","_id":"@alexpeng/dsh-custom-plugin@0.1.3","maintainers":[{"name":"alexpeng","email":"alexpeng07@outlook.com"}],"homepage":"https://github.com/AlexPeng07/dsh-custom-plugin#readme","bugs":{"url":"https://github.com/AlexPeng07/dsh-custom-plugin/issues"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"inject":["@deepseek-ai/dsh-client-runtime"],"platform":"web"}},"dist":{"shasum":"5e9a6ccf60e69d477630e145edd1de56380694fc","tarball":"https://registry.npmjs.org/@alexpeng/dsh-custom-plugin/-/dsh-custom-plugin-0.1.3.tgz","fileCount":27,"integrity":"sha512-gae6z+vH/ZnTHSqHxhGDHom4rBh39om5tAd0RV1nddZszAenJ9E6Mekuksd2tKA3K5s0PWwzsUCDqjcMgdCR0g==","signatures":[{"sig":"MEYCIQDJ7jofiD54B0uVTH8fGZOwjx0P+EcKIGVd8BU98004PgIhAPrzdk2myp3EDV8A/wCOqbyqXTC7lfSd0cJSikEWACMH","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":573351},"main":"lib/index.js","type":"module","types":"lib/types/index.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./lib/types/index.d.ts","default":"./lib/index.js"},"./client":{"types":"./lib/types/client/index.d.ts","default":"./lib/client.js"},"./package.json":"./package.json"},"gitHead":"9c6433d213350123fa7fb61d34d356a2e7949c1a","scripts":{"test":"vitest run","build":"tsc -p tsconfig.build.json && tsdown","smoke":"node scripts/smoke.mjs","watch":"tsdown --watch","bundle":"tsdown","prepare":"pnpm build","typecheck":"tsc --noEmit","test:watch":"vitest","check:readme":"node scripts/check-readme-i18n.mjs","prepublishOnly":"pnpm typecheck && pnpm test"},"_npmUser":{"name":"alexpeng","email":"alexpeng07@outlook.com"},"repository":{"url":"git+https://github.com/AlexPeng07/dsh-custom-plugin.git","type":"git"},"_npmVersion":"11.17.0","description":"Custom convenience suite for the dsh web GUI: background colors with weather FX, liquid glass, a per-user-message timeline rail with stars and branching, multi-level project folders, prompt library, conversation export (JSON / Markdown / PDF-with-images),","directories":{},"_nodeVersion":"24.19.0","dependencies":{"mermaid":"^11.6.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"react":"^18.3.1","tsdown":"0.22.2","vitest":"^3.0.0","react-dom":"^18.3.1","typescript":"~5.7.2","@types/node":"^22.20.0","@types/react":"~18.3.1","puppeteer-core":"^25.8.0","@types/react-dom":"^18.3.5","@deepseek-ai/cordis":"^4.0.1","@deepseek-ai/dsh-llm":"^0.1.1-rc.1","@deepseek-ai/dsh-tools":"^0.1.1-rc.1","@deepseek-ai/dsh-session":"^0.1.1-rc.1","@deepseek-ai/dsh-attachment":"^0.1.1-rc.1","@deepseek-ai/dsh-session-query":"^0.1.1-rc.1","@deepseek-ai/dsh-client-runtime":"^0.1.1-rc.1","@deepseek-ai/dsh-host-webserver":"^0.1.1-rc.1","@deepseek-ai/dsh-client-ui-slots":"^0.1.1-rc.1","@deepseek-ai/dsh-client-ui-theme":"^0.1.1-rc.1"},"peerDependencies":{"@deepseek-ai/cordis":"^4.0.1","@deepseek-ai/dsh-tools":"^0.1.1-rc.1"},"_npmOperationalInternal":{"tmp":"tmp/dsh-custom-plugin_0.1.3_1787467140499_0.2676294885083592","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@alexpeng/dsh-custom-plugin","version":"0.1.4","author":"AlexPeng <alexpeng07@outlook.com>","license":"Apache-2.0","_id":"@alexpeng/dsh-custom-plugin@0.1.4","maintainers":[{"name":"alexpeng","email":"alexpeng07@outlook.com"}],"homepage":"https://github.com/AlexPeng07/dsh-custom-plugin#readme","bugs":"https://github.com/AlexPeng07/dsh-custom-plugin/issues","dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"inject":["@deepseek-ai/dsh-client-runtime"],"platform":"web"}},"dist":{"shasum":"1fd72f5422990b654371954be87fbf003882d22d","tarball":"https://registry.npmjs.org/@alexpeng/dsh-custom-plugin/-/dsh-custom-plugin-0.1.4.tgz","fileCount":29,"integrity":"sha512-NHX0ZVdZ+8yS+hFoumEhH5hA6mWChTySy5vz7DghDXk+FCQc7CCnuvjXmsYY/OOPIIwDjQ1HW4RoDw4xepv8VA==","signatures":[{"sig":"MEQCIEnHSp4vJmBNbTts93p3nYjssm+0vEPINhuDO2+pz72wAiBU5J6+QcpMO+3QyIQ3k0gUi/ShEDgoemCMX22Pg8kjiA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":600963},"main":"lib/index.js","type":"module","types":"lib/types/index.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./lib/types/index.d.ts","default":"./lib/index.js"},"./client":{"types":"./lib/types/client/index.d.ts","default":"./lib/client.js"},"./package.json":"./package.json"},"scripts":{"test":"vitest run","build":"tsc -p tsconfig.build.json && tsdown","smoke":"node scripts/smoke.mjs","watch":"tsdown --watch","bundle":"tsdown","typecheck":"tsc --noEmit","test:watch":"vitest","check:readme":"node scripts/check-readme-i18n.mjs"},"_npmUser":{"name":"alexpeng","email":"alexpeng07@outlook.com"},"repository":{"url":"git+https://github.com/AlexPeng07/dsh-custom-plugin.git","type":"git"},"description":"Custom convenience suite for the dsh web GUI: background colors with weather FX, liquid glass, a per-user-message timeline rail with stars and branching, multi-level project folders, prompt library, conversation export (JSON / Markdown / PDF-with-images),","directories":{},"_nodeVersion":"24.19.0","dependencies":{"mermaid":"^11.6.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"react":"^18.3.1","tsdown":"0.22.2","vitest":"^3.0.0","react-dom":"^18.3.1","typescript":"~5.7.2","@types/node":"^22.20.0","@types/react":"~18.3.1","puppeteer-core":"^25.8.0","@types/react-dom":"^18.3.5","@deepseek-ai/cordis":"^4.0.1","@deepseek-ai/dsh-llm":"^0.1.1-rc.1","@deepseek-ai/dsh-tools":"^0.1.1-rc.1","@deepseek-ai/dsh-session":"^0.1.1-rc.1","@deepseek-ai/dsh-attachment":"^0.1.1-rc.1","@deepseek-ai/dsh-session-query":"^0.1.1-rc.1","@deepseek-ai/dsh-client-runtime":"^0.1.1-rc.1","@deepseek-ai/dsh-host-webserver":"^0.1.1-rc.1","@deepseek-ai/dsh-client-ui-slots":"^0.1.1-rc.1","@deepseek-ai/dsh-client-ui-theme":"^0.1.1-rc.1"},"peerDependencies":{"@deepseek-ai/cordis":"^4.0.1","@deepseek-ai/dsh-tools":"^0.1.1-rc.1"},"optionalDependencies":{"keytar":"7.9.0"},"_npmOperationalInternal":{"tmp":"tmp/dsh-custom-plugin_0.1.4_1787720884626_0.4760926488239403","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"@alexpeng/dsh-custom-plugin","version":"0.1.5","author":"AlexPeng <alexpeng07@outlook.com>","license":"Apache-2.0","_id":"@alexpeng/dsh-custom-plugin@0.1.5","maintainers":[{"name":"alexpeng","email":"alexpeng07@outlook.com"}],"homepage":"https://github.com/AlexPeng07/dsh-custom-plugin#readme","bugs":"https://github.com/AlexPeng07/dsh-custom-plugin/issues","dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"inject":["@deepseek-ai/dsh-client-runtime"],"platform":"web"}},"dist":{"shasum":"78555e563e2c70c1630971bdce6c0889fc1932bd","tarball":"https://registry.npmjs.org/@alexpeng/dsh-custom-plugin/-/dsh-custom-plugin-0.1.5.tgz","fileCount":29,"integrity":"sha512-tXrPxWuWHrG5ZHZuoByyyicyKRCI8X24KiqsWxH65qtMzHaxwL+/P938KgEmEUEibm/cUgRGm7IPDKGGV8Qv5A==","signatures":[{"sig":"MEUCIH+IOxmKGJbNGCj4T1v5pXKScRhwqXwn+8sphYRyLeW3AiEA2rjjvbsVwOaYIKU+zqfveHBKiq+PE164/Cc4xtEYmi4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":607293},"main":"lib/index.js","type":"module","types":"lib/types/index.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./lib/types/index.d.ts","default":"./lib/index.js"},"./client":{"types":"./lib/types/client/index.d.ts","default":"./lib/client.js"},"./package.json":"./package.json"},"scripts":{"test":"vitest run","build":"tsc -p tsconfig.build.json && tsdown","smoke":"node scripts/smoke.mjs","watch":"tsdown --watch","bundle":"tsdown","typecheck":"tsc --noEmit","test:watch":"vitest","check:readme":"node scripts/check-readme-i18n.mjs"},"_npmUser":{"name":"alexpeng","email":"alexpeng07@outlook.com"},"repository":{"url":"git+https://github.com/AlexPeng07/dsh-custom-plugin.git","type":"git"},"description":"Custom convenience suite for the dsh web GUI: background colors with weather FX, liquid glass, a per-user-message timeline rail with stars and branching, multi-level project folders, prompt library, conversation export (JSON / Markdown / PDF-with-images),","directories":{},"_nodeVersion":"24.19.0","dependencies":{"mermaid":"^11.6.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"react":"^18.3.1","tsdown":"0.22.2","vitest":"^3.0.0","react-dom":"^18.3.1","typescript":"~5.7.2","@types/node":"^22.20.0","@types/react":"~18.3.1","puppeteer-core":"^25.8.0","@types/react-dom":"^18.3.5","@deepseek-ai/cordis":"^4.0.1","@deepseek-ai/dsh-llm":"^0.1.1-rc.1","@deepseek-ai/dsh-tools":"^0.1.1-rc.1","@deepseek-ai/dsh-session":"^0.1.1-rc.1","@deepseek-ai/dsh-attachment":"^0.1.1-rc.1","@deepseek-ai/dsh-session-query":"^0.1.1-rc.1","@deepseek-ai/dsh-client-runtime":"^0.1.1-rc.1","@deepseek-ai/dsh-host-webserver":"^0.1.1-rc.1","@deepseek-ai/dsh-client-ui-slots":"^0.1.1-rc.1","@deepseek-ai/dsh-client-ui-theme":"^0.1.1-rc.1"},"peerDependencies":{"@deepseek-ai/cordis":"^4.0.1","@deepseek-ai/dsh-tools":"^0.1.1-rc.1"},"optionalDependencies":{"keytar":"7.9.0"},"_npmOperationalInternal":{"tmp":"tmp/dsh-custom-plugin_0.1.5_1787735590824_0.41466547288129973","host":"s3://npm-registry-packages-npm-production"}},"0.1.6":{"name":"@alexpeng/dsh-custom-plugin","version":"0.1.6","author":{"name":"AlexPeng","email":"alexpeng07@outlook.com"},"license":"Apache-2.0","_id":"@alexpeng/dsh-custom-plugin@0.1.6","maintainers":[{"name":"alexpeng","email":"alexpeng07@outlook.com"}],"homepage":"https://github.com/AlexPeng07/dsh-custom-plugin#readme","bugs":{"url":"https://github.com/AlexPeng07/dsh-custom-plugin/issues"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"inject":["@deepseek-ai/dsh-client-runtime"],"platform":"web"}},"dist":{"shasum":"9fe3ed7f4579505978d8b1047eed923863520f9b","tarball":"https://registry.npmjs.org/@alexpeng/dsh-custom-plugin/-/dsh-custom-plugin-0.1.6.tgz","fileCount":29,"integrity":"sha512-MOqB06Pj+4bZqQAW2V90fFDdVapoI0hpf274h8wzoapN09tMs0ChHbJ6FzwT4b2s0kUbTmq1bkp1RqKNyvJ11g==","signatures":[{"sig":"MEYCIQCIf2t1oHYCHW5bGyqoXCkNyWk5EP2H/JmbzzpWWTaHzAIhAL9bWhbFYmp7wNy1i5aXhGolCXd0KEK1cawEex+acK9u","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":615929},"main":"lib/index.js","type":"module","types":"lib/types/index.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./lib/types/index.d.ts","default":"./lib/index.js"},"./client":{"types":"./lib/types/client/index.d.ts","default":"./lib/client.js"},"./package.json":"./package.json"},"gitHead":"c8b9c43e52d61f7149df444eaab17da436f635ae","scripts":{"test":"vitest run","build":"tsc -p tsconfig.build.json && tsdown","smoke":"node scripts/smoke.mjs","watch":"tsdown --watch","bundle":"tsdown","prepare":"pnpm build","typecheck":"tsc --noEmit","test:watch":"vitest","check:readme":"node scripts/check-readme-i18n.mjs","prepublishOnly":"pnpm typecheck && pnpm test"},"_npmUser":{"name":"alexpeng","email":"alexpeng07@outlook.com"},"repository":{"url":"git+https://github.com/AlexPeng07/dsh-custom-plugin.git","type":"git"},"_npmVersion":"11.17.0","description":"Custom convenience suite for the dsh web GUI: background colors with weather FX, liquid glass, a per-user-message timeline rail with stars and branching, multi-level project folders, prompt library, conversation export (JSON / Markdown / PDF-with-images),","directories":{},"_nodeVersion":"24.19.0","dependencies":{"mermaid":"^11.6.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"react":"^18.3.1","tsdown":"0.22.2","vitest":"^3.0.0","react-dom":"^18.3.1","typescript":"~5.7.2","@types/node":"^22.20.0","@types/react":"~18.3.1","puppeteer-core":"^25.8.0","@types/react-dom":"^18.3.5","@deepseek-ai/cordis":"^4.0.1","@deepseek-ai/dsh-llm":"^0.1.1-rc.1","@deepseek-ai/dsh-tools":"^0.1.1-rc.1","@deepseek-ai/dsh-session":"^0.1.1-rc.1","@deepseek-ai/dsh-attachment":"^0.1.1-rc.1","@deepseek-ai/dsh-session-query":"^0.1.1-rc.1","@deepseek-ai/dsh-client-runtime":"^0.1.1-rc.1","@deepseek-ai/dsh-host-webserver":"^0.1.1-rc.1","@deepseek-ai/dsh-client-ui-slots":"^0.1.1-rc.1","@deepseek-ai/dsh-client-ui-theme":"^0.1.1-rc.1"},"peerDependencies":{"@deepseek-ai/cordis":"^4.0.1","@deepseek-ai/dsh-tools":"^0.1.1-rc.1"},"optionalDependencies":{"keytar":"7.9.0"},"_npmOperationalInternal":{"tmp":"tmp/dsh-custom-plugin_0.1.6_1788325020950_0.16945416042134553","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@alexpeng/dsh-custom-plugin","version":"0.4.0","author":{"name":"AlexPeng","email":"alexpeng07@outlook.com"},"license":"Apache-2.0","_id":"@alexpeng/dsh-custom-plugin@0.4.0","maintainers":[{"name":"alexpeng","email":"alexpeng07@outlook.com"}],"homepage":"https://github.com/AlexPeng07/dsh-custom-plugin#readme","bugs":{"url":"https://github.com/AlexPeng07/dsh-custom-plugin/issues"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"inject":["@deepseek-ai/dsh-client-runtime"],"platform":"web"}},"dist":{"shasum":"20fa1166d8c6f5a93c14c22caca666cbb392eac4","tarball":"https://registry.npmjs.org/@alexpeng/dsh-custom-plugin/-/dsh-custom-plugin-0.4.0.tgz","fileCount":31,"integrity":"sha512-mWqwZE/r2otmqgsgiKjkeQQ51kGZIp8NMq2PQkC5pfcOjM/P35JlveCcGGBXsYu6T+SLeIKT0oS+OamPXUJzFw==","signatures":[{"sig":"MEUCIQChoq/wxKCFgxcB6tyBCdokJ1wC82su7urY6RnZyGTuoQIgNs6e3HLRA3loN14JlcIiopeVra7tIW/1NSaMVrj4UNU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":753463},"main":"lib/index.js","type":"module","types":"lib/types/index.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./lib/types/index.d.ts","default":"./lib/index.js"},"./client":{"types":"./lib/types/client/index.d.ts","default":"./lib/client.js"},"./package.json":"./package.json"},"gitHead":"1d470dfd6c7d48f1269f80650c473d0e70c769d7","scripts":{"test":"vitest run","build":"tsc -p tsconfig.build.json && tsdown","smoke":"node scripts/smoke.mjs","watch":"tsdown --watch","bundle":"tsdown","prepare":"pnpm build","typecheck":"tsc --noEmit","test:watch":"vitest","check:readme":"node scripts/check-readme-i18n.mjs","prepublishOnly":"pnpm typecheck && pnpm test"},"_npmUser":{"name":"alexpeng","email":"alexpeng07@outlook.com"},"repository":{"url":"git+https://github.com/AlexPeng07/dsh-custom-plugin.git","type":"git"},"_npmVersion":"11.17.0","description":"Custom convenience suite for the dsh web GUI: appearance, timeline, folders, prompts, session export/search, Mermaid, quote reply, usage analytics, local budget, key-free backups, and a Ctrl/Cmd+K command palette; dual-face plugin mounted without dsh sour","directories":{},"_nodeVersion":"24.19.0","dependencies":{"mermaid":"^11.6.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"react":"^18.3.1","tsdown":"0.22.2","vitest":"^3.0.0","react-dom":"^18.3.1","typescript":"~5.7.2","@types/node":"^22.20.0","@types/react":"~18.3.1","puppeteer-core":"^25.8.0","@types/react-dom":"^18.3.5","@deepseek-ai/cordis":"^4.0.1","@deepseek-ai/dsh-llm":"^0.1.1-rc.1","@deepseek-ai/dsh-tools":"^0.1.1-rc.1","@deepseek-ai/dsh-session":"^0.1.1-rc.1","@deepseek-ai/dsh-attachment":"^0.1.1-rc.1","@deepseek-ai/dsh-session-query":"^0.1.1-rc.1","@deepseek-ai/dsh-client-runtime":"^0.1.1-rc.1","@deepseek-ai/dsh-host-webserver":"^0.1.1-rc.1","@deepseek-ai/dsh-client-ui-slots":"^0.1.1-rc.1","@deepseek-ai/dsh-client-ui-theme":"^0.1.1-rc.1"},"peerDependencies":{"@deepseek-ai/cordis":"^4.0.1","@deepseek-ai/dsh-tools":"^0.1.1-rc.1"},"optionalDependencies":{"keytar":"7.9.0"},"_npmOperationalInternal":{"tmp":"tmp/dsh-custom-plugin_0.4.0_1788573176548_0.4320302586320399","host":"s3://npm-registry-packages-npm-production"}},"0.4.1":{"name":"@alexpeng/dsh-custom-plugin","version":"0.4.1","author":{"name":"AlexPeng","email":"alexpeng07@outlook.com"},"license":"Apache-2.0","_id":"@alexpeng/dsh-custom-plugin@0.4.1","maintainers":[{"name":"alexpeng","email":"alexpeng07@outlook.com"}],"homepage":"https://github.com/AlexPeng07/dsh-custom-plugin#readme","bugs":{"url":"https://github.com/AlexPeng07/dsh-custom-plugin/issues"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"inject":["@deepseek-ai/dsh-client-runtime"],"platform":"web"}},"dist":{"shasum":"7f8443c3c75ee8ed53e2b3bb10595d3d5ce4fbb8","tarball":"https://registry.npmjs.org/@alexpeng/dsh-custom-plugin/-/dsh-custom-plugin-0.4.1.tgz","fileCount":31,"integrity":"sha512-pn1/0prErnIJZ1dt5w6HDDzTtQN3TQL/b9UYCZHnrmdGDVdEOYJ7TW+4DuNPVPk6gbFqkpqURs/QuViNyXi1PQ==","signatures":[{"sig":"MEYCIQCWfzWQBFnpgzFzDuh3fQzlMOm6RQxGX6l3qfzm4NCcAgIhANq9Y6moMnMb2L8+iz6809xJJejUbKphdvY9fmGIhsf5","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":755750},"main":"lib/index.js","type":"module","types":"lib/types/index.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./lib/types/index.d.ts","default":"./lib/index.js"},"./client":{"types":"./lib/types/client/index.d.ts","default":"./lib/client.js"},"./package.json":"./package.json"},"gitHead":"c7b13fccc917244bc7368bb563410679b51505dc","scripts":{"test":"vitest run","build":"tsc -p tsconfig.build.json && tsdown","smoke":"node scripts/smoke.mjs","watch":"tsdown --watch","bundle":"tsdown","prepare":"pnpm build","typecheck":"tsc --noEmit","test:watch":"vitest","check:readme":"node scripts/check-readme-i18n.mjs","prepublishOnly":"pnpm typecheck && pnpm test"},"_npmUser":{"name":"alexpeng","email":"alexpeng07@outlook.com"},"repository":{"url":"git+https://github.com/AlexPeng07/dsh-custom-plugin.git","type":"git"},"_npmVersion":"11.17.0","description":"Custom convenience suite for the dsh web GUI: appearance, timeline, folders, prompts, session export/search, Mermaid, quote reply, usage analytics, local budget, key-free backups, and a Ctrl/Cmd+K command palette; dual-face plugin mounted without dsh sour","directories":{},"_nodeVersion":"24.19.0","dependencies":{"mermaid":"^11.6.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"react":"^18.3.1","tsdown":"0.22.2","vitest":"^3.0.0","react-dom":"^18.3.1","typescript":"~5.7.2","@types/node":"^22.20.0","@types/react":"~18.3.1","puppeteer-core":"^25.8.0","@types/react-dom":"^18.3.5","@deepseek-ai/cordis":"^4.0.1","@deepseek-ai/dsh-llm":"^0.1.1-rc.1","@deepseek-ai/dsh-tools":"^0.1.1-rc.1","@deepseek-ai/dsh-session":"^0.1.1-rc.1","@deepseek-ai/dsh-attachment":"^0.1.1-rc.1","@deepseek-ai/dsh-session-query":"^0.1.1-rc.1","@deepseek-ai/dsh-client-runtime":"^0.1.1-rc.1","@deepseek-ai/dsh-host-webserver":"^0.1.1-rc.1","@deepseek-ai/dsh-client-ui-slots":"^0.1.1-rc.1","@deepseek-ai/dsh-client-ui-theme":"^0.1.1-rc.1"},"peerDependencies":{"@deepseek-ai/cordis":"^4.0.1","@deepseek-ai/dsh-tools":"^0.1.1-rc.1"},"_npmOperationalInternal":{"tmp":"tmp/dsh-custom-plugin_0.4.1_1788937824068_0.06885265035747157","host":"s3://npm-registry-packages-npm-production"}},"0.4.2":{"name":"@alexpeng/dsh-custom-plugin","version":"0.4.2","author":{"name":"AlexPeng","email":"alexpeng07@outlook.com"},"license":"Apache-2.0","_id":"@alexpeng/dsh-custom-plugin@0.4.2","maintainers":[{"name":"alexpeng","email":"alexpeng07@outlook.com"}],"homepage":"https://github.com/AlexPeng07/dsh-custom-plugin#readme","bugs":{"url":"https://github.com/AlexPeng07/dsh-custom-plugin/issues"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"inject":["@deepseek-ai/dsh-client-runtime"],"platform":"web"}},"dist":{"shasum":"306ca04d3abbe00f5a7f2ca7e049f5e06cdc6cb5","tarball":"https://registry.npmjs.org/@alexpeng/dsh-custom-plugin/-/dsh-custom-plugin-0.4.2.tgz","fileCount":31,"integrity":"sha512-+30FnjGDKCJBTr4xp5/4Wcq47L7UAQh9r8XX80x+OW0xo2cqOqaSDlBvz2PnYrRhv/MztbDW79qL9sPlAhjrKQ==","signatures":[{"sig":"MEUCIQCKiuldagJZxQMId8N6CaYQUBdr0aC85wHIUVoVz+CwDgIgV19nSrKdc41TZrwKrOpgyfRFjPx/Az74rJXtX2RFUQw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":762313},"main":"lib/index.js","type":"module","types":"lib/types/index.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./lib/types/index.d.ts","default":"./lib/index.js"},"./client":{"types":"./lib/types/client/index.d.ts","default":"./lib/client.js"},"./package.json":"./package.json"},"gitHead":"30e025b3a768a5a4547c5485d0a20c578756a0ad","scripts":{"test":"vitest run","build":"tsc -p tsconfig.build.json && tsdown","smoke":"node scripts/smoke.mjs","watch":"tsdown --watch","bundle":"tsdown","prepare":"pnpm build","typecheck":"tsc --noEmit","test:watch":"vitest","check:readme":"node scripts/check-readme-i18n.mjs","prepublishOnly":"pnpm typecheck && pnpm test"},"_npmUser":{"name":"alexpeng","email":"alexpeng07@outlook.com"},"repository":{"url":"git+https://github.com/AlexPeng07/dsh-custom-plugin.git","type":"git"},"_npmVersion":"11.17.0","description":"Custom convenience suite for the dsh web GUI: appearance, timeline, folders, prompts, session export/search, Mermaid, quote reply, usage analytics, local budget, key-free backups, and a Ctrl/Cmd+K command palette; dual-face plugin mounted without dsh sour","directories":{},"_nodeVersion":"24.19.0","dependencies":{"mermaid":"^11.6.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"react":"^18.3.1","tsdown":"0.22.2","vitest":"^3.0.0","react-dom":"^18.3.1","typescript":"~5.7.2","@types/node":"^22.20.0","@types/react":"~18.3.1","puppeteer-core":"^25.8.0","@types/react-dom":"^18.3.5","@deepseek-ai/cordis":"^4.0.1","@deepseek-ai/dsh-llm":"^0.1.1-rc.1","@deepseek-ai/dsh-tools":"^0.1.1-rc.1","@deepseek-ai/dsh-session":"^0.1.1-rc.1","@deepseek-ai/dsh-attachment":"^0.1.1-rc.1","@deepseek-ai/dsh-session-query":"^0.1.1-rc.1","@deepseek-ai/dsh-client-runtime":"^0.1.1-rc.1","@deepseek-ai/dsh-host-webserver":"^0.1.1-rc.1","@deepseek-ai/dsh-client-ui-slots":"^0.1.1-rc.1","@deepseek-ai/dsh-client-ui-theme":"^0.1.1-rc.1"},"peerDependencies":{"@deepseek-ai/cordis":"^4.0.1","@deepseek-ai/dsh-tools":"^0.1.1-rc.1"},"_npmOperationalInternal":{"tmp":"tmp/dsh-custom-plugin_0.4.2_1789194301089_0.9605912270324259","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"@alexpeng/dsh-custom-plugin","version":"0.5.0","author":{"name":"AlexPeng","email":"alexpeng07@outlook.com"},"license":"Apache-2.0","_id":"@alexpeng/dsh-custom-plugin@0.5.0","maintainers":[{"name":"alexpeng","email":"alexpeng07@outlook.com"}],"homepage":"https://github.com/AlexPeng07/dsh-custom-plugin#readme","bugs":{"url":"https://github.com/AlexPeng07/dsh-custom-plugin/issues"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"inject":["@deepseek-ai/dsh-client-ui-chat","@deepseek-ai/dsh-client-ui-conversation","@deepseek-ai/dsh-client-ui-layout","@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-client-ui-sidebar"],"platform":"web"}},"dist":{"shasum":"9e356bb84edb36ba250b194b808c92b0ada72726","tarball":"https://registry.npmjs.org/@alexpeng/dsh-custom-plugin/-/dsh-custom-plugin-0.5.0.tgz","fileCount":34,"integrity":"sha512-EQ8Yl0NgOpMBtAh+NCOtlOpY6ey22I8gX8DB3LZw9tJYuaGR+1NkQqujyfW8wAVpltV64lab14AJ4SaZhMPE0Q==","signatures":[{"sig":"MEUCIElvyqU1qCWa0e3qP089EHQffM2BLpOA9mQpFK0EHdApAiEA3M4+fPDmxp1gF658EyPkSDzn1PA3to6VNVjUf3RKif4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIHFT3jCMKok+Rv24rVNdeHC70QJE4fk7kDrbe1xwzKGPAiEApCwe1QlOmGJCWzEdcvlIILhxatRzR4ZQVTGVWq3gys0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":805667},"icon":"./icon.svg","main":"lib/index.js","type":"module","types":"lib/types/index.d.ts","engines":{"dsh":">=0.1.7-rc.2 <0.2.0","node":">=22"},"exports":{".":{"types":"./lib/types/index.d.ts","default":"./lib/index.js"},"./client":{"types":"./lib/types/client/index.d.ts","default":"./lib/client.js"},"./package.json":"./package.json","./locale/*.json":"./locale/*.json"},"gitHead":"3dada8ceb7f6f15cb2afde51f40b10d1d7e1ad88","scripts":{"test":"vitest run","build":"tsc -p tsconfig.build.json && tsdown","smoke":"node scripts/smoke.mjs","watch":"tsdown --watch","bundle":"tsdown","prepare":"pnpm build","typecheck":"tsc --noEmit","test:watch":"vitest","check:readme":"node scripts/check-readme-i18n.mjs","prepublishOnly":"pnpm typecheck && pnpm test"},"_npmUser":{"name":"alexpeng","email":"alexpeng07@outlook.com"},"repository":{"url":"git+https://github.com/AlexPeng07/dsh-custom-plugin.git","type":"git"},"_npmVersion":"11.17.0","description":"Custom convenience suite for the dsh web GUI: appearance, timeline, folders, prompts, session export/search, Mermaid, quote reply, usage analytics, local budget, key-free backups, and a Ctrl/Cmd+K command palette; dual-face plugin mounted without dsh sour","directories":{},"_nodeVersion":"24.19.0","dependencies":{"mermaid":"^11.6.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"react":"^18.3.1","tsdown":"0.22.2","vitest":"^3.0.0","react-dom":"^18.3.1","typescript":"~5.7.2","@types/node":"^22.20.0","@types/react":"~18.3.1","puppeteer-core":"^25.8.0","@types/react-dom":"^18.3.5","@deepseek-ai/cordis":"^4.0.4","@deepseek-ai/dsh-llm":"^0.1.7-rc.2","@deepseek-ai/dsh-tools":"^0.1.7-rc.2","@deepseek-ai/dsh-session":"^0.1.7-rc.2","@deepseek-ai/dsh-attachment":"^0.1.7-rc.2","@deepseek-ai/dsh-client-store":"^0.1.7-rc.2","@deepseek-ai/dsh-session-query":"^0.1.7-rc.2","@deepseek-ai/dsh-host-webserver":"^0.1.7-rc.2","@deepseek-ai/dsh-client-ui-slots":"^0.1.7-rc.2","@deepseek-ai/dsh-client-ui-theme":"^0.1.7-rc.2"},"peerDependencies":{"@deepseek-ai/cordis":"^4.0.4","@deepseek-ai/dsh-tools":"^0.1.7-rc.2"},"_npmOperationalInternal":{"tmp":"tmp/dsh-custom-plugin_0.5.0_1790677530114_0.43773528311127596","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"_id":"@alexpeng/dsh-custom-plugin@0.6.0","dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"inject":["@deepseek-ai/dsh-client-ui-chat","@deepseek-ai/dsh-client-ui-conversation","@deepseek-ai/dsh-client-ui-layout","@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-client-ui-sidebar"],"platform":"web"}},"bugs":{"url":"https://github.com/AlexPeng07/dsh-custom-plugin/issues"},"dist":{"shasum":"01e5ee3bb46c2513e79d2e24c31c41679c990637","tarball":"https://registry.npmjs.org/@alexpeng/dsh-custom-plugin/-/dsh-custom-plugin-0.6.0.tgz","fileCount":34,"integrity":"sha512-9cVpIFKJXB8JadfhckWok8JMt12QgdzkFjDZi+1MrR2P9DbR7Nwyg/Gm+rnuNFgXMENtn4yftQZHFV2GQSv3zQ==","signatures":[{"sig":"MEUCIFBQJnPDyCjplarGKSxWRrnjy9KPuvbepWFmM2SjFnQMAiEApsI0fJFxtyUnuqalgb8Jyq/3wcL5/ihFqfno8/GiZ9A=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIAEw6aLELSsPO9k17HEG+6CnGkdQZOPaMz6GmiIglaUyAiEA147sW1quHn8W8u0uxrQaniSloVGnMAyrg+dfbbNxXNs="}],"unpackedSize":817919},"icon":"./icon.svg","main":"lib/index.js","name":"@alexpeng/dsh-custom-plugin","type":"module","types":"lib/types/index.d.ts","author":{"name":"AlexPeng","email":"alexpeng07@outlook.com"},"engines":{"dsh":">=0.1.7-rc.2 <0.2.0-0 || >=0.2.0-rc.2 <0.2.0-rc.3","node":">=22"},"exports":{".":{"types":"./lib/types/index.d.ts","default":"./lib/index.js"},"./client":{"types":"./lib/types/client/index.d.ts","default":"./lib/client.js"},"./package.json":"./package.json","./locale/*.json":"./locale/*.json"},"gitHead":"737a91257f922475adbaa8a01bfcb2f0cbebef60","license":"Apache-2.0","scripts":{"test":"vitest run","build":"tsc -p tsconfig.build.json && tsdown","smoke":"node scripts/smoke.mjs","watch":"tsdown --watch","bundle":"tsdown","prepare":"pnpm build","typecheck":"tsc --noEmit","test:watch":"vitest","check:readme":"node scripts/check-readme-i18n.mjs","prepublishOnly":"pnpm typecheck && pnpm test"},"version":"0.6.0","_npmUser":{"name":"alexpeng","email":"alexpeng07@outlook.com"},"homepage":"https://github.com/AlexPeng07/dsh-custom-plugin#readme","repository":{"url":"git+https://github.com/AlexPeng07/dsh-custom-plugin.git","type":"git"},"_npmVersion":"11.17.0","description":"Custom convenience suite for the dsh web GUI: appearance, timeline, folders, prompts, session export/search, Mermaid, quote reply, usage analytics, local budget, key-free backups, and a Ctrl/Cmd+K command palette; dual-face plugin mounted without dsh sour","directories":{},"maintainers":[{"name":"alexpeng","email":"alexpeng07@outlook.com"}],"_nodeVersion":"24.19.0","dependencies":{"mermaid":"^11.6.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"react":"^18.3.1","semver":"^7.8.5","tsdown":"0.22.2","vitest":"^3.0.0","react-dom":"^18.3.1","typescript":"~5.7.2","@types/node":"^22.20.0","@types/react":"~18.3.1","puppeteer-core":"^25.8.0","@types/react-dom":"^18.3.5","@deepseek-ai/cordis":"^4.0.4","@deepseek-ai/dsh-llm":"0.2.0-rc.2","@deepseek-ai/dsh-tools":"0.2.0-rc.2","@deepseek-ai/dsh-session":"0.2.0-rc.2","@deepseek-ai/dsh-attachment":"0.2.0-rc.2","@deepseek-ai/dsh-client-store":"0.2.0-rc.2","@deepseek-ai/dsh-session-query":"0.2.0-rc.2","@deepseek-ai/dsh-host-webserver":"0.2.0-rc.2","@deepseek-ai/dsh-client-ui-slots":"0.2.0-rc.2","@deepseek-ai/dsh-client-ui-theme":"0.2.0-rc.2"},"peerDependencies":{"@deepseek-ai/cordis":"^4.0.4","@deepseek-ai/dsh-tools":">=0.1.7-rc.2 <0.2.0-0 || >=0.2.0-rc.2 <0.2.0-rc.3"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/dsh-custom-plugin_0.6.0_1790702776621_0.7479699571516916"}}},"time":{"created":"2026-08-22T14:45:34.391Z","modified":"2026-09-29T17:26:16.922Z","0.1.0":"2026-08-22T14:45:34.716Z","0.1.1":"2026-08-22T16:26:40.996Z","0.1.2":"2026-08-23T04:09:30.733Z","0.1.3":"2026-08-23T06:39:00.670Z","0.1.4":"2026-08-26T05:08:04.783Z","0.1.5":"2026-08-26T09:13:11.018Z","0.1.6":"2026-09-02T04:57:01.107Z","0.4.0":"2026-09-05T01:52:56.718Z","0.4.1":"2026-09-09T07:10:24.219Z","0.4.2":"2026-09-12T06:25:01.234Z","0.5.0":"2026-09-29T10:25:30.239Z","0.6.0":"2026-09-29T17:26:16.708Z"},"bugs":{"url":"https://github.com/AlexPeng07/dsh-custom-plugin/issues"},"author":{"name":"AlexPeng","email":"alexpeng07@outlook.com"},"license":"Apache-2.0","homepage":"https://github.com/AlexPeng07/dsh-custom-plugin#readme","repository":{"url":"git+https://github.com/AlexPeng07/dsh-custom-plugin.git","type":"git"},"description":"Custom convenience suite for the dsh web GUI: appearance, timeline, folders, prompts, session export/search, Mermaid, quote reply, usage analytics, local budget, key-free backups, and a Ctrl/Cmd+K command palette; dual-face plugin mounted without dsh sour","maintainers":[{"name":"alexpeng","email":"alexpeng07@outlook.com"}],"readme":"# dsh-custom-plugin\n\n[![npm version](https://img.shields.io/npm/v/%40alexpeng%2Fdsh-custom-plugin?style=flat-square)](https://www.npmjs.com/package/@alexpeng/dsh-custom-plugin)\n[![license](https://img.shields.io/badge/license-Apache--2.0-blue?style=flat-square)](LICENSE)\n[![Node](https://img.shields.io/badge/node-%3E%3D22-339933?style=flat-square)](#安装)\n[![TypeScript](https://img.shields.io/badge/TypeScript-5.7-3178C6?style=flat-square&logo=typescript&logoColor=white)](https://www.typescriptlang.org)\n[![CI](https://github.com/AlexPeng07/dsh-custom-plugin/actions/workflows/ci.yml/badge.svg)](https://github.com/AlexPeng07/dsh-custom-plugin/actions/workflows/ci.yml)\n[![Awesome DSH Plugin](https://awesome-dsh-plugin.com/badge.svg)](https://awesome-dsh-plugin.com)\n\n[English](README.md) | 中文\n\nDeepSeek Harness（DSH）Web GUI 的 Custom 便利套件：个性化外观、天气特效、玻璃效果、按用户消息的时间线导航、项目文件夹、增强提示词库、会话导出与会话搜索、Mermaid 渲染、引用回复、7/30/90 天用量分析、预算与无密钥本地备份，以及 Ctrl/Cmd+K 快捷面板。\n\n插件为双半区架构：宿主半区（`src/`）持有状态文档、注册 `/api/custom-plugin` 路由与 `custom_plugin_status` 智能体工具；浏览器半区（`src/client/`）通过 7 个官方 slot 的 8 处注入挂载 UI，以同源 fetch 与宿主通信。经官方 profile 机制挂载，不改 DSH 源码。\n\n<p align=\"center\">\n  <img src=\"https://github.com/AlexPeng07/dsh-custom-plugin/raw/main/docs/overview.png\" alt=\"dsh-custom-plugin 总览\" width=\"100%\">\n</p>\n\n## 部分界面展示\n\n<table>\n<tr>\n<td width=\"50%\" valign=\"top\"><b>「设置 → 个性化」整页外观配置</b><br><img src=\"https://github.com/AlexPeng07/dsh-custom-plugin/raw/main/docs/settings-appearance.png\" alt=\"设置 → 个性化 整页外观配置\" width=\"100%\"></td>\n<td width=\"50%\" valign=\"top\"><b>会话头部弹出的同一套面板（浅色主题）</b><br><img src=\"https://github.com/AlexPeng07/dsh-custom-plugin/raw/main/docs/personalization-panel.png\" alt=\"个性化弹窗面板\" width=\"100%\"></td>\n</tr>\n<tr>\n<td width=\"50%\" valign=\"top\"><b>液态玻璃（Custom 面板位移折射）</b><br><img src=\"https://github.com/AlexPeng07/dsh-custom-plugin/raw/main/docs/liquid-glass.png\" alt=\"液态玻璃\" width=\"100%\"></td>\n<td width=\"50%\" valign=\"top\"><b>时间线轨道与悬停预览</b><br><img src=\"https://github.com/AlexPeng07/dsh-custom-plugin/raw/main/docs/timeline.png\" alt=\"时间线轨道\" width=\"100%\"></td>\n</tr>\n<tr>\n<td width=\"50%\" valign=\"top\"><b>多级项目文件夹</b><br><img src=\"https://github.com/AlexPeng07/dsh-custom-plugin/raw/main/docs/project-folders.png\" alt=\"项目文件夹\" width=\"100%\"></td>\n<td width=\"50%\" valign=\"top\"><b>Mermaid 思维导图就地渲染</b><br><img src=\"https://github.com/AlexPeng07/dsh-custom-plugin/raw/main/docs/mermaid-mindmap.png\" alt=\"Mermaid 思维导图\" width=\"100%\"></td>\n</tr>\n<tr>\n<td width=\"50%\" valign=\"top\" align=\"center\"><b>余额与今日分模型用量</b><br><img src=\"https://github.com/AlexPeng07/dsh-custom-plugin/raw/main/docs/balance-usage.png\" alt=\"余额与用量面板\" width=\"100%\"></td>\n<td width=\"50%\" valign=\"top\" align=\"center\"><b>雨（三层景深）</b><br><img src=\"https://github.com/AlexPeng07/dsh-custom-plugin/raw/main/docs/weather-rain.gif\" alt=\"下雨特效\" width=\"100%\"></td>\n</tr>\n<tr>\n<td width=\"50%\" valign=\"top\" align=\"center\"><b>樱花</b><br><img src=\"https://github.com/AlexPeng07/dsh-custom-plugin/raw/main/docs/weather-sakura.gif\" alt=\"樱花特效\" width=\"100%\"></td>\n<td width=\"50%\" valign=\"top\" align=\"center\"><b>飘雪</b><br><img src=\"https://github.com/AlexPeng07/dsh-custom-plugin/raw/main/docs/weather-snow.gif\" alt=\"飘雪特效\" width=\"100%\"></td>\n</tr>\n</table>\n\n天气特效截自深色模式（深色下仅「无颜色」与「极光」背景可选）。额度历史、备份导入预览、会话搜索与快捷面板属于同一套动态面板，需在 DSH 内打开对应页查看；仓库未另附固定截图。\n\n## 功能\n\n### 外观个性化\n\n- **背景颜色**：20 组低饱和典雅色（每组合配 tab 栏色，默认「天青灰」），另有「无颜色」（跟随 GUI 默认主题）与高饱和「极光」渐变。深色模式下仅「无颜色」与「极光」可选，其余颜色禁用，插件文字自动转白保证可读性。\n- **天气特效**：画布渲染、不挡交互，一键切换——飘雪、电影感雨滴（三层景深 + 地面溅起）、樱花飘落；关闭时自动清空画布。\n- **玻璃效果**：所有 Custom 面板默认毛玻璃；可切换液态玻璃（Chromium 位移折射，无色散、轻微背景模糊；Safari/Firefox 自动回退毛玻璃）。「全局浮层玻璃」对弹窗、菜单、提示框、下拉框统一加模糊。\n\n### 时间线导航\n\n每条用户消息在右侧（或左侧）轨道生成一个节点：\n\n- 悬停弹出预览卡（自动防溢出定位），卡内直接显示 LaTeX / MathML / Mermaid 标记；\n- 点击跳转到对应消息（直接驱动聊天滚动容器，消息位于嵌套滚动区时也能居中）；\n- 拖动滑块或在轨道上滚轮滚动（轨道替代原生滚动条）；\n- 节点支持星标（可只显示星标）、在该消息处创建分支会话、一键复制全文。\n\n节点按渲染出的用户消息行定位（DOM 行 sourcing），加载历史后自动刷新；轨道尾部最多保留 400 个节点。\n\n### 项目文件夹\n\n多级文件夹树，保存在 `$DSH_HOME` 状态文件中，跨工作区共享。任意工作区与会话都可收纳进文件夹；支持拖拽排序（插入前 / 内部 / 插入后）、重命名、删除与「添加当前会话」。\n\n### 提示词库\n\n提示词支持新增、编辑、复制、删除、搜索、收藏、标签和拖拽排序，并记录最近使用与使用次数。正文可使用 `{{变量名}}`；插入前会弹出变量表单。提示词库可用版本化 JSON 或以二级标题分段的 Markdown 导入导出。\n\n### 会话导出\n\n导出当前会话为三种格式（文件名带日期戳）：\n\n- **JSON**：标准 `messages` 结构（user / assistant / tool），meta 携带会话标题、创建时间、工作目录与导出时间，可导入其他工具；\n- **Markdown**：按角色分块的纯文本；\n- **PDF**：A4 打印版式 HTML，浏览器打开后打印另存为 PDF；图片以 base64 内嵌（最多 30 张、总量 12 MB、单张 ≤ 4 MB）。\n\n工具调用行携带工具名与参数摘要（从配对的 tool/call 事件解析）。\n\n插件状态可导出为版本化 JSON 备份，包含外观、文件夹、提示词、星标、用量和预算，不包含 API Key 或凭据元数据。导入前显示冲突预览，支持合并或覆盖非敏感状态，并自动保留恢复副本。\n\n### Mermaid 渲染\n\n聊天中的 ```mermaid 代码块（含助手回复，思维导图 / 流程图 / 时序图等）自动就地渲染为图表：代码块上方出现「图表 / 代码」切换工具条与 mermaid.live 兜底链接，流式输出期间内容完整后即预览，跟随 GUI 明暗主题重绘，渲染失败时保留原代码。检测依据代码块语言标签；无标签（流式中）时按内容启发式判断（关键字前缀 + 完整度检查，语言明确的代码块不会误触）。引擎优先读取随插件安装的本地 Mermaid 11 依赖（离线可用），缺失时回退 jsdelivr / fastly / unpkg 三镜像拉取并在宿主进程内缓存；用户消息下方的渲染按钮与模态窗口（多图切换）保持不变，mermaid.live 链接为 DEFLATE 压缩的 `#pako:` 格式，打开即还原图表。\n\n### 效率工具\n\n- **引用回复**：选中对话文本后出现「引用回复」按钮，以引用块插入输入框；\n- **防自动跳转**：强制 `scroll-behavior: auto`，发送消息不再把视图拽到底部（默认关闭）；\n- **公式复制**：含公式的消息下方显示 LaTeX / MathML 复制按钮（MathML 可直接粘贴进 Word）；\n- **批量归档**：勾选多个会话批量归档，运行中会话默认不可选，并分别报告成功与失败数量；DSH 尚未公开恢复接口，插件不提供恢复入口。\n- **会话搜索**：搜索当前会话的用户、助手和工具内容，点击结果跳转到所属轮次；部署开启了 dsh 事件索引时走索引，否则直接扫描同一份会话日志，面板会说明本次用的是哪条路径。\n- **快捷面板**：在非编辑状态按 `Ctrl+K` / `Cmd+K`，统一搜索会话、工作区、提示词和常用功能；跨会话全文搜索使用 dsh 官方接口，不可用时如实提示原因。\n- **可靠归档**：运行中的会话默认不可选，批量操作分别报告成功与失败数量。\n\n### 额度与用量\n\n会话头部常驻额度徽标（可点击固定），额度面板提供：\n\n- **余额**：调用官方 `https://api.deepseek.com/user/balance` 接口，优先显示 CNY，赠送与充值余额分列，并显示账户可用状态。\n- **Key 解析顺序**：系统凭据存储（可用时）→ 插件旧状态文件中的 Key → 环境变量 `DEEPSEEK_API_KEY` / `DEEPSEEK_KEY` / `DEEPSEEK_TOKEN`（取值需以 `sk-` 开头）→ DSH 凭据文件 `$DSH_HOME/.credentials.yaml`（自动复用 DSH 已配置的 DeepSeek key，无需重复填写）。\n- **今日用量**：按模型统计输入 / 输出 / 缓存 token 与调用次数，实时折叠自 `session/event` 事件。\n- **费用估算**：按 DeepSeek 当前官方峰谷价目估算——高峰为北京时间周一至周五 9–12、14–18 时；其余时间（含周末）均为空闲时段，按半价计：`deepseek-v4-flash` / `deepseek-v4-flash-vision-exp` ¥3 / ¥9，`deepseek-v4-pro` ¥9 / ¥27（每百万 tokens 输入 / 输出，缓存写入 ¥0.1 / ¥0.3；已停用的 `deepseek-chat` / `deepseek-reasoner` 按 v4-flash 计），仅供参考。\n- **扫描**：「扫描今日会话日志」重放全部会话、按事件自身时间戳归入今日（跨午夜会话不丢量），完成后显示扫描到的活跃会话数。\n- **历史与预算**：查看 7 / 30 / 90 天趋势和按模型汇总，导出 UTF-8 CSV；可设置人民币月预算与预警比例。\n\n### 设置入口\n\n「设置 > 个性化」页提供外观与工具开关的整页配置；会话头部与侧边栏底部的「个性化」按钮打开同一套面板弹框。\n\n### 智能体集成\n\n`custom_plugin_status` 工具报告：外观配置、今日按模型用量、余额、时间线样本、Mermaid 引擎加载情况、状态文件路径与客户端诊断。插件不注入任何系统提示。\n\n## 版本对应\n\n| 插件版本 | 构建并实测过的 dsh | 状态 |\n| --- | --- | --- |\n| 0.6.x | dsh 0.1.7-rc.2 与 dsh 0.2.0-rc.2（peer 范围两个都写进去了，见「安装」） | 本版本 |\n| 0.5.x | dsh 0.1.7-rc.2（peer 范围 `>=0.1.7-rc.2 <0.2.0-0`） | 在 0.1.x 上没问题；任何 0.2.x 宿主都会拒绝它，dsh 桌面版也算 |\n| 0.4.2 | dsh 0.1.1-rc.1 … 0.1.6 时代 | 已被取代，在 0.1.7+ 上不要指望可用 |\n\n0.1.7 改掉了本套件依赖的插件侧契约（会话导航归 `ctx.uiWorkspace`、会话列表不再提供\n当前查看的会话、消息模型移除 `tool-result` 内容块），两个版本互不替代。0.1.7 及更新\n的 dsh 会在安装与启动时按 bundle 的 `@deepseek-ai/dsh-*` peer 范围校验自身版本，不匹配\n就整包跳过。没有这道闸的更早宿主仍会加载插件，但表现为功能退化：实测 0.1.1-rc.2 上\n8 个槽位注册成 7 个，turnTail 条目被拒（该槽位自 0.1.6-alpha.2 起由 chain 改为 list），打开会话、\n创建分支、跨会话搜索会提示对应服务缺失，而不是抛错。\n\n## 安装\n\n前置：Node 22+、pnpm，以及 `dsh` CLI（官方 npm 包 `@deepseek-ai/dsh`；未全局安装时，可用 `npx @deepseek-ai/dsh` 代替 `dsh`）。本版本面向 **dsh 0.1.7-rc.2 及其后的 0.1.x，外加 0.2.0-rc.2**：dsh 在安装与启动时会用自身版本校验 bundle 的 `@deepseek-ai/dsh-*` peer 范围，不匹配的 bundle 会被整包跳过，所以 `package.json` 只写出本包实际构建并实测过的那些版本。0.6.0 是针对 0.2.0-rc.2 做类型检查与构建的，同一个产物在两条运行时线上都跑过活体宿主探针：0.2.0-rc.2（boot 图 66 行）与 0.1.7-rc.2（65 行）各 19 项里 18 项通过，跳过的那项需要真实会话。验不到的部分和以往一样：回合内的 chips（分叉、Mermaid 渲染、LaTeX）需要一次真实的模型回复，无凭据的临时家目录跑不出来，槽位渲染也仍要在浏览器里过一遍。范围刻意不收 0.2.0-rc.1（已被取代的预发布版）、0.2.0-rc.3 及之后谁都没看过的预发布版，以及尚未验证的 0.2.0 正式版。范围的写法在这里有讲究：`^0.1.7-rc.2` 展开成 `>=0.1.7-rc.2 <0.2.0-0`，而每一个 `0.2.0-rc.N` 都排在 `0.2.0-0` **之上**，所以实测过的预发布版本必须单独写成一段——`pnpm smoke` 会检查构建目标确实落在声明范围里，并且 `engines.dsh` 与它放行同一批版本。仍在旧版 dsh 的用户请安装对应的旧版插件（0.5.0 面向 0.1.7-rc.2），而不是授予兼容性豁免。\n\n### 从 npm 安装\n\n```sh\ndsh plugin --profile web add @alexpeng/dsh-custom-plugin\n# 重启 dsh web\n```\n\nregistry 上是预构建产物，安装端无需从源码构建。\n\n### 在 dsh 桌面版上\n\ndsh 桌面版是同一套 Web 应用外面的一层 Electron 壳，随包携带**正好是 dsh\n0.2.0-rc.2**——桌面发布线把壳和运行时钉成同一个版本，所以桌面端拿到的永远是\n0.2.x 运行时。0.6.0 的 peer 范围把这个版本写了进去，因此在桌面版上安装不需要任\n何兼容性豁免；0.5.0 需要，它给出的拒绝信息和 0.2.x 的 Web profile 完全一样。\n\n对 0.2.0-rc.2 的实测：boot 图里有我们那一行、五个 inject 目标都在、Mermaid 引\n擎本地加载，宿主侧探针的成绩与在 0.1.7-rc.2 上的一致。桌面版的请求路径也不碰本\n插件的访问围栏——壳在把渲染进程的请求转发给它自己的 Host 之前会删掉 `host`、\n`origin`、`sec-fetch-site`、`cookie`，再挂上它自己的凭证，而 loopback 围栏接受\n的正是这个形状（这条围栏此前只有实跑脚本覆盖，如今有了单测）。没做的是在真的桌\n面窗口里打开这个插件；那一遍验收归装它的人，而且要用你的登录。\n\n管桌面 profile 要用桌面版自带的 `dsh` 命令，不是 npm 装的那个——公开 CLI 拒绝\n保留的 `desktop` profile：\n\n1. 先启动一次桌面版让 profile 建立，然后完全退出（关窗口只是隐藏；Windows 上\n   从托盘退出）。\n2. `dsh plugin --profile desktop add @alexpeng/dsh-custom-plugin`\n3. 重新打开桌面版。应用内的插件管理器也用桌面版自带的 pnpm 在同一个 profile 上\n   安装和更新，不想开终端就用它。\n\n外观、提示词库、项目文件夹、星标和用量都存在\n`$DSH_HOME/custom-plugin-state.json`，这个文件按设计由桌面版和 Web 共享——两\n边各自持有自己的 `profiles/<名字>`，那里面只放代码不放这个文件——所以在两者\n之间切换看到的是同一份数据。两个宿主因此可能同时写它，这就是状态替换把临时文\n件按写入进程的 pid 命名的原因。\n\n### 从 GitHub 安装（源码安装）\n\n```sh\ndsh plugin --profile web add github:AlexPeng07/dsh-custom-plugin\n# 重启 dsh web\n```\n\ngit 安装拉取的是源码，`prepare` 脚本会在安装端构建 `lib/`。pnpm ≥10 需要一次性授权该构建——把 pnpm 提示的确切包键复制进 profile 的 `pnpm-workspace.yaml` 的 `allowBuilds` 下，再重新执行 add。走上方 npm 路线可免去构建授权。\n\n### 本地链接（开发）\n\n```sh\n# 构建（本仓库根目录执行）\npnpm install\npnpm build\n# 装入 web profile。链接路径不能含空格：Windows 上若源码路径含空格，\n# 先创建无空格目录联接（如 F:\\dsh-plugin-dev），再链接到联接路径\ndsh plugin --profile web add link:F:/dsh-plugin-dev\n# 重启 dsh web\n```\n\n包按官方组合包协议声明 manifest：`package.json` 的 `dsh.bundle.patch` 指向 `cordis.patch.yml` 配置层（行 id `custom-plugin`），`dsh.client` 声明浏览器半区。`dsh plugin add` 在 profile 目录内转发给 pnpm，安装后因该声明被自动加入 `dsh.profile.bundles`；浏览器半区经官方客户端模块系统按同一行加载。\n\n## 配置\n\n插件读写 `$DSH_HOME/custom-plugin-state.json` 单个 JSON 文档（默认 `~/.dsh`，可用 `DSH_HOME` 环境变量覆盖），包含外观配置、文件夹、提示词、星标、兼容旧版的数据与最近 90 个北京时间日的用量账本；写入为原子写（临时文件 + 重命名），崩溃不会截断文档。\n\n外观与功能开关（`cfg` 字段，均有默认值）：\n\n| 配置项 | 默认值 | 说明 |\n|---|---|---|\n| `bg` | `天青灰` | `default`（无颜色）/ `aurora`（极光）/ 20 组调色板名之一 |\n| `weather` | `none` | `none` / `snow` / `rain` / `sakura` |\n| `glass` | `true` | Custom 面板玻璃总开关 |\n| `glassMode` | `frost` | `frost` 毛玻璃 / `liquid` 液态玻璃 |\n| `globalGlass` | `true` | 全局浮层（弹窗/菜单/提示）加模糊 |\n| `timeline` | `true` | 时间线轨道开关 |\n| `timelineLeft` | `false` | 轨道放左侧 |\n| `starsOnly` | `false` | 只显示星标节点 |\n| `quote` | `true` | 划词引用回复 |\n| `antiScroll` | `false` | 防自动跳底 |\n| `mermaid` | `true` | Mermaid 图表自动就地渲染（含消息下方渲染按钮） |\n| `formula` | `true` | LaTeX / MathML 复制按钮 |\n| `monthlyBudgetCny` | `0` | 人民币月预算；`0` 表示关闭提醒 |\n| `budgetWarningPercent` | `80` | 月预算预警百分比（1–100） |\n\n## 安全模型\n\n- 浏览器仅通过回环地址上的 `/api/custom-plugin` 路由与宿主通信；每条路由同时校验回环 socket 地址、回环 Host 头与浏览器同源标记（`sec-fetch-site` / `Origin`），`X-Forwarded-For` 永不信任。\n- 浏览器永远不会收到已保存的 DeepSeek API Key。面板新输入的 Key 在 `keytar` 存在时优先写入系统凭据存储；旧版状态文件中的明文 Key 会在系统存储可用时启动迁移。`keytar` 不再作为本插件的依赖发布（原生模块会触发 pnpm 11 的严格构建门禁，导致整个插件包安装后无法激活）；需要系统钥匙串的用户可自行加入 profile：`dsh plugin --profile web add keytar`。\n- 如果系统凭据存储不可用，插件会兼容回退到 `$DSH_HOME/custom-plugin-state.json`；请相应保护 `$DSH_HOME` 目录。DSH 自身的 `$DSH_HOME/.credentials.yaml` 明文凭据仍可复用。\n- 会话导出与时间线数据全部停留在本机。\n\n## 已知限制\n\n- Mermaid 引擎来自随插件安装的本地依赖，离线可用；仅当依赖缺失时回退 CDN 拉取（宿主在进程生命周期内缓存）。\n- 用量账本折叠自实时 `session/event` 记录，只保留最近 90 个北京时间日；错过实时事件时可手动「扫描」，扫描最多并发读取 4 个会话日志。\n- 额度面板会显示峰/闲 token 与费用分布，并提供官方价目链接；没有峰时字段的历史行会标记为“不精确”，不计入费用总额，重新扫描后可更新。\n- 系统凭据存储会在宿主启动时检测 profile `node_modules` 中的 `keytar` 模块；无法加载时使用兼容的状态文件回退。\n- 费用按 DeepSeek 官方峰谷单价估算，仅供参考。\n- 深色模式下背景限制是刻意设计：仅「无颜色」与「极光」可选。\n- dsh 0.1.7 起支持自定义快捷键。快捷面板固定占用 `Ctrl/Cmd+K`（不带 Alt/Shift，且编辑器内不触发）。dsh 在 **web** 上的默认值是 `Ctrl+Alt+K`（桌面版默认才是裸 `Ctrl+K`），所以开箱并不冲突；但你可以把某个 dsh 命令重新绑到 `Ctrl+K`，那样两者会同时响应，请把其中一个换开。\n- DSH 当前没有公开的归档恢复接口；插件不会绕过官方边界修改底层注册表。\n- dsh 自带的 `web` profile 把 session-query 索引配成 `openAt: never`，即默认不启用全文搜索。此时会话内搜索改为直接扫描日志（按出现顺序，最多 100 条），快捷面板的跨会话搜索会显示 dsh 给出的不可用原因。\n\n## 开发\n\n```sh\npnpm typecheck      # 类型检查\npnpm test           # vitest 单元测试\npnpm build          # 构建 node ESM 库与浏览器 bundle 到 lib/\npnpm check:readme   # 双语 README 哈希一致性\npnpm smoke          # 构建后契约自检：加载器握手、dsh 会读的清单字段、\n                    # patch 行、本地 Mermaid 引擎\n```\n\n`scripts/live-dsh-check.sh` 是另一条**手动**探针，对着一个正在运行的隔离 dsh profile\n（`DSH_HOME=… DSH_PORT=… bash scripts/live-dsh-check.sh`），在真实会话数据上跑宿主侧全链路：\n时间线、三种导出、搜索扫描路径、用量扫描、备份、Mermaid 引擎路由、客户端→宿主的诊断回环、\n一次会还原并校验提示词库的 UTF-8 往返，以及两处同源/loopback 围栏。默认拒绝在真实的\n`~/.dsh` 上运行（需显式 `ALLOW_REAL_DSH_HOME=1`），逐项报 PASS/FAIL，被 `SKIP` 的项会计数并写进收尾行，任一失败即非零退出。\nCI 没有可对话的宿主，所以每次 dsh 发版都建议跑一遍；槽位注册与渲染仍需按上文用浏览器过一遍。\n\n自己验一个新 dsh 版本只要四条命令，且全程不碰你自己的 harness 家目录：\n\n```bash\nmkdir -p /tmp/dshnext && cd /tmp/dshnext && npm init -y && npm i @deepseek-ai/dsh@<版本>\nDSH_HOME=/tmp/dshnext-home node node_modules/@deepseek-ai/dsh/lib/bin.js plugin --profile web add <打包好的.tgz>\nDSH_HOME=/tmp/dshnext-home node node_modules/@deepseek-ai/dsh/lib/bin.js --profile web --no-open --port 13999 &\nDSH_HOME=/tmp/dshnext-home DSH_PORT=13999 COOKIE_JAR=/tmp/dshnext/jar.txt bash scripts/live-dsh-check.sh\n```\n\n若新版本落在声明的 peer 范围之外，第二条会被拒并回滚 profile；这时可以用\n`dsh plugin --profile web allow-version <包名>@<版本> --dsh-version <版本> --accept-risk`\n授予精确版本豁免——这样探针能告诉你**到底是什么坏了**，而不是只看到闸口拒绝。\n\n## 许可证\n\nApache-2.0。部分代码参考 [Nagi-ovo/voyager](https://github.com/Nagi-ovo/voyager) 与 [unovue/inspira-ui](https://github.com/unovue/inspira-ui)。\n","readmeFilename":"README.zh.md"}