export type ApprovalMode = "request" | "auto" | "always"; const lowRiskToolPermissions = new Set([ "apply_layer_style", "geocode", "locate_features", "render_junctions", "show_chart", "view_history", "view_scada", "web_search", "zoom_to_map", ]); const normalizePermission = (permission: string) => permission.trim().toLowerCase(); export const canAutoApprovePermission = (permission: string): boolean => { const normalized = normalizePermission(permission); if (lowRiskToolPermissions.has(normalized)) { return true; } if (normalized.startsWith("tjwater_")) { return lowRiskToolPermissions.has(normalized.slice("tjwater_".length)); } return false; }; export const resolvePermissionApproval = ( approvalMode: ApprovalMode, permission: string, ) => { if (approvalMode === "always") { return { autoApprove: true, title: "已按始终允许模式放行", detail: "当前会话处于始终允许模式,已放行本次权限请求;明确禁止的权限仍由 OpenCode 拒绝。", } as const; } if (approvalMode === "auto" && canAutoApprovePermission(permission)) { return { autoApprove: true, title: "已自动批准低风险权限", detail: "当前批准模式允许自动执行低风险工具,已放行本次请求。", } as const; } return { autoApprove: false, title: "等待权限确认", detail: undefined, } as const; };