Refactor permission management across UI components and stores (#221)
* refactor: normalize permission rules and improve command draft handling Add normalized rule set construction for permissions in Agents pages Track initial command draft state to detect unsaved changes Prefill draft fields when duplicating or selecting existing commands * feat: add global session-level edit mode for agent permissions
This commit is contained in:
committed by
GitHub
parent
74511abfda
commit
a9952fd8da
@@ -69,6 +69,7 @@ interface ContextActions {
|
||||
type ContextStore = ContextState & ContextActions;
|
||||
|
||||
const EDIT_PERMISSION_SEQUENCE: EditPermissionMode[] = ['ask', 'allow', 'full'];
|
||||
const GLOBAL_EDIT_MODE_SESSION_ID = '__global__';
|
||||
|
||||
export const useContextStore = create<ContextStore>()(
|
||||
devtools(
|
||||
@@ -542,7 +543,20 @@ export const useContextStore = create<ContextStore>()(
|
||||
|
||||
const sessionMap = get().sessionAgentEditModes.get(sessionId);
|
||||
const override = sessionMap?.get(agentName);
|
||||
return override ?? defaultMode;
|
||||
if (override !== undefined) {
|
||||
return override;
|
||||
}
|
||||
|
||||
// Fallback: global (applies to all sessions)
|
||||
if (sessionId !== GLOBAL_EDIT_MODE_SESSION_ID) {
|
||||
const globalMap = get().sessionAgentEditModes.get(GLOBAL_EDIT_MODE_SESSION_ID);
|
||||
const globalOverride = globalMap?.get(agentName);
|
||||
if (globalOverride !== undefined) {
|
||||
return globalOverride;
|
||||
}
|
||||
}
|
||||
|
||||
return defaultMode;
|
||||
},
|
||||
|
||||
setSessionAgentEditMode: (sessionId: string, agentName: string | undefined, mode: EditPermissionMode, defaultMode: EditPermissionMode = getAgentDefaultEditPermission(agentName)) => {
|
||||
@@ -598,6 +612,7 @@ export const useContextStore = create<ContextStore>()(
|
||||
|
||||
get().setSessionAgentEditMode(sessionId, agentName, nextMode, normalizedDefault);
|
||||
},
|
||||
|
||||
}),
|
||||
{
|
||||
name: "context-store",
|
||||
|
||||
@@ -88,8 +88,8 @@ export const usePermissionStore = create<PermissionStore>()(
|
||||
const defaultMode = getAgentDefaultEditPermission(agentName);
|
||||
const effectiveMode = contextData?.getSessionAgentEditMode?.(sessionId, agentName) ?? defaultMode;
|
||||
|
||||
const shouldAutoApprove = effectiveMode === 'full'
|
||||
|| (effectiveMode === 'allow' && isEditPermissionType(permissionType));
|
||||
const shouldAutoApprove = (effectiveMode === 'allow' || effectiveMode === 'full')
|
||||
&& isEditPermissionType(permissionType);
|
||||
|
||||
if (shouldAutoApprove) {
|
||||
get().respondToPermission(sessionId, permission.id, 'once').catch(() => {
|
||||
|
||||
Reference in New Issue
Block a user