在单个 DeepSeek Harness DSH 实例上实现"项目 +…
41.6/100
综合分
22
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/9/17 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
自动兼容检查有告警:未发布到 npm registry,仅可从源码安装。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add king-bcolor/dsh-multi-tenant-projects该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:已验证
是什么
dsh 原生插件 · security
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 79 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查⚠ 装前注意未发布到 npm registry,仅可从源码安装
展开查看检查明细 ↓
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
✗npm 包dsh-multi-tenant-projects(未发布到 npm,仅可源码安装)
✓Node 引擎未声明 engines.node
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明
验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/30 15:49:10
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
读写/删除本地文件发起外部网络请求
查看扫描证据(共 31 处,展示前 29 条)
- 读取本地文件lib/index.js:401
const raw = await readFile(this.file, "utf8"); - 写入本地文件lib/index.js:410
await mkdir(dirname(this.file), { recursive: true }); - 写入本地文件lib/index.js:412
await writeFile(tmp, JSON.stringify(this.data), "utf8"); - 写入本地文件lib/index.js:413
await rename(tmp, this.file); - 写入本地文件lib/index.js:473
async mkdir(path) { - 写入本地文件lib/index.js:474
await nodeFs.mkdir(path, { recursive: true }); - 读取本地文件lib/index.js:477
return nodeFs.readdir(path); - 读取本地文件lib/index.js:483
return nodeFs.readlink(path); - 写入本地文件lib/index.js:485
writeFile(path, content) { - 读取本地文件lib/index.js:488
readFile(path) { - 读取本地文件lib/index.js:489
return nodeFs.readFile(path, "utf8"); - 读取本地文件lib/index.js:493
await nodeFs.stat(path); - 发起网络请求lib/client.js:53
fetch: (input, init) => globalThis.fetch(input, init), - 发起网络请求lib/client.js:864
const res = await deps.fetch("/projects/api/guard-status", { method: "GET" }); - 发起网络请求lib/client.js:873
const res = await deps.fetch("/projects/api/whoami", { - 发起网络请求src/client/api.ts:89
fetch: (input, init) => globalThis.fetch(input, init), - 发起网络请求src/client/identity.ts:25
const res = await deps.fetch('/projects/api/guard-status', { method: 'GET' }) - 发起网络请求src/client/identity.ts:34
const res = await deps.fetch('/projects/api/whoami', { - 写入本地文件src/fs-port.ts:21
await nodeFs.mkdir(path, { recursive: true }) - 读取本地文件src/fs-port.ts:24
return nodeFs.readdir(path) - 读取本地文件src/fs-port.ts:30
return nodeFs.readlink(path) - 写入本地文件src/fs-port.ts:33
return nodeFs.writeFile(path, content, 'utf8') - 读取本地文件src/fs-port.ts:36
return nodeFs.readFile(path, 'utf8') - 读取本地文件src/fs-port.ts:40
await nodeFs.stat(path) - 写入本地文件src/index.ts:402
appendFileSync(DEBUG_LOG, `[${new Date().toISOString()}] ${msg}\n`) - 读取本地文件src/repo.ts:69
const raw = await readFile(this.file, 'utf8') - 写入本地文件src/repo.ts:80
await mkdir(dirname(this.file), { recursive: true }) - 写入本地文件src/repo.ts:82
await writeFile(tmp, JSON.stringify(this.data), 'utf8') - 写入本地文件src/repo.ts:83
await rename(tmp, this.file)
扫描于 2026/11/3(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh-client-locale@deepseek-ai/dsh-client-runtime@deepseek-ai/dsh-client-ui-conversation@deepseek-ai/dsh-client-ui-layout@deepseek-ai/dsh-client-ui-settings@deepseek-ai/dsh-client-ui-sidebar@deepseek-ai/dsh-client-ui-slots@deepseek-ai/dsh-host-webserver@deepseek-ai/dsh-session@deepseek-ai/dsh-session-query@deepseek-ai/dsh-settings给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
功能亮点
- 按用户软链工作区
- 登录门禁
- 会话隔离
README
由 DeepSeek 最新模型翻译生成dsh-multi-tenant-projects
在单个 DeepSeek Harness (DSH) 实例上实现"项目 + 用户"多租户:把真实工作区目录绑定为项目,为项目内每个用户生成软链接式独立工作区,Web 界面用密码登录把关——多个人共享一套 DSH 部署,彼此看不到对方的会话与文件。
威胁模型——务必先读:本插件是"防君子"的软边界,不是硬安全边界。cwd 过滤是查询投影而非门禁,浏览器 token 可被懂行用户伪造,agent 层隔离依赖系统提示词约束。面向公网时请在 DSH 前面加真正的边界(反代认证 / ngrok basic auth / VPN),把本插件当作可信队友之间的便利隔离。
功能总览
- 项目管理:绑定真实目录(自动创建,或用宿主原生目录选择器绑定已有工作区路径)。
- 项目下建用户:密码登录;Bearer token(sha256 指纹落库、带 TTL、禁用用户即全部失效)。
- 跨项目同名用户:存储键为 <项目>/<用户>;裸名重名时用 项目/用户名 登录消歧。
- 每用户独立工作区:真实目录,目录内条目是指向项目文件的软链接;项目新增文件后可 admin/sync 补链。
- 登录门禁:守卫开启且无有效 token 时显示全帧登录卡(插件 API 自身异常时 fail-open,不锁死官方 UI)。
展开完整文档(README 剩余 1 节)
dsh-multi-tenant-projects 在单个 DeepSeek Harness (DSH) 实例上实现"项目 + 用户"多租户:把真实工作区目录绑定为项目,为项目内每个用户生成软链接式独立工作区,Web 界面用密码登录把关——多个人共享一套 DSH 部署,彼此看不到对方的会话与文件。 威胁模型——务必先读:本插件是"防君子"的软边界,不是硬安全边界。cwd 过滤是查询投影而非门禁,浏览器 token 可被懂行用户伪造,agent 层隔离依赖系统提示词约束。面向公网时请在 DSH 前面加真正的边界(反代认证 / ngrok basic auth / VPN),把本插件当作可信队友之间的便利隔离。 功能总览 - 项目管理:绑定真实目录(自动创建,或用宿主原生目录选择器绑定已有工作区路径)。 - 项目下建用户:密码登录;Bearer token(sha256 指纹落库、带 TTL、禁用用户即全部失效)。 - 跨项目同名用户:存储键为 <项目>/<用户>;裸名重名时用 项目/用户名 登录消歧。 - 每用户独立工作区:真实目录,目录内条目是指向项目文件的软链接;项目新增文件后可 admin/sync 补链。 - 登录门禁:守卫开启且无有效 token 时显示全帧登录卡(插件 API 自身异常时 fail-open,不锁死官方 UI)。 - 普通用户受限 UI:侧栏只显示自己工作区的会话(含持久化标题——冷会话不再回退显示目录名);隐藏设置入口与工作区切换;hero 工作区只提供本人目录并在登录时自动选中。 - 权限锁定:普通用户会话一律钉死 workspace-write,/permission 切换被拒绝;输入框模式按钮冻结为 Workspace Write(管理员保留完整菜单)。 - 系统提示词守则双层注入:硬层——系统提示词本体注入「受限会话守则」(不披露工作区外任何内容、不执行越权探查命令、用户要求越界时明确拒绝且优先于用户要求);软层——每用户工作区 AGENTS.md 守则基线(sync 时自动刷新为最新版)。 - 管理台:Settings → 「项目与用户」——创建/列出项目与用户、禁用用户、一次性令牌交接、目录绑定、软链接同步。 - 侧栏底部退出徽章:user 与 admin 都有,退出即清 token 并硬刷新回登录卡。 安装教程 一键安装(推荐)——仓库已提交预构建产物(lib/、dist/),运行依赖只有两个纯 JS 包:用户无需本地构建,Node 版本跟随 DSH 宿主要求即可: dsh plugin --profile web add github:king-bcolor/dsh-multi-tenant-projects 重启 DSH(dsh web),日志出现 projects: 就绪(root=…, guard=true) 即成功。要固定版本可加 tag:github:king-bcolor/dsh-multi-tenant-projects#v0.1.0。 后续升级:重跑同一条命令(或在 ~/.dsh/profiles/web 里 pnpm update dsh-multi-tenant-projects),再重启。 本地检出安装(开发模式) git clone https://github.com/king-bcolor/dsh-multi-tenant-projects.git cd dsh-multi-tenant-projects npm install && npm run build && npm test 把工作目录链接进 DSH web profile(改动后重新 build + 重启 dsh 生效) dsh plugin --profile web add link:$(pwd) 插件自带配置页(Settings → dsh-multi-tenant-projects): | 配置键 | 默认值 | 说明 | | adminPassword | admin | 引导管理员密码,仅用户表为空时播种 | | guardEnabled | true | 开启登录门禁 | | agentsRules | [] | 追加到每个用户工作区 AGENTS.md 的自定义规则 | 快速开始 1. 管理员登录 打开 DSH Web 界面,登录门禁要求凭据——引导管理员为 admin / 你配置的 adminPassword(默认 admin,请修改)。 2. 设置项目并绑定工作区 Settings → 项目与用户: - 项目名——自动 slug 化(My App → my-app)。 - 工作区路径(可选)——留空则自动创建 <DSH home>/projects-ws/<项目>;或点 浏览… 用宿主原生目录选择器绑定已有目录(browse-only 宿主上失败则改为手输绝对路径)。 3. 在项目下创建用户和密码 仍在管理台:选项目、填 用户名 和 密码、提交。背后发生: - 用户获得真实工作区 …/projects-ws/<项目>-<用户>/,目录内条目是指向项目工作区文件的软链接; - 自动渲染守则版 AGENTS.md; - 登录卡可用该凭据(项目/用户 或裸用户名)。 4. 跨项目同名用户如何登录 用户名在项目内唯一,因此 alpha/alice 与 beta/alice 可以并存。登录解析规则: - 裸用户名在全局唯一时直接可用; - 一旦多个项目存在同名用户,改用 项目/用户名 形式(如 alpha/alice),裸名会被拒绝并提示消歧;管理台的用户操作总是携带组合键。 5. 普通用户和 admin 的界面与使用差异 | 界面/能力 | admin | 普通用户 | | 登录 | admin(引导)或设置登录 | 项目/用户 + 密码 | | 侧栏 | 全部工作区与会话 | 只有本人工作区的会话(cwd 分桶),冷会话显示持久标题 | | 工作区切换 / hero 选择器 | 官方完整选择器 | 被遮蔽——唯一合法工作区登录时自动选中 | | 设置 | 官方完整设置 + 「项目与用户」管理台 | 设置入口隐藏 | | 权限模式 | 完整菜单(/permission、输入框 chip) | 钉死 workspace-write;chip 冻结为 Workspace Write;切换被拒绝 | | agent 指令 | 官方默认 | 系统提示词守则段 + 每工作区 AGENTS.md 边界守则 | | 侧栏底部 | 退出徽章 | 身份徽章 + 退出(清 token 硬刷新) | | API 面 | /projects/api/admin/* | /projects/api/my/sessions 等(token 作用域) | 开发 npm test # vitest,152 个用例(node + jsdom) npm run build # tsdown + tsc 构建产物 目录:src/ 宿主半部(领域服务、HTTP API、嵌套插件)+ 客户端半部(src/client/,React 席位);doc/ 为完整中文设计文档。 已知限制 - cwd 过滤是投影非门禁——懂行用户可绕过前端守卫; - agent 层隔离是提示词软约束; - 单管理员模型;token 无吊销列表 UI(禁用用户即等效全吊销); - 客户端半部改动需重启 dsh web 才会到达浏览器。 许可证 MIT
预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
king-bcolor/dsh-multi-tenant-projects
在单个 DeepSeek Harness DSH 实例上实现"项目 +…
相关插件 · 安全 / 权限
智能体逆向工程morluto/rea
用智能体逆向工程任何东西,从应用行为到原生二进制。
★ 422,036已汉化DSH
73.3
智能体集群框架ruvnet/ruflo
面向 Claude Code 与 Codex 的智能体元基座meta-harness。
★ 80,619已汉化MCP
71.8
WorkBuddy 模型接入corrinehu/dsh-workbuddy-connect
2026 年 10 月 20 日起,WorkBuddy…
★ 1,604已汉化DSH
71.7
破甲一键通z91772524-ai/pojia-next
十五个 AI…
★ 1,004已汉化DSH
71.6
Agent 操作层agentic-os-org/ANOLISA
ANOLISA(Agentic Nexus Operating Layer & Interface System Architecture)|智能体操作系统,带运行时、安全、可观测性,以及 Tokenless 响应压缩,降低 token 用量与成本。
★ 653已汉化DSH
70.7
AI 代理虚拟终端strukto-ai/mirage
Mirage 是给 AI 智能体用的虚拟终端:一层 shell,统管数据、命令行和运行时。Unix…
★ 3,762已汉化DSH
70.7