diff --git a/packages/vscode-ide-companion/package.json b/packages/vscode-ide-companion/package.json index 8690ba360..51dc6911b 100644 --- a/packages/vscode-ide-companion/package.json +++ b/packages/vscode-ide-companion/package.json @@ -28,7 +28,14 @@ "ide companion" ], "activationEvents": [ - "onStartupFinished" + "onStartupFinished", + "onView:qwen-code.chatView.sidebar", + "onView:qwen-code.chatView.panel", + "onView:qwen-code.chatView.secondary", + "onCommand:qwen-code.openChat", + "onCommand:qwen-code.focusChat", + "onCommand:qwen-code.newConversation", + "onCommand:qwen-code.showLogs" ], "contributes": { "jsonValidation": [ @@ -40,44 +47,44 @@ "viewsContainers": { "activitybar": [ { - "id": "qwenCodeSidebar", + "id": "qwen-code-sidebar", "title": "Qwen Code", "icon": "assets/sidebar-icon.svg" } ], "panel": [ { - "id": "qwenCodePanel", + "id": "qwen-code-panel", "title": "Qwen Code", "icon": "assets/icon.png" } ], "secondarySidebar": [ { - "id": "qwenCodeSecondary", + "id": "qwen-code-secondary", "title": "Qwen Code", "icon": "assets/icon.png" } ] }, "views": { - "qwenCodeSidebar": [ + "qwen-code-sidebar": [ { "type": "webview", - "id": "qwenCode.chatView.sidebar", + "id": "qwen-code.chatView.sidebar", "name": "Qwen Code" } ], - "qwenCodePanel": [ + "qwen-code-panel": [ { - "id": "qwenCode.chatView.panel", + "id": "qwen-code.chatView.panel", "name": "Qwen Code", "icon": "assets/icon.png" } ], - "qwenCodeSecondary": [ + "qwen-code-secondary": [ { - "id": "qwenCode.chatView.secondary", + "id": "qwen-code.chatView.secondary", "name": "Qwen Code", "icon": "assets/icon.png" } diff --git a/packages/vscode-ide-companion/src/constants/viewIds.ts b/packages/vscode-ide-companion/src/constants/viewIds.ts index 96862d058..140956b26 100644 --- a/packages/vscode-ide-companion/src/constants/viewIds.ts +++ b/packages/vscode-ide-companion/src/constants/viewIds.ts @@ -7,7 +7,9 @@ /** * WebviewView IDs for the three host positions where the chat UI can appear. * These IDs must match the `views` contributions declared in package.json. + * + * Note: We use kebab-case prefix 'qwen-code.' for consistency with command IDs. */ -export const CHAT_VIEW_ID_PANEL = 'qwenCode.chatView.panel'; -export const CHAT_VIEW_ID_SECONDARY = 'qwenCode.chatView.secondary'; -export const CHAT_VIEW_ID_SIDEBAR = 'qwenCode.chatView.sidebar'; +export const CHAT_VIEW_ID_SIDEBAR = 'qwen-code.chatView.sidebar'; +export const CHAT_VIEW_ID_PANEL = 'qwen-code.chatView.panel'; +export const CHAT_VIEW_ID_SECONDARY = 'qwen-code.chatView.secondary'; diff --git a/packages/vscode-ide-companion/src/extension.test.ts b/packages/vscode-ide-companion/src/extension.test.ts index d6128f91e..ea179d948 100644 --- a/packages/vscode-ide-companion/src/extension.test.ts +++ b/packages/vscode-ide-companion/src/extension.test.ts @@ -137,6 +137,23 @@ describe('activate', () => { expect(vscode.workspace.onDidGrantWorkspaceTrust).toHaveBeenCalled(); }); + it('should register webview view providers for all three positions (sidebar, panel, secondary)', async () => { + await activate(context); + + // Verify registerWebviewViewProvider was called 3 times for the three view positions + const registerCalls = vi.mocked(vscode.window.registerWebviewViewProvider) + .mock.calls; + expect(registerCalls).toHaveLength(3); + + // Extract view IDs from the calls + const viewIds = registerCalls.map((call) => call[0]); + + // Verify all three view IDs are registered with consistent naming + expect(viewIds).toContain('qwen-code.chatView.sidebar'); + expect(viewIds).toContain('qwen-code.chatView.panel'); + expect(viewIds).toContain('qwen-code.chatView.secondary'); + }); + it('should launch the Qwen Code when the user clicks the button', async () => { const showInformationMessageMock = vi .mocked(vscode.window.showInformationMessage)