Skip to content

Commit e9fc066

Browse files
committed
Switch to use native sessions view
Removes the webview based session view in favor of the native session view
1 parent 3a40a05 commit e9fc066

17 files changed

+61
-1542
lines changed

package.json

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,6 @@
5757
"onFileSystem:githubpr",
5858
"onFileSystem:githubcommit",
5959
"onFileSystem:review",
60-
"onWebviewPanel:pr.codingAgentSessionLogView",
6160
"onWebviewPanel:IssueOverview",
6261
"onWebviewPanel:PullRequestOverview"
6362
],
@@ -3463,10 +3462,6 @@
34633462
"command": "pr.checkoutOnVscodeDevFromDescription",
34643463
"group": "checkout@1",
34653464
"when": "webviewId == PullRequestOverview && github:checkoutMenu"
3466-
},
3467-
{
3468-
"command": "pr.openSessionLogFromDescription",
3469-
"when": "webviewId == PullRequestOverview && github:codingAgentMenu"
34703465
}
34713466
],
34723467
"chat/chatSessions": [
@@ -4246,7 +4241,6 @@
42464241
"mocha": "^9.0.1",
42474242
"mocha-junit-reporter": "1.23.0",
42484243
"mocha-multi-reporters": "1.1.7",
4249-
"monaco-editor-webpack-plugin": "^7.1.0",
42504244
"os-browserify": "^0.3.0",
42514245
"p-all": "^1.0.0",
42524246
"path-browserify": "1.0.1",
@@ -4287,10 +4281,8 @@
42874281
"lru-cache": "6.0.0",
42884282
"markdown-it": "^14.1.0",
42894283
"marked": "^4.0.10",
4290-
"monaco-editor": "^0.52.2",
42914284
"react": "^16.12.0",
42924285
"react-dom": "^16.12.0",
4293-
"shiki": "^3.7.0",
42944286
"ssh-config": "4.1.1",
42954287
"stream-http": "^3.2.0",
42964288
"temporal-polyfill": "^0.3.0",
@@ -4304,4 +4296,4 @@
43044296
"string_decoder": "^1.3.0"
43054297
},
43064298
"license": "MIT"
4307-
}
4299+
}

src/@types/vscode.proposed.chatParticipantAdditions.d.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -600,6 +600,11 @@ declare module 'vscode' {
600600
* TODO Needed for now to drive the variableName-type reference, but probably both of these should go away in the future.
601601
*/
602602
readonly name: string;
603+
604+
/**
605+
* The list of tools were referenced in the value of the reference
606+
*/
607+
readonly toolReferences?: readonly ChatLanguageModelToolReference[];
603608
}
604609

605610
export interface ChatResultFeedback {
@@ -642,5 +647,6 @@ declare module 'vscode' {
642647

643648
export interface ChatRequest {
644649
modeInstructions?: string;
650+
modeInstructionsToolReferences?: readonly ChatLanguageModelToolReference[];
645651
}
646652
}

src/commands.ts

Lines changed: 1 addition & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -33,13 +33,12 @@ import { PullRequestOverviewPanel } from './github/pullRequestOverview';
3333
import { chooseItem } from './github/quickPicks';
3434
import { RepositoriesManager } from './github/repositoriesManager';
3535
import { getIssuesUrl, getPullsUrl, isInCodespaces, ISSUE_OR_URL_EXPRESSION, parseIssueExpressionOutput, vscodeDevPrLink } from './github/utils';
36-
import { CodingAgentContext, OverviewContext } from './github/views';
36+
import { OverviewContext } from './github/views';
3737
import { isNotificationTreeItem, NotificationTreeItem } from './notifications/notificationItem';
3838
import { PullRequestsTreeDataProvider } from './view/prsTreeDataProvider';
3939
import { ReviewCommentController } from './view/reviewCommentController';
4040
import { ReviewManager } from './view/reviewManager';
4141
import { ReviewsManager } from './view/reviewsManager';
42-
import { SessionLogViewManager } from './view/sessionLogView';
4342
import { CategoryTreeNode } from './view/treeNodes/categoryNode';
4443
import { CommitNode } from './view/treeNodes/commitNode';
4544
import {
@@ -863,18 +862,6 @@ export function registerCommands(
863862
return vscode.env.openExternal(vscode.Uri.parse(vscodeDevPrLink(resolved.pr)));
864863
}));
865864

