From 6591e7e6bd2b617ee7c37304c54c494e0e9df83a Mon Sep 17 00:00:00 2001 From: cdrci <78873720+cdrci@users.noreply.github.com> Date: Tue, 14 Jul 2026 02:56:29 +1000 Subject: [PATCH 1/2] This is a combination of 9 commits. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Update Helm chart and changelog with 4.128.0 (#7891) feat: hide debug view from activity bar feat: hide sidebar. diff修改提交 feat: merge quilt. 11 --- CHANGELOG.md | 2 + ci/helm-chart/Chart.yaml | 4 +- ci/helm-chart/values.yaml | 2 +- patches/disable_terminal_keybind.diff | 45 ++ patches/qian-changes.diff | 0 patches/series | 3 + patches/ui-hidden.diff | 672 ++++++++++++++++++++++++++ patches/whitelist-keybingding.diff | 41 ++ tsconfig.json | 2 +- 9 files changed, 767 insertions(+), 4 deletions(-) create mode 100644 patches/disable_terminal_keybind.diff create mode 100644 patches/qian-changes.diff create mode 100644 patches/ui-hidden.diff create mode 100644 patches/whitelist-keybingding.diff diff --git a/CHANGELOG.md b/CHANGELOG.md index 6aff1d124869..57416d3c64f0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,6 +22,8 @@ Code v99.99.999 ## Unreleased +## [4.128.0](https://github.com/coder/code-server/releases/tag/v4.128.0) - 2026-07-11 + Code v1.128.0 ### Changed diff --git a/ci/helm-chart/Chart.yaml b/ci/helm-chart/Chart.yaml index 46a363b985f5..6d1bda0f3678 100644 --- a/ci/helm-chart/Chart.yaml +++ b/ci/helm-chart/Chart.yaml @@ -15,9 +15,9 @@ type: application # This is the chart version. This version number should be incremented each time you make changes # to the chart and its templates, including the app version. # Versions are expected to follow Semantic Versioning (https://semver.org/) -version: 3.42.0 +version: 3.43.0 # This is the version number of the application being deployed. This version number should be # incremented each time you make changes to the application. Versions are not expected to # follow Semantic Versioning. They should reflect the version the application is using. -appVersion: 4.127.0 +appVersion: 4.128.0 diff --git a/ci/helm-chart/values.yaml b/ci/helm-chart/values.yaml index b96ed4486cb2..05954e11926e 100644 --- a/ci/helm-chart/values.yaml +++ b/ci/helm-chart/values.yaml @@ -6,7 +6,7 @@ replicaCount: 1 image: repository: codercom/code-server - tag: '4.127.0' + tag: '4.128.0' pullPolicy: Always # Specifies one or more secrets to be used when pulling images from a diff --git a/patches/disable_terminal_keybind.diff b/patches/disable_terminal_keybind.diff new file mode 100644 index 000000000000..e4def3ea01dc --- /dev/null +++ b/patches/disable_terminal_keybind.diff @@ -0,0 +1,45 @@ +diff --git code-server/lib/vscode/src/vs/workbench/contrib/externalTerminal/browser/externalTerminal.contribution.ts code-server/lib/vscode/src/vs/workbench/contrib/externalTerminal/browser/externalTerminal.contribution.ts +index da0388a5435..fb91e3665c5 100644 +--- code-server/lib/vscode/src/vs/workbench/contrib/externalTerminal/browser/externalTerminal.contribution.ts ++++ code-server/lib/vscode/src/vs/workbench/contrib/externalTerminal/browser/externalTerminal.contribution.ts +@@ -132,9 +132,9 @@ export class ExternalTerminalContribution extends Disposable implements IWorkben + when: shouldShowExternalKindOnLocal + }; + +- +- MenuRegistry.appendMenuItem(MenuId.ExplorerContext, this._openInTerminalMenuItem); +- MenuRegistry.appendMenuItem(MenuId.ExplorerContext, this._openInIntegratedTerminalMenuItem); ++ // 屏蔽右键打开的终端 ++ //MenuRegistry.appendMenuItem(MenuId.ExplorerContext, this._openInTerminalMenuItem); ++ //MenuRegistry.appendMenuItem(MenuId.ExplorerContext, this._openInIntegratedTerminalMenuItem); + + this._register(this._configurationService.onDidChangeConfiguration(e => { + if (e.affectsConfiguration('terminal.explorerKind') || e.affectsConfiguration('terminal.external')) { +diff --git code-server/lib/vscode/src/vs/workbench/contrib/terminal/browser/terminalService.ts code-server/lib/vscode/src/vs/workbench/contrib/terminal/browser/terminalService.ts +index 152d14d7a9b..589cb6e0366 100644 +--- code-server/lib/vscode/src/vs/workbench/contrib/terminal/browser/terminalService.ts ++++ code-server/lib/vscode/src/vs/workbench/contrib/terminal/browser/terminalService.ts +@@ -449,6 +449,11 @@ export class TerminalService extends Disposable implements ITerminalService { + this._logService.trace('Pty host ready'); + } + ++ private _isTerminalDisabled(): boolean { ++ return true ++ } ++ ++ + private async _reconnectToRemoteTerminals(): Promise { + const remoteAuthority = this._environmentService.remoteAuthority; + if (!remoteAuthority) { +@@ -973,6 +978,11 @@ export class TerminalService extends Disposable implements ITerminalService { + } + + async createTerminal(options?: ICreateTerminalOptions): Promise { ++ ++ if (this._isTerminalDisabled()) { ++ this._notificationService.info('集成终端已被管理员禁用,无法创建'); ++ return; ++ } + // Await the initialization of available profiles as long as this is not a pty terminal or a + // local terminal in a remote workspace as profile won't be used in those cases and these + // terminals need to be launched before remote connections are established. diff --git a/patches/qian-changes.diff b/patches/qian-changes.diff new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/patches/series b/patches/series index 6f438da313bf..f3aa758eefcc 100644 --- a/patches/series +++ b/patches/series @@ -24,3 +24,6 @@ trusted-domains.diff signature-verification.diff copilot.diff app-name.diff +disable_terminal_keybind.diff +whitelist-keybingding.diff +ui-hidden.diff diff --git a/patches/ui-hidden.diff b/patches/ui-hidden.diff new file mode 100644 index 000000000000..968c758e63e9 --- /dev/null +++ b/patches/ui-hidden.diff @@ -0,0 +1,672 @@ +diff --git code-server/lib/vscode/src/vs/workbench/browser/parts/activitybar/activitybarPart.ts code-server/lib/vscode/src/vs/workbench/browser/parts/activitybar/activitybarPart.ts +index ee371523d831..0e3afb8a208f 100644 +--- code-server/lib/vscode/src/vs/workbench/browser/parts/activitybar/activitybarPart.ts ++++ code-server/lib/vscode/src/vs/workbench/browser/parts/activitybar/activitybarPart.ts +@@ -165,7 +165,7 @@ export class ActivitybarPart extends Part { + activeBackgroundColor: undefined, inactiveBackgroundColor: undefined, activeBorderBottomColor: undefined, + }), + overflowActionSize: actionHeight, +- }, Parts.ACTIVITYBAR_PART, this.paneCompositePart, true); ++ }, Parts.ACTIVITYBAR_PART, this.paneCompositePart, false); + } + + protected override createContentArea(parent: HTMLElement): HTMLElement { +diff --git code-server/lib/vscode/src/vs/workbench/contrib/chat/browser/agentPluginsView.ts code-server/lib/vscode/src/vs/workbench/contrib/chat/browser/agentPluginsView.ts +index 329a7c6ed987..55293d97d2f4 100644 +--- code-server/lib/vscode/src/vs/workbench/contrib/chat/browser/agentPluginsView.ts ++++ code-server/lib/vscode/src/vs/workbench/contrib/chat/browser/agentPluginsView.ts +@@ -10,38 +10,38 @@ import { IListContextMenuEvent } from '../../../../base/browser/ui/list/list.js' + import { IPagedRenderer } from '../../../../base/browser/ui/list/listPaging.js'; + import { Action, IAction, Separator } from '../../../../base/common/actions.js'; + import { RunOnceScheduler } from '../../../../base/common/async.js'; +-import { CancellationToken, CancellationTokenSource } from '../../../../base/common/cancellation.js'; +-import { Codicon } from '../../../../base/common/codicons.js'; ++import { CancellationTokenSource } from '../../../../base/common/cancellation.js'; ++// import { Codicon } from '../../../../base/common/codicons.js'; + import { Event } from '../../../../base/common/event.js'; +-import { Disposable, DisposableStore, disposeIfDisposable, IDisposable, isDisposable, MutableDisposable } from '../../../../base/common/lifecycle.js'; ++import { DisposableStore, disposeIfDisposable, IDisposable, isDisposable, MutableDisposable } from '../../../../base/common/lifecycle.js'; + import { ThemeIcon } from '../../../../base/common/themables.js'; + import { autorun, derived, IObservable, IReaderWithStore } from '../../../../base/common/observable.js'; + import { IPagedModel, PagedModel } from '../../../../base/common/paging.js'; + import { dirname } from '../../../../base/common/resources.js'; +-import { localize, localize2 } from '../../../../nls.js'; +-import { Action2, MenuId, registerAction2 } from '../../../../platform/actions/common/actions.js'; ++import { localize } from '../../../../nls.js'; ++// import { Action2, MenuId } from '../../../../platform/actions/common/actions.js'; + import { IConfigurationService } from '../../../../platform/configuration/common/configuration.js'; +-import { ContextKeyExpr, IContextKeyService } from '../../../../platform/contextkey/common/contextkey.js'; ++import { IContextKeyService } from '../../../../platform/contextkey/common/contextkey.js'; + import { IContextMenuService } from '../../../../platform/contextview/browser/contextView.js'; + import { IHoverService } from '../../../../platform/hover/browser/hover.js'; +-import { SyncDescriptor } from '../../../../platform/instantiation/common/descriptors.js'; +-import { IInstantiationService, ServicesAccessor } from '../../../../platform/instantiation/common/instantiation.js'; ++// import { SyncDescriptor } from '../../../../platform/instantiation/common/descriptors.js'; ++import { IInstantiationService } from '../../../../platform/instantiation/common/instantiation.js'; + import { IKeybindingService } from '../../../../platform/keybinding/common/keybinding.js'; + import { ILabelService } from '../../../../platform/label/common/label.js'; + import { WorkbenchPagedList } from '../../../../platform/list/browser/listService.js'; + import { IOpenerService } from '../../../../platform/opener/common/opener.js'; +-import { Registry } from '../../../../platform/registry/common/platform.js'; ++// import { Registry } from '../../../../platform/registry/common/platform.js'; + import { IThemeService } from '../../../../platform/theme/common/themeService.js'; + import { getLocationBasedViewColors } from '../../../browser/parts/views/viewPane.js'; + import { IViewletViewOptions } from '../../../browser/parts/views/viewsViewlet.js'; +-import { IWorkbenchContribution } from '../../../common/contributions.js'; +-import { IViewDescriptorService, IViewsRegistry, Extensions as ViewExtensions } from '../../../common/views.js'; ++// import { IWorkbenchContribution } from '../../../common/contributions.js'; ++import { IViewDescriptorService } from '../../../common/views.js'; + import { IEditorService } from '../../../services/editor/common/editorService.js'; +-import { VIEW_CONTAINER } from '../../extensions/browser/extensions.contribution.js'; ++// import { VIEW_CONTAINER } from '../../extensions/browser/extensions.contribution.js'; + import { manageExtensionIcon } from '../../extensions/browser/extensionsIcons.js'; + import { AbstractExtensionsListView } from '../../extensions/browser/extensionsViews.js'; +-import { DefaultViewsContext, extensionsFilterSubMenu, IExtensionsWorkbenchService, SearchAgentPluginsContext } from '../../extensions/common/extensions.js'; +-import { ChatContextKeys } from '../common/actions/chatContextKeys.js'; ++// import { extensionsFilterSubMenu, IExtensionsWorkbenchService } from '../../extensions/common/extensions.js'; ++// import { ChatContextKeys } from '../common/actions/chatContextKeys.js'; + import { IAgentPlugin, IAgentPluginService } from '../common/plugins/agentPluginService.js'; + import { isContributionEnabled } from '../common/enablement.js'; + import { IPluginInstallService } from '../common/plugins/pluginInstallService.js'; +@@ -49,7 +49,7 @@ import { hasSourceChanged, IMarketplacePlugin, IPluginMarketplaceService } from + import { AgentPluginEditorInput } from './agentPluginEditor/agentPluginEditorInput.js'; + import { AgentPluginItemKind, IAgentPluginItem, IInstalledPluginItem, IMarketplacePluginItem } from './agentPluginEditor/agentPluginItems.js'; + import { getInstalledPluginContextMenuActions, InstallPluginAction, OpenPluginReadmeAction } from './agentPluginActions.js'; +-import { InstalledAgentPluginsViewId, HasInstalledAgentPluginsContext } from './chat.js'; ++// import { InstalledAgentPluginsViewId } from './chat.js'; + + //#region Item model + +@@ -556,114 +556,114 @@ export class AgentPluginsListView extends AbstractExtensionsListView { +- hasInstalledKey.set(agentPluginService.plugins.read(reader).length > 0); +- })); +- +- registerAction2(AgentPluginsBrowseCommand); +- registerAction2(CheckForPluginUpdatesCommand); +- registerAction2(ForceUpdatePluginsCommand); +- +- Registry.as(ViewExtensions.ViewsRegistry).registerViews([ +- { +- id: InstalledAgentPluginsViewId, +- name: localize2('agent-plugins-installed', "Agent Plugins - Installed"), +- ctorDescriptor: new SyncDescriptor(AgentPluginsListView, [{ installedOnly: true }]), +- when: ContextKeyExpr.and(DefaultViewsContext, HasInstalledAgentPluginsContext, ChatContextKeys.Setup.hidden.negate()), +- weight: 30, +- order: 5, +- canToggleVisibility: true, +- }, +- { +- id: 'workbench.views.agentPlugins.default.marketplace', +- name: localize2('agent-plugins', "Agent Plugins"), +- ctorDescriptor: new SyncDescriptor(AgentPluginsListView, [{}]), +- when: ContextKeyExpr.and(DefaultViewsContext, HasInstalledAgentPluginsContext.toNegated(), ChatContextKeys.Setup.hidden.negate()), +- weight: 30, +- order: 5, +- canToggleVisibility: true, +- hideByDefault: true, +- }, +- { +- id: 'workbench.views.agentPlugins.marketplace', +- name: localize2('agent-plugins', "Agent Plugins"), +- ctorDescriptor: new SyncDescriptor(AgentPluginsListView, [{}]), +- when: ContextKeyExpr.and(SearchAgentPluginsContext, ChatContextKeys.Setup.hidden.negate()), +- }, +- ], VIEW_CONTAINER); +- } +-} ++// export class AgentPluginsViewsContribution extends Disposable implements IWorkbenchContribution { ++ ++// static ID = 'workbench.chat.agentPlugins.views.contribution'; ++ ++// constructor( ++// @IContextKeyService contextKeyService: IContextKeyService, ++// @IAgentPluginService agentPluginService: IAgentPluginService, ++// ) { ++// super(); ++ ++// const hasInstalledKey = HasInstalledAgentPluginsContext.bindTo(contextKeyService); ++// this._register(autorun(reader => { ++// hasInstalledKey.set(agentPluginService.plugins.read(reader).length > 0); ++// })); ++ ++// registerAction2(AgentPluginsBrowseCommand); ++// registerAction2(CheckForPluginUpdatesCommand); ++// registerAction2(ForceUpdatePluginsCommand); ++ ++// Registry.as(ViewExtensions.ViewsRegistry).registerViews([ ++// { ++// id: InstalledAgentPluginsViewId, ++// name: localize2('agent-plugins-installed', "Agent Plugins - Installed"), ++// ctorDescriptor: new SyncDescriptor(AgentPluginsListView, [{ installedOnly: true }]), ++// when: ContextKeyExpr.and(DefaultViewsContext, HasInstalledAgentPluginsContext, ChatContextKeys.Setup.hidden.negate()), ++// weight: 30, ++// order: 5, ++// canToggleVisibility: true, ++// }, ++// { ++// id: 'workbench.views.agentPlugins.default.marketplace', ++// name: localize2('agent-plugins', "Agent Plugins"), ++// ctorDescriptor: new SyncDescriptor(AgentPluginsListView, [{}]), ++// when: ContextKeyExpr.and(DefaultViewsContext, HasInstalledAgentPluginsContext.toNegated(), ChatContextKeys.Setup.hidden.negate()), ++// weight: 30, ++// order: 5, ++// canToggleVisibility: true, ++// hideByDefault: true, ++// }, ++// { ++// id: 'workbench.views.agentPlugins.marketplace', ++// name: localize2('agent-plugins', "Agent Plugins"), ++// ctorDescriptor: new SyncDescriptor(AgentPluginsListView, [{}]), ++// when: ContextKeyExpr.and(SearchAgentPluginsContext, ChatContextKeys.Setup.hidden.negate()), ++// }, ++// ], VIEW_CONTAINER); ++// } ++// } + + //#endregion +diff --git code-server/lib/vscode/src/vs/workbench/contrib/chat/browser/chat.view.contribution.ts code-server/lib/vscode/src/vs/workbench/contrib/chat/browser/chat.view.contribution.ts +index 37bf962d03a5..64bda38fca4c 100644 +--- code-server/lib/vscode/src/vs/workbench/contrib/chat/browser/chat.view.contribution.ts ++++ code-server/lib/vscode/src/vs/workbench/contrib/chat/browser/chat.view.contribution.ts +@@ -3,7 +3,7 @@ + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +-import { WorkbenchPhase, registerWorkbenchContribution2 } from '../../../common/contributions.js'; +-import { AgentPluginsViewsContribution } from './agentPluginsView.js'; ++// import { WorkbenchPhase, registerWorkbenchContribution2 } from '../../../common/contributions.js'; ++// import { AgentPluginsViewsContribution } from './agentPluginsView.js'; + +-registerWorkbenchContribution2(AgentPluginsViewsContribution.ID, AgentPluginsViewsContribution, WorkbenchPhase.AfterRestored); ++// registerWorkbenchContribution2(AgentPluginsViewsContribution.ID, AgentPluginsViewsContribution, WorkbenchPhase.AfterRestored); +diff --git code-server/lib/vscode/src/vs/workbench/contrib/debug/browser/debug.contribution.ts code-server/lib/vscode/src/vs/workbench/contrib/debug/browser/debug.contribution.ts +index 6a10c81e6bee..92bb10b93ff5 100644 +--- code-server/lib/vscode/src/vs/workbench/contrib/debug/browser/debug.contribution.ts ++++ code-server/lib/vscode/src/vs/workbench/contrib/debug/browser/debug.contribution.ts +@@ -27,16 +27,17 @@ import { IViewContainersRegistry, IViewsRegistry, ViewContainer, ViewContainerLo + import { launchSchemaId } from '../../../services/configuration/common/configuration.js'; + import { LifecyclePhase } from '../../../services/lifecycle/common/lifecycle.js'; + import { COPY_NOTEBOOK_VARIABLE_VALUE_ID, COPY_NOTEBOOK_VARIABLE_VALUE_LABEL } from '../../notebook/browser/contrib/notebookVariables/notebookVariableCommands.js'; +-import { BREAKPOINTS_VIEW_ID, BREAKPOINT_EDITOR_CONTRIBUTION_ID, CALLSTACK_VIEW_ID, CONTEXT_BREAKPOINTS_EXIST, CONTEXT_BREAK_WHEN_VALUE_CHANGES_SUPPORTED, CONTEXT_BREAK_WHEN_VALUE_IS_ACCESSED_SUPPORTED, CONTEXT_BREAK_WHEN_VALUE_IS_READ_SUPPORTED, CONTEXT_CALLSTACK_ITEM_TYPE, CONTEXT_CAN_VIEW_MEMORY, CONTEXT_DEBUGGERS_AVAILABLE, CONTEXT_DEBUG_STATE, CONTEXT_DEBUG_UX, CONTEXT_EXPRESSION_SELECTED, CONTEXT_FOCUSED_SESSION_IS_ATTACH, CONTEXT_FOCUSED_SESSION_IS_NO_DEBUG, CONTEXT_HAS_DEBUGGED, CONTEXT_IN_DEBUG_MODE, CONTEXT_JUMP_TO_CURSOR_SUPPORTED, CONTEXT_LOADED_SCRIPTS_SUPPORTED, CONTEXT_RESTART_FRAME_SUPPORTED, CONTEXT_SET_EXPRESSION_SUPPORTED, CONTEXT_SET_VARIABLE_SUPPORTED, CONTEXT_STACK_FRAME_SUPPORTS_RESTART, CONTEXT_STEP_INTO_TARGETS_SUPPORTED, CONTEXT_SUSPEND_DEBUGGEE_SUPPORTED, CONTEXT_TERMINATE_DEBUGGEE_SUPPORTED, CONTEXT_TERMINATE_THREADS_SUPPORTED, CONTEXT_VARIABLE_EVALUATE_NAME_PRESENT, CONTEXT_VARIABLE_IS_READONLY, CONTEXT_VARIABLE_VALUE, CONTEXT_WATCH_ITEM_TYPE, DEBUG_PANEL_ID, DISASSEMBLY_VIEW_ID, EDITOR_CONTRIBUTION_ID, INTERNAL_CONSOLE_OPTIONS_SCHEMA, LOADED_SCRIPTS_VIEW_ID, REPL_VIEW_ID, State, VARIABLES_VIEW_ID, VIEWLET_ID, WATCH_VIEW_ID, getStateLabel } from '../common/debug.js'; ++import { BREAKPOINT_EDITOR_CONTRIBUTION_ID, CONTEXT_BREAK_WHEN_VALUE_CHANGES_SUPPORTED, CONTEXT_BREAK_WHEN_VALUE_IS_ACCESSED_SUPPORTED, CONTEXT_BREAK_WHEN_VALUE_IS_READ_SUPPORTED, CONTEXT_CALLSTACK_ITEM_TYPE, CONTEXT_CAN_VIEW_MEMORY, CONTEXT_DEBUGGERS_AVAILABLE, CONTEXT_DEBUG_STATE, CONTEXT_EXPRESSION_SELECTED, CONTEXT_FOCUSED_SESSION_IS_ATTACH, CONTEXT_FOCUSED_SESSION_IS_NO_DEBUG, CONTEXT_IN_DEBUG_MODE, CONTEXT_JUMP_TO_CURSOR_SUPPORTED, CONTEXT_LOADED_SCRIPTS_SUPPORTED, CONTEXT_RESTART_FRAME_SUPPORTED, CONTEXT_SET_EXPRESSION_SUPPORTED, CONTEXT_SET_VARIABLE_SUPPORTED, CONTEXT_STACK_FRAME_SUPPORTS_RESTART, CONTEXT_STEP_INTO_TARGETS_SUPPORTED, CONTEXT_SUSPEND_DEBUGGEE_SUPPORTED, CONTEXT_TERMINATE_DEBUGGEE_SUPPORTED, CONTEXT_TERMINATE_THREADS_SUPPORTED, CONTEXT_VARIABLE_EVALUATE_NAME_PRESENT, CONTEXT_VARIABLE_IS_READONLY, CONTEXT_VARIABLE_VALUE, CONTEXT_WATCH_ITEM_TYPE, DEBUG_PANEL_ID, DISASSEMBLY_VIEW_ID, EDITOR_CONTRIBUTION_ID, INTERNAL_CONSOLE_OPTIONS_SCHEMA, REPL_VIEW_ID, State, VARIABLES_VIEW_ID, WATCH_VIEW_ID, getStateLabel } from '../common/debug.js'; ++//BREAKPOINTS_VIEW_ID, CALLSTACK_VIEW_ID,CONTEXT_BREAKPOINTS_EXIST + import { DebugWatchAccessibilityAnnouncer } from '../common/debugAccessibilityAnnouncer.js'; + import { DebugContentProvider } from '../common/debugContentProvider.js'; + import { DebugLifecycle } from '../common/debugLifecycle.js'; + import { DisassemblyViewInput } from '../common/disassemblyViewInput.js'; + import { ReplAccessibilityAnnouncer } from '../common/replAccessibilityAnnouncer.js'; + import { BreakpointEditorContribution } from './breakpointEditorContribution.js'; +-import { BreakpointsView } from './breakpointsView.js'; ++// import { BreakpointsView } from './breakpointsView.js'; + import { CallStackEditorContribution } from './callStackEditorContribution.js'; +-import { CallStackView } from './callStackView.js'; ++// import { CallStackView } from './callStackView.js'; + import { registerColors } from './debugColors.js'; + import { ADD_CONFIGURATION_ID, ADD_TO_WATCH_ID, ADD_TO_WATCH_LABEL, CALLSTACK_BOTTOM_ID, CALLSTACK_BOTTOM_LABEL, CALLSTACK_DOWN_ID, CALLSTACK_DOWN_LABEL, CALLSTACK_TOP_ID, CALLSTACK_TOP_LABEL, CALLSTACK_UP_ID, CALLSTACK_UP_LABEL, CONTINUE_ID, CONTINUE_LABEL, COPY_EVALUATE_PATH_ID, COPY_EVALUATE_PATH_LABEL, COPY_STACK_TRACE_ID, COPY_VALUE_ID, COPY_VALUE_LABEL, DEBUG_COMMAND_CATEGORY, DEBUG_CONSOLE_QUICK_ACCESS_PREFIX, DEBUG_QUICK_ACCESS_PREFIX, DEBUG_RUN_COMMAND_ID, DEBUG_RUN_LABEL, DEBUG_START_COMMAND_ID, DEBUG_START_LABEL, DISCONNECT_AND_SUSPEND_ID, DISCONNECT_AND_SUSPEND_LABEL, DISCONNECT_ID, DISCONNECT_LABEL, EDIT_EXPRESSION_COMMAND_ID, JUMP_TO_CURSOR_ID, NEXT_DEBUG_CONSOLE_ID, NEXT_DEBUG_CONSOLE_LABEL, OPEN_LOADED_SCRIPTS_LABEL, PAUSE_ID, PAUSE_LABEL, PREV_DEBUG_CONSOLE_ID, PREV_DEBUG_CONSOLE_LABEL, REMOVE_EXPRESSION_COMMAND_ID, RESTART_FRAME_ID, RESTART_LABEL, RESTART_SESSION_ID, SELECT_AND_START_ID, SELECT_AND_START_LABEL, SELECT_DEBUG_CONSOLE_ID, SELECT_DEBUG_CONSOLE_LABEL, SELECT_DEBUG_SESSION_ID, SELECT_DEBUG_SESSION_LABEL, SET_EXPRESSION_COMMAND_ID, SHOW_LOADED_SCRIPTS_ID, STEP_INTO_ID, STEP_INTO_LABEL, STEP_INTO_TARGET_ID, STEP_INTO_TARGET_LABEL, STEP_OUT_ID, STEP_OUT_LABEL, STEP_OVER_ID, STEP_OVER_LABEL, STOP_ID, STOP_LABEL, TERMINATE_THREAD_ID, TOGGLE_INLINE_BREAKPOINT_ID, COPY_ADDRESS_ID, COPY_ADDRESS_LABEL, TOGGLE_BREAKPOINT_ID, BREAK_WHEN_VALUE_CHANGES_ID, BREAK_WHEN_VALUE_IS_ACCESSED_ID, BREAK_WHEN_VALUE_IS_READ_ID } from './debugCommands.js'; + import { DebugConsoleQuickAccess } from './debugConsoleQuickAccess.js'; +@@ -49,9 +50,9 @@ import './debugSettingMigration.js'; + import { DebugStatusContribution } from './debugStatus.js'; + import { DebugTitleContribution } from './debugTitle.js'; + import { DebugToolBar } from './debugToolBar.js'; +-import { DebugViewPaneContainer } from './debugViewlet.js'; ++// import { DebugViewPaneContainer } from './debugViewlet.js'; + import { DisassemblyView, DisassemblyViewContribution } from './disassemblyView.js'; +-import { LoadedScriptsView } from './loadedScriptsView.js'; ++// import { LoadedScriptsView } from './loadedScriptsView.js'; + import './media/debug.contribution.css'; + import './media/debugHover.css'; + import { Repl } from './repl.js'; +@@ -59,9 +60,9 @@ import { ReplAccessibilityHelp } from './replAccessibilityHelp.js'; + import { ReplAccessibleView } from './replAccessibleView.js'; + import { RunAndDebugAccessibilityHelp } from './runAndDebugAccessibilityHelp.js'; + import { StatusBarColorProvider } from './statusbarColorProvider.js'; +-import { SET_VARIABLE_ID, VIEW_MEMORY_ID, VariablesView } from './variablesView.js'; +-import { ADD_WATCH_ID, ADD_WATCH_LABEL, REMOVE_WATCH_EXPRESSIONS_COMMAND_ID, REMOVE_WATCH_EXPRESSIONS_LABEL, WatchExpressionsView } from './watchExpressionsView.js'; +-import { WelcomeView } from './welcomeView.js'; ++import { SET_VARIABLE_ID, VIEW_MEMORY_ID } from './variablesView.js'; //VariablesView ++import { ADD_WATCH_ID, ADD_WATCH_LABEL, REMOVE_WATCH_EXPRESSIONS_COMMAND_ID, REMOVE_WATCH_EXPRESSIONS_LABEL } from './watchExpressionsView.js'; //WatchExpressionsView ++// import { WelcomeView } from './welcomeView.js'; + import { DebugChatContextContribution } from './debugChatIntegration.js'; + + // Register services +@@ -450,29 +451,31 @@ Registry.as(ViewExtensions.ViewsRegistry).registerViews([{ + }], VIEW_CONTAINER); + + +-const viewContainer = Registry.as(ViewExtensions.ViewContainersRegistry).registerViewContainer({ +- id: VIEWLET_ID, +- title: nls.localize2('run and debug', "Run and Debug"), +- openCommandActionDescriptor: { +- id: VIEWLET_ID, +- mnemonicTitle: nls.localize({ key: 'miViewRun', comment: ['&& denotes a mnemonic'] }, "&&Run"), +- keybindings: { primary: KeyMod.CtrlCmd | KeyMod.Shift | KeyCode.KeyD }, +- order: 3 +- }, +- ctorDescriptor: new SyncDescriptor(DebugViewPaneContainer), +- icon: icons.runViewIcon, +- alwaysUseContainerInfo: true, +- order: 3, +-}, ViewContainerLocation.Sidebar); ++// const viewContainer = Registry.as(ViewExtensions.ViewContainersRegistry).registerViewContainer({ ++// id: VIEWLET_ID, ++// title: nls.localize2('run and debug', "Run and Debug"), ++// openCommandActionDescriptor: { ++// id: VIEWLET_ID, ++// mnemonicTitle: nls.localize({ key: 'miViewRun', comment: ['&& denotes a mnemonic'] }, "&&Run"), ++// keybindings: { primary: KeyMod.CtrlCmd | KeyMod.Shift | KeyCode.KeyD }, ++// order: 3 ++// }, ++// ctorDescriptor: new SyncDescriptor(DebugViewPaneContainer), ++// icon: icons.runViewIcon, ++// alwaysUseContainerInfo: true, ++// order: 3, ++// }, ViewContainerLocation.Sidebar); ++ ++//const viewContainer = undefined; + + // Register default debug views +-const viewsRegistry = Registry.as(ViewExtensions.ViewsRegistry); +-viewsRegistry.registerViews([{ id: VARIABLES_VIEW_ID, name: nls.localize2('variables', "Variables"), containerIcon: icons.variablesViewIcon, ctorDescriptor: new SyncDescriptor(VariablesView), order: 10, weight: 40, canToggleVisibility: true, canMoveView: true, focusCommand: { id: 'workbench.debug.action.focusVariablesView' }, when: CONTEXT_DEBUG_UX.isEqualTo('default') }], viewContainer); +-viewsRegistry.registerViews([{ id: WATCH_VIEW_ID, name: nls.localize2('watch', "Watch"), containerIcon: icons.watchViewIcon, ctorDescriptor: new SyncDescriptor(WatchExpressionsView), order: 20, weight: 10, canToggleVisibility: true, canMoveView: true, focusCommand: { id: 'workbench.debug.action.focusWatchView' }, when: CONTEXT_DEBUG_UX.isEqualTo('default') }], viewContainer); +-viewsRegistry.registerViews([{ id: CALLSTACK_VIEW_ID, name: nls.localize2('callStack', "Call Stack"), containerIcon: icons.callStackViewIcon, ctorDescriptor: new SyncDescriptor(CallStackView), order: 30, weight: 30, canToggleVisibility: true, canMoveView: true, focusCommand: { id: 'workbench.debug.action.focusCallStackView' }, when: CONTEXT_DEBUG_UX.isEqualTo('default') }], viewContainer); +-viewsRegistry.registerViews([{ id: BREAKPOINTS_VIEW_ID, name: nls.localize2('breakpoints', "Breakpoints"), containerIcon: icons.breakpointsViewIcon, ctorDescriptor: new SyncDescriptor(BreakpointsView), order: 40, weight: 20, canToggleVisibility: true, canMoveView: true, focusCommand: { id: 'workbench.debug.action.focusBreakpointsView' }, when: ContextKeyExpr.or(CONTEXT_BREAKPOINTS_EXIST, CONTEXT_DEBUG_UX.isEqualTo('default'), CONTEXT_HAS_DEBUGGED) }], viewContainer); +-viewsRegistry.registerViews([{ id: WelcomeView.ID, name: WelcomeView.LABEL, containerIcon: icons.runViewIcon, ctorDescriptor: new SyncDescriptor(WelcomeView), order: 1, weight: 40, canToggleVisibility: true, when: CONTEXT_DEBUG_UX.isEqualTo('simple') }], viewContainer); +-viewsRegistry.registerViews([{ id: LOADED_SCRIPTS_VIEW_ID, name: nls.localize2('loadedScripts', "Loaded Scripts"), containerIcon: icons.loadedScriptsViewIcon, ctorDescriptor: new SyncDescriptor(LoadedScriptsView), order: 35, weight: 5, canToggleVisibility: true, canMoveView: true, collapsed: true, when: ContextKeyExpr.and(CONTEXT_LOADED_SCRIPTS_SUPPORTED, CONTEXT_DEBUG_UX.isEqualTo('default')) }], viewContainer); ++//const viewsRegistry = Registry.as(ViewExtensions.ViewsRegistry); ++// viewsRegistry.registerViews([{ id: VARIABLES_VIEW_ID, name: nls.localize2('variables', "Variables"), containerIcon: icons.variablesViewIcon, ctorDescriptor: new SyncDescriptor(VariablesView), order: 10, weight: 40, canToggleVisibility: true, canMoveView: true, focusCommand: { id: 'workbench.debug.action.focusVariablesView' }, when: CONTEXT_DEBUG_UX.isEqualTo('default') }], viewContainer); ++// viewsRegistry.registerViews([{ id: WATCH_VIEW_ID, name: nls.localize2('watch', "Watch"), containerIcon: icons.watchViewIcon, ctorDescriptor: new SyncDescriptor(WatchExpressionsView), order: 20, weight: 10, canToggleVisibility: true, canMoveView: true, focusCommand: { id: 'workbench.debug.action.focusWatchView' }, when: CONTEXT_DEBUG_UX.isEqualTo('default') }], viewContainer); ++// viewsRegistry.registerViews([{ id: CALLSTACK_VIEW_ID, name: nls.localize2('callStack', "Call Stack"), containerIcon: icons.callStackViewIcon, ctorDescriptor: new SyncDescriptor(CallStackView), order: 30, weight: 30, canToggleVisibility: true, canMoveView: true, focusCommand: { id: 'workbench.debug.action.focusCallStackView' }, when: CONTEXT_DEBUG_UX.isEqualTo('default') }], viewContainer); ++// viewsRegistry.registerViews([{ id: BREAKPOINTS_VIEW_ID, name: nls.localize2('breakpoints', "Breakpoints"), containerIcon: icons.breakpointsViewIcon, ctorDescriptor: new SyncDescriptor(BreakpointsView), order: 40, weight: 20, canToggleVisibility: true, canMoveView: true, focusCommand: { id: 'workbench.debug.action.focusBreakpointsView' }, when: ContextKeyExpr.or(CONTEXT_BREAKPOINTS_EXIST, CONTEXT_DEBUG_UX.isEqualTo('default'), CONTEXT_HAS_DEBUGGED) }], viewContainer); ++// viewsRegistry.registerViews([{ id: WelcomeView.ID, name: WelcomeView.LABEL, containerIcon: icons.runViewIcon, ctorDescriptor: new SyncDescriptor(WelcomeView), order: 1, weight: 40, canToggleVisibility: true, when: CONTEXT_DEBUG_UX.isEqualTo('simple') }], viewContainer); ++// viewsRegistry.registerViews([{ id: LOADED_SCRIPTS_VIEW_ID, name: nls.localize2('loadedScripts', "Loaded Scripts"), containerIcon: icons.loadedScriptsViewIcon, ctorDescriptor: new SyncDescriptor(LoadedScriptsView), order: 35, weight: 5, canToggleVisibility: true, canMoveView: true, collapsed: true, when: ContextKeyExpr.and(CONTEXT_LOADED_SCRIPTS_SUPPORTED, CONTEXT_DEBUG_UX.isEqualTo('default')) }], viewContainer); + + // Register disassembly view + +diff --git code-server/lib/vscode/src/vs/workbench/contrib/extensions/browser/extensions.contribution.ts code-server/lib/vscode/src/vs/workbench/contrib/extensions/browser/extensions.contribution.ts +index 489257f34083..c57ae6d54794 100644 +--- code-server/lib/vscode/src/vs/workbench/contrib/extensions/browser/extensions.contribution.ts ++++ code-server/lib/vscode/src/vs/workbench/contrib/extensions/browser/extensions.contribution.ts +@@ -7,7 +7,7 @@ import { IAction } from '../../../../base/common/actions.js'; + import { CancellationToken } from '../../../../base/common/cancellation.js'; + import { onUnexpectedError } from '../../../../base/common/errors.js'; + import { Event } from '../../../../base/common/event.js'; +-import { KeyCode, KeyMod } from '../../../../base/common/keyCodes.js'; ++// import { KeyCode, KeyMod } from '../../../../base/common/keyCodes.js'; + import { mnemonicButtonLabel } from '../../../../base/common/labels.js'; + import { Disposable, DisposableStore, IDisposable, isDisposable } from '../../../../base/common/lifecycle.js'; + import { Schemas } from '../../../../base/common/network.js'; +@@ -49,7 +49,7 @@ import { Extensions as ConfigurationMigrationExtensions, IConfigurationMigration + import { IsSessionsWindowContext, ResourceContextKey, WorkbenchStateContext } from '../../../common/contextkeys.js'; + import { IWorkbenchContribution, IWorkbenchContributionsRegistry, registerWorkbenchContribution2, Extensions as WorkbenchExtensions, WorkbenchPhase } from '../../../common/contributions.js'; + import { EditorExtensions } from '../../../common/editor.js'; +-import { IViewContainersRegistry, Extensions as ViewContainerExtensions, ViewContainerLocation } from '../../../common/views.js'; ++// import { IViewContainersRegistry, Extensions as ViewContainerExtensions, ViewContainerLocation } from '../../../common/views.js'; + import { DEFAULT_ACCOUNT_SIGN_IN_COMMAND } from '../../../services/accounts/browser/defaultAccount.js'; + import { IEditorService } from '../../../services/editor/common/editorService.js'; + import { EnablementState, IExtensionManagementServerService, IPublisherInfo, IWorkbenchExtensionEnablementService, IWorkbenchExtensionManagementService } from '../../../services/extensionManagement/common/extensionManagement.js'; +@@ -80,9 +80,9 @@ import { ClearLanguageAction, ConfigureWorkspaceFolderRecommendedExtensionsActio + import { ExtensionActivationProgress } from './extensionsActivationProgress.js'; + import { ExtensionsCompletionItemsProvider } from './extensionsCompletionItemsProvider.js'; + import { ExtensionDependencyChecker } from './extensionsDependencyChecker.js'; +-import { clearSearchResultsIcon, configureRecommendedIcon, extensionsViewIcon, filterIcon, installWorkspaceRecommendedIcon, refreshIcon } from './extensionsIcons.js'; ++import { clearSearchResultsIcon, configureRecommendedIcon, filterIcon, installWorkspaceRecommendedIcon, refreshIcon } from './extensionsIcons.js'; + import { InstallExtensionQuickAccessProvider, ManageExtensionsQuickAccessProvider } from './extensionsQuickAccess.js'; +-import { BuiltInExtensionsContext, ExtensionMarketplaceStatusUpdater, ExtensionsSearchValueContext, ExtensionsSortByContext, ExtensionsViewletViewsContribution, ExtensionsViewPaneContainer, MaliciousExtensionChecker, RecommendedExtensionsContext, SearchHasTextContext, SearchMarketplaceExtensionsContext, StatusUpdater } from './extensionsViewlet.js'; ++import { BuiltInExtensionsContext, ExtensionMarketplaceStatusUpdater, ExtensionsSearchValueContext, ExtensionsSortByContext, ExtensionsViewletViewsContribution, MaliciousExtensionChecker, RecommendedExtensionsContext, SearchHasTextContext, SearchMarketplaceExtensionsContext, StatusUpdater } from './extensionsViewlet.js'; + import { ExtensionsWorkbenchService } from './extensionsWorkbenchService.js'; + import './media/extensionManagement.css'; + import { UnsupportedExtensionsMigrationContrib } from './unsupportedExtensionsMigrationContribution.js'; +@@ -111,22 +111,24 @@ Registry.as(EditorExtensions.EditorPane).registerEditorPane + new SyncDescriptor(ExtensionsInput) + ]); + +-export const VIEW_CONTAINER = Registry.as(ViewContainerExtensions.ViewContainersRegistry).registerViewContainer( +- { +- id: VIEWLET_ID, +- title: localize2('extensions', "Extensions"), +- openCommandActionDescriptor: { +- id: VIEWLET_ID, +- mnemonicTitle: localize({ key: 'miViewExtensions', comment: ['&& denotes a mnemonic'] }, "E&&xtensions"), +- keybindings: { primary: KeyMod.CtrlCmd | KeyMod.Shift | KeyCode.KeyX }, +- order: 4, +- }, +- ctorDescriptor: new SyncDescriptor(ExtensionsViewPaneContainer), +- icon: extensionsViewIcon, +- order: 4, +- rejectAddedViews: true, +- alwaysUseContainerInfo: true, +- }, ViewContainerLocation.Sidebar); ++// export const VIEW_CONTAINER = Registry.as(ViewContainerExtensions.ViewContainersRegistry).registerViewContainer( ++// { ++// id: VIEWLET_ID, ++// title: localize2('extensions', "Extensions"), ++// openCommandActionDescriptor: { ++// id: VIEWLET_ID, ++// mnemonicTitle: localize({ key: 'miViewExtensions', comment: ['&& denotes a mnemonic'] }, "E&&xtensions"), ++// keybindings: { primary: KeyMod.CtrlCmd | KeyMod.Shift | KeyCode.KeyX }, ++// order: 4, ++// }, ++// ctorDescriptor: new SyncDescriptor(ExtensionsViewPaneContainer), ++// icon: extensionsViewIcon, ++// order: 4, ++// rejectAddedViews: true, ++// alwaysUseContainerInfo: true, ++// }, ViewContainerLocation.Sidebar); ++ ++export const VIEW_CONTAINER = undefined; // Do not register the view container for extensions, since it is registered in the workbench contributions + + Registry.as(ConfigurationExtensions.Configuration) + .registerConfiguration({ +diff --git code-server/lib/vscode/src/vs/workbench/contrib/mcp/browser/mcp.view.contribution.ts code-server/lib/vscode/src/vs/workbench/contrib/mcp/browser/mcp.view.contribution.ts +index 204f4682f132..45dad9ac1148 100644 +--- code-server/lib/vscode/src/vs/workbench/contrib/mcp/browser/mcp.view.contribution.ts ++++ code-server/lib/vscode/src/vs/workbench/contrib/mcp/browser/mcp.view.contribution.ts +@@ -3,7 +3,7 @@ + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +-import { registerWorkbenchContribution2, WorkbenchPhase } from '../../../common/contributions.js'; +-import { McpServersViewsContribution } from './mcpServersView.js'; ++// import { registerWorkbenchContribution2, WorkbenchPhase } from '../../../common/contributions.js'; ++// import { McpServersViewsContribution } from './mcpServersView.js'; + +-registerWorkbenchContribution2(McpServersViewsContribution.ID, McpServersViewsContribution, WorkbenchPhase.AfterRestored); ++// registerWorkbenchContribution2(McpServersViewsContribution.ID, McpServersViewsContribution, WorkbenchPhase.AfterRestored); +diff --git code-server/lib/vscode/src/vs/workbench/contrib/mcp/browser/mcpServersView.ts code-server/lib/vscode/src/vs/workbench/contrib/mcp/browser/mcpServersView.ts +index dc231e441dd4..b628cdc89e70 100644 +--- code-server/lib/vscode/src/vs/workbench/contrib/mcp/browser/mcpServersView.ts ++++ code-server/lib/vscode/src/vs/workbench/contrib/mcp/browser/mcpServersView.ts +@@ -9,11 +9,11 @@ import { ActionBar } from '../../../../base/browser/ui/actionbar/actionbar.js'; + import { IListContextMenuEvent } from '../../../../base/browser/ui/list/list.js'; + import { Emitter, Event } from '../../../../base/common/event.js'; + import { createMarkdownCommandLink, MarkdownString } from '../../../../base/common/htmlContent.js'; +-import { combinedDisposable, Disposable, DisposableStore, dispose, IDisposable, isDisposable, MutableDisposable } from '../../../../base/common/lifecycle.js'; ++import { combinedDisposable, DisposableStore, dispose, IDisposable, isDisposable, MutableDisposable } from '../../../../base/common/lifecycle.js'; + import { DelayedPagedModel, IPagedModel, PagedModel, IterativePagedModel } from '../../../../base/common/paging.js'; +-import { localize, localize2 } from '../../../../nls.js'; ++import { localize } from '../../../../nls.js'; + import { IConfigurationService } from '../../../../platform/configuration/common/configuration.js'; +-import { ContextKeyDefinedExpr, ContextKeyExpr, IContextKeyService } from '../../../../platform/contextkey/common/contextkey.js'; ++import { IContextKeyService } from '../../../../platform/contextkey/common/contextkey.js'; + import { IContextMenuService } from '../../../../platform/contextview/browser/contextView.js'; + import { IDialogService } from '../../../../platform/dialogs/common/dialogs.js'; + import { IHoverService } from '../../../../platform/hover/browser/hover.js'; +@@ -25,21 +25,21 @@ import { IOpenerService } from '../../../../platform/opener/common/opener.js'; + import { IThemeService } from '../../../../platform/theme/common/themeService.js'; + import { getLocationBasedViewColors } from '../../../browser/parts/views/viewPane.js'; + import { IViewletViewOptions } from '../../../browser/parts/views/viewsViewlet.js'; +-import { IViewDescriptorService, IViewsRegistry, ViewContainerLocation, Extensions as ViewExtensions } from '../../../common/views.js'; +-import { HasInstalledMcpServersContext, IMcpWorkbenchService, InstalledMcpServersViewId, IWorkbenchMcpServer, McpServerContainers, McpServerEnablementState, McpServersGalleryStatusContext } from '../common/mcpTypes.js'; ++import { IViewDescriptorService, ViewContainerLocation, } from '../../../common/views.js'; ++import { IMcpWorkbenchService, IWorkbenchMcpServer, McpServerContainers, McpServerEnablementState } from '../common/mcpTypes.js'; + import { DropDownAction, getContextMenuActions, InstallAction, InstallingLabelAction, ManageMcpServerAction, McpServerStatusAction } from './mcpServerActions.js'; + import { PublisherWidget, StarredWidget, McpServerIconWidget, McpServerHoverWidget, McpServerScopeBadgeWidget } from './mcpServerWidgets.js'; + import { ActionRunner, IAction, Separator } from '../../../../base/common/actions.js'; + import { IActionViewItemOptions } from '../../../../base/browser/ui/actionbar/actionViewItems.js'; +-import { mcpGalleryServiceEnablementConfig, mcpGalleryServiceUrlConfig } from '../../../../platform/mcp/common/mcpManagement.js'; ++import { mcpGalleryServiceEnablementConfig } from '../../../../platform/mcp/common/mcpManagement.js'; + import { ThemeIcon } from '../../../../base/common/themables.js'; + import { alert } from '../../../../base/browser/ui/aria/aria.js'; +-import { Registry } from '../../../../platform/registry/common/platform.js'; +-import { IWorkbenchContribution } from '../../../common/contributions.js'; +-import { SyncDescriptor } from '../../../../platform/instantiation/common/descriptors.js'; +-import { DefaultViewsContext, SearchMcpServersContext } from '../../extensions/common/extensions.js'; +-import { VIEW_CONTAINER } from '../../extensions/browser/extensions.contribution.js'; +-import { ChatContextKeys } from '../../chat/common/actions/chatContextKeys.js'; ++// import { Registry } from '../../../../platform/registry/common/platform.js'; ++// import { IWorkbenchContribution } from '../../../common/contributions.js'; ++// import { SyncDescriptor } from '../../../../platform/instantiation/common/descriptors.js'; ++// import { DefaultViewsContext, SearchMcpServersContext } from '../../extensions/common/extensions.js'; ++// import { VIEW_CONTAINER } from '../../extensions/browser/extensions.contribution.js'; ++// import { ChatContextKeys } from '../../chat/common/actions/chatContextKeys.js'; + import { Button } from '../../../../base/browser/ui/button/button.js'; + import { defaultButtonStyles } from '../../../../platform/theme/browser/defaultStyles.js'; + import { AbstractExtensionsListView } from '../../extensions/browser/extensionsViews.js'; +@@ -48,8 +48,8 @@ import { HoverPosition } from '../../../../base/browser/ui/hover/hoverWidget.js' + import { IWorkbenchLayoutService, Position } from '../../../services/layout/browser/layoutService.js'; + import { mcpServerIcon } from './mcpServerIcons.js'; + import { IPagedRenderer } from '../../../../base/browser/ui/list/listPaging.js'; +-import { IMcpGalleryManifestService, McpGalleryManifestStatus } from '../../../../platform/mcp/common/mcpGalleryManifest.js'; +-import { ProductQualityContext } from '../../../../platform/contextkey/common/contextkeys.js'; ++import { IMcpGalleryManifestService } from '../../../../platform/mcp/common/mcpGalleryManifest.js'; ++// import { ProductQualityContext } from '../../../../platform/contextkey/common/contextkeys.js'; + import { SeverityIcon } from '../../../../base/browser/ui/severityIcon/severityIcon.js'; + import { IMarkdownRendererService } from '../../../../platform/markdown/browser/markdownRenderer.js'; + import { ILogService } from '../../../../platform/log/common/log.js'; +@@ -531,53 +531,53 @@ export class DefaultBrowseMcpServersView extends McpServersListView { + } + } + +-export class McpServersViewsContribution extends Disposable implements IWorkbenchContribution { +- +- static ID = 'workbench.mcp.servers.views.contribution'; +- +- constructor() { +- super(); +- +- Registry.as(ViewExtensions.ViewsRegistry).registerViews([ +- { +- id: InstalledMcpServersViewId, +- name: localize2('mcp-installed', "MCP Servers - Installed"), +- ctorDescriptor: new SyncDescriptor(McpServersListView, [{}]), +- when: ContextKeyExpr.and(DefaultViewsContext, HasInstalledMcpServersContext, ChatContextKeys.Setup.hidden.negate(), ChatContextKeys.Setup.disabledInWorkspace.negate()), +- weight: 40, +- order: 4, +- canToggleVisibility: true +- }, +- { +- id: 'workbench.views.mcp.default.marketplace', +- name: localize2('mcp', "MCP Servers"), +- ctorDescriptor: new SyncDescriptor(DefaultBrowseMcpServersView, [{}]), +- when: ContextKeyExpr.and(DefaultViewsContext, HasInstalledMcpServersContext.toNegated(), ChatContextKeys.Setup.hidden.negate(), ChatContextKeys.Setup.disabledInWorkspace.negate(), McpServersGalleryStatusContext.isEqualTo(McpGalleryManifestStatus.Available), ContextKeyExpr.or(ContextKeyDefinedExpr.create(`config.${mcpGalleryServiceUrlConfig}`), ProductQualityContext.notEqualsTo('stable'), ContextKeyDefinedExpr.create(`config.${mcpGalleryServiceEnablementConfig}`))), +- weight: 40, +- order: 4, +- canToggleVisibility: true +- }, +- { +- id: 'workbench.views.mcp.marketplace', +- name: localize2('mcp', "MCP Servers"), +- ctorDescriptor: new SyncDescriptor(McpServersListView, [{}]), +- when: ContextKeyExpr.and(SearchMcpServersContext, ChatContextKeys.Setup.hidden.negate(), ChatContextKeys.Setup.disabledInWorkspace.negate(), McpServersGalleryStatusContext.isEqualTo(McpGalleryManifestStatus.Available), ContextKeyExpr.or(ContextKeyDefinedExpr.create(`config.${mcpGalleryServiceUrlConfig}`), ProductQualityContext.notEqualsTo('stable'), ContextKeyDefinedExpr.create(`config.${mcpGalleryServiceEnablementConfig}`))), +- }, +- { +- id: 'workbench.views.mcp.default.welcomeView', +- name: localize2('mcp', "MCP Servers"), +- ctorDescriptor: new SyncDescriptor(DefaultBrowseMcpServersView, [{ showWelcome: true }]), +- when: ContextKeyExpr.and(DefaultViewsContext, HasInstalledMcpServersContext.toNegated(), ChatContextKeys.Setup.hidden.negate(), ChatContextKeys.Setup.disabledInWorkspace.negate(), McpServersGalleryStatusContext.isEqualTo(McpGalleryManifestStatus.Available), ContextKeyDefinedExpr.create(`config.${mcpGalleryServiceUrlConfig}`).negate(), ProductQualityContext.isEqualTo('stable'), ContextKeyDefinedExpr.create(`config.${mcpGalleryServiceEnablementConfig}`).negate()), +- weight: 40, +- order: 4, +- canToggleVisibility: true +- }, +- { +- id: 'workbench.views.mcp.welcomeView', +- name: localize2('mcp', "MCP Servers"), +- ctorDescriptor: new SyncDescriptor(McpServersListView, [{ showWelcome: true }]), +- when: ContextKeyExpr.and(SearchMcpServersContext, ChatContextKeys.Setup.hidden.negate(), ChatContextKeys.Setup.disabledInWorkspace.negate(), McpServersGalleryStatusContext.isEqualTo(McpGalleryManifestStatus.Available), ContextKeyDefinedExpr.create(`config.${mcpGalleryServiceUrlConfig}`).negate(), ProductQualityContext.isEqualTo('stable'), ContextKeyDefinedExpr.create(`config.${mcpGalleryServiceEnablementConfig}`).negate()), +- } +- ], VIEW_CONTAINER); +- } +-} ++// export class McpServersViewsContribution extends Disposable implements IWorkbenchContribution { ++ ++// static ID = 'workbench.mcp.servers.views.contribution'; ++ ++// constructor() { ++// super(); ++ ++// Registry.as(ViewExtensions.ViewsRegistry).registerViews([ ++// { ++// id: InstalledMcpServersViewId, ++// name: localize2('mcp-installed', "MCP Servers - Installed"), ++// ctorDescriptor: new SyncDescriptor(McpServersListView, [{}]), ++// when: ContextKeyExpr.and(DefaultViewsContext, HasInstalledMcpServersContext, ChatContextKeys.Setup.hidden.negate(), ChatContextKeys.Setup.disabledInWorkspace.negate()), ++// weight: 40, ++// order: 4, ++// canToggleVisibility: true ++// }, ++// { ++// id: 'workbench.views.mcp.default.marketplace', ++// name: localize2('mcp', "MCP Servers"), ++// ctorDescriptor: new SyncDescriptor(DefaultBrowseMcpServersView, [{}]), ++// when: ContextKeyExpr.and(DefaultViewsContext, HasInstalledMcpServersContext.toNegated(), ChatContextKeys.Setup.hidden.negate(), ChatContextKeys.Setup.disabledInWorkspace.negate(), McpServersGalleryStatusContext.isEqualTo(McpGalleryManifestStatus.Available), ContextKeyExpr.or(ContextKeyDefinedExpr.create(`config.${mcpGalleryServiceUrlConfig}`), ProductQualityContext.notEqualsTo('stable'), ContextKeyDefinedExpr.create(`config.${mcpGalleryServiceEnablementConfig}`))), ++// weight: 40, ++// order: 4, ++// canToggleVisibility: true ++// }, ++// { ++// id: 'workbench.views.mcp.marketplace', ++// name: localize2('mcp', "MCP Servers"), ++// ctorDescriptor: new SyncDescriptor(McpServersListView, [{}]), ++// when: ContextKeyExpr.and(SearchMcpServersContext, ChatContextKeys.Setup.hidden.negate(), ChatContextKeys.Setup.disabledInWorkspace.negate(), McpServersGalleryStatusContext.isEqualTo(McpGalleryManifestStatus.Available), ContextKeyExpr.or(ContextKeyDefinedExpr.create(`config.${mcpGalleryServiceUrlConfig}`), ProductQualityContext.notEqualsTo('stable'), ContextKeyDefinedExpr.create(`config.${mcpGalleryServiceEnablementConfig}`))), ++// }, ++// { ++// id: 'workbench.views.mcp.default.welcomeView', ++// name: localize2('mcp', "MCP Servers"), ++// ctorDescriptor: new SyncDescriptor(DefaultBrowseMcpServersView, [{ showWelcome: true }]), ++// when: ContextKeyExpr.and(DefaultViewsContext, HasInstalledMcpServersContext.toNegated(), ChatContextKeys.Setup.hidden.negate(), ChatContextKeys.Setup.disabledInWorkspace.negate(), McpServersGalleryStatusContext.isEqualTo(McpGalleryManifestStatus.Available), ContextKeyDefinedExpr.create(`config.${mcpGalleryServiceUrlConfig}`).negate(), ProductQualityContext.isEqualTo('stable'), ContextKeyDefinedExpr.create(`config.${mcpGalleryServiceEnablementConfig}`).negate()), ++// weight: 40, ++// order: 4, ++// canToggleVisibility: true ++// }, ++// { ++// id: 'workbench.views.mcp.welcomeView', ++// name: localize2('mcp', "MCP Servers"), ++// ctorDescriptor: new SyncDescriptor(McpServersListView, [{ showWelcome: true }]), ++// when: ContextKeyExpr.and(SearchMcpServersContext, ChatContextKeys.Setup.hidden.negate(), ChatContextKeys.Setup.disabledInWorkspace.negate(), McpServersGalleryStatusContext.isEqualTo(McpGalleryManifestStatus.Available), ContextKeyDefinedExpr.create(`config.${mcpGalleryServiceUrlConfig}`).negate(), ProductQualityContext.isEqualTo('stable'), ContextKeyDefinedExpr.create(`config.${mcpGalleryServiceEnablementConfig}`).negate()), ++// } ++// ], VIEW_CONTAINER); ++// } ++// } diff --git a/patches/whitelist-keybingding.diff b/patches/whitelist-keybingding.diff new file mode 100644 index 000000000000..7277ec87a00e --- /dev/null +++ b/patches/whitelist-keybingding.diff @@ -0,0 +1,41 @@ +diff --git code-server/lib/vscode/src/vs/workbench/services/keybinding/browser/keybindingService.ts b/src/vs/workbench/services/keybinding/browser/keybindingService.ts +index 5db49b2be12..b6c6670231a 100644 +--- code-server/lib/vscode/src/vs/workbench/services/keybinding/browser/keybindingService.ts ++++ code-server/lib/vscode/src/vs/workbench/services/keybinding/browser/keybindingService.ts +@@ -184,6 +184,36 @@ export class WorkbenchKeybindingService extends AbstractKeybindingService { + readonly contribution: KeybindingsSchemaContribution; + }> = []; + private readonly kbsJsonSchema: KeybindingsJsonSchema; ++ protected override _dispatch(e: IKeyboardEvent,target: never): boolean { ++ // 白名单允许的快捷键组合 ++ const allowSet = new Set([ ++ 'ctrl+keyc', ++ 'ctrl+keyv', ++ 'ctrl+keyx', ++ 'ctrl+keyz', ++ 'ctrl+keys', ++ 'ctrl+keyf', ++ ]); ++ ++ // 组装当前按键标识(仅处理Ctrl组合,Mac meta单独区分) ++ let keyLabel = ''; ++ if (e.ctrlKey && !e.metaKey) { ++ keyLabel = `ctrl+${e.code.toLowerCase()}`; ++ } ++ // Mac系统兼容 meta(cmd) 版本 ++ if (e.metaKey && !e.ctrlKey) { ++ keyLabel = `ctrl+${e.code.toLowerCase()}`; ++ } ++ // 不在白名单,直接返回false,不执行任何快捷键逻辑 ++ if (!allowSet.has(keyLabel)) { ++ return false; ++ } ++ ++ // 白名单按键放行,走原生分发逻辑 ++ return super._dispatch(e, target); ++} ++ ++ + + constructor( + @IContextKeyService contextKeyService: IContextKeyService, diff --git a/tsconfig.json b/tsconfig.json index 6ff95cccab31..03e6ad33934e 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -13,7 +13,7 @@ "experimentalDecorators": true, "esModuleInterop": true, "allowSyntheticDefaultImports": true, - "sourceMap": true, + "sourceMap": false, "tsBuildInfoFile": "./.cache/tsbuildinfo", "incremental": true, "typeRoots": [ From 143d2095af4254a338e28183db51aa4478198b55 Mon Sep 17 00:00:00 2001 From: jane_yang <3028139423@qq.com> Date: Thu, 16 Jul 2026 20:02:21 +0800 Subject: [PATCH 2/2] feat: hide menu bar. --- patches/ui-hidden.diff | 194 +++++++++++++++++++++++++---------------- 1 file changed, 121 insertions(+), 73 deletions(-) diff --git a/patches/ui-hidden.diff b/patches/ui-hidden.diff index 968c758e63e9..b245b9050712 100644 --- a/patches/ui-hidden.diff +++ b/patches/ui-hidden.diff @@ -1,21 +1,21 @@ -diff --git code-server/lib/vscode/src/vs/workbench/browser/parts/activitybar/activitybarPart.ts code-server/lib/vscode/src/vs/workbench/browser/parts/activitybar/activitybarPart.ts -index ee371523d831..0e3afb8a208f 100644 ---- code-server/lib/vscode/src/vs/workbench/browser/parts/activitybar/activitybarPart.ts +Index: code-server/lib/vscode/src/vs/workbench/browser/parts/activitybar/activitybarPart.ts +=================================================================== +--- code-server.orig/lib/vscode/src/vs/workbench/browser/parts/activitybar/activitybarPart.ts +++ code-server/lib/vscode/src/vs/workbench/browser/parts/activitybar/activitybarPart.ts -@@ -165,7 +165,7 @@ export class ActivitybarPart extends Part { +@@ -165,7 +165,7 @@ export class ActivitybarPart extends Par activeBackgroundColor: undefined, inactiveBackgroundColor: undefined, activeBorderBottomColor: undefined, }), overflowActionSize: actionHeight, - }, Parts.ACTIVITYBAR_PART, this.paneCompositePart, true); + }, Parts.ACTIVITYBAR_PART, this.paneCompositePart, false); } - + protected override createContentArea(parent: HTMLElement): HTMLElement { -diff --git code-server/lib/vscode/src/vs/workbench/contrib/chat/browser/agentPluginsView.ts code-server/lib/vscode/src/vs/workbench/contrib/chat/browser/agentPluginsView.ts -index 329a7c6ed987..55293d97d2f4 100644 ---- code-server/lib/vscode/src/vs/workbench/contrib/chat/browser/agentPluginsView.ts +Index: code-server/lib/vscode/src/vs/workbench/contrib/chat/browser/agentPluginsView.ts +=================================================================== +--- code-server.orig/lib/vscode/src/vs/workbench/contrib/chat/browser/agentPluginsView.ts +++ code-server/lib/vscode/src/vs/workbench/contrib/chat/browser/agentPluginsView.ts -@@ -10,38 +10,38 @@ import { IListContextMenuEvent } from '../../../../base/browser/ui/list/list.js' +@@ -10,38 +10,38 @@ import { IListContextMenuEvent } from '. import { IPagedRenderer } from '../../../../base/browser/ui/list/listPaging.js'; import { Action, IAction, Separator } from '../../../../base/common/actions.js'; import { RunOnceScheduler } from '../../../../base/common/async.js'; @@ -68,19 +68,19 @@ index 329a7c6ed987..55293d97d2f4 100644 import { IAgentPlugin, IAgentPluginService } from '../common/plugins/agentPluginService.js'; import { isContributionEnabled } from '../common/enablement.js'; import { IPluginInstallService } from '../common/plugins/pluginInstallService.js'; -@@ -49,7 +49,7 @@ import { hasSourceChanged, IMarketplacePlugin, IPluginMarketplaceService } from +@@ -49,7 +49,7 @@ import { hasSourceChanged, IMarketplaceP import { AgentPluginEditorInput } from './agentPluginEditor/agentPluginEditorInput.js'; import { AgentPluginItemKind, IAgentPluginItem, IInstalledPluginItem, IMarketplacePluginItem } from './agentPluginEditor/agentPluginItems.js'; import { getInstalledPluginContextMenuActions, InstallPluginAction, OpenPluginReadmeAction } from './agentPluginActions.js'; -import { InstalledAgentPluginsViewId, HasInstalledAgentPluginsContext } from './chat.js'; +// import { InstalledAgentPluginsViewId } from './chat.js'; - + //#region Item model - -@@ -556,114 +556,114 @@ export class AgentPluginsListView extends AbstractExtensionsListView(ViewExtensions.ViewsRegistry).registerViews([{ +@@ -450,29 +451,31 @@ Registry.as(ViewExtensio }], VIEW_CONTAINER); - - + + -const viewContainer = Registry.as(ViewExtensions.ViewContainersRegistry).registerViewContainer({ - id: VIEWLET_ID, - title: nls.localize2('run and debug', "Run and Debug"), @@ -396,7 +394,7 @@ index 6a10c81e6bee..92bb10b93ff5 100644 +// }, ViewContainerLocation.Sidebar); + +//const viewContainer = undefined; - + // Register default debug views -const viewsRegistry = Registry.as(ViewExtensions.ViewsRegistry); -viewsRegistry.registerViews([{ id: VARIABLES_VIEW_ID, name: nls.localize2('variables', "Variables"), containerIcon: icons.variablesViewIcon, ctorDescriptor: new SyncDescriptor(VariablesView), order: 10, weight: 40, canToggleVisibility: true, canMoveView: true, focusCommand: { id: 'workbench.debug.action.focusVariablesView' }, when: CONTEXT_DEBUG_UX.isEqualTo('default') }], viewContainer); @@ -412,14 +410,14 @@ index 6a10c81e6bee..92bb10b93ff5 100644 +// viewsRegistry.registerViews([{ id: BREAKPOINTS_VIEW_ID, name: nls.localize2('breakpoints', "Breakpoints"), containerIcon: icons.breakpointsViewIcon, ctorDescriptor: new SyncDescriptor(BreakpointsView), order: 40, weight: 20, canToggleVisibility: true, canMoveView: true, focusCommand: { id: 'workbench.debug.action.focusBreakpointsView' }, when: ContextKeyExpr.or(CONTEXT_BREAKPOINTS_EXIST, CONTEXT_DEBUG_UX.isEqualTo('default'), CONTEXT_HAS_DEBUGGED) }], viewContainer); +// viewsRegistry.registerViews([{ id: WelcomeView.ID, name: WelcomeView.LABEL, containerIcon: icons.runViewIcon, ctorDescriptor: new SyncDescriptor(WelcomeView), order: 1, weight: 40, canToggleVisibility: true, when: CONTEXT_DEBUG_UX.isEqualTo('simple') }], viewContainer); +// viewsRegistry.registerViews([{ id: LOADED_SCRIPTS_VIEW_ID, name: nls.localize2('loadedScripts', "Loaded Scripts"), containerIcon: icons.loadedScriptsViewIcon, ctorDescriptor: new SyncDescriptor(LoadedScriptsView), order: 35, weight: 5, canToggleVisibility: true, canMoveView: true, collapsed: true, when: ContextKeyExpr.and(CONTEXT_LOADED_SCRIPTS_SUPPORTED, CONTEXT_DEBUG_UX.isEqualTo('default')) }], viewContainer); - + // Register disassembly view - -diff --git code-server/lib/vscode/src/vs/workbench/contrib/extensions/browser/extensions.contribution.ts code-server/lib/vscode/src/vs/workbench/contrib/extensions/browser/extensions.contribution.ts -index 489257f34083..c57ae6d54794 100644 ---- code-server/lib/vscode/src/vs/workbench/contrib/extensions/browser/extensions.contribution.ts + +Index: code-server/lib/vscode/src/vs/workbench/contrib/extensions/browser/extensions.contribution.ts +=================================================================== +--- code-server.orig/lib/vscode/src/vs/workbench/contrib/extensions/browser/extensions.contribution.ts +++ code-server/lib/vscode/src/vs/workbench/contrib/extensions/browser/extensions.contribution.ts -@@ -7,7 +7,7 @@ import { IAction } from '../../../../base/common/actions.js'; +@@ -7,7 +7,7 @@ import { IAction } from '../../../../bas import { CancellationToken } from '../../../../base/common/cancellation.js'; import { onUnexpectedError } from '../../../../base/common/errors.js'; import { Event } from '../../../../base/common/event.js'; @@ -428,7 +426,7 @@ index 489257f34083..c57ae6d54794 100644 import { mnemonicButtonLabel } from '../../../../base/common/labels.js'; import { Disposable, DisposableStore, IDisposable, isDisposable } from '../../../../base/common/lifecycle.js'; import { Schemas } from '../../../../base/common/network.js'; -@@ -49,7 +49,7 @@ import { Extensions as ConfigurationMigrationExtensions, IConfigurationMigration +@@ -49,7 +49,7 @@ import { Extensions as ConfigurationMigr import { IsSessionsWindowContext, ResourceContextKey, WorkbenchStateContext } from '../../../common/contextkeys.js'; import { IWorkbenchContribution, IWorkbenchContributionsRegistry, registerWorkbenchContribution2, Extensions as WorkbenchExtensions, WorkbenchPhase } from '../../../common/contributions.js'; import { EditorExtensions } from '../../../common/editor.js'; @@ -437,7 +435,7 @@ index 489257f34083..c57ae6d54794 100644 import { DEFAULT_ACCOUNT_SIGN_IN_COMMAND } from '../../../services/accounts/browser/defaultAccount.js'; import { IEditorService } from '../../../services/editor/common/editorService.js'; import { EnablementState, IExtensionManagementServerService, IPublisherInfo, IWorkbenchExtensionEnablementService, IWorkbenchExtensionManagementService } from '../../../services/extensionManagement/common/extensionManagement.js'; -@@ -80,9 +80,9 @@ import { ClearLanguageAction, ConfigureWorkspaceFolderRecommendedExtensionsActio +@@ -80,9 +80,9 @@ import { ClearLanguageAction, ConfigureW import { ExtensionActivationProgress } from './extensionsActivationProgress.js'; import { ExtensionsCompletionItemsProvider } from './extensionsCompletionItemsProvider.js'; import { ExtensionDependencyChecker } from './extensionsDependencyChecker.js'; @@ -449,10 +447,10 @@ index 489257f34083..c57ae6d54794 100644 import { ExtensionsWorkbenchService } from './extensionsWorkbenchService.js'; import './media/extensionManagement.css'; import { UnsupportedExtensionsMigrationContrib } from './unsupportedExtensionsMigrationContribution.js'; -@@ -111,22 +111,24 @@ Registry.as(EditorExtensions.EditorPane).registerEditorPane +@@ -111,22 +111,24 @@ Registry.as(EditorE new SyncDescriptor(ExtensionsInput) ]); - + -export const VIEW_CONTAINER = Registry.as(ViewContainerExtensions.ViewContainersRegistry).registerViewContainer( - { - id: VIEWLET_ID, @@ -487,29 +485,29 @@ index 489257f34083..c57ae6d54794 100644 +// }, ViewContainerLocation.Sidebar); + +export const VIEW_CONTAINER = undefined; // Do not register the view container for extensions, since it is registered in the workbench contributions - + Registry.as(ConfigurationExtensions.Configuration) .registerConfiguration({ -diff --git code-server/lib/vscode/src/vs/workbench/contrib/mcp/browser/mcp.view.contribution.ts code-server/lib/vscode/src/vs/workbench/contrib/mcp/browser/mcp.view.contribution.ts -index 204f4682f132..45dad9ac1148 100644 ---- code-server/lib/vscode/src/vs/workbench/contrib/mcp/browser/mcp.view.contribution.ts +Index: code-server/lib/vscode/src/vs/workbench/contrib/mcp/browser/mcp.view.contribution.ts +=================================================================== +--- code-server.orig/lib/vscode/src/vs/workbench/contrib/mcp/browser/mcp.view.contribution.ts +++ code-server/lib/vscode/src/vs/workbench/contrib/mcp/browser/mcp.view.contribution.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ - + -import { registerWorkbenchContribution2, WorkbenchPhase } from '../../../common/contributions.js'; -import { McpServersViewsContribution } from './mcpServersView.js'; +// import { registerWorkbenchContribution2, WorkbenchPhase } from '../../../common/contributions.js'; +// import { McpServersViewsContribution } from './mcpServersView.js'; - + -registerWorkbenchContribution2(McpServersViewsContribution.ID, McpServersViewsContribution, WorkbenchPhase.AfterRestored); +// registerWorkbenchContribution2(McpServersViewsContribution.ID, McpServersViewsContribution, WorkbenchPhase.AfterRestored); -diff --git code-server/lib/vscode/src/vs/workbench/contrib/mcp/browser/mcpServersView.ts code-server/lib/vscode/src/vs/workbench/contrib/mcp/browser/mcpServersView.ts -index dc231e441dd4..b628cdc89e70 100644 ---- code-server/lib/vscode/src/vs/workbench/contrib/mcp/browser/mcpServersView.ts +Index: code-server/lib/vscode/src/vs/workbench/contrib/mcp/browser/mcpServersView.ts +=================================================================== +--- code-server.orig/lib/vscode/src/vs/workbench/contrib/mcp/browser/mcpServersView.ts +++ code-server/lib/vscode/src/vs/workbench/contrib/mcp/browser/mcpServersView.ts -@@ -9,11 +9,11 @@ import { ActionBar } from '../../../../base/browser/ui/actionbar/actionbar.js'; +@@ -9,11 +9,11 @@ import { ActionBar } from '../../../../b import { IListContextMenuEvent } from '../../../../base/browser/ui/list/list.js'; import { Emitter, Event } from '../../../../base/common/event.js'; import { createMarkdownCommandLink, MarkdownString } from '../../../../base/common/htmlContent.js'; @@ -524,7 +522,7 @@ index dc231e441dd4..b628cdc89e70 100644 import { IContextMenuService } from '../../../../platform/contextview/browser/contextView.js'; import { IDialogService } from '../../../../platform/dialogs/common/dialogs.js'; import { IHoverService } from '../../../../platform/hover/browser/hover.js'; -@@ -25,21 +25,21 @@ import { IOpenerService } from '../../../../platform/opener/common/opener.js'; +@@ -25,21 +25,21 @@ import { IOpenerService } from '../../.. import { IThemeService } from '../../../../platform/theme/common/themeService.js'; import { getLocationBasedViewColors } from '../../../browser/parts/views/viewPane.js'; import { IViewletViewOptions } from '../../../browser/parts/views/viewsViewlet.js'; @@ -555,7 +553,7 @@ index dc231e441dd4..b628cdc89e70 100644 import { Button } from '../../../../base/browser/ui/button/button.js'; import { defaultButtonStyles } from '../../../../platform/theme/browser/defaultStyles.js'; import { AbstractExtensionsListView } from '../../extensions/browser/extensionsViews.js'; -@@ -48,8 +48,8 @@ import { HoverPosition } from '../../../../base/browser/ui/hover/hoverWidget.js' +@@ -48,8 +48,8 @@ import { HoverPosition } from '../../../ import { IWorkbenchLayoutService, Position } from '../../../services/layout/browser/layoutService.js'; import { mcpServerIcon } from './mcpServerIcons.js'; import { IPagedRenderer } from '../../../../base/browser/ui/list/listPaging.js'; @@ -566,17 +564,21 @@ index dc231e441dd4..b628cdc89e70 100644 import { SeverityIcon } from '../../../../base/browser/ui/severityIcon/severityIcon.js'; import { IMarkdownRendererService } from '../../../../platform/markdown/browser/markdownRenderer.js'; import { ILogService } from '../../../../platform/log/common/log.js'; -@@ -531,53 +531,53 @@ export class DefaultBrowseMcpServersView extends McpServersListView { +@@ -531,53 +531,53 @@ export class DefaultBrowseMcpServersView } } - + -export class McpServersViewsContribution extends Disposable implements IWorkbenchContribution { -- ++// export class McpServersViewsContribution extends Disposable implements IWorkbenchContribution { + - static ID = 'workbench.mcp.servers.views.contribution'; -- ++// static ID = 'workbench.mcp.servers.views.contribution'; + - constructor() { - super(); -- ++// constructor() { ++// super(); + - Registry.as(ViewExtensions.ViewsRegistry).registerViews([ - { - id: InstalledMcpServersViewId, @@ -620,13 +622,6 @@ index dc231e441dd4..b628cdc89e70 100644 - ], VIEW_CONTAINER); - } -} -+// export class McpServersViewsContribution extends Disposable implements IWorkbenchContribution { -+ -+// static ID = 'workbench.mcp.servers.views.contribution'; -+ -+// constructor() { -+// super(); -+ +// Registry.as(ViewExtensions.ViewsRegistry).registerViews([ +// { +// id: InstalledMcpServersViewId, @@ -670,3 +665,56 @@ index dc231e441dd4..b628cdc89e70 100644 +// ], VIEW_CONTAINER); +// } +// } +Index: code-server/lib/vscode/src/vs/workbench/browser/workbench.contribution.ts +=================================================================== +--- code-server.orig/lib/vscode/src/vs/workbench/browser/workbench.contribution.ts ++++ code-server/lib/vscode/src/vs/workbench/browser/workbench.contribution.ts +@@ -865,27 +865,27 @@ const registry = Registry.as