{"_id":"@anionex/dsh-pinned-sessions","_rev":"3-d8f0ed9746134fed0101a3b510859397","name":"@anionex/dsh-pinned-sessions","dist-tags":{"latest":"0.1.2"},"versions":{"0.1.0":{"name":"@anionex/dsh-pinned-sessions","version":"0.1.0","keywords":["deepseek-harness","dsh","sessions","sidebar","productivity"],"license":"MIT","_id":"@anionex/dsh-pinned-sessions@0.1.0","maintainers":[{"name":"anionex","email":"davidyang042@gmail.com"}],"homepage":"https://github.com/Anionex/dsh-pinned-sessions#readme","bugs":{"url":"https://github.com/Anionex/dsh-pinned-sessions/issues"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"inject":["@deepseek-ai/dsh-client-ui-renderer","@deepseek-ai/dsh-client-ui-layout","@deepseek-ai/dsh-client-ui-session","@deepseek-ai/dsh-client-ui-workspace","@deepseek-ai/dsh-client-locale"],"platform":"web"},"compatibility":{"dsh":">=0.1.0-rc.8 <0.2.0","profiles":["web","desktop"],"dshReleases":{"0.1.1-rc.1":"compatible","0.1.2-alpha.1":"compatible"}}},"dist":{"shasum":"63174032d539db76169ce3d8dbb851bae542b914","tarball":"https://registry.npmjs.org/@anionex/dsh-pinned-sessions/-/dsh-pinned-sessions-0.1.0.tgz","fileCount":21,"integrity":"sha512-w9d8AuRQQ23jN400zIphfHPcwCQemnkmLfv5X6Wi2dRZCtbGWN7bQ2CTClwY2nKqN7xIH9yj8Vgava/TWZ2jyw==","signatures":[{"sig":"MEYCIQCBmOQWU7lLoFzjFeEz+Bf3H2BHeIPUJSP3MYssAMlz7QIhAP3R00GLCjoxaPNNhMjkjCTgZ8AeGwm34iJnu42U+ZaM","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":136615},"main":"lib/index.js","type":"module","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"},"gitHead":"33cf42deff33935888f59880964e449ad23f9436","scripts":{"test":"vitest run && node --test tests/package-layout.test.mjs","build":"node scripts/clean.mjs && tsc -p tsconfig.build.json && tsc -p tsconfig.client.json && esbuild src/client/index.tsx --bundle --platform=browser --format=cjs --jsx=automatic --external:react --external:react/jsx-runtime --external:react-dom --sourcemap --outfile=.client-build/index.js && node scripts/wrap-client.mjs","check":"tsc -p tsconfig.json && tsc -p tsconfig.client.json --noEmit false --emitDeclarationOnly true && pnpm run build && vitest run && node --test tests/package-layout.test.mjs && pnpm pack --dry-run","prepack":"pnpm run build"},"_npmUser":{"name":"anionex","email":"davidyang042@gmail.com"},"repository":{"url":"git+https://github.com/Anionex/dsh-pinned-sessions.git","type":"git"},"_npmVersion":"11.19.0","description":"Pin important DeepSeek Harness sessions at the top of the workspace sidebar","directories":{},"_nodeVersion":"26.8.1","_hasShrinkwrap":false,"packageManager":"pnpm@11.8.0","devDependencies":{"jsdom":"^26.1.0","react":"18.3.1","lucide":"0.468.0","vitest":"^4.0.0","esbuild":"^0.25.9","react-dom":"18.3.1","typescript":"^5.9.2","@types/node":"^24.0.0","@types/react":"~18.3.1","lucide-react":"^0.468.0","@types/react-dom":"~18.3.1"},"peerDependencies":{"react":"^18.2.0","react-dom":"^18.2.0","@deepseek-ai/cordis":"^4.0.1"},"_npmOperationalInternal":{"tmp":"tmp/dsh-pinned-sessions_0.1.0_1788514111654_0.04614225181805365","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@anionex/dsh-pinned-sessions","version":"0.1.1","keywords":["deepseek-harness","dsh","sessions","sidebar","productivity"],"license":"MIT","_id":"@anionex/dsh-pinned-sessions@0.1.1","maintainers":[{"name":"anionex","email":"davidyang042@gmail.com"}],"homepage":"https://github.com/Anionex/dsh-pinned-sessions#readme","bugs":{"url":"https://github.com/Anionex/dsh-pinned-sessions/issues"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"inject":["@deepseek-ai/dsh-client-ui-renderer","@deepseek-ai/dsh-client-ui-layout","@deepseek-ai/dsh-client-ui-session","@deepseek-ai/dsh-client-ui-workspace","@deepseek-ai/dsh-client-ui-primitives","@deepseek-ai/dsh-client-locale"],"platform":"web"},"compatibility":{"dsh":">=0.1.0-rc.8 <0.2.0","profiles":["web","desktop"],"dshReleases":{"0.1.1-rc.1":"compatible","0.1.2-alpha.1":"compatible"}}},"dist":{"shasum":"fcaae3aba6876ad8692a4a3a5f56d6ecfba20ff3","tarball":"https://registry.npmjs.org/@anionex/dsh-pinned-sessions/-/dsh-pinned-sessions-0.1.1.tgz","fileCount":25,"integrity":"sha512-b9MViy3WYWZ08InfNRelvpvg+HejfxyLUZ4GeziTSRvMf0gu2Fm8aXqXpWdf48SQ5mMamR1RP9DDahX/F0hINA==","signatures":[{"sig":"MEQCHz4unZkRWu58K0ZRhw4zhWon8AoWllHsTcFTPZr5qDICIQD4OAFR2dASUdOAtwEVAaGERS8y3pp3Y3roXF4+g+Jafg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":504409},"main":"lib/index.js","type":"module","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"},"gitHead":"cd5439d56c0a8c2283a35e45a2eb7199478e8a20","scripts":{"test":"vitest run && node --test tests/package-layout.test.mjs","build":"node scripts/clean.mjs && tsc -p tsconfig.build.json && tsc -p tsconfig.client.json && esbuild src/client/index.tsx --bundle --platform=browser --format=cjs --jsx=automatic --external:react --external:react/jsx-runtime --external:react-dom --external:@deepseek-ai/dsh-client-ui-primitives --sourcemap --outfile=.client-build/index.js && node scripts/wrap-client.mjs","check":"tsc -p tsconfig.json && tsc -p tsconfig.client.json --noEmit false --emitDeclarationOnly true && pnpm run build && vitest run && node --test tests/package-layout.test.mjs && pnpm pack --dry-run","prepack":"pnpm run build"},"_npmUser":{"name":"anionex","email":"davidyang042@gmail.com"},"repository":{"url":"git+https://github.com/Anionex/dsh-pinned-sessions.git","type":"git"},"_npmVersion":"11.19.0","description":"Pin important DeepSeek Harness sessions at the top of the workspace sidebar","directories":{},"_nodeVersion":"26.8.1","_hasShrinkwrap":false,"packageManager":"pnpm@11.8.0","devDependencies":{"jsdom":"^26.1.0","react":"18.3.1","lucide":"0.468.0","vitest":"^4.0.0","esbuild":"^0.25.9","react-dom":"18.3.1","typescript":"^5.9.2","@types/node":"^24.0.0","@types/react":"~18.3.1","lucide-react":"^0.468.0","@types/react-dom":"~18.3.1"},"peerDependencies":{"react":"^18.2.0","react-dom":"^18.2.0","@deepseek-ai/cordis":"^4.0.1","@deepseek-ai/dsh-client-ui-primitives":">=0.1.0-rc.8 <0.2.0"},"_npmOperationalInternal":{"tmp":"tmp/dsh-pinned-sessions_0.1.1_1788521787120_0.018074004599045734","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"_id":"@anionex/dsh-pinned-sessions@0.1.2","dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"inject":["@deepseek-ai/dsh-client-ui-renderer","@deepseek-ai/dsh-client-ui-layout","@deepseek-ai/dsh-client-ui-session","@deepseek-ai/dsh-client-ui-workspace","@deepseek-ai/dsh-client-ui-primitives","@deepseek-ai/dsh-client-locale"],"platform":"web"},"compatibility":{"dsh":">=0.1.0-rc.8 <0.2.0 || 0.2.0-rc.2","profiles":["web","desktop"],"dshReleases":{"0.1.1-rc.1":"compatible","0.2.0-rc.2":"compatible","0.1.2-alpha.1":"compatible"}}},"bugs":{"url":"https://github.com/Anionex/dsh-pinned-sessions/issues"},"dist":{"shasum":"44d5f3814433eff8f5dae50f5c501361bea97079","tarball":"https://registry.npmjs.org/@anionex/dsh-pinned-sessions/-/dsh-pinned-sessions-0.1.2.tgz","fileCount":26,"integrity":"sha512-Ye1slkvPyS0Rz4a5wHL24ZJ4mkEyz0sfvF3vK27o7Mbm1dn9uEGpqOPir0KyPHFaJppxppiB/ANNA9uVJDDf2g==","signatures":[{"sig":"MEYCIQCFESz0L+Mi7hLEutVHm5VKYvK+bw/8vBS80gGhlnVHkAIhAKvGRh6Cshnbz7/pfPvwJf/a28AvRZYBUTtFtyBs5EfN","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDEhB1bC4Sb54yebNunVfZzYAApjovEVRo+sBHWrTNWvwIgPzTLBBzF7sz/44BAHVS5uqMNGGAYU5XAoT4PLmVF0xQ="}],"unpackedSize":523913},"main":"lib/index.js","name":"@anionex/dsh-pinned-sessions","type":"module","_from":"file:/Users/davidyang/dsh-worktrees/compat-20261001/releases/dsh-pinned-sessions/0.1.2/anionex-dsh-pinned-sessions-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":"vitest run && node --test tests/package-layout.test.mjs","build":"node scripts/clean.mjs && tsc -p tsconfig.build.json && tsc -p tsconfig.client.json && esbuild src/client/index.tsx --bundle --platform=browser --format=cjs --jsx=automatic --external:react --external:react/jsx-runtime --external:react-dom --external:@deepseek-ai/dsh-client-ui-primitives --sourcemap --outfile=.client-build/index.js && node scripts/wrap-client.mjs","check":"tsc -p tsconfig.json && tsc -p tsconfig.client.json --noEmit false --emitDeclarationOnly true && pnpm run build && vitest run && node --test tests/package-layout.test.mjs && pnpm pack --dry-run","prepack":"pnpm run build"},"version":"0.1.2","_npmUser":{"name":"anionex","email":"davidyang042@gmail.com"},"homepage":"https://github.com/Anionex/dsh-pinned-sessions#readme","keywords":["deepseek-harness","dsh","sessions","sidebar","productivity"],"_resolved":"/Users/davidyang/dsh-worktrees/compat-20261001/releases/dsh-pinned-sessions/0.1.2/anionex-dsh-pinned-sessions-0.1.2.tgz","_integrity":"sha512-Ye1slkvPyS0Rz4a5wHL24ZJ4mkEyz0sfvF3vK27o7Mbm1dn9uEGpqOPir0KyPHFaJppxppiB/ANNA9uVJDDf2g==","repository":{"url":"git+https://github.com/Anionex/dsh-pinned-sessions.git","type":"git"},"_npmVersion":"11.19.0","description":"Pin important DeepSeek Harness sessions at the top of the workspace sidebar","directories":{},"maintainers":[{"name":"anionex","email":"davidyang042@gmail.com"}],"_nodeVersion":"26.8.1","_hasShrinkwrap":false,"packageManager":"pnpm@11.8.0","devDependencies":{"jsdom":"^26.1.0","react":"18.3.1","lucide":"0.468.0","vitest":"^4.0.0","esbuild":"^0.25.9","react-dom":"18.3.1","typescript":"^5.9.2","@types/node":"^24.0.0","@types/react":"~18.3.1","lucide-react":"^0.468.0","@types/react-dom":"~18.3.1"},"peerDependencies":{"react":"^18.2.0","react-dom":"^18.2.0","@deepseek-ai/cordis":"^4.0.1","@deepseek-ai/dsh-client-ui-primitives":">=0.1.0-rc.8 <0.2.0 || 0.2.0-rc.2"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/dsh-pinned-sessions_0.1.2_1790829976685_0.10839452727601873"}}},"time":{"created":"2026-09-04T09:28:31.496Z","modified":"2026-10-01T04:46:16.970Z","0.1.0":"2026-09-04T09:28:31.785Z","0.1.1":"2026-09-04T11:36:27.250Z","0.1.2":"2026-10-01T04:46:16.817Z"},"bugs":{"url":"https://github.com/Anionex/dsh-pinned-sessions/issues"},"license":"MIT","homepage":"https://github.com/Anionex/dsh-pinned-sessions#readme","keywords":["deepseek-harness","dsh","sessions","sidebar","productivity"],"repository":{"url":"git+https://github.com/Anionex/dsh-pinned-sessions.git","type":"git"},"description":"Pin important DeepSeek Harness sessions at the top of the workspace sidebar","maintainers":[{"name":"anionex","email":"davidyang042@gmail.com"}],"readme":"<p align=\"center\">\n  <img src=\"assets/hero.png\" alt=\"DeepSeek Harness 侧栏中显示置顶会话及其原生操作菜单\" width=\"100%\">\n</p>\n\n# DSH Pinned Sessions\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/@anionex/dsh-pinned-sessions\"><img alt=\"npm 版本\" src=\"https://img.shields.io/npm/v/@anionex/dsh-pinned-sessions?style=flat-square\"></a>\n  <a href=\"https://github.com/Anionex/dsh-pinned-sessions/actions/workflows/ci.yml\"><img alt=\"CI 状态\" src=\"https://img.shields.io/github/actions/workflow/status/Anionex/dsh-pinned-sessions/ci.yml?branch=main&style=flat-square&label=CI\"></a>\n  <a href=\"LICENSE\"><img alt=\"MIT 许可证\" src=\"https://img.shields.io/github/license/Anionex/dsh-pinned-sessions?style=flat-square\"></a>\n  <img alt=\"支持 DeepSeek Harness Web 和 Desktop\" src=\"https://img.shields.io/badge/DSH-Web%20%2B%20Desktop-0F766E?style=flat-square\">\n</p>\n\n<p align=\"center\"><strong>置顶重要会话，不必再从每个工作区里反复查找。</strong></p>\n\n<p align=\"center\">\n  <a href=\"README.md\">English</a> · <strong>简体中文</strong>\n</p>\n\nDeepSeek Harness 会把 Session 保留在原工作区中。会话增多后，返回少数活跃 Session 需要反复扫描列表。DSH Pinned Sessions 在工作区标题下增加一块紧凑的置顶区，同时保留每条原生 Session 行。\n\n## 实际效果\n\n<p align=\"center\">\n  <img src=\"assets/pinned-session-menu.png\" alt=\"工作区侧栏顶部的一条置顶会话，已打开重命名、分叉、取消置顶和归档操作\" width=\"465\">\n</p>\n\n悬浮置顶行即可显示三点菜单。Web profile 提供**重命名**、**分叉会话**、**从顶部分组取消置顶**和**归档会话**。Desktop profile 在 Archive Manager 为原生会话提供删除能力时，还会显示**删除会话**。\n\n## 主要能力\n\n- **从侧栏顶部直接返回活跃任务：**置顶副本位于工作区标题下，按最近置顶排序。\n- **保留原有工作区结构：**原生 Session 不会被移动或删除。\n- **沿用熟悉的操作：**置顶行使用 DSH 的 Menu、Modal、Button、图标和服务 API。\n- **绑定准确的 Session ID：**插件不会根据标题或列表位置猜测会话。\n- **数据留在本机：**插件只保存 Session ID 和置顶时间，不读取或复制对话内容。\n- **支持键盘操作：**方向键可切换菜单项，Escape 会归还焦点，删除行后焦点会落到下一个有效目标。\n\n## 快速开始\n\n按需安装到一个 profile，也可以执行两条命令：\n\n```bash\ndsh plugin add @anionex/dsh-pinned-sessions --profile web\ndsh plugin add @anionex/dsh-pinned-sessions --profile desktop\n```\n\n刷新 Web 或重启 Desktop。打开任意原生 Session 的三点菜单，选择**置顶到顶部分组**。置顶副本会出现在工作区标题下；从任意一侧菜单选择**从顶部分组取消置顶**即可移除。\n\n### 环境要求\n\n- DeepSeek Harness `>=0.1.0-rc.8 <0.2.0`\n- Node.js `^22.19.0` 或 `>=24.0.0`\n- `web` 或 `desktop` DSH profile\n\n## 兼容性\n\n| Profile | 置顶行操作 | 已验证行为 |\n| --- | --- | --- |\n| Web | 重命名、分叉、取消置顶、归档 | 使用 DSH 官方组件和 Session/Workspace 服务 |\n| Desktop | 重命名、分叉、取消置顶、归档、可选删除 | 仅在 Archive Manager 暴露删除能力时显示删除和失败 Toast |\n\n保留既有版本范围。0.1.2 版 增加 DSH `0.2.0-rc.2` 安装支持，使用其官方会话菜单 slot 和工作区导航服务。插件顶部分组与宿主工作区内置置顶分别保留。已通过 Web 及官方 Electron Desktop 安装与交互验收，见 [CHANGELOG](CHANGELOG.md)。旧版宿主继续使用稳定的 slot/ARIA 桥接。\n\n## 工作原理\n\n1. 用户点击原生 Session 菜单时，插件同步捕获该 Session 的准确 ID。\n2. `PinStore` 把 ID 和置顶时间写入 `localStorage` 的 `dsh.pinned-sessions.v1`。\n3. `shell.overlay` 挂载点观察 `[data-slot=\"sidebar.workspaces\"]`，并把紧凑列表 portal 到标题下方。\n4. 置顶行通过 DSH Session 和 Workspace 服务执行操作；Desktop 删除使用可选的 Workspace Registry 服务。\n\n存储层最多保留 500 个唯一 ID，并自动清理已不存在或已归档的 Session。\n\n## 数据与限制\n\n- 置顶状态属于当前 DSH 浏览器源/profile，不会跨设备同步。\n- 插件只在 `localStorage` 中保存 Session ID 和 `pinnedAt` 时间戳。\n- 置顶行是原生行的快捷副本，不会移动或删除原位置。\n- Desktop 删除能力未加载时，删除菜单项保持隐藏。\n- DSH 客户端 API 会随预发布版本变化；请以包兼容元数据中明确实测的版本结论为准。\n\n## 开发\n\n```bash\ngit clone https://github.com/Anionex/dsh-pinned-sessions.git\ncd dsh-pinned-sessions\ncorepack enable\npnpm install --frozen-lockfile\npnpm run check\n```\n\n`pnpm run check` 会检查两个目标的类型、重建可分发客户端、运行 Vitest 和包布局测试，并执行 npm 打包预检。\n\n## 社区\n\n- 提交 Pull Request 前请阅读 [CONTRIBUTING.md](CONTRIBUTING.md)。\n- 安全问题按 [SECURITY.md](SECURITY.md) 中的私密渠道报告。\n- [SUPPORT.md](SUPPORT.md) 说明了不同问题应使用的入口。\n- [CHANGELOG.md](CHANGELOG.md) 记录每个版本的变化。\n- 赞助维护工作前请阅读 [FUNDING.md](FUNDING.md)。\n- 参与项目空间时请遵守 [行为准则](CODE_OF_CONDUCT.md)。\n\n项目采用 [MIT License](LICENSE)。\n","readmeFilename":"README.zh.md"}