mirror of
https://github.com/google-gemini/gemini-cli.git
synced 2026-04-11 22:00:41 -07:00
feat: Update permissions command to support modifying trust for other… (#11642)
This commit is contained in:
@@ -6,6 +6,7 @@
|
||||
|
||||
import { useState, useCallback } from 'react';
|
||||
import * as process from 'node:process';
|
||||
import * as path from 'node:path';
|
||||
import {
|
||||
loadTrustedFolders,
|
||||
TrustLevel,
|
||||
@@ -27,9 +28,19 @@ interface TrustState {
|
||||
function getInitialTrustState(
|
||||
settings: LoadedSettings,
|
||||
cwd: string,
|
||||
isCurrentWorkspace: boolean,
|
||||
): TrustState {
|
||||
const folders = loadTrustedFolders();
|
||||
const explicitTrustLevel = folders.user.config[cwd];
|
||||
|
||||
if (!isCurrentWorkspace) {
|
||||
return {
|
||||
currentTrustLevel: explicitTrustLevel,
|
||||
isInheritedTrustFromParent: false,
|
||||
isInheritedTrustFromIde: false,
|
||||
};
|
||||
}
|
||||
|
||||
const { isTrusted, source } = isWorkspaceTrusted(settings.merged);
|
||||
|
||||
const isInheritedTrust =
|
||||
@@ -46,11 +57,19 @@ function getInitialTrustState(
|
||||
export const usePermissionsModifyTrust = (
|
||||
onExit: () => void,
|
||||
addItem: UseHistoryManagerReturn['addItem'],
|
||||
targetDirectory: string,
|
||||
) => {
|
||||
const settings = useSettings();
|
||||
const cwd = process.cwd();
|
||||
const cwd = targetDirectory;
|
||||
// Normalize paths for case-insensitive file systems (macOS/Windows) to ensure
|
||||
// accurate comparison between targetDirectory and process.cwd().
|
||||
const isCurrentWorkspace =
|
||||
path.resolve(targetDirectory).toLowerCase() ===
|
||||
path.resolve(process.cwd()).toLowerCase();
|
||||
|
||||
const [initialState] = useState(() => getInitialTrustState(settings, cwd));
|
||||
const [initialState] = useState(() =>
|
||||
getInitialTrustState(settings, cwd, isCurrentWorkspace),
|
||||
);
|
||||
|
||||
const [currentTrustLevel] = useState<TrustLevel | undefined>(
|
||||
initialState.currentTrustLevel,
|
||||
@@ -70,6 +89,16 @@ export const usePermissionsModifyTrust = (
|
||||
|
||||
const updateTrustLevel = useCallback(
|
||||
(trustLevel: TrustLevel) => {
|
||||
// If we are not editing the current workspace, the logic is simple:
|
||||
// just save the setting and exit. No restart or warnings are needed.
|
||||
if (!isCurrentWorkspace) {
|
||||
const folders = loadTrustedFolders();
|
||||
folders.setValue(cwd, trustLevel);
|
||||
onExit();
|
||||
return;
|
||||
}
|
||||
|
||||
// All logic below only applies when editing the current workspace.
|
||||
const wasTrusted = isWorkspaceTrusted(settings.merged).isTrusted;
|
||||
|
||||
// Create a temporary config to check the new trust status without writing
|
||||
@@ -113,7 +142,7 @@ export const usePermissionsModifyTrust = (
|
||||
onExit();
|
||||
}
|
||||
},
|
||||
[cwd, settings.merged, onExit, addItem],
|
||||
[cwd, settings.merged, onExit, addItem, isCurrentWorkspace],
|
||||
);
|
||||
|
||||
const commitTrustLevelChange = useCallback(() => {
|
||||
|
||||
Reference in New Issue
Block a user