866-
context.subscriptions.push(vscode.commands.registerCommand('pr.openSessionLogFromDescription', async (context: CodingAgentContext | undefined) => {
867-
if (!context) {
868-
return vscode.window.showErrorMessage(vscode.l10n.t('No pull request context provided for checkout.'));
869-
}
870-
const resolved = await resolvePr({ ...context, number: context.pullNumber });
871-
if (!resolved) {
872-
return vscode.window.showErrorMessage(vscode.l10n.t('Unable to resolve pull request for checkout.'));
873-
}
874-
return SessionLogViewManager.instance?.openForPull(resolved.pr, context, context.openToTheSide);
875-
876-
}));
877-
878865
context.subscriptions.push(
879866
vscode.commands.registerCommand('pr.exit', async (pr: PRNode | RepositoryChangesNode | PullRequestModel | undefined) => {
880867
let pullRequestModel: PullRequestModel | undefined;

src/extension.ts

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,6 @@ import { PRNotificationDecorationProvider } from './view/prNotificationDecoratio
4949
import { PullRequestsTreeDataProvider } from './view/prsTreeDataProvider';
5050
import { ReviewManager, ShowPullRequest } from './view/reviewManager';
5151
import { ReviewsManager } from './view/reviewsManager';
52-
import { SessionLogViewManager } from './view/sessionLogView';
5352
import { TreeDecorationProviders } from './view/treeDecorationProviders';
5453
import { WebviewViewCoordinator } from './view/webviewViewCoordinator';
5554

@@ -244,9 +243,6 @@ async function init(
244243

245244
context.subscriptions.push(new GitLensIntegration());
246245

247-
const sessionLogViewManager = new SessionLogViewManager(credentialStore, context, reposManager, telemetry, copilotRemoteAgentManager);
248-
context.subscriptions.push(sessionLogViewManager);
249-
250246
context.subscriptions.push(new OverviewRestorer(reposManager, telemetry, context.extensionUri, credentialStore));
251247

252248
await vscode.commands.executeCommand('setContext', 'github:initialized', true);

src/github/copilotRemoteAgent.ts

Lines changed: 47 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,27 @@ const body_suffix = vscode.l10n.t('Created from VS Code via the [GitHub Pull Req
4545

4646
const PREFERRED_GITHUB_CODING_AGENT_REMOTE_WORKSPACE_KEY = 'PREFERRED_GITHUB_CODING_AGENT_REMOTE';
4747

48+
49+
export namespace SessionIdForPr {
50+
51+
const prefix = 'pull-session-by-index';
52+
53+
export function getId(prNumber: number, sessionIndex: number): string {
54+
return `${prefix}-${prNumber}-${sessionIndex}`;
55+
}
56+
57+
export function parse(id: string): { prNumber: number; sessionIndex: number } | undefined {
58+
const match = id.match(new RegExp(`^${prefix}-(\\d+)-(\\d+)$`));
59+
if (match) {
60+
return {
61+
prNumber: parseInt(match[1], 10),
62+
sessionIndex: parseInt(match[2], 10)
63+
};
64+
}
65+
return undefined;
66+
}
67+
}
68+
4869
export class CopilotRemoteAgentManager extends Disposable {
4970
public static ID = 'CopilotRemoteAgentManager';
5071

@@ -1024,10 +1045,21 @@ export class CopilotRemoteAgentManager extends Disposable {
10241045
return await this.newSessionFlowFromPrompt(id);
10251046
}
10261047

1027-
const pullRequestNumber = parseInt(id);
1028-
if (isNaN(pullRequestNumber)) {
1029-
Logger.error(`Invalid pull request number: ${id}`, CopilotRemoteAgentManager.ID);
1030-
return this.createEmptySession();
1048+
let pullRequestNumber: number | undefined;
1049+
let sessionIndex: number | undefined;
1050+
1051+
const indexedSessionId = SessionIdForPr.parse(id);
1052+
if (indexedSessionId) {
1053+
pullRequestNumber = indexedSessionId.prNumber;
1054+
sessionIndex = indexedSessionId.sessionIndex;
1055+
}
1056+
1057+
if (typeof pullRequestNumber === 'undefined') {
1058+
pullRequestNumber = parseInt(id);
1059+
if (isNaN(pullRequestNumber)) {
1060+
Logger.error(`Invalid pull request number: ${id}`, CopilotRemoteAgentManager.ID);
1061+
return this.createEmptySession();
1062+
}
10311063
}
10321064

10331065
const pullRequest = await this.findPullRequestById(pullRequestNumber, true);
@@ -1039,7 +1071,7 @@ export class CopilotRemoteAgentManager extends Disposable {
10391071
// Parallelize independent operations
10401072
const timelineEvents = pullRequest.getTimelineEvents();
10411073
const changeModels = this.getChangeModels(pullRequest);
1042-
const sessions = await capi.getAllSessions(pullRequest.id);
1074+
let sessions = await capi.getAllSessions(pullRequest.id);
10431075

10441076
if (!sessions || sessions.length === 0) {
10451077
Logger.warn(`No sessions found for pull request ${pullRequestNumber}`, CopilotRemoteAgentManager.ID);
@@ -1051,6 +1083,16 @@ export class CopilotRemoteAgentManager extends Disposable {
10511083
return this.createEmptySession();
10521084
}
10531085

1086+
if (typeof sessionIndex === 'number') {
1087+
const target = sessions.at(sessionIndex);
1088+
if (!target) {
1089+
Logger.error(`Session not found: ${sessionIndex}`, CopilotRemoteAgentManager.ID);
1090+
return this.createEmptySession();
1091+
}
1092+
1093+
sessions = [target];
1094+
}
1095+
10541096
// Create content builder with pre-fetched change models
10551097
const contentBuilder = new ChatSessionContentBuilder(CopilotRemoteAgentManager.ID, COPILOT, changeModels);
10561098

src/github/pullRequestOverview.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ import { ITelemetry } from '../common/telemetry';
1717
import { EventType, ReviewEvent, SessionLinkInfo, TimelineEvent } from '../common/timelineEvent';
1818
import { asPromise, formatError } from '../common/utils';
1919
import { IRequestMessage, PULL_REQUEST_OVERVIEW_VIEW_TYPE } from '../common/webview';
20-
import { SessionLogViewManager } from '../view/sessionLogView';
2120
import { getCopilotApi } from './copilotApi';
2221
import { FolderRepositoryManager } from './folderRepositoryManager';
2322
import {
@@ -38,6 +37,7 @@ import { PullRequestView } from './pullRequestOverviewCommon';
3837
import { pickEmail, reviewersQuickPick } from './quickPicks';
3938
import { parseReviewers } from './utils';
4039
import { CancelCodingAgentReply, MergeArguments, MergeResult, PullRequest, ReviewType, SubmitReviewReply } from './views';
40+
import { SessionIdForPr } from './copilotRemoteAgent';
4141

4242
export class PullRequestOverviewPanel extends IssueOverviewPanel<PullRequestModel> {
4343
public static override ID: string = 'PullRequestOverviewPanel';
@@ -508,7 +508,7 @@ export class PullRequestOverviewPanel extends IssueOverviewPanel<PullRequestMode
508508

509509
private async openSessionLog(message: IRequestMessage<{ link: SessionLinkInfo }>): Promise<void> {
510510
try {
511-
await SessionLogViewManager.instance?.openForPull(this._item, message.args.link, message.args.link.openToTheSide ?? false);
511+
return vscode.window.showChatSession(COPILOT_SWE_AGENT, SessionIdForPr.getId(this._item.number, message.args.link.sessionIndex), {});
512512
} catch (e) {
513513
Logger.error(`Open session log view failed: ${formatError(e)}`, PullRequestOverviewPanel.ID);
514514
}

0 commit comments

Comments
 (0)