From c7bdd2d64ceb82249600a207ee21e2eb855ad0bb Mon Sep 17 00:00:00 2001 From: Andrew Pareles Date: Wed, 9 Apr 2025 16:22:38 -0700 Subject: [PATCH 1/2] copilot head --- .../chat/browser/actions/chatActions.ts | 22 +++++++++++-------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/src/vs/workbench/contrib/chat/browser/actions/chatActions.ts b/src/vs/workbench/contrib/chat/browser/actions/chatActions.ts index 2dea3290..93c17985 100644 --- a/src/vs/workbench/contrib/chat/browser/actions/chatActions.ts +++ b/src/vs/workbench/contrib/chat/browser/actions/chatActions.ts @@ -653,10 +653,12 @@ MenuRegistry.appendMenuItem(MenuId.CommandCenter, { submenu: MenuId.ChatTitleBarMenu, title: localize('title4', "Copilot"), icon: Codicon.copilot, - when: ContextKeyExpr.and( - ChatContextKeys.supported, - ContextKeyExpr.has('config.chat.commandCenter.enabled') - ), + // Void commented this out - copilot head + when: ContextKeyExpr.false(), + // when: ContextKeyExpr.and( + // ChatContextKeys.supported, + // ContextKeyExpr.has('config.chat.commandCenter.enabled') + // ), order: 10001 // to the right of command center }); @@ -666,11 +668,13 @@ MenuRegistry.appendMenuItem(MenuId.TitleBar, { title: localize('title4', "Copilot"), group: 'navigation', icon: Codicon.copilot, - when: ContextKeyExpr.and( - ChatContextKeys.supported, - ContextKeyExpr.has('config.chat.commandCenter.enabled'), - ContextKeyExpr.has('config.window.commandCenter').negate(), - ), + when: ContextKeyExpr.false(), + // Void commented this out - copilot head + // when: ContextKeyExpr.and( + // ChatContextKeys.supported, + // ContextKeyExpr.has('config.chat.commandCenter.enabled'), + // ContextKeyExpr.has('config.window.commandCenter').negate(), + // ), order: 1 }); From 7f890b946d4fa8b2e0ee71348975a2a51aaa90e7 Mon Sep 17 00:00:00 2001 From: Andrew Pareles Date: Wed, 9 Apr 2025 16:57:35 -0700 Subject: [PATCH 2/2] add logs --- .../contrib/void/browser/chatThreadService.ts | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/vs/workbench/contrib/void/browser/chatThreadService.ts b/src/vs/workbench/contrib/void/browser/chatThreadService.ts index 92bf7af0..b801a92c 100644 --- a/src/vs/workbench/contrib/void/browser/chatThreadService.ts +++ b/src/vs/workbench/contrib/void/browser/chatThreadService.ts @@ -661,6 +661,7 @@ class ChatThreadService extends Disposable implements IChatThreadService { // above just defines helpers, below starts the actual function const { chatMode } = this._settingsService.state.globalSettings // should not change as we loop even if user changes it, so it goes here + console.log('a', chatMode) // clear any previous error this._setStreamState(threadId, { error: undefined }, 'set') @@ -669,11 +670,13 @@ class ChatThreadService extends Disposable implements IChatThreadService { let isRunningWhenEnd: IsRunningType = undefined let aborted = false + console.log('b') // before enter loop, call tool if (callThisToolFirst) { const { interrupted } = await this._runToolCall(threadId, callThisToolFirst.name, { preapproved: true, validatedParams: callThisToolFirst.params }) if (interrupted) return } + console.log('c') // tool use loop while (shouldSendAnotherMessage) { @@ -685,14 +688,17 @@ class ChatThreadService extends Disposable implements IChatThreadService { let resMessageIsDonePromise: (toolCall?: RawToolCallObj | undefined) => void // resolves when user approves this tool use (or if tool doesn't require approval) const messageIsDonePromise = new Promise((res, rej) => { resMessageIsDonePromise = res }) + console.log('d') // send llm message this._setStreamState(threadId, { isRunning: 'LLM' }, 'merge') const systemMessage = await this._generateSystemMessage(chatMode) + console.log('e0') const llmMessages = await this._generateLLMMessages(threadId) const messages: LLMChatMessage[] = [ { role: 'system', content: systemMessage }, ...llmMessages ] + console.log('e') const llmCancelToken = this._llmMessageService.sendLLMMessage({ messagesType: 'chatMessages', @@ -734,14 +740,20 @@ class ChatThreadService extends Disposable implements IChatThreadService { break } this._setStreamState(threadId, { streamingToken: llmCancelToken }, 'merge') // new stream token for the new message + console.log('waiting...') const toolCall = await messageIsDonePromise // wait for message to complete + console.log('done!') if (aborted) { return } + console.log('H') this._setStreamState(threadId, { streamingToken: undefined }, 'merge') // streaming message is done + console.log('I') // call tool if there is one const tool: RawToolCallObj | undefined = toolCall if (tool) { + console.log('J') const { awaitingUserApproval, interrupted } = await this._runToolCall(threadId, tool.name, { preapproved: false, unvalidatedToolParams: tool.rawParams }) + console.log('K') // stop if interrupted. we don't have to do this for llmMessage because we have a stream token for it and onAbort gets called, but we don't have the equivalent for tools. // just detect tool interruption which is the same as chat interruption right now @@ -756,14 +768,17 @@ class ChatThreadService extends Disposable implements IChatThreadService { } } // end while + console.log('L') // if awaiting user approval, keep isRunning true, else end isRunning this._setStreamState(threadId, { isRunning: isRunningWhenEnd }, 'merge') + console.log('M') // add checkpoint before the next user message if (!isRunningWhenEnd) this._addUserCheckpoint({ threadId }) + console.log('N') // capture number of messages sent this._metricsService.capture('Agent Loop Done', { nMessagesSent, chatMode })