feat(chat): 支持自动始终允许权限

This commit is contained in:
2026-06-08 14:14:52 +08:00
parent 05d36aa8ca
commit f61389ab07
3 changed files with 99 additions and 6 deletions
+41 -6
View File
@@ -10,6 +10,7 @@ export const supportedModels = [
] as const;
export type SupportedModel = (typeof supportedModels)[number];
export type ApprovalMode = "request" | "always";
type StreamPromptOptions = {
runtime: OpencodeRuntimeAdapter;
@@ -17,6 +18,7 @@ type StreamPromptOptions = {
clientSessionId: string;
message: string;
model?: SupportedModel;
approvalMode?: ApprovalMode;
traceId?: string;
projectId?: string;
signal?: AbortSignal;
@@ -345,6 +347,7 @@ export const streamPromptResponse = async ({
clientSessionId,
message,
model,
approvalMode = "request",
traceId,
projectId,
signal,
@@ -591,10 +594,26 @@ export const streamPromptResponse = async ({
emitProgress({
id: `permission-${event.properties.id}`,
phase: "permission",
status: "running",
title: "等待权限确认",
detail: buildPermissionDetail(event),
status: approvalMode === "always" ? "completed" : "running",
title: approvalMode === "always" ? "已自动允许权限请求" : "等待权限确认",
detail:
approvalMode === "always"
? "当前批准模式为始终允许,已自动允许本次权限请求。"
: buildPermissionDetail(event),
});
if (approvalMode === "always") {
await runtime.replyPermission({
requestId: event.properties.id,
sessionId,
reply: "always",
});
write("permission_response", {
session_id: clientSessionId,
request_id: event.properties.id,
reply: "always" satisfies PermissionReply,
});
continue;
}
write("permission_request", {
session_id: clientSessionId,
request_id: event.properties.id,
@@ -620,10 +639,26 @@ export const streamPromptResponse = async ({
emitProgress({
id: `permission-${event.properties.id}`,
phase: "permission",
status: "running",
title: "等待权限确认",
detail: buildPermissionV2Detail(event),
status: approvalMode === "always" ? "completed" : "running",
title: approvalMode === "always" ? "已自动允许权限请求" : "等待权限确认",
detail:
approvalMode === "always"
? "当前批准模式为始终允许,已自动允许本次权限请求。"
: buildPermissionV2Detail(event),
});
if (approvalMode === "always") {
await runtime.replyPermission({
requestId: event.properties.id,
sessionId,
reply: "always",
});
write("permission_response", {
session_id: clientSessionId,
request_id: event.properties.id,
reply: "always" satisfies PermissionReply,
});
continue;
}
write("permission_request", {
session_id: clientSessionId,
request_id: event.properties.id,