feat(agent): 完善权限与结果引用安全
This commit is contained in:
@@ -0,0 +1,57 @@
|
||||
export type ApprovalMode = "request" | "auto" | "always";
|
||||
|
||||
const lowRiskToolPermissions = new Set([
|
||||
"apply_layer_style",
|
||||
"geocode",
|
||||
"locate_features",
|
||||
"render_junctions",
|
||||
"show_chart",
|
||||
"tjwater_server_query",
|
||||
"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;
|
||||
};
|
||||
Reference in New Issue
Block a user