Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
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
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/

import * as vscode from 'vscode';
import { IConfigurationService } from '../../../platform/configuration/common/configurationService';
import { ITelemetryService } from '../../../platform/telemetry/common/telemetry';

export class AgentModeStatusTelemetryContribution {

constructor(
@ITelemetryService _telemetryService: ITelemetryService,
@IConfigurationService _configurationService: IConfigurationService,
) {
// Get the effective value of chat.agent.enabled
const isAgentModeEnabled = _configurationService.getNonExtensionConfig<boolean>('chat.agent.enabled') ?? true;

// Check if chat.agent.enabled is configured by user
const inspect = vscode.workspace.getConfiguration().inspect<boolean>('chat.agent.enabled');

Check failure on line 20 in src/extension/conversation/vscode-node/agentModeStatusTelemetry.contribution.ts

View workflow job for this annotation

GitHub Actions / copilot

src/extension/conversation/vscode-node/test/agentModeStatusTelemetry.spec.ts > AgentModeStatusTelemetryContribution > sends telemetry on instantiation with default values

TypeError: Cannot read properties of undefined (reading 'getConfiguration') ❯ new AgentModeStatusTelemetryContribution src/extension/conversation/vscode-node/agentModeStatusTelemetry.contribution.ts:20:36 ❯ src/extension/conversation/vscode-node/test/agentModeStatusTelemetry.spec.ts:21:4 ❯ _withTelemetryCapture src/platform/test/node/telemetry.ts:162:24 ❯ src/extension/conversation/vscode-node/test/agentModeStatusTelemetry.spec.ts:19:22
const isAgentModeUserConfigured = (
inspect?.globalValue !== undefined
|| inspect?.globalLanguageValue !== undefined
|| inspect?.workspaceFolderValue !== undefined
|| inspect?.workspaceFolderLanguageValue !== undefined
|| inspect?.workspaceValue !== undefined
|| inspect?.workspaceLanguageValue !== undefined
);

/* __GDPR__
"agentModeStatusOnActivation" : {
"owner": "pierceboggan",
"comment": "Track whether agent mode is disabled by user or IT policy on extension activation",
"isAgentModeEnabled": { "classification": "SystemMetaData", "purpose": "FeatureInsight", "comment": "Whether agent mode is effectively enabled", "isMeasurement": true },
"isAgentModeUserConfigured": { "classification": "SystemMetaData", "purpose": "FeatureInsight", "comment": "Whether agent mode was configured by the user", "isMeasurement": true }
}
*/
_telemetryService.sendMSFTTelemetryEvent(
'agentModeStatusOnActivation',
{},
{
isAgentModeEnabled: toNumber(isAgentModeEnabled),
isAgentModeUserConfigured: toNumber(isAgentModeUserConfigured),
}
);
}
}

function toNumber(v: boolean): 1 | 0 {
return v ? 1 : 0;
}
2 changes: 2 additions & 0 deletions src/extension/extension/vscode-node/contributions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import { CompletionsUnificationContribution } from '../../completions/vscode-nod
import { ConfigurationMigrationContribution } from '../../configuration/vscode-node/configurationMigration';
import { ContextKeysContribution } from '../../contextKeys/vscode-node/contextKeys.contribution';
import { PlaceholderViewContribution } from '../../contextKeys/vscode-node/placeholderView.contribution';
import { AgentModeStatusTelemetryContribution } from '../../conversation/vscode-node/agentModeStatusTelemetry.contribution';
import { AiMappedEditsContrib } from '../../conversation/vscode-node/aiMappedEditsContrib';
import { ConversationFeature } from '../../conversation/vscode-node/conversationFeature';
import { FeedbackCommandContribution } from '../../conversation/vscode-node/feedbackContribution';
Expand Down Expand Up @@ -60,6 +61,7 @@ import vscodeContributions from '../vscode/contributions';

export const vscodeNodeContributions: IExtensionContributionFactory[] = [
...vscodeContributions,
asContributionFactory(AgentModeStatusTelemetryContribution),
asContributionFactory(ConversationFeature),
workspaceChunkSearchContribution,
asContributionFactory(AuthenticationContrib),
Expand Down
Loading