Files
MailUI4Agents/plugins/homeagent-mail-bridge/permission_mode.go
JianFeeeee ed3703295c homeagent: advisory 档位提示词 + 心跳报 advisory + permission_mode.go
- 新建 permission_mode.go:NormalizeMode / ModeBriefing(advisory 版本)
  homeagent 无工具拦截点,档位只能在提示词里告知模型,措辞如实说
  「这个平台无法强制这一档」—— 假装强制会让模型以为越界会被拦
- mailEvent 加 PermissionMode 字段(从 SSE new_mail payload 读入)
- handleNewMail 提示词追加 ModeBriefing(plan/workspace/full 三档说明)
- 心跳上报 mode_enforcement: 'advisory'
- go vet + 68 测试全过
2026-09-06 19:23:42 +08:00

54 lines
1.9 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package main
// permission_mode.go — 权限档位的本地翻译advisory仅提示词告知模型
//
// homeagent 没有任何工具调用拦截点(没有 tool_call hook、没有沙箱
// 档位在这里是 advisory —— 只能在提示词里告诉模型「请遵守」。
// 假装是强制的更危险:模型会以为越界会被拦,于是不必自己小心,
// 那比做不到本身更危险。
const (
ModePlan = "plan"
ModeWorkspace = "workspace"
ModeFull = "full"
)
var validModes = map[string]bool{
ModePlan: true, ModeWorkspace: true, ModeFull: true,
}
// NormalizeMode 把外部输入收敛成合法档位。
// 非法值回落到默认档workspace不是 full。
func NormalizeMode(m string) string {
if validModes[m] {
return m
}
return ModeWorkspace
}
// ModeBriefing 生成给模型看的档位说明,放进提示词。
//
// homeagent 永远是 advisory无法强制所以措辞必须如实说
// 「这个平台无法强制这一档」—— 假装强制会让模型以为越界会被拦,
// 于是不必自己小心,那比做不到本身更危险。
func ModeBriefing(mode, enforcement string) string {
m := NormalizeMode(mode)
if m == ModeFull {
return "本任务权限档位full全权。工具调用不需要额外授权。"
}
if m == ModePlan {
return "本任务权限档位plan只读。" +
"**这个平台无法强制这一档**,所以约束靠你自己遵守:" +
"请不要写文件、改文件或执行命令。" +
"请把结论、方案、需要人工执行的步骤写在回信里。" +
"需要动手请让发件人把档位改成 workspace。"
}
// workspace
return "本任务权限档位workspace。请把改动限制在本任务的工作目录内。" +
"**这个平台无法强制这一档**,所以边界靠你自己遵守:" +
"需要改该目录之外的东西时,不要直接动手,先在回信里说明。"
}