发件页档位每次发信都能改(含续谈已有会话)
- me.go: SendMail 续谈时若显式传 permission_mode,也更新该会话档位 (人是权限的源头,可以任改三档,不受继承约束) - ComposePage: 权限档位按钮始终可用(去 disabled/opacity),不再只限 .new - hint 文案:新建→'Agent 在这类任务里被允许动手的程度', 续谈→'改了即刻生效(该会话的档位会更新)' - 默认 workspace(不再从空字符串开始) - sendMail 始终传 permission_mode(不再只限 isNewSession)
This commit is contained in:
@ -153,6 +153,18 @@ func MeSendMail(w http.ResponseWriter, r *http.Request) {
|
|||||||
repo.AgentModeEnforcement(r.Context(), to.Name))
|
repo.AgentModeEnforcement(r.Context(), to.Name))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 续谈已有会话时,人也可以显式改档位。人是权限的源头,
|
||||||
|
// 可以任改三档——与 Agent 不同,人没有「只能同档或更严」的约束。
|
||||||
|
if !created && req.PermissionMode != "" {
|
||||||
|
mode := models.NormalizePermissionMode(req.PermissionMode)
|
||||||
|
if _, err := repo.SetSessionPermissionMode(r.Context(), sessionID, mode); err != nil {
|
||||||
|
Error(w, http.StatusInternalServerError, "Failed to update permission mode")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
_ = repo.SetSessionEnforcement(r.Context(), sessionID,
|
||||||
|
repo.AgentModeEnforcement(r.Context(), to.Name))
|
||||||
|
}
|
||||||
|
|
||||||
// 人类侧不产生改名提议(人直接有改名按钮,用不着向自己提议),
|
// 人类侧不产生改名提议(人直接有改名按钮,用不着向自己提议),
|
||||||
// 但仍然剥掉标记:粘贴进正文时它会被渲染成一行可见的转义文本。
|
// 但仍然剥掉标记:粘贴进正文时它会被渲染成一行可见的转义文本。
|
||||||
_, body := extractRenameProposal(req.Body)
|
_, body := extractRenameProposal(req.Body)
|
||||||
|
|||||||
@ -30,7 +30,7 @@ export default function ComposePage() {
|
|||||||
// 而不是事后到管理员页面去调某个 Agent 的全局配额。
|
// 而不是事后到管理员页面去调某个 Agent 的全局配额。
|
||||||
const [maxRounds, setMaxRounds] = useState('');
|
const [maxRounds, setMaxRounds] = useState('');
|
||||||
// 权限档位(仅新建会话时生效):plan / workspace / full。
|
// 权限档位(仅新建会话时生效):plan / workspace / full。
|
||||||
const [permissionMode, setPermissionMode] = useState('');
|
const [permissionMode, setPermissionMode] = useState('workspace');
|
||||||
// 收件 Agent 的默认预算;null = 还没查到(未注册的收件人也是 null)
|
// 收件 Agent 的默认预算;null = 还没查到(未注册的收件人也是 null)
|
||||||
const [agentDefault, setAgentDefault] = useState<number | null>(null);
|
const [agentDefault, setAgentDefault] = useState<number | null>(null);
|
||||||
const [attachments, setAttachments] = useState<PendingAttachment[]>([]);
|
const [attachments, setAttachments] = useState<PendingAttachment[]>([]);
|
||||||
@ -111,7 +111,7 @@ export default function ComposePage() {
|
|||||||
...(isNewSession && maxRounds.trim() !== ''
|
...(isNewSession && maxRounds.trim() !== ''
|
||||||
? { max_rounds: Number(maxRounds.trim()) }
|
? { max_rounds: Number(maxRounds.trim()) }
|
||||||
: {}),
|
: {}),
|
||||||
...(isNewSession && permissionMode ? { permission_mode: permissionMode } : {}),
|
...(permissionMode ? { permission_mode: permissionMode } : {}),
|
||||||
});
|
});
|
||||||
const where = res.session_alias
|
const where = res.session_alias
|
||||||
? `会话别名 ${res.session_alias}`
|
? `会话别名 ${res.session_alias}`
|
||||||
@ -191,8 +191,7 @@ export default function ComposePage() {
|
|||||||
</Field>
|
</Field>
|
||||||
)}
|
)}
|
||||||
|
|
||||||
{isNewSession && (
|
<Field label="权限档位" hint={isNewSession ? "Agent 在这类任务里被允许动手的程度" : "改了即刻生效(该会话的档位会更新)"}>
|
||||||
<Field label="权限档位" hint="Agent 在这类任务里被允许动手的程度;只在新建会话时生效">
|
|
||||||
<div className="flex items-center gap-2">
|
<div className="flex items-center gap-2">
|
||||||
{[
|
{[
|
||||||
{ value: 'plan', label: '只读', desc: '不许写/改/执行' },
|
{ value: 'plan', label: '只读', desc: '不许写/改/执行' },
|
||||||
@ -215,7 +214,6 @@ export default function ComposePage() {
|
|||||||
))}
|
))}
|
||||||
</div>
|
</div>
|
||||||
</Field>
|
</Field>
|
||||||
)}
|
|
||||||
|
|
||||||
{isNewSession && (
|
{isNewSession && (
|
||||||
<Field label="往返预算" hint="留空 = 用该 Agent 的默认值;之后可在对话页随时调整">
|
<Field label="往返预算" hint="留空 = 用该 Agent 的默认值;之后可在对话页随时调整">
|
||||||
|
|||||||
Reference in New Issue
Block a user