dsh-client-plugin-approve-for-me

August 14, 2026 · View on GitHub

Warning

自动审查模型并非完美。请将其输出视为辅助信息,并始终根据实际风险和授权范围作出最终决定。

DSH 前端(浏览器)插件:为 dsh-plugin-approve-for-mereview 模式提供 codex 风格的实时审查状态行——审查进行中显示流光(shimmer)的 “● 正在审查权限请求: …”, 审查完成显示 “✔ 已批准 / ✖ 已拒绝 的权限升级”及审查模型的一句意见。每个状态都锚定在会话流中的审批请求处, 重开会话后仍会显示最终裁决和意见。

工作原理

  • host 半部lib/index.js):注册一个会话投影 approvalStatussessionProjections),折叠审批审计事件:
    • approval/asked(审批请求进入 answerer 链时,审查模式即审查开始)→ pending
    • approval/decided(审批结算)→ last: { outcome, toolName }
    • approve-for-me/reviewed(主插件写入的可忽略审计记录)→ 审查模型的 risk、authorization 和 rationale
    • 这两个事件是 log-only 审计事件,不进模型历史 —— 所以前端可以实时显示审查进度,而不会像 user/message 那样破坏 tool_calls → tool response 协议。
  • client 半部lib/client.js):window.__ModuleLoader__.load({ id, factory }) 格式的浏览器插件, 将 approval/asked / approve-for-me/reviewed / approval/decided 注册为按审批 id 聚合的 approval-status Conversation Node, 再在 conversation.chat.node 槽位注册同名 renderer:
    • 未结算 → 与 Pwsh tool call 同一行级结构的流光摘要(1.8s 扫光)
    • 已结算 → 会话流中的持久裁决行;裁决和审查意见以 裁决 · 原文意见 同行展示,终端图标、字号和间距与 tool call 一致,批准使用普通摘要色,拒绝使用 Material 3 error#BA1A1A

声明方式(DSH client 插件约定)

  • exports["./client"]./lib/client.js(浏览器半部)
  • package.json["dsh"]["client"]{ "platform": "web", "inject": ["conversationEvents", "slots"] }

安装到测试 profile

# 在 $DSH_HOME/profiles/approve-for-me 下(与主插件同样的 junction 方式)
mklink /J "node_modules\dsh-client-plugin-approve-for-me" "C:\Users\jkl-9\IdeaProjects\dsh-client-plugin-approve-for-me"

cordis.patch.yml 追加:

- insert:
    - id: approve-for-me-ui
      name: dsh-client-plugin-approve-for-me

重启 dsh 实例 → host 半部加载投影,web boot 图把 client 半部写进 __DSH_BOOT__,浏览器加载后即可看到状态条。

说明

  • 状态条对所有审批请求可见(人工弹窗也会显示“正在审查…”),语义上与“审查/审批中”一致; review 模式下 asked→decided 的间隔就是轻量模型审查的窗口。
  • 裁决的完整详情(risk / authorization / rationale)仍由主插件以 notice 消息注入会话流(模型可见)。