{"_id":"@dachengge/dsh-session-manager","_rev":"2-2dce5b4d256c0b298ce585c013c10140","name":"@dachengge/dsh-session-manager","dist-tags":{"latest":"0.1.1"},"versions":{"0.1.0":{"name":"@dachengge/dsh-session-manager","version":"0.1.0","keywords":["dsh","dsh-plugin","session","dshm","harness"],"author":{"url":"赵成成","name":"成哥聊AI"},"license":"Apache-2.0","_id":"@dachengge/dsh-session-manager@0.1.0","maintainers":[{"name":"chengchengzhao","email":"chengchengzhao16@gmail.com"}],"homepage":"https://github.com/IdeoAllen/dsh-plugin#readme","bugs":{"url":"https://github.com/IdeoAllen/dsh-plugin/issues"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"platform":"web"}},"dist":{"shasum":"cbe7979c90d7326a653fa67de41028bcdf7d516b","tarball":"https://registry.npmjs.org/@dachengge/dsh-session-manager/-/dsh-session-manager-0.1.0.tgz","fileCount":15,"integrity":"sha512-zO8OOmGYr5aOhEGSjxv2ep9rwY0KvPieuykqao5hB4W0P7sovlF4KxIr/GcN+H0B8VnaS3QN6+R3yDssGC7Bkw==","signatures":[{"sig":"MEUCIQDWT7hVnWxnmhr/zAcX+Ox6FLLEWj46722NBWFh5YtCRgIgSPqVPZYApcgfNKjqWP+AM2QiO0NYUyCacek9gFpZkXU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":144312},"main":"./lib/index.js","type":"module","engines":{"node":">=22.19"},"exports":{".":"./lib/index.js","./client":"./lib/client.js","./package.json":"./package.json","./dsh.plugin.json":"./dsh.plugin.json","./cordis.patch.yml":"./cordis.patch.yml"},"gitHead":"ce8a3c426a1c87bd43a20407e183744a20df2695","_npmUser":{"name":"chengchengzhao","email":"chengchengzhao16@gmail.com"},"repository":{"url":"git+https://github.com/IdeoAllen/dsh-plugin.git","type":"git","directory":"packages/session-manager"},"_npmVersion":"11.6.2","description":"DSH 会话管理插件（dshm）：设置页「会话管理」面板 + 3082 端口上的完整 dshm 界面（会话列表/全文搜索/每步 token 趋势/导出/归档）。","directories":{},"_nodeVersion":"25.2.1","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/dsh-session-manager_0.1.0_1789113868213_0.5565533965242355","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"_id":"@dachengge/dsh-session-manager@0.1.1","dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"platform":"web"}},"bugs":{"url":"https://github.com/IdeoAllen/dsh-plugin/issues"},"dist":{"shasum":"5b38ab211af4b415080208b2edae50dc21de034a","tarball":"https://registry.npmjs.org/@dachengge/dsh-session-manager/-/dsh-session-manager-0.1.1.tgz","fileCount":15,"integrity":"sha512-zNz4/eJJenFRWeUJ6Vi1XQaUOo0uZXm6H1mz0kqSvpE/cU6He6tvC1UJaUwLJUne1+b5OuuJOc4Zz2UAhFhsHQ==","signatures":[{"sig":"MEQCICaxkJgdlpS/NQJaBD8G2PkHW6MewdpGRTyRXp4SeXMfAiBorfYEv/iqEOn9cZqR1rFmJOk6ZHljDlIzsXOb2i30ZA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQC/Ma3iAgCOlJ4gXsx+MbznlLjg1EK1EMvxM1mahG24+QIhALAoupxYFrhocDf5eTP83vd+/l81tuUUH7z0MvfCV/lH"}],"unpackedSize":144315},"main":"./lib/index.js","name":"@dachengge/dsh-session-manager","type":"module","author":{"url":"赵成成","name":"成哥聊AI"},"engines":{"node":">=22.19"},"exports":{".":"./lib/index.js","./client":"./lib/client.js","./package.json":"./package.json","./dsh.plugin.json":"./dsh.plugin.json","./cordis.patch.yml":"./cordis.patch.yml"},"gitHead":"29f4a4ac9c17cd8804f142779a25aca439f39137","license":"Apache-2.0","version":"0.1.1","_npmUser":{"name":"chengchengzhao","email":"chengchengzhao16@gmail.com"},"homepage":"https://github.com/IdeoAllen/dsh-plugin#readme","keywords":["dsh","dsh-plugin","session","dshm","harness"],"repository":{"url":"git+https://github.com/IdeoAllen/dsh-plugin.git","type":"git","directory":"packages/session-manager"},"_npmVersion":"11.6.2","description":"DSH 会话管理插件（dshm）：设置页「会话管理」面板 + 3082 端口上的完整 dshm 界面（会话列表/全文搜索/每步 token 趋势/导出/归档）。","directories":{},"maintainers":[{"name":"chengchengzhao","email":"chengchengzhao16@gmail.com"}],"_nodeVersion":"25.2.1","_hasShrinkwrap":false,"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/dsh-session-manager_0.1.1_1789114883780_0.4215319330824654"}}},"time":{"created":"2026-09-11T08:04:27.992Z","modified":"2026-09-11T08:21:24.047Z","0.1.0":"2026-09-11T08:04:28.348Z","0.1.1":"2026-09-11T08:21:23.856Z"},"bugs":{"url":"https://github.com/IdeoAllen/dsh-plugin/issues"},"author":{"url":"赵成成","name":"成哥聊AI"},"license":"Apache-2.0","homepage":"https://github.com/IdeoAllen/dsh-plugin#readme","keywords":["dsh","dsh-plugin","session","dshm","harness"],"repository":{"url":"git+https://github.com/IdeoAllen/dsh-plugin.git","type":"git","directory":"packages/session-manager"},"description":"DSH 会话管理插件（dshm）：设置页「会话管理」面板 + 3082 端口上的完整 dshm 界面（会话列表/全文搜索/每步 token 趋势/导出/归档）。","maintainers":[{"name":"chengchengzhao","email":"chengchengzhao16@gmail.com"}],"readme":"# @dachengge/dsh-session-manager\n\nDSH 会话管理插件：把原本独立的 **dshm** 网页（单独进程 + `127.0.0.1:8787`）**统一到 DSH 自身端口上**，\n并在设置页提供一个「会话管理」面板，与 DSH GUI 融为一个界面。\n\n## 提供什么\n\n| 形态 | 位置 | 说明 |\n|---|---|---|\n| 设置页面板 | DSH → 设置 → **会话管理** | 概览卡片、会话表、全文搜索、详情（含每步 token 趋势图）、导出、归档 |\n| 完整界面 | DSH 端口下的 **`/dshm`** | 原 dshm 单页应用（会话表格 / 搜索 / 详情抽屉 / 趋势图 / 导出），由 host 半区直接伺服，不再需要 8787 |\n\n数据全部来自 `$DSH_HOME`（只读为主）：\n\n| 文件 | 用途 |\n|---|---|\n| `storages/workspace.json` | 工作区注册表、会话分组、归档集合 |\n| `storages/session_projcache.json` | 会话投影：标题、统计、token、上下文、权限、目标、待办 |\n| `settings.yaml` | 默认模型等设置 |\n| `sessions/*/session.jsonl.zstd` | 会话日志（全文搜索 / 趋势 / 导出） |\n\n唯一的**写**操作：`archive` / `unarchive`（原子替换 `workspace.json`，保留其余字段）。\n建议在 GUI 空闲时归档，避免与正在运行的 Web GUI 竞争写入。\n\n## 注册的路由\n\n都挂在 DSH 自己的端口下（默认 `http://127.0.0.1:3082`）：\n\n```text\nGET  /dshm                                完整界面（原 8787 那份单页）\nGET  /dshm/api/overview                   概览 + 会话表 + 工作区表\nGET  /dshm/api/session?id=<id|前缀>        单个会话详情\nGET  /dshm/api/search?q=&all=&reasoning=   跨会话全文搜索（默认不含归档、不搜推理）\nGET  /dshm/api/trend?id=<id>               每步 token 用量序列\nGET  /dshm/api/export?id=&format=md|json   导出可读会话记录\nPOST /dshm/api/archive?id=&archived=true|false\n```\n\n## 安装\n\n```bash\n# 本地开发（link 到工作区里的源码）\ndsh plugin --profile web add link:C:/Users/43594/Desktop/harness中心/工具/dshm-plugin\n# 改完代码后同步核心并重启 DSH 生效\nnode 工具/dshm-plugin/sync-core.mjs\n```\n\n发布到市场前先跑 `node sync-core.mjs`（把 `../../dshm/lib` 的核心内联进 `lib/core`，保证包自包含），\n再 `npm pack --dry-run` 复核、`npm publish --access public`。\n\n## 目录结构\n\n```text\ndshm-plugin/\n├─ lib/index.js        host 半区：路由 + 完整界面伺服（/api/ → /dshm/api/ 改写）\n├─ lib/client.js       浏览器半区：设置页「会话管理」面板\n├─ lib/core/           内联的 dshm 核心（sync-core.mjs 生成，勿手改）\n│   ├─ home.js         主目录解析（--home > DSH_HOME > ~/.toa3 > ~/.dsh > WorkBuddy）\n│   ├─ store.js        读 workspace / projcache / settings 并归一化\n│   ├─ logs.js         会话日志读取（异步并发解压 + mtime 增量 + transcript 缓存）\n│   ├─ commands.js     会话/状态/用法等派生逻辑 + Markdown 渲染\n│   ├─ format.js       ANSI 颜色 + CJK 宽度排版（CLI 侧复用）\n│   └─ web/index.html  完整界面单页\n├─ sync-core.mjs       从 ../../dshm/lib 同步核心\n├─ test-smoke.mjs      host 半区冒烟（mock ctx，覆盖 8 条路由）\n├─ test-client.mjs     客户端半区冒烟（mock React + slot 注册）\n└─ dsh.plugin.json / cordis.patch.yml\n```\n\n## 性能说明\n\n会话日志是「一个 header frame + 每批 append 一个 frame」的 zstd 帧拼接，实测 9 个会话共 **7.3 万帧**\n（单个文件最多 6 万帧），且 Node 的 zstd **只解第一帧**，必须逐帧解。因此：\n\n- 解压走 `promisify(zstdDecompress)` + 16 并发（串行 await 会被线程池往返拖到 2 倍耗时），\n  **不阻塞 host 事件循环**——这是它能安全跑在 DSH 进程内的前提；\n- 结果按「文件 mtime+size」缓存成 transcript + trend，重复请求 0ms；\n- 会话 id → 日志路径做成一次遍历的索引，避免每个会话重走目录树。\n\n实测（9 会话 / 7.3 万帧）：搜索冷启动 ~2.6s、热 **6ms**；趋势冷 ~3.0s、热 **7ms**；\n5 个并发搜索合计 **29ms**（旧同步实现为 11.5s，且会把整个服务堵住）。\n","readmeFilename":"README.zh.md"}