Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
33 commits
Select commit Hold shift + click to select a range
888a8d8
refactor(backgroundTodo): replace start/executePass/executeFinalRevie…
vritant24 May 4, 2026
dd44a25
refactor(backgroundTodo): update callers to use new queue API
vritant24 May 4, 2026
bf8d74c
test(backgroundTodo): update tests for drain-queue architecture
vritant24 May 4, 2026
bb8918a
Merge branch 'main' into dev/vritant24/bg-todo-endOfRun
vritant24 May 4, 2026
8630a2d
fix PR comments
vritant24 May 4, 2026
b0910a3
Merge branch 'main' into dev/vritant24/bg-todo-endOfRun
vritant24 May 4, 2026
be69289
Use VS Code chat parent turn id for parentRequestId across response.s…
kevin-m-kent May 5, 2026
a228cf2
Set parentRequestId on subagent telemetry from parent ChatRequest.id
kevin-m-kent May 5, 2026
4830d72
agentHost: initial scaffolding out for completions
connor4312 May 5, 2026
94aab29
Fix custom diff editor restore and custom name
mjbvz May 5, 2026
7efafec
Disable doubleClickToSwitchToEditor and markEditorSelection by default
mjbvz May 5, 2026
c7bc16d
Fix UBB detection (#314584)
pwang347 May 6, 2026
be340b1
Introduce proposed `agentsWindow` configuration extension point (#314…
sandy081 May 6, 2026
ec46e33
Fix stale BYOK models in model picker after API key removal (#314577)
vijayupadya May 6, 2026
b884b25
sessions: enable Search Editor and Problems panel in Agents window (#…
sandy081 May 6, 2026
e4e037b
Merge pull request #314574 from microsoft/connor4312/ah-initial-compl…
connor4312 May 6, 2026
d2f4a23
Merge pull request #314588 from microsoft/dev/mjbvz/yodelling-fowl
mjbvz May 6, 2026
5d6fc55
Open Workspace In Agents Window: select folder in new chat view (#314…
sandy081 May 6, 2026
724775b
Skip passing folder URI to agents window for non-file schemes (#314607)
sandy081 May 6, 2026
48f0cac
sessions: add command to open events.jsonl for active Copilot CLI AH …
roblourens May 6, 2026
154bccc
Remember previously selected session type and isolation mode (#314609)
sandy081 May 6, 2026
8851152
Simplify sign-in state for chat status dashboard (#314611)
pwang347 May 6, 2026
88fa3d9
agent test: warm tokenizer in beforeAll to fix summarization test fla…
roblourens May 6, 2026
89fc639
Close mobile sidebar drawer when creating a new session (#314572)
osortega May 6, 2026
dc53363
agentHost: dedupe no-op root state actions (#314597)
roblourens May 6, 2026
50ab69d
agents: fix spinner stuck after session completes (#314608)
roblourens May 6, 2026
fa89094
sessions: add command to collect agent host debug logs as zip (#314626)
roblourens May 6, 2026
a19e441
Pass session capabilities to chat parser (#314027)
roblourens May 6, 2026
18a0232
Agents web: remove theme service for now (#314638)
osortega May 6, 2026
a989b7e
Merge pull request #314277 from microsoft/dev/vritant24/bg-todo-endOfRun
vritant24 May 6, 2026
2e01437
fix: simplify hide action in WorkspacePicker's buildDelegate method (…
DonJayamanne May 6, 2026
18d2953
Merge pull request #314582 from mjbvz/dev/mjbvz/conscious-baboon
mjbvz May 6, 2026
a9b3c39
Merge pull request #314309 from kevin-m-kent/kevin-m-kent/telemetry-i…
isidorn May 6, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
60 changes: 49 additions & 11 deletions extensions/copilot/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,7 @@
"l10n": "./l10n",
"enabledApiProposals": [
"agentSessionsWorkspace",
"agentsWindowConfiguration",
"chatDebug",
"chatHooks",
"extensionsAny",
Expand Down Expand Up @@ -3137,7 +3138,13 @@
"additionalProperties": {
"type": "boolean"
},
"markdownDescription": "Enable or disable auto triggering of Copilot completions for specified [languages](https://code.visualstudio.com/docs/languages/identifiers). You can still trigger suggestions manually using `Alt + \\`"
"markdownDescription": "Enable or disable auto triggering of Copilot completions for specified [languages](https://code.visualstudio.com/docs/languages/identifiers). You can still trigger suggestions manually using `Alt + \\`",
"agentsWindow": {
"default": {
"markdown": true,
"plaintext": true
}
}
},
"github.copilot.selectedCompletionModel": {
"type": "string",
Expand Down Expand Up @@ -3306,7 +3313,10 @@
"markdownDescription": "%github.copilot.config.githubMcpServer.enabled%",
"tags": [
"experimental"
]
],
"agentsWindow": {
"default": true
}
},
"github.copilot.chat.githubMcpServer.toolsets": {
"type": "array",
Expand Down Expand Up @@ -3652,7 +3662,10 @@
"experimental",
"onExP"
],
"markdownDescription": "%github.copilot.chat.languageContext.typescript.enabled%"
"markdownDescription": "%github.copilot.chat.languageContext.typescript.enabled%",
"agentsWindow": {
"default": true
}
},
"github.copilot.chat.languageContext.typescript.items": {
"type": "string",
Expand Down Expand Up @@ -4648,23 +4661,32 @@
"tags": [
"advanced",
"experimental"
]
],
"agentsWindow": {
"default": true
}
},
"github.copilot.chat.cli.branchSupport.enabled": {
"type": "boolean",
"default": false,
"markdownDescription": "%github.copilot.config.cli.branchSupport.enabled%",
"tags": [
"advanced"
]
],
"agentsWindow": {
"default": true
}
},
"github.copilot.chat.cli.showExternalSessions": {
"type": "boolean",
"default": true,
"markdownDescription": "%github.copilot.config.cli.showExternalSessions%",
"tags": [
"advanced"
]
],
"agentsWindow": {
"default": false
}
},
"github.copilot.chat.cli.planExitMode.enabled": {
"type": "boolean",
Expand Down Expand Up @@ -4704,7 +4726,10 @@
"markdownDescription": "%github.copilot.config.cli.lazyLoadSessionItem.enabled%",
"tags": [
"advanced"
]
],
"agentsWindow": {
"default": false
}
},
"github.copilot.chat.cli.aiGenerateBranchNames.enabled": {
"type": "boolean",
Expand All @@ -4728,7 +4753,10 @@
"markdownDescription": "%github.copilot.config.cli.isolationOption.enabled%",
"tags": [
"advanced"
]
],
"agentsWindow": {
"default": true
}
},
"github.copilot.chat.cli.autoCommit.enabled": {
"type": "boolean",
Expand All @@ -4737,15 +4765,22 @@
"tags": [
"advanced",
"experimental"
]
],
"agentsWindow": {
"default": false
}
},
"github.copilot.chat.cli.sessionController.enabled": {
"type": "boolean",
"default": true,
"markdownDescription": "%github.copilot.config.cli.sessionController.enabled%",
"tags": [
"advanced"
]
],
"agentsWindow": {
"default": false,
"readOnly": true
}
},
"github.copilot.chat.cli.thinkingEffort.enabled": {
"type": "boolean",
Expand Down Expand Up @@ -4777,7 +4812,10 @@
"markdownDescription": "%github.copilot.config.cli.remote.enabled%",
"tags": [
"advanced"
]
],
"agentsWindow": {
"default": false
}
},
"github.copilot.chat.searchSubagent.enabled": {
"type": "boolean",
Expand Down
23 changes: 16 additions & 7 deletions extensions/copilot/src/extension/intents/node/agentIntent.ts
Original file line number Diff line number Diff line change
Expand Up @@ -304,7 +304,8 @@ export class AgentIntent extends EditCodeIntent {
if (isBackgroundTodoAgentEnabled(this.configurationService, this.expService, request)) {
const todoProcessor = this._backgroundTodoProcessors.get(conversation.sessionId);
if (todoProcessor) {
todoProcessor.executeFinalReview();
const turnId = conversation.getLatestTurn().id;
todoProcessor.requestFinalReview(turnId);
await todoProcessor.waitForCompletion();
}
}
Expand Down Expand Up @@ -1233,17 +1234,25 @@ export class AgentIntentInvocation extends EditCodeIntentInvocation implements I

this.logService.debug(`[BackgroundTodo] policy decision: ${decision} (${reason})`);

if (decision !== BackgroundTodoDecision.Run || !delta) {
return;
}

processor.executePass(delta, {
const executionContext = {
instantiationService: this.instantiationService,
logService: this.logService,
toolsService: this.toolsService,
telemetryService: this.telemetryService,
promptContext,
}, token);
};

if (decision === BackgroundTodoDecision.Wait && reason === 'processorInProgress' && delta) {
// Coalesce into the queue so the latest context is not lost.
processor.requestRegularPass(delta, executionContext, token);
return;
}

if (decision !== BackgroundTodoDecision.Run || !delta) {
return;
}

processor.requestRegularPass(delta, executionContext, token);
}

override processResponse = undefined;
Expand Down
4 changes: 4 additions & 0 deletions extensions/copilot/src/extension/prompt/node/chatMLFetcher.ts
Original file line number Diff line number Diff line change
Expand Up @@ -492,7 +492,9 @@ export class ChatMLFetcherImpl extends AbstractChatMLFetcher {
model: chatEndpoint.model,
apiType: chatEndpoint.apiType,
transport,
conversationId: telemetryProperties.conversationId ?? conversationId,
associatedRequestId: telemetryProperties.associatedRequestId,
parentRequestId: telemetryProperties.parentRequestId,
retryAfterError: telemetryProperties.retryAfterError,
retryAfterErrorGitHubRequestId: telemetryProperties.retryAfterErrorGitHubRequestId,
connectivityTestError: telemetryProperties.connectivityTestError,
Expand Down Expand Up @@ -638,7 +640,9 @@ export class ChatMLFetcherImpl extends AbstractChatMLFetcher {
model: chatEndpoint.model,
apiType: chatEndpoint.apiType,
transport,
conversationId: telemetryProperties.conversationId ?? conversationId,
associatedRequestId: telemetryProperties.associatedRequestId,
parentRequestId: telemetryProperties.parentRequestId,
retryAfterError: telemetryProperties.retryAfterError,
retryAfterErrorGitHubRequestId: telemetryProperties.retryAfterErrorGitHubRequestId,
connectivityTestError: telemetryProperties.connectivityTestError,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,9 @@ export interface IChatMLFetcherCancellationProperties {
model: string;
apiType: string | undefined;
transport: string;
conversationId?: string;
associatedRequestId?: string;
parentRequestId?: string;
retryAfterError?: string;
retryAfterErrorGitHubRequestId?: string;
connectivityTestError?: string;
Expand Down Expand Up @@ -149,7 +151,7 @@ export class ChatMLFetcherTelemetrySender {
"resumeEventSeen": { "classification": "SystemMetaData", "purpose": "PerformanceAndHealth", "comment": "Whether a system resume event was seen during the request", "isMeasurement": true },
"subType": { "classification": "SystemMetaData", "purpose": "FeatureInsight", "comment": "Sub-type of the request" },
"modelCallId": { "classification": "SystemMetaData", "purpose": "PerformanceAndHealth", "comment": "Unique identifier for this model call" },
"parentRequestId": { "classification": "SystemMetaData", "purpose": "PerformanceAndHealth", "comment": "The requestId from the parent response.success event for subagent calls" },
"parentRequestId": { "classification": "SystemMetaData", "purpose": "FeatureInsight", "comment": "For a subagent: the VS Code chat request id of the parent turn that invoked this subagent (matches panel.request.parentRequestId)." },
"parentModelCallId": { "classification": "SystemMetaData", "purpose": "PerformanceAndHealth", "comment": "Model call ID of the parent request for subagent calls" },
"iterationNumber": { "classification": "SystemMetaData", "purpose": "FeatureInsight", "comment": "Iteration number within the tool calling loop" }
}
Expand All @@ -166,11 +168,11 @@ export class ChatMLFetcherTelemetrySender {
requestId: chatCompletion.requestId.headerRequestId,
gitHubRequestId: chatCompletion.requestId.gitHubRequestId,
associatedRequestId: baseTelemetry?.properties.associatedRequestId,
parentRequestId: baseTelemetry?.properties.parentRequestId,
reasoningEffort: requestBody.reasoning?.effort ?? requestBody.output_config?.effort,
reasoningSummary: requestBody.reasoning?.summary,
modelCallId,
...(baseTelemetry?.properties.subType ? { subType: baseTelemetry.properties.subType } : {}),
...(baseTelemetry?.properties.parentHeaderRequestId ? { parentRequestId: baseTelemetry.properties.parentHeaderRequestId } : {}),
...(baseTelemetry?.properties.parentModelCallId ? { parentModelCallId: baseTelemetry.properties.parentModelCallId } : {}),
...(baseTelemetry?.properties.iterationNumber ? { iterationNumber: baseTelemetry.properties.iterationNumber } : {}),
...(fetcher ? { fetcher } : {}),
Expand Down Expand Up @@ -212,7 +214,9 @@ export class ChatMLFetcherTelemetrySender {
model,
apiType,
transport,
conversationId,
associatedRequestId,
parentRequestId,
retryAfterError,
retryAfterErrorGitHubRequestId,
connectivityTestError,
Expand Down Expand Up @@ -244,7 +248,9 @@ export class ChatMLFetcherTelemetrySender {
"apiType": { "classification": "SystemMetaData", "purpose": "PerformanceAndHealth", "comment": "API type for the response- chat completions or responses" },
"source": { "classification": "SystemMetaData", "purpose": "PerformanceAndHealth", "comment": "Source for why the request was made" },
"requestId": { "classification": "SystemMetaData", "purpose": "PerformanceAndHealth", "comment": "Id of the request" },
"conversationId": { "classification": "SystemMetaData", "purpose": "FeatureInsight", "comment": "Id for the current chat conversation." },
"associatedRequestId": { "classification": "SystemMetaData", "purpose": "FeatureInsight", "comment": "Another request ID that this request is associated with (eg, the originating request of a summarization request)." },
"parentRequestId": { "classification": "SystemMetaData", "purpose": "FeatureInsight", "comment": "For a subagent: the request id of the main agent request that invoked this subagent." },
"fetcher": { "classification": "SystemMetaData", "purpose": "PerformanceAndHealth", "comment": "The fetcher used for the request" },
"transport": { "classification": "SystemMetaData", "purpose": "PerformanceAndHealth", "comment": "The transport used for the request (http or websocket)" },
"totalTokenMax": { "classification": "SystemMetaData", "purpose": "PerformanceAndHealth", "comment": "Maximum total token window", "isMeasurement": true },
Expand Down Expand Up @@ -273,7 +279,9 @@ export class ChatMLFetcherTelemetrySender {
source,
requestId,
model,
conversationId,
associatedRequestId,
parentRequestId,
...(fetcher ? { fetcher } : {}),
transport,
...(retryAfterError ? { retryAfterError } : {}),
Expand Down Expand Up @@ -330,7 +338,9 @@ export class ChatMLFetcherTelemetrySender {
"source": { "classification": "SystemMetaData", "purpose": "PerformanceAndHealth", "comment": "Source for why the request was made" },
"requestId": { "classification": "SystemMetaData", "purpose": "PerformanceAndHealth", "comment": "Id of the request" },
"gitHubRequestId": { "classification": "SystemMetaData", "purpose": "PerformanceAndHealth", "comment": "GitHub request id if available" },
"conversationId": { "classification": "SystemMetaData", "purpose": "FeatureInsight", "comment": "Id for the current chat conversation." },
"associatedRequestId": { "classification": "SystemMetaData", "purpose": "FeatureInsight", "comment": "Another request ID that this request is associated with (eg, the originating request of a summarization request)." },
"parentRequestId": { "classification": "SystemMetaData", "purpose": "FeatureInsight", "comment": "For a subagent: the request id of the main agent request that invoked this subagent." },
"reasoningEffort": { "classification": "SystemMetaData", "purpose": "PerformanceAndHealth", "comment": "Reasoning effort level" },
"reasoningSummary": { "classification": "SystemMetaData", "purpose": "PerformanceAndHealth", "comment": "Reasoning summary level" },
"fetcher": { "classification": "SystemMetaData", "purpose": "PerformanceAndHealth", "comment": "The fetcher used for the request" },
Expand Down Expand Up @@ -364,11 +374,13 @@ export class ChatMLFetcherTelemetrySender {
gitHubRequestId: processed.serverRequestId,
model: chatEndpointInfo.model,
apiType: chatEndpointInfo.apiType,
conversationId: telemetryProperties?.conversationId,
reasoningEffort: requestBody.reasoning?.effort ?? requestBody.output_config?.effort,
reasoningSummary: requestBody.reasoning?.summary,
...(fetcher ? { fetcher } : {}),
transport,
associatedRequestId: telemetryProperties?.associatedRequestId,
parentRequestId: telemetryProperties?.parentRequestId,
...(telemetryProperties?.retryAfterError ? { retryAfterError: telemetryProperties.retryAfterError } : {}),
...(telemetryProperties?.retryAfterErrorGitHubRequestId ? { retryAfterErrorGitHubRequestId: telemetryProperties.retryAfterErrorGitHubRequestId } : {}),
...(telemetryProperties?.connectivityTestError ? { connectivityTestError: telemetryProperties.connectivityTestError } : {}),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -361,6 +361,7 @@ export class ExecutionSubagentToolCallingLoop extends ToolCallingLoop<IExecution
subType: 'execution_subagent',
conversationId: this.options.conversation.sessionId,
parentToolCallId: this.options.parentToolCallId,
parentRequestId: this.options.request.id,
parentHeaderRequestId: this.options.parentHeaderRequestId,
parentModelCallId: this.options.parentModelCallId,
iterationNumber: iterationNumber.toString(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -168,6 +168,7 @@ export class SearchSubagentToolCallingLoop extends ToolCallingLoop<ISearchSubage
subType: 'search_subagent',
conversationId: this.options.conversation.sessionId,
parentToolCallId: this.options.parentToolCallId,
parentRequestId: this.options.request.id,
parentHeaderRequestId: this.options.parentHeaderRequestId,
parentModelCallId: this.options.parentModelCallId,
iterationNumber: iterationNumber.toString(),
Expand Down
Loading
Loading