🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

身份门禁 lgqtime/dsh-role-gate

DeepSeek Harness
lgqtime14 天前有提交已提供中文文档扫描:含敏感能力

按会话切换身份,控制工具与技能授权

30/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/10/21 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add lgqtime/dsh-role-gate
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:仅索引
是什么
dsh 原生插件 · chat
装得上吗
本站尚未做安装检查
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 14 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

读写/删除本地文件发起外部网络请求
查看扫描证据(共 13 处,展示前 13 条)
  • 发起网络请求
    client.js:214
    const response = await fetch('/role-gate/author/save', {
  • 发起网络请求
    client.js:443
    const response = await fetch('/role-gate/identities', {
  • 发起网络请求
    client.js:490
    const response = await fetch('/role-gate/pending', {
  • 发起网络请求
    client.js:611
    const response = await fetch(`/role-gate/state?sessionId=${encodeURIComponent(sessionId)}`, {
  • 发起网络请求
    client.js:667
    const response = await fetch('/role-gate/switch', {
  • 发起网络请求
    client.js:689
    const response = await fetch(`/role-gate/author/catalog?sessionId=${encodeURIComponent(sessionId)}`, {
  • 写入本地文件
    src/store.js:45
    await mkdir(path.dirname(file), { recursive: true })
  • 写入本地文件
    src/store.js:48
    await writeFile(temp, text, 'utf8')
  • 写入本地文件
    src/store.js:51
    await rename(temp, file)
  • 删除本地文件
    src/store.js:57
    await unlink(temp).catch(() => {})
  • 写入本地文件
    src/store.js:101
    await mkdir(this.root, { recursive: true })
  • 读取本地文件
    src/store.js:188
    text = await readFile(file, 'utf8')
  • 写入本地文件
    src/store.js:205
    await rename(file, target)
扫描于 2026/11/3(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

DeepSeek Harness 的按会话身份层:工具与技能允许列表、多父级继承、动态切换,以及新建会话选择器。

README

由 DeepSeek 最新模型翻译生成
RoleGate 身份层 为 DeepSeek Harness 提供按会话切换的「身份层」:每个身份携带一组工具、技能授权与行为指令,支持多父并集继承;切换不产生对话消息,从下一步开始改变工具可见性、技能门禁与系统提示。 功能 - 多父继承:inherits 是 DAG;工具/技能取并集,指令按祖先优先拼接,每个身份只出现一次。 - 动态切换:输入框下方的身份胶囊、/identity 命令、role_gate 工具三个入口。 - 下一步生效:切换只更新选择;agent/pre-step 才替换工具限制,当前步不中断。 - 执行层工具限制:通过 agent.ctx.tools.restrict({ allow }) 真正隐藏工具,隐藏工具的调用返回 UNKNOWN_TOOL。 - 技能加载门禁:技能目录仍显示全部,但未列入当前身份的技能加载会被拒绝;不产生额外对话消息。 - AI 辅助创建:role_gate_author 提供目录、草稿脚手架、创建/修改/删除;写盘必须 confirmed=true。 - 对话式补充:update 支持 addTools / removeTools / addSkills / removeSkills,补一个工具或技能不必重发完整数组。
展开完整文档(README 剩余 1 节)
RoleGate 身份层

为 DeepSeek Harness 提供按会话切换的「身份层」:每个身份携带一组工具、技能授权与行为指令,支持多父并集继承;切换不产生对话消息,从下一步开始改变工具可见性、技能门禁与系统提示。

功能

- 多父继承:inherits 是 DAG;工具/技能取并集,指令按祖先优先拼接,每个身份只出现一次。
- 动态切换:输入框下方的身份胶囊、/identity 命令、role_gate 工具三个入口。
- 下一步生效:切换只更新选择;agent/pre-step 才替换工具限制,当前步不中断。
- 执行层工具限制:通过 agent.ctx.tools.restrict({ allow }) 真正隐藏工具,隐藏工具的调用返回 UNKNOWN_TOOL。
- 技能加载门禁:技能目录仍显示全部,但未列入当前身份的技能加载会被拒绝;不产生额外对话消息。
- AI 辅助创建:role_gate_author 提供目录、草稿脚手架、创建/修改/删除;写盘必须 confirmed=true。
- 对话式补充:update 支持 addTools / removeTools / addSkills / removeSkills,补一个工具或技能不必重发完整数组。
- 新会话选择器:新对话的 New Session 行也显示身份选择器;选中的身份写入 pending,在该会话创建时自动应用并清除。
- UI 新建/编辑对话框:身份面板里的「新建身份」和每行的铅笔按钮打开表单,可编辑标题、描述、继承、工具/技能勾选、指令、联网兜底和草稿状态;「让 AI 补全」会把当前设计写进输入框交给模型。
- 显式草稿标记:draft: true 显示「待完善」,只是提示;身份仍可切换、仍可应用,取消草稿只是去掉标记。
- 本地能力检索:role_gate_find_local 搜索工具与技能,标注 visible/hidden、authorized/blocked。
- 子代理/fork 继承:子会话继承父会话身份,避免用子代理绕过限制。
- 按会话持久化:当前身份写入 $DSH_HOME/role-gate/state.json,重启/恢复后保留。

安装

从插件市场安装,或直接:

dsh plugin --profile web add dsh-role-gate

本地开发时以 bundle 形式安装进当前 profile:

plugin_manager action=install_bundle target=<本地仓库路径>

安装后刷新 Web 页面;客户端 bundle 不会在没有 dev 构建 watcher 的情况下自动热更新。

如果安装后组合树里出现重复的 role-gate 行(bundle patch 的 insert 与已有的 cordis.yml 行同时存在),把 cordis.patch.yml 的 insert 改成空数组 [],只保留 profile 中的唯一行。

使用

创建身份

在对话里说:

用 RoleGate 创建一个代码审查身份,只读代码、能跑测试,不要联网。

模型会先调用 role_gate_author action=catalog,再 action=propose 给出草稿,展示给你确认,最后 action=create confirmed=true 落盘。

也可以点输入框下方 身份 ▾ → 新建身份,在表单里直接勾选工具/技能、填写指令并保存。每行身份右侧的铅笔按钮可以编辑已有身份;勾选「草稿」只会加一个「待完善」标记,不影响切换和使用,取消草稿只是去掉标记。

需要 AI 帮你补全时,在编辑对话框点 让 AI 补全,当前设计会写入输入框,由模型查目录、指出缺口并给出补充建议。

身份定义示例:

{
"version": 1,
"identities": {
"code-review": {
"name": "code-review",
"title": "代码审查", "description": "只读审查与最小修复",
"inherits": ["reader"],
"tools": ["read", "grep", "glob", "edit"],
"skills": ["tdd"],
"instructions": "以审查者口吻工作,先读再改,改完跑测试。", "allowWebFallback": false, "draft": false } } }

切换

- UI:输入框下方的 身份:… ▾ 胶囊,展开后选择。
- 命令:/identity code-review、/identity list、/identity none。
- 模型工具:role_gate action=switch name=code-review,或 action=clear。

切换后当前步不变,下一步生效。UI 会显示 下一步生效 标记。

新会话

点「新建会话」后,New Session 行右侧会出现 身份 · 新会话 ▾。选中身份会写入 state.json 的 pending;发送第一条消息创建会话时自动应用并清除。选择「未启用」会清除 pending。pending 只被下一个新会话消费一次;子代理和 fork 仍优先继承父会话身份。

能力语义

- tools: [""]:该 agent 当前已知的全部工具(全局 + preset scoped);tools: []:除 3 个 RoleGate 元工具外无工具。
- skills: [""]:所有技能可加载;skills: []:任何技能加载都被拒绝。
- skills 非空时自动保留 skill 工具,否则技能无法加载。
- allowWebFallback 为 true 时自动加入配置的联网工具(默认 web_search、web_fetch)。
- draft: true 只是「待完善」标记,身份仍可应用和切换;它不改变工具/技能授权,也不影响默认身份继承。
- 常驻元工具 role_gate、role_gate_find_local、role_gate_author 永远可见,任何身份都能切回 none。
- preset scoped 工具也在 allow 名单里显式列出,因此会同时从模型工具面过滤,并在执行层拒绝。

指令优先级

身份系统提示会写明:

1. 优先使用当前身份的工具/技能;
2. 不够用时调用 role_gate_find_local 搜索本地目录;
3. 只有本地没有合适能力、且联网工具可见时,才联网;
4. 身份指令不覆盖用户当前轮的直接请求。

数据与配置

数据目录:$DSH_HOME/role-gate/(未设置 DSH_HOME 时为 ~/.dsh)。

- identities.json:身份库。
- state.json:每个会话当前选中的身份,以及新会话的 pending 选择。
- identities.corrupt-<时间>.json / state.corrupt-<时间>.json:损坏文件的隔离副本。

cordis.patch.yml(首次安装)或 profile 的 cordis.yml 中 role-gate 行可配置:

| 字段 | 默认 | 说明 |
| defaultIdentity | null | 新会话默认身份 |
| webTools | ["web_search","web_fetch"] | 联网兜底工具名 |
| allowWebFallbackByDefault | true | 身份未显式设置时的默认 |
| enforceSkills | true | 是否启用技能门禁 |
| sectionOrder | 450 | 身份系统提示段顺序 |
| maxInstructionsChars | 16000 | 单身份指令上限 |
| maxResolvedInstructionsChars | 32000 | 继承拼接后上限 |
| maxStateEntries | 500 | 会话状态记录上限 |

已知边界

- ctx.tools.restrict 只过滤继承层(全局/祖先 scope);agent 自身层注册的工具无法被 restriction 掩蔽。RoleGate 会用 system-prompt/assemble 过滤 + tools.guard 执行拒绝按身份处理它们,但 Plugin/Tool 检查器的 registry 视图仍可能看到这些工具。
- 切换身份会更新 desired,但工具限制在 agent/pre-step 才替换;当前步已经发出的工具调用不会被中途撤回。
- 模型主动切换会留下一个 tool call 卡片;切换动作本身不产生 user/assistant 消息。UI/命令路径不产生模型消息,但 /identity 会留下一个 command 节点。
- UI 对话框的保存按钮视为用户确认;模型通过 role_gate_author 写入仍必须显式传 confirmed=true。
- 把正在使用的身份改成 draft: true 只改变提示标记,不会清空当前会话,也不会改变已应用的权限。
- 隐藏 skill 工具(例如 skills: [] 且 tools 不含 skill)时,DSH 的 skill 目录会追加一条系统级替换消息;它不是 user/assistant 消息,但对话界面会出现目录更新。skills 非空的身份会自动保留 skill,通常不会触发。
- 用户显式 /skillname 注入不走 skill 工具,不受技能门禁影响(用户覆盖优先)。
- 使用 persona.complete: true 的 preset 会丢弃其他 system-prompt section,包括 RoleGate 的身份段。
- 身份库是 $DSH_HOME 级全局数据,不按 profile 隔离。
- 身份定义不支持 UI 内编辑;创建/修改走对话中的 role_gate_author。

开发

node --check index.js
node --check client.js
node --test test/*.test.mjs

插件只使用 Node 内置模块,不依赖任何 DSH 包;工具 schema 使用原始 JSON Schema,客户端组件通过 window.__ModuleLoader__ 注册。
预览分享卡片长什么样 ↓lgqtime/dsh-role-gate
分享 · DeepSeek Harness Hub
lgqtime/dsh-role-gate

按会话切换身份,控制工具与技能授权

这是你的仓库?认领条目

回到顶部