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。请把改动限制在本任务的工作目录内。" + "**这个平台无法强制这一档**,所以边界靠你自己遵守:" + "需要改该目录之外的东西时,不要直接动手,先在回信里说明。" }