@machina.ai/cell-cli 1.0.21-rc4 → 1.2.2-rc1
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/dist/index.js +9 -0
- package/dist/index.js.map +1 -1
- package/dist/package.json +7 -8
- package/dist/src/commands/extensions/disable.d.ts +14 -0
- package/dist/src/commands/extensions/disable.js +42 -0
- package/dist/src/commands/extensions/disable.js.map +1 -0
- package/dist/src/commands/extensions/enable.d.ts +14 -0
- package/dist/src/commands/extensions/enable.js +48 -0
- package/dist/src/commands/extensions/enable.js.map +1 -0
- package/dist/src/commands/extensions/install.d.ts +13 -0
- package/dist/src/commands/extensions/install.js +48 -0
- package/dist/src/commands/extensions/install.js.map +1 -0
- package/dist/src/commands/extensions/install.test.d.ts +6 -0
- package/dist/src/commands/extensions/install.test.js +19 -0
- package/dist/src/commands/extensions/install.test.js.map +1 -0
- package/dist/src/commands/extensions/list.d.ts +8 -0
- package/dist/src/commands/extensions/list.js +32 -0
- package/dist/src/commands/extensions/list.js.map +1 -0
- package/dist/src/commands/extensions/uninstall.d.ts +12 -0
- package/dist/src/commands/extensions/uninstall.js +38 -0
- package/dist/src/commands/extensions/uninstall.js.map +1 -0
- package/dist/src/commands/extensions/uninstall.test.d.ts +6 -0
- package/dist/src/commands/extensions/uninstall.test.js +15 -0
- package/dist/src/commands/extensions/uninstall.test.js.map +1 -0
- package/dist/src/commands/extensions/update.d.ts +13 -0
- package/dist/src/commands/extensions/update.js +60 -0
- package/dist/src/commands/extensions/update.js.map +1 -0
- package/dist/src/commands/extensions.d.ts +7 -0
- package/dist/src/commands/extensions.js +29 -0
- package/dist/src/commands/extensions.js.map +1 -0
- package/dist/src/commands/mcp/list.js +1 -1
- package/dist/src/commands/mcp/list.js.map +1 -1
- package/dist/src/config/auth.js +2 -2
- package/dist/src/config/auth.js.map +1 -1
- package/dist/src/config/auth.test.js +4 -3
- package/dist/src/config/auth.test.js.map +1 -1
- package/dist/src/config/config.d.ts +10 -7
- package/dist/src/config/config.js +95 -56
- package/dist/src/config/config.js.map +1 -1
- package/dist/src/config/extension.d.ts +42 -2
- package/dist/src/config/extension.js +285 -15
- package/dist/src/config/extension.js.map +1 -1
- package/dist/src/config/extensions/variableSchema.d.ts +28 -0
- package/dist/src/config/extensions/variableSchema.js +18 -0
- package/dist/src/config/extensions/variableSchema.js.map +1 -0
- package/dist/src/config/extensions/variables.d.ts +17 -0
- package/dist/src/config/extensions/variables.js +40 -0
- package/dist/src/config/extensions/variables.js.map +1 -0
- package/dist/src/config/extensions/variables.test.d.ts +6 -0
- package/dist/src/config/extensions/variables.test.js +17 -0
- package/dist/src/config/extensions/variables.test.js.map +1 -0
- package/dist/src/config/keyBindings.test.js +1 -1
- package/dist/src/config/keyBindings.test.js.map +1 -1
- package/dist/src/config/sandboxConfig.d.ts +2 -2
- package/dist/src/config/sandboxConfig.js +5 -7
- package/dist/src/config/sandboxConfig.js.map +1 -1
- package/dist/src/config/settings.d.ts +13 -7
- package/dist/src/config/settings.js +375 -119
- package/dist/src/config/settings.js.map +1 -1
- package/dist/src/config/settingsSchema.d.ts +654 -338
- package/dist/src/config/settingsSchema.js +649 -333
- package/dist/src/config/settingsSchema.js.map +1 -1
- package/dist/src/config/settingsSchema.test.js +87 -89
- package/dist/src/config/settingsSchema.test.js.map +1 -1
- package/dist/src/config/trustedFolders.d.ts +14 -4
- package/dist/src/config/trustedFolders.js +53 -41
- package/dist/src/config/trustedFolders.js.map +1 -1
- package/dist/src/config/trustedFolders.test.js +43 -5
- package/dist/src/config/trustedFolders.test.js.map +1 -1
- package/dist/src/gemini.d.ts +3 -1
- package/dist/src/gemini.js +115 -50
- package/dist/src/gemini.js.map +1 -1
- package/dist/src/gemini.test.js +79 -25
- package/dist/src/gemini.test.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/generated/git-commit.js.map +1 -1
- package/dist/src/nonInteractiveCli.d.ts +1 -1
- package/dist/src/nonInteractiveCli.js +25 -37
- package/dist/src/nonInteractiveCli.js.map +1 -1
- package/dist/src/services/BuiltinCommandLoader.d.ts +3 -3
- package/dist/src/services/CommandService.d.ts +2 -2
- package/dist/src/services/CommandService.test.js +1 -0
- package/dist/src/services/CommandService.test.js.map +1 -1
- package/dist/src/services/FileCommandLoader.d.ts +5 -3
- package/dist/src/services/FileCommandLoader.js +33 -16
- package/dist/src/services/FileCommandLoader.js.map +1 -1
- package/dist/src/services/McpPromptLoader.d.ts +14 -4
- package/dist/src/services/McpPromptLoader.js +43 -17
- package/dist/src/services/McpPromptLoader.js.map +1 -1
- package/dist/src/services/McpPromptLoader.test.d.ts +6 -0
- package/dist/src/services/McpPromptLoader.test.js +114 -0
- package/dist/src/services/McpPromptLoader.test.js.map +1 -0
- package/dist/src/services/prompt-processors/argumentProcessor.d.ts +3 -3
- package/dist/src/services/prompt-processors/argumentProcessor.js +3 -2
- package/dist/src/services/prompt-processors/argumentProcessor.js.map +1 -1
- package/dist/src/services/prompt-processors/atFileProcessor.d.ts +12 -0
- package/dist/src/services/prompt-processors/atFileProcessor.js +62 -0
- package/dist/src/services/prompt-processors/atFileProcessor.js.map +1 -0
- package/dist/src/services/prompt-processors/atFileProcessor.test.d.ts +6 -0
- package/dist/src/services/prompt-processors/atFileProcessor.test.js +174 -0
- package/dist/src/services/prompt-processors/atFileProcessor.test.js.map +1 -0
- package/dist/src/services/prompt-processors/injectionParser.d.ts +29 -0
- package/dist/src/services/prompt-processors/injectionParser.js +60 -0
- package/dist/src/services/prompt-processors/injectionParser.js.map +1 -0
- package/dist/src/services/prompt-processors/injectionParser.test.d.ts +6 -0
- package/dist/src/services/prompt-processors/injectionParser.test.js +189 -0
- package/dist/src/services/prompt-processors/injectionParser.test.js.map +1 -0
- package/dist/src/services/prompt-processors/shellProcessor.d.ts +4 -12
- package/dist/src/services/prompt-processors/shellProcessor.js +19 -68
- package/dist/src/services/prompt-processors/shellProcessor.js.map +1 -1
- package/dist/src/services/prompt-processors/types.d.ts +13 -8
- package/dist/src/services/prompt-processors/types.js +4 -0
- package/dist/src/services/prompt-processors/types.js.map +1 -1
- package/dist/src/services/types.d.ts +1 -1
- package/dist/src/test-utils/customMatchers.js +0 -6
- package/dist/src/test-utils/customMatchers.js.map +1 -1
- package/dist/src/test-utils/mockCommandContext.d.ts +1 -1
- package/dist/src/test-utils/render.d.ts +1 -1
- package/dist/src/ui/App.d.ts +2 -2
- package/dist/src/ui/App.js +124 -66
- package/dist/src/ui/App.js.map +1 -1
- package/dist/src/ui/IdeIntegrationNudge.d.ts +1 -1
- package/dist/src/ui/IdeIntegrationNudge.js +2 -7
- package/dist/src/ui/IdeIntegrationNudge.js.map +1 -1
- package/dist/src/ui/colors.d.ts +1 -1
- package/dist/src/ui/commands/aboutCommand.d.ts +1 -1
- package/dist/src/ui/commands/aboutCommand.js +1 -1
- package/dist/src/ui/commands/aboutCommand.js.map +1 -1
- package/dist/src/ui/commands/authCommand.d.ts +1 -1
- package/dist/src/ui/commands/authCommand.js.map +1 -1
- package/dist/src/ui/commands/chatCommand.d.ts +1 -1
- package/dist/src/ui/commands/chatCommand.js +5 -4
- package/dist/src/ui/commands/chatCommand.js.map +1 -1
- package/dist/src/ui/commands/clearCommand.d.ts +1 -1
- package/dist/src/ui/commands/clearCommand.js.map +1 -1
- package/dist/src/ui/commands/compressCommand.d.ts +1 -1
- package/dist/src/ui/commands/compressCommand.js +2 -0
- package/dist/src/ui/commands/compressCommand.js.map +1 -1
- package/dist/src/ui/commands/copyCommand.d.ts +1 -1
- package/dist/src/ui/commands/copyCommand.js +2 -2
- package/dist/src/ui/commands/copyCommand.js.map +1 -1
- package/dist/src/ui/commands/directoryCommand.d.ts +1 -1
- package/dist/src/ui/commands/directoryCommand.js +5 -4
- package/dist/src/ui/commands/directoryCommand.js.map +1 -1
- package/dist/src/ui/commands/helpCommand.d.ts +1 -1
- package/dist/src/ui/commands/helpCommand.js.map +1 -1
- package/dist/src/ui/commands/ideCommand.d.ts +2 -2
- package/dist/src/ui/commands/ideCommand.js +31 -12
- package/dist/src/ui/commands/ideCommand.js.map +1 -1
- package/dist/src/ui/commands/initCommand.d.ts +1 -1
- package/dist/src/ui/commands/initCommand.js +3 -3
- package/dist/src/ui/commands/initCommand.js.map +1 -1
- package/dist/src/ui/commands/mcpCommand.d.ts +1 -1
- package/dist/src/ui/commands/mcpCommand.js +4 -4
- package/dist/src/ui/commands/mcpCommand.js.map +1 -1
- package/dist/src/ui/commands/memoryCommand.d.ts +1 -1
- package/dist/src/ui/commands/memoryCommand.js +4 -3
- package/dist/src/ui/commands/memoryCommand.js.map +1 -1
- package/dist/src/ui/commands/privacyCommand.d.ts +1 -1
- package/dist/src/ui/commands/privacyCommand.js.map +1 -1
- package/dist/src/ui/commands/restoreCommand.d.ts +1 -1
- package/dist/src/ui/commands/restoreCommand.js +5 -9
- package/dist/src/ui/commands/restoreCommand.js.map +1 -1
- package/dist/src/ui/commands/settingsCommand.d.ts +1 -1
- package/dist/src/ui/commands/settingsCommand.js.map +1 -1
- package/dist/src/ui/commands/setupGithubCommand.d.ts +3 -1
- package/dist/src/ui/commands/setupGithubCommand.js +48 -9
- package/dist/src/ui/commands/setupGithubCommand.js.map +1 -1
- package/dist/src/ui/commands/setupGithubCommand.test.js +100 -7
- package/dist/src/ui/commands/setupGithubCommand.test.js.map +1 -1
- package/dist/src/ui/commands/statsCommand.js.map +1 -1
- package/dist/src/ui/commands/terminalSetupCommand.d.ts +1 -1
- package/dist/src/ui/commands/terminalSetupCommand.js.map +1 -1
- package/dist/src/ui/commands/themeCommand.d.ts +1 -1
- package/dist/src/ui/commands/themeCommand.js.map +1 -1
- package/dist/src/ui/commands/toolsCommand.js +2 -2
- package/dist/src/ui/commands/toolsCommand.js.map +1 -1
- package/dist/src/ui/commands/types.d.ts +7 -8
- package/dist/src/ui/commands/types.js +1 -0
- package/dist/src/ui/commands/types.js.map +1 -1
- package/dist/src/ui/commands/vimCommand.d.ts +1 -1
- package/dist/src/ui/commands/vimCommand.js.map +1 -1
- package/dist/src/ui/components/AboutBox.d.ts +1 -1
- package/dist/src/ui/components/AsciiArt.d.ts +3 -3
- package/dist/src/ui/components/AsciiArt.js +3 -3
- package/dist/src/ui/components/AuthDialog.d.ts +3 -2
- package/dist/src/ui/components/AuthDialog.js +7 -7
- package/dist/src/ui/components/AuthDialog.js.map +1 -1
- package/dist/src/ui/components/AuthDialog.test.js +36 -18
- package/dist/src/ui/components/AuthDialog.test.js.map +1 -1
- package/dist/src/ui/components/AuthInProgress.d.ts +1 -1
- package/dist/src/ui/components/AuthInProgress.js +0 -5
- package/dist/src/ui/components/AuthInProgress.js.map +1 -1
- package/dist/src/ui/components/AutoAcceptIndicator.d.ts +1 -1
- package/dist/src/ui/components/ConsoleSummaryDisplay.d.ts +1 -1
- package/dist/src/ui/components/ContextSummaryDisplay.d.ts +1 -1
- package/dist/src/ui/components/ContextSummaryDisplay.js +1 -0
- package/dist/src/ui/components/ContextSummaryDisplay.js.map +1 -1
- package/dist/src/ui/components/DetailedMessagesDisplay.d.ts +2 -2
- package/dist/src/ui/components/DetailedMessagesDisplay.js +1 -1
- package/dist/src/ui/components/DetailedMessagesDisplay.js.map +1 -1
- package/dist/src/ui/components/EditorSettingsDialog.d.ts +4 -3
- package/dist/src/ui/components/EditorSettingsDialog.js +8 -11
- package/dist/src/ui/components/EditorSettingsDialog.js.map +1 -1
- package/dist/src/ui/components/FolderTrustDialog.d.ts +2 -1
- package/dist/src/ui/components/FolderTrustDialog.js +13 -5
- package/dist/src/ui/components/FolderTrustDialog.js.map +1 -1
- package/dist/src/ui/components/FolderTrustDialog.test.js +55 -3
- package/dist/src/ui/components/FolderTrustDialog.test.js.map +1 -1
- package/dist/src/ui/components/Footer.d.ts +1 -1
- package/dist/src/ui/components/GeminiRespondingSpinner.d.ts +1 -1
- package/dist/src/ui/components/GeminiRespondingSpinner.js +5 -3
- package/dist/src/ui/components/GeminiRespondingSpinner.js.map +1 -1
- package/dist/src/ui/components/Header.d.ts +1 -1
- package/dist/src/ui/components/Help.d.ts +2 -2
- package/dist/src/ui/components/Help.js +1 -1
- package/dist/src/ui/components/Help.js.map +1 -1
- package/dist/src/ui/components/HistoryItemDisplay.d.ts +4 -4
- package/dist/src/ui/components/HistoryItemDisplay.test.js +2 -0
- package/dist/src/ui/components/HistoryItemDisplay.test.js.map +1 -1
- package/dist/src/ui/components/InputPrompt.d.ts +5 -5
- package/dist/src/ui/components/InputPrompt.js +142 -20
- package/dist/src/ui/components/InputPrompt.js.map +1 -1
- package/dist/src/ui/components/LoadingIndicator.d.ts +2 -2
- package/dist/src/ui/components/MemoryUsageDisplay.d.ts +1 -1
- package/dist/src/ui/components/MemoryUsageDisplay.js +0 -5
- package/dist/src/ui/components/MemoryUsageDisplay.js.map +1 -1
- package/dist/src/ui/components/ModelStatsDisplay.d.ts +1 -1
- package/dist/src/ui/components/ModelStatsDisplay.js.map +1 -1
- package/dist/src/ui/components/PrepareLabel.d.ts +1 -1
- package/dist/src/ui/components/ProQuotaDialog.d.ts +13 -0
- package/dist/src/ui/components/ProQuotaDialog.js +21 -0
- package/dist/src/ui/components/ProQuotaDialog.js.map +1 -0
- package/dist/src/ui/components/ProQuotaDialog.test.d.ts +6 -0
- package/dist/src/ui/components/ProQuotaDialog.test.js +56 -0
- package/dist/src/ui/components/ProQuotaDialog.test.js.map +1 -0
- package/dist/src/ui/components/SessionSummaryDisplay.d.ts +1 -1
- package/dist/src/ui/components/SettingsDialog.d.ts +2 -1
- package/dist/src/ui/components/SettingsDialog.js +67 -36
- package/dist/src/ui/components/SettingsDialog.js.map +1 -1
- package/dist/src/ui/components/SettingsDialog.test.js +134 -56
- package/dist/src/ui/components/SettingsDialog.test.js.map +1 -1
- package/dist/src/ui/components/ShellConfirmationDialog.d.ts +1 -1
- package/dist/src/ui/components/ShellConfirmationDialog.js +1 -1
- package/dist/src/ui/components/ShellConfirmationDialog.js.map +1 -1
- package/dist/src/ui/components/ShellModeIndicator.d.ts +1 -1
- package/dist/src/ui/components/StatsDisplay.d.ts +1 -1
- package/dist/src/ui/components/StatsDisplay.js +3 -3
- package/dist/src/ui/components/StatsDisplay.js.map +1 -1
- package/dist/src/ui/components/SuggestionsDisplay.js +12 -4
- package/dist/src/ui/components/SuggestionsDisplay.js.map +1 -1
- package/dist/src/ui/components/ThemeDialog.d.ts +3 -2
- package/dist/src/ui/components/ThemeDialog.js +5 -10
- package/dist/src/ui/components/ThemeDialog.js.map +1 -1
- package/dist/src/ui/components/Tips.d.ts +1 -1
- package/dist/src/ui/components/Tips.js +1 -0
- package/dist/src/ui/components/Tips.js.map +1 -1
- package/dist/src/ui/components/ToolStatsDisplay.d.ts +1 -1
- package/dist/src/ui/components/WorkspaceMigrationDialog.d.ts +11 -0
- package/dist/src/ui/components/WorkspaceMigrationDialog.js +42 -0
- package/dist/src/ui/components/WorkspaceMigrationDialog.js.map +1 -0
- package/dist/src/ui/components/messages/CompressionMessage.d.ts +2 -2
- package/dist/src/ui/components/messages/CompressionMessage.js +2 -1
- package/dist/src/ui/components/messages/CompressionMessage.js.map +1 -1
- package/dist/src/ui/components/messages/DiffRenderer.d.ts +1 -1
- package/dist/src/ui/components/messages/DiffRenderer.js +6 -2
- package/dist/src/ui/components/messages/DiffRenderer.js.map +1 -1
- package/dist/src/ui/components/messages/ErrorMessage.d.ts +1 -1
- package/dist/src/ui/components/messages/GeminiMessage.d.ts +1 -1
- package/dist/src/ui/components/messages/GeminiMessage.js +2 -1
- package/dist/src/ui/components/messages/GeminiMessage.js.map +1 -1
- package/dist/src/ui/components/messages/GeminiMessageContent.d.ts +1 -1
- package/dist/src/ui/components/messages/InfoMessage.d.ts +1 -1
- package/dist/src/ui/components/messages/ToolConfirmationMessage.d.ts +3 -3
- package/dist/src/ui/components/messages/ToolConfirmationMessage.js +41 -24
- package/dist/src/ui/components/messages/ToolConfirmationMessage.js.map +1 -1
- package/dist/src/ui/components/messages/ToolConfirmationMessage.test.js +79 -2
- package/dist/src/ui/components/messages/ToolConfirmationMessage.test.js.map +1 -1
- package/dist/src/ui/components/messages/ToolGroupMessage.d.ts +4 -4
- package/dist/src/ui/components/messages/ToolGroupMessage.js +1 -6
- package/dist/src/ui/components/messages/ToolGroupMessage.js.map +1 -1
- package/dist/src/ui/components/messages/ToolGroupMessage.test.d.ts +6 -0
- package/dist/src/ui/components/messages/ToolGroupMessage.test.js +259 -0
- package/dist/src/ui/components/messages/ToolGroupMessage.test.js.map +1 -0
- package/dist/src/ui/components/messages/ToolMessage.d.ts +1 -1
- package/dist/src/ui/components/messages/ToolMessage.js +2 -1
- package/dist/src/ui/components/messages/ToolMessage.js.map +1 -1
- package/dist/src/ui/components/messages/ToolMessage.test.js +6 -6
- package/dist/src/ui/components/messages/ToolMessage.test.js.map +1 -1
- package/dist/src/ui/components/messages/UserMessage.d.ts +1 -1
- package/dist/src/ui/components/messages/UserMessage.js +4 -2
- package/dist/src/ui/components/messages/UserMessage.js.map +1 -1
- package/dist/src/ui/components/messages/UserShellMessage.d.ts +1 -1
- package/dist/src/ui/components/shared/MaxSizedBox.js.map +1 -1
- package/dist/src/ui/components/shared/RadioButtonSelect.d.ts +1 -1
- package/dist/src/ui/components/shared/RadioButtonSelect.js +1 -6
- package/dist/src/ui/components/shared/RadioButtonSelect.js.map +1 -1
- package/dist/src/ui/components/shared/text-buffer.js +5 -49
- package/dist/src/ui/components/shared/text-buffer.js.map +1 -1
- package/dist/src/ui/components/shared/vim-buffer-actions.d.ts +1 -1
- package/dist/src/ui/components/shared/vim-buffer-actions.js.map +1 -1
- package/dist/src/ui/constants.d.ts +8 -0
- package/dist/src/ui/constants.js +9 -0
- package/dist/src/ui/constants.js.map +1 -1
- package/dist/src/ui/contexts/KeypressContext.d.ts +4 -3
- package/dist/src/ui/contexts/KeypressContext.js +34 -25
- package/dist/src/ui/contexts/KeypressContext.js.map +1 -1
- package/dist/src/ui/contexts/KeypressContext.test.js +176 -10
- package/dist/src/ui/contexts/KeypressContext.test.js.map +1 -1
- package/dist/src/ui/contexts/OverflowContext.d.ts +1 -1
- package/dist/src/ui/contexts/OverflowContext.js +0 -5
- package/dist/src/ui/contexts/OverflowContext.js.map +1 -1
- package/dist/src/ui/contexts/SessionContext.d.ts +2 -2
- package/dist/src/ui/contexts/SessionContext.js +1 -6
- package/dist/src/ui/contexts/SessionContext.js.map +1 -1
- package/dist/src/ui/contexts/SettingsContext.d.ts +1 -1
- package/dist/src/ui/contexts/StreamingContext.d.ts +1 -1
- package/dist/src/ui/contexts/VimModeContext.d.ts +1 -1
- package/dist/src/ui/contexts/VimModeContext.js +4 -4
- package/dist/src/ui/contexts/VimModeContext.js.map +1 -1
- package/dist/src/ui/hooks/atCommandProcessor.d.ts +3 -3
- package/dist/src/ui/hooks/atCommandProcessor.js +4 -7
- package/dist/src/ui/hooks/atCommandProcessor.js.map +1 -1
- package/dist/src/ui/hooks/atCommandProcessor.test.js +33 -10
- package/dist/src/ui/hooks/atCommandProcessor.test.js.map +1 -1
- package/dist/src/ui/hooks/shellCommandProcessor.d.ts +3 -3
- package/dist/src/ui/hooks/shellCommandProcessor.js +15 -19
- package/dist/src/ui/hooks/shellCommandProcessor.js.map +1 -1
- package/dist/src/ui/hooks/shellCommandProcessor.test.js +16 -19
- package/dist/src/ui/hooks/shellCommandProcessor.test.js.map +1 -1
- package/dist/src/ui/hooks/slashCommandProcessor.d.ts +5 -4
- package/dist/src/ui/hooks/slashCommandProcessor.js +8 -6
- package/dist/src/ui/hooks/slashCommandProcessor.js.map +1 -1
- package/dist/src/ui/hooks/useAtCompletion.d.ts +2 -2
- package/dist/src/ui/hooks/useAtCompletion.js +3 -2
- package/dist/src/ui/hooks/useAtCompletion.js.map +1 -1
- package/dist/src/ui/hooks/useAuthCommand.d.ts +2 -2
- package/dist/src/ui/hooks/useAuthCommand.js +5 -4
- package/dist/src/ui/hooks/useAuthCommand.js.map +1 -1
- package/dist/src/ui/hooks/useAutoAcceptIndicator.d.ts +3 -1
- package/dist/src/ui/hooks/useAutoAcceptIndicator.js +13 -4
- package/dist/src/ui/hooks/useAutoAcceptIndicator.js.map +1 -1
- package/dist/src/ui/hooks/useAutoAcceptIndicator.test.js +122 -2
- package/dist/src/ui/hooks/useAutoAcceptIndicator.test.js.map +1 -1
- package/dist/src/ui/hooks/useCommandCompletion.d.ts +8 -5
- package/dist/src/ui/hooks/useCommandCompletion.js +30 -9
- package/dist/src/ui/hooks/useCommandCompletion.js.map +1 -1
- package/dist/src/ui/hooks/useCompletion.d.ts +1 -1
- package/dist/src/ui/hooks/useCompletion.js +1 -1
- package/dist/src/ui/hooks/useCompletion.js.map +1 -1
- package/dist/src/ui/hooks/useConsoleMessages.d.ts +1 -1
- package/dist/src/ui/hooks/useEditorSettings.d.ts +2 -2
- package/dist/src/ui/hooks/useEditorSettings.js.map +1 -1
- package/dist/src/ui/hooks/useEditorSettings.test.js.map +1 -1
- package/dist/src/ui/hooks/useFolderTrust.d.ts +2 -1
- package/dist/src/ui/hooks/useFolderTrust.js +25 -12
- package/dist/src/ui/hooks/useFolderTrust.js.map +1 -1
- package/dist/src/ui/hooks/useGeminiStream.d.ts +6 -5
- package/dist/src/ui/hooks/useGeminiStream.js +66 -45
- package/dist/src/ui/hooks/useGeminiStream.js.map +1 -1
- package/dist/src/ui/hooks/useGitBranchName.js +1 -1
- package/dist/src/ui/hooks/useGitBranchName.js.map +1 -1
- package/dist/src/ui/hooks/useGitBranchName.test.js +1 -1
- package/dist/src/ui/hooks/useGitBranchName.test.js.map +1 -1
- package/dist/src/ui/hooks/useHistoryManager.d.ts +1 -1
- package/dist/src/ui/hooks/useInputHistoryStore.d.ts +19 -0
- package/dist/src/ui/hooks/useInputHistoryStore.js +81 -0
- package/dist/src/ui/hooks/useInputHistoryStore.js.map +1 -0
- package/dist/src/ui/hooks/useInputHistoryStore.test.d.ts +6 -0
- package/dist/src/ui/hooks/useInputHistoryStore.test.js +234 -0
- package/dist/src/ui/hooks/useInputHistoryStore.test.js.map +1 -0
- package/dist/src/ui/hooks/useKeypress.d.ts +2 -2
- package/dist/src/ui/hooks/useKeypress.js +1 -1
- package/dist/src/ui/hooks/useKeypress.js.map +1 -1
- package/dist/src/ui/hooks/useLogger.d.ts +2 -1
- package/dist/src/ui/hooks/useLogger.js +3 -3
- package/dist/src/ui/hooks/useLogger.js.map +1 -1
- package/dist/src/ui/hooks/usePrivacySettings.d.ts +1 -1
- package/dist/src/ui/hooks/usePrivacySettings.js.map +1 -1
- package/dist/src/ui/hooks/usePrivacySettings.test.js.map +1 -1
- package/dist/src/ui/hooks/usePromptCompletion.d.ts +23 -0
- package/dist/src/ui/hooks/usePromptCompletion.js +177 -0
- package/dist/src/ui/hooks/usePromptCompletion.js.map +1 -0
- package/dist/src/ui/hooks/useReactToolScheduler.d.ts +2 -2
- package/dist/src/ui/hooks/useReactToolScheduler.js +2 -3
- package/dist/src/ui/hooks/useReactToolScheduler.js.map +1 -1
- package/dist/src/ui/hooks/useReverseSearchCompletion.d.ts +2 -2
- package/dist/src/ui/hooks/useShellHistory.d.ts +2 -1
- package/dist/src/ui/hooks/useShellHistory.js +9 -10
- package/dist/src/ui/hooks/useShellHistory.js.map +1 -1
- package/dist/src/ui/hooks/useShellHistory.test.js +30 -4
- package/dist/src/ui/hooks/useShellHistory.test.js.map +1 -1
- package/dist/src/ui/hooks/useShowMemoryCommand.d.ts +3 -3
- package/dist/src/ui/hooks/useShowMemoryCommand.js +1 -1
- package/dist/src/ui/hooks/useShowMemoryCommand.js.map +1 -1
- package/dist/src/ui/hooks/useSlashCompletion.d.ts +2 -2
- package/dist/src/ui/hooks/useSlashCompletion.js +263 -67
- package/dist/src/ui/hooks/useSlashCompletion.js.map +1 -1
- package/dist/src/ui/hooks/useSlashCompletion.test.d.ts +4 -1
- package/dist/src/ui/hooks/useSlashCompletion.test.js +452 -59
- package/dist/src/ui/hooks/useSlashCompletion.test.js.map +1 -1
- package/dist/src/ui/hooks/useThemeCommand.d.ts +1 -1
- package/dist/src/ui/hooks/useThemeCommand.js +8 -8
- package/dist/src/ui/hooks/useThemeCommand.js.map +1 -1
- package/dist/src/ui/hooks/useToolScheduler.test.js +96 -96
- package/dist/src/ui/hooks/useToolScheduler.test.js.map +1 -1
- package/dist/src/ui/hooks/useWorkspaceMigration.d.ts +13 -0
- package/dist/src/ui/hooks/useWorkspaceMigration.js +53 -0
- package/dist/src/ui/hooks/useWorkspaceMigration.js.map +1 -0
- package/dist/src/ui/keyMatchers.d.ts +2 -1
- package/dist/src/ui/keyMatchers.js +1 -1
- package/dist/src/ui/keyMatchers.js.map +1 -1
- package/dist/src/ui/keyMatchers.test.js.map +1 -1
- package/dist/src/ui/privacy/CloudFreePrivacyNotice.d.ts +1 -1
- package/dist/src/ui/semantic-colors.d.ts +1 -1
- package/dist/src/ui/textConstants.d.ts +9 -0
- package/dist/src/ui/textConstants.js +10 -0
- package/dist/src/ui/textConstants.js.map +1 -0
- package/dist/src/ui/themes/atom-one-dark.js +1 -2
- package/dist/src/ui/themes/atom-one-dark.js.map +1 -1
- package/dist/src/ui/themes/ayu-light.js +1 -2
- package/dist/src/ui/themes/ayu-light.js.map +1 -1
- package/dist/src/ui/themes/ayu.js +1 -2
- package/dist/src/ui/themes/ayu.js.map +1 -1
- package/dist/src/ui/themes/default-light.js +1 -2
- package/dist/src/ui/themes/default-light.js.map +1 -1
- package/dist/src/ui/themes/default.js +1 -2
- package/dist/src/ui/themes/default.js.map +1 -1
- package/dist/src/ui/themes/dracula.js +1 -2
- package/dist/src/ui/themes/dracula.js.map +1 -1
- package/dist/src/ui/themes/github-dark.js +1 -2
- package/dist/src/ui/themes/github-dark.js.map +1 -1
- package/dist/src/ui/themes/github-light.js +1 -2
- package/dist/src/ui/themes/github-light.js.map +1 -1
- package/dist/src/ui/themes/googlecode.js +2 -3
- package/dist/src/ui/themes/googlecode.js.map +1 -1
- package/dist/src/ui/themes/no-color.js.map +1 -1
- package/dist/src/ui/themes/shades-of-purple.js +1 -2
- package/dist/src/ui/themes/shades-of-purple.js.map +1 -1
- package/dist/src/ui/themes/theme-manager.d.ts +4 -2
- package/dist/src/ui/themes/theme-manager.js +73 -6
- package/dist/src/ui/themes/theme-manager.js.map +1 -1
- package/dist/src/ui/themes/theme-manager.test.js +60 -1
- package/dist/src/ui/themes/theme-manager.test.js.map +1 -1
- package/dist/src/ui/themes/theme.d.ts +3 -3
- package/dist/src/ui/themes/theme.js +30 -2
- package/dist/src/ui/themes/theme.js.map +1 -1
- package/dist/src/ui/themes/xcode.js +1 -2
- package/dist/src/ui/themes/xcode.js.map +1 -1
- package/dist/src/ui/types.d.ts +4 -2
- package/dist/src/ui/types.js.map +1 -1
- package/dist/src/ui/utils/CodeColorizer.d.ts +2 -2
- package/dist/src/ui/utils/CodeColorizer.js +1 -1
- package/dist/src/ui/utils/CodeColorizer.js.map +1 -1
- package/dist/src/ui/utils/ConsolePatcher.d.ts +1 -1
- package/dist/src/ui/utils/ConsolePatcher.js +1 -1
- package/dist/src/ui/utils/ConsolePatcher.js.map +1 -1
- package/dist/src/ui/utils/MarkdownDisplay.js +2 -1
- package/dist/src/ui/utils/MarkdownDisplay.js.map +1 -1
- package/dist/src/ui/utils/MarkdownDisplay.test.js +17 -16
- package/dist/src/ui/utils/MarkdownDisplay.test.js.map +1 -1
- package/dist/src/ui/utils/clipboardUtils.js +6 -6
- package/dist/src/ui/utils/clipboardUtils.js.map +1 -1
- package/dist/src/ui/utils/commandUtils.d.ts +1 -1
- package/dist/src/ui/utils/commandUtils.js +52 -14
- package/dist/src/ui/utils/commandUtils.js.map +1 -1
- package/dist/src/ui/utils/commandUtils.test.js +76 -21
- package/dist/src/ui/utils/commandUtils.test.js.map +1 -1
- package/dist/src/ui/utils/computeStats.d.ts +1 -1
- package/dist/src/ui/utils/platformConstants.d.ts +9 -0
- package/dist/src/ui/utils/platformConstants.js +9 -0
- package/dist/src/ui/utils/platformConstants.js.map +1 -1
- package/dist/src/ui/utils/terminalSetup.js +5 -5
- package/dist/src/ui/utils/terminalSetup.js.map +1 -1
- package/dist/src/ui/utils/textUtils.d.ts +18 -0
- package/dist/src/ui/utils/textUtils.js +44 -0
- package/dist/src/ui/utils/textUtils.js.map +1 -1
- package/dist/src/ui/utils/updateCheck.d.ts +1 -1
- package/dist/src/ui/utils/updateCheck.js.map +1 -1
- package/dist/src/utils/cleanup.js +5 -4
- package/dist/src/utils/cleanup.js.map +1 -1
- package/dist/src/utils/dialogScopeUtils.d.ts +2 -1
- package/dist/src/utils/dialogScopeUtils.js.map +1 -1
- package/dist/src/utils/envVarResolver.d.ts +39 -0
- package/dist/src/utils/envVarResolver.js +97 -0
- package/dist/src/utils/envVarResolver.js.map +1 -0
- package/dist/src/utils/envVarResolver.test.d.ts +6 -0
- package/dist/src/utils/envVarResolver.test.js +221 -0
- package/dist/src/utils/envVarResolver.test.js.map +1 -0
- package/dist/src/utils/errors.d.ts +6 -0
- package/dist/src/utils/errors.js +12 -0
- package/dist/src/utils/errors.js.map +1 -0
- package/dist/src/utils/events.d.ts +1 -1
- package/dist/src/utils/events.js +1 -1
- package/dist/src/utils/events.js.map +1 -1
- package/dist/src/utils/gitUtils.js +1 -1
- package/dist/src/utils/gitUtils.js.map +1 -1
- package/dist/src/utils/gitUtils.test.js +4 -4
- package/dist/src/utils/gitUtils.test.js.map +1 -1
- package/dist/src/utils/handleAutoUpdate.d.ts +4 -4
- package/dist/src/utils/handleAutoUpdate.js +4 -3
- package/dist/src/utils/handleAutoUpdate.js.map +1 -1
- package/dist/src/utils/installationInfo.js +3 -3
- package/dist/src/utils/installationInfo.js.map +1 -1
- package/dist/src/utils/installationInfo.test.js +3 -3
- package/dist/src/utils/installationInfo.test.js.map +1 -1
- package/dist/src/utils/package.js +2 -2
- package/dist/src/utils/package.js.map +1 -1
- package/dist/src/utils/readStdin.js +15 -0
- package/dist/src/utils/readStdin.js.map +1 -1
- package/dist/src/utils/readStdin.test.d.ts +6 -0
- package/dist/src/utils/readStdin.test.js +88 -0
- package/dist/src/utils/readStdin.test.js.map +1 -0
- package/dist/src/utils/resolvePath.js +2 -2
- package/dist/src/utils/resolvePath.js.map +1 -1
- package/dist/src/utils/sandbox-macos-permissive-closed.sb +1 -1
- package/dist/src/utils/sandbox-macos-permissive-open.sb +2 -2
- package/dist/src/utils/sandbox-macos-permissive-proxied.sb +1 -1
- package/dist/src/utils/sandbox-macos-restrictive-closed.sb +2 -2
- package/dist/src/utils/sandbox-macos-restrictive-open.sb +2 -2
- package/dist/src/utils/sandbox-macos-restrictive-proxied.sb +1 -1
- package/dist/src/utils/sandbox.d.ts +2 -2
- package/dist/src/utils/sandbox.js +20 -27
- package/dist/src/utils/sandbox.js.map +1 -1
- package/dist/src/utils/settingsUtils.d.ts +2 -2
- package/dist/src/utils/settingsUtils.js +2 -8
- package/dist/src/utils/settingsUtils.js.map +1 -1
- package/dist/src/utils/settingsUtils.test.js +145 -148
- package/dist/src/utils/settingsUtils.test.js.map +1 -1
- package/dist/src/utils/spawnWrapper.d.ts +1 -1
- package/dist/src/utils/spawnWrapper.js +1 -1
- package/dist/src/utils/spawnWrapper.js.map +1 -1
- package/dist/src/utils/startupWarnings.js +2 -2
- package/dist/src/utils/startupWarnings.js.map +1 -1
- package/dist/src/utils/updateEventEmitter.d.ts +1 -1
- package/dist/src/utils/updateEventEmitter.js +1 -1
- package/dist/src/utils/updateEventEmitter.js.map +1 -1
- package/dist/src/utils/userStartupWarnings.js +3 -3
- package/dist/src/utils/userStartupWarnings.js.map +1 -1
- package/dist/src/utils/userStartupWarnings.test.js +3 -3
- package/dist/src/utils/userStartupWarnings.test.js.map +1 -1
- package/dist/src/validateNonInterActiveAuth.d.ts +2 -1
- package/dist/src/validateNonInterActiveAuth.js.map +1 -1
- package/dist/src/zed-integration/acp.d.ts +1 -1
- package/dist/src/zed-integration/acp.js +2 -1
- package/dist/src/zed-integration/acp.js.map +1 -1
- package/dist/src/zed-integration/fileSystemService.d.ts +2 -2
- package/dist/src/zed-integration/schema.d.ts +116 -13
- package/dist/src/zed-integration/schema.js +7 -1
- package/dist/src/zed-integration/schema.js.map +1 -1
- package/dist/src/zed-integration/zedIntegration.d.ts +4 -4
- package/dist/src/zed-integration/zedIntegration.js +190 -154
- package/dist/src/zed-integration/zedIntegration.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +10 -10
|
@@ -3,90 +3,349 @@
|
|
|
3
3
|
* Copyright 2025 Google LLC
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
|
-
import * as fs from 'fs';
|
|
7
|
-
import * as path from 'path';
|
|
8
|
-
import { homedir, platform } from 'os';
|
|
6
|
+
import * as fs from 'node:fs';
|
|
7
|
+
import * as path from 'node:path';
|
|
8
|
+
import { homedir, platform } from 'node:os';
|
|
9
9
|
import * as dotenv from 'dotenv';
|
|
10
|
-
import
|
|
10
|
+
import process from 'node:process';
|
|
11
|
+
import { CELL_CONFIG_DIR as CELL_DIR, getErrorMessage, Storage, } from '@machina.ai/cell-cli-core';
|
|
12
|
+
/*
|
|
11
13
|
import { loadYamlConfig } from '@machina.ai/config-yaml';
|
|
14
|
+
*/
|
|
12
15
|
import stripJsonComments from 'strip-json-comments';
|
|
13
16
|
import { DefaultLight } from '../ui/themes/default-light.js';
|
|
14
17
|
import { DefaultDark } from '../ui/themes/default.js';
|
|
18
|
+
import { isWorkspaceTrusted } from './trustedFolders.js';
|
|
19
|
+
import { resolveEnvVarsInObject } from '../utils/envVarResolver.js';
|
|
20
|
+
import { mergeWith } from 'lodash-es';
|
|
15
21
|
export const SETTINGS_DIRECTORY_NAME = '.cell-cli';
|
|
16
|
-
export const
|
|
17
|
-
export const
|
|
22
|
+
export const USER_SETTINGS_PATH = Storage.getGlobalSettingsPath();
|
|
23
|
+
export const USER_SETTINGS_DIR = path.dirname(USER_SETTINGS_PATH);
|
|
18
24
|
export const DEFAULT_EXCLUDED_ENV_VARS = ['DEBUG', 'DEBUG_MODE'];
|
|
25
|
+
const MIGRATE_V2_OVERWRITE = false;
|
|
26
|
+
// As defined in spec.md
|
|
27
|
+
const MIGRATION_MAP = {
|
|
28
|
+
preferredEditor: 'general.preferredEditor',
|
|
29
|
+
vimMode: 'general.vimMode',
|
|
30
|
+
disableAutoUpdate: 'general.disableAutoUpdate',
|
|
31
|
+
disableUpdateNag: 'general.disableUpdateNag',
|
|
32
|
+
checkpointing: 'general.checkpointing',
|
|
33
|
+
theme: 'ui.theme',
|
|
34
|
+
customThemes: 'ui.customThemes',
|
|
35
|
+
hideWindowTitle: 'ui.hideWindowTitle',
|
|
36
|
+
hideTips: 'ui.hideTips',
|
|
37
|
+
hideBanner: 'ui.hideBanner',
|
|
38
|
+
hideFooter: 'ui.hideFooter',
|
|
39
|
+
showMemoryUsage: 'ui.showMemoryUsage',
|
|
40
|
+
showLineNumbers: 'ui.showLineNumbers',
|
|
41
|
+
showCitations: 'ui.showCitations',
|
|
42
|
+
accessibility: 'ui.accessibility',
|
|
43
|
+
ideMode: 'ide.enabled',
|
|
44
|
+
hasSeenIdeIntegrationNudge: 'ide.hasSeenNudge',
|
|
45
|
+
usageStatisticsEnabled: 'privacy.usageStatisticsEnabled',
|
|
46
|
+
telemetry: 'telemetry',
|
|
47
|
+
model: 'model.name',
|
|
48
|
+
maxSessionTurns: 'model.maxSessionTurns',
|
|
49
|
+
summarizeToolOutput: 'model.summarizeToolOutput',
|
|
50
|
+
chatCompression: 'model.chatCompression',
|
|
51
|
+
skipNextSpeakerCheck: 'model.skipNextSpeakerCheck',
|
|
52
|
+
contextFileName: 'context.fileName',
|
|
53
|
+
memoryImportFormat: 'context.importFormat',
|
|
54
|
+
memoryDiscoveryMaxDirs: 'context.discoveryMaxDirs',
|
|
55
|
+
includeDirectories: 'context.includeDirectories',
|
|
56
|
+
loadMemoryFromIncludeDirectories: 'context.loadFromIncludeDirectories',
|
|
57
|
+
fileFiltering: 'context.fileFiltering',
|
|
58
|
+
sandbox: 'tools.sandbox',
|
|
59
|
+
shouldUseNodePtyShell: 'tools.usePty',
|
|
60
|
+
allowedTools: 'tools.allowed',
|
|
61
|
+
coreTools: 'tools.core',
|
|
62
|
+
excludeTools: 'tools.exclude',
|
|
63
|
+
toolDiscoveryCommand: 'tools.discoveryCommand',
|
|
64
|
+
toolCallCommand: 'tools.callCommand',
|
|
65
|
+
mcpServerCommand: 'mcp.serverCommand',
|
|
66
|
+
allowMCPServers: 'mcp.allowed',
|
|
67
|
+
excludeMCPServers: 'mcp.excluded',
|
|
68
|
+
folderTrustFeature: 'security.folderTrust.featureEnabled',
|
|
69
|
+
folderTrust: 'security.folderTrust.enabled',
|
|
70
|
+
selectedAuthType: 'security.auth.selectedType',
|
|
71
|
+
useExternalAuth: 'security.auth.useExternal',
|
|
72
|
+
autoConfigureMaxOldSpaceSize: 'advanced.autoConfigureMemory',
|
|
73
|
+
dnsResolutionOrder: 'advanced.dnsResolutionOrder',
|
|
74
|
+
excludedProjectEnvVars: 'advanced.excludedEnvVars',
|
|
75
|
+
bugCommand: 'advanced.bugCommand',
|
|
76
|
+
};
|
|
19
77
|
export function getSystemSettingsPath() {
|
|
20
|
-
if (process.env['
|
|
21
|
-
return process.env['
|
|
78
|
+
if (process.env['CELL_CLI_SYSTEM_SETTINGS_PATH']) {
|
|
79
|
+
return process.env['CELL_CLI_SYSTEM_SETTINGS_PATH'];
|
|
22
80
|
}
|
|
23
81
|
if (platform() === 'darwin') {
|
|
24
|
-
return '/Library/Application Support/
|
|
82
|
+
return '/Library/Application Support/CellCli/settings.json';
|
|
25
83
|
}
|
|
26
84
|
else if (platform() === 'win32') {
|
|
27
|
-
return 'C:\\ProgramData\\
|
|
85
|
+
return 'C:\\ProgramData\\cell-cli\\settings.json';
|
|
28
86
|
}
|
|
29
87
|
else {
|
|
30
|
-
return '/etc/
|
|
88
|
+
return '/etc/cell-cli/settings.json';
|
|
31
89
|
}
|
|
32
90
|
}
|
|
33
|
-
export function
|
|
34
|
-
|
|
91
|
+
export function getSystemDefaultsPath() {
|
|
92
|
+
if (process.env['CELL_CLI_SYSTEM_DEFAULTS_PATH']) {
|
|
93
|
+
return process.env['CELL_CLI_SYSTEM_DEFAULTS_PATH'];
|
|
94
|
+
}
|
|
95
|
+
return path.join(path.dirname(getSystemSettingsPath()), 'system-defaults.json');
|
|
35
96
|
}
|
|
36
97
|
export var SettingScope;
|
|
37
98
|
(function (SettingScope) {
|
|
38
99
|
SettingScope["User"] = "User";
|
|
39
100
|
SettingScope["Workspace"] = "Workspace";
|
|
40
101
|
SettingScope["System"] = "System";
|
|
102
|
+
SettingScope["SystemDefaults"] = "SystemDefaults";
|
|
41
103
|
})(SettingScope || (SettingScope = {}));
|
|
42
|
-
function
|
|
104
|
+
function setNestedProperty(obj, path, value) {
|
|
105
|
+
const keys = path.split('.');
|
|
106
|
+
const lastKey = keys.pop();
|
|
107
|
+
if (!lastKey)
|
|
108
|
+
return;
|
|
109
|
+
let current = obj;
|
|
110
|
+
for (const key of keys) {
|
|
111
|
+
if (current[key] === undefined) {
|
|
112
|
+
current[key] = {};
|
|
113
|
+
}
|
|
114
|
+
const next = current[key];
|
|
115
|
+
if (typeof next === 'object' && next !== null) {
|
|
116
|
+
current = next;
|
|
117
|
+
}
|
|
118
|
+
else {
|
|
119
|
+
// This path is invalid, so we stop.
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
current[lastKey] = value;
|
|
124
|
+
}
|
|
125
|
+
function needsMigration(settings) {
|
|
126
|
+
return !('general' in settings);
|
|
127
|
+
}
|
|
128
|
+
function migrateSettingsToV2(flatSettings) {
|
|
129
|
+
if (!needsMigration(flatSettings)) {
|
|
130
|
+
return null;
|
|
131
|
+
}
|
|
132
|
+
const v2Settings = {};
|
|
133
|
+
const flatKeys = new Set(Object.keys(flatSettings));
|
|
134
|
+
for (const [oldKey, newPath] of Object.entries(MIGRATION_MAP)) {
|
|
135
|
+
if (flatKeys.has(oldKey)) {
|
|
136
|
+
setNestedProperty(v2Settings, newPath, flatSettings[oldKey]);
|
|
137
|
+
flatKeys.delete(oldKey);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
// Preserve mcpServers at the top level
|
|
141
|
+
if (flatSettings['mcpServers']) {
|
|
142
|
+
v2Settings['mcpServers'] = flatSettings['mcpServers'];
|
|
143
|
+
flatKeys.delete('mcpServers');
|
|
144
|
+
}
|
|
145
|
+
// Carry over any unrecognized keys
|
|
146
|
+
for (const remainingKey of flatKeys) {
|
|
147
|
+
v2Settings[remainingKey] = flatSettings[remainingKey];
|
|
148
|
+
}
|
|
149
|
+
return v2Settings;
|
|
150
|
+
}
|
|
151
|
+
function getNestedProperty(obj, path) {
|
|
152
|
+
const keys = path.split('.');
|
|
153
|
+
let current = obj;
|
|
154
|
+
for (const key of keys) {
|
|
155
|
+
if (typeof current !== 'object' || current === null || !(key in current)) {
|
|
156
|
+
return undefined;
|
|
157
|
+
}
|
|
158
|
+
current = current[key];
|
|
159
|
+
}
|
|
160
|
+
return current;
|
|
161
|
+
}
|
|
162
|
+
const REVERSE_MIGRATION_MAP = Object.fromEntries(Object.entries(MIGRATION_MAP).map(([key, value]) => [value, key]));
|
|
163
|
+
// Dynamically determine the top-level keys from the V2 settings structure.
|
|
164
|
+
const KNOWN_V2_CONTAINERS = new Set(Object.values(MIGRATION_MAP).map((path) => path.split('.')[0]));
|
|
165
|
+
export function migrateSettingsToV1(v2Settings) {
|
|
166
|
+
const v1Settings = {};
|
|
167
|
+
const v2Keys = new Set(Object.keys(v2Settings));
|
|
168
|
+
for (const [newPath, oldKey] of Object.entries(REVERSE_MIGRATION_MAP)) {
|
|
169
|
+
const value = getNestedProperty(v2Settings, newPath);
|
|
170
|
+
if (value !== undefined) {
|
|
171
|
+
v1Settings[oldKey] = value;
|
|
172
|
+
v2Keys.delete(newPath.split('.')[0]);
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
// Preserve mcpServers at the top level
|
|
176
|
+
if (v2Settings['mcpServers']) {
|
|
177
|
+
v1Settings['mcpServers'] = v2Settings['mcpServers'];
|
|
178
|
+
v2Keys.delete('mcpServers');
|
|
179
|
+
}
|
|
180
|
+
// Carry over any unrecognized keys
|
|
181
|
+
for (const remainingKey of v2Keys) {
|
|
182
|
+
const value = v2Settings[remainingKey];
|
|
183
|
+
if (value === undefined) {
|
|
184
|
+
continue;
|
|
185
|
+
}
|
|
186
|
+
// Don't carry over empty objects that were just containers for migrated settings.
|
|
187
|
+
if (KNOWN_V2_CONTAINERS.has(remainingKey) &&
|
|
188
|
+
typeof value === 'object' &&
|
|
189
|
+
value !== null &&
|
|
190
|
+
!Array.isArray(value) &&
|
|
191
|
+
Object.keys(value).length === 0) {
|
|
192
|
+
continue;
|
|
193
|
+
}
|
|
194
|
+
v1Settings[remainingKey] = value;
|
|
195
|
+
}
|
|
196
|
+
return v1Settings;
|
|
197
|
+
}
|
|
198
|
+
function mergeSettings(system, systemDefaults, user, workspace, isTrusted) {
|
|
199
|
+
const safeWorkspace = isTrusted ? workspace : {};
|
|
43
200
|
// folderTrust is not supported at workspace level.
|
|
44
|
-
|
|
45
|
-
const
|
|
201
|
+
const { security, ...restOfWorkspace } = safeWorkspace;
|
|
202
|
+
const safeWorkspaceWithoutFolderTrust = security
|
|
203
|
+
? {
|
|
204
|
+
...restOfWorkspace,
|
|
205
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
206
|
+
security: (({ folderTrust, ...rest }) => rest)(security),
|
|
207
|
+
}
|
|
208
|
+
: {
|
|
209
|
+
...restOfWorkspace,
|
|
210
|
+
security: {},
|
|
211
|
+
};
|
|
212
|
+
// Settings are merged with the following precedence (last one wins for
|
|
213
|
+
// single values):
|
|
214
|
+
// 1. System Defaults
|
|
215
|
+
// 2. User Settings
|
|
216
|
+
// 3. Workspace Settings
|
|
217
|
+
// 4. System Settings (as overrides)
|
|
218
|
+
//
|
|
219
|
+
// For properties that are arrays (e.g., includeDirectories), the arrays
|
|
220
|
+
// are concatenated. For objects (e.g., customThemes), they are merged.
|
|
46
221
|
return {
|
|
222
|
+
...systemDefaults,
|
|
47
223
|
...user,
|
|
48
|
-
...
|
|
224
|
+
...safeWorkspaceWithoutFolderTrust,
|
|
49
225
|
...system,
|
|
50
|
-
|
|
51
|
-
...(
|
|
52
|
-
...(
|
|
53
|
-
...(
|
|
226
|
+
general: {
|
|
227
|
+
...(systemDefaults.general || {}),
|
|
228
|
+
...(user.general || {}),
|
|
229
|
+
...(safeWorkspaceWithoutFolderTrust.general || {}),
|
|
230
|
+
...(system.general || {}),
|
|
231
|
+
},
|
|
232
|
+
ui: {
|
|
233
|
+
...(systemDefaults.ui || {}),
|
|
234
|
+
...(user.ui || {}),
|
|
235
|
+
...(safeWorkspaceWithoutFolderTrust.ui || {}),
|
|
236
|
+
...(system.ui || {}),
|
|
237
|
+
customThemes: {
|
|
238
|
+
...(systemDefaults.ui?.customThemes || {}),
|
|
239
|
+
...(user.ui?.customThemes || {}),
|
|
240
|
+
...(safeWorkspaceWithoutFolderTrust.ui?.customThemes || {}),
|
|
241
|
+
...(system.ui?.customThemes || {}),
|
|
242
|
+
},
|
|
243
|
+
},
|
|
244
|
+
security: {
|
|
245
|
+
...(systemDefaults.security || {}),
|
|
246
|
+
...(user.security || {}),
|
|
247
|
+
...(safeWorkspaceWithoutFolderTrust.security || {}),
|
|
248
|
+
...(system.security || {}),
|
|
249
|
+
},
|
|
250
|
+
mcp: {
|
|
251
|
+
...(systemDefaults.mcp || {}),
|
|
252
|
+
...(user.mcp || {}),
|
|
253
|
+
...(safeWorkspaceWithoutFolderTrust.mcp || {}),
|
|
254
|
+
...(system.mcp || {}),
|
|
54
255
|
},
|
|
55
256
|
mcpServers: {
|
|
257
|
+
...(systemDefaults.mcpServers || {}),
|
|
56
258
|
...(user.mcpServers || {}),
|
|
57
|
-
...(
|
|
259
|
+
...(safeWorkspaceWithoutFolderTrust.mcpServers || {}),
|
|
58
260
|
...(system.mcpServers || {}),
|
|
59
261
|
},
|
|
60
|
-
|
|
61
|
-
...(
|
|
62
|
-
...(user.
|
|
63
|
-
...(
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
262
|
+
context: {
|
|
263
|
+
...(systemDefaults.context || {}),
|
|
264
|
+
...(user.context || {}),
|
|
265
|
+
...(safeWorkspaceWithoutFolderTrust.context || {}),
|
|
266
|
+
...(system.context || {}),
|
|
267
|
+
includeDirectories: [
|
|
268
|
+
...(systemDefaults.context?.includeDirectories || []),
|
|
269
|
+
...(user.context?.includeDirectories || []),
|
|
270
|
+
...(safeWorkspaceWithoutFolderTrust.context?.includeDirectories || []),
|
|
271
|
+
...(system.context?.includeDirectories || []),
|
|
272
|
+
],
|
|
273
|
+
},
|
|
274
|
+
model: {
|
|
275
|
+
...(systemDefaults.model || {}),
|
|
276
|
+
...(user.model || {}),
|
|
277
|
+
...(safeWorkspaceWithoutFolderTrust.model || {}),
|
|
278
|
+
...(system.model || {}),
|
|
279
|
+
chatCompression: {
|
|
280
|
+
...(systemDefaults.model?.chatCompression || {}),
|
|
281
|
+
...(user.model?.chatCompression || {}),
|
|
282
|
+
...(safeWorkspaceWithoutFolderTrust.model?.chatCompression || {}),
|
|
283
|
+
...(system.model?.chatCompression || {}),
|
|
284
|
+
},
|
|
285
|
+
},
|
|
286
|
+
advanced: {
|
|
287
|
+
...(systemDefaults.advanced || {}),
|
|
288
|
+
...(user.advanced || {}),
|
|
289
|
+
...(safeWorkspaceWithoutFolderTrust.advanced || {}),
|
|
290
|
+
...(system.advanced || {}),
|
|
291
|
+
excludedEnvVars: [
|
|
292
|
+
...new Set([
|
|
293
|
+
...(systemDefaults.advanced?.excludedEnvVars || []),
|
|
294
|
+
...(user.advanced?.excludedEnvVars || []),
|
|
295
|
+
...(safeWorkspaceWithoutFolderTrust.advanced?.excludedEnvVars || []),
|
|
296
|
+
...(system.advanced?.excludedEnvVars || []),
|
|
297
|
+
]),
|
|
298
|
+
],
|
|
299
|
+
},
|
|
300
|
+
extensions: {
|
|
301
|
+
...(systemDefaults.extensions || {}),
|
|
302
|
+
...(user.extensions || {}),
|
|
303
|
+
...(safeWorkspaceWithoutFolderTrust.extensions || {}),
|
|
304
|
+
...(system.extensions || {}),
|
|
305
|
+
disabled: [
|
|
306
|
+
...new Set([
|
|
307
|
+
...(systemDefaults.extensions?.disabled || []),
|
|
308
|
+
...(user.extensions?.disabled || []),
|
|
309
|
+
...(safeWorkspaceWithoutFolderTrust.extensions?.disabled || []),
|
|
310
|
+
...(system.extensions?.disabled || []),
|
|
311
|
+
]),
|
|
312
|
+
],
|
|
313
|
+
workspacesWithMigrationNudge: [
|
|
314
|
+
...new Set([
|
|
315
|
+
...(systemDefaults.extensions?.workspacesWithMigrationNudge || []),
|
|
316
|
+
...(user.extensions?.workspacesWithMigrationNudge || []),
|
|
317
|
+
...(safeWorkspaceWithoutFolderTrust.extensions
|
|
318
|
+
?.workspacesWithMigrationNudge || []),
|
|
319
|
+
...(system.extensions?.workspacesWithMigrationNudge || []),
|
|
320
|
+
]),
|
|
321
|
+
],
|
|
69
322
|
},
|
|
70
323
|
};
|
|
71
324
|
}
|
|
72
325
|
export class LoadedSettings {
|
|
73
|
-
constructor(system, user, workspace, errors) {
|
|
326
|
+
constructor(system, systemDefaults, user, workspace, errors, isTrusted, migratedInMemorScopes) {
|
|
74
327
|
this.system = system;
|
|
328
|
+
this.systemDefaults = systemDefaults;
|
|
75
329
|
this.user = user;
|
|
76
330
|
this.workspace = workspace;
|
|
77
331
|
this.errors = errors;
|
|
332
|
+
this.isTrusted = isTrusted;
|
|
333
|
+
this.migratedInMemorScopes = migratedInMemorScopes;
|
|
78
334
|
this._merged = this.computeMergedSettings();
|
|
79
335
|
}
|
|
80
336
|
system;
|
|
337
|
+
systemDefaults;
|
|
81
338
|
user;
|
|
82
339
|
workspace;
|
|
83
340
|
errors;
|
|
341
|
+
isTrusted;
|
|
342
|
+
migratedInMemorScopes;
|
|
84
343
|
_merged;
|
|
85
344
|
get merged() {
|
|
86
345
|
return this._merged;
|
|
87
346
|
}
|
|
88
347
|
computeMergedSettings() {
|
|
89
|
-
return mergeSettings(this.system.settings, this.user.settings, this.workspace.settings);
|
|
348
|
+
return mergeSettings(this.system.settings, this.systemDefaults.settings, this.user.settings, this.workspace.settings, this.isTrusted);
|
|
90
349
|
}
|
|
91
350
|
forScope(scope) {
|
|
92
351
|
switch (scope) {
|
|
@@ -96,56 +355,24 @@ export class LoadedSettings {
|
|
|
96
355
|
return this.workspace;
|
|
97
356
|
case SettingScope.System:
|
|
98
357
|
return this.system;
|
|
358
|
+
case SettingScope.SystemDefaults:
|
|
359
|
+
return this.systemDefaults;
|
|
99
360
|
default:
|
|
100
361
|
throw new Error(`Invalid scope: ${scope}`);
|
|
101
362
|
}
|
|
102
363
|
}
|
|
103
364
|
setValue(scope, key, value) {
|
|
104
365
|
const settingsFile = this.forScope(scope);
|
|
105
|
-
settingsFile.settings
|
|
366
|
+
setNestedProperty(settingsFile.settings, key, value);
|
|
106
367
|
this._merged = this.computeMergedSettings();
|
|
107
368
|
saveSettings(settingsFile);
|
|
108
369
|
}
|
|
109
370
|
}
|
|
110
|
-
function resolveEnvVarsInString(value) {
|
|
111
|
-
const envVarRegex = /\$(?:(\w+)|{([^}]+)})/g; // Find $VAR_NAME or ${VAR_NAME}
|
|
112
|
-
return value.replace(envVarRegex, (match, varName1, varName2) => {
|
|
113
|
-
const varName = varName1 || varName2;
|
|
114
|
-
if (process && process.env && typeof process.env[varName] === 'string') {
|
|
115
|
-
return process.env[varName];
|
|
116
|
-
}
|
|
117
|
-
return match;
|
|
118
|
-
});
|
|
119
|
-
}
|
|
120
|
-
function resolveEnvVarsInObject(obj) {
|
|
121
|
-
if (obj === null ||
|
|
122
|
-
obj === undefined ||
|
|
123
|
-
typeof obj === 'boolean' ||
|
|
124
|
-
typeof obj === 'number') {
|
|
125
|
-
return obj;
|
|
126
|
-
}
|
|
127
|
-
if (typeof obj === 'string') {
|
|
128
|
-
return resolveEnvVarsInString(obj);
|
|
129
|
-
}
|
|
130
|
-
if (Array.isArray(obj)) {
|
|
131
|
-
return obj.map((item) => resolveEnvVarsInObject(item));
|
|
132
|
-
}
|
|
133
|
-
if (typeof obj === 'object') {
|
|
134
|
-
const newObj = { ...obj };
|
|
135
|
-
for (const key in newObj) {
|
|
136
|
-
if (Object.prototype.hasOwnProperty.call(newObj, key)) {
|
|
137
|
-
newObj[key] = resolveEnvVarsInObject(newObj[key]);
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
return newObj;
|
|
141
|
-
}
|
|
142
|
-
return obj;
|
|
143
|
-
}
|
|
144
371
|
function findEnvFile(startDir) {
|
|
145
372
|
let currentDir = path.resolve(startDir);
|
|
146
373
|
while (true) {
|
|
147
|
-
// prefer gemini-specific .env under
|
|
148
|
-
const geminiEnvPath = path.join(currentDir,
|
|
374
|
+
// prefer gemini-specific .env under CELL_DIR
|
|
375
|
+
const geminiEnvPath = path.join(currentDir, CELL_DIR, '.env');
|
|
149
376
|
if (fs.existsSync(geminiEnvPath)) {
|
|
150
377
|
return geminiEnvPath;
|
|
151
378
|
}
|
|
@@ -156,7 +383,7 @@ function findEnvFile(startDir) {
|
|
|
156
383
|
const parentDir = path.dirname(currentDir);
|
|
157
384
|
if (parentDir === currentDir || !parentDir) {
|
|
158
385
|
// check .env under home as fallback, again preferring gemini-specific .env
|
|
159
|
-
const homeGeminiEnvPath = path.join(homedir(),
|
|
386
|
+
const homeGeminiEnvPath = path.join(homedir(), CELL_DIR, '.env');
|
|
160
387
|
if (fs.existsSync(homeGeminiEnvPath)) {
|
|
161
388
|
return homeGeminiEnvPath;
|
|
162
389
|
}
|
|
@@ -194,33 +421,21 @@ export function setUpCloudShellEnvironment(envFilePath) {
|
|
|
194
421
|
}
|
|
195
422
|
export function loadEnvironment(settings) {
|
|
196
423
|
const envFilePath = findEnvFile(process.cwd());
|
|
424
|
+
if (!isWorkspaceTrusted(settings)) {
|
|
425
|
+
return;
|
|
426
|
+
}
|
|
197
427
|
// Cloud Shell environment variable handling
|
|
198
428
|
if (process.env['CLOUD_SHELL'] === 'true') {
|
|
199
429
|
setUpCloudShellEnvironment(envFilePath);
|
|
200
430
|
}
|
|
201
|
-
// If no settings provided, try to load workspace settings for exclusions
|
|
202
|
-
let resolvedSettings = settings;
|
|
203
|
-
if (!resolvedSettings) {
|
|
204
|
-
const workspaceSettingsPath = getWorkspaceSettingsPath(process.cwd());
|
|
205
|
-
try {
|
|
206
|
-
if (fs.existsSync(workspaceSettingsPath)) {
|
|
207
|
-
const workspaceContent = fs.readFileSync(workspaceSettingsPath, 'utf-8');
|
|
208
|
-
const parsedWorkspaceSettings = JSON.parse(stripJsonComments(workspaceContent));
|
|
209
|
-
resolvedSettings = resolveEnvVarsInObject(parsedWorkspaceSettings);
|
|
210
|
-
}
|
|
211
|
-
}
|
|
212
|
-
catch (_e) {
|
|
213
|
-
// Ignore errors loading workspace settings
|
|
214
|
-
}
|
|
215
|
-
}
|
|
216
431
|
if (envFilePath) {
|
|
217
432
|
// Manually parse and load environment variables to handle exclusions correctly.
|
|
218
433
|
// This avoids modifying environment variables that were already set from the shell.
|
|
219
434
|
try {
|
|
220
435
|
const envFileContent = fs.readFileSync(envFilePath, 'utf-8');
|
|
221
436
|
const parsedEnv = dotenv.parse(envFileContent);
|
|
222
|
-
const excludedVars =
|
|
223
|
-
const isProjectEnvFile = !envFilePath.includes(
|
|
437
|
+
const excludedVars = settings?.advanced?.excludedEnvVars || DEFAULT_EXCLUDED_ENV_VARS;
|
|
438
|
+
const isProjectEnvFile = !envFilePath.includes(CELL_DIR);
|
|
224
439
|
for (const key in parsedEnv) {
|
|
225
440
|
if (Object.hasOwn(parsedEnv, key)) {
|
|
226
441
|
// If it's a project .env file, skip loading excluded variables.
|
|
@@ -245,10 +460,13 @@ export function loadEnvironment(settings) {
|
|
|
245
460
|
*/
|
|
246
461
|
export function loadSettings(workspaceDir) {
|
|
247
462
|
let systemSettings = {};
|
|
463
|
+
let systemDefaultSettings = {};
|
|
248
464
|
let userSettings = {};
|
|
249
465
|
let workspaceSettings = {};
|
|
250
466
|
const settingsErrors = [];
|
|
251
467
|
const systemSettingsPath = getSystemSettingsPath();
|
|
468
|
+
const systemDefaultsPath = getSystemDefaultsPath();
|
|
469
|
+
const migratedInMemorScopes = new Set();
|
|
252
470
|
// Resolve paths to their canonical representation to handle symlinks
|
|
253
471
|
const resolvedWorkspaceDir = path.resolve(workspaceDir);
|
|
254
472
|
const resolvedHomeDir = path.resolve(homedir());
|
|
@@ -262,7 +480,7 @@ export function loadSettings(workspaceDir) {
|
|
|
262
480
|
}
|
|
263
481
|
// We expect homedir to always exist and be resolvable.
|
|
264
482
|
const realHomeDir = fs.realpathSync(resolvedHomeDir);
|
|
265
|
-
const workspaceSettingsPath =
|
|
483
|
+
const workspaceSettingsPath = new Storage(workspaceDir).getWorkspaceSettingsPath();
|
|
266
484
|
// Load system settings
|
|
267
485
|
try {
|
|
268
486
|
if (fs.existsSync(systemSettingsPath)) {
|
|
@@ -281,13 +499,6 @@ export function loadSettings(workspaceDir) {
|
|
|
281
499
|
if (fs.existsSync(USER_SETTINGS_PATH)) {
|
|
282
500
|
const userContent = fs.readFileSync(USER_SETTINGS_PATH, 'utf-8');
|
|
283
501
|
userSettings = JSON.parse(stripJsonComments(userContent));
|
|
284
|
-
// Support legacy theme names
|
|
285
|
-
if (userSettings.theme && userSettings.theme === 'VS') {
|
|
286
|
-
userSettings.theme = DefaultLight.name;
|
|
287
|
-
}
|
|
288
|
-
else if (userSettings.theme && userSettings.theme === 'VS2015') {
|
|
289
|
-
userSettings.theme = DefaultDark.name;
|
|
290
|
-
}
|
|
291
502
|
}
|
|
292
503
|
}
|
|
293
504
|
catch (error) {
|
|
@@ -300,7 +511,7 @@ export function loadSettings(workspaceDir) {
|
|
|
300
511
|
const defaultMcpServerConfig = {
|
|
301
512
|
Cell: {
|
|
302
513
|
url: 'https://api.machina.ai/mcp/v1/cell/sse',
|
|
303
|
-
timeout:
|
|
514
|
+
timeout: 10000,
|
|
304
515
|
},
|
|
305
516
|
};
|
|
306
517
|
let settingsModified = false;
|
|
@@ -318,33 +529,79 @@ export function loadSettings(workspaceDir) {
|
|
|
318
529
|
settings: userSettings,
|
|
319
530
|
});
|
|
320
531
|
}
|
|
532
|
+
/*
|
|
321
533
|
// Load YAML config and merge
|
|
322
534
|
const yamlSettings = loadYamlConfig();
|
|
323
535
|
userSettings = { ...userSettings, ...yamlSettings };
|
|
324
|
-
|
|
325
|
-
|
|
536
|
+
*/
|
|
537
|
+
const loadAndMigrate = (filePath, scope) => {
|
|
326
538
|
try {
|
|
327
|
-
if (fs.existsSync(
|
|
328
|
-
const
|
|
329
|
-
|
|
330
|
-
if (
|
|
331
|
-
|
|
539
|
+
if (fs.existsSync(filePath)) {
|
|
540
|
+
const content = fs.readFileSync(filePath, 'utf-8');
|
|
541
|
+
const rawSettings = JSON.parse(stripJsonComments(content));
|
|
542
|
+
if (typeof rawSettings !== 'object' ||
|
|
543
|
+
rawSettings === null ||
|
|
544
|
+
Array.isArray(rawSettings)) {
|
|
545
|
+
settingsErrors.push({
|
|
546
|
+
message: 'Settings file is not a valid JSON object.',
|
|
547
|
+
path: filePath,
|
|
548
|
+
});
|
|
549
|
+
return {};
|
|
332
550
|
}
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
551
|
+
let settingsObject = rawSettings;
|
|
552
|
+
if (needsMigration(settingsObject)) {
|
|
553
|
+
const migratedSettings = migrateSettingsToV2(settingsObject);
|
|
554
|
+
if (migratedSettings) {
|
|
555
|
+
if (MIGRATE_V2_OVERWRITE) {
|
|
556
|
+
try {
|
|
557
|
+
fs.renameSync(filePath, `${filePath}.orig`);
|
|
558
|
+
fs.writeFileSync(filePath, JSON.stringify(migratedSettings, null, 2), 'utf-8');
|
|
559
|
+
}
|
|
560
|
+
catch (e) {
|
|
561
|
+
console.error(`Error migrating settings file on disk: ${getErrorMessage(e)}`);
|
|
562
|
+
}
|
|
563
|
+
}
|
|
564
|
+
else {
|
|
565
|
+
migratedInMemorScopes.add(scope);
|
|
566
|
+
}
|
|
567
|
+
settingsObject = migratedSettings;
|
|
568
|
+
}
|
|
336
569
|
}
|
|
570
|
+
return settingsObject;
|
|
337
571
|
}
|
|
338
572
|
}
|
|
339
573
|
catch (error) {
|
|
340
574
|
settingsErrors.push({
|
|
341
575
|
message: getErrorMessage(error),
|
|
342
|
-
path:
|
|
576
|
+
path: filePath,
|
|
343
577
|
});
|
|
344
578
|
}
|
|
579
|
+
return {};
|
|
580
|
+
};
|
|
581
|
+
systemSettings = loadAndMigrate(systemSettingsPath, SettingScope.System);
|
|
582
|
+
systemDefaultSettings = loadAndMigrate(systemDefaultsPath, SettingScope.SystemDefaults);
|
|
583
|
+
userSettings = loadAndMigrate(USER_SETTINGS_PATH, SettingScope.User);
|
|
584
|
+
if (realWorkspaceDir !== realHomeDir) {
|
|
585
|
+
workspaceSettings = loadAndMigrate(workspaceSettingsPath, SettingScope.Workspace);
|
|
345
586
|
}
|
|
587
|
+
// Support legacy theme names
|
|
588
|
+
if (userSettings.ui?.theme === 'VS') {
|
|
589
|
+
userSettings.ui.theme = DefaultLight.name;
|
|
590
|
+
}
|
|
591
|
+
else if (userSettings.ui?.theme === 'VS2015') {
|
|
592
|
+
userSettings.ui.theme = DefaultDark.name;
|
|
593
|
+
}
|
|
594
|
+
if (workspaceSettings.ui?.theme === 'VS') {
|
|
595
|
+
workspaceSettings.ui.theme = DefaultLight.name;
|
|
596
|
+
}
|
|
597
|
+
else if (workspaceSettings.ui?.theme === 'VS2015') {
|
|
598
|
+
workspaceSettings.ui.theme = DefaultDark.name;
|
|
599
|
+
}
|
|
600
|
+
// For the initial trust check, we can only use user and system settings.
|
|
601
|
+
const initialTrustCheckSettings = mergeWith({}, systemSettings, userSettings);
|
|
602
|
+
const isTrusted = isWorkspaceTrusted(initialTrustCheckSettings) ?? true;
|
|
346
603
|
// Create a temporary merged settings object to pass to loadEnvironment.
|
|
347
|
-
const tempMergedSettings = mergeSettings(systemSettings, userSettings, workspaceSettings);
|
|
604
|
+
const tempMergedSettings = mergeSettings(systemSettings, systemDefaultSettings, userSettings, workspaceSettings, isTrusted);
|
|
348
605
|
// loadEnviroment depends on settings so we have to create a temp version of
|
|
349
606
|
// the settings to avoid a cycle
|
|
350
607
|
loadEnvironment(tempMergedSettings);
|
|
@@ -356,21 +613,16 @@ export function loadSettings(workspaceDir) {
|
|
|
356
613
|
const loadedSettings = new LoadedSettings({
|
|
357
614
|
path: systemSettingsPath,
|
|
358
615
|
settings: systemSettings,
|
|
616
|
+
}, {
|
|
617
|
+
path: systemDefaultsPath,
|
|
618
|
+
settings: systemDefaultSettings,
|
|
359
619
|
}, {
|
|
360
620
|
path: USER_SETTINGS_PATH,
|
|
361
621
|
settings: userSettings,
|
|
362
622
|
}, {
|
|
363
623
|
path: workspaceSettingsPath,
|
|
364
624
|
settings: workspaceSettings,
|
|
365
|
-
}, settingsErrors);
|
|
366
|
-
// Validate chatCompression settings
|
|
367
|
-
const chatCompression = loadedSettings.merged.chatCompression;
|
|
368
|
-
const threshold = chatCompression?.contextPercentageThreshold;
|
|
369
|
-
if (threshold != null &&
|
|
370
|
-
(typeof threshold !== 'number' || threshold < 0 || threshold > 1)) {
|
|
371
|
-
console.warn(`Invalid value for chatCompression.contextPercentageThreshold: "${threshold}". Please use a value between 0 and 1. Using default compression settings.`);
|
|
372
|
-
delete loadedSettings.merged.chatCompression;
|
|
373
|
-
}
|
|
625
|
+
}, settingsErrors, isTrusted, migratedInMemorScopes);
|
|
374
626
|
return loadedSettings;
|
|
375
627
|
}
|
|
376
628
|
export function saveSettings(settingsFile) {
|
|
@@ -380,7 +632,11 @@ export function saveSettings(settingsFile) {
|
|
|
380
632
|
if (!fs.existsSync(dirPath)) {
|
|
381
633
|
fs.mkdirSync(dirPath, { recursive: true });
|
|
382
634
|
}
|
|
383
|
-
|
|
635
|
+
let settingsToSave = settingsFile.settings;
|
|
636
|
+
if (!MIGRATE_V2_OVERWRITE) {
|
|
637
|
+
settingsToSave = migrateSettingsToV1(settingsToSave);
|
|
638
|
+
}
|
|
639
|
+
fs.writeFileSync(settingsFile.path, JSON.stringify(settingsToSave, null, 2), 'utf-8');
|
|
384
640
|
}
|
|
385
641
|
catch (error) {
|
|
386
642
|
console.error('Error saving user settings file:', error);
|