(reason = '')
| 120 | } |
| 121 | |
| 122 | function recomputeEffectiveApprovalMode(reason = '') { |
| 123 | const connectedHighest = computeConnectedHighestApprovalMode(); |
| 124 | const connectedScore = APPROVAL_MODE_ORDER[connectedHighest]; |
| 125 | const turnFloor = normalizeApprovalMode(state.turnApprovalFloorMode); |
| 126 | const turnFloorScore = APPROVAL_MODE_ORDER[turnFloor]; |
| 127 | const floorActive = state.turnState.phase === 'running' && !!state.turnApprovalFloorMode; |
| 128 | const nextMode = (floorActive && turnFloorScore > connectedScore) ? turnFloor : connectedHighest; |
| 129 | if (state.approvalMode === nextMode) return nextMode; |
| 130 | |
| 131 | const prevMode = state.approvalMode; |
| 132 | state.approvalMode = nextMode; |
| 133 | log(`Approval mode effective: ${prevMode} -> ${nextMode}${reason ? ` (${reason})` : ''} connected=${connectedHighest} turnFloor=${floorActive ? turnFloor : 'none'} phase=${state.turnState.phase}`); |
| 134 | if (nextMode === 'all' && prevMode !== 'all') { |
| 135 | autoResolveAllPendingApprovals(reason || 'effective mode switched to all'); |
| 136 | } |
| 137 | return nextMode; |
| 138 | } |
| 139 | |
| 140 | function setClientApprovalMode(ws, mode, reason = '') { |
| 141 | if (!ws) return state.approvalMode; |
no test coverage detected