

























@@ -360,6 +360,23 @@ function emitSkillUsedDiagnostic(params: {
360360});
361361}
362362363+function notifyPluginApprovalResolution(
364+approval: PluginApprovalRequest,
365+resolution: PluginApprovalResolution,
366+): void {
367+const onResolution = approval.onResolution;
368+if (typeof onResolution !== "function") {
369+return;
370+}
371+try {
372+void Promise.resolve(onResolution(resolution)).catch((err) => {
373+log.warn(`plugin onResolution callback failed: ${String(err)}`);
374+});
375+} catch (err) {
376+log.warn(`plugin onResolution callback failed: ${String(err)}`);
377+}
378+}
379+363380async function requestPluginToolApproval(params: {
364381approval: PluginApprovalRequest;
365382toolName: string;
@@ -370,19 +387,6 @@ async function requestPluginToolApproval(params: {
370387overrideParams?: unknown;
371388}): Promise<HookOutcome> {
372389const approval = params.approval;
373-const safeOnResolution = (resolution: PluginApprovalResolution): void => {
374-const onResolution = approval.onResolution;
375-if (typeof onResolution !== "function") {
376-return;
377-}
378-try {
379-void Promise.resolve(onResolution(resolution)).catch((err) => {
380-log.warn(`plugin onResolution callback failed: ${String(err)}`);
381-});
382-} catch (err) {
383-log.warn(`plugin onResolution callback failed: ${String(err)}`);
384-}
385-};
386390try {
387391const requestResult: {
388392id?: string;
@@ -412,7 +416,7 @@ async function requestPluginToolApproval(params: {
412416);
413417const id = requestResult?.id;
414418if (!id) {
415-safeOnResolution(PluginApprovalResolutions.CANCELLED);
419+notifyPluginApprovalResolution(approval, PluginApprovalResolutions.CANCELLED);
416420return {
417421blocked: true,
418422kind: "failure",
@@ -429,7 +433,7 @@ async function requestPluginToolApproval(params: {
429433if (hasImmediateDecision) {
430434decision = requestResult?.decision;
431435if (decision === null) {
432-safeOnResolution(PluginApprovalResolutions.CANCELLED);
436+notifyPluginApprovalResolution(approval, PluginApprovalResolutions.CANCELLED);
433437return {
434438blocked: true,
435439kind: "failure",
@@ -480,7 +484,7 @@ async function requestPluginToolApproval(params: {
480484decision === PluginApprovalResolutions.DENY
481485 ? decision
482486 : PluginApprovalResolutions.TIMEOUT;
483-safeOnResolution(resolution);
487+notifyPluginApprovalResolution(approval, resolution);
484488if (
485489decision === PluginApprovalResolutions.ALLOW_ONCE ||
486490decision === PluginApprovalResolutions.ALLOW_ALWAYS
@@ -514,7 +518,7 @@ async function requestPluginToolApproval(params: {
514518params: params.baseParams,
515519};
516520} catch (err) {
517-safeOnResolution(PluginApprovalResolutions.CANCELLED);
521+notifyPluginApprovalResolution(approval, PluginApprovalResolutions.CANCELLED);
518522if (isAbortSignalCancellation(err, params.signal)) {
519523log.warn(`plugin approval wait cancelled by run abort: ${String(err)}`);
520524return {
@@ -803,6 +807,10 @@ export async function runBeforeToolCallHook(args: {
803807}
804808if (trustedPolicyResult?.requireApproval) {
805809if (args.approvalMode === "report") {
810+notifyPluginApprovalResolution(
811+trustedPolicyResult.requireApproval,
812+PluginApprovalResolutions.CANCELLED,
813+);
806814return {
807815blocked: true,
808816kind: "failure",
@@ -869,6 +877,10 @@ export async function runBeforeToolCallHook(args: {
869877870878if (hookResult?.requireApproval) {
871879if (args.approvalMode === "report") {
880+notifyPluginApprovalResolution(
881+hookResult.requireApproval,
882+PluginApprovalResolutions.CANCELLED,
883+);
872884return {
873885blocked: true,
874886kind: "failure",
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。