优化: 前端批(审批体系一致 + GitChanges UI + token/控件统一 + 死代码)
审批体系一致:ApprovalPopup 浮窗加挂起时长提示(H1)+session 按钮+path deny 二次确认(M4/M5);ToolCard/useToolApproval 加 session+onDeny 确认(对齐 DirAuthDialog 四按钮)+ToolCardList decision 类型加 session;ApprovalDialog 失败显 toast(治 store 吞错 M31);ApprovalOverlay dismiss 改响应式(L26) GitChanges UI(问题12 前端 12b-12h):showCommitFileDiff 精确匹配(12b)+去重 git log(12c)+详情滑出不挤压(12d)+双行提交行(12f)+搜索过滤(12g)+历史 Tab 显分支(12h)+diff 侧边栏内更宽可折叠面板(12e:FilePreview 不支持任意提交 diff,折中) token+控件:global.css 定义 --df-primary(治幽灵变量 M26)+settings.css 加 .setting-number/.setting-input/.setting-textarea+4 Section 套用(问题8) 死代码:删 PlanProgress.vue(零引用)+PlanLayerInfo 类型+i18n 孤儿 key(L1)
This commit is contained in:
@@ -174,6 +174,24 @@ export function useToolApproval(tc: Ref<AiToolCallInfo>, emit: any) {
|
||||
emit('approve', { id: tc.value.id, approved: false, decision: 'once' })
|
||||
}
|
||||
|
||||
/**
|
||||
* M4:path 类「当前会话授权」处理(decision='session')。
|
||||
* 对齐 DirAuthDialog 四按钮(once/session/always/deny)。session 写会话临时授权层,切会话清;
|
||||
* IPC authorizeDir 后端 'session' 全支持(api/ai.ts authorizeDir 签名 + 后端 ai_authorize_dir)。
|
||||
* 同 onAuthorizeOnce 同款 loading + 超时兜底;无 High 风险二次确认(同 once/always 语义,显式白名单写入)。
|
||||
*/
|
||||
async function onAuthorizeSession() {
|
||||
if (approving.value) return
|
||||
approving.value = true
|
||||
approvingTimer = setTimeout(() => {
|
||||
approving.value = false
|
||||
approvingTimer = null
|
||||
console.warn('[AI] 路径授权 loading 超时,后端可能未回执,已复位允许重试:', tc.value.id)
|
||||
showApproveTimeoutToast()
|
||||
}, APPROVE_LOADING_TIMEOUT_MS)
|
||||
emit('approve', { id: tc.value.id, approved: false, decision: 'session' })
|
||||
}
|
||||
|
||||
/**
|
||||
* path_auth 审批链阶段3b:path 类「写持久白名单」处理。
|
||||
* 同 onAuthorizeOnce,decision='always'。
|
||||
@@ -192,10 +210,14 @@ export function useToolApproval(tc: Ref<AiToolCallInfo>, emit: any) {
|
||||
|
||||
/**
|
||||
* path_auth 审批链阶段3b:path 类「拒绝」处理。
|
||||
* 同 onAuthorizeOnce,decision='deny'。
|
||||
* M5:拒绝前二次确认(useConfirm 弹层)。拒绝不可逆——工具返 Err、loop 续跑不再重试该工具,
|
||||
* 与放行(once/session/always 均可后续再授权)不对称,误点代价高;补确认与 approve(高风险)对称。
|
||||
* risk 类拒绝(onReject)不补确认:risk reject 是常规审批否决,语义明确且可重新触发;仅 path 类加。
|
||||
*/
|
||||
async function onDeny() {
|
||||
if (approving.value) return
|
||||
const ok = await confirmDialog(t('aiChat.dirAuthDenyConfirm'))
|
||||
if (!ok) return
|
||||
approving.value = true
|
||||
approvingTimer = setTimeout(() => {
|
||||
approving.value = false
|
||||
@@ -232,6 +254,7 @@ export function useToolApproval(tc: Ref<AiToolCallInfo>, emit: any) {
|
||||
onApprove,
|
||||
onReject,
|
||||
onAuthorizeOnce,
|
||||
onAuthorizeSession,
|
||||
onAuthorizeAlways,
|
||||
onDeny,
|
||||
// 供模板 ConfirmDialog 绑定
|
||||
|
||||
Reference in New Issue
Block a user