@@ -9,8 +9,8 @@ import { disposableTimeout, timeout } from 'vs/base/common/async';
9
9
import { toErrorMessage } from 'vs/base/common/errorMessage' ;
10
10
import { Emitter , Event } from 'vs/base/common/event' ;
11
11
import { Disposable , DisposableStore , IDisposable , MutableDisposable , combinedDisposable , toDisposable } from 'vs/base/common/lifecycle' ;
12
- import { Schemas } from 'vs/base/common/network' ;
13
- import { isEqual } from 'vs/base/common/resources' ;
12
+ import { matchesScheme , Schemas } from 'vs/base/common/network' ;
13
+ import { extUri , isEqual } from 'vs/base/common/resources' ;
14
14
import { isDefined } from 'vs/base/common/types' ;
15
15
import { URI } from 'vs/base/common/uri' ;
16
16
import 'vs/css!./media/chat' ;
@@ -200,11 +200,18 @@ export class ChatWidget extends Disposable implements IChatWidget {
200
200
this . _codeBlockModelCollection = this . _register ( instantiationService . createInstance ( CodeBlockModelCollection ) ) ;
201
201
202
202
this . _register ( codeEditorService . registerCodeEditorOpenHandler ( async ( input : ITextResourceEditorInput , _source : ICodeEditor | null , _sideBySide ?: boolean ) : Promise < ICodeEditor | null > => {
203
- if ( input . resource . scheme !== Schemas . vscodeChatCodeBlock ) {
203
+ let resource = input . resource ;
204
+
205
+ // if trying to open backing documents, actually open the real chat code block doc
206
+ if ( matchesScheme ( resource , Schemas . vscodeCopilotBackingChatCodeBlock ) ) {
207
+ resource = resource . with ( { scheme : Schemas . vscodeChatCodeBlock } ) ;
208
+ }
209
+
210
+ if ( resource . scheme !== Schemas . vscodeChatCodeBlock ) {
204
211
return null ;
205
212
}
206
213
207
- const responseId = input . resource . path . split ( '/' ) . at ( 1 ) ;
214
+ const responseId = resource . path . split ( '/' ) . at ( 1 ) ;
208
215
if ( ! responseId ) {
209
216
return null ;
210
217
}
@@ -214,12 +221,14 @@ export class ChatWidget extends Disposable implements IChatWidget {
214
221
return null ;
215
222
}
216
223
224
+ // TODO: needs to reveal the chat view
225
+
217
226
this . reveal ( item ) ;
218
227
219
228
await timeout ( 0 ) ; // wait for list to actually render
220
229
221
230
for ( const editor of this . renderer . editorsInUse ( ) ?? [ ] ) {
222
- if ( editor . uri ?. toString ( ) === input . resource . toString ( ) ) {
231
+ if ( extUri . isEqual ( editor . uri , resource , true ) ) {
223
232
const inner = editor . editor ;
224
233
if ( input . options ?. selection ) {
225
234
inner . setSelection ( {
0 commit comments