@google/gemini-cli 0.32.0-preview.0 → 0.33.0-preview.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +11 -9
- package/dist/package.json +3 -3
- package/dist/src/config/config.js +6 -1
- package/dist/src/config/config.js.map +1 -1
- package/dist/src/config/config.test.js +70 -1
- package/dist/src/config/config.test.js.map +1 -1
- package/dist/src/config/extension-manager.js +1 -0
- package/dist/src/config/extension-manager.js.map +1 -1
- package/dist/src/config/extension.d.ts +9 -0
- package/dist/src/config/extension.js.map +1 -1
- package/dist/src/config/sandboxConfig.js +3 -1
- package/dist/src/config/sandboxConfig.js.map +1 -1
- package/dist/src/config/settings.d.ts +0 -2
- package/dist/src/config/settings.js.map +1 -1
- package/dist/src/config/settingsSchema.d.ts +9 -13
- package/dist/src/config/settingsSchema.js +5 -13
- package/dist/src/config/settingsSchema.js.map +1 -1
- package/dist/src/gemini.js +1 -1
- package/dist/src/gemini.js.map +1 -1
- package/dist/src/generated/git-commit.d.ts +2 -2
- package/dist/src/generated/git-commit.js +2 -2
- package/dist/src/test-utils/render.js +5 -1
- package/dist/src/test-utils/render.js.map +1 -1
- package/dist/src/ui/AppContainer.js +1 -18
- package/dist/src/ui/AppContainer.js.map +1 -1
- package/dist/src/ui/commands/extensionsCommand.js +3 -1
- package/dist/src/ui/commands/extensionsCommand.js.map +1 -1
- package/dist/src/ui/commands/extensionsCommand.test.js +45 -0
- package/dist/src/ui/commands/extensionsCommand.test.js.map +1 -1
- package/dist/src/ui/commands/hooksCommand.js +12 -8
- package/dist/src/ui/commands/hooksCommand.js.map +1 -1
- package/dist/src/ui/commands/hooksCommand.test.js +15 -23
- package/dist/src/ui/commands/hooksCommand.test.js.map +1 -1
- package/dist/src/ui/commands/planCommand.js +33 -3
- package/dist/src/ui/commands/planCommand.js.map +1 -1
- package/dist/src/ui/commands/planCommand.test.js +29 -1
- package/dist/src/ui/commands/planCommand.test.js.map +1 -1
- package/dist/src/ui/components/AgentConfigDialog.js +17 -33
- package/dist/src/ui/components/AgentConfigDialog.js.map +1 -1
- package/dist/src/ui/components/AppHeader.d.ts +1 -1
- package/dist/src/ui/components/AppHeader.js +15 -8
- package/dist/src/ui/components/AppHeader.js.map +1 -1
- package/dist/src/ui/components/AppHeader.test.js +7 -0
- package/dist/src/ui/components/AppHeader.test.js.map +1 -1
- package/dist/src/ui/components/ContextUsageDisplay.d.ts +1 -1
- package/dist/src/ui/components/ContextUsageDisplay.js +15 -3
- package/dist/src/ui/components/ContextUsageDisplay.js.map +1 -1
- package/dist/src/ui/components/ContextUsageDisplay.test.js +25 -19
- package/dist/src/ui/components/ContextUsageDisplay.test.js.map +1 -1
- package/dist/src/ui/components/DetailedMessagesDisplay.js +1 -6
- package/dist/src/ui/components/DetailedMessagesDisplay.js.map +1 -1
- package/dist/src/ui/components/DetailedMessagesDisplay.test.js +2 -2
- package/dist/src/ui/components/DetailedMessagesDisplay.test.js.map +1 -1
- package/dist/src/ui/components/DialogManager.js +3 -19
- package/dist/src/ui/components/DialogManager.js.map +1 -1
- package/dist/src/ui/components/ExitPlanModeDialog.js +2 -1
- package/dist/src/ui/components/ExitPlanModeDialog.js.map +1 -1
- package/dist/src/ui/components/ExitPlanModeDialog.test.js +2 -13
- package/dist/src/ui/components/ExitPlanModeDialog.test.js.map +1 -1
- package/dist/src/ui/components/Footer.js +3 -1
- package/dist/src/ui/components/Footer.js.map +1 -1
- package/dist/src/ui/components/Footer.test.js +41 -6
- package/dist/src/ui/components/Footer.test.js.map +1 -1
- package/dist/src/ui/components/HistoryItemDisplay.js +2 -3
- package/dist/src/ui/components/HistoryItemDisplay.js.map +1 -1
- package/dist/src/ui/components/HooksDialog.d.ts +36 -0
- package/dist/src/ui/components/HooksDialog.js +81 -0
- package/dist/src/ui/components/HooksDialog.js.map +1 -0
- package/dist/src/ui/components/HooksDialog.test.js +187 -0
- package/dist/src/ui/components/HooksDialog.test.js.map +1 -0
- package/dist/src/ui/components/MainContent.js +2 -1
- package/dist/src/ui/components/MainContent.js.map +1 -1
- package/dist/src/ui/components/SettingsDialog.d.ts +1 -5
- package/dist/src/ui/components/SettingsDialog.js +90 -254
- package/dist/src/ui/components/SettingsDialog.js.map +1 -1
- package/dist/src/ui/components/SettingsDialog.test.js +127 -105
- package/dist/src/ui/components/SettingsDialog.test.js.map +1 -1
- package/dist/src/ui/components/StatusDisplay.test.js +5 -4
- package/dist/src/ui/components/StatusDisplay.test.js.map +1 -1
- package/dist/src/ui/components/Tips.d.ts +1 -1
- package/dist/src/ui/components/Tips.js +1 -1
- package/dist/src/ui/components/Tips.js.map +1 -1
- package/dist/src/ui/components/Tips.test.d.ts +1 -1
- package/dist/src/ui/components/Tips.test.js +6 -7
- package/dist/src/ui/components/Tips.test.js.map +1 -1
- package/dist/src/ui/components/UserIdentity.d.ts +1 -1
- package/dist/src/ui/components/UserIdentity.js +10 -12
- package/dist/src/ui/components/UserIdentity.js.map +1 -1
- package/dist/src/ui/components/UserIdentity.test.js +23 -10
- package/dist/src/ui/components/UserIdentity.test.js.map +1 -1
- package/dist/src/ui/components/messages/InfoMessage.d.ts +1 -0
- package/dist/src/ui/components/messages/InfoMessage.js +2 -2
- package/dist/src/ui/components/messages/InfoMessage.js.map +1 -1
- package/dist/src/ui/components/messages/SubagentProgressDisplay.d.ts +11 -0
- package/dist/src/ui/components/messages/SubagentProgressDisplay.js +73 -0
- package/dist/src/ui/components/messages/SubagentProgressDisplay.js.map +1 -0
- package/dist/src/ui/components/messages/SubagentProgressDisplay.test.d.ts +6 -0
- package/dist/src/ui/components/messages/SubagentProgressDisplay.test.js +158 -0
- package/dist/src/ui/components/messages/SubagentProgressDisplay.test.js.map +1 -0
- package/dist/src/ui/components/messages/ToolGroupMessage.js +1 -0
- package/dist/src/ui/components/messages/ToolGroupMessage.js.map +1 -1
- package/dist/src/ui/components/messages/ToolResultDisplay.js +5 -0
- package/dist/src/ui/components/messages/ToolResultDisplay.js.map +1 -1
- package/dist/src/ui/components/shared/BaseSettingsDialog.d.ts +5 -2
- package/dist/src/ui/components/shared/BaseSettingsDialog.js +3 -2
- package/dist/src/ui/components/shared/BaseSettingsDialog.js.map +1 -1
- package/dist/src/ui/components/shared/BaseSettingsDialog.test.js +24 -0
- package/dist/src/ui/components/shared/BaseSettingsDialog.test.js.map +1 -1
- package/dist/src/ui/components/views/ExtensionRegistryView.d.ts +1 -2
- package/dist/src/ui/constants/tips.js +1 -1
- package/dist/src/ui/constants/tips.js.map +1 -1
- package/dist/src/ui/constants.d.ts +4 -0
- package/dist/src/ui/constants.js +4 -0
- package/dist/src/ui/constants.js.map +1 -1
- package/dist/src/ui/contexts/SettingsContext.js +2 -1
- package/dist/src/ui/contexts/SettingsContext.js.map +1 -1
- package/dist/src/ui/contexts/UIStateContext.d.ts +0 -2
- package/dist/src/ui/contexts/UIStateContext.js.map +1 -1
- package/dist/src/ui/contexts/VimModeContext.d.ts +1 -3
- package/dist/src/ui/contexts/VimModeContext.js +7 -16
- package/dist/src/ui/contexts/VimModeContext.js.map +1 -1
- package/dist/src/ui/hooks/toolMapping.js +1 -0
- package/dist/src/ui/hooks/toolMapping.js.map +1 -1
- package/dist/src/ui/hooks/useGeminiStream.js +16 -13
- package/dist/src/ui/hooks/useGeminiStream.js.map +1 -1
- package/dist/src/ui/hooks/useGeminiStream.test.js +31 -2
- package/dist/src/ui/hooks/useGeminiStream.test.js.map +1 -1
- package/dist/src/ui/hooks/useLoadingIndicator.d.ts +1 -1
- package/dist/src/ui/hooks/useLoadingIndicator.js +1 -1
- package/dist/src/ui/hooks/useLoadingIndicator.js.map +1 -1
- package/dist/src/ui/hooks/useTerminalTheme.js +6 -3
- package/dist/src/ui/hooks/useTerminalTheme.js.map +1 -1
- package/dist/src/ui/hooks/useTerminalTheme.test.js +19 -0
- package/dist/src/ui/hooks/useTerminalTheme.test.js.map +1 -1
- package/dist/src/ui/hooks/useToolScheduler.js +26 -12
- package/dist/src/ui/hooks/useToolScheduler.js.map +1 -1
- package/dist/src/ui/hooks/useToolScheduler.test.js +101 -8
- package/dist/src/ui/hooks/useToolScheduler.test.js.map +1 -1
- package/dist/src/ui/themes/theme-manager.d.ts +26 -4
- package/dist/src/ui/themes/theme-manager.js +40 -7
- package/dist/src/ui/themes/theme-manager.js.map +1 -1
- package/dist/src/ui/themes/theme-manager.test.js +2 -1
- package/dist/src/ui/themes/theme-manager.test.js.map +1 -1
- package/dist/src/ui/types.d.ts +3 -17
- package/dist/src/ui/types.js +0 -1
- package/dist/src/ui/types.js.map +1 -1
- package/dist/src/ui/utils/commandUtils.d.ts +6 -2
- package/dist/src/ui/utils/commandUtils.js +12 -5
- package/dist/src/ui/utils/commandUtils.js.map +1 -1
- package/dist/src/ui/utils/commandUtils.test.js +21 -7
- package/dist/src/ui/utils/commandUtils.test.js.map +1 -1
- package/dist/src/utils/agentSettings.d.ts +3 -11
- package/dist/src/utils/agentSettings.js +23 -81
- package/dist/src/utils/agentSettings.js.map +1 -1
- package/dist/src/{ui/components/SessionRetentionWarningDialog.test.d.ts → utils/agentSettings.test.d.ts} +0 -2
- package/dist/src/utils/agentSettings.test.js +111 -0
- package/dist/src/utils/agentSettings.test.js.map +1 -0
- package/dist/src/utils/dialogScopeUtils.d.ts +6 -2
- package/dist/src/utils/dialogScopeUtils.js +3 -3
- package/dist/src/utils/dialogScopeUtils.js.map +1 -1
- package/dist/src/utils/dialogScopeUtils.test.js +5 -5
- package/dist/src/utils/dialogScopeUtils.test.js.map +1 -1
- package/dist/src/utils/featureToggleUtils.d.ts +55 -0
- package/dist/src/utils/featureToggleUtils.js +95 -0
- package/dist/src/utils/featureToggleUtils.js.map +1 -0
- package/dist/src/utils/featureToggleUtils.test.d.ts +6 -0
- package/dist/src/utils/featureToggleUtils.test.js +126 -0
- package/dist/src/utils/featureToggleUtils.test.js.map +1 -0
- package/dist/src/utils/handleAutoUpdate.d.ts +7 -0
- package/dist/src/utils/handleAutoUpdate.js +41 -0
- package/dist/src/utils/handleAutoUpdate.js.map +1 -1
- package/dist/src/utils/handleAutoUpdate.test.js +52 -1
- package/dist/src/utils/handleAutoUpdate.test.js.map +1 -1
- package/dist/src/utils/processUtils.js +2 -0
- package/dist/src/utils/processUtils.js.map +1 -1
- package/dist/src/utils/processUtils.test.js +7 -1
- package/dist/src/utils/processUtils.test.js.map +1 -1
- package/dist/src/utils/sessionCleanup.js +8 -0
- package/dist/src/utils/sessionCleanup.js.map +1 -1
- package/dist/src/utils/sessionCleanup.test.js +19 -0
- package/dist/src/utils/sessionCleanup.test.js.map +1 -1
- package/dist/src/utils/settingsUtils.d.ts +18 -91
- package/dist/src/utils/settingsUtils.js +127 -207
- package/dist/src/utils/settingsUtils.js.map +1 -1
- package/dist/src/utils/settingsUtils.test.js +78 -264
- package/dist/src/utils/settingsUtils.test.js.map +1 -1
- package/dist/src/utils/skillSettings.d.ts +4 -14
- package/dist/src/utils/skillSettings.js +32 -81
- package/dist/src/utils/skillSettings.js.map +1 -1
- package/dist/src/utils/skillSettings.test.d.ts +6 -0
- package/dist/src/utils/skillSettings.test.js +142 -0
- package/dist/src/utils/skillSettings.test.js.map +1 -0
- package/dist/src/zed-integration/acpResume.test.js +8 -0
- package/dist/src/zed-integration/acpResume.test.js.map +1 -1
- package/dist/src/zed-integration/commandHandler.d.ts +26 -0
- package/dist/src/zed-integration/commandHandler.js +102 -0
- package/dist/src/zed-integration/commandHandler.js.map +1 -0
- package/dist/src/zed-integration/commandHandler.test.d.ts +6 -0
- package/dist/src/zed-integration/commandHandler.test.js +25 -0
- package/dist/src/zed-integration/commandHandler.test.js.map +1 -0
- package/dist/src/zed-integration/commands/commandRegistry.d.ts +12 -0
- package/dist/src/zed-integration/commands/commandRegistry.js +26 -0
- package/dist/src/zed-integration/commands/commandRegistry.js.map +1 -0
- package/dist/src/zed-integration/commands/extensions.d.ts +57 -0
- package/dist/src/zed-integration/commands/extensions.js +320 -0
- package/dist/src/zed-integration/commands/extensions.js.map +1 -0
- package/dist/src/zed-integration/commands/init.d.ts +12 -0
- package/dist/src/zed-integration/commands/init.js +47 -0
- package/dist/src/zed-integration/commands/init.js.map +1 -0
- package/dist/src/zed-integration/commands/memory.d.ts +34 -0
- package/dist/src/zed-integration/commands/memory.js +83 -0
- package/dist/src/zed-integration/commands/memory.js.map +1 -0
- package/dist/src/zed-integration/commands/restore.d.ts +18 -0
- package/dist/src/zed-integration/commands/restore.js +140 -0
- package/dist/src/zed-integration/commands/restore.js.map +1 -0
- package/dist/src/zed-integration/commands/types.d.ts +31 -0
- package/dist/src/zed-integration/commands/types.js +7 -0
- package/dist/src/zed-integration/commands/types.js.map +1 -0
- package/dist/src/zed-integration/zedIntegration.d.ts +9 -2
- package/dist/src/zed-integration/zedIntegration.js +170 -8
- package/dist/src/zed-integration/zedIntegration.js.map +1 -1
- package/dist/src/zed-integration/zedIntegration.test.js +329 -2
- package/dist/src/zed-integration/zedIntegration.test.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +4 -4
- package/dist/src/ui/components/SessionRetentionWarningDialog.d.ts +0 -12
- package/dist/src/ui/components/SessionRetentionWarningDialog.js +0 -27
- package/dist/src/ui/components/SessionRetentionWarningDialog.js.map +0 -1
- package/dist/src/ui/components/SessionRetentionWarningDialog.test.js +0 -72
- package/dist/src/ui/components/SessionRetentionWarningDialog.test.js.map +0 -1
- package/dist/src/ui/components/views/HooksList.d.ts +0 -24
- package/dist/src/ui/components/views/HooksList.js +0 -28
- package/dist/src/ui/components/views/HooksList.js.map +0 -1
- package/dist/src/ui/hooks/useSessionRetentionCheck.d.ts +0 -12
- package/dist/src/ui/hooks/useSessionRetentionCheck.js +0 -57
- package/dist/src/ui/hooks/useSessionRetentionCheck.js.map +0 -1
- package/dist/src/ui/hooks/useSessionRetentionCheck.test.js +0 -169
- package/dist/src/ui/hooks/useSessionRetentionCheck.test.js.map +0 -1
- /package/dist/src/ui/{hooks/useSessionRetentionCheck.test.d.ts → components/HooksDialog.test.d.ts} +0 -0
|
@@ -26,9 +26,6 @@ export function getFlattenedSchema() {
|
|
|
26
26
|
function clearFlattenedSchema() {
|
|
27
27
|
_FLATTENED_SCHEMA = undefined;
|
|
28
28
|
}
|
|
29
|
-
/**
|
|
30
|
-
* Get all settings grouped by category
|
|
31
|
-
*/
|
|
32
29
|
export function getSettingsByCategory() {
|
|
33
30
|
const categories = {};
|
|
34
31
|
Object.values(getFlattenedSchema()).forEach((definition) => {
|
|
@@ -40,27 +37,18 @@ export function getSettingsByCategory() {
|
|
|
40
37
|
});
|
|
41
38
|
return categories;
|
|
42
39
|
}
|
|
43
|
-
/**
|
|
44
|
-
* Get a setting definition by key
|
|
45
|
-
*/
|
|
46
40
|
export function getSettingDefinition(key) {
|
|
47
41
|
return getFlattenedSchema()[key];
|
|
48
42
|
}
|
|
49
|
-
/**
|
|
50
|
-
* Check if a setting requires restart
|
|
51
|
-
*/
|
|
52
43
|
export function requiresRestart(key) {
|
|
53
44
|
return getFlattenedSchema()[key]?.requiresRestart ?? false;
|
|
54
45
|
}
|
|
55
|
-
/**
|
|
56
|
-
* Get the default value for a setting
|
|
57
|
-
*/
|
|
58
46
|
export function getDefaultValue(key) {
|
|
59
47
|
return getFlattenedSchema()[key]?.default;
|
|
60
48
|
}
|
|
61
49
|
/**
|
|
62
50
|
* Get the effective default value for a setting, checking experiment values when available.
|
|
63
|
-
* For settings like
|
|
51
|
+
* For settings like Context Compression Threshold, this will return the experiment value if set,
|
|
64
52
|
* otherwise falls back to the schema default.
|
|
65
53
|
*/
|
|
66
54
|
export function getEffectiveDefaultValue(key, config) {
|
|
@@ -74,72 +62,71 @@ export function getEffectiveDefaultValue(key, config) {
|
|
|
74
62
|
}
|
|
75
63
|
return getDefaultValue(key);
|
|
76
64
|
}
|
|
77
|
-
/**
|
|
78
|
-
* Get all setting keys that require restart
|
|
79
|
-
*/
|
|
80
65
|
export function getRestartRequiredSettings() {
|
|
81
66
|
return Object.values(getFlattenedSchema())
|
|
82
67
|
.filter((definition) => definition.requiresRestart)
|
|
83
68
|
.map((definition) => definition.key);
|
|
84
69
|
}
|
|
85
70
|
/**
|
|
86
|
-
*
|
|
71
|
+
* Get restart-required setting keys that are also visible in the dialog.
|
|
72
|
+
* Non-dialog restart keys (e.g. parent container objects like mcpServers, tools)
|
|
73
|
+
* are excluded because users cannot change them through the dialog.
|
|
74
|
+
*/
|
|
75
|
+
export function getDialogRestartRequiredSettings() {
|
|
76
|
+
return Object.values(getFlattenedSchema())
|
|
77
|
+
.filter((definition) => definition.requiresRestart && definition.showInDialog !== false)
|
|
78
|
+
.map((definition) => definition.key);
|
|
79
|
+
}
|
|
80
|
+
export function isRecord(value) {
|
|
81
|
+
return typeof value === 'object' && value !== null;
|
|
82
|
+
}
|
|
83
|
+
function isSettingsValue(value) {
|
|
84
|
+
if (value === undefined)
|
|
85
|
+
return true;
|
|
86
|
+
if (value === null)
|
|
87
|
+
return false;
|
|
88
|
+
const type = typeof value;
|
|
89
|
+
return (type === 'string' ||
|
|
90
|
+
type === 'number' ||
|
|
91
|
+
type === 'boolean' ||
|
|
92
|
+
type === 'object');
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Gets a value from a nested object using a key path array iteratively.
|
|
87
96
|
*/
|
|
88
97
|
export function getNestedValue(obj, path) {
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
return value;
|
|
96
|
-
}
|
|
97
|
-
if (value && typeof value === 'object' && value !== null) {
|
|
98
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion
|
|
99
|
-
return getNestedValue(value, rest);
|
|
98
|
+
let current = obj;
|
|
99
|
+
for (const key of path) {
|
|
100
|
+
if (!isRecord(current) || !(key in current)) {
|
|
101
|
+
return undefined;
|
|
102
|
+
}
|
|
103
|
+
current = current[key];
|
|
100
104
|
}
|
|
101
|
-
return
|
|
105
|
+
return current;
|
|
102
106
|
}
|
|
103
107
|
/**
|
|
104
|
-
* Get the effective value for a setting
|
|
105
|
-
* Always returns a value (never undefined) - falls back to default if not set anywhere
|
|
108
|
+
* Get the effective value for a setting falling back to the default value
|
|
106
109
|
*/
|
|
107
|
-
export function getEffectiveValue(key, settings
|
|
110
|
+
export function getEffectiveValue(key, settings) {
|
|
108
111
|
const definition = getSettingDefinition(key);
|
|
109
112
|
if (!definition) {
|
|
110
113
|
return undefined;
|
|
111
114
|
}
|
|
112
115
|
const path = key.split('.');
|
|
113
116
|
// Check the current scope's settings first
|
|
114
|
-
|
|
115
|
-
if (value !== undefined) {
|
|
116
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion
|
|
117
|
-
return value;
|
|
118
|
-
}
|
|
119
|
-
// Check the merged settings for an inherited value
|
|
120
|
-
value = getNestedValue(mergedSettings, path);
|
|
121
|
-
if (value !== undefined) {
|
|
122
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion
|
|
117
|
+
const value = getNestedValue(settings, path);
|
|
118
|
+
if (value !== undefined && isSettingsValue(value)) {
|
|
123
119
|
return value;
|
|
124
120
|
}
|
|
125
121
|
// Return default value if no value is set anywhere
|
|
126
122
|
return definition.default;
|
|
127
123
|
}
|
|
128
|
-
/**
|
|
129
|
-
* Get all setting keys from the schema
|
|
130
|
-
*/
|
|
131
124
|
export function getAllSettingKeys() {
|
|
132
125
|
return Object.keys(getFlattenedSchema());
|
|
133
126
|
}
|
|
134
|
-
/**
|
|
135
|
-
* Get settings by type
|
|
136
|
-
*/
|
|
137
127
|
export function getSettingsByType(type) {
|
|
138
128
|
return Object.values(getFlattenedSchema()).filter((definition) => definition.type === type);
|
|
139
129
|
}
|
|
140
|
-
/**
|
|
141
|
-
* Get settings that require restart
|
|
142
|
-
*/
|
|
143
130
|
export function getSettingsRequiringRestart() {
|
|
144
131
|
return Object.values(getFlattenedSchema()).filter((definition) => definition.requiresRestart);
|
|
145
132
|
}
|
|
@@ -149,20 +136,19 @@ export function getSettingsRequiringRestart() {
|
|
|
149
136
|
export function isValidSettingKey(key) {
|
|
150
137
|
return key in getFlattenedSchema();
|
|
151
138
|
}
|
|
152
|
-
/**
|
|
153
|
-
* Get the category for a setting
|
|
154
|
-
*/
|
|
155
139
|
export function getSettingCategory(key) {
|
|
156
140
|
return getFlattenedSchema()[key]?.category;
|
|
157
141
|
}
|
|
158
|
-
/**
|
|
159
|
-
* Check if a setting should be shown in the settings dialog
|
|
160
|
-
*/
|
|
161
142
|
export function shouldShowInDialog(key) {
|
|
162
143
|
return getFlattenedSchema()[key]?.showInDialog ?? true; // Default to true for backward compatibility
|
|
163
144
|
}
|
|
145
|
+
export function getDialogSettingKeys() {
|
|
146
|
+
return Object.values(getFlattenedSchema())
|
|
147
|
+
.filter((definition) => definition.showInDialog !== false)
|
|
148
|
+
.map((definition) => definition.key);
|
|
149
|
+
}
|
|
164
150
|
/**
|
|
165
|
-
* Get all settings that should be shown in the dialog, grouped by category
|
|
151
|
+
* Get all settings that should be shown in the dialog, grouped by category like "Advanced", "General", etc.
|
|
166
152
|
*/
|
|
167
153
|
export function getDialogSettingsByCategory() {
|
|
168
154
|
const categories = {};
|
|
@@ -177,144 +163,25 @@ export function getDialogSettingsByCategory() {
|
|
|
177
163
|
});
|
|
178
164
|
return categories;
|
|
179
165
|
}
|
|
180
|
-
/**
|
|
181
|
-
* Get settings by type that should be shown in the dialog
|
|
182
|
-
*/
|
|
183
166
|
export function getDialogSettingsByType(type) {
|
|
184
167
|
return Object.values(getFlattenedSchema()).filter((definition) => definition.type === type && definition.showInDialog !== false);
|
|
185
168
|
}
|
|
186
|
-
|
|
187
|
-
* Get all setting keys that should be shown in the dialog
|
|
188
|
-
*/
|
|
189
|
-
export function getDialogSettingKeys() {
|
|
190
|
-
return Object.values(getFlattenedSchema())
|
|
191
|
-
.filter((definition) => definition.showInDialog !== false)
|
|
192
|
-
.map((definition) => definition.key);
|
|
193
|
-
}
|
|
194
|
-
// ============================================================================
|
|
195
|
-
// BUSINESS LOGIC UTILITIES (Higher-level utilities for setting operations)
|
|
196
|
-
// ============================================================================
|
|
197
|
-
/**
|
|
198
|
-
* Get the current value for a setting in a specific scope
|
|
199
|
-
* Always returns a value (never undefined) - falls back to default if not set anywhere
|
|
200
|
-
*/
|
|
201
|
-
export function getSettingValue(key, settings, mergedSettings) {
|
|
202
|
-
const definition = getSettingDefinition(key);
|
|
203
|
-
if (!definition) {
|
|
204
|
-
return false; // Default fallback for invalid settings
|
|
205
|
-
}
|
|
206
|
-
const value = getEffectiveValue(key, settings, mergedSettings);
|
|
207
|
-
// Ensure we return a boolean value, converting from the more general type
|
|
208
|
-
if (typeof value === 'boolean') {
|
|
209
|
-
return value;
|
|
210
|
-
}
|
|
211
|
-
return false; // Final fallback
|
|
212
|
-
}
|
|
213
|
-
/**
|
|
214
|
-
* Check if a setting value is modified from its default
|
|
215
|
-
*/
|
|
216
|
-
export function isSettingModified(key, value) {
|
|
217
|
-
const defaultValue = getDefaultValue(key);
|
|
218
|
-
// Handle type comparison properly
|
|
219
|
-
if (typeof defaultValue === 'boolean') {
|
|
220
|
-
return value !== defaultValue;
|
|
221
|
-
}
|
|
222
|
-
// If default is not a boolean, consider it modified if value is true
|
|
223
|
-
return value === true;
|
|
224
|
-
}
|
|
225
|
-
/**
|
|
226
|
-
* Check if a setting exists in the original settings file for a scope
|
|
227
|
-
*/
|
|
228
|
-
export function settingExistsInScope(key, scopeSettings) {
|
|
169
|
+
export function isInSettingsScope(key, scopeSettings) {
|
|
229
170
|
const path = key.split('.');
|
|
230
171
|
const value = getNestedValue(scopeSettings, path);
|
|
231
172
|
return value !== undefined;
|
|
232
173
|
}
|
|
233
174
|
/**
|
|
234
|
-
*
|
|
235
|
-
*/
|
|
236
|
-
function setNestedValue(obj, path, value) {
|
|
237
|
-
const [first, ...rest] = path;
|
|
238
|
-
if (!first) {
|
|
239
|
-
return obj;
|
|
240
|
-
}
|
|
241
|
-
if (rest.length === 0) {
|
|
242
|
-
obj[first] = value;
|
|
243
|
-
return obj;
|
|
244
|
-
}
|
|
245
|
-
if (!obj[first] || typeof obj[first] !== 'object') {
|
|
246
|
-
obj[first] = {};
|
|
247
|
-
}
|
|
248
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion
|
|
249
|
-
setNestedValue(obj[first], rest, value);
|
|
250
|
-
return obj;
|
|
251
|
-
}
|
|
252
|
-
/**
|
|
253
|
-
* Set a setting value in the pending settings
|
|
254
|
-
*/
|
|
255
|
-
export function setPendingSettingValue(key, value, pendingSettings) {
|
|
256
|
-
const path = key.split('.');
|
|
257
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
|
258
|
-
const newSettings = JSON.parse(JSON.stringify(pendingSettings));
|
|
259
|
-
setNestedValue(newSettings, path, value);
|
|
260
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-return
|
|
261
|
-
return newSettings;
|
|
262
|
-
}
|
|
263
|
-
/**
|
|
264
|
-
* Generic setter: Set a setting value (boolean, number, string, etc.) in the pending settings
|
|
265
|
-
*/
|
|
266
|
-
export function setPendingSettingValueAny(key, value, pendingSettings) {
|
|
267
|
-
const path = key.split('.');
|
|
268
|
-
const newSettings = structuredClone(pendingSettings);
|
|
269
|
-
setNestedValue(newSettings, path, value);
|
|
270
|
-
return newSettings;
|
|
271
|
-
}
|
|
272
|
-
/**
|
|
273
|
-
* Check if any modified settings require a restart
|
|
274
|
-
*/
|
|
275
|
-
export function hasRestartRequiredSettings(modifiedSettings) {
|
|
276
|
-
return Array.from(modifiedSettings).some((key) => requiresRestart(key));
|
|
277
|
-
}
|
|
278
|
-
/**
|
|
279
|
-
* Get the restart required settings from a set of modified settings
|
|
280
|
-
*/
|
|
281
|
-
export function getRestartRequiredFromModified(modifiedSettings) {
|
|
282
|
-
return Array.from(modifiedSettings).filter((key) => requiresRestart(key));
|
|
283
|
-
}
|
|
284
|
-
/**
|
|
285
|
-
* Save modified settings to the appropriate scope
|
|
286
|
-
*/
|
|
287
|
-
export function saveModifiedSettings(modifiedSettings, pendingSettings, loadedSettings, scope) {
|
|
288
|
-
modifiedSettings.forEach((settingKey) => {
|
|
289
|
-
const path = settingKey.split('.');
|
|
290
|
-
const value = getNestedValue(pendingSettings, path);
|
|
291
|
-
if (value === undefined) {
|
|
292
|
-
return;
|
|
293
|
-
}
|
|
294
|
-
const existsInOriginalFile = settingExistsInScope(settingKey, loadedSettings.forScope(scope).settings);
|
|
295
|
-
const isDefaultValue = value === getDefaultValue(settingKey);
|
|
296
|
-
if (existsInOriginalFile || !isDefaultValue) {
|
|
297
|
-
loadedSettings.setValue(scope, settingKey, value);
|
|
298
|
-
}
|
|
299
|
-
});
|
|
300
|
-
}
|
|
301
|
-
/**
|
|
302
|
-
* Get the display value for a setting, showing current scope value with default change indicator
|
|
175
|
+
* Appends a star (*) to settings that exist in the scope
|
|
303
176
|
*/
|
|
304
|
-
export function getDisplayValue(key,
|
|
305
|
-
// Prioritize pending changes if user has modified this setting
|
|
177
|
+
export function getDisplayValue(key, scopeSettings, _mergedSettings) {
|
|
306
178
|
const definition = getSettingDefinition(key);
|
|
179
|
+
const existsInScope = isInSettingsScope(key, scopeSettings);
|
|
307
180
|
let value;
|
|
308
|
-
if (
|
|
309
|
-
|
|
310
|
-
value = getEffectiveValue(key, pendingSettings, {});
|
|
311
|
-
}
|
|
312
|
-
else if (settingExistsInScope(key, settings)) {
|
|
313
|
-
// Show the value defined at the current scope if present
|
|
314
|
-
value = getEffectiveValue(key, settings, {});
|
|
181
|
+
if (existsInScope) {
|
|
182
|
+
value = getEffectiveValue(key, scopeSettings);
|
|
315
183
|
}
|
|
316
184
|
else {
|
|
317
|
-
// Fall back to the schema default when the key is unset in this scope
|
|
318
185
|
value = getDefaultValue(key);
|
|
319
186
|
}
|
|
320
187
|
let valueString = String(value);
|
|
@@ -322,37 +189,90 @@ export function getDisplayValue(key, settings, _mergedSettings, modifiedSettings
|
|
|
322
189
|
const option = definition.options?.find((option) => option.value === value);
|
|
323
190
|
valueString = option?.label ?? `${value}`;
|
|
324
191
|
}
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
if (settingExistsInScope(key, settings) || isInModifiedSettings) {
|
|
331
|
-
return `${valueString}*`; // * indicates setting is set in current scope
|
|
192
|
+
if (definition?.unit === '%' && typeof value === 'number') {
|
|
193
|
+
valueString = `${value} (${Math.round(value * 100)}%)`;
|
|
194
|
+
}
|
|
195
|
+
else if (definition?.unit) {
|
|
196
|
+
valueString = `${valueString}${definition.unit}`;
|
|
332
197
|
}
|
|
333
|
-
if (
|
|
334
|
-
return `${valueString}*`;
|
|
198
|
+
if (existsInScope) {
|
|
199
|
+
return `${valueString}*`;
|
|
335
200
|
}
|
|
336
201
|
return valueString;
|
|
337
202
|
}
|
|
338
|
-
/**
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
203
|
+
/**Utilities for parsing Settings that can be inline edited by the user typing out values */
|
|
204
|
+
function tryParseJsonStringArray(input) {
|
|
205
|
+
try {
|
|
206
|
+
const parsed = JSON.parse(input);
|
|
207
|
+
if (Array.isArray(parsed) &&
|
|
208
|
+
parsed.every((item) => typeof item === 'string')) {
|
|
209
|
+
return parsed;
|
|
210
|
+
}
|
|
211
|
+
return null;
|
|
212
|
+
}
|
|
213
|
+
catch {
|
|
214
|
+
return null;
|
|
215
|
+
}
|
|
343
216
|
}
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
217
|
+
function tryParseJsonObject(input) {
|
|
218
|
+
try {
|
|
219
|
+
const parsed = JSON.parse(input);
|
|
220
|
+
if (isRecord(parsed) && !Array.isArray(parsed)) {
|
|
221
|
+
return parsed;
|
|
222
|
+
}
|
|
223
|
+
return null;
|
|
224
|
+
}
|
|
225
|
+
catch {
|
|
226
|
+
return null;
|
|
227
|
+
}
|
|
349
228
|
}
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
229
|
+
function parseStringArrayValue(input) {
|
|
230
|
+
const trimmed = input.trim();
|
|
231
|
+
if (trimmed === '')
|
|
232
|
+
return [];
|
|
233
|
+
return (tryParseJsonStringArray(trimmed) ??
|
|
234
|
+
input
|
|
235
|
+
.split(',')
|
|
236
|
+
.map((p) => p.trim())
|
|
237
|
+
.filter((p) => p.length > 0));
|
|
238
|
+
}
|
|
239
|
+
function parseObjectValue(input) {
|
|
240
|
+
const trimmed = input.trim();
|
|
241
|
+
if (trimmed === '') {
|
|
242
|
+
return null;
|
|
243
|
+
}
|
|
244
|
+
return tryParseJsonObject(trimmed);
|
|
245
|
+
}
|
|
246
|
+
export function parseEditedValue(type, newValue) {
|
|
247
|
+
if (type === 'number') {
|
|
248
|
+
if (newValue.trim() === '') {
|
|
249
|
+
return null;
|
|
250
|
+
}
|
|
251
|
+
const numParsed = Number(newValue.trim());
|
|
252
|
+
if (Number.isNaN(numParsed)) {
|
|
253
|
+
return null;
|
|
254
|
+
}
|
|
255
|
+
return numParsed;
|
|
256
|
+
}
|
|
257
|
+
if (type === 'array') {
|
|
258
|
+
return parseStringArrayValue(newValue);
|
|
259
|
+
}
|
|
260
|
+
if (type === 'object') {
|
|
261
|
+
return parseObjectValue(newValue);
|
|
262
|
+
}
|
|
263
|
+
return newValue;
|
|
264
|
+
}
|
|
265
|
+
export function getEditValue(type, rawValue) {
|
|
266
|
+
if (rawValue === undefined) {
|
|
267
|
+
return undefined;
|
|
268
|
+
}
|
|
269
|
+
if (type === 'array' && Array.isArray(rawValue)) {
|
|
270
|
+
return rawValue.join(', ');
|
|
271
|
+
}
|
|
272
|
+
if (type === 'object' && rawValue !== null && typeof rawValue === 'object') {
|
|
273
|
+
return JSON.stringify(rawValue);
|
|
274
|
+
}
|
|
275
|
+
return undefined;
|
|
356
276
|
}
|
|
357
277
|
export const TEST_ONLY = { clearFlattenedSchema };
|
|
358
278
|
//# sourceMappingURL=settingsUtils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"settingsUtils.js","sourceRoot":"","sources":["../../../src/utils/settingsUtils.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"settingsUtils.js","sourceRoot":"","sources":["../../../src/utils/settingsUtils.ts"],"names":[],"mappings":"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"}
|