@vybestack/llxprt-code 0.5.0 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +0 -244
- package/dist/package.json +15 -6
- package/dist/src/auth/gemini-oauth-provider.d.ts +18 -0
- package/dist/src/auth/gemini-oauth-provider.js +140 -78
- package/dist/src/auth/gemini-oauth-provider.js.map +1 -1
- package/dist/src/auth/local-oauth-callback.spec.js +29 -2
- package/dist/src/auth/local-oauth-callback.spec.js.map +1 -1
- package/dist/src/commands/extensions/disable.d.ts +1 -2
- package/dist/src/commands/extensions/disable.js +15 -3
- package/dist/src/commands/extensions/disable.js.map +1 -1
- package/dist/src/commands/extensions/enable.d.ts +1 -2
- package/dist/src/commands/extensions/enable.js +17 -6
- package/dist/src/commands/extensions/enable.js.map +1 -1
- package/dist/src/commands/extensions/install.d.ts +3 -1
- package/dist/src/commands/extensions/install.js +63 -12
- package/dist/src/commands/extensions/install.js.map +1 -1
- package/dist/src/commands/extensions/install.test.js +166 -13
- package/dist/src/commands/extensions/install.test.js.map +1 -1
- package/dist/src/commands/extensions/link.js +2 -2
- package/dist/src/commands/extensions/link.js.map +1 -1
- package/dist/src/commands/extensions/list.d.ts +1 -1
- package/dist/src/commands/extensions/list.js +3 -2
- package/dist/src/commands/extensions/list.js.map +1 -1
- package/dist/src/commands/extensions/new.test.js +2 -2
- package/dist/src/commands/extensions/new.test.js.map +1 -1
- package/dist/src/commands/extensions/uninstall.js +1 -1
- package/dist/src/commands/extensions/uninstall.js.map +1 -1
- package/dist/src/commands/extensions/uninstall.test.js +4 -1
- package/dist/src/commands/extensions/uninstall.test.js.map +1 -1
- package/dist/src/commands/extensions/update.d.ts +2 -2
- package/dist/src/commands/extensions/update.js +68 -19
- package/dist/src/commands/extensions/update.js.map +1 -1
- package/dist/src/commands/mcp/add.js +6 -1
- package/dist/src/commands/mcp/add.js.map +1 -1
- package/dist/src/commands/mcp/list.js +3 -2
- package/dist/src/commands/mcp/list.js.map +1 -1
- package/dist/src/config/__tests__/profileBootstrap.test.js +1351 -1
- package/dist/src/config/__tests__/profileBootstrap.test.js.map +1 -1
- package/dist/src/config/config.d.ts +4 -1
- package/dist/src/config/config.js +172 -69
- package/dist/src/config/config.js.map +1 -1
- package/dist/src/config/config.loadMemory.test.js +6 -3
- package/dist/src/config/config.loadMemory.test.js.map +1 -1
- package/dist/src/config/extension.d.ts +48 -14
- package/dist/src/config/extension.js +263 -142
- package/dist/src/config/extension.js.map +1 -1
- package/dist/src/config/extensions/extensionEnablement.d.ts +47 -0
- package/dist/src/config/extensions/extensionEnablement.js +188 -0
- package/dist/src/config/extensions/extensionEnablement.js.map +1 -0
- package/dist/src/config/extensions/extensionEnablement.test.d.ts +6 -0
- package/dist/src/config/extensions/extensionEnablement.test.js +333 -0
- package/dist/src/config/extensions/extensionEnablement.test.js.map +1 -0
- package/dist/src/config/extensions/github.d.ts +37 -0
- package/dist/src/config/extensions/github.js +348 -0
- package/dist/src/config/extensions/github.js.map +1 -0
- package/dist/src/config/extensions/github.test.d.ts +6 -0
- package/dist/src/config/extensions/github.test.js +340 -0
- package/dist/src/config/extensions/github.test.js.map +1 -0
- package/dist/src/config/extensions/update.d.ts +19 -0
- package/dist/src/config/extensions/update.js +118 -0
- package/dist/src/config/extensions/update.js.map +1 -0
- package/dist/src/config/extensions/update.test.d.ts +6 -0
- package/dist/src/config/extensions/update.test.js +340 -0
- package/dist/src/config/extensions/update.test.js.map +1 -0
- package/dist/src/config/extensions/variableSchema.d.ts +8 -0
- package/dist/src/config/extensions/variableSchema.js +4 -0
- package/dist/src/config/extensions/variableSchema.js.map +1 -1
- package/dist/src/config/keyBindings.d.ts +1 -0
- package/dist/src/config/keyBindings.js +3 -1
- package/dist/src/config/keyBindings.js.map +1 -1
- package/dist/src/config/paths.d.ts +8 -0
- package/dist/src/config/paths.js +11 -0
- package/dist/src/config/paths.js.map +1 -0
- package/dist/src/config/profileBootstrap.d.ts +13 -0
- package/dist/src/config/profileBootstrap.js +369 -15
- package/dist/src/config/profileBootstrap.js.map +1 -1
- package/dist/src/config/settings.d.ts +14 -4
- package/dist/src/config/settings.js +161 -99
- package/dist/src/config/settings.js.map +1 -1
- package/dist/src/config/settingsSchema.d.ts +510 -216
- package/dist/src/config/settingsSchema.js +468 -214
- package/dist/src/config/settingsSchema.js.map +1 -1
- package/dist/src/config/settingsSchema.test.js +18 -31
- package/dist/src/config/settingsSchema.test.js.map +1 -1
- package/dist/src/config/trustedFolders.d.ts +6 -3
- package/dist/src/config/trustedFolders.js +35 -13
- package/dist/src/config/trustedFolders.js.map +1 -1
- package/dist/src/config/trustedFolders.test.js +83 -9
- package/dist/src/config/trustedFolders.test.js.map +1 -1
- package/dist/src/coreToolToggle.test.d.ts +6 -0
- package/dist/src/coreToolToggle.test.js +427 -0
- package/dist/src/coreToolToggle.test.js.map +1 -0
- package/dist/src/extensions/extensionAutoUpdater.d.ts +76 -0
- package/dist/src/extensions/extensionAutoUpdater.js +279 -0
- package/dist/src/extensions/extensionAutoUpdater.js.map +1 -0
- package/dist/src/extensions/extensionAutoUpdater.test.d.ts +6 -0
- package/dist/src/extensions/extensionAutoUpdater.test.js +146 -0
- package/dist/src/extensions/extensionAutoUpdater.test.js.map +1 -0
- package/dist/src/gemini.js +93 -63
- package/dist/src/gemini.js.map +1 -1
- package/dist/src/gemini.test.js +121 -1
- package/dist/src/gemini.test.js.map +1 -1
- package/dist/src/generated/git-commit.d.ts +1 -1
- package/dist/src/generated/git-commit.js +1 -1
- package/dist/src/generated/git-commit.js.map +1 -1
- package/dist/src/integration-tests/cli-args.integration.test.js +299 -0
- package/dist/src/integration-tests/cli-args.integration.test.js.map +1 -1
- package/dist/src/nonInteractiveCli.d.ts +2 -1
- package/dist/src/nonInteractiveCli.js +29 -16
- package/dist/src/nonInteractiveCli.js.map +1 -1
- package/dist/src/nonInteractiveCliCommands.d.ts +17 -0
- package/dist/src/nonInteractiveCliCommands.js +81 -0
- package/dist/src/nonInteractiveCliCommands.js.map +1 -0
- package/dist/src/runtime/runtimeSettings.test.js +2 -0
- package/dist/src/runtime/runtimeSettings.test.js.map +1 -1
- package/dist/src/services/BuiltinCommandLoader.d.ts +3 -3
- package/dist/src/services/BuiltinCommandLoader.js +7 -0
- package/dist/src/services/BuiltinCommandLoader.js.map +1 -1
- package/dist/src/services/BuiltinCommandLoader.test.js +37 -0
- package/dist/src/services/BuiltinCommandLoader.test.js.map +1 -1
- package/dist/src/services/McpPromptLoader.js +39 -34
- package/dist/src/services/McpPromptLoader.js.map +1 -1
- package/dist/src/settings/ephemeralSettings.js +56 -0
- package/dist/src/settings/ephemeralSettings.js.map +1 -1
- package/dist/src/test-utils/createExtension.d.ts +15 -0
- package/dist/src/test-utils/createExtension.js +24 -0
- package/dist/src/test-utils/createExtension.js.map +1 -0
- package/dist/src/test-utils/mockCommandContext.js +4 -2
- package/dist/src/test-utils/mockCommandContext.js.map +1 -1
- package/dist/src/test-utils/render.d.ts +3 -1
- package/dist/src/test-utils/render.js +4 -1
- package/dist/src/test-utils/render.js.map +1 -1
- package/dist/src/ui/App.d.ts +18 -3
- package/dist/src/ui/App.js +32 -873
- package/dist/src/ui/App.js.map +1 -1
- package/dist/src/ui/AppContainer.d.ts +19 -0
- package/dist/src/ui/AppContainer.js +1187 -0
- package/dist/src/ui/AppContainer.js.map +1 -0
- package/dist/src/ui/IdeIntegrationNudge.d.ts +2 -2
- package/dist/src/ui/IdeIntegrationNudge.js +4 -7
- package/dist/src/ui/IdeIntegrationNudge.js.map +1 -1
- package/dist/src/ui/commands/chatCommand.js +214 -58
- package/dist/src/ui/commands/chatCommand.js.map +1 -1
- package/dist/src/ui/commands/clearCommand.js +1 -2
- package/dist/src/ui/commands/clearCommand.js.map +1 -1
- package/dist/src/ui/commands/diagnosticsCommand.js +2 -2
- package/dist/src/ui/commands/diagnosticsCommand.js.map +1 -1
- package/dist/src/ui/commands/directoryCommand.js +3 -2
- package/dist/src/ui/commands/directoryCommand.js.map +1 -1
- package/dist/src/ui/commands/docsCommand.js +1 -1
- package/dist/src/ui/commands/docsCommand.js.map +1 -1
- package/dist/src/ui/commands/extensionsCommand.d.ts +1 -1
- package/dist/src/ui/commands/extensionsCommand.js +92 -17
- package/dist/src/ui/commands/extensionsCommand.js.map +1 -1
- package/dist/src/ui/commands/helpCommand.js +6 -5
- package/dist/src/ui/commands/helpCommand.js.map +1 -1
- package/dist/src/ui/commands/ideCommand.js +7 -7
- package/dist/src/ui/commands/ideCommand.js.map +1 -1
- package/dist/src/ui/commands/loggingCommand.js +1 -1
- package/dist/src/ui/commands/loggingCommand.js.map +1 -1
- package/dist/src/ui/commands/mcpCommand.js +11 -3
- package/dist/src/ui/commands/mcpCommand.js.map +1 -1
- package/dist/src/ui/commands/memoryCommand.js +21 -3
- package/dist/src/ui/commands/memoryCommand.js.map +1 -1
- package/dist/src/ui/commands/permissionsCommand.d.ts +7 -0
- package/dist/src/ui/commands/permissionsCommand.js +16 -0
- package/dist/src/ui/commands/permissionsCommand.js.map +1 -0
- package/dist/src/ui/commands/permissionsCommand.test.d.ts +6 -0
- package/dist/src/ui/commands/permissionsCommand.test.js +55 -0
- package/dist/src/ui/commands/permissionsCommand.test.js.map +1 -0
- package/dist/src/ui/commands/policiesCommand.d.ts +10 -0
- package/dist/src/ui/commands/policiesCommand.js +112 -0
- package/dist/src/ui/commands/policiesCommand.js.map +1 -0
- package/dist/src/ui/commands/policiesCommand.test.d.ts +6 -0
- package/dist/src/ui/commands/policiesCommand.test.js +224 -0
- package/dist/src/ui/commands/policiesCommand.test.js.map +1 -0
- package/dist/src/ui/commands/setCommand.js +105 -30
- package/dist/src/ui/commands/setCommand.js.map +1 -1
- package/dist/src/ui/commands/setCommand.test.js +1 -1
- package/dist/src/ui/commands/setCommand.test.js.map +1 -1
- package/dist/src/ui/commands/statsCommand.js +11 -1
- package/dist/src/ui/commands/statsCommand.js.map +1 -1
- package/dist/src/ui/commands/test/subagentCommand.test.js +6 -1
- package/dist/src/ui/commands/test/subagentCommand.test.js.map +1 -1
- package/dist/src/ui/commands/types.d.ts +19 -23
- package/dist/src/ui/commands/types.js +1 -1
- package/dist/src/ui/commands/types.js.map +1 -1
- package/dist/src/ui/commands/uiprofileCommand.d.ts +7 -0
- package/dist/src/ui/commands/uiprofileCommand.js +23 -0
- package/dist/src/ui/commands/uiprofileCommand.js.map +1 -0
- package/dist/src/ui/components/AuthDialog.js +4 -0
- package/dist/src/ui/components/AuthDialog.js.map +1 -1
- package/dist/src/ui/components/AuthDialog.test.js +32 -32
- package/dist/src/ui/components/AuthDialog.test.js.map +1 -1
- package/dist/src/ui/components/CacheStatsDisplay.d.ts +7 -0
- package/dist/src/ui/components/CacheStatsDisplay.js +35 -0
- package/dist/src/ui/components/CacheStatsDisplay.js.map +1 -0
- package/dist/src/ui/components/CacheStatsDisplay.test.d.ts +6 -0
- package/dist/src/ui/components/CacheStatsDisplay.test.js +118 -0
- package/dist/src/ui/components/CacheStatsDisplay.test.js.map +1 -0
- package/dist/src/ui/components/CliSpinner.d.ts +10 -0
- package/dist/src/ui/components/CliSpinner.js +20 -0
- package/dist/src/ui/components/CliSpinner.js.map +1 -0
- package/dist/src/ui/components/Composer.d.ts +17 -0
- package/dist/src/ui/components/Composer.js +16 -0
- package/dist/src/ui/components/Composer.js.map +1 -0
- package/dist/src/ui/components/ConsentPrompt.d.ts +13 -0
- package/dist/src/ui/components/ConsentPrompt.js +18 -0
- package/dist/src/ui/components/ConsentPrompt.js.map +1 -0
- package/dist/src/ui/components/ConsentPrompt.test.d.ts +6 -0
- package/dist/src/ui/components/ConsentPrompt.test.js +67 -0
- package/dist/src/ui/components/ConsentPrompt.test.js.map +1 -0
- package/dist/src/ui/components/DebugProfiler.d.ts +15 -0
- package/dist/src/ui/components/DebugProfiler.js +137 -13
- package/dist/src/ui/components/DebugProfiler.js.map +1 -1
- package/dist/src/ui/components/DebugProfiler.test.d.ts +6 -0
- package/dist/src/ui/components/DebugProfiler.test.js +131 -0
- package/dist/src/ui/components/DebugProfiler.test.js.map +1 -0
- package/dist/src/ui/components/DialogManager.d.ts +16 -0
- package/dist/src/ui/components/DialogManager.js +131 -0
- package/dist/src/ui/components/DialogManager.js.map +1 -0
- package/dist/src/ui/components/EditorSettingsDialog.js +18 -8
- package/dist/src/ui/components/EditorSettingsDialog.js.map +1 -1
- package/dist/src/ui/components/FolderTrustDialog.js +4 -0
- package/dist/src/ui/components/FolderTrustDialog.js.map +1 -1
- package/dist/src/ui/components/FolderTrustDialog.test.js +2 -2
- package/dist/src/ui/components/FolderTrustDialog.test.js.map +1 -1
- package/dist/src/ui/components/HistoryItemDisplay.d.ts +6 -2
- package/dist/src/ui/components/HistoryItemDisplay.js +10 -2
- package/dist/src/ui/components/HistoryItemDisplay.js.map +1 -1
- package/dist/src/ui/components/HistoryItemDisplay.test.js +90 -10
- package/dist/src/ui/components/HistoryItemDisplay.test.js.map +1 -1
- package/dist/src/ui/components/InputPrompt.d.ts +6 -0
- package/dist/src/ui/components/InputPrompt.js +52 -18
- package/dist/src/ui/components/InputPrompt.js.map +1 -1
- package/dist/src/ui/components/LoadProfileDialog.js +13 -9
- package/dist/src/ui/components/LoadProfileDialog.js.map +1 -1
- package/dist/src/ui/components/LoadingIndicator.js +1 -1
- package/dist/src/ui/components/LoadingIndicator.js.map +1 -1
- package/dist/src/ui/components/LoadingIndicator.test.js +6 -0
- package/dist/src/ui/components/LoadingIndicator.test.js.map +1 -1
- package/dist/src/ui/components/LoggingDialog.js +14 -10
- package/dist/src/ui/components/LoggingDialog.js.map +1 -1
- package/dist/src/ui/components/Notifications.d.ts +14 -0
- package/dist/src/ui/components/Notifications.js +34 -0
- package/dist/src/ui/components/Notifications.js.map +1 -0
- package/dist/src/ui/components/OAuthCodeDialog.js +2 -1
- package/dist/src/ui/components/OAuthCodeDialog.js.map +1 -1
- package/dist/src/ui/components/PermissionsModifyTrustDialog.d.ts +14 -0
- package/dist/src/ui/components/PermissionsModifyTrustDialog.js +115 -0
- package/dist/src/ui/components/PermissionsModifyTrustDialog.js.map +1 -0
- package/dist/src/ui/components/PermissionsModifyTrustDialog.test.d.ts +6 -0
- package/dist/src/ui/components/PermissionsModifyTrustDialog.test.js +98 -0
- package/dist/src/ui/components/PermissionsModifyTrustDialog.test.js.map +1 -0
- package/dist/src/ui/components/ProviderDialog.js +23 -18
- package/dist/src/ui/components/ProviderDialog.js.map +1 -1
- package/dist/src/ui/components/ProviderModelDialog.js +24 -18
- package/dist/src/ui/components/ProviderModelDialog.js.map +1 -1
- package/dist/src/ui/components/SettingsDialog.d.ts +12 -2
- package/dist/src/ui/components/SettingsDialog.js +253 -23
- package/dist/src/ui/components/SettingsDialog.js.map +1 -1
- package/dist/src/ui/components/SettingsDialog.test.js +90 -8
- package/dist/src/ui/components/SettingsDialog.test.js.map +1 -1
- package/dist/src/ui/components/ShellConfirmationDialog.js +3 -0
- package/dist/src/ui/components/ShellConfirmationDialog.js.map +1 -1
- package/dist/src/ui/components/ThemeDialog.js +6 -4
- package/dist/src/ui/components/ThemeDialog.js.map +1 -1
- package/dist/src/ui/components/ToolsDialog.js +6 -4
- package/dist/src/ui/components/ToolsDialog.js.map +1 -1
- package/dist/src/ui/components/WorkspaceMigrationDialog.js +5 -3
- package/dist/src/ui/components/WorkspaceMigrationDialog.js.map +1 -1
- package/dist/src/ui/components/messages/ToolConfirmationMessage.js +37 -6
- package/dist/src/ui/components/messages/ToolConfirmationMessage.js.map +1 -1
- package/dist/src/ui/components/messages/ToolConfirmationMessage.test.js +9 -0
- package/dist/src/ui/components/messages/ToolConfirmationMessage.test.js.map +1 -1
- package/dist/src/ui/components/messages/ToolGroupMessage.js +7 -3
- package/dist/src/ui/components/messages/ToolGroupMessage.js.map +1 -1
- package/dist/src/ui/components/messages/ToolMessage.js +7 -3
- package/dist/src/ui/components/messages/ToolMessage.js.map +1 -1
- package/dist/src/ui/components/messages/WarningMessage.d.ts +11 -0
- package/dist/src/ui/components/messages/WarningMessage.js +10 -0
- package/dist/src/ui/components/messages/WarningMessage.js.map +1 -0
- package/dist/src/ui/components/messages/WarningMessage.test.d.ts +6 -0
- package/dist/src/ui/components/messages/WarningMessage.test.js +15 -0
- package/dist/src/ui/components/messages/WarningMessage.test.js.map +1 -0
- package/dist/src/ui/components/shared/BaseSelectionList.d.ts +38 -0
- package/dist/src/ui/components/shared/BaseSelectionList.js +76 -0
- package/dist/src/ui/components/shared/BaseSelectionList.js.map +1 -0
- package/dist/src/ui/components/shared/BaseSelectionList.test.d.ts +6 -0
- package/dist/src/ui/components/shared/BaseSelectionList.test.js +376 -0
- package/dist/src/ui/components/shared/BaseSelectionList.test.js.map +1 -0
- package/dist/src/ui/components/shared/RadioButtonSelect.d.ts +4 -5
- package/dist/src/ui/components/shared/RadioButtonSelect.js +11 -117
- package/dist/src/ui/components/shared/RadioButtonSelect.js.map +1 -1
- package/dist/src/ui/components/shared/RadioButtonSelect.test.d.ts +1 -1
- package/dist/src/ui/components/shared/RadioButtonSelect.test.js +116 -95
- package/dist/src/ui/components/shared/RadioButtonSelect.test.js.map +1 -1
- package/dist/src/ui/components/shared/text-buffer.d.ts +6 -0
- package/dist/src/ui/components/shared/text-buffer.js +71 -4
- package/dist/src/ui/components/shared/text-buffer.js.map +1 -1
- package/dist/src/ui/components/views/ChatList.d.ts +12 -0
- package/dist/src/ui/components/views/ChatList.js +17 -0
- package/dist/src/ui/components/views/ChatList.js.map +1 -0
- package/dist/src/ui/components/views/ChatList.test.d.ts +6 -0
- package/dist/src/ui/components/views/ChatList.test.js +42 -0
- package/dist/src/ui/components/views/ChatList.test.js.map +1 -0
- package/dist/src/ui/constants.d.ts +1 -0
- package/dist/src/ui/constants.js +1 -0
- package/dist/src/ui/constants.js.map +1 -1
- package/dist/src/ui/contexts/FocusContext.d.ts +7 -0
- package/dist/src/ui/contexts/FocusContext.js +9 -0
- package/dist/src/ui/contexts/FocusContext.js.map +1 -0
- package/dist/src/ui/contexts/KeypressContext.d.ts +1 -1
- package/dist/src/ui/contexts/KeypressContext.js +63 -4
- package/dist/src/ui/contexts/KeypressContext.js.map +1 -1
- package/dist/src/ui/contexts/KeypressContext.test.js +156 -0
- package/dist/src/ui/contexts/KeypressContext.test.js.map +1 -1
- package/dist/src/ui/contexts/SessionContext.d.ts +6 -0
- package/dist/src/ui/contexts/SessionContext.js +107 -5
- package/dist/src/ui/contexts/SessionContext.js.map +1 -1
- package/dist/src/ui/contexts/UIActionsContext.d.ts +82 -0
- package/dist/src/ui/contexts/UIActionsContext.js +20 -0
- package/dist/src/ui/contexts/UIActionsContext.js.map +1 -0
- package/dist/src/ui/contexts/UIStateContext.d.ts +121 -0
- package/dist/src/ui/contexts/UIStateContext.js +20 -0
- package/dist/src/ui/contexts/UIStateContext.js.map +1 -0
- package/dist/src/ui/contexts/VimModeContext.js +4 -4
- package/dist/src/ui/contexts/VimModeContext.js.map +1 -1
- package/dist/src/ui/hooks/slashCommandProcessor.d.ts +29 -6
- package/dist/src/ui/hooks/slashCommandProcessor.js +150 -155
- package/dist/src/ui/hooks/slashCommandProcessor.js.map +1 -1
- package/dist/src/ui/hooks/useBracketedPaste.js +3 -4
- package/dist/src/ui/hooks/useBracketedPaste.js.map +1 -1
- package/dist/src/ui/hooks/useEditorSettings.js +1 -1
- package/dist/src/ui/hooks/useEditorSettings.js.map +1 -1
- package/dist/src/ui/hooks/useExtensionAutoUpdate.d.ts +13 -0
- package/dist/src/ui/hooks/useExtensionAutoUpdate.js +40 -0
- package/dist/src/ui/hooks/useExtensionAutoUpdate.js.map +1 -0
- package/dist/src/ui/hooks/useExtensionUpdates.d.ts +21 -0
- package/dist/src/ui/hooks/useExtensionUpdates.js +168 -0
- package/dist/src/ui/hooks/useExtensionUpdates.js.map +1 -0
- package/dist/src/ui/hooks/useExtensionUpdates.test.d.ts +6 -0
- package/dist/src/ui/hooks/useExtensionUpdates.test.js +243 -0
- package/dist/src/ui/hooks/useExtensionUpdates.test.js.map +1 -0
- package/dist/src/ui/hooks/useFlickerDetector.d.ts +22 -0
- package/dist/src/ui/hooks/useFlickerDetector.js +38 -0
- package/dist/src/ui/hooks/useFlickerDetector.js.map +1 -0
- package/dist/src/ui/hooks/useFlickerDetector.test.d.ts +6 -0
- package/dist/src/ui/hooks/useFlickerDetector.test.js +142 -0
- package/dist/src/ui/hooks/useFlickerDetector.test.js.map +1 -0
- package/dist/src/ui/hooks/useGeminiStream.d.ts +1 -1
- package/dist/src/ui/hooks/useGeminiStream.integration.test.js +1 -1
- package/dist/src/ui/hooks/useGeminiStream.integration.test.js.map +1 -1
- package/dist/src/ui/hooks/useGeminiStream.js +41 -18
- package/dist/src/ui/hooks/useGeminiStream.js.map +1 -1
- package/dist/src/ui/hooks/useMemoryMonitor.d.ts +13 -0
- package/dist/src/ui/hooks/useMemoryMonitor.js +28 -0
- package/dist/src/ui/hooks/useMemoryMonitor.js.map +1 -0
- package/dist/src/ui/hooks/usePermissionsModifyTrust.d.ts +34 -0
- package/dist/src/ui/hooks/usePermissionsModifyTrust.js +90 -0
- package/dist/src/ui/hooks/usePermissionsModifyTrust.js.map +1 -0
- package/dist/src/ui/hooks/usePermissionsModifyTrust.test.d.ts +6 -0
- package/dist/src/ui/hooks/usePermissionsModifyTrust.test.js +60 -0
- package/dist/src/ui/hooks/usePermissionsModifyTrust.test.js.map +1 -0
- package/dist/src/ui/hooks/useReactToolScheduler.d.ts +1 -1
- package/dist/src/ui/hooks/useReactToolScheduler.js +5 -1
- package/dist/src/ui/hooks/useReactToolScheduler.js.map +1 -1
- package/dist/src/ui/hooks/useSelectionList.d.ts +34 -0
- package/dist/src/ui/hooks/useSelectionList.js +292 -0
- package/dist/src/ui/hooks/useSelectionList.js.map +1 -0
- package/dist/src/ui/hooks/useSelectionList.test.d.ts +6 -0
- package/dist/src/ui/hooks/useSelectionList.test.js +726 -0
- package/dist/src/ui/hooks/useSelectionList.test.js.map +1 -0
- package/dist/src/ui/hooks/useShowMemoryCommand.js +1 -1
- package/dist/src/ui/hooks/useShowMemoryCommand.js.map +1 -1
- package/dist/src/ui/hooks/useStateAndRef.d.ts +1 -1
- package/dist/src/ui/hooks/useStateAndRef.js +2 -2
- package/dist/src/ui/hooks/useStateAndRef.js.map +1 -1
- package/dist/src/ui/hooks/useStaticHistoryRefresh.d.ts +13 -0
- package/dist/src/ui/hooks/useStaticHistoryRefresh.js +35 -0
- package/dist/src/ui/hooks/useStaticHistoryRefresh.js.map +1 -0
- package/dist/src/ui/hooks/useStaticHistoryRefresh.test.d.ts +6 -0
- package/dist/src/ui/hooks/useStaticHistoryRefresh.test.js +42 -0
- package/dist/src/ui/hooks/useStaticHistoryRefresh.test.js.map +1 -0
- package/dist/src/ui/hooks/useThemeCommand.js +7 -7
- package/dist/src/ui/hooks/useThemeCommand.js.map +1 -1
- package/dist/src/ui/hooks/useToolScheduler.test.js +17 -20
- package/dist/src/ui/hooks/useToolScheduler.test.js.map +1 -1
- package/dist/src/ui/keyMatchers.test.js +6 -0
- package/dist/src/ui/keyMatchers.test.js.map +1 -1
- package/dist/src/ui/layouts/DefaultAppLayout.d.ts +23 -0
- package/dist/src/ui/layouts/DefaultAppLayout.js +76 -0
- package/dist/src/ui/layouts/DefaultAppLayout.js.map +1 -0
- package/dist/src/ui/noninteractive/nonInteractiveUi.d.ts +12 -0
- package/dist/src/ui/noninteractive/nonInteractiveUi.js +31 -0
- package/dist/src/ui/noninteractive/nonInteractiveUi.js.map +1 -0
- package/dist/src/ui/privacy/CloudFreePrivacyNotice.js +2 -2
- package/dist/src/ui/privacy/CloudFreePrivacyNotice.js.map +1 -1
- package/dist/src/ui/privacy/MultiProviderPrivacyNotice.d.ts +11 -0
- package/dist/src/ui/privacy/MultiProviderPrivacyNotice.js +92 -0
- package/dist/src/ui/privacy/MultiProviderPrivacyNotice.js.map +1 -0
- package/dist/src/ui/privacy/MultiProviderPrivacyNotice.test.d.ts +6 -0
- package/dist/src/ui/privacy/MultiProviderPrivacyNotice.test.js +106 -0
- package/dist/src/ui/privacy/MultiProviderPrivacyNotice.test.js.map +1 -0
- package/dist/src/ui/privacy/PrivacyNotice.js +4 -9
- package/dist/src/ui/privacy/PrivacyNotice.js.map +1 -1
- package/dist/src/ui/state/extensions.d.ts +61 -0
- package/dist/src/ui/state/extensions.js +84 -0
- package/dist/src/ui/state/extensions.js.map +1 -0
- package/dist/src/ui/themes/theme.js +2 -2
- package/dist/src/ui/themes/theme.js.map +1 -1
- package/dist/src/ui/types.d.ts +58 -2
- package/dist/src/ui/types.js +6 -0
- package/dist/src/ui/types.js.map +1 -1
- package/dist/src/ui/utils/MarkdownDisplay.js +1 -2
- package/dist/src/ui/utils/MarkdownDisplay.js.map +1 -1
- package/dist/src/ui/utils/MarkdownDisplay.test.d.ts +1 -1
- package/dist/src/ui/utils/MarkdownDisplay.test.js +94 -104
- package/dist/src/ui/utils/MarkdownDisplay.test.js.map +1 -1
- package/dist/src/ui/utils/bracketedPaste.d.ts +9 -0
- package/dist/src/ui/utils/bracketedPaste.js +14 -0
- package/dist/src/ui/utils/bracketedPaste.js.map +1 -0
- package/dist/src/ui/utils/displayUtils.d.ts +1 -0
- package/dist/src/ui/utils/displayUtils.js +4 -1
- package/dist/src/ui/utils/displayUtils.js.map +1 -1
- package/dist/src/ui/utils/displayUtils.test.js +36 -17
- package/dist/src/ui/utils/displayUtils.test.js.map +1 -1
- package/dist/src/ui/utils/highlight.d.ts +2 -1
- package/dist/src/ui/utils/highlight.js +52 -8
- package/dist/src/ui/utils/highlight.js.map +1 -1
- package/dist/src/ui/utils/highlight.test.js +15 -14
- package/dist/src/ui/utils/highlight.test.js.map +1 -1
- package/dist/src/ui/utils/kittyProtocolDetector.d.ts +1 -0
- package/dist/src/ui/utils/kittyProtocolDetector.js +11 -3
- package/dist/src/ui/utils/kittyProtocolDetector.js.map +1 -1
- package/dist/src/ui/utils/terminalSequences.d.ts +22 -0
- package/dist/src/ui/utils/terminalSequences.js +23 -0
- package/dist/src/ui/utils/terminalSequences.js.map +1 -0
- package/dist/src/ui/utils/textUtils.d.ts +10 -0
- package/dist/src/ui/utils/textUtils.js +82 -1
- package/dist/src/ui/utils/textUtils.js.map +1 -1
- package/dist/src/ui/utils/textUtils.test.d.ts +6 -0
- package/dist/src/ui/utils/textUtils.test.js +132 -0
- package/dist/src/ui/utils/textUtils.test.js.map +1 -0
- package/dist/src/utils/bootstrap.d.ts +24 -0
- package/dist/src/utils/bootstrap.js +55 -0
- package/dist/src/utils/bootstrap.js.map +1 -0
- package/dist/src/utils/bootstrap.test.d.ts +6 -0
- package/dist/src/utils/bootstrap.test.js +103 -0
- package/dist/src/utils/bootstrap.test.js.map +1 -0
- package/dist/src/utils/cleanup.d.ts +6 -0
- package/dist/src/utils/cleanup.js +14 -0
- package/dist/src/utils/cleanup.js.map +1 -1
- package/dist/src/utils/commands.d.ts +17 -0
- package/dist/src/utils/commands.js +60 -0
- package/dist/src/utils/commands.js.map +1 -0
- package/dist/src/utils/dialogScopeUtils.d.ts +3 -0
- package/dist/src/utils/dialogScopeUtils.js +11 -2
- package/dist/src/utils/dialogScopeUtils.js.map +1 -1
- package/dist/src/utils/dynamicSettings.d.ts +20 -0
- package/dist/src/utils/dynamicSettings.js +110 -0
- package/dist/src/utils/dynamicSettings.js.map +1 -0
- package/dist/src/utils/dynamicSettings.test.d.ts +6 -0
- package/dist/src/utils/dynamicSettings.test.js +329 -0
- package/dist/src/utils/dynamicSettings.test.js.map +1 -0
- package/dist/src/utils/events.d.ts +3 -1
- package/dist/src/utils/events.js +2 -0
- package/dist/src/utils/events.js.map +1 -1
- package/dist/src/utils/handleAutoUpdate.js +4 -1
- package/dist/src/utils/handleAutoUpdate.js.map +1 -1
- package/dist/src/utils/installationInfo.d.ts +1 -0
- package/dist/src/utils/installationInfo.js +5 -3
- package/dist/src/utils/installationInfo.js.map +1 -1
- package/dist/src/utils/relaunch.d.ts +16 -0
- package/dist/src/utils/relaunch.js +34 -0
- package/dist/src/utils/relaunch.js.map +1 -0
- package/dist/src/utils/relaunch.test.d.ts +6 -0
- package/dist/src/utils/relaunch.test.js +96 -0
- package/dist/src/utils/relaunch.test.js.map +1 -0
- package/dist/src/utils/sessionCleanup.d.ts +22 -0
- package/dist/src/utils/sessionCleanup.integration.test.d.ts +6 -0
- package/dist/src/utils/sessionCleanup.integration.test.js +174 -0
- package/dist/src/utils/sessionCleanup.integration.test.js.map +1 -0
- package/dist/src/utils/sessionCleanup.js +213 -0
- package/dist/src/utils/sessionCleanup.js.map +1 -0
- package/dist/src/utils/sessionCleanup.test.d.ts +6 -0
- package/dist/src/utils/sessionCleanup.test.js +1144 -0
- package/dist/src/utils/sessionCleanup.test.js.map +1 -0
- package/dist/src/utils/sessionUtils.d.ts +37 -0
- package/dist/src/utils/sessionUtils.js +71 -0
- package/dist/src/utils/sessionUtils.js.map +1 -0
- package/dist/src/utils/settingsUtils.d.ts +6 -3
- package/dist/src/utils/settingsUtils.js +39 -11
- package/dist/src/utils/settingsUtils.js.map +1 -1
- package/dist/src/utils/settingsUtils.test.js +96 -96
- package/dist/src/utils/settingsUtils.test.js.map +1 -1
- package/dist/src/utils/singleSettingSaver.js +5 -0
- package/dist/src/utils/singleSettingSaver.js.map +1 -1
- package/dist/src/utils/windowTitle.d.ts +12 -0
- package/dist/src/utils/windowTitle.js +19 -0
- package/dist/src/utils/windowTitle.js.map +1 -0
- package/dist/src/utils/windowTitle.test.d.ts +6 -0
- package/dist/src/utils/windowTitle.test.js +49 -0
- package/dist/src/utils/windowTitle.test.js.map +1 -0
- package/dist/src/zed-integration/acp.js +1 -2
- package/dist/src/zed-integration/acp.js.map +1 -1
- package/dist/src/zed-integration/fileSystemService.d.ts +1 -0
- package/dist/src/zed-integration/fileSystemService.js +3 -0
- package/dist/src/zed-integration/fileSystemService.js.map +1 -1
- package/dist/src/zed-integration/schema.d.ts +212 -212
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +15 -6
- package/dist/src/ui/App.quittingMessages.test.d.ts +0 -1
- package/dist/src/ui/App.quittingMessages.test.js +0 -14
- package/dist/src/ui/App.quittingMessages.test.js.map +0 -1
package/README.md
CHANGED
|
@@ -1,244 +0,0 @@
|
|
|
1
|
-
# LLxprt Code
|
|
2
|
-
|
|
3
|
-
[](https://github.com/vybestack/llxprt-code/actions/workflows/ci.yml)
|
|
4
|
-
[](https://github.com/Piebald-AI/awesome-gemini-cli) [](https://discord.gg/Wc6dZqWWYv) 
|
|
5
|
-
|
|
6
|
-

|
|
7
|
-
|
|
8
|
-
**AI-powered coding assistant that works with any LLM provider.** Command-line interface for querying and editing codebases, generating applications, and automating development workflows.
|
|
9
|
-
|
|
10
|
-
## Free & Subscription Options
|
|
11
|
-
|
|
12
|
-
Get started immediately with powerful LLM options:
|
|
13
|
-
|
|
14
|
-
```bash
|
|
15
|
-
# Free Gemini models
|
|
16
|
-
/auth gemini enable
|
|
17
|
-
/provider gemini
|
|
18
|
-
/model gemini-2.5-flash
|
|
19
|
-
|
|
20
|
-
# Free Qwen models
|
|
21
|
-
/auth qwen enable
|
|
22
|
-
/provider qwen
|
|
23
|
-
/model qwen-3-coder
|
|
24
|
-
|
|
25
|
-
# Your Claude Pro / Max subscription
|
|
26
|
-
/auth anthropic enable
|
|
27
|
-
/provider anthropic
|
|
28
|
-
/model claude-sonnet-4-5
|
|
29
|
-
```
|
|
30
|
-
|
|
31
|
-
## Why Choose LLxprt Code?
|
|
32
|
-
|
|
33
|
-
- **Free Tier Support**: Start coding immediately with Gemini, Qwen, or your existing Claude account
|
|
34
|
-
- **Provider Flexibility**: Switch between any Anthropic, Gemini, or OpenAI-compatible provider
|
|
35
|
-
- **Top Open Models**: Works seamlessly with GLM 4.6, MiniMax-2, and Qwen 3 Coder
|
|
36
|
-
- **Local Models**: Run models locally with LM Studio, llama.cpp for complete privacy
|
|
37
|
-
- **Privacy First**: No telemetry by default, local processing available
|
|
38
|
-
- **Subagent Flexibility**: Create agents with different models, providers, or settings
|
|
39
|
-
- **[ACTION] Real-time**: Interactive REPL with beautiful themes
|
|
40
|
-
- **Zed Integration**: Native Zed editor integration for seamless workflow
|
|
41
|
-
|
|
42
|
-
```bash
|
|
43
|
-
# Install and get started
|
|
44
|
-
npm install -g @vybestack/llxprt-code
|
|
45
|
-
llxprt
|
|
46
|
-
|
|
47
|
-
# Try without installing
|
|
48
|
-
npx @vybestack/llxprt-code --provider synthetic --model hf:zai-org/GLM-4.6 --keyfile ~/.synthetic_key "simplify the README.md"
|
|
49
|
-
```
|
|
50
|
-
|
|
51
|
-
## What is LLxprt Code?
|
|
52
|
-
|
|
53
|
-
LLxprt Code is a command-line AI assistant designed for developers who want powerful LLM capabilities without leaving their terminal. Unlike GitHub Copilot or ChatGPT, LLxprt Code works with **any provider** and can run **locally** for complete privacy.
|
|
54
|
-
|
|
55
|
-
**Key differences:**
|
|
56
|
-
|
|
57
|
-
- **Open source & community driven**: Not locked into proprietary ecosystems
|
|
58
|
-
- **Provider agnostic**: Not locked into one AI service
|
|
59
|
-
- **Local-first**: Run entirely offline if needed
|
|
60
|
-
- **Developer-centric**: Built specifically for coding workflows
|
|
61
|
-
- **Terminal native**: Designed for CLI workflows, not web interfaces
|
|
62
|
-
|
|
63
|
-
## Quick Start
|
|
64
|
-
|
|
65
|
-
1. **Prerequisites:** Node.js 20+ installed
|
|
66
|
-
2. **Install:**
|
|
67
|
-
```bash
|
|
68
|
-
npm install -g @vybestack/llxprt-code
|
|
69
|
-
# Or try without installing:
|
|
70
|
-
npx @vybestack/llxprt-code
|
|
71
|
-
```
|
|
72
|
-
3. **Run:** `llxprt`
|
|
73
|
-
4. **Choose provider:** Use `/provider` to select your preferred LLM service
|
|
74
|
-
5. **Start coding:** Ask questions, generate code, or analyze projects
|
|
75
|
-
|
|
76
|
-
**First session example:**
|
|
77
|
-
|
|
78
|
-
```bash
|
|
79
|
-
cd your-project/
|
|
80
|
-
llxprt
|
|
81
|
-
> Explain the architecture of this codebase and suggest improvements
|
|
82
|
-
> Create a test file for the user authentication module
|
|
83
|
-
> Help me debug this error: [paste error message]
|
|
84
|
-
```
|
|
85
|
-
|
|
86
|
-
## Key Features
|
|
87
|
-
|
|
88
|
-
- **Free & Subscription Options** - Gemini, Qwen (free), Claude Pro/Max (subscription)
|
|
89
|
-
- **Extensive Provider Support** - Any Anthropic, Gemini, or OpenAI-compatible provider [**Provider Guide →**](./docs/providers/quick-reference.md)
|
|
90
|
-
- **Top Open Models** - GLM 4.6, MiniMax-2, Qwen 3 Coder
|
|
91
|
-
- **Local Model Support** - LM Studio, llama.cpp, Ollama for complete privacy
|
|
92
|
-
- **Profile System** - Save provider configurations and model settings
|
|
93
|
-
- **Advanced Subagents** - Isolated AI assistants with different models/providers
|
|
94
|
-
- **MCP Integration** - Connect to external tools and services
|
|
95
|
-
- **Beautiful Terminal UI** - Multiple themes with syntax highlighting
|
|
96
|
-
|
|
97
|
-
## Interactive vs Non-Interactive Workflows
|
|
98
|
-
|
|
99
|
-
**Interactive Mode (REPL):**
|
|
100
|
-
Perfect for exploration, rapid prototyping, and iterative development:
|
|
101
|
-
|
|
102
|
-
```bash
|
|
103
|
-
# Start interactive session
|
|
104
|
-
llxprt
|
|
105
|
-
|
|
106
|
-
> Explore this codebase and suggest improvements
|
|
107
|
-
> Create a REST API endpoint with tests
|
|
108
|
-
> Debug this authentication issue
|
|
109
|
-
> Optimize this database query
|
|
110
|
-
```
|
|
111
|
-
|
|
112
|
-
**Non-Interactive Mode:**
|
|
113
|
-
Ideal for automation, CI/CD, and scripted workflows:
|
|
114
|
-
|
|
115
|
-
```bash
|
|
116
|
-
# Single command with immediate response
|
|
117
|
-
llxprt --profile-load zai-glm46 "Refactor this function for better readability"
|
|
118
|
-
llxprt "Generate unit tests for payment module" > tests/payment.test.js
|
|
119
|
-
```
|
|
120
|
-
|
|
121
|
-
## Top Open Weight Models
|
|
122
|
-
|
|
123
|
-
LLxprt Code works seamlessly with the best open-weight models:
|
|
124
|
-
|
|
125
|
-
### GLM 4.6
|
|
126
|
-
|
|
127
|
-
- **Context Window**: 200,000 tokens
|
|
128
|
-
- **Architecture**: Mixture-of-Experts with 355B total parameters (32B active)
|
|
129
|
-
- **Strengths**: Coding, multi-step planning, tool integration
|
|
130
|
-
- **15% fewer tokens** for equivalent tasks vs previous generation
|
|
131
|
-
|
|
132
|
-
### MiniMax-2
|
|
133
|
-
|
|
134
|
-
- **Context Window**: ~204,800 tokens
|
|
135
|
-
- **Architecture**: MoE with 230B total parameters (10B active)
|
|
136
|
-
- **Strengths**: Coding workflows, multi-step agents, tool calling
|
|
137
|
-
- **Cost**: Only 8% of Claude Sonnet, ~2x faster
|
|
138
|
-
|
|
139
|
-
### Qwen 3 Coder
|
|
140
|
-
|
|
141
|
-
- **Context Window**: 256,000 tokens (extendable to 1M)
|
|
142
|
-
- **Architecture**: MoE with 480B total parameters (35B active)
|
|
143
|
-
- **Strengths**: Agentic coding, browser automation, tool usage
|
|
144
|
-
- **Performance**: State-of-the-art on SWE-bench Verified (69.6%)
|
|
145
|
-
|
|
146
|
-
## Local Models
|
|
147
|
-
|
|
148
|
-
Run models completely offline for maximum privacy:
|
|
149
|
-
|
|
150
|
-
```bash
|
|
151
|
-
# With LM Studio
|
|
152
|
-
/provider openai
|
|
153
|
-
/baseurl http://localhost:1234/v1/
|
|
154
|
-
/model your-local-model
|
|
155
|
-
|
|
156
|
-
# With Ollama
|
|
157
|
-
/provider ollama
|
|
158
|
-
/model codellama:13b
|
|
159
|
-
```
|
|
160
|
-
|
|
161
|
-
Supported local providers:
|
|
162
|
-
|
|
163
|
-
- **LM Studio**: Easy Windows/Mac/Linux setup
|
|
164
|
-
- **llama.cpp**: Maximum performance and control
|
|
165
|
-
- **Ollama**: Simple model management
|
|
166
|
-
- **Any OpenAI-compatible API**: Full flexibility
|
|
167
|
-
|
|
168
|
-
## Advanced Subagents
|
|
169
|
-
|
|
170
|
-
Create specialized AI assistants with isolated contexts and different configurations:
|
|
171
|
-
|
|
172
|
-
```bash
|
|
173
|
-
# Subagents run with custom profiles and tool access
|
|
174
|
-
# Access via the commands interface
|
|
175
|
-
/subagent list
|
|
176
|
-
/subagent create <name>
|
|
177
|
-
```
|
|
178
|
-
|
|
179
|
-
Each subagent can be configured with:
|
|
180
|
-
|
|
181
|
-
- **Different providers** (Gemini vs Anthropic vs Qwen vs Local)
|
|
182
|
-
- **Different models** (Flash vs Sonnet vs GLM 4.6 vs Custom)
|
|
183
|
-
- **Different tool access** (Restrict or allow specific tools)
|
|
184
|
-
- **Different settings** (Temperature, timeouts, max turns)
|
|
185
|
-
- **Isolated runtime context** (No memory or state crossover)
|
|
186
|
-
|
|
187
|
-
Subagents are designed for:
|
|
188
|
-
|
|
189
|
-
- **Specialized tasks** (Code review, debugging, documentation)
|
|
190
|
-
- **Different expertise areas** (Frontend vs Backend vs DevOps)
|
|
191
|
-
- **Tool-limited environments** (Read-only analysis vs Full development)
|
|
192
|
-
- **Experimental configurations** (Testing new models or settings)
|
|
193
|
-
|
|
194
|
-
**[Full Subagent Documentation →](./docs/subagents.md)**
|
|
195
|
-
|
|
196
|
-
## Zed Integration
|
|
197
|
-
|
|
198
|
-
Native Zed editor support for seamless development workflow:
|
|
199
|
-
|
|
200
|
-
```bash
|
|
201
|
-
# Install Zed extension
|
|
202
|
-
zed:install llxprt-code
|
|
203
|
-
|
|
204
|
-
# Use within Zed
|
|
205
|
-
# (See docs for Zed integration setup)
|
|
206
|
-
```
|
|
207
|
-
|
|
208
|
-
Features:
|
|
209
|
-
|
|
210
|
-
- **In-editor chat**: Direct AI interaction without leaving Zed
|
|
211
|
-
- **Code selection**: Ask about specific code selections
|
|
212
|
-
- **Inline suggestions**: Get AI help while typing
|
|
213
|
-
- **Project awareness**: Full context of your open workspace
|
|
214
|
-
|
|
215
|
-
** [Zed Integration Guide →](./docs/zed-integration.md)**
|
|
216
|
-
|
|
217
|
-
** [Complete Provider Guide →](./docs/cli/providers.md)**
|
|
218
|
-
|
|
219
|
-
## Advanced Features
|
|
220
|
-
|
|
221
|
-
- **Settings & Profiles**: Fine-tune model parameters and save configurations
|
|
222
|
-
- **Subagents**: Create specialized assistants for different tasks
|
|
223
|
-
- **MCP Servers**: Connect external tools and data sources
|
|
224
|
-
- **Checkpointing**: Save and resume complex conversations
|
|
225
|
-
- **IDE Integration**: Connect to VS Code and other editors
|
|
226
|
-
|
|
227
|
-
** [Full Documentation →](./docs/index.md)**
|
|
228
|
-
|
|
229
|
-
## Migration & Resources
|
|
230
|
-
|
|
231
|
-
- **From Gemini CLI**: [Migration Guide](./docs/gemini-cli-tips.md)
|
|
232
|
-
- **Local Models Setup**: [Local Models Guide](./docs/local-models.md)
|
|
233
|
-
- **Command Reference**: [CLI Commands](./docs/cli/commands.md)
|
|
234
|
-
- **Troubleshooting**: [Common Issues](./docs/troubleshooting.md)
|
|
235
|
-
|
|
236
|
-
## Privacy & Terms
|
|
237
|
-
|
|
238
|
-
LLxprt Code does not collect telemetry by default. Your data stays with you unless you choose to send it to external AI providers.
|
|
239
|
-
|
|
240
|
-
When using external services, their respective terms of service apply:
|
|
241
|
-
|
|
242
|
-
- [OpenAI Terms](https://openai.com/policies/terms-of-use)
|
|
243
|
-
- [Anthropic Terms](https://www.anthropic.com/legal/terms)
|
|
244
|
-
- [Google Terms](https://policies.google.com/terms)
|
package/dist/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vybestack/llxprt-code",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.6.0",
|
|
4
4
|
"description": "LLxprt Code",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
"test:integration": "vitest run -c vitest.integration.config.ts",
|
|
23
23
|
"test:ci:covered": "vitest run -c vitest.ci.covered.config.ts",
|
|
24
24
|
"test:ci:fast": "vitest run -c vitest.ci.fast.config.ts",
|
|
25
|
-
"test:ci": "
|
|
25
|
+
"test:ci": "vitest run",
|
|
26
26
|
"test:legacy": "OPENAI_RESPONSES_DISABLE=true vitest run -t \"legacy|gpt-3.5-turbo\"",
|
|
27
27
|
"typecheck": "tsc --noEmit",
|
|
28
28
|
"prerelease:version": "node ../../scripts/bind_package_version.js",
|
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
"dist"
|
|
34
34
|
],
|
|
35
35
|
"config": {
|
|
36
|
-
"sandboxImageUri": "ghcr.io/vybestack/llxprt-code/sandbox:0.
|
|
36
|
+
"sandboxImageUri": "ghcr.io/vybestack/llxprt-code/sandbox:0.6.0"
|
|
37
37
|
},
|
|
38
38
|
"dependencies": {
|
|
39
39
|
"@anthropic-ai/sdk": "^0.55.1",
|
|
@@ -42,33 +42,39 @@
|
|
|
42
42
|
"@iarna/toml": "^2.2.5",
|
|
43
43
|
"@modelcontextprotocol/sdk": "^1.15.1",
|
|
44
44
|
"@types/update-notifier": "^6.0.8",
|
|
45
|
-
"@vybestack/llxprt-code-core": "0.
|
|
45
|
+
"@vybestack/llxprt-code-core": "0.6.0",
|
|
46
|
+
"ansi-regex": "^6.2.2",
|
|
46
47
|
"chalk": "^5.3.0",
|
|
47
48
|
"cli-spinners": "2.9.2",
|
|
48
49
|
"command-exists": "^1.2.9",
|
|
49
50
|
"diff": "^7.0.0",
|
|
50
51
|
"dotenv": "^17.1.0",
|
|
52
|
+
"extract-zip": "^2.0.1",
|
|
51
53
|
"fzf": "^0.5.2",
|
|
52
|
-
"glob": "^
|
|
54
|
+
"glob": "^12.0.0",
|
|
53
55
|
"gradient-string": "2.0.2",
|
|
54
56
|
"highlight.js": "^11.11.1",
|
|
55
|
-
"ink": "^6.
|
|
57
|
+
"ink": "^6.5.1",
|
|
56
58
|
"ink-gradient": "^3.0.0",
|
|
57
59
|
"ink-select-input": "^6.2.0",
|
|
58
60
|
"ink-spinner": "^5.0.0",
|
|
59
61
|
"ink-testing-library": "^4.0.0",
|
|
60
62
|
"lowlight": "^3.3.0",
|
|
61
63
|
"mime-types": "^3.0.1",
|
|
64
|
+
"mnemonist": "^0.40.3",
|
|
62
65
|
"open": "^10.1.2",
|
|
63
66
|
"openai": "^5.10.1",
|
|
64
67
|
"react": "^19.2.0",
|
|
65
68
|
"read-package-up": "^11.0.0",
|
|
66
69
|
"shell-quote": "^1.8.3",
|
|
70
|
+
"simple-git": "^3.28.0",
|
|
67
71
|
"string-width": "^7.1.0",
|
|
68
72
|
"strip-ansi": "^7.1.0",
|
|
69
73
|
"strip-json-comments": "^3.1.1",
|
|
74
|
+
"tar": "^7.5.1",
|
|
70
75
|
"undici": "^7.10.0",
|
|
71
76
|
"update-notifier": "^7.3.1",
|
|
77
|
+
"wrap-ansi": "9.0.2",
|
|
72
78
|
"yargs": "^17.7.2",
|
|
73
79
|
"zod": "^3.23.8"
|
|
74
80
|
},
|
|
@@ -77,6 +83,7 @@
|
|
|
77
83
|
"@fast-check/vitest": "^0.2.2",
|
|
78
84
|
"@testing-library/dom": "^10.4.0",
|
|
79
85
|
"@testing-library/react": "^16.3.0",
|
|
86
|
+
"@types/archiver": "^6.0.3",
|
|
80
87
|
"@types/command-exists": "^1.2.3",
|
|
81
88
|
"@types/diff": "^7.0.2",
|
|
82
89
|
"@types/dotenv": "^6.1.1",
|
|
@@ -85,8 +92,10 @@
|
|
|
85
92
|
"@types/react-dom": "^19.1.6",
|
|
86
93
|
"@types/semver": "^7.7.0",
|
|
87
94
|
"@types/shell-quote": "^1.7.5",
|
|
95
|
+
"@types/tar": "^6.1.13",
|
|
88
96
|
"@types/yargs": "^17.0.33",
|
|
89
97
|
"@vybestack/llxprt-code-test-utils": "file:../test-utils",
|
|
98
|
+
"archiver": "^7.0.1",
|
|
90
99
|
"dom-accessibility-api": "^0.5.16",
|
|
91
100
|
"jsdom": "^26.1.0",
|
|
92
101
|
"lz-string": "^1.5.0",
|
|
@@ -23,11 +23,25 @@ export declare class GeminiOAuthProvider implements OAuthProvider {
|
|
|
23
23
|
private retryHandler;
|
|
24
24
|
private logger;
|
|
25
25
|
private addItem?;
|
|
26
|
+
private authCodeResolver?;
|
|
27
|
+
private authCodeRejecter?;
|
|
26
28
|
constructor(tokenStore?: TokenStore, addItem?: (itemData: Omit<HistoryItemWithoutId, 'id'>, baseTimestamp: number) => number);
|
|
27
29
|
/**
|
|
28
30
|
* Set the addItem callback for displaying messages in the UI
|
|
29
31
|
*/
|
|
30
32
|
setAddItem(addItem: (itemData: Omit<HistoryItemWithoutId, 'id'>, baseTimestamp: number) => number): void;
|
|
33
|
+
/**
|
|
34
|
+
* Wait for authorization code from UI dialog
|
|
35
|
+
*/
|
|
36
|
+
waitForAuthCode(): Promise<string>;
|
|
37
|
+
/**
|
|
38
|
+
* Submit authorization code from UI dialog
|
|
39
|
+
*/
|
|
40
|
+
submitAuthCode(code: string): void;
|
|
41
|
+
/**
|
|
42
|
+
* Cancel OAuth flow
|
|
43
|
+
*/
|
|
44
|
+
cancelAuth(): void;
|
|
31
45
|
/**
|
|
32
46
|
* Lazy initialization with proper state management
|
|
33
47
|
* Ensures initialization only happens once and handles concurrent calls
|
|
@@ -54,4 +68,8 @@ export declare class GeminiOAuthProvider implements OAuthProvider {
|
|
|
54
68
|
* Clears tokens from all legacy locations
|
|
55
69
|
*/
|
|
56
70
|
private clearLegacyTokens;
|
|
71
|
+
/**
|
|
72
|
+
* Install auth-code hooks so oauth2.ts can ask the UI for the code instead of readline
|
|
73
|
+
*/
|
|
74
|
+
private installAuthCodeHooks;
|
|
57
75
|
}
|
|
@@ -26,6 +26,8 @@ export class GeminiOAuthProvider {
|
|
|
26
26
|
retryHandler;
|
|
27
27
|
logger;
|
|
28
28
|
addItem;
|
|
29
|
+
authCodeResolver;
|
|
30
|
+
authCodeRejecter;
|
|
29
31
|
constructor(tokenStore, addItem) {
|
|
30
32
|
this.tokenStore = tokenStore;
|
|
31
33
|
this.retryHandler = new RetryHandler();
|
|
@@ -44,6 +46,36 @@ export class GeminiOAuthProvider {
|
|
|
44
46
|
setAddItem(addItem) {
|
|
45
47
|
this.addItem = addItem;
|
|
46
48
|
}
|
|
49
|
+
/**
|
|
50
|
+
* Wait for authorization code from UI dialog
|
|
51
|
+
*/
|
|
52
|
+
waitForAuthCode() {
|
|
53
|
+
return new Promise((resolve, reject) => {
|
|
54
|
+
this.authCodeResolver = resolve;
|
|
55
|
+
this.authCodeRejecter = reject;
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Submit authorization code from UI dialog
|
|
60
|
+
*/
|
|
61
|
+
submitAuthCode(code) {
|
|
62
|
+
if (this.authCodeResolver) {
|
|
63
|
+
this.authCodeResolver(code);
|
|
64
|
+
this.authCodeResolver = undefined;
|
|
65
|
+
this.authCodeRejecter = undefined;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Cancel OAuth flow
|
|
70
|
+
*/
|
|
71
|
+
cancelAuth() {
|
|
72
|
+
if (this.authCodeRejecter) {
|
|
73
|
+
const error = OAuthErrorFactory.fromUnknown(this.name, new Error('OAuth authentication was cancelled by user'), 'user cancellation');
|
|
74
|
+
this.authCodeRejecter(error);
|
|
75
|
+
this.authCodeResolver = undefined;
|
|
76
|
+
this.authCodeRejecter = undefined;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
47
79
|
/**
|
|
48
80
|
* Lazy initialization with proper state management
|
|
49
81
|
* Ensures initialization only happens once and handles concurrent calls
|
|
@@ -100,98 +132,104 @@ export class GeminiOAuthProvider {
|
|
|
100
132
|
async initiateAuth() {
|
|
101
133
|
await this.ensureInitialized();
|
|
102
134
|
return this.errorHandler.wrapMethod(async () => {
|
|
103
|
-
|
|
104
|
-
const coreModule = await import('@vybestack/llxprt-code-core');
|
|
105
|
-
const { getOauthClient, AuthType } = coreModule;
|
|
106
|
-
// Create a minimal config for OAuth - use type assertion for test environment
|
|
107
|
-
// Type assertion is needed since we're creating a partial Config for test mode
|
|
108
|
-
const config = {
|
|
109
|
-
getProxy: () => undefined,
|
|
110
|
-
isBrowserLaunchSuppressed: () => !shouldLaunchBrowser(),
|
|
111
|
-
};
|
|
112
|
-
// Use the existing Google OAuth infrastructure to get a client
|
|
113
|
-
let client;
|
|
135
|
+
const cleanupAuthHooks = this.installAuthCodeHooks();
|
|
114
136
|
try {
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
//
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
error
|
|
133
|
-
error.message.includes('user_cancelled')) {
|
|
134
|
-
// CRITICAL FIX: Trigger fallback flow instead of failing
|
|
135
|
-
this.logger.debug(() => `Browser auth cancelled, triggering fallback: ${error.message}`);
|
|
136
|
-
// Show fallback instructions to user
|
|
137
|
-
const fallbackMessage = `Browser authentication was cancelled or failed.\nFallback options:\n1. Use API key: /keyfile <path-to-your-gemini-key>\n2. Set environment: export GEMINI_API_KEY=<your-key>\n3. Try OAuth again: /auth gemini enable`;
|
|
137
|
+
// Import the existing Google OAuth infrastructure
|
|
138
|
+
const coreModule = await import('@vybestack/llxprt-code-core');
|
|
139
|
+
const { getOauthClient, AuthType } = coreModule;
|
|
140
|
+
// Create a minimal config for OAuth - use type assertion for test environment
|
|
141
|
+
// Type assertion is needed since we're creating a partial Config for test mode
|
|
142
|
+
const config = {
|
|
143
|
+
getProxy: () => undefined,
|
|
144
|
+
isBrowserLaunchSuppressed: () => !shouldLaunchBrowser(),
|
|
145
|
+
};
|
|
146
|
+
// Use the existing Google OAuth infrastructure to get a client
|
|
147
|
+
let client;
|
|
148
|
+
try {
|
|
149
|
+
client = await getOauthClient(AuthType.LOGIN_WITH_GOOGLE, config);
|
|
150
|
+
}
|
|
151
|
+
catch (error) {
|
|
152
|
+
// Handle browser auth cancellation or other auth failures
|
|
153
|
+
if (error instanceof Error) {
|
|
154
|
+
// Show error message to user if addItem is available
|
|
138
155
|
const addItem = this.addItem || globalOAuthUI.getAddItem();
|
|
139
156
|
if (addItem) {
|
|
140
157
|
addItem({
|
|
141
|
-
type: '
|
|
142
|
-
text:
|
|
158
|
+
type: 'error',
|
|
159
|
+
text: `Browser authentication failed: ${error.message}
|
|
160
|
+
Please try again or use an API key with /keyfile <path-to-your-gemini-key>`,
|
|
143
161
|
}, Date.now());
|
|
144
162
|
}
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
163
|
+
// Check for specific cancellation messages
|
|
164
|
+
if (error.message.includes('cancelled') ||
|
|
165
|
+
error.message.includes('denied') ||
|
|
166
|
+
error.message.includes('access_denied') ||
|
|
167
|
+
error.message.includes('user_cancelled')) {
|
|
168
|
+
// CRITICAL FIX: Trigger fallback flow instead of failing
|
|
169
|
+
this.logger.debug(() => `Browser auth cancelled, triggering fallback: ${error.message}`);
|
|
170
|
+
// Show fallback instructions to user
|
|
171
|
+
const fallbackMessage = `Browser authentication was cancelled or failed.\nFallback options:\n1. Use API key: /keyfile <path-to-your-gemini-key>\n2. Set environment: export GEMINI_API_KEY=<your-key>\n3. Try OAuth again: /auth gemini enable`;
|
|
172
|
+
const addItem = this.addItem || globalOAuthUI.getAddItem();
|
|
173
|
+
if (addItem) {
|
|
174
|
+
addItem({
|
|
175
|
+
type: 'info',
|
|
176
|
+
text: fallbackMessage,
|
|
177
|
+
}, Date.now());
|
|
178
|
+
}
|
|
179
|
+
else {
|
|
180
|
+
console.log('\n' + '─'.repeat(60));
|
|
181
|
+
console.log('Browser authentication was cancelled or failed.');
|
|
182
|
+
console.log('Fallback options:');
|
|
183
|
+
console.log('1. Use API key: /keyfile <path-to-your-gemini-key>');
|
|
184
|
+
console.log('2. Set environment: export GEMINI_API_KEY=<your-key>');
|
|
185
|
+
console.log('3. Try OAuth again: /auth gemini enable');
|
|
186
|
+
console.log('─'.repeat(60));
|
|
187
|
+
}
|
|
188
|
+
// Throw a user-friendly error that doesn't hang the system
|
|
189
|
+
throw OAuthErrorFactory.authenticationRequired(this.name, {
|
|
190
|
+
reason: 'Browser authentication was cancelled or failed. Please use one of the fallback options shown above, or check the URL in your history.',
|
|
191
|
+
});
|
|
153
192
|
}
|
|
154
|
-
// Throw a user-friendly error that doesn't hang the system
|
|
155
|
-
throw OAuthErrorFactory.authenticationRequired(this.name, {
|
|
156
|
-
reason: 'Browser authentication was cancelled or failed. Please use one of the fallback options shown above, or check the URL in your history.',
|
|
157
|
-
});
|
|
158
193
|
}
|
|
194
|
+
// Re-throw other authentication errors
|
|
195
|
+
throw error;
|
|
159
196
|
}
|
|
160
|
-
//
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
197
|
+
// The client should now have valid credentials
|
|
198
|
+
// Extract and cache the token
|
|
199
|
+
const credentials = client.credentials;
|
|
200
|
+
if (credentials && credentials.access_token) {
|
|
201
|
+
const token = this.credentialsToOAuthToken(credentials);
|
|
202
|
+
if (token && this.tokenStore) {
|
|
203
|
+
try {
|
|
204
|
+
await this.tokenStore.saveToken('gemini', token);
|
|
205
|
+
this.currentToken = token;
|
|
206
|
+
// Display success message
|
|
207
|
+
const addItem = this.addItem || globalOAuthUI.getAddItem();
|
|
208
|
+
if (addItem) {
|
|
209
|
+
addItem({
|
|
210
|
+
type: 'info',
|
|
211
|
+
text: 'Successfully authenticated with Google Gemini!',
|
|
212
|
+
}, Date.now());
|
|
213
|
+
}
|
|
214
|
+
else {
|
|
215
|
+
console.log('Successfully authenticated with Google Gemini!');
|
|
216
|
+
}
|
|
179
217
|
}
|
|
180
|
-
|
|
181
|
-
|
|
218
|
+
catch (saveError) {
|
|
219
|
+
throw OAuthErrorFactory.storageError(this.name, saveError instanceof Error ? saveError : undefined, {
|
|
220
|
+
operation: 'saveToken',
|
|
221
|
+
});
|
|
182
222
|
}
|
|
183
223
|
}
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
}
|
|
224
|
+
}
|
|
225
|
+
else {
|
|
226
|
+
throw OAuthErrorFactory.authenticationRequired(this.name, {
|
|
227
|
+
reason: 'No valid credentials received from Google OAuth',
|
|
228
|
+
});
|
|
189
229
|
}
|
|
190
230
|
}
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
reason: 'No valid credentials received from Google OAuth',
|
|
194
|
-
});
|
|
231
|
+
finally {
|
|
232
|
+
cleanupAuthHooks();
|
|
195
233
|
}
|
|
196
234
|
}, this.name, 'initiateAuth')();
|
|
197
235
|
}
|
|
@@ -361,5 +399,29 @@ Please try again or use an API key with /keyfile <path-to-your-gemini-key>`,
|
|
|
361
399
|
}
|
|
362
400
|
});
|
|
363
401
|
}
|
|
402
|
+
/**
|
|
403
|
+
* Install auth-code hooks so oauth2.ts can ask the UI for the code instead of readline
|
|
404
|
+
*/
|
|
405
|
+
installAuthCodeHooks() {
|
|
406
|
+
const globalObj = global;
|
|
407
|
+
const previousWaitForCode = globalObj.__oauth_wait_for_code;
|
|
408
|
+
const previousProvider = globalObj.__oauth_provider;
|
|
409
|
+
globalObj.__oauth_wait_for_code = () => this.waitForAuthCode();
|
|
410
|
+
globalObj.__oauth_provider = this.name;
|
|
411
|
+
return () => {
|
|
412
|
+
if (previousWaitForCode !== undefined) {
|
|
413
|
+
globalObj.__oauth_wait_for_code = previousWaitForCode;
|
|
414
|
+
}
|
|
415
|
+
else {
|
|
416
|
+
delete globalObj.__oauth_wait_for_code;
|
|
417
|
+
}
|
|
418
|
+
if (previousProvider !== undefined) {
|
|
419
|
+
globalObj.__oauth_provider = previousProvider;
|
|
420
|
+
}
|
|
421
|
+
else {
|
|
422
|
+
delete globalObj.__oauth_provider;
|
|
423
|
+
}
|
|
424
|
+
};
|
|
425
|
+
}
|
|
364
426
|
}
|
|
365
427
|
//# sourceMappingURL=gemini-oauth-provider.js.map
|