{"_id":"@anionex/dsh-eye-care","_rev":"2-4fea2448ca41e755a74a6a7877f6f657","name":"@anionex/dsh-eye-care","dist-tags":{"latest":"0.1.2"},"versions":{"0.1.0":{"name":"@anionex/dsh-eye-care","version":"0.1.0","keywords":["deepseek","deepseek-harness","eye-care","theme","dark-mode","accessibility"],"license":"MIT","_id":"@anionex/dsh-eye-care@0.1.0","maintainers":[{"name":"anionex","email":"davidyang042@gmail.com"}],"homepage":"https://github.com/Anionex/dsh-eye-care#readme","bugs":{"url":"https://github.com/Anionex/dsh-eye-care/issues"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"inject":["@deepseek-ai/dsh-client-connection","@deepseek-ai/dsh-client-runtime","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-api-remotes","@deepseek-ai/dsh-client-ui-theme"],"platform":"web"}},"dist":{"shasum":"e55873e3e8f3af83f808e52a4457e827bb2dfccb","tarball":"https://registry.npmjs.org/@anionex/dsh-eye-care/-/dsh-eye-care-0.1.0.tgz","fileCount":47,"integrity":"sha512-En4mMksoNmRiY9QQg9a1n8+TDuEHAp8zR5XhBYDXHTxWWB5EHQiVST6FMFo0WEG/pecgfaBWFwO8hHqirn04XQ==","signatures":[{"sig":"MEUCIDEIWWmyPlCa53i4TthcMvZpnp90+GwaWneegMlt6HxmAiEA/lHuGw57z5joe52pyouOQuu7CBpei+Yj1SYxGfQqCD8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":266989},"main":"./lib/index.js","type":"module","_from":"file:/tmp/dsh-anionex-release.oFTNLY/packs/eye-care/anionex-dsh-eye-care-0.1.0.tgz","types":"./lib/types/index.d.ts","engines":{"node":"^22.19.0 || >=24.0.0"},"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":"pnpm run build && vitest run","build":"node --input-type=module -e \"import { rmSync } from 'node:fs'; for (const path of ['lib', '.client-build']) rmSync(path, { recursive: true, force: true })\" && tsc -p tsconfig.json && tsc -p tsconfig.client.json && tsdown -c tsdown.config.mjs","check":"tsc -p tsconfig.json --noEmit --pretty false && tsc -p tsconfig.client.json --noEmit --pretty false","prepack":"pnpm run build"},"_npmUser":{"name":"anionex","email":"davidyang042@gmail.com"},"_resolved":"/tmp/dsh-anionex-release.oFTNLY/packs/eye-care/anionex-dsh-eye-care-0.1.0.tgz","_integrity":"sha512-En4mMksoNmRiY9QQg9a1n8+TDuEHAp8zR5XhBYDXHTxWWB5EHQiVST6FMFo0WEG/pecgfaBWFwO8hHqirn04XQ==","repository":{"url":"git+https://github.com/Anionex/dsh-eye-care.git","type":"git"},"_npmVersion":"11.12.1","description":"Warm light, warm dark, and system-aware eye-care themes for DSH Web","directories":{},"_nodeVersion":"25.9.0","_hasShrinkwrap":false,"packageManager":"pnpm@11.7.0","devDependencies":{"jsdom":"29.1.1","react":"18.3.1","tsdown":"0.22.2","vitest":"4.1.8","react-dom":"18.3.1","typescript":"6.0.3","@types/node":"22.20.0","@types/react":"18.3.31","lightningcss":"1.32.0","@types/react-dom":"18.3.7","vite-tsconfig-paths":"6.1.1","@testing-library/dom":"10.4.1","@testing-library/react":"16.3.2"},"peerDependencies":{"react":"^18.2.0","@deepseek-ai/cordis":"^4.0.1","@deepseek-ai/schemastery":"^3.18.1","@deepseek-ai/dsh-settings":"^0.1.0-rc.6","@deepseek-ai/dsh-api-remotes":"^0.1.0-rc.6","@deepseek-ai/dsh-client-locale":"^0.1.0-rc.6","@deepseek-ai/dsh-client-runtime":"^0.1.0-rc.6","@deepseek-ai/dsh-client-ui-slots":"^0.1.0-rc.6","@deepseek-ai/dsh-client-ui-theme":"^0.1.0-rc.6","@deepseek-ai/dsh-client-connection":"^0.1.0-rc.6","@deepseek-ai/dsh-client-ui-settings":"^0.1.0-rc.6"},"_npmOperationalInternal":{"tmp":"tmp/dsh-eye-care_0.1.0_1786711964570_0.24607730368829972","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"_id":"@anionex/dsh-eye-care@0.1.2","dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"inject":["@deepseek-ai/dsh-client-ui-renderer","@deepseek-ai/dsh-client-connection","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-api-remotes","@deepseek-ai/dsh-client-ui-theme"],"platform":"web"},"compatibility":{"dsh":">=0.1.0-rc.8 <0.2.0 || 0.2.0-rc.2","profiles":["web"],"dshReleases":{"0.1.0-rc.8":"compatible","0.1.1-rc.1":"compatible","0.1.1-rc.2":"compatible","0.2.0-rc.2":"compatible","0.1.2-alpha.3":"compatible","0.1.2-alpha.4":"compatible","0.1.2-alpha.5":"compatible"}}},"bugs":{"url":"https://github.com/Anionex/dsh-eye-care/issues"},"dist":{"shasum":"30ccadf499e92cc2a03ab4f91f83a5028fc89130","tarball":"https://registry.npmjs.org/@anionex/dsh-eye-care/-/dsh-eye-care-0.1.2.tgz","fileCount":53,"integrity":"sha512-Jq5BnzD0kyakHMDcisls3Nbi7RoEL6QpxUbxYZSEVtEDen7lH6si8xcureI/PjHjcUITRWWTA02vKDxId7ge4Q==","signatures":[{"sig":"MEUCIQDQH3GWfOWk8I2AQUCMcVXxZma/4YYvsboXKljbQp0gDAIgTdzcbWimoeeMCj/0dilX2o0ln7hX4B8veYsw2GOkPPg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCICvvq2Zj8wpdVhbAO2Z249dtNm/azp6nk0tslLkEM4KhAiEA3E96yMNkQ++296TcDXyiyuT3FFlqJueMoqBqdKVW+rY="}],"unpackedSize":394787},"main":"./lib/index.js","name":"@anionex/dsh-eye-care","type":"module","_from":"file:/Users/davidyang/dsh-worktrees/compat-20261001/releases/dsh-eye-care/0.1.2/anionex-dsh-eye-care-0.1.2.tgz","types":"./lib/types/index.d.ts","engines":{"node":"^22.19.0 || >=24.0.0"},"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"},"license":"MIT","scripts":{"test":"pnpm run build && vitest run","build":"node --input-type=module -e \"import { rmSync } from 'node:fs'; for (const path of ['lib', '.client-build']) rmSync(path, { recursive: true, force: true })\" && tsc -p tsconfig.json && tsc -p tsconfig.client.json && tsdown -c tsdown.config.mjs","check":"tsc -p tsconfig.json --noEmit --pretty false && tsc -p tsconfig.client.json --noEmit --pretty false","prepack":"pnpm run build"},"version":"0.1.2","_npmUser":{"name":"anionex","email":"davidyang042@gmail.com"},"homepage":"https://github.com/Anionex/dsh-eye-care#readme","keywords":["deepseek","deepseek-harness","eye-care","theme","dark-mode","accessibility"],"_resolved":"/Users/davidyang/dsh-worktrees/compat-20261001/releases/dsh-eye-care/0.1.2/anionex-dsh-eye-care-0.1.2.tgz","_integrity":"sha512-Jq5BnzD0kyakHMDcisls3Nbi7RoEL6QpxUbxYZSEVtEDen7lH6si8xcureI/PjHjcUITRWWTA02vKDxId7ge4Q==","repository":{"url":"git+https://github.com/Anionex/dsh-eye-care.git","type":"git"},"_npmVersion":"11.19.0","description":"Warm light, warm dark, and system-aware eye-care themes for DSH Web","directories":{},"maintainers":[{"name":"anionex","email":"davidyang042@gmail.com"}],"_nodeVersion":"26.8.1","_hasShrinkwrap":false,"packageManager":"pnpm@11.7.0","devDependencies":{"immer":"^10.1.1","jsdom":"29.1.1","react":"18.3.1","tsdown":"0.22.2","vitest":"4.1.8","zustand":"~4.4.7","react-dom":"18.3.1","typescript":"6.0.3","@types/node":"22.20.0","@types/react":"18.3.31","lightningcss":"1.32.0","@types/react-dom":"18.3.7","@deepseek-ai/cordis":"4.0.4","dsh-settings-legacy":"npm:@deepseek-ai/dsh-settings@0.1.0-rc.6","vite-tsconfig-paths":"6.1.1","@testing-library/dom":"10.4.1","@testing-library/react":"16.3.2","@deepseek-ai/schemastery":"3.18.4","@deepseek-ai/dsh-settings":"0.2.0-rc.2","@deepseek-ai/dsh-api-remotes":"0.2.0-rc.2","@deepseek-ai/dsh-client-store":"0.2.0-rc.2","@deepseek-ai/dsh-client-locale":"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","@deepseek-ai/dsh-client-connection":"0.2.0-rc.2","@deepseek-ai/dsh-client-ui-renderer":"0.2.0-rc.2","@deepseek-ai/dsh-client-ui-settings":"0.2.0-rc.2"},"peerDependencies":{"react":"^18.2.0","@deepseek-ai/cordis":"^4.0.1","@deepseek-ai/schemastery":"^3.18.1","@deepseek-ai/dsh-settings":"^0.1.0-rc.6 || 0.2.0-rc.2","@deepseek-ai/dsh-api-remotes":"^0.1.0-rc.6 || 0.2.0-rc.2","@deepseek-ai/dsh-client-locale":"^0.1.0-rc.6 || 0.2.0-rc.2","@deepseek-ai/dsh-host-webserver":"^0.1.0-rc.6 || 0.2.0-rc.2","@deepseek-ai/dsh-client-ui-slots":"^0.1.0-rc.6 || 0.2.0-rc.2","@deepseek-ai/dsh-client-ui-theme":"^0.1.0-rc.6 || 0.2.0-rc.2","@deepseek-ai/dsh-client-connection":"^0.1.0-rc.6 || 0.2.0-rc.2","@deepseek-ai/dsh-client-ui-settings":"^0.1.0-rc.6 || 0.2.0-rc.2"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/dsh-eye-care_0.1.2_1790829820713_0.05044681745576041"}}},"time":{"created":"2026-08-14T12:52:44.403Z","modified":"2026-10-01T04:43:40.993Z","0.1.0":"2026-08-14T12:52:44.749Z","0.1.2":"2026-10-01T04:43:40.815Z"},"bugs":{"url":"https://github.com/Anionex/dsh-eye-care/issues"},"license":"MIT","homepage":"https://github.com/Anionex/dsh-eye-care#readme","keywords":["deepseek","deepseek-harness","eye-care","theme","dark-mode","accessibility"],"repository":{"url":"git+https://github.com/Anionex/dsh-eye-care.git","type":"git"},"description":"Warm light, warm dark, and system-aware eye-care themes for DSH Web","maintainers":[{"name":"anionex","email":"davidyang042@gmail.com"}],"readme":"# DSH Eye Care\n\n[English](README.md) | 中文\n\n暖色浅色、暖色暗色，自动跟随系统。\n\n这是一个 DeepSeek Harness Web Profile Bundle：用六套暖色语义主题替换冷白界面配色，同时保持原生外观偏好不被破坏。\n\n<p align=\"center\">\n  <img src=\"assets/eye-care-light.png\" alt=\"DSH Eye Care 设置行：暖色日间主题，已选择日间和温暖\" width=\"49%\">\n  <img src=\"assets/eye-care-dark.png\" alt=\"DSH Eye Care 设置行：暖色夜间主题，已选择自动和温暖\" width=\"49%\">\n</p>\n\n## 功能\n\nDSH Web 内置的 Light 与 Dark 主题偏冷。护眼模式在不使用全局 sepia 滤镜或图片变换的前提下，提供暖色浅色、暖色暗色和自动明暗切换。\n\n- **四种模式：** `off`、`auto`、`light`、`dark`。\n- **三档暖色强度：** `soft`、`balanced`、`warm`。\n- **六套具体主题**通过官方 ThemeService 注册。\n- **真正的语义 token**覆盖背景、文字、边框、按钮、sidebar、bubble、输入框、代码块、滚动条与 Shiki 配色。\n- **原生外观仍然权威：** 选择浅色、深色或跟随系统会关闭护眼模式，并保留新选择的主题。\n- **Loopback 持久化**把选择保存到 Host settings；远程浏览器则把选择保留在当前进程。\n\n## 预览\n\n上方截图分别展示暖色日间与暖色夜间状态下的 General 设置行。日间与夜间是显式模式；自动模式会按所选暖色强度跟随 `prefers-color-scheme`。设置行还提供 `aria-live` 状态提示和键盘可见的焦点状态。\n\n## 安装\n\n把公共 npm 包一键安装到 Web Profile：\n\n```sh\ndsh plugin --profile web add @anionex/dsh-eye-care\n```\n\n本地开发时，把包名替换为 checkout 的绝对路径或本地打包的 tarball。`DSH_HOME` 默认指向 `~/.dsh`；只想试用而不改动主 Profile 时，可把它指向一个临时目录。\n\n重启或启动 Web UI：\n\n```sh\ndsh web\n```\n\n打开 **设置 → 通用设置 → 护眼模式**，选择模式与暖色强度。\n\n## 主题矩阵\n\n| 明暗 | 柔和 | 均衡 | 温暖 |\n|---|---|---|---|\n| 浅色 | `eye-care-light-soft` | `eye-care-light-balanced` | `eye-care-light-warm` |\n| 暗色 | `eye-care-dark-soft` | `eye-care-dark-balanced` | `eye-care-dark-warm` |\n\n## 工作原理\n\nHost 半区使用旧版 `eye-care` Settings 命名空间或新版 `dsh-eye-care` Config 投影，并提供仅限 loopback 的 `/eye-care` RPC 路由。写入串行执行，并以 `expectedRevision` 做版本栅栏；发生冲突时重新读取 Host 快照，再重试最新意图。\n\nBrowser 半区注册六套配色，并注入 General 设置行。在新版宿主中使用公开的主题 token 层，避免 ConfigForms 刷新清除暖色；原始内置外观选择会跨刷新保留，并在关闭护眼时恢复。旧版宿主继续使用注册主题。控制器销毁时清除监听、主题和 token 层。远程浏览器的选择仅在当前浏览器生效。\n\n## 兼容性与限制\n\n- 候选版 0.1.2 面向 DSH `0.2.0-rc.2`；已实测 Web 安装、加载、模式切换和持久化，并用 `0.1.5-rc.1` Profile 回归。尚未发布。\n- 需要包含标准 `settings`、`connection`、`locale`、`slots` 和 `theme` 服务的 DeepSeek Harness Web Profile。\n- 原生外观切换按设计视为明确退出护眼模式。\n- 远程浏览器会话不会把护眼选择回写到 Host。\n- 不使用全局颜色滤镜；所有颜色都来自命名的语义 token。\n- 该包处于预发布阶段，遵循 Profile Bundle 格式；只要 bundle 已安装，其生成的主题 id 就保持稳定。\n\n## 开发\n\n```sh\ncd dsh-eye-care\npnpm install --frozen-lockfile\npnpm run check\npnpm run test\npnpm run build\n```\n\n运行可选的干净 Profile 安装测试：\n\n```sh\nDSH_EYE_CARE_PROFILE_E2E=1 pnpm exec vitest run tests/profile-install.e2e.spec.ts\n```\n\n## 许可证\n\n[MIT](LICENSE)\n","readmeFilename":"README.zh.md"}