@@ -164,6 +164,22 @@ const resolveExecApprovalUnavailableDecisionsMock = vi.hoisted(() =>
164164 : [ ] ,
165165 ) ,
166166) ;
167+ const resolveExecApprovalAllowAlwaysUnavailableReasonMock = vi . hoisted ( ( ) =>
168+ vi . fn (
169+ ( params ?: {
170+ ask ?: string | null ;
171+ allowAlwaysPersistence ?: { kind : string } | null ;
172+ } ) : "approval-policy-always" | "non-persistable-command" | null => {
173+ if ( params ?. ask === "always" ) {
174+ return "approval-policy-always" ;
175+ }
176+ if ( params ?. allowAlwaysPersistence ?. kind === "one-shot" ) {
177+ return "non-persistable-command" ;
178+ }
179+ return null ;
180+ } ,
181+ ) ,
182+ ) ;
167183const resolveExecHostApprovalContextMock = vi . hoisted ( ( ) =>
168184 vi . fn ( ( ) => ( {
169185 approvals : { allowlist : [ ] as ExecAllowlistEntry [ ] , file : { version : 1 , agents : { } } } ,
@@ -222,6 +238,8 @@ vi.mock("../infra/exec-approvals.js", () => ({
222238 resolveAllowAlwaysPersistenceDecision : resolveAllowAlwaysPersistenceDecisionMock ,
223239 resolveAllowAlwaysPatternCoverage : resolveAllowAlwaysPatternCoverageMock ,
224240 resolveExecApprovalAllowedDecisions : resolveExecApprovalAllowedDecisionsMock ,
241+ resolveExecApprovalAllowAlwaysUnavailableReason :
242+ resolveExecApprovalAllowAlwaysUnavailableReasonMock ,
225243 resolveExecApprovalUnavailableDecisions : resolveExecApprovalUnavailableDecisionsMock ,
226244 resolveExecApprovalsFromFile : resolveExecApprovalsFromFileMock ,
227245 maxAsk : ( a : ExecAsk , b : ExecAsk ) : ExecAsk => {
@@ -1791,9 +1809,13 @@ describe("executeNodeHostCommand", () => {
17911809 } ,
17921810 } ) ;
17931811 expect ( requireRegisteredApprovalRequest ( ) . unavailableDecisions ) . toEqual ( [ "allow-always" ] ) ;
1812+ expect ( requireRegisteredApprovalRequest ( ) . allowAlwaysUnavailableReason ) . toBe (
1813+ "approval-policy-always" ,
1814+ ) ;
17941815 expect ( buildExecApprovalPendingToolResultMock ) . toHaveBeenCalledWith (
17951816 expect . objectContaining ( {
17961817 allowedDecisions : [ "allow-once" , "deny" ] ,
1818+ allowAlwaysUnavailableReason : "approval-policy-always" ,
17971819 } ) ,
17981820 ) ;
17991821 } ) ;
@@ -2247,9 +2269,13 @@ describe("executeNodeHostCommand", () => {
22472269 allowAlwaysPersistence : { kind : "one-shot" , reasons : [ "unplanned" ] } ,
22482270 } ) ;
22492271 expect ( requireRegisteredApprovalRequest ( ) . unavailableDecisions ) . toEqual ( [ "allow-always" ] ) ;
2272+ expect ( requireRegisteredApprovalRequest ( ) . allowAlwaysUnavailableReason ) . toBe (
2273+ "non-persistable-command" ,
2274+ ) ;
22502275 expect ( buildExecApprovalPendingToolResultMock ) . toHaveBeenCalledWith (
22512276 expect . objectContaining ( {
22522277 allowedDecisions : [ "allow-once" , "deny" ] ,
2278+ allowAlwaysUnavailableReason : "non-persistable-command" ,
22532279 } ) ,
22542280 ) ;
22552281 } ) ;
0 commit comments