lgqtime/dsh-role-gate ↗★ 0

dsh-role-gate

为DSH提供基于会话的身份与工具白名单管理层。 适合需要为不同会话定制特定角色、限制工具权限和注入特定指令的用户。

套件
dsh-role-gate
相容性
待驗證
版本
0.1.0
授權
MIT
最近更新
2026年10月21日

安裝

$npx -p @deepseek-ai/dsh dsh plugin --profile web add github:lgqtime/dsh-role-gate

使用

创建身份

在对话里说:

用 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 行可配置:

字段默认说明
defaultIdentitynull新会话默认身份
webTools["web_search","web_fetch"]联网兜底工具名
allowWebFallbackByDefaulttrue身份未显式设置时的默认
enforceSkillstrue是否启用技能门禁
sectionOrder450身份系统提示段顺序
maxInstructionsChars16000单身份指令上限
maxResolvedInstructionsChars32000继承拼接后上限
maxStateEntries500会话状态记录上限