diff --git a/extensions/copilot/package.json b/extensions/copilot/package.json index e0e2ad4fc7c..7b9993c3431 100644 --- a/extensions/copilot/package.json +++ b/extensions/copilot/package.json @@ -1701,6 +1701,36 @@ "view": "codex-placeholder", "when": "true", "contents": "%github.copilot.viewsWelcome.codexPlaceholder%" + }, + { + "view": "copilot-agents-placeholder", + "when": "true", + "contents": "%github.copilot.viewsWelcome.agentsPlaceholder%" + }, + { + "view": "workbench.view.chat.sessions.copilot-cloud-agent", + "when": "workspaceFolderCount == 0", + "contents": "%github.copilot.viewsWelcome.noFolder.contents%" + }, + { + "view": "workbench.view.chat.sessions.copilot-cloud-agent", + "when": "git.state == initialized && gitOpenRepositoryCount == 0 && workspaceFolderCount > 0 && git.parentRepositoryCount == 0", + "contents": "%github.copilot.viewsWelcome.noRepo.contents%" + }, + { + "view": "workbench.view.chat.sessions.copilot-cloud-agent", + "when": "git.state == initialized && workspaceFolderCount > 0 && (git.parentRepositoryCount > 0 || gitOpenRepositoryCount > 0) && !github:hasGitHubRemotes", + "contents": "%github.copilot.viewsWelcome.noGitHub.contents%" + }, + { + "view": "workbench.view.chat.sessions.copilot-cloud-agent", + "when": "github.copilot.chat.cloudSessionsEmpty", + "contents": "%github.copilot.viewsWelcome.cloudSessionsEmpty.contents%" + }, + { + "view": "workbench.view.chat.sessions.copilotcli", + "when": "github.copilot.chat.cliSessionsEmpty", + "contents": "%github.copilot.viewsWelcome.cliSessionsEmpty.contents%" } ], "chatViewsWelcome": [ @@ -3932,6 +3962,12 @@ "name": "OpenAI Codex Agent", "when": "github.copilot.chat.codex.notInstalled && config.chat.experimental.codex.enabled", "icon": "$(file)" + }, + { + "id": "copilot-agents-placeholder", + "name": "GitHub Copilot Agents", + "when": "chatEntitlementSignedOut || !chatIsEnabled", + "icon": "$(copilot)" } ] }, @@ -4182,7 +4218,7 @@ "inputPlaceholder": "Describe your task, type `#` for adding context", "order": 2, "description": "The Copilot CLI Agent works on your local machine", - "when": "config.github.copilot.chat.advanced.copilotCLI.enabled", + "when": "config.github.copilot.chat.advanced.copilotCLI.enabled && !chatEntitlementSignedOut && chatIsEnabled", "capabilities": { "supportsFileAttachments": true, "supportsProblemAttachments": true, @@ -4208,7 +4244,7 @@ "inputPlaceholder": "Describe your task, type `#` for adding context", "order": 1, "description": "Delegate tasks to the GitHub Copilot Cloud Agent. The agent works asynchronously in the cloud to implement changes, iterates via chat, and can create or update pull requests as needed.", - "when": "config.github.copilot.chat.advanced.copilotCodingAgent.enabled", + "when": "config.github.copilot.chat.advanced.copilotCodingAgent.enabled && !chatEntitlementSignedOut && chatIsEnabled", "capabilities": { "supportsFileAttachments": true } diff --git a/extensions/copilot/package.nls.json b/extensions/copilot/package.nls.json index 3d229dea365..eb34dcfd7f0 100644 --- a/extensions/copilot/package.nls.json +++ b/extensions/copilot/package.nls.json @@ -85,6 +85,36 @@ "{Locked='](command:workbench.extensions.action.showExtensionsWithIds?%5B%5B%22openai.chatgpt%22%5D%5D)'}" ] }, + "github.copilot.viewsWelcome.agentsPlaceholder": { + "message": "Sign in to access GitHub Copilot CLI and Cloud Agents.\n\n[Sign in](command:workbench.action.chat.triggerSetupForceSignIn)", + "comment": [ + "{Locked='['}", + "{Locked='](command:workbench.action.chat.triggerSetupForceSignIn)'}" + ] + }, + "github.copilot.viewsWelcome.noFolder.contents": { + "message": "You have not yet opened a folder.\n[Open Folder](command:workbench.action.files.openFolder)", + "comment": [ + "Do not translate what's inside of (...). It is link syntax.", + "{Locked='](command:workbench.action.files.openFolder)'}" + ] + }, + "github.copilot.viewsWelcome.cliSessionsEmpty.contents": { + "message": "[Start CLI Agent Session](command:workbench.action.chat.openNewSessionEditor.copilotcli)", + "comment": [ + "Do not translate what's inside of (...). It is link syntax.", + "{Locked='](command:workbench.action.chat.openNewSessionEditor.copilotcli)'}" + ] + }, + "github.copilot.viewsWelcome.cloudSessionsEmpty.contents": { + "message": "[Start Cloud Agent Session](command:workbench.action.chat.openNewSessionEditor.copilotcloud-agent)", + "comment": [ + "Do not translate what's inside of (...). It is link syntax.", + "{Locked='](command:workbench.action.chat.openNewSessionEditor.copilotcloud-agent)'}" + ] + }, + "github.copilot.viewsWelcome.noGitHub.contents": "Clone or open a GitHub repository to get started", + "github.copilot.viewsWelcome.noRepo.contents": "No git repositories found", "github.copilot.command.logWorkbenchState": "Log Workbench State", "github.copilot.command.showChatLogView": "Show Chat Debug View", "github.copilot.command.showOutputChannel": "Show Output Channel", diff --git a/extensions/copilot/src/extension/chatSessions/vscode-node/copilotCLIChatSessionsContribution.ts b/extensions/copilot/src/extension/chatSessions/vscode-node/copilotCLIChatSessionsContribution.ts index 19ac6f7978c..2e66de84dfb 100644 --- a/extensions/copilot/src/extension/chatSessions/vscode-node/copilotCLIChatSessionsContribution.ts +++ b/extensions/copilot/src/extension/chatSessions/vscode-node/copilotCLIChatSessionsContribution.ts @@ -99,6 +99,9 @@ export class CopilotCLIChatSessionItemProvider extends Disposable implements vsc status: this.copilotcliSessionService.getSessionStatus(session.id) ?? vscode.ChatSessionStatus.Completed, } satisfies vscode.ChatSessionItem)); + const count = diskSessions.length; + vscode.commands.executeCommand('setContext', 'github.copilot.chat.cliSessionsEmpty', count === 0); + return diskSessions; } diff --git a/extensions/copilot/src/extension/chatSessions/vscode-node/copilotCloudSessionsProvider.ts b/extensions/copilot/src/extension/chatSessions/vscode-node/copilotCloudSessionsProvider.ts index 67de39d2dcd..e554bfb6af2 100644 --- a/extensions/copilot/src/extension/chatSessions/vscode-node/copilotCloudSessionsProvider.ts +++ b/extensions/copilot/src/extension/chatSessions/vscode-node/copilotCloudSessionsProvider.ts @@ -210,7 +210,10 @@ export class CopilotChatSessionsProvider extends Disposable implements vscode.Ch this.chatSessions.set(pr.number, pr); return session; })); - return sessionItems.filter(item => item !== undefined); + const filteredSessions = sessionItems.filter(item => item !== undefined); + + vscode.commands.executeCommand('setContext', 'github.copilot.chat.cloudSessionsEmpty', filteredSessions.length === 0); + return filteredSessions; })().finally(() => { this.chatSessionItemsPromise = undefined; });