按项目整理会话,置顶常用聊天并标记未读
29.9/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/11/3 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add lucagiftzek/dsh-workspace-rail该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:仅索引
是什么
dsh 原生插件 · browser
装得上吗
本站尚未做安装检查
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 2 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
可执行外部命令读写/删除本地文件写入剪贴板(不计风险)发起外部网络请求
查看扫描证据(共 12 处,展示前 11 条)
- 读取本地文件lib/index.js:195
return statSync(path); - 写入本地文件lib/index.js:471
const out = createWriteStream(target, { flags: "wx", mode: 420 }); - 读取本地文件lib/index.js:499
statSync2(expandHome(d.pointer)); - 执行外部命令来自配置/变量lib/index.js:627
execFile(cmd, args, { timeout: timeoutMs, maxBuffer: 64 * 1024 * 1024, encoding: "utf8" }, (err, stdout) => err ? fail(err) : ok(stdout)); - 写入剪贴板lib/client.js:3124
await this.doc.defaultView?.navigator.clipboard.writeText(text); - 发起网络请求lib/client.js:3543
const r = await opts.fetch(API_BASE + "/state", { credentials: "same-origin", headers: { accept: "application/json" } }); - 发起网络请求lib/client.js:3556
const r = await opts.fetch(API_BASE + "/state", { - 发起网络请求lib/client.js:4021
fetch: (url, init) => fetch(url, init), - 发起网络请求lib/client.js:4129
void sync.flush().then(() => fetch(API_BASE + "/health?project=" + encodeURIComponent(pid), { credentials: "same-origin" })).then((r) => r.ok ? r.json - 发起网络请求lib/client.js:4434
const r = await fetch(API_BASE + "/project", { - 发起网络请求lib/client.js:4667
const r = await fetch(API_BASE + "/project/delete", {
扫描于 2026/11/3(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh-client-connection@deepseek-ai/dsh-client-ui-layout@deepseek-ai/dsh-client-ui-settings@deepseek-ai/dsh-client-ui-sidebar@deepseek-ai/dsh-session@deepseek-ai/dsh-settings@deepseek-ai/schemastery给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
DeepSeek Harness 网页界面以工作区为先的侧边栏:置顶会话、按文件夹归类的项目、实时最近记录、搜索、未读标记。
README
由 DeepSeek 最新模型翻译生成dsh-workspace-rail
一个以工作区为先的 DSH 侧边栏:置顶聊天、把项目当文件夹、实时最近列表和未读标记。
dsh plugin --profile web add @lucagiftzek/dsh-workspace-rail
or from GitHub: dsh plugin --profile web add github:lucagiftzek/dsh-workspace-rail
then restart dsh web
The workspace rail with pinned chats and the rail settings
截图来自一个带示例数据的 DSH 演示实例。
一个以工作区为先的侧边栏栏条,用于 DeepSeek Harness(DSH)Web 图形界面:置顶聊天(含文件夹)、项目(相互隔离的工作区文件夹,各自带指令和文件)、按最后一轮完成时间排序的虚拟化最近列表、分级会话记录搜索、未读标记,以及实时更新的浏览器标签页标题。
支持 DSH 0.2.x(已在 0.2.1 上测试),同一份构建也支持 DSH 0.1.5。
展开完整文档(README 剩余 1 节)
dsh-workspace-rail 一个以工作区为先的 DSH 侧边栏:置顶聊天、把项目当文件夹、实时最近列表和未读标记。 dsh plugin --profile web add @lucagiftzek/dsh-workspace-rail or from GitHub: dsh plugin --profile web add github:lucagiftzek/dsh-workspace-rail then restart dsh web The workspace rail with pinned chats and the rail settings 截图来自一个带示例数据的 DSH 演示实例。 一个以工作区为先的侧边栏栏条,用于 DeepSeek Harness(DSH)Web 图形界面:置顶聊天(含文件夹)、项目(相互隔离的工作区文件夹,各自带指令和文件)、按最后一轮完成时间排序的虚拟化最近列表、分级会话记录搜索、未读标记,以及实时更新的浏览器标签页标题。 支持 DSH 0.2.x(已在 0.2.1 上测试),同一份构建也支持 DSH 0.1.5。 安装 从 npm 安装:dsh plugin --profile web add @lucagiftzek/dsh-workspace-rail;或从 GitHub 安装:dsh plugin --profile web add github:lucagiftzek/dsh-workspace-rail。 dsh plugin --profile web add @lucagiftzek/dsh-workspace-rail or from GitHub: dsh plugin --profile web add github:lucagiftzek/dsh-workspace-rail 包内声明了 dsh.bundle,所以 dsh plugin add 会把它列进配置档的 bundle 里;重启 dsh web 加载宿主侧部分。想基于本地检出开发,改用: git clone https://github.com/lucagiftzek/dsh-workspace-rail cd dsh-workspace-rail && npm install && npm run build dsh plugin --profile web add link:$PWD lib/ 已提交进仓库,所以普通安装不需要构建步骤。 选项 行选项写在配置档 cordis.patch.yml 的 - id: workspace-rail 行里,放在 config: 下面。 | 选项 | 默认值 | 含义 | | enableRail | true | 在 Web 图形界面里挂载栏条。 | | stripeEdge | right | 聊天、文件夹和项目行上彩色条纹贴哪一侧。 | | recentsMaxRows | 5000 | 最近列表保留的行数上限。 | | projectsRoot | ~/dsh-projects | 各项目文件夹的创建位置。 | | trustedHosts | [] | 栏条 API 接受的主机名(回环地址之外)。留空表示沿用 DSH 自己信任的授权来源:dsh web 命令行上每个 --trusted-host 值,加上逗号分隔的环境变量 DSH_WORKSPACE_RAIL_TRUSTED_HOSTS。 | | enablePointerHealth | true | 检查关联的项目文件是否仍然存在。 | | enableWindowsIndex | false | 仅 DSH 0.1.5:为搜索提供会话记录窗口桥接。 | 如果你在反向代理后面用公网主机名提供 DSH 服务,启动时本来就会带上 dsh web --trusted-host app.example.com(核心自己的 API 防护需要它),栏条会自动沿用,不用额外配置。 实现方式 双面插件(宿主侧和浏览器侧),与 dsh-session-pin 遵循同一套 harness 约定: - src/index.ts:宿主端。提供 rail 自己的 API 和文件存储;在 DSH 0.1.5 上还会注册 workspace-rail 设置命名空间(见「DSH 版本」)。 - src/client.ts:浏览器端。目录同步(会话和工作区快照)、rail 面板(原生 DOM,位于 React 树之外)、虚拟化 Recents。 - src/scoring.ts:纯 4 级分级搜索打分(标题 x40,文档名和标签 x15,前 3 条消息 x8,后 3 条消息 x4,14 天时效衰减,置顶 x1.2 加权)。 放置 rail 就是侧边栏列表:浏览器端在优先级 -2 注册 sidebar.workspaces 席位,比 dsh-metafolder-plugin(-1)低一级,后者又比内置浏览器(0)低一级。标题栏的 Rail | Folders 开关会注销该席位,露出下面的文件夹视图(没有用 CSS 隐藏任何东西);sidebar.footer.action 里的 Rail 按钮可以把它调回来。选择按浏览器保存(localStorage['dsh.workspace-rail.view'])。没有席位注册表的宿主会回退到浮动面板。 rail 会隐藏 dsh-session-pin 的「Pinned sessions」页脚按钮,因为 rail 的 PINNED 分区列出的就是同一批置顶项;置顶功能本身不受影响。src/rail-style.ts 里有一条 CSS 规则(PIN_FOOTER);删掉它就能让按钮回来。 颜色取自宿主的 --dsw-alias- token,所以 rail 会跟随浅色和深色模式,以及叠加在上面的任何主题;主题插件也可以设置 --tz- 变量(强调色、显示字体、圆角、阴影)。子代理的记录不会出现在 Recents 里;行内显示紧凑的时长,点击打开聊天。 重命名: 三击聊天标题,或用行菜单里的 Rename。Enter 保存,Esc 取消,点击别处也会保存。重命名走宿主(ctx.sessions.binding(id).session.rename),同时会把标题固定住,防止自动重新生成。 项目 点击项目会在 rail 内打开它的视图:先是 Chats(行和 Recents 一样:打开、重命名、时长;行菜单里有 Remove from project),带 + New chat(创建并归档到项目里,然后打开)和 Add chats...(可搜索的选择器)。下面是 Files:粘贴路径或 URL 后按 Enter,或拖入文本路径;名称和类型会自动推断(src/files.ts)。安装了 dsh-better-sidebar 插件时,点击文件会在它的编辑器里打开(可选的 ctx.inject(['betterSidebar']));链接在新标签页打开。服务器找不到的文件会被标记出来,可以一键移除。文件只是链接:不会复制任何内容。 移动、移除和删除会立即生效,并弹出 Undo 提示。 项目就是文件夹 每个项目对应 ~/dsh-projects/<name>-<id>/(选项 projectsRoot)。+ New chat 会把该文件夹注册为 DSH 工作区(标题和项目一样)并打开它的聊天,路径和 DSH 的 New Session 相同。接着 DSH 自己的指令加载器会应用该文件夹的 AGENTS.md,这个文件由 rail 根据项目的 Instructions、Project memory(助手保留 PROJECT-MEMORY.md)和 Answer from project files only 设置。 上传的文件会落到该文件夹里,助手因此能读到它们。在文件夹里发起的聊天会自动归入该项目。 搜索、模型、归档 - project_search(智能体工具,src/host/search.ts):对项目文件夹和链接文件按约 30 行的段落做 BM25 检索(文本和代码,PDF 走 pdftotext,.docx 走 unzip);命中结果带 file:line。检索范围限定在发起调用的聊天所属项目。 - 每个项目的默认模型:从 DSH 的模型目录里选,在第一条消息发出前应用到 + New chat。 - Archive 把项目藏到「Archived (n)」后面,内容全部保留。Delete 会先询问,除非勾选,否则保留文件夹;宿主只删除已保存状态里记录的文件夹,且只在 projectsRoot 内删。 布局 Pinned 和 Projects 有固定表头,各自有独立滚动列表,高度为 N 行(拖动分区下方的分隔线,或用设置里的步进器调整);点表头可折叠该分区;Recents 占满剩余空间。每个表头标签前的小按钮把该分区展开到侧边栏全高;再按一次恢复之前的布局。 Recents 按最后一次完成的轮次排序,最新的在前,并实时更新:宿主为每个聊天推送从运行到空闲的边沿,侧栏据此打上时间戳(不轮询),时间戳按浏览器存在 localStorage 里(dsh.workspace-rail.completedAt)。 浏览器标签页(图标和标题) - 图标:一个小像素侧栏图标(assets/)。构建时以 data: URL 内联进 lib/client.js,浏览器不会为它发请求。替换 assets/ 里的四个文件并重新构建,就能显示你自己的 logo。关闭该功能后,外壳自带的图标链接会恢复。 - 标题,按第一条命中的规则(src/tab-title.ts): 1. 有未读回复:(N) <first words of the newest unread reply>,或当前打开的聊天正在工作时为 (N) <kitty frame>; 2. 屏幕上没有聊天:DeepSeek Harness; 3. 当前打开的聊天正在工作:一行 kitty 动画; 4. 当前打开的聊天空闲:其最后一条消息的开头几个词。 - 未读:本浏览器看到某个聊天在最后一次显示于屏幕之后完成了一轮,该聊天即为未读。子代理、已收起和已归档的聊天不计入。各标签页通过 localStorage 共享时间戳。 - 行标记:Pinned、Recents 和项目列表里每个未读聊天上一个小蓝点;项目行或折叠文件夹里含未读时也有;侧边栏折叠时,Rail 图标上也有。 - 关闭开关:侧栏 Settings 里的「Browser tab」Live 或 Off。 持久化与安全 状态存在 ~/.dsh/workspace-rail/state.json,由侧栏自己的 API 提供(/workspace-rail/api,src/host/api.ts),不走 DSH 设置:DSH 给每个非回环浏览器一个内存模式的设置作用域,写在那里永远到不了宿主。浏览器先加载宿主副本,合并只有它自己持有的内容,然后做防抖保存,并带修订检查(409 表示另一个标签页胜出,沿用它的状态)。 DSH 不校验插件路由,所以 API 会检查每个请求:回环对端(DSH 位于同一台机器的反向代理之后)和可信的 Host;写操作还需要匹配的 Origin、X-Requested-With: dsh-workspace-rail 标记和 harness 会话 cookie。 DSH 版本 同一份构建可运行在 DSH 0.1.5 和 DSH 0.2.x 上(对端 >=0.1.2-rc.1 <0.3.0)。宿主按能力选择路径,不看版本号: - 0.1.5(ctx.settings.register 存在):注册 workspace-rail 命名空间,首次启动时写入 state.json 种子数据,并带有 transcript-window 桥接(默认关闭)。 - 0.2.x(ctx.settings 是表单服务):state.json 是唯一的存储,窗口桥接不可用。 开发 npm install npm run typecheck && npm test && npm run build 测试使用 vitest 和 jsdom,不需要运行 DSH。 许可证 Apache-2.0,见 LICENSE。 同一作者的其他插件 全部开源,运行在 DeepSeek Harness 0.2.x 上(其中几个也支持 0.1.5)。 | 插件 | 功能 | | dsh-artifacts | 一个 Artifacts 标签页,列出智能体产出的文件并就地预览,另带模板库,智能体可以使用和扩展 | | dsh-mail | 邮件客户端和智能体邮件工具:支持 IMAP、POP3、SMTP 和 OAuth2 账户,定时发送和批量发送,并处理退订 | | dsh-note-keeper | 侧边栏里的 Obsidian 兼容 Markdown 笔记,带搜索、关系图、语音笔记和转写、OCR 以及客户端加密 | | dsh-phone | 短信和通话(Twilio、经 Asterisk 的 SIP),通话音频走你自己的服务器,支持实时语音信箱和 Telegram | | dsh-voice | 朗读、听写和语言感知语音,接入 23 个 TTS 和 STT 服务商,按语言路由并高亮单词 | | dsh-orchestrator | 智能体集群和任务编排:一个 Orchestrate 标签页、orch_* 工具、runner、服务商卡片和机器 API | | dsh-workspace-rail(就是本插件) | 以工作区为先的侧边栏栏轨:置顶会话、以文件夹呈现的项目、实时 Recents、搜索和未读标记 | | DSH-Idle-Watchdog | 空闲会话提醒,以及一个带认证的 HTTP API,可向任意会话投递提示词 | | dsh-plugin-updates | 更新检查器,只提供你当前运行的 DSH 核心能加载的版本 | | dsh-subagent-tiering | 子代理默认使用父模型更便宜的同类模型,除非智能体指定了路由 | | dsh-fs-reobserve | 智能体自己的 shell 命令执行完后,文件状态过期报错就没了 | | dsh-request-image-cap | 把发给模型的每张图片压到像素上限内,解决多图请求报错 | | dsh-seal | 挡在 DSH 前面的加密通道:一个 Go 反向代理,加一个 service worker,把 DSH 的全部浏览器流量封起来 | 作者 Luca Tzekos,他还做了 Job Opportunities API:雇主直招的职位数据,每个字段都带来源,你可以自己核验,免费阅读,也提供 API。这个插件对你有用的话,给这个仓库点个 star,或者去看看 jobopportunitiesapi.org,就是最好的感谢。
预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
lucagiftzek/dsh-workspace-rail
按项目整理会话,置顶常用聊天并标记未读
相关插件 · 浏览器
智能体插件框架deepseek-ai/deepseek-harness
DeepSeek Harnessdsh是由 DeepSeek AI 开发的开源 agent harness智能体框架。
★ 270,422已汉化DSH
71.9
多设备 Agent 看板YaoApp/yao
✨ 所有 Agent 和工作区集中管理,覆盖你的每一台设备。任务看板追踪进度,桌面端、移动端、浏览器、API…
★ 8,147已汉化DSH
71.2
可扩展侧边栏工作台omdsh-dev/DSH-better-sidebar
DSH 的双工作台:原生右侧栏 + 自绘底部面板,并把 ctx.betterSidebar 服务开放给所有插件
★ 4,761已汉化DSH
71.1
浏览器自动化桥Tencent/BrowserSkill
你的 Agent。你的浏览器。连接,就能协作。
★ 9,967已汉化DSH
71
AI 小说创作工作台EthanYoQ/AI-Novel-Writer
AI 小说作家 / AI Novel Writer
★ 1,591已汉化DSH
70.7
智能体浏览器引擎platonai/Browser4
DeepSeek Harness 集成
★ 1,175已汉化DSH
70.4
这是你的仓库?认领条目