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
463 changes: 463 additions & 0 deletions package.json

Large diffs are not rendered by default.

49 changes: 49 additions & 0 deletions package.nls.json
Original file line number Diff line number Diff line change
Expand Up @@ -160,6 +160,7 @@
"github.copilot.config.debugTerminalCommandPatterns": "A list of commands for which the \"Debug Command\" quick fix action should be shown in the debug terminal.",
"github.copilot.config.edits.suggestRelatedFilesFromGitHistory": "Whether to suggest related files from git history for the Copilot Edits working set.",
"github.copilot.chat.edits.suggestRelatedFilesForTests": "Whether to suggest source files from test files for the Copilot Edits working set.",
"github.copilot.config.suggestRelatedFilesFromGitHistory.useEmbeddings": "Use embeddings to suggest related files from git history.",
"github.copilot.config.codeGeneration.instructions": "A set of instructions that will be added to Copilot requests that generate code.\nInstructions can come from: \n- a file in the workspace: `{ \"file\": \"fileName\" }`\n- text in natural language: `{ \"text\": \"Use underscore for field names.\" }`\n\nNote: Keep your instructions short and precise. Poor instructions can degrade Copilot's quality and performance.",
"github.copilot.config.codeGeneration.instructions.deprecated": "Use instructions files instead. See https://aka.ms/vscode-ghcp-custom-instructions for more information.",
"github.copilot.config.codeGeneration.useInstructionFiles": "Controls whether code instructions from `.github/copilot-instructions.md` are added to Copilot requests.\n\nNote: Keep your instructions short and precise. Poor instructions can degrade Copilot's quality and performance. [Learn more](https://aka.ms/github-copilot-custom-instructions) about customizing Copilot.",
Expand Down Expand Up @@ -363,6 +364,54 @@
"github.copilot.config.tools.memory.enabled": "Enable memory tool to allow models to store and retrieve information across conversations. \n\n**Note**: This is an experimental feature.",
"github.copilot.config.completionsFetcher": "Sets the fetcher used for the inline completions.",
"github.copilot.config.nesFetcher": "Sets the fetcher used for the next edit suggestions.",
"github.copilot.config.debug.overrideChatEngine": "Override the chat model. This allows you to test with different models.\n\n**Note**: This is an advanced debugging setting and should not be used while self-hosting as it may lead to a different experience compared to end-users.",
"github.copilot.config.projectLabels.expanded": "Use the expanded format for project labels in prompts.",
"github.copilot.config.projectLabels.chat": "Add project labels in chat requests.",
"github.copilot.config.projectLabels.inline": "Add project labels in inline edit requests.",
"github.copilot.config.workspace.maxLocalIndexSize": "Maximum size of the local workspace index.",
"github.copilot.config.workspace.enableFullWorkspace": "Enable full workspace context analysis.",
"github.copilot.config.workspace.enableCodeSearch": "Enable code search in workspace context.",
"github.copilot.config.workspace.enableEmbeddingsSearch": "Enable embeddings-based search in workspace context.",
"github.copilot.config.workspace.preferredEmbeddingsModel": "Preferred embeddings model for semantic search.",
"github.copilot.config.workspace.prototypeAdoCodeSearchEndpointOverride": "Override endpoint for Azure DevOps code search prototype.",
"github.copilot.config.feedback.onChange": "Enable feedback collection on configuration changes.",
"github.copilot.config.review.intent": "Enable intent detection for code review.",
"github.copilot.config.notebook.summaryExperimentEnabled": "Enable the notebook summary experiment.",
"github.copilot.config.notebook.variableFilteringEnabled": "Enable filtering variables by cell document symbols.",
"github.copilot.config.notebook.alternativeFormat": "Alternative document format for notebooks.",
"github.copilot.config.notebook.alternativeNESFormat.enabled": "Enable alternative format for Next Edit Suggestions in notebooks.",
"github.copilot.config.editSourceTracking.showDecorations": "Show decorations for edit source tracking.",
"github.copilot.config.editSourceTracking.showStatusBar": "Show status bar item for edit source tracking.",
"github.copilot.config.localWorkspaceRecording.enabled": "Enable local workspace recording for analysis.",
"github.copilot.config.editRecording.enabled": "Enable edit recording for analysis.",
"github.copilot.config.temporalContext.maxAge": "Maximum age (in editor changes) for temporal context.",
"github.copilot.config.temporalContext.preferSameLang": "Prefer same language files in temporal context.",
"github.copilot.config.codesearch.agent.enabled": "Enable code search capabilities in agent mode.",
"github.copilot.config.agent.temperature": "Temperature setting for agent mode requests.",
"github.copilot.config.instantApply.shortContextModelName": "Model name for short context instant apply.",
"github.copilot.config.instantApply.shortContextLimit": "Token limit for short context instant apply.",
"github.copilot.config.summarizeAgentConversationHistoryThreshold": "Threshold for summarizing agent conversation history.",
"github.copilot.config.agentHistorySummarizationMode": "Mode for agent history summarization.",
"github.copilot.config.agentHistorySummarizationWithPromptCache": "Use prompt caching for agent history summarization.",
"github.copilot.config.agentHistorySummarizationForceGpt41": "Force GPT-4.1 for agent history summarization.",
"github.copilot.config.useResponsesApiTruncation": "Use Responses API for truncation.",
"github.copilot.config.enableReadFileV2": "Enable version 2 of the read file tool.",
"github.copilot.config.enableAskAgent": "Enable the Ask agent for answering questions.",
"github.copilot.config.omitBaseAgentInstructions": "Omit base agent instructions from prompts.",
"github.copilot.config.promptFileContextProvider.enabled": "Enable prompt file context provider.",
"github.copilot.config.tools.defaultToolsGrouped": "Group default tools in prompts.",
"github.copilot.config.virtualTools.embeddingRanking": "Use embedding-based ranking for virtual tools.",
"github.copilot.config.multiReplaceStringGrok.enabled": "Enable multi-replace string with Grok.",
"github.copilot.config.claudeCode.enabled": "Enable Claude Code agent.",
"github.copilot.config.claudeCode.debug": "Enable debug mode for Claude Code agent.",
"github.copilot.config.copilotCLI.enabled": "Enable Copilot CLI integration.",
"github.copilot.config.cli.isolation.enabled": "Enable CLI isolation for agent sessions.",
"github.copilot.config.cli.mcp.enabled": "Enable Model Context Protocol (MCP) server for CLI.",
"github.copilot.config.copilotCodingAgent.enabled": "Enable Copilot Coding Agent (cloud).",
"github.copilot.config.gpt5AlternativePatch": "Enable GPT-5 alternative patch format.",
"github.copilot.config.inlineEdits.triggerOnEditorChangeAfterSeconds": "Trigger inline edits after editor has been idle for this many seconds.",
"github.copilot.config.inlineEdits.nextCursorPrediction.displayLine": "Display predicted cursor line for next edit suggestions.",
"github.copilot.config.inlineEdits.nextCursorPrediction.currentFileMaxTokens": "Maximum tokens for current file in next cursor prediction.",
"github.copilot.command.refreshAgentSessions": "Refresh Agent Sessions",
"github.copilot.command.deleteAgentSession": "Delete Agent Session",
"github.copilot.command.cli.sessions.resumeInTerminal": "Resume Agent Session in Terminal",
Expand Down
2 changes: 1 addition & 1 deletion src/extension/agents/claude/node/claudeCodeAgent.ts
Original file line number Diff line number Diff line change
Expand Up @@ -238,7 +238,7 @@ export class ClaudeCodeSession extends Disposable {
private async _startSession(token: vscode.CancellationToken): Promise<void> {
// Build options for the Claude Code SDK
// process.env.DEBUG = '1'; // debug messages from sdk.mjs
const isDebugEnabled = this.configService.getConfig(ConfigKey.Internal.ClaudeCodeDebugEnabled);
const isDebugEnabled = this.configService.getConfig(ConfigKey.AdvancedExperimental.ClaudeCodeDebugEnabled);
this.logService.trace(`appRoot: ${this.envService.appRoot}`);
const pathSep = isWindows ? ';' : ':';
const options: Options = {
Expand Down
2 changes: 1 addition & 1 deletion src/extension/agents/copilotcli/node/mcpHandler.ts
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ export class CopilotCLIMCPHandler implements ICopilotCLIMCPHandler {
) { }

public async loadMcpConfig(workingDirectory: string | undefined): Promise<Record<string, MCPServerConfig> | undefined> {
if (!this.configurationService.getConfig(ConfigKey.Internal.CLIMCPServerEnabled)) {
if (!this.configurationService.getConfig(ConfigKey.AdvancedExperimental.CLIMCPServerEnabled)) {
return undefined;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -240,7 +240,7 @@ export class CopilotCLIChatSessionContentProvider implements vscode.ChatSessionC
[MODELS_OPTION_ID]: _sessionModel.get(copilotcliSessionId)?.id ?? defaultModel.id,
};

if (!existingSession && this.configurationService.getConfig(ConfigKey.Internal.CLIIsolationEnabled)) {
if (!existingSession && this.configurationService.getConfig(ConfigKey.AdvancedExperimental.CLIIsolationEnabled)) {
options[ISOLATION_OPTION_ID] = isolationEnabled ? 'enabled' : 'disabled';
}
const history = existingSession?.object?.getChatHistory() || [];
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ export class CopilotCLITerminalIntegration extends Disposable implements ICopilo
}

private async initialize(): Promise<void> {
const enabled = this.configurationService.getConfig(ConfigKey.Internal.CopilotCLIEnabled);
const enabled = this.configurationService.getConfig(ConfigKey.AdvancedExperimental.CopilotCLIEnabled);
if (!enabled) {
return;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@


import { ConfigurationTarget, Uri, window, workspace, WorkspaceFolder } from 'vscode';
import { Emitter } from '../../../util/vs/base/common/event';
import { ConfigurationKeyValuePairs, ConfigurationMigration, ConfigurationMigrationRegistry, ConfigurationValue } from '../../../platform/configuration/common/configurationService';
import { DisposableStore, IDisposable } from '../../../util/vs/base/common/lifecycle';
import { localize } from '../../../util/vs/nls';
import { IExtensionContribution } from '../../common/contributions';
Expand All @@ -35,28 +35,6 @@ export const Extensions = {
ConfigurationMigration: 'base.contributions.configuration.migration'
};

export type ConfigurationValue = { value: any | undefined /* Remove */ };
export type ConfigurationKeyValuePairs = [string, ConfigurationValue][];
export type ConfigurationMigrationFn = (value: any) => ConfigurationValue | ConfigurationKeyValuePairs | Promise<ConfigurationValue | ConfigurationKeyValuePairs>;
export type ConfigurationMigration = { key: string; migrateFn: ConfigurationMigrationFn };

export interface IConfigurationMigrationRegistry {
registerConfigurationMigrations(configurationMigrations: ConfigurationMigration[]): void;
}

class ConfigurationMigrationRegistryImpl implements IConfigurationMigrationRegistry {
readonly migrations: ConfigurationMigration[] = [];

private readonly _onDidRegisterConfigurationMigrations = new Emitter<ConfigurationMigration[]>();
readonly onDidRegisterConfigurationMigration = this._onDidRegisterConfigurationMigrations.event;

registerConfigurationMigrations(configurationMigrations: ConfigurationMigration[]): void {
this.migrations.push(...configurationMigrations);
}
}

export const ConfigurationMigrationRegistry = new ConfigurationMigrationRegistryImpl();

export class ConfigurationMigrationContribution implements IExtensionContribution {
private readonly _disposables = new DisposableStore();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ export class PromptWorkspaceLabels implements IPromptWorkspaceLabels {
}

public async collectContext(): Promise<void> {
const expandedLabels = this._configurationService.getExperimentBasedConfig(ConfigKey.Internal.ProjectLabelsExpanded, this._experimentationService);
const expandedLabels = this._configurationService.getExperimentBasedConfig(ConfigKey.AdvancedExperimentalExperiments.ProjectLabelsExpanded, this._experimentationService);
this.strategy = expandedLabels ? PromptWorkspaceLabelsStrategy.Expanded : PromptWorkspaceLabelsStrategy.Basic;
await this.workspaceLabels.collectContext();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ export function startFeedbackCollection(accessor: ServicesAccessor) {
const instantiationService = accessor.get(IInstantiationService);
const logService = accessor.get(ILogService);
const disposables = new DisposableStore();
const enabled = configurationService.getConfig(ConfigKey.Internal.FeedbackOnChange);
const enabled = configurationService.getConfig(ConfigKey.AdvancedExperimental.FeedbackOnChange);
if (!enabled) {
return disposables;
}
Expand Down
2 changes: 1 addition & 1 deletion src/extension/inlineEdits/node/nextEditCache.ts
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ export class NextEditCache extends Disposable {
}
// if editor-change triggering is allowed,
// it means an edit in file A can result in a cached edit for file B to be less relevant than with the edits in file A included
if (configService.getExperimentBasedConfig(ConfigKey.Internal.InlineEditsTriggerOnEditorChangeAfterSeconds, expService) !== undefined) {
if (configService.getExperimentBasedConfig(ConfigKey.AdvancedExperimentalExperiments.InlineEditsTriggerOnEditorChangeAfterSeconds, expService) !== undefined) {
for (const [k, v] of this._sharedCache.entries()) {
if (v.docId !== doc.id) {
this._sharedCache.deleteKey(k);
Expand Down
2 changes: 1 addition & 1 deletion src/extension/inlineEdits/node/nextEditProvider.ts
Original file line number Diff line number Diff line change
Expand Up @@ -323,7 +323,7 @@ export class NextEditProvider extends Disposable implements INextEditProvider<Ne
const lineWithCode = documentAtInvocationTime.getLineAt(editPosition.startLineNumber);
const trimmedLineWithCode = lineWithCode.trimStart();
const shortenedLineWithCode = trimmedLineWithCode.slice(0, 40);
const label = ['.ts', '.tsx', '.js', '.jsx'].includes(docId.extension) && this._configService.getExperimentBasedConfig(ConfigKey.Internal.InlineEditsNextCursorPredictionDisplayLine, this._expService)
const label = ['.ts', '.tsx', '.js', '.jsx'].includes(docId.extension) && this._configService.getExperimentBasedConfig(ConfigKey.AdvancedExperimentalExperiments.InlineEditsNextCursorPredictionDisplayLine, this._expService)
? `Jump to line ${editPosition.startLineNumber} | ${shortenedLineWithCode.length === trimmedLineWithCode.length ? shortenedLineWithCode : trimmedLineWithCode + '...'}`
: `Jump to line ${editPosition.startLineNumber}`;
const displayLocation: INextEditDisplayLocation = {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,11 +34,11 @@ import { StringText } from '../../../../util/vs/editor/common/core/text/abstract
import { getInformationDelta, InformationDelta } from '../../common/informationDelta';
import { RejectionCollector } from '../../common/rejectionCollector';
import { IVSCodeObservableDocument, VSCodeWorkspace } from '../parts/vscodeWorkspace';
import { toInternalPosition } from '../utils/translations';
import { AnyDiagnosticCompletionItem, AnyDiagnosticCompletionProvider } from './diagnosticsBasedCompletions/anyDiagnosticsCompletionProvider';
import { AsyncDiagnosticCompletionProvider } from './diagnosticsBasedCompletions/asyncDiagnosticsCompletionProvider';
import { Diagnostic, DiagnosticCompletionItem, DiagnosticInlineEditRequestLogContext, distanceToClosestDiagnostic, IDiagnosticCompletionProvider, log, logList, sortDiagnosticsByDistance } from './diagnosticsBasedCompletions/diagnosticsCompletions';
import { ImportDiagnosticCompletionItem, ImportDiagnosticCompletionProvider } from './diagnosticsBasedCompletions/importDiagnosticsCompletionProvider';
import { toInternalPosition } from '../utils/translations';

interface IDiagnosticsCompletionState<T extends DiagnosticCompletionItem = DiagnosticCompletionItem> {
completionItem: T | null;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,7 @@ export class InlineCompletionProviderImpl implements InlineCompletionItemProvide
@IWorkspaceService private readonly _workspaceService: IWorkspaceService,
) {
this._tracer = createTracer(['NES', 'Provider'], (s) => this._logService.trace(s));
this._displayNextEditorNES = this._configurationService.getExperimentBasedConfig(ConfigKey.Internal.UseAlternativeNESNotebookFormat, this._expService);
this._displayNextEditorNES = this._configurationService.getExperimentBasedConfig(ConfigKey.AdvancedExperimentalExperiments.UseAlternativeNESNotebookFormat, this._expService);
}

// copied from `vscodeWorkspace.ts` `DocumentFilter#_enabledLanguages`
Expand Down
4 changes: 2 additions & 2 deletions src/extension/inlineEdits/vscode-node/inlineEditModel.ts
Original file line number Diff line number Diff line change
Expand Up @@ -217,7 +217,7 @@ export class InlineEditTriggerer extends Disposable {

const selectionLine = range.start.line;

const triggerOnActiveEditorChange = this._configurationService.getExperimentBasedConfig(ConfigKey.Internal.InlineEditsTriggerOnEditorChangeAfterSeconds, this._expService);
const triggerOnActiveEditorChange = this._configurationService.getExperimentBasedConfig(ConfigKey.AdvancedExperimentalExperiments.InlineEditsTriggerOnEditorChangeAfterSeconds, this._expService);
// If we're in a notebook cell,
// Its possible user made changes in one cell and now is moving to another cell
// In such cases we should account for the possibility of the user wanting to edit the new cell and trigger suggestions.
Expand Down Expand Up @@ -264,7 +264,7 @@ export class InlineEditTriggerer extends Disposable {

private _maybeTriggerOnDocumentSwitch(e: vscode.TextEditorSelectionChangeEvent, isSameDoc: boolean, parentTracer: ITracer): boolean {
const tracer = parentTracer.subNoEntry('editorSwitch');
const triggerAfterSeconds = this._configurationService.getExperimentBasedConfig(ConfigKey.Internal.InlineEditsTriggerOnEditorChangeAfterSeconds, this._expService);
const triggerAfterSeconds = this._configurationService.getExperimentBasedConfig(ConfigKey.AdvancedExperimentalExperiments.InlineEditsTriggerOnEditorChangeAfterSeconds, this._expService);
if (triggerAfterSeconds === undefined) {
tracer.trace('document switch disabled');
return false;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@ export class InlineEditProviderFeature extends Disposable implements IExtensionC
const tracer = createTracer(['NES', 'Feature'], (s) => this._logService.trace(s));
const constructorTracer = tracer.sub('constructor');
const hasUpdatedNesSettingKey = 'copilot.chat.nextEdits.hasEnabledNesInSettings';
const enableEnhancedNotebookNES = this._configurationService.getExperimentBasedConfig(ConfigKey.Internal.UseAlternativeNESNotebookFormat, _experimentationService) || this._configurationService.getExperimentBasedConfig(ConfigKey.UseAlternativeNESNotebookFormat, _experimentationService);
const enableEnhancedNotebookNES = this._configurationService.getExperimentBasedConfig(ConfigKey.AdvancedExperimentalExperiments.UseAlternativeNESNotebookFormat, _experimentationService) || this._configurationService.getExperimentBasedConfig(ConfigKey.UseAlternativeNESNotebookFormat, _experimentationService);
const unificationState = unificationStateObservable(this);

commands.executeCommand('setContext', useEnhancedNotebookNESContextKey, enableEnhancedNotebookNES);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ export class VSCodeWorkspace extends ObservableWorkspace implements IDisposable
private readonly _store = new DisposableStore();
private readonly _filter = this._instaService.createInstance(DocumentFilter);
private get _useAlternativeNotebookFormat(): boolean {
return this._configurationService.getExperimentBasedConfig(ConfigKey.Internal.UseAlternativeNESNotebookFormat, this._experimentationService)
return this._configurationService.getExperimentBasedConfig(ConfigKey.AdvancedExperimentalExperiments.UseAlternativeNESNotebookFormat, this._experimentationService)
|| this._configurationService.getExperimentBasedConfig(ConfigKey.UseAlternativeNESNotebookFormat, this._experimentationService);
}
private readonly _markdownNotebookCells = new Lazy<ResourceSet>(() => {
Expand Down
Loading
Loading