@machina.ai/cell-cli 1.0.21-rc4 → 1.4.0-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 -9
- 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/examples/context/GEMINI.md +8 -0
- package/dist/src/commands/extensions/examples/context/gemini-extension.json +5 -0
- package/dist/src/commands/extensions/examples/custom-commands/commands/fs/grep-code.toml +6 -0
- package/dist/src/commands/extensions/examples/custom-commands/gemini-extension.json +4 -0
- package/dist/src/commands/extensions/examples/exclude-tools/gemini-extension.json +5 -0
- package/dist/src/commands/extensions/examples/mcp-server/example.d.ts +6 -0
- package/dist/src/commands/extensions/examples/mcp-server/example.js +46 -0
- package/dist/src/commands/extensions/examples/mcp-server/example.js.map +1 -0
- package/dist/src/commands/extensions/examples/mcp-server/example.ts +60 -0
- package/dist/src/commands/extensions/examples/mcp-server/gemini-extension.json +10 -0
- package/dist/src/commands/extensions/install.d.ts +13 -0
- package/dist/src/commands/extensions/install.js +69 -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 +22 -0
- package/dist/src/commands/extensions/install.test.js.map +1 -0
- package/dist/src/commands/extensions/link.d.ts +12 -0
- package/dist/src/commands/extensions/link.js +37 -0
- package/dist/src/commands/extensions/link.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/new.d.ts +7 -0
- package/dist/src/commands/extensions/new.js +70 -0
- package/dist/src/commands/extensions/new.js.map +1 -0
- package/dist/src/commands/extensions/new.test.d.ts +6 -0
- package/dist/src/commands/extensions/new.test.js +50 -0
- package/dist/src/commands/extensions/new.test.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 +59 -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 +33 -0
- package/dist/src/commands/extensions.js.map +1 -0
- package/dist/src/commands/mcp/add.js +1 -1
- package/dist/src/commands/mcp/add.js.map +1 -1
- package/dist/src/commands/mcp/list.js +3 -3
- package/dist/src/commands/mcp/list.js.map +1 -1
- package/dist/src/commands/mcp/remove.js +1 -1
- package/dist/src/commands/mcp/remove.js.map +1 -1
- package/dist/src/config/auth.js +3 -3
- package/dist/src/config/auth.js.map +1 -1
- package/dist/src/config/auth.test.js +9 -4
- package/dist/src/config/auth.test.js.map +1 -1
- package/dist/src/config/config.d.ts +11 -7
- package/dist/src/config/config.js +100 -65
- package/dist/src/config/config.js.map +1 -1
- package/dist/src/config/extension.d.ts +44 -3
- package/dist/src/config/extension.js +347 -20
- 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.d.ts +1 -0
- package/dist/src/config/keyBindings.js +6 -25
- package/dist/src/config/keyBindings.js.map +1 -1
- 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 +15 -9
- package/dist/src/config/settings.js +316 -135
- package/dist/src/config/settings.js.map +1 -1
- package/dist/src/config/settingsSchema.d.ts +736 -338
- package/dist/src/config/settingsSchema.js +730 -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 +63 -44
- package/dist/src/config/trustedFolders.js.map +1 -1
- package/dist/src/config/trustedFolders.test.js +89 -6
- package/dist/src/config/trustedFolders.test.js.map +1 -1
- package/dist/src/gemini.d.ts +3 -1
- package/dist/src/gemini.js +115 -82
- package/dist/src/gemini.js.map +1 -1
- package/dist/src/gemini.test.js +70 -44
- 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/BuiltinCommandLoader.js +1 -1
- package/dist/src/services/BuiltinCommandLoader.js.map +1 -1
- package/dist/src/services/BuiltinCommandLoader.test.js +3 -3
- package/dist/src/services/BuiltinCommandLoader.test.js.map +1 -1
- 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 +44 -18
- 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 +158 -70
- package/dist/src/ui/App.js.map +1 -1
- package/dist/src/ui/IdeIntegrationNudge.d.ts +1 -1
- package/dist/src/ui/IdeIntegrationNudge.js +3 -8
- 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 +10 -4
- 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/bugCommand.js +9 -4
- package/dist/src/ui/commands/bugCommand.js.map +1 -1
- package/dist/src/ui/commands/chatCommand.d.ts +1 -1
- package/dist/src/ui/commands/chatCommand.js +6 -5
- 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 +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 +6 -5
- 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 -3
- package/dist/src/ui/commands/ideCommand.js +46 -18
- 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 +12 -10
- 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 +5 -4
- 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 +4 -3
- package/dist/src/ui/components/AuthDialog.js +16 -10
- package/dist/src/ui/components/AuthDialog.js.map +1 -1
- package/dist/src/ui/components/AuthDialog.test.js +80 -19
- 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 +2 -2
- package/dist/src/ui/components/AutoAcceptIndicator.js +1 -1
- package/dist/src/ui/components/AutoAcceptIndicator.js.map +1 -1
- package/dist/src/ui/components/ConsoleSummaryDisplay.d.ts +1 -1
- package/dist/src/ui/components/ContextSummaryDisplay.d.ts +2 -2
- package/dist/src/ui/components/ContextSummaryDisplay.js +1 -0
- package/dist/src/ui/components/ContextSummaryDisplay.js.map +1 -1
- package/dist/src/ui/components/ContextUsageDisplay.js +1 -1
- package/dist/src/ui/components/ContextUsageDisplay.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 +9 -12
- 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 +4 -1
- package/dist/src/ui/components/Footer.js +5 -4
- package/dist/src/ui/components/Footer.js.map +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 +161 -29
- 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 +1 -6
- 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 +2 -2
- package/dist/src/ui/components/ShellConfirmationDialog.js +2 -2
- 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 +2 -2
- 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 +41 -101
- 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 +276 -54
- package/dist/src/ui/contexts/KeypressContext.js.map +1 -1
- package/dist/src/ui/contexts/KeypressContext.test.js +290 -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/editors/editorSettingsManager.d.ts +1 -1
- package/dist/src/ui/editors/editorSettingsManager.js +1 -1
- package/dist/src/ui/editors/editorSettingsManager.js.map +1 -1
- package/dist/src/ui/hooks/atCommandProcessor.d.ts +3 -3
- package/dist/src/ui/hooks/atCommandProcessor.js +5 -8
- 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 +16 -9
- 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 +4 -2
- package/dist/src/ui/hooks/useAutoAcceptIndicator.js +14 -5
- package/dist/src/ui/hooks/useAutoAcceptIndicator.js.map +1 -1
- package/dist/src/ui/hooks/useAutoAcceptIndicator.test.js +124 -4
- 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 +1 -1
- package/dist/src/ui/hooks/useEditorSettings.js.map +1 -1
- package/dist/src/ui/hooks/useEditorSettings.test.js +3 -3
- 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 +24 -13
- 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 +81 -46
- 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/useIdeTrustListener.d.ts +14 -0
- package/dist/src/ui/hooks/useIdeTrustListener.js +39 -0
- package/dist/src/ui/hooks/useIdeTrustListener.js.map +1 -0
- 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/useLoadingIndicator.d.ts +1 -1
- package/dist/src/ui/hooks/useLoadingIndicator.js +2 -2
- package/dist/src/ui/hooks/useLoadingIndicator.js.map +1 -1
- package/dist/src/ui/hooks/useLoadingIndicator.test.js +2 -2
- package/dist/src/ui/hooks/useLoadingIndicator.test.js.map +1 -1
- package/dist/src/ui/hooks/useLogger.d.ts +3 -2
- package/dist/src/ui/hooks/useLogger.js +4 -4
- package/dist/src/ui/hooks/useLogger.js.map +1 -1
- package/dist/src/ui/hooks/usePhraseCycler.d.ts +1 -1
- package/dist/src/ui/hooks/usePhraseCycler.js +11 -8
- package/dist/src/ui/hooks/usePhraseCycler.js.map +1 -1
- package/dist/src/ui/hooks/usePrivacySettings.d.ts +1 -1
- package/dist/src/ui/hooks/usePrivacySettings.js +8 -13
- package/dist/src/ui/hooks/usePrivacySettings.js.map +1 -1
- package/dist/src/ui/hooks/usePrivacySettings.test.js +33 -97
- 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 +100 -98
- 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 +54 -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 +9 -0
- package/dist/src/ui/keyMatchers.test.js.map +1 -1
- package/dist/src/ui/privacy/CloudFreePrivacyNotice.d.ts +1 -1
- package/dist/src/ui/privacy/PrivacyNotice.d.ts +1 -1
- package/dist/src/ui/privacy/PrivacyNotice.js +1 -1
- package/dist/src/ui/privacy/PrivacyNotice.js.map +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/highlight.d.ts +10 -0
- package/dist/src/ui/utils/highlight.js +41 -0
- package/dist/src/ui/utils/highlight.js.map +1 -0
- package/dist/src/ui/utils/highlight.test.d.ts +6 -0
- package/dist/src/ui/utils/highlight.test.js +93 -0
- package/dist/src/ui/utils/highlight.test.js.map +1 -0
- package/dist/src/ui/utils/platformConstants.d.ts +33 -1
- package/dist/src/ui/utils/platformConstants.js +35 -1
- 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/deepMerge.d.ts +10 -0
- package/dist/src/utils/deepMerge.js +58 -0
- package/dist/src/utils/deepMerge.js.map +1 -0
- package/dist/src/utils/deepMerge.test.d.ts +6 -0
- package/dist/src/utils/deepMerge.test.js +143 -0
- package/dist/src/utils/deepMerge.test.js.map +1 -0
- 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 +4 -4
- package/dist/src/utils/installationInfo.js.map +1 -1
- package/dist/src/utils/installationInfo.test.js +5 -5
- 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 +3 -3
- 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.d.ts +1 -1
- package/dist/src/utils/userStartupWarnings.js +4 -4
- 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 +1 -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 +197 -159
- package/dist/src/zed-integration/zedIntegration.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +9 -11
|
@@ -3,90 +3,271 @@
|
|
|
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 { FatalConfigError, CELL_CONFIG_DIR as CELL_DIR, getErrorMessage, Storage, } from '@google/gemini-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 { SETTINGS_SCHEMA, } from './settingsSchema.js';
|
|
20
|
+
import { resolveEnvVarsInObject } from '../utils/envVarResolver.js';
|
|
21
|
+
import { customDeepMerge } from '../utils/deepMerge.js';
|
|
22
|
+
function getMergeStrategyForPath(path) {
|
|
23
|
+
let current = undefined;
|
|
24
|
+
let currentSchema = SETTINGS_SCHEMA;
|
|
25
|
+
for (const key of path) {
|
|
26
|
+
if (!currentSchema || !currentSchema[key]) {
|
|
27
|
+
return undefined;
|
|
28
|
+
}
|
|
29
|
+
current = currentSchema[key];
|
|
30
|
+
currentSchema = current.properties;
|
|
31
|
+
}
|
|
32
|
+
return current?.mergeStrategy;
|
|
33
|
+
}
|
|
15
34
|
export const SETTINGS_DIRECTORY_NAME = '.cell-cli';
|
|
16
|
-
export const
|
|
17
|
-
export const
|
|
35
|
+
export const USER_SETTINGS_PATH = Storage.getGlobalSettingsPath();
|
|
36
|
+
export const USER_SETTINGS_DIR = path.dirname(USER_SETTINGS_PATH);
|
|
18
37
|
export const DEFAULT_EXCLUDED_ENV_VARS = ['DEBUG', 'DEBUG_MODE'];
|
|
38
|
+
const MIGRATE_V2_OVERWRITE = false;
|
|
39
|
+
const MIGRATION_MAP = {
|
|
40
|
+
accessibility: 'ui.accessibility',
|
|
41
|
+
allowedTools: 'tools.allowed',
|
|
42
|
+
allowMCPServers: 'mcp.allowed',
|
|
43
|
+
autoAccept: 'tools.autoAccept',
|
|
44
|
+
autoConfigureMaxOldSpaceSize: 'advanced.autoConfigureMemory',
|
|
45
|
+
bugCommand: 'advanced.bugCommand',
|
|
46
|
+
chatCompression: 'model.chatCompression',
|
|
47
|
+
checkpointing: 'general.checkpointing',
|
|
48
|
+
coreTools: 'tools.core',
|
|
49
|
+
contextFileName: 'context.fileName',
|
|
50
|
+
customThemes: 'ui.customThemes',
|
|
51
|
+
debugKeystrokeLogging: 'general.debugKeystrokeLogging',
|
|
52
|
+
disableAutoUpdate: 'general.disableAutoUpdate',
|
|
53
|
+
disableUpdateNag: 'general.disableUpdateNag',
|
|
54
|
+
dnsResolutionOrder: 'advanced.dnsResolutionOrder',
|
|
55
|
+
enablePromptCompletion: 'general.enablePromptCompletion',
|
|
56
|
+
enforcedAuthType: 'security.auth.enforcedType',
|
|
57
|
+
excludeTools: 'tools.exclude',
|
|
58
|
+
excludeMCPServers: 'mcp.excluded',
|
|
59
|
+
excludedProjectEnvVars: 'advanced.excludedEnvVars',
|
|
60
|
+
extensionManagement: 'experimental.extensionManagement',
|
|
61
|
+
extensions: 'extensions',
|
|
62
|
+
fileFiltering: 'context.fileFiltering',
|
|
63
|
+
folderTrustFeature: 'security.folderTrust.featureEnabled',
|
|
64
|
+
folderTrust: 'security.folderTrust.enabled',
|
|
65
|
+
hasSeenIdeIntegrationNudge: 'ide.hasSeenNudge',
|
|
66
|
+
hideWindowTitle: 'ui.hideWindowTitle',
|
|
67
|
+
hideTips: 'ui.hideTips',
|
|
68
|
+
hideBanner: 'ui.hideBanner',
|
|
69
|
+
hideFooter: 'ui.hideFooter',
|
|
70
|
+
hideCWD: 'ui.footer.hideCWD',
|
|
71
|
+
hideSandboxStatus: 'ui.footer.hideSandboxStatus',
|
|
72
|
+
hideModelInfo: 'ui.footer.hideModelInfo',
|
|
73
|
+
hideContextSummary: 'ui.hideContextSummary',
|
|
74
|
+
showMemoryUsage: 'ui.showMemoryUsage',
|
|
75
|
+
showLineNumbers: 'ui.showLineNumbers',
|
|
76
|
+
showCitations: 'ui.showCitations',
|
|
77
|
+
ideMode: 'ide.enabled',
|
|
78
|
+
includeDirectories: 'context.includeDirectories',
|
|
79
|
+
loadMemoryFromIncludeDirectories: 'context.loadFromIncludeDirectories',
|
|
80
|
+
maxSessionTurns: 'model.maxSessionTurns',
|
|
81
|
+
mcpServers: 'mcpServers',
|
|
82
|
+
mcpServerCommand: 'mcp.serverCommand',
|
|
83
|
+
memoryImportFormat: 'context.importFormat',
|
|
84
|
+
memoryDiscoveryMaxDirs: 'context.discoveryMaxDirs',
|
|
85
|
+
model: 'model.name',
|
|
86
|
+
preferredEditor: 'general.preferredEditor',
|
|
87
|
+
sandbox: 'tools.sandbox',
|
|
88
|
+
selectedAuthType: 'security.auth.selectedType',
|
|
89
|
+
shouldUseNodePtyShell: 'tools.usePty',
|
|
90
|
+
skipNextSpeakerCheck: 'model.skipNextSpeakerCheck',
|
|
91
|
+
summarizeToolOutput: 'model.summarizeToolOutput',
|
|
92
|
+
telemetry: 'telemetry',
|
|
93
|
+
theme: 'ui.theme',
|
|
94
|
+
toolDiscoveryCommand: 'tools.discoveryCommand',
|
|
95
|
+
toolCallCommand: 'tools.callCommand',
|
|
96
|
+
usageStatisticsEnabled: 'privacy.usageStatisticsEnabled',
|
|
97
|
+
useExternalAuth: 'security.auth.useExternal',
|
|
98
|
+
useRipgrep: 'tools.useRipgrep',
|
|
99
|
+
vimMode: 'general.vimMode',
|
|
100
|
+
};
|
|
19
101
|
export function getSystemSettingsPath() {
|
|
20
|
-
if (process.env['
|
|
21
|
-
return process.env['
|
|
102
|
+
if (process.env['CELL_CLI_SYSTEM_SETTINGS_PATH']) {
|
|
103
|
+
return process.env['CELL_CLI_SYSTEM_SETTINGS_PATH'];
|
|
22
104
|
}
|
|
23
105
|
if (platform() === 'darwin') {
|
|
24
|
-
return '/Library/Application Support/
|
|
106
|
+
return '/Library/Application Support/CellCli/settings.json';
|
|
25
107
|
}
|
|
26
108
|
else if (platform() === 'win32') {
|
|
27
|
-
return 'C:\\ProgramData\\
|
|
109
|
+
return 'C:\\ProgramData\\cell-cli\\settings.json';
|
|
28
110
|
}
|
|
29
111
|
else {
|
|
30
|
-
return '/etc/
|
|
112
|
+
return '/etc/cell-cli/settings.json';
|
|
31
113
|
}
|
|
32
114
|
}
|
|
33
|
-
export function
|
|
34
|
-
|
|
115
|
+
export function getSystemDefaultsPath() {
|
|
116
|
+
if (process.env['CELL_CLI_SYSTEM_DEFAULTS_PATH']) {
|
|
117
|
+
return process.env['CELL_CLI_SYSTEM_DEFAULTS_PATH'];
|
|
118
|
+
}
|
|
119
|
+
return path.join(path.dirname(getSystemSettingsPath()), 'system-defaults.json');
|
|
35
120
|
}
|
|
36
121
|
export var SettingScope;
|
|
37
122
|
(function (SettingScope) {
|
|
38
123
|
SettingScope["User"] = "User";
|
|
39
124
|
SettingScope["Workspace"] = "Workspace";
|
|
40
125
|
SettingScope["System"] = "System";
|
|
126
|
+
SettingScope["SystemDefaults"] = "SystemDefaults";
|
|
41
127
|
})(SettingScope || (SettingScope = {}));
|
|
42
|
-
function
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
}
|
|
70
|
-
|
|
128
|
+
function setNestedProperty(obj, path, value) {
|
|
129
|
+
const keys = path.split('.');
|
|
130
|
+
const lastKey = keys.pop();
|
|
131
|
+
if (!lastKey)
|
|
132
|
+
return;
|
|
133
|
+
let current = obj;
|
|
134
|
+
for (const key of keys) {
|
|
135
|
+
if (current[key] === undefined) {
|
|
136
|
+
current[key] = {};
|
|
137
|
+
}
|
|
138
|
+
const next = current[key];
|
|
139
|
+
if (typeof next === 'object' && next !== null) {
|
|
140
|
+
current = next;
|
|
141
|
+
}
|
|
142
|
+
else {
|
|
143
|
+
// This path is invalid, so we stop.
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
current[lastKey] = value;
|
|
148
|
+
}
|
|
149
|
+
export function needsMigration(settings) {
|
|
150
|
+
// A file needs migration if it contains any top-level key that is moved to a
|
|
151
|
+
// nested location in V2.
|
|
152
|
+
const hasV1Keys = Object.entries(MIGRATION_MAP).some(([v1Key, v2Path]) => {
|
|
153
|
+
if (v1Key === v2Path || !(v1Key in settings)) {
|
|
154
|
+
return false;
|
|
155
|
+
}
|
|
156
|
+
// If a key exists that is both a V1 key and a V2 container (like 'model'),
|
|
157
|
+
// we need to check the type. If it's an object, it's a V2 container and not
|
|
158
|
+
// a V1 key that needs migration.
|
|
159
|
+
if (KNOWN_V2_CONTAINERS.has(v1Key) &&
|
|
160
|
+
typeof settings[v1Key] === 'object' &&
|
|
161
|
+
settings[v1Key] !== null) {
|
|
162
|
+
return false;
|
|
163
|
+
}
|
|
164
|
+
return true;
|
|
165
|
+
});
|
|
166
|
+
return hasV1Keys;
|
|
167
|
+
}
|
|
168
|
+
function migrateSettingsToV2(flatSettings) {
|
|
169
|
+
if (!needsMigration(flatSettings)) {
|
|
170
|
+
return null;
|
|
171
|
+
}
|
|
172
|
+
const v2Settings = {};
|
|
173
|
+
const flatKeys = new Set(Object.keys(flatSettings));
|
|
174
|
+
for (const [oldKey, newPath] of Object.entries(MIGRATION_MAP)) {
|
|
175
|
+
if (flatKeys.has(oldKey)) {
|
|
176
|
+
setNestedProperty(v2Settings, newPath, flatSettings[oldKey]);
|
|
177
|
+
flatKeys.delete(oldKey);
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
// Preserve mcpServers at the top level
|
|
181
|
+
if (flatSettings['mcpServers']) {
|
|
182
|
+
v2Settings['mcpServers'] = flatSettings['mcpServers'];
|
|
183
|
+
flatKeys.delete('mcpServers');
|
|
184
|
+
}
|
|
185
|
+
// Carry over any unrecognized keys
|
|
186
|
+
for (const remainingKey of flatKeys) {
|
|
187
|
+
v2Settings[remainingKey] = flatSettings[remainingKey];
|
|
188
|
+
}
|
|
189
|
+
return v2Settings;
|
|
190
|
+
}
|
|
191
|
+
function getNestedProperty(obj, path) {
|
|
192
|
+
const keys = path.split('.');
|
|
193
|
+
let current = obj;
|
|
194
|
+
for (const key of keys) {
|
|
195
|
+
if (typeof current !== 'object' || current === null || !(key in current)) {
|
|
196
|
+
return undefined;
|
|
197
|
+
}
|
|
198
|
+
current = current[key];
|
|
199
|
+
}
|
|
200
|
+
return current;
|
|
201
|
+
}
|
|
202
|
+
const REVERSE_MIGRATION_MAP = Object.fromEntries(Object.entries(MIGRATION_MAP).map(([key, value]) => [value, key]));
|
|
203
|
+
// Dynamically determine the top-level keys from the V2 settings structure.
|
|
204
|
+
const KNOWN_V2_CONTAINERS = new Set(Object.values(MIGRATION_MAP).map((path) => path.split('.')[0]));
|
|
205
|
+
export function migrateSettingsToV1(v2Settings) {
|
|
206
|
+
const v1Settings = {};
|
|
207
|
+
const v2Keys = new Set(Object.keys(v2Settings));
|
|
208
|
+
for (const [newPath, oldKey] of Object.entries(REVERSE_MIGRATION_MAP)) {
|
|
209
|
+
const value = getNestedProperty(v2Settings, newPath);
|
|
210
|
+
if (value !== undefined) {
|
|
211
|
+
v1Settings[oldKey] = value;
|
|
212
|
+
v2Keys.delete(newPath.split('.')[0]);
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
// Preserve mcpServers at the top level
|
|
216
|
+
if (v2Settings['mcpServers']) {
|
|
217
|
+
v1Settings['mcpServers'] = v2Settings['mcpServers'];
|
|
218
|
+
v2Keys.delete('mcpServers');
|
|
219
|
+
}
|
|
220
|
+
// Carry over any unrecognized keys
|
|
221
|
+
for (const remainingKey of v2Keys) {
|
|
222
|
+
const value = v2Settings[remainingKey];
|
|
223
|
+
if (value === undefined) {
|
|
224
|
+
continue;
|
|
225
|
+
}
|
|
226
|
+
// Don't carry over empty objects that were just containers for migrated settings.
|
|
227
|
+
if (KNOWN_V2_CONTAINERS.has(remainingKey) &&
|
|
228
|
+
typeof value === 'object' &&
|
|
229
|
+
value !== null &&
|
|
230
|
+
!Array.isArray(value) &&
|
|
231
|
+
Object.keys(value).length === 0) {
|
|
232
|
+
continue;
|
|
233
|
+
}
|
|
234
|
+
v1Settings[remainingKey] = value;
|
|
235
|
+
}
|
|
236
|
+
return v1Settings;
|
|
237
|
+
}
|
|
238
|
+
function mergeSettings(system, systemDefaults, user, workspace, isTrusted) {
|
|
239
|
+
const safeWorkspace = isTrusted ? workspace : {};
|
|
240
|
+
// Settings are merged with the following precedence (last one wins for
|
|
241
|
+
// single values):
|
|
242
|
+
// 1. System Defaults
|
|
243
|
+
// 2. User Settings
|
|
244
|
+
// 3. Workspace Settings
|
|
245
|
+
// 4. System Settings (as overrides)
|
|
246
|
+
return customDeepMerge(getMergeStrategyForPath, {}, // Start with an empty object
|
|
247
|
+
systemDefaults, user, safeWorkspace, system);
|
|
71
248
|
}
|
|
72
249
|
export class LoadedSettings {
|
|
73
|
-
constructor(system, user, workspace,
|
|
250
|
+
constructor(system, systemDefaults, user, workspace, isTrusted, migratedInMemorScopes) {
|
|
74
251
|
this.system = system;
|
|
252
|
+
this.systemDefaults = systemDefaults;
|
|
75
253
|
this.user = user;
|
|
76
254
|
this.workspace = workspace;
|
|
77
|
-
this.
|
|
255
|
+
this.isTrusted = isTrusted;
|
|
256
|
+
this.migratedInMemorScopes = migratedInMemorScopes;
|
|
78
257
|
this._merged = this.computeMergedSettings();
|
|
79
258
|
}
|
|
80
259
|
system;
|
|
260
|
+
systemDefaults;
|
|
81
261
|
user;
|
|
82
262
|
workspace;
|
|
83
|
-
|
|
263
|
+
isTrusted;
|
|
264
|
+
migratedInMemorScopes;
|
|
84
265
|
_merged;
|
|
85
266
|
get merged() {
|
|
86
267
|
return this._merged;
|
|
87
268
|
}
|
|
88
269
|
computeMergedSettings() {
|
|
89
|
-
return mergeSettings(this.system.settings, this.user.settings, this.workspace.settings);
|
|
270
|
+
return mergeSettings(this.system.settings, this.systemDefaults.settings, this.user.settings, this.workspace.settings, this.isTrusted);
|
|
90
271
|
}
|
|
91
272
|
forScope(scope) {
|
|
92
273
|
switch (scope) {
|
|
@@ -96,56 +277,24 @@ export class LoadedSettings {
|
|
|
96
277
|
return this.workspace;
|
|
97
278
|
case SettingScope.System:
|
|
98
279
|
return this.system;
|
|
280
|
+
case SettingScope.SystemDefaults:
|
|
281
|
+
return this.systemDefaults;
|
|
99
282
|
default:
|
|
100
283
|
throw new Error(`Invalid scope: ${scope}`);
|
|
101
284
|
}
|
|
102
285
|
}
|
|
103
286
|
setValue(scope, key, value) {
|
|
104
287
|
const settingsFile = this.forScope(scope);
|
|
105
|
-
settingsFile.settings
|
|
288
|
+
setNestedProperty(settingsFile.settings, key, value);
|
|
106
289
|
this._merged = this.computeMergedSettings();
|
|
107
290
|
saveSettings(settingsFile);
|
|
108
291
|
}
|
|
109
292
|
}
|
|
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
293
|
function findEnvFile(startDir) {
|
|
145
294
|
let currentDir = path.resolve(startDir);
|
|
146
295
|
while (true) {
|
|
147
|
-
// prefer gemini-specific .env under
|
|
148
|
-
const geminiEnvPath = path.join(currentDir,
|
|
296
|
+
// prefer gemini-specific .env under CELL_DIR
|
|
297
|
+
const geminiEnvPath = path.join(currentDir, CELL_DIR, '.env');
|
|
149
298
|
if (fs.existsSync(geminiEnvPath)) {
|
|
150
299
|
return geminiEnvPath;
|
|
151
300
|
}
|
|
@@ -156,7 +305,7 @@ function findEnvFile(startDir) {
|
|
|
156
305
|
const parentDir = path.dirname(currentDir);
|
|
157
306
|
if (parentDir === currentDir || !parentDir) {
|
|
158
307
|
// check .env under home as fallback, again preferring gemini-specific .env
|
|
159
|
-
const homeGeminiEnvPath = path.join(homedir(),
|
|
308
|
+
const homeGeminiEnvPath = path.join(homedir(), CELL_DIR, '.env');
|
|
160
309
|
if (fs.existsSync(homeGeminiEnvPath)) {
|
|
161
310
|
return homeGeminiEnvPath;
|
|
162
311
|
}
|
|
@@ -194,33 +343,21 @@ export function setUpCloudShellEnvironment(envFilePath) {
|
|
|
194
343
|
}
|
|
195
344
|
export function loadEnvironment(settings) {
|
|
196
345
|
const envFilePath = findEnvFile(process.cwd());
|
|
346
|
+
if (!isWorkspaceTrusted(settings)) {
|
|
347
|
+
return;
|
|
348
|
+
}
|
|
197
349
|
// Cloud Shell environment variable handling
|
|
198
350
|
if (process.env['CLOUD_SHELL'] === 'true') {
|
|
199
351
|
setUpCloudShellEnvironment(envFilePath);
|
|
200
352
|
}
|
|
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
353
|
if (envFilePath) {
|
|
217
354
|
// Manually parse and load environment variables to handle exclusions correctly.
|
|
218
355
|
// This avoids modifying environment variables that were already set from the shell.
|
|
219
356
|
try {
|
|
220
357
|
const envFileContent = fs.readFileSync(envFilePath, 'utf-8');
|
|
221
358
|
const parsedEnv = dotenv.parse(envFileContent);
|
|
222
|
-
const excludedVars =
|
|
223
|
-
const isProjectEnvFile = !envFilePath.includes(
|
|
359
|
+
const excludedVars = settings?.advanced?.excludedEnvVars || DEFAULT_EXCLUDED_ENV_VARS;
|
|
360
|
+
const isProjectEnvFile = !envFilePath.includes(CELL_DIR);
|
|
224
361
|
for (const key in parsedEnv) {
|
|
225
362
|
if (Object.hasOwn(parsedEnv, key)) {
|
|
226
363
|
// If it's a project .env file, skip loading excluded variables.
|
|
@@ -243,12 +380,15 @@ export function loadEnvironment(settings) {
|
|
|
243
380
|
* Loads settings from user and workspace directories.
|
|
244
381
|
* Project settings override user settings.
|
|
245
382
|
*/
|
|
246
|
-
export function loadSettings(workspaceDir) {
|
|
383
|
+
export function loadSettings(workspaceDir = process.cwd()) {
|
|
247
384
|
let systemSettings = {};
|
|
385
|
+
let systemDefaultSettings = {};
|
|
248
386
|
let userSettings = {};
|
|
249
387
|
let workspaceSettings = {};
|
|
250
388
|
const settingsErrors = [];
|
|
251
389
|
const systemSettingsPath = getSystemSettingsPath();
|
|
390
|
+
const systemDefaultsPath = getSystemDefaultsPath();
|
|
391
|
+
const migratedInMemorScopes = new Set();
|
|
252
392
|
// Resolve paths to their canonical representation to handle symlinks
|
|
253
393
|
const resolvedWorkspaceDir = path.resolve(workspaceDir);
|
|
254
394
|
const resolvedHomeDir = path.resolve(homedir());
|
|
@@ -262,7 +402,7 @@ export function loadSettings(workspaceDir) {
|
|
|
262
402
|
}
|
|
263
403
|
// We expect homedir to always exist and be resolvable.
|
|
264
404
|
const realHomeDir = fs.realpathSync(resolvedHomeDir);
|
|
265
|
-
const workspaceSettingsPath =
|
|
405
|
+
const workspaceSettingsPath = new Storage(workspaceDir).getWorkspaceSettingsPath();
|
|
266
406
|
// Load system settings
|
|
267
407
|
try {
|
|
268
408
|
if (fs.existsSync(systemSettingsPath)) {
|
|
@@ -281,13 +421,6 @@ export function loadSettings(workspaceDir) {
|
|
|
281
421
|
if (fs.existsSync(USER_SETTINGS_PATH)) {
|
|
282
422
|
const userContent = fs.readFileSync(USER_SETTINGS_PATH, 'utf-8');
|
|
283
423
|
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
424
|
}
|
|
292
425
|
}
|
|
293
426
|
catch (error) {
|
|
@@ -300,7 +433,7 @@ export function loadSettings(workspaceDir) {
|
|
|
300
433
|
const defaultMcpServerConfig = {
|
|
301
434
|
Cell: {
|
|
302
435
|
url: 'https://api.machina.ai/mcp/v1/cell/sse',
|
|
303
|
-
timeout:
|
|
436
|
+
timeout: 600000,
|
|
304
437
|
},
|
|
305
438
|
};
|
|
306
439
|
let settingsModified = false;
|
|
@@ -318,33 +451,79 @@ export function loadSettings(workspaceDir) {
|
|
|
318
451
|
settings: userSettings,
|
|
319
452
|
});
|
|
320
453
|
}
|
|
454
|
+
/*
|
|
321
455
|
// Load YAML config and merge
|
|
322
456
|
const yamlSettings = loadYamlConfig();
|
|
323
457
|
userSettings = { ...userSettings, ...yamlSettings };
|
|
324
|
-
|
|
325
|
-
|
|
458
|
+
*/
|
|
459
|
+
const loadAndMigrate = (filePath, scope) => {
|
|
326
460
|
try {
|
|
327
|
-
if (fs.existsSync(
|
|
328
|
-
const
|
|
329
|
-
|
|
330
|
-
if (
|
|
331
|
-
|
|
461
|
+
if (fs.existsSync(filePath)) {
|
|
462
|
+
const content = fs.readFileSync(filePath, 'utf-8');
|
|
463
|
+
const rawSettings = JSON.parse(stripJsonComments(content));
|
|
464
|
+
if (typeof rawSettings !== 'object' ||
|
|
465
|
+
rawSettings === null ||
|
|
466
|
+
Array.isArray(rawSettings)) {
|
|
467
|
+
settingsErrors.push({
|
|
468
|
+
message: 'Settings file is not a valid JSON object.',
|
|
469
|
+
path: filePath,
|
|
470
|
+
});
|
|
471
|
+
return {};
|
|
332
472
|
}
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
473
|
+
let settingsObject = rawSettings;
|
|
474
|
+
if (needsMigration(settingsObject)) {
|
|
475
|
+
const migratedSettings = migrateSettingsToV2(settingsObject);
|
|
476
|
+
if (migratedSettings) {
|
|
477
|
+
if (MIGRATE_V2_OVERWRITE) {
|
|
478
|
+
try {
|
|
479
|
+
fs.renameSync(filePath, `${filePath}.orig`);
|
|
480
|
+
fs.writeFileSync(filePath, JSON.stringify(migratedSettings, null, 2), 'utf-8');
|
|
481
|
+
}
|
|
482
|
+
catch (e) {
|
|
483
|
+
console.error(`Error migrating settings file on disk: ${getErrorMessage(e)}`);
|
|
484
|
+
}
|
|
485
|
+
}
|
|
486
|
+
else {
|
|
487
|
+
migratedInMemorScopes.add(scope);
|
|
488
|
+
}
|
|
489
|
+
settingsObject = migratedSettings;
|
|
490
|
+
}
|
|
336
491
|
}
|
|
492
|
+
return settingsObject;
|
|
337
493
|
}
|
|
338
494
|
}
|
|
339
495
|
catch (error) {
|
|
340
496
|
settingsErrors.push({
|
|
341
497
|
message: getErrorMessage(error),
|
|
342
|
-
path:
|
|
498
|
+
path: filePath,
|
|
343
499
|
});
|
|
344
500
|
}
|
|
501
|
+
return {};
|
|
502
|
+
};
|
|
503
|
+
systemSettings = loadAndMigrate(systemSettingsPath, SettingScope.System);
|
|
504
|
+
systemDefaultSettings = loadAndMigrate(systemDefaultsPath, SettingScope.SystemDefaults);
|
|
505
|
+
userSettings = loadAndMigrate(USER_SETTINGS_PATH, SettingScope.User);
|
|
506
|
+
if (realWorkspaceDir !== realHomeDir) {
|
|
507
|
+
workspaceSettings = loadAndMigrate(workspaceSettingsPath, SettingScope.Workspace);
|
|
345
508
|
}
|
|
509
|
+
// Support legacy theme names
|
|
510
|
+
if (userSettings.ui?.theme === 'VS') {
|
|
511
|
+
userSettings.ui.theme = DefaultLight.name;
|
|
512
|
+
}
|
|
513
|
+
else if (userSettings.ui?.theme === 'VS2015') {
|
|
514
|
+
userSettings.ui.theme = DefaultDark.name;
|
|
515
|
+
}
|
|
516
|
+
if (workspaceSettings.ui?.theme === 'VS') {
|
|
517
|
+
workspaceSettings.ui.theme = DefaultLight.name;
|
|
518
|
+
}
|
|
519
|
+
else if (workspaceSettings.ui?.theme === 'VS2015') {
|
|
520
|
+
workspaceSettings.ui.theme = DefaultDark.name;
|
|
521
|
+
}
|
|
522
|
+
// For the initial trust check, we can only use user and system settings.
|
|
523
|
+
const initialTrustCheckSettings = customDeepMerge(getMergeStrategyForPath, {}, systemSettings, userSettings);
|
|
524
|
+
const isTrusted = isWorkspaceTrusted(initialTrustCheckSettings) ?? true;
|
|
346
525
|
// Create a temporary merged settings object to pass to loadEnvironment.
|
|
347
|
-
const tempMergedSettings = mergeSettings(systemSettings, userSettings, workspaceSettings);
|
|
526
|
+
const tempMergedSettings = mergeSettings(systemSettings, systemDefaultSettings, userSettings, workspaceSettings, isTrusted);
|
|
348
527
|
// loadEnviroment depends on settings so we have to create a temp version of
|
|
349
528
|
// the settings to avoid a cycle
|
|
350
529
|
loadEnvironment(tempMergedSettings);
|
|
@@ -353,25 +532,23 @@ export function loadSettings(workspaceDir) {
|
|
|
353
532
|
userSettings = resolveEnvVarsInObject(userSettings);
|
|
354
533
|
workspaceSettings = resolveEnvVarsInObject(workspaceSettings);
|
|
355
534
|
// Create LoadedSettings first
|
|
356
|
-
|
|
535
|
+
if (settingsErrors.length > 0) {
|
|
536
|
+
const errorMessages = settingsErrors.map((error) => `Error in ${error.path}: ${error.message}`);
|
|
537
|
+
throw new FatalConfigError(`${errorMessages.join('\n')}\nPlease fix the configuration file(s) and try again.`);
|
|
538
|
+
}
|
|
539
|
+
return new LoadedSettings({
|
|
357
540
|
path: systemSettingsPath,
|
|
358
541
|
settings: systemSettings,
|
|
542
|
+
}, {
|
|
543
|
+
path: systemDefaultsPath,
|
|
544
|
+
settings: systemDefaultSettings,
|
|
359
545
|
}, {
|
|
360
546
|
path: USER_SETTINGS_PATH,
|
|
361
547
|
settings: userSettings,
|
|
362
548
|
}, {
|
|
363
549
|
path: workspaceSettingsPath,
|
|
364
550
|
settings: workspaceSettings,
|
|
365
|
-
},
|
|
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
|
-
}
|
|
374
|
-
return loadedSettings;
|
|
551
|
+
}, isTrusted, migratedInMemorScopes);
|
|
375
552
|
}
|
|
376
553
|
export function saveSettings(settingsFile) {
|
|
377
554
|
try {
|
|
@@ -380,7 +557,11 @@ export function saveSettings(settingsFile) {
|
|
|
380
557
|
if (!fs.existsSync(dirPath)) {
|
|
381
558
|
fs.mkdirSync(dirPath, { recursive: true });
|
|
382
559
|
}
|
|
383
|
-
|
|
560
|
+
let settingsToSave = settingsFile.settings;
|
|
561
|
+
if (!MIGRATE_V2_OVERWRITE) {
|
|
562
|
+
settingsToSave = migrateSettingsToV1(settingsToSave);
|
|
563
|
+
}
|
|
564
|
+
fs.writeFileSync(settingsFile.path, JSON.stringify(settingsToSave, null, 2), 'utf-8');
|
|
384
565
|
}
|
|
385
566
|
catch (error) {
|
|
386
567
|
console.error('Error saving user settings file:', error);
|