Copy disabled (too large)
Download .txt
Showing preview only (47,036K chars total). Download the full file to get everything.
Repository: microsoft/vscode-copilot-chat
Branch: main
Commit: 20266e339733
Files: 4307
Total size: 43.9 MB
Directory structure:
gitextract_87srrczz/
├── .agents/
│ └── skills/
│ └── launch/
│ └── SKILL.md
├── .claude/
│ └── agents/
│ └── anthropic-sdk-upgrader.md
├── .devcontainer/
│ ├── devcontainer-lock.json
│ └── devcontainer.json
├── .esbuild.ts
├── .eslint-ignore
├── .eslintplugin/
│ ├── index.ts
│ ├── no-bad-gdpr-comment.ts
│ ├── no-funny-filename.ts
│ ├── no-gdpr-event-name-mismatch.ts
│ ├── no-instanceof-uri.ts
│ ├── no-missing-linebreak.ts
│ ├── no-nls-localize.ts
│ ├── no-restricted-copilot-pr-string.ts
│ ├── no-runtime-import.ts
│ ├── no-test-imports.ts
│ ├── no-test-only.ts
│ ├── no-unexternalized-strings.ts
│ ├── no-unlayered-files.ts
│ ├── package.json
│ ├── tsconfig.json
│ └── utils.ts
├── .gitattributes
├── .github/
│ ├── CODENOTIFY
│ ├── CODEOWNERS
│ ├── ISSUE_TEMPLATE/
│ │ └── config.yml
│ ├── commands.json
│ ├── copilot-instructions.md
│ ├── dependabot.yml
│ ├── instructions/
│ │ ├── prompt-tsx.instructions.md
│ │ └── vitest-unit-tests.instructions.md
│ ├── prompts/
│ │ ├── updateCopilotCLIToolMapping.prompt.md
│ │ └── updateGithubCopilotSDK.prompt.md
│ └── workflows/
│ ├── copilot-setup-steps.yml
│ ├── ensure-node-modules-cache.yml
│ ├── npm-package.yml
│ └── pr.yml
├── .gitignore
├── .husky/
│ ├── pre-commit
│ └── pre-push
├── .mocha-multi-reporters.js
├── .mocharc.js
├── .npmrc
├── .nvmrc
├── .prettierignore
├── .vscode/
│ ├── conversation.schema.json
│ ├── extensions/
│ │ ├── test-extension/
│ │ │ ├── .vscode/
│ │ │ │ └── launch.json
│ │ │ ├── bootstrap.ts
│ │ │ ├── main.ts
│ │ │ └── package.json
│ │ └── visualization-runner/
│ │ ├── README.md
│ │ ├── entry.js
│ │ ├── extension.ts
│ │ └── package.json
│ ├── extensions.json
│ ├── launch.json
│ ├── mcp.json
│ ├── settings.json
│ ├── snippets.code-snippets
│ ├── state.schema.json
│ └── tasks.json
├── .vscode-test.mjs
├── .vscodeignore
├── CHANGELOG.md
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── CodeQL.yml
├── LICENSE.txt
├── README.md
├── SECURITY.md
├── assets/
│ └── prompts/
│ ├── create-agent.prompt.md
│ ├── create-hook.prompt.md
│ ├── create-instructions.prompt.md
│ ├── create-prompt.prompt.md
│ ├── create-skill.prompt.md
│ ├── init.prompt.md
│ ├── plan.prompt.md
│ └── skills/
│ ├── agent-customization/
│ │ ├── SKILL.md
│ │ └── references/
│ │ ├── agents.md
│ │ ├── hooks.md
│ │ ├── instructions.md
│ │ ├── prompts.md
│ │ ├── skills.md
│ │ └── workspace-instructions.md
│ ├── get-search-view-results/
│ │ └── SKILL.md
│ ├── install-vscode-extension/
│ │ └── SKILL.md
│ ├── project-setup-info-context7/
│ │ └── SKILL.md
│ ├── project-setup-info-local/
│ │ └── SKILL.md
│ └── troubleshoot/
│ └── SKILL.md
├── build/
│ ├── .cachesalt
│ ├── listBuildCacheFiles.js
│ ├── npm-package.yml
│ ├── pr-check-cache-files.ts
│ ├── pre-release.yml
│ ├── release.yml
│ ├── setup-emsdk.sh
│ └── update-assets.yml
├── cgmanifest.json
├── chat-lib/
│ ├── .gitignore
│ ├── LICENSE.txt
│ ├── README.md
│ ├── package.json
│ ├── script/
│ │ └── postinstall.ts
│ ├── tsconfig.base.json
│ ├── tsconfig.json
│ └── vitest.config.ts
├── docs/
│ ├── NES_EXPECTED_EDIT_CAPTURE.md
│ ├── monitoring/
│ │ ├── agent_monitoring.md
│ │ ├── agent_monitoring_arch.md
│ │ ├── docker-compose.yaml
│ │ ├── otel-collector-config.yaml
│ │ └── otel-data-flow.html
│ ├── prompts.md
│ └── tools.md
├── eslint.config.mjs
├── lint-staged.config.js
├── package.json
├── package.nls.json
├── script/
│ ├── alternativeAction/
│ │ ├── index.ts
│ │ ├── processor.ts
│ │ ├── types.ts
│ │ └── util.ts
│ ├── analyzeEdits.ts
│ ├── applyLocalDts.sh
│ ├── build/
│ │ ├── compressTikToken.ts
│ │ ├── copyStaticAssets.ts
│ │ ├── downloadBinary.ts
│ │ ├── extractChatLib.ts
│ │ ├── moveProposedDts.js
│ │ ├── vscodeDtsCheck.js
│ │ └── vscodeDtsUpdate.js
│ ├── cleanLog.ts
│ ├── compareStestAlternativeRuns.ts
│ ├── electron/
│ │ ├── simulationWorkbench.css
│ │ ├── simulationWorkbench.html
│ │ └── simulationWorkbenchMain.js
│ ├── eslintGitBlameReport/
│ │ └── generateEslintIgnoreReport.ts
│ ├── logRecordingTypes.ts
│ ├── postinstall.ts
│ ├── scoredEditsReconciler.ts
│ ├── setup/
│ │ ├── copySources.ts
│ │ ├── createVenv.mts
│ │ ├── getEnv.mts
│ │ └── getToken.mts
│ ├── simulate.ps1
│ ├── simulate.sh
│ ├── test/
│ │ └── scoredEditsReconciler.spec.ts
│ ├── testGeneration/
│ │ └── editFromPatchTests.ts
│ └── tsconfig.json
├── src/
│ ├── extension/
│ │ ├── agentDebug/
│ │ │ ├── common/
│ │ │ │ └── toolResultRenderer.ts
│ │ │ └── vscode-node/
│ │ │ └── toolResultContentRenderer.ts
│ │ ├── agents/
│ │ │ ├── node/
│ │ │ │ ├── adapters/
│ │ │ │ │ ├── anthropicAdapter.ts
│ │ │ │ │ ├── openaiAdapterForSTests.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── langModelServer.ts
│ │ │ │ └── test/
│ │ │ │ ├── mockLanguageModelServer.ts
│ │ │ │ └── openaiAdapter.spec.ts
│ │ │ └── vscode-node/
│ │ │ ├── agentCustomizationSkillProvider.ts
│ │ │ ├── agentTypes.ts
│ │ │ ├── askAgentProvider.ts
│ │ │ ├── baseSkillProvider.ts
│ │ │ ├── editModeAgentProvider.ts
│ │ │ ├── exploreAgentProvider.ts
│ │ │ ├── githubOrgChatResourcesService.ts
│ │ │ ├── githubOrgCustomAgentProvider.ts
│ │ │ ├── githubOrgInstructionsProvider.ts
│ │ │ ├── planAgentProvider.ts
│ │ │ ├── promptFileContrib.ts
│ │ │ ├── skillFsProviderHelper.ts
│ │ │ ├── test/
│ │ │ │ ├── askAgentProvider.spec.ts
│ │ │ │ ├── githubOrgChatResourcesService.spec.ts
│ │ │ │ ├── githubOrgCustomAgentProvider.spec.ts
│ │ │ │ ├── githubOrgInstructionsProvider.spec.ts
│ │ │ │ ├── mockOctoKitService.ts
│ │ │ │ └── planAgentProvider.spec.ts
│ │ │ └── troubleshootSkillProvider.ts
│ │ ├── api/
│ │ │ └── vscode/
│ │ │ ├── api.d.ts
│ │ │ ├── extensionApi.ts
│ │ │ └── vscodeContextProviderApi.ts
│ │ ├── authentication/
│ │ │ └── vscode-node/
│ │ │ └── authentication.contribution.ts
│ │ ├── byok/
│ │ │ ├── common/
│ │ │ │ ├── anthropicMessageConverter.ts
│ │ │ │ ├── byokProvider.ts
│ │ │ │ ├── geminiFunctionDeclarationConverter.ts
│ │ │ │ ├── geminiMessageConverter.ts
│ │ │ │ └── test/
│ │ │ │ ├── __snapshots__/
│ │ │ │ │ └── anthropicMessageConverter.spec.ts.snap
│ │ │ │ ├── anthropicMessageConverter.spec.ts
│ │ │ │ ├── geminiFunctionDeclarationConverter.spec.ts
│ │ │ │ └── geminiMessageConverter.spec.ts
│ │ │ ├── node/
│ │ │ │ ├── azureOpenAIEndpoint.ts
│ │ │ │ ├── openAIEndpoint.ts
│ │ │ │ └── test/
│ │ │ │ ├── azureOpenAIEndpoint.spec.ts
│ │ │ │ └── openAIEndpoint.spec.ts
│ │ │ └── vscode-node/
│ │ │ ├── abstractLanguageModelChatProvider.ts
│ │ │ ├── anthropicProvider.ts
│ │ │ ├── azureProvider.ts
│ │ │ ├── byokContribution.ts
│ │ │ ├── byokStorageService.ts
│ │ │ ├── customOAIProvider.ts
│ │ │ ├── geminiNativeProvider.ts
│ │ │ ├── ollamaProvider.ts
│ │ │ ├── openAIProvider.ts
│ │ │ ├── openRouterProvider.ts
│ │ │ ├── test/
│ │ │ │ ├── azureProvider.spec.ts
│ │ │ │ ├── geminiNativeProvider.spec.ts
│ │ │ │ └── ollamaProvider.spec.ts
│ │ │ └── xAIProvider.ts
│ │ ├── chat/
│ │ │ ├── test/
│ │ │ │ └── node/
│ │ │ │ └── chatHookService.spec.ts
│ │ │ └── vscode-node/
│ │ │ ├── chatDebugFileLoggerService.ts
│ │ │ ├── chatHookService.ts
│ │ │ ├── chatHookTelemetry.ts
│ │ │ ├── chatQuota.contribution.ts
│ │ │ ├── hooksOutputChannel.ts
│ │ │ ├── sessionTranscriptService.ts
│ │ │ └── test/
│ │ │ └── chatDebugFileLoggerService.spec.ts
│ │ ├── chatSessionContext/
│ │ │ └── vscode-node/
│ │ │ └── chatSessionContextProvider.ts
│ │ ├── chatSessions/
│ │ │ ├── claude/
│ │ │ │ ├── AGENTS.md
│ │ │ │ ├── CLAUDE_SESSION_USER_GUIDE.md
│ │ │ │ ├── common/
│ │ │ │ │ ├── claudeFolderInfo.ts
│ │ │ │ │ ├── claudeHookRegistry.ts
│ │ │ │ │ ├── claudeMcpServerRegistry.ts
│ │ │ │ │ ├── claudeSessionUri.ts
│ │ │ │ │ ├── claudeToolPermission.ts
│ │ │ │ │ ├── claudeToolPermissionRegistry.ts
│ │ │ │ │ ├── claudeToolPermissionService.ts
│ │ │ │ │ ├── claudeTools.ts
│ │ │ │ │ ├── hooks/
│ │ │ │ │ │ └── index.ts
│ │ │ │ │ ├── mcpServers/
│ │ │ │ │ │ ├── ideMcpServer.ts
│ │ │ │ │ │ └── index.ts
│ │ │ │ │ ├── slashCommands/
│ │ │ │ │ │ └── index.ts
│ │ │ │ │ ├── test/
│ │ │ │ │ │ ├── claudeToolPermissionRegistry.spec.ts
│ │ │ │ │ │ ├── ideMcpServer.spec.ts
│ │ │ │ │ │ └── toolInvocationFormatter.spec.ts
│ │ │ │ │ ├── toolInvocationFormatter.ts
│ │ │ │ │ └── toolPermissionHandlers/
│ │ │ │ │ ├── askUserQuestionHandler.ts
│ │ │ │ │ ├── bashToolHandler.ts
│ │ │ │ │ ├── exitPlanModeHandler.ts
│ │ │ │ │ └── index.ts
│ │ │ │ ├── node/
│ │ │ │ │ ├── claudeCodeAgent.ts
│ │ │ │ │ ├── claudeCodeModels.ts
│ │ │ │ │ ├── claudeCodeSdkService.ts
│ │ │ │ │ ├── claudeLanguageModelServer.ts
│ │ │ │ │ ├── claudeProjectFolders.ts
│ │ │ │ │ ├── claudePromptResolver.ts
│ │ │ │ │ ├── claudeSessionStateService.ts
│ │ │ │ │ ├── claudeSettingsChangeTracker.ts
│ │ │ │ │ ├── hooks/
│ │ │ │ │ │ ├── index.ts
│ │ │ │ │ │ ├── loggingHooks.ts
│ │ │ │ │ │ ├── sessionHooks.ts
│ │ │ │ │ │ ├── subagentHooks.ts
│ │ │ │ │ │ └── toolHooks.ts
│ │ │ │ │ ├── mcpServers/
│ │ │ │ │ │ └── index.ts
│ │ │ │ │ ├── sessionParser/
│ │ │ │ │ │ ├── README.md
│ │ │ │ │ │ ├── claudeCodeSessionService.ts
│ │ │ │ │ │ ├── claudeSessionParser.ts
│ │ │ │ │ │ ├── claudeSessionSchema.ts
│ │ │ │ │ │ ├── sdkSessionAdapter.ts
│ │ │ │ │ │ └── test/
│ │ │ │ │ │ ├── claudeCodeSessionService.spec.ts
│ │ │ │ │ │ ├── claudeSessionParser.spec.ts
│ │ │ │ │ │ ├── claudeSessionSchema.spec.ts
│ │ │ │ │ │ └── sdkSessionAdapter.spec.ts
│ │ │ │ │ ├── slashCommands/
│ │ │ │ │ │ └── index.ts
│ │ │ │ │ ├── test/
│ │ │ │ │ │ ├── askUserQuestionHandler.spec.ts
│ │ │ │ │ │ ├── claudeCodeAgent.spec.ts
│ │ │ │ │ │ ├── claudeCodeAgentOTel.spec.ts
│ │ │ │ │ │ ├── claudeCodeModels.spec.ts
│ │ │ │ │ │ ├── claudeProjectFolders.spec.ts
│ │ │ │ │ │ ├── claudeSessionStateService.spec.ts
│ │ │ │ │ │ ├── claudeSettingsChangeTracker.spec.ts
│ │ │ │ │ │ ├── claudeToolPermissionService.spec.ts
│ │ │ │ │ │ ├── extractSessionId.spec.ts
│ │ │ │ │ │ ├── fixtures/
│ │ │ │ │ │ │ ├── 30530d66-37fb-4f3b-aa5f-d92b6a8afae2.jsonl
│ │ │ │ │ │ │ ├── 50a7220d-7250-46f3-b38e-b716ce25032e/
│ │ │ │ │ │ │ │ └── subagents/
│ │ │ │ │ │ │ │ └── agent-a21e2f5.jsonl
│ │ │ │ │ │ │ ├── 50a7220d-7250-46f3-b38e-b716ce25032e.jsonl
│ │ │ │ │ │ │ ├── 553dd2b5-8a53-4fbf-9db2-240632522fe5.jsonl
│ │ │ │ │ │ │ ├── b02ed4d8-1f00-45cc-949f-3ea63b2dbde2.jsonl
│ │ │ │ │ │ │ ├── b3a7bd3c-5a10-4e7b-8ff0-7fc0cd6d1093/
│ │ │ │ │ │ │ │ └── subagents/
│ │ │ │ │ │ │ │ ├── agent-a775a67.jsonl
│ │ │ │ │ │ │ │ ├── agent-aa9d784.jsonl
│ │ │ │ │ │ │ │ ├── agent-ac47f8c.jsonl
│ │ │ │ │ │ │ │ └── agent-ae52dab.jsonl
│ │ │ │ │ │ │ ├── b3a7bd3c-5a10-4e7b-8ff0-7fc0cd6d1093.jsonl
│ │ │ │ │ │ │ └── c8bcb3a7-8728-4d76-9aae-1cbaf2350114.jsonl
│ │ │ │ │ │ ├── mockClaudeCodeModels.ts
│ │ │ │ │ │ ├── mockClaudeCodeSdkService.ts
│ │ │ │ │ │ ├── mockClaudeToolPermissionService.ts
│ │ │ │ │ │ ├── planModeHook.spec.ts
│ │ │ │ │ │ └── resolvePromptToContentBlocks.spec.ts
│ │ │ │ │ └── toolPermissionHandlers/
│ │ │ │ │ ├── editToolHandler.ts
│ │ │ │ │ └── index.ts
│ │ │ │ └── vscode-node/
│ │ │ │ ├── claudeSlashCommandService.ts
│ │ │ │ ├── hooks/
│ │ │ │ │ └── index.ts
│ │ │ │ ├── mcpServers/
│ │ │ │ │ └── index.ts
│ │ │ │ ├── slashCommands/
│ │ │ │ │ ├── agentsCommand.ts
│ │ │ │ │ ├── claudeSlashCommandRegistry.ts
│ │ │ │ │ ├── hooksCommand.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ ├── memoryCommand.ts
│ │ │ │ │ ├── terminalCommand.ts
│ │ │ │ │ └── test/
│ │ │ │ │ ├── claudeSlashCommandRegistry.spec.ts
│ │ │ │ │ └── terminalCommand.spec.ts
│ │ │ │ ├── test/
│ │ │ │ │ └── claudeSlashCommandService.spec.ts
│ │ │ │ └── toolPermissionHandlers/
│ │ │ │ └── index.ts
│ │ │ ├── common/
│ │ │ │ ├── agentSessionsWorkspace.ts
│ │ │ │ ├── chatCustomAgentsService.ts
│ │ │ │ ├── chatSessionMetadataStore.ts
│ │ │ │ ├── chatSessionWorkspaceFolderService.ts
│ │ │ │ ├── chatSessionWorktreeCheckpointService.ts
│ │ │ │ ├── chatSessionWorktreeService.ts
│ │ │ │ ├── externalEditTracker.ts
│ │ │ │ ├── folderRepositoryManager.ts
│ │ │ │ ├── test/
│ │ │ │ │ ├── externalEditTracker.spec.ts
│ │ │ │ │ ├── mockChatSessionMetadataStore.ts
│ │ │ │ │ └── ttlCache.spec.ts
│ │ │ │ ├── ttlCache.ts
│ │ │ │ ├── utils.ts
│ │ │ │ └── workspaceInfo.ts
│ │ │ ├── copilotcli/
│ │ │ │ ├── common/
│ │ │ │ │ ├── copilotCLIPrompt.ts
│ │ │ │ │ ├── copilotCLITools.ts
│ │ │ │ │ ├── customSessionTitleService.ts
│ │ │ │ │ ├── delegationSummaryService.ts
│ │ │ │ │ └── test/
│ │ │ │ │ └── copilotCLITools.spec.ts
│ │ │ │ ├── node/
│ │ │ │ │ ├── cliHelpers.ts
│ │ │ │ │ ├── copilotCLIImageSupport.ts
│ │ │ │ │ ├── copilotCLISkills.ts
│ │ │ │ │ ├── copilotCli.ts
│ │ │ │ │ ├── copilotCliBridgeSpanProcessor.ts
│ │ │ │ │ ├── copilotcliPromptResolver.ts
│ │ │ │ │ ├── copilotcliSession.ts
│ │ │ │ │ ├── copilotcliSessionService.ts
│ │ │ │ │ ├── logger.ts
│ │ │ │ │ ├── mcpHandler.ts
│ │ │ │ │ ├── nodePtyShim.ts
│ │ │ │ │ ├── permissionHelpers.ts
│ │ │ │ │ ├── ripgrepShim.ts
│ │ │ │ │ ├── test/
│ │ │ │ │ │ ├── copilotCliAgents.spec.ts
│ │ │ │ │ │ ├── copilotCliAuth.spec.ts
│ │ │ │ │ │ ├── copilotCliBridgeSpanProcessor.spec.ts
│ │ │ │ │ │ ├── copilotCliModels.spec.ts
│ │ │ │ │ │ ├── copilotCliSessionService.spec.ts
│ │ │ │ │ │ ├── copilotcliPromptResolver.spec.ts
│ │ │ │ │ │ ├── copilotcliSession.spec.ts
│ │ │ │ │ │ ├── permissionHelpers.spec.ts
│ │ │ │ │ │ └── testHelpers.ts
│ │ │ │ │ └── userInputHelpers.ts
│ │ │ │ └── vscode-node/
│ │ │ │ ├── commands/
│ │ │ │ │ ├── addFileReference.ts
│ │ │ │ │ ├── addSelection.ts
│ │ │ │ │ ├── context.ts
│ │ │ │ │ ├── diffCommands.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ ├── pickSession.ts
│ │ │ │ │ └── sendContext.ts
│ │ │ │ ├── contribution.ts
│ │ │ │ ├── copilotCLISessionTracker.ts
│ │ │ │ ├── customSessionTitleServiceImpl.ts
│ │ │ │ ├── diffState.ts
│ │ │ │ ├── inProcHttpServer.ts
│ │ │ │ ├── lockFile.ts
│ │ │ │ ├── readonlyContentProvider.ts
│ │ │ │ ├── test/
│ │ │ │ │ ├── addFileReference.spec.ts
│ │ │ │ │ ├── addSelection.spec.ts
│ │ │ │ │ ├── closeAllForSession.spec.ts
│ │ │ │ │ ├── closeDiff.spec.ts
│ │ │ │ │ ├── context.spec.ts
│ │ │ │ │ ├── copilotCLISessionTracker.spec.ts
│ │ │ │ │ ├── diagnosticsChanged.spec.ts
│ │ │ │ │ ├── diffCommands.spec.ts
│ │ │ │ │ ├── diffState.spec.ts
│ │ │ │ │ ├── getDiagnostics.spec.ts
│ │ │ │ │ ├── getSelection.spec.ts
│ │ │ │ │ ├── getVscodeInfo.spec.ts
│ │ │ │ │ ├── inProcHttpServer.spec.ts
│ │ │ │ │ ├── lockFile.spec.ts
│ │ │ │ │ ├── openDiff.spec.ts
│ │ │ │ │ ├── readonlyContentProvider.spec.ts
│ │ │ │ │ ├── selectionChanged.spec.ts
│ │ │ │ │ ├── testHelpers.ts
│ │ │ │ │ └── updateSessionName.spec.ts
│ │ │ │ └── tools/
│ │ │ │ ├── closeDiff.ts
│ │ │ │ ├── getDiagnostics.ts
│ │ │ │ ├── getSelection.ts
│ │ │ │ ├── getVscodeInfo.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── openDiff.ts
│ │ │ │ ├── push/
│ │ │ │ │ ├── diagnosticsChanged.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── selectionChanged.ts
│ │ │ │ ├── updateSessionName.ts
│ │ │ │ └── utils.ts
│ │ │ ├── vscode/
│ │ │ │ ├── chatSessionsUriHandler.ts
│ │ │ │ ├── copilotCodingAgentUtils.ts
│ │ │ │ └── test/
│ │ │ │ └── copilotCodingAgentUtils.spec.ts
│ │ │ └── vscode-node/
│ │ │ ├── agentSessionsWorkspace.ts
│ │ │ ├── askUserQuestionHandler.ts
│ │ │ ├── chatCustomAgentsService.ts
│ │ │ ├── chatHistoryBuilder.ts
│ │ │ ├── chatSessionMetadataStoreImpl.ts
│ │ │ ├── chatSessionRepositoryTracker.ts
│ │ │ ├── chatSessionWorkspaceFolderServiceImpl.ts
│ │ │ ├── chatSessionWorktreeCheckpointServiceImpl.ts
│ │ │ ├── chatSessionWorktreeServiceImpl.ts
│ │ │ ├── chatSessions.ts
│ │ │ ├── claudeChatSessionContentProvider.ts
│ │ │ ├── copilotCLIChatSessionsContribution.ts
│ │ │ ├── copilotCLIPromptReferences.ts
│ │ │ ├── copilotCLIPythonEnvironmentApi.ts
│ │ │ ├── copilotCLIPythonTerminalService.ts
│ │ │ ├── copilotCLIShim.ps1
│ │ │ ├── copilotCLIShim.ts
│ │ │ ├── copilotCLITerminalIntegration.ts
│ │ │ ├── copilotCLITerminalLinkProvider.ts
│ │ │ ├── copilotCloudGitOperationsManager.ts
│ │ │ ├── copilotCloudSessionContentBuilder.ts
│ │ │ ├── copilotCloudSessionsProvider.ts
│ │ │ ├── folderRepositoryManagerImpl.ts
│ │ │ ├── prContentProvider.ts
│ │ │ ├── pullRequestFileChangesService.ts
│ │ │ └── test/
│ │ │ ├── __snapshots__/
│ │ │ │ └── chatSessionContentProvider.spec.ts.snap
│ │ │ ├── askUserQuestionHandler.spec.ts
│ │ │ ├── chatHistoryBuilder.spec.ts
│ │ │ ├── chatSessionMetadataStoreImpl.spec.ts
│ │ │ ├── chatSessionWorkspaceFolderService.spec.ts
│ │ │ ├── claudeChatSessionContentProvider.spec.ts
│ │ │ ├── copilotCLIChatSessionParticipant.spec.ts
│ │ │ ├── copilotCLISDKUpgrade.spec.ts
│ │ │ ├── copilotCLITerminalIntegration.spec.ts
│ │ │ ├── copilotCLITerminalLinkProvider.spec.ts
│ │ │ ├── fixtures/
│ │ │ │ ├── 4c289ca8-f8bb-4588-8400-88b78beb784d.jsonl
│ │ │ │ ├── 98b76fb9-f5d3-40c5-ab82-b970c20e3764.jsonl
│ │ │ │ └── bd937e2a-89e9-4d7b-8125-293a35863fa4.jsonl
│ │ │ └── folderRepositoryManager.spec.ts
│ │ ├── codeBlocks/
│ │ │ ├── node/
│ │ │ │ ├── codeBlockProcessor.ts
│ │ │ │ └── test/
│ │ │ │ └── codeBlockProcessor.spec.ts
│ │ │ └── vscode-node/
│ │ │ ├── chatBlockLanguageFeatures.contribution.ts
│ │ │ └── provider.ts
│ │ ├── commands/
│ │ │ └── node/
│ │ │ └── commandService.ts
│ │ ├── common/
│ │ │ ├── constants.ts
│ │ │ ├── contributions.ts
│ │ │ └── modelContextProtocol.ts
│ │ ├── completions/
│ │ │ ├── common/
│ │ │ │ ├── config.ts
│ │ │ │ ├── copilotInlineCompletionItemProviderService.ts
│ │ │ │ └── parseBlock.ts
│ │ │ └── vscode-node/
│ │ │ ├── completionsCoreContribution.ts
│ │ │ ├── completionsUnificationContribution.ts
│ │ │ └── copilotInlineCompletionItemProviderService.ts
│ │ ├── completions-core/
│ │ │ ├── common/
│ │ │ │ └── ghostTextContext.ts
│ │ │ └── vscode-node/
│ │ │ ├── bridge/
│ │ │ │ └── src/
│ │ │ │ └── completionsTelemetryServiceBridge.ts
│ │ │ ├── completionsServiceBridges.ts
│ │ │ ├── extension/
│ │ │ │ ├── src/
│ │ │ │ │ ├── codeReferencing/
│ │ │ │ │ │ ├── citationManager.ts
│ │ │ │ │ │ ├── codeReferenceEngagementTracker.ts
│ │ │ │ │ │ ├── index.ts
│ │ │ │ │ │ ├── matchNotifier.ts
│ │ │ │ │ │ ├── outputChannel.ts
│ │ │ │ │ │ └── test/
│ │ │ │ │ │ ├── codeReferenceEngagementTracker.test.ts
│ │ │ │ │ │ ├── codeReferencing.test.ts
│ │ │ │ │ │ └── matchNotifier.test.ts
│ │ │ │ │ ├── completionsObservableWorkspace.ts
│ │ │ │ │ ├── config.ts
│ │ │ │ │ ├── constants.ts
│ │ │ │ │ ├── contextProviderMatch.ts
│ │ │ │ │ ├── copilotCompletionFeedbackTracker.ts
│ │ │ │ │ ├── copilotPanel/
│ │ │ │ │ │ ├── common.ts
│ │ │ │ │ │ ├── copilotListDocument.ts
│ │ │ │ │ │ ├── copilotSuggestionsPanel.ts
│ │ │ │ │ │ ├── copilotSuggestionsPanelManager.ts
│ │ │ │ │ │ ├── panelConfig.ts
│ │ │ │ │ │ └── webView/
│ │ │ │ │ │ ├── suggestionsPanelWebview.ts
│ │ │ │ │ │ └── tsconfig.json
│ │ │ │ │ ├── extensionStatus.ts
│ │ │ │ │ ├── fileSystem.ts
│ │ │ │ │ ├── ghostText/
│ │ │ │ │ │ └── ghostTextProvider.ts
│ │ │ │ │ ├── icon.ts
│ │ │ │ │ ├── lib/
│ │ │ │ │ │ ├── copilotPanel/
│ │ │ │ │ │ │ ├── common.ts
│ │ │ │ │ │ │ └── panel.ts
│ │ │ │ │ │ └── panelShared/
│ │ │ │ │ │ ├── common.ts
│ │ │ │ │ │ └── panelTypes.ts
│ │ │ │ │ ├── modelPicker.ts
│ │ │ │ │ ├── modelPickerUserSelection.ts
│ │ │ │ │ ├── panelShared/
│ │ │ │ │ │ ├── baseListDocument.ts
│ │ │ │ │ │ ├── basePanelTypes.ts
│ │ │ │ │ │ ├── baseSuggestionsPanel.ts
│ │ │ │ │ │ ├── baseSuggestionsPanelManager.ts
│ │ │ │ │ │ ├── highlighter.ts
│ │ │ │ │ │ ├── languages/
│ │ │ │ │ │ │ ├── cuda-cpp.tmLanguage.ts
│ │ │ │ │ │ │ ├── index.ts
│ │ │ │ │ │ │ ├── javaScriptReact.tmLanguage.ts
│ │ │ │ │ │ │ ├── markdown-latex-combined.tmLanguage.ts
│ │ │ │ │ │ │ ├── md-math.tmLanguage.ts
│ │ │ │ │ │ │ ├── rst.tmLanguage.ts
│ │ │ │ │ │ │ ├── searchResult.tmLanguage.ts
│ │ │ │ │ │ │ └── typeScriptReact.tmLanguage.ts
│ │ │ │ │ │ ├── themes/
│ │ │ │ │ │ │ ├── abyss.ts
│ │ │ │ │ │ │ ├── dark-hc.ts
│ │ │ │ │ │ │ ├── dark-modern.ts
│ │ │ │ │ │ │ ├── index.ts
│ │ │ │ │ │ │ ├── kimbie-dark.ts
│ │ │ │ │ │ │ ├── light-hc.ts
│ │ │ │ │ │ │ ├── light-modern.ts
│ │ │ │ │ │ │ ├── monokai-dim.ts
│ │ │ │ │ │ │ ├── quiet-light.ts
│ │ │ │ │ │ │ ├── red.ts
│ │ │ │ │ │ │ ├── tomorrow-night-blue.ts
│ │ │ │ │ │ │ ├── vs-dark.ts
│ │ │ │ │ │ │ └── vs-light.ts
│ │ │ │ │ │ └── utils.ts
│ │ │ │ │ ├── statusBar.ts
│ │ │ │ │ ├── statusBarPicker.ts
│ │ │ │ │ ├── telemetry.ts
│ │ │ │ │ ├── test/
│ │ │ │ │ │ ├── config.ts
│ │ │ │ │ │ ├── context.ts
│ │ │ │ │ │ └── modelPicker.test.ts
│ │ │ │ │ ├── textDocumentManager.ts
│ │ │ │ │ └── vscodeInlineCompletionItemProvider.ts
│ │ │ │ └── test/
│ │ │ │ ├── run.js
│ │ │ │ └── runTest.ts
│ │ │ ├── lib/
│ │ │ │ └── src/
│ │ │ │ ├── auth/
│ │ │ │ │ ├── copilotTokenManager.ts
│ │ │ │ │ ├── copilotTokenNotifier.ts
│ │ │ │ │ └── orgs.ts
│ │ │ │ ├── changeTracker.ts
│ │ │ │ ├── citationManager.ts
│ │ │ │ ├── completionNotifier.ts
│ │ │ │ ├── completionState.ts
│ │ │ │ ├── completionsObservableWorkspace.ts
│ │ │ │ ├── config.ts
│ │ │ │ ├── constants.ts
│ │ │ │ ├── defaultHandlers.ts
│ │ │ │ ├── diagnostics.ts
│ │ │ │ ├── documentTracker.ts
│ │ │ │ ├── error/
│ │ │ │ │ └── userErrorNotifier.ts
│ │ │ │ ├── experiments/
│ │ │ │ │ ├── defaultExpFilters.ts
│ │ │ │ │ ├── expConfig.ts
│ │ │ │ │ ├── features.ts
│ │ │ │ │ ├── featuresService.ts
│ │ │ │ │ ├── filters.ts
│ │ │ │ │ ├── similarFileOptionsProvider.ts
│ │ │ │ │ ├── similarFileOptionsProviderCpp.ts
│ │ │ │ │ ├── telemetryNames.ts
│ │ │ │ │ └── test/
│ │ │ │ │ └── features.test.ts
│ │ │ │ ├── fileReader.ts
│ │ │ │ ├── fileSystem.ts
│ │ │ │ ├── ghostText/
│ │ │ │ │ ├── asyncCompletions.ts
│ │ │ │ │ ├── blockTrimmer.ts
│ │ │ │ │ ├── cacheUtils.ts
│ │ │ │ │ ├── completionsCache.ts
│ │ │ │ │ ├── completionsFromNetwork.ts
│ │ │ │ │ ├── configBlockMode.ts
│ │ │ │ │ ├── contextualFilterConstants.ts
│ │ │ │ │ ├── copilotCompletion.ts
│ │ │ │ │ ├── current.ts
│ │ │ │ │ ├── ghostText.ts
│ │ │ │ │ ├── ghostTextStrategy.ts
│ │ │ │ │ ├── last.ts
│ │ │ │ │ ├── multilineModel.ts
│ │ │ │ │ ├── multilineModelWeights.ts
│ │ │ │ │ ├── normalizeIndent.ts
│ │ │ │ │ ├── requestContext.ts
│ │ │ │ │ ├── resultType.ts
│ │ │ │ │ ├── speculativeRequestCache.ts
│ │ │ │ │ ├── statementTree.ts
│ │ │ │ │ ├── streamedCompletionSplitter.ts
│ │ │ │ │ ├── telemetry.ts
│ │ │ │ │ └── test/
│ │ │ │ │ ├── asyncCompletions.test.ts
│ │ │ │ │ ├── blockTrimmer.test.ts
│ │ │ │ │ ├── current.test.ts
│ │ │ │ │ ├── ghostText.test.ts
│ │ │ │ │ ├── last.test.ts
│ │ │ │ │ ├── multilineModel.test.ts
│ │ │ │ │ ├── normalizeIndent.test.ts
│ │ │ │ │ ├── statementTree.test.ts
│ │ │ │ │ └── streamedCompletionSplitter.test.ts
│ │ │ │ ├── helpers/
│ │ │ │ │ ├── cache.ts
│ │ │ │ │ ├── iterableHelpers.ts
│ │ │ │ │ ├── radix.ts
│ │ │ │ │ └── test/
│ │ │ │ │ ├── cache.test.ts
│ │ │ │ │ ├── iterableHelpers.test.ts
│ │ │ │ │ └── radix.test.ts
│ │ │ │ ├── inlineCompletion.ts
│ │ │ │ ├── language/
│ │ │ │ │ ├── generatedLanguages.ts
│ │ │ │ │ ├── languageDetection.ts
│ │ │ │ │ ├── languages.ts
│ │ │ │ │ └── test/
│ │ │ │ │ ├── generatedLanguages.test.ts
│ │ │ │ │ └── languageDetection.test.ts
│ │ │ │ ├── localFileSystem.ts
│ │ │ │ ├── logger.ts
│ │ │ │ ├── logging/
│ │ │ │ │ └── util.ts
│ │ │ │ ├── networkConfiguration.ts
│ │ │ │ ├── networking.ts
│ │ │ │ ├── networkingTypes.ts
│ │ │ │ ├── notificationSender.ts
│ │ │ │ ├── openai/
│ │ │ │ │ ├── config.ts
│ │ │ │ │ ├── fetch.fake.ts
│ │ │ │ │ ├── fetch.ts
│ │ │ │ │ ├── model.ts
│ │ │ │ │ ├── openai.ts
│ │ │ │ │ ├── stream.ts
│ │ │ │ │ └── test/
│ │ │ │ │ ├── config.test.ts
│ │ │ │ │ ├── fetch.test.ts
│ │ │ │ │ └── stream.test.ts
│ │ │ │ ├── postInsertion.ts
│ │ │ │ ├── progress.ts
│ │ │ │ ├── prompt/
│ │ │ │ │ ├── asyncUtils.ts
│ │ │ │ │ ├── completionsPromptFactory/
│ │ │ │ │ │ ├── cascadingPromptFactory.ts
│ │ │ │ │ │ ├── completionsPromptFactory.ts
│ │ │ │ │ │ ├── componentsCompletionsPromptFactory.tsx
│ │ │ │ │ │ └── test/
│ │ │ │ │ │ └── completionsPromptFactory.test.tsx
│ │ │ │ │ ├── components/
│ │ │ │ │ │ ├── codeSnippets.tsx
│ │ │ │ │ │ ├── completionsContext.tsx
│ │ │ │ │ │ ├── completionsPromptRenderer.tsx
│ │ │ │ │ │ ├── contextProviderBridge.ts
│ │ │ │ │ │ ├── currentFile.tsx
│ │ │ │ │ │ ├── diagnostics.tsx
│ │ │ │ │ │ ├── elision.ts
│ │ │ │ │ │ ├── marker.tsx
│ │ │ │ │ │ ├── recentEdits.tsx
│ │ │ │ │ │ ├── similarFiles.tsx
│ │ │ │ │ │ ├── splitContextPrompt.tsx
│ │ │ │ │ │ ├── splitContextPromptRenderer.tsx
│ │ │ │ │ │ ├── test/
│ │ │ │ │ │ │ ├── codeSnippets.test.tsx
│ │ │ │ │ │ │ ├── completionsPromptRenderer.test.tsx
│ │ │ │ │ │ │ ├── contextProviderBridge.test.ts
│ │ │ │ │ │ │ ├── currentFile.test.tsx
│ │ │ │ │ │ │ ├── marker.test.tsx
│ │ │ │ │ │ │ ├── recentEdits.test.tsx
│ │ │ │ │ │ │ ├── similarFiles.test.tsx
│ │ │ │ │ │ │ ├── splitContextPromptRenderer.test.tsx
│ │ │ │ │ │ │ └── traits.test.tsx
│ │ │ │ │ │ ├── traits.tsx
│ │ │ │ │ │ └── virtualComponent.ts
│ │ │ │ │ ├── contextProviderRegistry.ts
│ │ │ │ │ ├── contextProviderRegistryCSharp.ts
│ │ │ │ │ ├── contextProviderRegistryCpp.ts
│ │ │ │ │ ├── contextProviderRegistryMultiLanguage.ts
│ │ │ │ │ ├── contextProviderRegistryTs.ts
│ │ │ │ │ ├── contextProviderStatistics.ts
│ │ │ │ │ ├── contextProviders/
│ │ │ │ │ │ ├── codeSnippets.ts
│ │ │ │ │ │ ├── contextItemSchemas.ts
│ │ │ │ │ │ ├── diagnostics.ts
│ │ │ │ │ │ ├── test/
│ │ │ │ │ │ │ ├── codeSnippets.test.ts
│ │ │ │ │ │ │ ├── contextItemSchemas.test.ts
│ │ │ │ │ │ │ └── traits.test.ts
│ │ │ │ │ │ └── traits.ts
│ │ │ │ │ ├── parseBlock.ts
│ │ │ │ │ ├── prompt.ts
│ │ │ │ │ ├── recentEdits/
│ │ │ │ │ │ ├── emptyRecentEditsProvider.ts
│ │ │ │ │ │ ├── recentEditsProvider.ts
│ │ │ │ │ │ ├── recentEditsReducer.ts
│ │ │ │ │ │ └── test/
│ │ │ │ │ │ └── recentEditsReducer.test.ts
│ │ │ │ │ ├── render/
│ │ │ │ │ │ ├── renderNode.ts
│ │ │ │ │ │ ├── test/
│ │ │ │ │ │ │ └── renderNode.test.ts
│ │ │ │ │ │ └── utils.ts
│ │ │ │ │ ├── repository.ts
│ │ │ │ │ ├── similarFiles/
│ │ │ │ │ │ ├── compositeRelatedFilesProvider.ts
│ │ │ │ │ │ ├── neighborFiles.ts
│ │ │ │ │ │ ├── openTabFiles.ts
│ │ │ │ │ │ ├── relatedFiles.ts
│ │ │ │ │ │ └── test/
│ │ │ │ │ │ ├── neighborFiles.test.ts
│ │ │ │ │ │ └── relatedFiles.test.ts
│ │ │ │ │ └── test/
│ │ │ │ │ ├── contextProviderRegistry.test.ts
│ │ │ │ │ ├── contextProviderRegistryMultiLanguage.test.ts
│ │ │ │ │ ├── contextProviderRegistryTs.test.ts
│ │ │ │ │ ├── contextProviderStatistics.test.ts
│ │ │ │ │ ├── contextProviderStatistics.ts
│ │ │ │ │ ├── contextProviderTelemetry.ts
│ │ │ │ │ ├── defaultDiagnosticSettings.test.ts
│ │ │ │ │ ├── determineTimeComplexity.ts
│ │ │ │ │ ├── parseBlock.test.ts
│ │ │ │ │ ├── prompt.test.ts
│ │ │ │ │ ├── prompt.ts
│ │ │ │ │ ├── relatedFiles.ts
│ │ │ │ │ └── repository.test.ts
│ │ │ │ ├── snippy/
│ │ │ │ │ ├── compute.ts
│ │ │ │ │ ├── connectionState.ts
│ │ │ │ │ ├── constants.ts
│ │ │ │ │ ├── errorCreator.ts
│ │ │ │ │ ├── handlePostInsertion.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ ├── logger.ts
│ │ │ │ │ ├── network.ts
│ │ │ │ │ ├── snippy.proto.ts
│ │ │ │ │ ├── telemetryHandlers.ts
│ │ │ │ │ └── test/
│ │ │ │ │ ├── compute.test.ts
│ │ │ │ │ └── network.test.ts
│ │ │ │ ├── suggestions/
│ │ │ │ │ ├── anomalyDetection.ts
│ │ │ │ │ ├── editDistance.ts
│ │ │ │ │ ├── partialSuggestions.ts
│ │ │ │ │ ├── suggestions.ts
│ │ │ │ │ └── test/
│ │ │ │ │ ├── anomalyDetection.test.ts
│ │ │ │ │ ├── editDistance.test.ts
│ │ │ │ │ ├── partialSuggestions.test.ts
│ │ │ │ │ └── suggestions.test.ts
│ │ │ │ ├── telemetry/
│ │ │ │ │ └── userConfig.ts
│ │ │ │ ├── telemetry.ts
│ │ │ │ ├── test/
│ │ │ │ │ ├── changeTracker.test.ts
│ │ │ │ │ ├── completionNotifier.test.ts
│ │ │ │ │ ├── completionState.test.ts
│ │ │ │ │ ├── completionsPrompt.ts
│ │ │ │ │ ├── config.test.ts
│ │ │ │ │ ├── context.ts
│ │ │ │ │ ├── copilotTokenManager.ts
│ │ │ │ │ ├── fetcher.ts
│ │ │ │ │ ├── fileReader.test.ts
│ │ │ │ │ ├── filesystem.ts
│ │ │ │ │ ├── inlineCompletion.test.ts
│ │ │ │ │ ├── localFileSystem.test.ts
│ │ │ │ │ ├── loggerHelpers.ts
│ │ │ │ │ ├── networking.test.ts
│ │ │ │ │ ├── noopTelemetry.ts
│ │ │ │ │ ├── notificationSender.test.ts
│ │ │ │ │ ├── postInsertion.test.ts
│ │ │ │ │ ├── runtimeMode.test.ts
│ │ │ │ │ ├── snapshot.ts
│ │ │ │ │ ├── telemetry.test.ts
│ │ │ │ │ ├── telemetry.ts
│ │ │ │ │ ├── telemetrySpy.ts
│ │ │ │ │ ├── testContentExclusion.ts
│ │ │ │ │ ├── testHelpers.ts
│ │ │ │ │ ├── textDocument.test.ts
│ │ │ │ │ ├── textDocument.ts
│ │ │ │ │ └── textDocumentManager.test.ts
│ │ │ │ ├── textDocument.ts
│ │ │ │ ├── textDocumentManager.ts
│ │ │ │ └── util/
│ │ │ │ ├── async.ts
│ │ │ │ ├── documentEvaluation.ts
│ │ │ │ ├── event.ts
│ │ │ │ ├── map.ts
│ │ │ │ ├── priorityQueue.ts
│ │ │ │ ├── promiseQueue.ts
│ │ │ │ ├── runtimeMode.ts
│ │ │ │ ├── shortCircuit.ts
│ │ │ │ ├── subject.ts
│ │ │ │ ├── test/
│ │ │ │ │ ├── async.test.ts
│ │ │ │ │ ├── priorityQueue.test.ts
│ │ │ │ │ ├── shortCircuit.test.ts
│ │ │ │ │ ├── subject.test.ts
│ │ │ │ │ └── uri.test.ts
│ │ │ │ ├── typebox.ts
│ │ │ │ ├── unknown.ts
│ │ │ │ └── uri.ts
│ │ │ ├── prompt/
│ │ │ │ ├── jsx-runtime/
│ │ │ │ │ └── jsx-runtime.ts
│ │ │ │ └── src/
│ │ │ │ ├── components/
│ │ │ │ │ ├── components.ts
│ │ │ │ │ ├── hooks.ts
│ │ │ │ │ ├── reconciler.ts
│ │ │ │ │ ├── virtualPrompt.ts
│ │ │ │ │ └── walker.ts
│ │ │ │ ├── error.ts
│ │ │ │ ├── fileLoader.ts
│ │ │ │ ├── indentation/
│ │ │ │ │ ├── classes.ts
│ │ │ │ │ ├── description.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ ├── java.ts
│ │ │ │ │ ├── manipulation.ts
│ │ │ │ │ ├── markdown.ts
│ │ │ │ │ └── parsing.ts
│ │ │ │ ├── languageMarker.ts
│ │ │ │ ├── parse.ts
│ │ │ │ ├── parseBlock.ts
│ │ │ │ ├── prompt.ts
│ │ │ │ ├── snippetInclusion/
│ │ │ │ │ ├── cursorContext.ts
│ │ │ │ │ ├── jaccardMatching.ts
│ │ │ │ │ ├── selectRelevance.ts
│ │ │ │ │ ├── similarFiles.ts
│ │ │ │ │ ├── snippets.ts
│ │ │ │ │ ├── subsetMatching.ts
│ │ │ │ │ └── windowDelineations.ts
│ │ │ │ ├── suffixMatchCriteria.ts
│ │ │ │ ├── test/
│ │ │ │ │ ├── components/
│ │ │ │ │ │ ├── hooks.test.ts
│ │ │ │ │ │ ├── jsx-runtime.test.ts.off
│ │ │ │ │ │ ├── reconciler.test.tsx
│ │ │ │ │ │ ├── testHelpers.ts
│ │ │ │ │ │ ├── virtualPrompt.test.tsx
│ │ │ │ │ │ └── walker.test.ts
│ │ │ │ │ ├── indentation.test.ts
│ │ │ │ │ ├── indentationLanguages.test.ts
│ │ │ │ │ ├── indentationParsing.test.ts
│ │ │ │ │ ├── languageMarker.test.ts
│ │ │ │ │ ├── multisnippet.test.ts
│ │ │ │ │ ├── parse.test.ts
│ │ │ │ │ ├── parseBlock.test.ts
│ │ │ │ │ ├── similarFiles.test.ts
│ │ │ │ │ ├── snippets.test.ts
│ │ │ │ │ ├── subsetMatching.test.ts
│ │ │ │ │ ├── suffixmatch.test.ts
│ │ │ │ │ ├── testHelpers.ts
│ │ │ │ │ ├── testdata/
│ │ │ │ │ │ ├── example.py
│ │ │ │ │ │ ├── lazy_greet.py
│ │ │ │ │ │ ├── testTokenizer.ts
│ │ │ │ │ │ └── testWishlist.ts
│ │ │ │ │ ├── tokenizer.test.ts
│ │ │ │ │ └── windowDelineation.test.ts
│ │ │ │ └── tokenization/
│ │ │ │ ├── index.ts
│ │ │ │ └── tokenizer.ts
│ │ │ └── types/
│ │ │ └── src/
│ │ │ ├── auth.ts
│ │ │ ├── codeCitation.ts
│ │ │ ├── contextProviderApiV1.ts
│ │ │ ├── core.ts
│ │ │ ├── index.ts
│ │ │ └── status.ts
│ │ ├── configuration/
│ │ │ └── vscode-node/
│ │ │ └── configurationMigration.ts
│ │ ├── context/
│ │ │ ├── node/
│ │ │ │ └── resolvers/
│ │ │ │ ├── extensionApi.tsx
│ │ │ │ ├── fixSelection.ts
│ │ │ │ ├── genericInlineIntentInvocation.ts
│ │ │ │ ├── genericPanelIntentInvocation.ts
│ │ │ │ ├── inlineChatSelection.ts
│ │ │ │ ├── inlineFixIntentInvocation.ts
│ │ │ │ ├── promptWorkspaceLabels.ts
│ │ │ │ ├── selectionContextHelpers.ts
│ │ │ │ ├── test/
│ │ │ │ │ └── vscodeContext.spec.ts
│ │ │ │ └── vscodeContext.ts
│ │ │ └── vscode/
│ │ │ └── context.contribution.ts
│ │ ├── contextKeys/
│ │ │ └── vscode-node/
│ │ │ └── contextKeys.contribution.ts
│ │ ├── conversation/
│ │ │ ├── common/
│ │ │ │ └── languageModelChatMessageHelpers.ts
│ │ │ ├── node/
│ │ │ │ ├── aiMappedEditsProvider.ts
│ │ │ │ └── githubPullRequestProviders.ts
│ │ │ └── vscode-node/
│ │ │ ├── aiMappedEditsContrib.ts
│ │ │ ├── chatParticipants.ts
│ │ │ ├── conversationFeature.ts
│ │ │ ├── feedbackCollection.ts
│ │ │ ├── feedbackContribution.ts
│ │ │ ├── feedbackReporter.ts
│ │ │ ├── languageModelAccess.ts
│ │ │ ├── languageModelAccessPrompt.tsx
│ │ │ ├── logWorkspaceState.ts
│ │ │ ├── newWorkspaceFollowup.ts
│ │ │ ├── remoteAgents.ts
│ │ │ ├── resolveModelId.ts
│ │ │ ├── terminalFixGenerator.ts
│ │ │ ├── test/
│ │ │ │ ├── conversationFeature.test.ts
│ │ │ │ ├── githubPullRequestTitleAndDescription.test.ts
│ │ │ │ ├── interactiveEditorSessionProvider.test.ts
│ │ │ │ ├── interactiveSessionProvider.telemetry.test.ts
│ │ │ │ ├── languageModelAccess.test.ts
│ │ │ │ └── userActionsResolvedModel.spec.ts
│ │ │ ├── userActions.ts
│ │ │ └── welcomeMessageProvider.ts
│ │ ├── conversationStore/
│ │ │ └── node/
│ │ │ └── conversationStore.ts
│ │ ├── diagnosticsContext/
│ │ │ └── vscode/
│ │ │ └── diagnosticsContextProvider.ts
│ │ ├── extension/
│ │ │ ├── vscode/
│ │ │ │ ├── contributions.ts
│ │ │ │ ├── extension.ts
│ │ │ │ └── services.ts
│ │ │ ├── vscode-node/
│ │ │ │ ├── contributions.ts
│ │ │ │ ├── extension.ts
│ │ │ │ └── services.ts
│ │ │ └── vscode-worker/
│ │ │ ├── contributions.ts
│ │ │ ├── extension.ts
│ │ │ └── services.ts
│ │ ├── externalAgents/
│ │ │ ├── node/
│ │ │ │ ├── modelProxyProvider.ts
│ │ │ │ └── oaiLanguageModelServer.ts
│ │ │ └── vscode-node/
│ │ │ └── lmProxyContrib.ts
│ │ ├── getting-started/
│ │ │ ├── common/
│ │ │ │ └── newWorkspaceContext.ts
│ │ │ └── vscode-node/
│ │ │ ├── commands.ts
│ │ │ ├── newWorkspace.contribution.ts
│ │ │ └── newWorkspaceInitializer.ts
│ │ ├── git/
│ │ │ ├── common/
│ │ │ │ └── mergeConflictService.ts
│ │ │ └── vscode/
│ │ │ ├── mergeConflictParser.ts
│ │ │ ├── mergeConflictServiceImpl.ts
│ │ │ └── scmContextprovider.ts
│ │ ├── githubMcp/
│ │ │ ├── common/
│ │ │ │ └── githubMcpDefinitionProvider.ts
│ │ │ ├── test/
│ │ │ │ └── node/
│ │ │ │ └── githubMcpDefinitionProvider.spec.ts
│ │ │ └── vscode-node/
│ │ │ └── githubMcp.contribution.ts
│ │ ├── githubPullRequest.d.ts
│ │ ├── ignore/
│ │ │ └── vscode-node/
│ │ │ ├── ignoreMessage.ts
│ │ │ └── ignoreProvider.ts
│ │ ├── inlineChat/
│ │ │ ├── node/
│ │ │ │ ├── codeContextRegion.ts
│ │ │ │ ├── diagnosticsTelemetry.ts
│ │ │ │ ├── inlineChatConstants.ts
│ │ │ │ ├── inlineChatIntent.ts
│ │ │ │ ├── progressMessages.ts
│ │ │ │ ├── promptCraftingTypes.ts
│ │ │ │ └── rendererVisualization.ts
│ │ │ ├── test/
│ │ │ │ └── vscode-node/
│ │ │ │ ├── inlineChat.test.ts
│ │ │ │ └── naturalLanguageHint.test.ts
│ │ │ └── vscode-node/
│ │ │ ├── inlineChatCodeActions.ts
│ │ │ ├── inlineChatCommands.ts
│ │ │ ├── inlineChatNotebookActions.ts
│ │ │ └── naturalLanguageHint.ts
│ │ ├── inlineEdits/
│ │ │ ├── common/
│ │ │ │ ├── common.ts
│ │ │ │ ├── correlationId.ts
│ │ │ │ ├── delay.ts
│ │ │ │ ├── editRebase.ts
│ │ │ │ ├── informationDelta.tsx
│ │ │ │ ├── nearbyCursorInlineEditProvider.ts
│ │ │ │ ├── nesTriggerHint.ts
│ │ │ │ ├── observableWorkspaceRecordingReplayer.ts
│ │ │ │ ├── rejectionCollector.ts
│ │ │ │ └── userInteractionMonitor.ts
│ │ │ ├── node/
│ │ │ │ ├── createNextEditProvider.ts
│ │ │ │ ├── debugRecorder.ts
│ │ │ │ ├── diffNextEdits.ts
│ │ │ │ ├── importFiltering.ts
│ │ │ │ ├── nesConfigs.ts
│ │ │ │ ├── nextEditCache.ts
│ │ │ │ ├── nextEditProvider.ts
│ │ │ │ ├── nextEditProviderTelemetry.ts
│ │ │ │ ├── nextEditResult.ts
│ │ │ │ └── rebaseResult.ts
│ │ │ ├── test/
│ │ │ │ ├── common/
│ │ │ │ │ ├── editRebase.spec.ts
│ │ │ │ │ ├── userHappinessScore.spec.ts
│ │ │ │ │ └── userInteractionMonitor.spec.ts
│ │ │ │ ├── node/
│ │ │ │ │ ├── debugRecorder.spec.ts
│ │ │ │ │ ├── fileLoading.ts
│ │ │ │ │ ├── ignoreImportChanges.spec.ts
│ │ │ │ │ ├── nesXtabHistoryTracker.spec.ts
│ │ │ │ │ ├── nextEditProviderCaching.spec.ts
│ │ │ │ │ ├── nextEditProviderSpeculative.spec.ts
│ │ │ │ │ ├── nextEditProviderTelemetry.spec.ts
│ │ │ │ │ ├── recordings/
│ │ │ │ │ │ ├── ArrayToObject.recording.w.json
│ │ │ │ │ │ ├── ChangePointToPoint3D.recording.w.json
│ │ │ │ │ │ ├── DeclaringConstructorArgument.recording.w.json
│ │ │ │ │ │ ├── EditSourceTracker.test1.recording.w.json
│ │ │ │ │ │ └── RejectionCollector.test1.w.json
│ │ │ │ │ ├── rejectionCollector.spec.ts
│ │ │ │ │ └── runRecording.ts
│ │ │ │ └── vscode-node/
│ │ │ │ ├── diagnosticsCollection.spec.ts
│ │ │ │ ├── documentFilter.ts
│ │ │ │ ├── inlineEditTriggerer.spec.ts
│ │ │ │ ├── isInlineSuggestion.spec.ts
│ │ │ │ ├── isSubword.spec.ts
│ │ │ │ └── raceAndAll.spec.ts
│ │ │ └── vscode-node/
│ │ │ ├── components/
│ │ │ │ ├── expectedEditCaptureController.ts
│ │ │ │ ├── inlineEditDebugComponent.ts
│ │ │ │ ├── logContextRecorder.ts
│ │ │ │ ├── nesFeedbackSubmitter.ts
│ │ │ │ └── test/
│ │ │ │ ├── inlineEditDebugComponent.spec.ts
│ │ │ │ └── nesFeedbackSubmitter.spec.ts
│ │ │ ├── features/
│ │ │ │ ├── diagnosticsBasedCompletions/
│ │ │ │ │ ├── anyDiagnosticsCompletionProvider.ts
│ │ │ │ │ ├── asyncDiagnosticsCompletionProvider.ts
│ │ │ │ │ ├── diagnosticsCompletions.ts
│ │ │ │ │ └── importDiagnosticsCompletionProvider.ts
│ │ │ │ ├── diagnosticsCompletionProcessor.ts
│ │ │ │ └── diagnosticsInlineEditProvider.ts
│ │ │ ├── inlineCompletionProvider.ts
│ │ │ ├── inlineEditModel.ts
│ │ │ ├── inlineEditProviderFeature.ts
│ │ │ ├── inlineEditTriggerer.ts
│ │ │ ├── isInlineSuggestion.ts
│ │ │ ├── jointInlineCompletionProvider.ts
│ │ │ ├── parts/
│ │ │ │ ├── common.ts
│ │ │ │ ├── documentFilter.ts
│ │ │ │ ├── inlineEditLogger.ts
│ │ │ │ ├── verifyTextDocumentChanges.ts
│ │ │ │ └── vscodeWorkspace.ts
│ │ │ ├── raceAndAll.ts
│ │ │ ├── similarFilesContext.ts
│ │ │ └── utils/
│ │ │ ├── observablesUtils.ts
│ │ │ ├── translations.ts
│ │ │ └── virtualTextDocumentProvider.ts
│ │ ├── intents/
│ │ │ ├── common/
│ │ │ │ ├── agentConfig.ts
│ │ │ │ └── intents.ts
│ │ │ ├── node/
│ │ │ │ ├── agentIntent.ts
│ │ │ │ ├── allIntents.ts
│ │ │ │ ├── askAgentIntent.ts
│ │ │ │ ├── cacheBreakpoints.ts
│ │ │ │ ├── docIntent.tsx
│ │ │ │ ├── editCodeIntent.ts
│ │ │ │ ├── editCodeIntent2.ts
│ │ │ │ ├── editCodeStep.ts
│ │ │ │ ├── explainIntent.ts
│ │ │ │ ├── fixIntent.ts
│ │ │ │ ├── generateCodeIntent.ts
│ │ │ │ ├── generateNewWorkspaceContent.ts
│ │ │ │ ├── hookResultProcessor.ts
│ │ │ │ ├── intentService.ts
│ │ │ │ ├── newIntent.ts
│ │ │ │ ├── newNotebookIntent.contribution.ts
│ │ │ │ ├── newNotebookIntent.ts
│ │ │ │ ├── notebookEditorIntent.ts
│ │ │ │ ├── promptOverride.ts
│ │ │ │ ├── reviewIntent.ts
│ │ │ │ ├── searchIntent.ts
│ │ │ │ ├── searchKeywordsIntent.ts
│ │ │ │ ├── searchPanelIntent.ts
│ │ │ │ ├── setupTests.ts
│ │ │ │ ├── terminalExplainIntent.ts
│ │ │ │ ├── terminalIntent.ts
│ │ │ │ ├── test/
│ │ │ │ │ ├── agentSummarizeCommand.spec.ts
│ │ │ │ │ └── promptOverride.spec.ts
│ │ │ │ ├── testIntent/
│ │ │ │ │ ├── setupTestsFrameworkQueryInvocation.tsx
│ │ │ │ │ ├── setupTestsInvocation.tsx
│ │ │ │ │ ├── summarizedDocumentWithSelection.tsx
│ │ │ │ │ ├── testDeps.tsx
│ │ │ │ │ ├── testFromSrcInvocation.tsx
│ │ │ │ │ ├── testFromTestInvocation.tsx
│ │ │ │ │ ├── testInfoStorage.ts
│ │ │ │ │ ├── testIntent.tsx
│ │ │ │ │ ├── testPromptUtil.ts
│ │ │ │ │ └── userQueryParser.tsx
│ │ │ │ ├── toolCallingLoop.ts
│ │ │ │ ├── unknownIntent.ts
│ │ │ │ └── vscodeIntent.ts
│ │ │ ├── test/
│ │ │ │ └── node/
│ │ │ │ ├── editCodeIntent.spec.ts
│ │ │ │ ├── hookResultProcessor.spec.ts
│ │ │ │ ├── toolCallingLoopAutopilot.spec.ts
│ │ │ │ ├── toolCallingLoopHooks.spec.ts
│ │ │ │ ├── toolCallingLoopUsage.spec.ts
│ │ │ │ └── validateToolMessages.spec.ts
│ │ │ └── vscode-node/
│ │ │ ├── fixTestFailureContributions.ts
│ │ │ ├── newWorkspacePreviewFileSystemProvider.ts
│ │ │ └── newWorkspaceTextDocumentProvider.ts
│ │ ├── languageContextProvider/
│ │ │ └── vscode-node/
│ │ │ └── languageContextProviderService.ts
│ │ ├── linkify/
│ │ │ ├── common/
│ │ │ │ ├── commands.ts
│ │ │ │ ├── filePathLinkifier.ts
│ │ │ │ ├── linkifiedText.ts
│ │ │ │ ├── linkifier.ts
│ │ │ │ ├── linkifyService.ts
│ │ │ │ ├── modelFilePathLinkifier.ts
│ │ │ │ ├── responseStreamWithLinkification.ts
│ │ │ │ └── statCache.ts
│ │ │ ├── test/
│ │ │ │ ├── node/
│ │ │ │ │ ├── filePathLinkifier.spec.ts
│ │ │ │ │ ├── linkifier.spec.ts
│ │ │ │ │ ├── modelFilePathLinkifier.spec.ts
│ │ │ │ │ ├── statCaching.spec.ts
│ │ │ │ │ └── util.ts
│ │ │ │ └── vscode-node/
│ │ │ │ ├── findSymbol.test.ts
│ │ │ │ ├── notebookCellLinkifier.spec.ts
│ │ │ │ └── symbolLinkifier.test.ts
│ │ │ └── vscode-node/
│ │ │ ├── commands.ts
│ │ │ ├── findSymbol.ts
│ │ │ ├── findWord.ts
│ │ │ ├── inlineCodeSymbolLinkifier.ts
│ │ │ ├── notebookCellLinkifier.ts
│ │ │ └── symbolLinkifier.ts
│ │ ├── log/
│ │ │ └── vscode-node/
│ │ │ ├── extensionStateCommand.ts
│ │ │ ├── loggingActions.ts
│ │ │ ├── requestLogTree.ts
│ │ │ └── test/
│ │ │ └── sanitizer.spec.ts
│ │ ├── mcp/
│ │ │ ├── test/
│ │ │ │ └── vscode-node/
│ │ │ │ ├── commands.spec.ts
│ │ │ │ ├── fixtures/
│ │ │ │ │ ├── nuget/
│ │ │ │ │ │ ├── basetestpackage.dotnettool.1.0.0.nupkg
│ │ │ │ │ │ ├── basetestpackage.mcpserver.0.1.0-beta.nupkg
│ │ │ │ │ │ └── knapcode.samplemcpserver.0.6.0-beta.nupkg
│ │ │ │ │ └── snapshots/
│ │ │ │ │ ├── docker-mcp-node-code-sandbox.json
│ │ │ │ │ ├── dotnet-package-search-does-not-exist.json
│ │ │ │ │ ├── dotnet-package-search-exists.json
│ │ │ │ │ ├── npm-modelcontextprotocol-server-everything.json
│ │ │ │ │ ├── nuget-readme.md
│ │ │ │ │ ├── nuget-service-index.json
│ │ │ │ │ └── pip-mcp-server-fetch.json
│ │ │ │ ├── nuget.integration.spec.ts
│ │ │ │ ├── nuget.mapping.spec.ts
│ │ │ │ ├── nuget.stub.spec.ts
│ │ │ │ └── util.ts
│ │ │ └── vscode-node/
│ │ │ ├── commands.ts
│ │ │ ├── mcpToolCallingLoop.tsx
│ │ │ ├── mcpToolCallingLoopPrompt.tsx
│ │ │ ├── mcpToolCallingTools.tsx
│ │ │ ├── nuget.ts
│ │ │ └── util.ts
│ │ ├── notebook/
│ │ │ └── vscode-node/
│ │ │ └── followActions.ts
│ │ ├── onboardDebug/
│ │ │ ├── common/
│ │ │ │ └── launchConfigService.ts
│ │ │ ├── node/
│ │ │ │ ├── commandToConfigConverter.tsx
│ │ │ │ ├── copilotDebugCommandSessionFactory.tsx
│ │ │ │ ├── copilotDebugWorker/
│ │ │ │ │ ├── copilotDebugWorker.ps1
│ │ │ │ │ ├── index.ts
│ │ │ │ │ ├── open.ts
│ │ │ │ │ ├── rpc.ts
│ │ │ │ │ ├── shared.ts
│ │ │ │ │ └── streamSplitter.ts
│ │ │ │ ├── debuggableCommandIdentifier.ts
│ │ │ │ ├── languageToolsProvider.tsx
│ │ │ │ └── parseLaunchConfigFromResponse.ts
│ │ │ ├── test/
│ │ │ │ └── node/
│ │ │ │ ├── debuggableCommandIdentifier.spec.ts
│ │ │ │ └── parseLaunchConfigFromResponse.spec.ts
│ │ │ ├── vscode/
│ │ │ │ └── launchConfigService.ts
│ │ │ └── vscode-node/
│ │ │ ├── copilotDebugCommandContribution.ts
│ │ │ ├── copilotDebugCommandHandle.ts
│ │ │ ├── copilotDebugCommandSession.ts
│ │ │ └── onboardTerminalTestsContribution.ts
│ │ ├── otel/
│ │ │ └── vscode-node/
│ │ │ └── otelContrib.ts
│ │ ├── power/
│ │ │ ├── common/
│ │ │ │ └── powerService.ts
│ │ │ └── vscode-node/
│ │ │ ├── powerService.ts
│ │ │ └── powerStateLogger.ts
│ │ ├── prompt/
│ │ │ ├── common/
│ │ │ │ ├── chatVariablesCollection.ts
│ │ │ │ ├── codeGuesser.ts
│ │ │ │ ├── conversation.ts
│ │ │ │ ├── fileTreeParser.ts
│ │ │ │ ├── importStatement.ts
│ │ │ │ ├── intents.ts
│ │ │ │ ├── promptCategorizationTaxonomy.ts
│ │ │ │ ├── repository.ts
│ │ │ │ ├── specialRequestTypes.ts
│ │ │ │ ├── streamingGrammar.ts
│ │ │ │ └── toolCallRound.ts
│ │ │ ├── node/
│ │ │ │ ├── chatMLFetcher.ts
│ │ │ │ ├── chatMLFetcherTelemetry.ts
│ │ │ │ ├── chatParticipantRequestHandler.ts
│ │ │ │ ├── chatParticipantTelemetry.ts
│ │ │ │ ├── codebaseToolCalling.ts
│ │ │ │ ├── conversation.ts
│ │ │ │ ├── defaultIntentRequestHandler.ts
│ │ │ │ ├── definitionAroundCursor.tsx
│ │ │ │ ├── devContainerConfigGenerator.ts
│ │ │ │ ├── documentContext.ts
│ │ │ │ ├── editFromDiffGeneration.ts
│ │ │ │ ├── editGeneration.ts
│ │ │ │ ├── executionSubagentToolCallingLoop.ts
│ │ │ │ ├── feedbackGenerator.ts
│ │ │ │ ├── feedbackReporter.ts
│ │ │ │ ├── gitCommitMessageGenerator.ts
│ │ │ │ ├── githubPullRequestTitleAndDescriptionGenerator.ts
│ │ │ │ ├── indentationGuesser.ts
│ │ │ │ ├── intentDetector.tsx
│ │ │ │ ├── intentRegistry.ts
│ │ │ │ ├── intents.ts
│ │ │ │ ├── promptCategorizer.ts
│ │ │ │ ├── promptVariablesService.ts
│ │ │ │ ├── pseudoStartStopConversationCallback.ts
│ │ │ │ ├── repoInfoTelemetry.ts
│ │ │ │ ├── responseProcessorContext.ts
│ │ │ │ ├── searchSubagentToolCallingLoop.ts
│ │ │ │ ├── settingsEditorSearchResultsSelector.ts
│ │ │ │ ├── streamingEdits.ts
│ │ │ │ ├── summarizer.ts
│ │ │ │ ├── telemetry.ts
│ │ │ │ ├── test/
│ │ │ │ │ ├── __snapshots__/
│ │ │ │ │ │ └── defaultIntentRequestHandler.spec.ts.snap
│ │ │ │ │ ├── chatMLFetcherResponseApiTelemetry.spec.ts
│ │ │ │ │ ├── chatMLFetcherRetry.spec.ts
│ │ │ │ │ ├── codeGuesser.spec.ts
│ │ │ │ │ ├── defaultIntentRequestHandler.spec.ts
│ │ │ │ │ ├── feedbackGenerator.spec.ts
│ │ │ │ │ ├── indentationGuesser.spec.ts
│ │ │ │ │ ├── positionOffsetTransformer.spec.ts
│ │ │ │ │ ├── repoInfoTelemetry.spec.ts
│ │ │ │ │ ├── streamingEdits.spec.ts
│ │ │ │ │ └── testFiles.spec.ts
│ │ │ │ ├── test2Impl.tsx
│ │ │ │ ├── testExample.tsx
│ │ │ │ ├── testFiles.ts
│ │ │ │ ├── title.ts
│ │ │ │ └── todoListContextProvider.ts
│ │ │ ├── test/
│ │ │ │ ├── common/
│ │ │ │ │ ├── fileTreeParser.spec.ts
│ │ │ │ │ └── streamingGrammar.spec.ts
│ │ │ │ └── node/
│ │ │ │ └── conversation.spec.ts
│ │ │ └── vscode-node/
│ │ │ ├── debugCommands.ts
│ │ │ ├── devContainerConfigurationServiceImpl.ts
│ │ │ ├── endpointProviderImpl.ts
│ │ │ ├── gitCommitMessageServiceImpl.ts
│ │ │ ├── gitDiffService.ts
│ │ │ ├── promptVariablesService.ts
│ │ │ ├── renameSuggestions.ts
│ │ │ ├── requestLoggerImpl.ts
│ │ │ ├── requestLoggerToolResult.tsx
│ │ │ ├── scenarioAutomationEndpointProviderImpl.ts
│ │ │ ├── settingsEditorSearchServiceImpl.ts
│ │ │ ├── test/
│ │ │ │ ├── gitDiffService.spec.ts
│ │ │ │ └── promptVariablesService.spec.ts
│ │ │ └── workspaceEditRecorder.ts
│ │ ├── promptFileContext/
│ │ │ └── vscode-node/
│ │ │ └── promptFileContextService.ts
│ │ ├── prompts/
│ │ │ ├── common/
│ │ │ │ └── chatDiskSessionResources.ts
│ │ │ └── node/
│ │ │ ├── agent/
│ │ │ │ ├── agentConversationHistory.tsx
│ │ │ │ ├── agentPrompt.tsx
│ │ │ │ ├── allAgentPrompts.ts
│ │ │ │ ├── anthropicPrompts.tsx
│ │ │ │ ├── backgroundSummarizer.ts
│ │ │ │ ├── copilotCLIPrompt.tsx
│ │ │ │ ├── defaultAgentInstructions.tsx
│ │ │ │ ├── executionSubagentPrompt.tsx
│ │ │ │ ├── fileLinkificationInstructions.tsx
│ │ │ │ ├── geminiPrompts.tsx
│ │ │ │ ├── minimaxPrompts.tsx
│ │ │ │ ├── openai/
│ │ │ │ │ ├── defaultOpenAIPrompt.tsx
│ │ │ │ │ ├── gpt51CodexPrompt.tsx
│ │ │ │ │ ├── gpt51Prompt.tsx
│ │ │ │ │ ├── gpt52Prompt.tsx
│ │ │ │ │ ├── gpt53CodexPrompt.tsx
│ │ │ │ │ ├── gpt54Prompt.tsx
│ │ │ │ │ ├── gpt5CodexPrompt.tsx
│ │ │ │ │ └── gpt5Prompt.tsx
│ │ │ │ ├── promptRegistry.ts
│ │ │ │ ├── searchSubagentPrompt.tsx
│ │ │ │ ├── simpleSummarizedHistoryPrompt.tsx
│ │ │ │ ├── summarizedConversationHistory.tsx
│ │ │ │ ├── test/
│ │ │ │ │ ├── __snapshots__/
│ │ │ │ │ │ ├── agentPrompts-arctic-fox/
│ │ │ │ │ │ │ ├── agentPrompts-all_non_edit_tools-arctic-fox.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-all_tools-arctic-fox.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-cache_BPs-arctic-fox.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-cache_BPs_multi_round-arctic-fox.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-custom_instructions_not_in_system_message-arctic-fox.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-edited_file_events_grouped_by_kind-arctic-fox.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-omit_base_agent_instructions-arctic-fox.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-one_attachment-arctic-fox.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-simple_case-arctic-fox.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-tool_use-arctic-fox.spec.snap
│ │ │ │ │ │ │ ├── all_non_edit_tools-arctic-fox.spec.snap
│ │ │ │ │ │ │ ├── all_non_edit_tools.spec.snap
│ │ │ │ │ │ │ ├── all_tools-arctic-fox.spec.snap
│ │ │ │ │ │ │ ├── all_tools.spec.snap
│ │ │ │ │ │ │ ├── cache_BPs-arctic-fox.spec.snap
│ │ │ │ │ │ │ ├── cache_BPs.spec.snap
│ │ │ │ │ │ │ ├── cache_BPs_multi_round-arctic-fox.spec.snap
│ │ │ │ │ │ │ ├── cache_BPs_multi_round.spec.snap
│ │ │ │ │ │ │ ├── custom_instructions_not_in_system_message-arctic-fox.spec.snap
│ │ │ │ │ │ │ ├── custom_instructions_not_in_system_message.spec.snap
│ │ │ │ │ │ │ ├── edited_file_events_grouped_by_kind-arctic-fox.spec.snap
│ │ │ │ │ │ │ ├── edited_file_events_grouped_by_kind.spec.snap
│ │ │ │ │ │ │ ├── omit_base_agent_instructions-arctic-fox.spec.snap
│ │ │ │ │ │ │ ├── omit_base_agent_instructions.spec.snap
│ │ │ │ │ │ │ ├── one_attachment-arctic-fox.spec.snap
│ │ │ │ │ │ │ ├── one_attachment.spec.snap
│ │ │ │ │ │ │ ├── simple_case-arctic-fox.spec.snap
│ │ │ │ │ │ │ ├── simple_case.spec.snap
│ │ │ │ │ │ │ ├── tool_use-arctic-fox.spec.snap
│ │ │ │ │ │ │ └── tool_use.spec.snap
│ │ │ │ │ │ ├── agentPrompts-claude-haiku-4.5/
│ │ │ │ │ │ │ ├── all_non_edit_tools.spec.snap
│ │ │ │ │ │ │ ├── all_tools.spec.snap
│ │ │ │ │ │ │ ├── cache_BPs.spec.snap
│ │ │ │ │ │ │ ├── cache_BPs_multi_round.spec.snap
│ │ │ │ │ │ │ ├── custom_instructions_not_in_system_message.spec.snap
│ │ │ │ │ │ │ ├── edited_file_events_grouped_by_kind.spec.snap
│ │ │ │ │ │ │ ├── omit_base_agent_instructions.spec.snap
│ │ │ │ │ │ │ ├── one_attachment.spec.snap
│ │ │ │ │ │ │ ├── simple_case.spec.snap
│ │ │ │ │ │ │ └── tool_use.spec.snap
│ │ │ │ │ │ ├── agentPrompts-claude-opus-4.5/
│ │ │ │ │ │ │ ├── agentPrompts-all_non_edit_tools-claude-opus-4.5.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-all_tools-claude-opus-4.5.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-cache_BPs-claude-opus-4.5.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-cache_BPs_multi_round-claude-opus-4.5.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-custom_instructions_not_in_system_message-claude-opus-4.5.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-edited_file_events_grouped_by_kind-claude-opus-4.5.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-omit_base_agent_instructions-claude-opus-4.5.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-one_attachment-claude-opus-4.5.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-simple_case-claude-opus-4.5.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-tool_use-claude-opus-4.5.spec.snap
│ │ │ │ │ │ │ ├── all_non_edit_tools-claude-opus-4.5.spec.snap
│ │ │ │ │ │ │ ├── all_non_edit_tools.spec.snap
│ │ │ │ │ │ │ ├── all_tools-claude-opus-4.5.spec.snap
│ │ │ │ │ │ │ ├── all_tools.spec.snap
│ │ │ │ │ │ │ ├── cache_BPs-claude-opus-4.5.spec.snap
│ │ │ │ │ │ │ ├── cache_BPs.spec.snap
│ │ │ │ │ │ │ ├── cache_BPs_multi_round-claude-opus-4.5.spec.snap
│ │ │ │ │ │ │ ├── cache_BPs_multi_round.spec.snap
│ │ │ │ │ │ │ ├── custom_instructions_not_in_system_message-claude-opus-4.5.spec.snap
│ │ │ │ │ │ │ ├── custom_instructions_not_in_system_message.spec.snap
│ │ │ │ │ │ │ ├── edited_file_events_grouped_by_kind-claude-opus-4.5.spec.snap
│ │ │ │ │ │ │ ├── edited_file_events_grouped_by_kind.spec.snap
│ │ │ │ │ │ │ ├── omit_base_agent_instructions-claude-opus-4.5.spec.snap
│ │ │ │ │ │ │ ├── omit_base_agent_instructions.spec.snap
│ │ │ │ │ │ │ ├── one_attachment-claude-opus-4.5.spec.snap
│ │ │ │ │ │ │ ├── one_attachment.spec.snap
│ │ │ │ │ │ │ ├── simple_case-claude-opus-4.5.spec.snap
│ │ │ │ │ │ │ ├── simple_case.spec.snap
│ │ │ │ │ │ │ ├── tool_use-claude-opus-4.5.spec.snap
│ │ │ │ │ │ │ └── tool_use.spec.snap
│ │ │ │ │ │ ├── agentPrompts-claude-opus-4.6/
│ │ │ │ │ │ │ ├── all_non_edit_tools.spec.snap
│ │ │ │ │ │ │ ├── all_tools.spec.snap
│ │ │ │ │ │ │ ├── cache_BPs.spec.snap
│ │ │ │ │ │ │ ├── cache_BPs_multi_round.spec.snap
│ │ │ │ │ │ │ ├── custom_instructions_not_in_system_message.spec.snap
│ │ │ │ │ │ │ ├── edited_file_events_grouped_by_kind.spec.snap
│ │ │ │ │ │ │ ├── omit_base_agent_instructions.spec.snap
│ │ │ │ │ │ │ ├── one_attachment.spec.snap
│ │ │ │ │ │ │ ├── simple_case.spec.snap
│ │ │ │ │ │ │ └── tool_use.spec.snap
│ │ │ │ │ │ ├── agentPrompts-claude-opus-4.6-fast/
│ │ │ │ │ │ │ ├── all_non_edit_tools.spec.snap
│ │ │ │ │ │ │ ├── all_tools.spec.snap
│ │ │ │ │ │ │ ├── cache_BPs.spec.snap
│ │ │ │ │ │ │ ├── cache_BPs_multi_round.spec.snap
│ │ │ │ │ │ │ ├── custom_instructions_not_in_system_message.spec.snap
│ │ │ │ │ │ │ ├── edited_file_events_grouped_by_kind.spec.snap
│ │ │ │ │ │ │ ├── omit_base_agent_instructions.spec.snap
│ │ │ │ │ │ │ ├── one_attachment.spec.snap
│ │ │ │ │ │ │ ├── simple_case.spec.snap
│ │ │ │ │ │ │ └── tool_use.spec.snap
│ │ │ │ │ │ ├── agentPrompts-claude-sonnet-4.5/
│ │ │ │ │ │ │ ├── agentPrompts-all_non_edit_tools-claude-sonnet-4.5.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-all_tools-claude-sonnet-4.5.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-cache_BPs-claude-sonnet-4.5.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-cache_BPs_multi_round-claude-sonnet-4.5.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-custom_instructions_not_in_system_message-claude-sonnet-4.5.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-edited_file_events_grouped_by_kind-claude-sonnet-4.5.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-omit_base_agent_instructions-claude-sonnet-4.5.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-one_attachment-claude-sonnet-4.5.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-simple_case-claude-sonnet-4.5.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-tool_use-claude-sonnet-4.5.spec.snap
│ │ │ │ │ │ │ ├── all_non_edit_tools-claude-sonnet-4.5.spec.snap
│ │ │ │ │ │ │ ├── all_non_edit_tools.spec.snap
│ │ │ │ │ │ │ ├── all_tools-claude-sonnet-4.5.spec.snap
│ │ │ │ │ │ │ ├── all_tools.spec.snap
│ │ │ │ │ │ │ ├── cache_BPs-claude-sonnet-4.5.spec.snap
│ │ │ │ │ │ │ ├── cache_BPs.spec.snap
│ │ │ │ │ │ │ ├── cache_BPs_multi_round-claude-sonnet-4.5.spec.snap
│ │ │ │ │ │ │ ├── cache_BPs_multi_round.spec.snap
│ │ │ │ │ │ │ ├── custom_instructions_not_in_system_message-claude-sonnet-4.5.spec.snap
│ │ │ │ │ │ │ ├── custom_instructions_not_in_system_message.spec.snap
│ │ │ │ │ │ │ ├── edited_file_events_grouped_by_kind-claude-sonnet-4.5.spec.snap
│ │ │ │ │ │ │ ├── edited_file_events_grouped_by_kind.spec.snap
│ │ │ │ │ │ │ ├── omit_base_agent_instructions-claude-sonnet-4.5.spec.snap
│ │ │ │ │ │ │ ├── omit_base_agent_instructions.spec.snap
│ │ │ │ │ │ │ ├── one_attachment-claude-sonnet-4.5.spec.snap
│ │ │ │ │ │ │ ├── one_attachment.spec.snap
│ │ │ │ │ │ │ ├── simple_case-claude-sonnet-4.5.spec.snap
│ │ │ │ │ │ │ ├── simple_case.spec.snap
│ │ │ │ │ │ │ ├── tool_use-claude-sonnet-4.5.spec.snap
│ │ │ │ │ │ │ └── tool_use.spec.snap
│ │ │ │ │ │ ├── agentPrompts-default/
│ │ │ │ │ │ │ ├── agentPrompts-all_non_edit_tools-default.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-all_tools-default.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-cache_BPs-default.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-cache_BPs_multi_round-default.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-custom_instructions_not_in_system_message-default.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-edited_file_events_grouped_by_kind-default.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-omit_base_agent_instructions-default.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-one_attachment-default.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-simple_case-default.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-tool_use-default.spec.snap
│ │ │ │ │ │ │ ├── all_non_edit_tools-default.spec.snap
│ │ │ │ │ │ │ ├── all_non_edit_tools.spec.snap
│ │ │ │ │ │ │ ├── all_tools-default.spec.snap
│ │ │ │ │ │ │ ├── all_tools.spec.snap
│ │ │ │ │ │ │ ├── cache_BPs-default.spec.snap
│ │ │ │ │ │ │ ├── cache_BPs.spec.snap
│ │ │ │ │ │ │ ├── cache_BPs_multi_round-default.spec.snap
│ │ │ │ │ │ │ ├── cache_BPs_multi_round.spec.snap
│ │ │ │ │ │ │ ├── custom_instructions_not_in_system_message-default.spec.snap
│ │ │ │ │ │ │ ├── custom_instructions_not_in_system_message.spec.snap
│ │ │ │ │ │ │ ├── edited_file_events_grouped_by_kind-default.spec.snap
│ │ │ │ │ │ │ ├── edited_file_events_grouped_by_kind.spec.snap
│ │ │ │ │ │ │ ├── omit_base_agent_instructions-default.spec.snap
│ │ │ │ │ │ │ ├── omit_base_agent_instructions.spec.snap
│ │ │ │ │ │ │ ├── one_attachment-default.spec.snap
│ │ │ │ │ │ │ ├── one_attachment.spec.snap
│ │ │ │ │ │ │ ├── simple_case-default.spec.snap
│ │ │ │ │ │ │ ├── simple_case.spec.snap
│ │ │ │ │ │ │ ├── tool_use-default.spec.snap
│ │ │ │ │ │ │ └── tool_use.spec.snap
│ │ │ │ │ │ ├── agentPrompts-gemini-2.0-flash/
│ │ │ │ │ │ │ ├── agentPrompts-all_non_edit_tools-gemini-2.0-flash.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-all_tools-gemini-2.0-flash.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-cache_BPs-gemini-2.0-flash.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-cache_BPs_multi_round-gemini-2.0-flash.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-custom_instructions_not_in_system_message-gemini-2.0-flash.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-edited_file_events_grouped_by_kind-gemini-2.0-flash.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-omit_base_agent_instructions-gemini-2.0-flash.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-one_attachment-gemini-2.0-flash.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-simple_case-gemini-2.0-flash.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-tool_use-gemini-2.0-flash.spec.snap
│ │ │ │ │ │ │ ├── all_non_edit_tools-gemini-2.0-flash.spec.snap
│ │ │ │ │ │ │ ├── all_non_edit_tools.spec.snap
│ │ │ │ │ │ │ ├── all_tools-gemini-2.0-flash.spec.snap
│ │ │ │ │ │ │ ├── all_tools.spec.snap
│ │ │ │ │ │ │ ├── cache_BPs-gemini-2.0-flash.spec.snap
│ │ │ │ │ │ │ ├── cache_BPs.spec.snap
│ │ │ │ │ │ │ ├── cache_BPs_multi_round-gemini-2.0-flash.spec.snap
│ │ │ │ │ │ │ ├── cache_BPs_multi_round.spec.snap
│ │ │ │ │ │ │ ├── custom_instructions_not_in_system_message-gemini-2.0-flash.spec.snap
│ │ │ │ │ │ │ ├── custom_instructions_not_in_system_message.spec.snap
│ │ │ │ │ │ │ ├── edited_file_events_grouped_by_kind-gemini-2.0-flash.spec.snap
│ │ │ │ │ │ │ ├── edited_file_events_grouped_by_kind.spec.snap
│ │ │ │ │ │ │ ├── omit_base_agent_instructions-gemini-2.0-flash.spec.snap
│ │ │ │ │ │ │ ├── omit_base_agent_instructions.spec.snap
│ │ │ │ │ │ │ ├── one_attachment-gemini-2.0-flash.spec.snap
│ │ │ │ │ │ │ ├── one_attachment.spec.snap
│ │ │ │ │ │ │ ├── simple_case-gemini-2.0-flash.spec.snap
│ │ │ │ │ │ │ ├── simple_case.spec.snap
│ │ │ │ │ │ │ ├── tool_use-gemini-2.0-flash.spec.snap
│ │ │ │ │ │ │ └── tool_use.spec.snap
│ │ │ │ │ │ ├── agentPrompts-gpt-4.1/
│ │ │ │ │ │ │ ├── agentPrompts-all_non_edit_tools-gpt-4.1.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-all_tools-gpt-4.1.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-cache_BPs-gpt-4.1.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-cache_BPs_multi_round-gpt-4.1.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-custom_instructions_not_in_system_message-gpt-4.1.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-edited_file_events_grouped_by_kind-gpt-4.1.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-omit_base_agent_instructions-gpt-4.1.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-one_attachment-gpt-4.1.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-simple_case-gpt-4.1.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-tool_use-gpt-4.1.spec.snap
│ │ │ │ │ │ │ ├── all_non_edit_tools-gpt-4.1.spec.snap
│ │ │ │ │ │ │ ├── all_non_edit_tools.spec.snap
│ │ │ │ │ │ │ ├── all_tools-gpt-4.1.spec.snap
│ │ │ │ │ │ │ ├── all_tools.spec.snap
│ │ │ │ │ │ │ ├── cache_BPs-gpt-4.1.spec.snap
│ │ │ │ │ │ │ ├── cache_BPs.spec.snap
│ │ │ │ │ │ │ ├── cache_BPs_multi_round-gpt-4.1.spec.snap
│ │ │ │ │ │ │ ├── cache_BPs_multi_round.spec.snap
│ │ │ │ │ │ │ ├── custom_instructions_not_in_system_message-gpt-4.1.spec.snap
│ │ │ │ │ │ │ ├── custom_instructions_not_in_system_message.spec.snap
│ │ │ │ │ │ │ ├── edited_file_events_grouped_by_kind-gpt-4.1.spec.snap
│ │ │ │ │ │ │ ├── edited_file_events_grouped_by_kind.spec.snap
│ │ │ │ │ │ │ ├── omit_base_agent_instructions-gpt-4.1.spec.snap
│ │ │ │ │ │ │ ├── omit_base_agent_instructions.spec.snap
│ │ │ │ │ │ │ ├── one_attachment-gpt-4.1.spec.snap
│ │ │ │ │ │ │ ├── one_attachment.spec.snap
│ │ │ │ │ │ │ ├── simple_case-gpt-4.1.spec.snap
│ │ │ │ │ │ │ ├── simple_case.spec.snap
│ │ │ │ │ │ │ ├── tool_use-gpt-4.1.spec.snap
│ │ │ │ │ │ │ └── tool_use.spec.snap
│ │ │ │ │ │ ├── agentPrompts-gpt-5/
│ │ │ │ │ │ │ ├── agentPrompts-all_non_edit_tools-gpt-5.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-all_tools-gpt-5.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-cache_BPs-gpt-5.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-cache_BPs_multi_round-gpt-5.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-custom_instructions_not_in_system_message-gpt-5.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-edited_file_events_grouped_by_kind-gpt-5.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-omit_base_agent_instructions-gpt-5.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-one_attachment-gpt-5.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-simple_case-gpt-5.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-tool_use-gpt-5.spec.snap
│ │ │ │ │ │ │ ├── all_non_edit_tools-gpt-5.spec.snap
│ │ │ │ │ │ │ ├── all_non_edit_tools.spec.snap
│ │ │ │ │ │ │ ├── all_tools-gpt-5.spec.snap
│ │ │ │ │ │ │ ├── all_tools.spec.snap
│ │ │ │ │ │ │ ├── cache_BPs-gpt-5.spec.snap
│ │ │ │ │ │ │ ├── cache_BPs.spec.snap
│ │ │ │ │ │ │ ├── cache_BPs_multi_round-gpt-5.spec.snap
│ │ │ │ │ │ │ ├── cache_BPs_multi_round.spec.snap
│ │ │ │ │ │ │ ├── custom_instructions_not_in_system_message-gpt-5.spec.snap
│ │ │ │ │ │ │ ├── custom_instructions_not_in_system_message.spec.snap
│ │ │ │ │ │ │ ├── edited_file_events_grouped_by_kind-gpt-5.spec.snap
│ │ │ │ │ │ │ ├── edited_file_events_grouped_by_kind.spec.snap
│ │ │ │ │ │ │ ├── omit_base_agent_instructions-gpt-5.spec.snap
│ │ │ │ │ │ │ ├── omit_base_agent_instructions.spec.snap
│ │ │ │ │ │ │ ├── one_attachment-gpt-5.spec.snap
│ │ │ │ │ │ │ ├── one_attachment.spec.snap
│ │ │ │ │ │ │ ├── simple_case-gpt-5.spec.snap
│ │ │ │ │ │ │ ├── simple_case.spec.snap
│ │ │ │ │ │ │ ├── tool_use-gpt-5.spec.snap
│ │ │ │ │ │ │ └── tool_use.spec.snap
│ │ │ │ │ │ ├── agentPrompts-gpt-5-codex/
│ │ │ │ │ │ │ ├── agentPrompts-all_non_edit_tools-gpt-5-codex.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-all_tools-gpt-5-codex.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-cache_BPs-gpt-5-codex.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-cache_BPs_multi_round-gpt-5-codex.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-custom_instructions_not_in_system_message-gpt-5-codex.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-edited_file_events_grouped_by_kind-gpt-5-codex.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-omit_base_agent_instructions-gpt-5-codex.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-one_attachment-gpt-5-codex.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-simple_case-gpt-5-codex.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-tool_use-gpt-5-codex.spec.snap
│ │ │ │ │ │ │ ├── all_non_edit_tools-gpt-5-codex.spec.snap
│ │ │ │ │ │ │ ├── all_non_edit_tools.spec.snap
│ │ │ │ │ │ │ ├── all_tools-gpt-5-codex.spec.snap
│ │ │ │ │ │ │ ├── all_tools.spec.snap
│ │ │ │ │ │ │ ├── cache_BPs-gpt-5-codex.spec.snap
│ │ │ │ │ │ │ ├── cache_BPs.spec.snap
│ │ │ │ │ │ │ ├── cache_BPs_multi_round-gpt-5-codex.spec.snap
│ │ │ │ │ │ │ ├── cache_BPs_multi_round.spec.snap
│ │ │ │ │ │ │ ├── custom_instructions_not_in_system_message-gpt-5-codex.spec.snap
│ │ │ │ │ │ │ ├── custom_instructions_not_in_system_message.spec.snap
│ │ │ │ │ │ │ ├── edited_file_events_grouped_by_kind-gpt-5-codex.spec.snap
│ │ │ │ │ │ │ ├── edited_file_events_grouped_by_kind.spec.snap
│ │ │ │ │ │ │ ├── omit_base_agent_instructions-gpt-5-codex.spec.snap
│ │ │ │ │ │ │ ├── omit_base_agent_instructions.spec.snap
│ │ │ │ │ │ │ ├── one_attachment-gpt-5-codex.spec.snap
│ │ │ │ │ │ │ ├── one_attachment.spec.snap
│ │ │ │ │ │ │ ├── simple_case-gpt-5-codex.spec.snap
│ │ │ │ │ │ │ ├── simple_case.spec.snap
│ │ │ │ │ │ │ ├── tool_use-gpt-5-codex.spec.snap
│ │ │ │ │ │ │ └── tool_use.spec.snap
│ │ │ │ │ │ ├── agentPrompts-gpt-5-mini/
│ │ │ │ │ │ │ ├── agentPrompts-all_non_edit_tools-gpt-5-mini.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-all_tools-gpt-5-mini.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-cache_BPs-gpt-5-mini.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-cache_BPs_multi_round-gpt-5-mini.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-custom_instructions_not_in_system_message-gpt-5-mini.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-edited_file_events_grouped_by_kind-gpt-5-mini.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-omit_base_agent_instructions-gpt-5-mini.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-one_attachment-gpt-5-mini.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-simple_case-gpt-5-mini.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-tool_use-gpt-5-mini.spec.snap
│ │ │ │ │ │ │ ├── all_non_edit_tools-gpt-5-mini.spec.snap
│ │ │ │ │ │ │ ├── all_non_edit_tools.spec.snap
│ │ │ │ │ │ │ ├── all_tools-gpt-5-mini.spec.snap
│ │ │ │ │ │ │ ├── all_tools.spec.snap
│ │ │ │ │ │ │ ├── cache_BPs-gpt-5-mini.spec.snap
│ │ │ │ │ │ │ ├── cache_BPs.spec.snap
│ │ │ │ │ │ │ ├── cache_BPs_multi_round-gpt-5-mini.spec.snap
│ │ │ │ │ │ │ ├── cache_BPs_multi_round.spec.snap
│ │ │ │ │ │ │ ├── custom_instructions_not_in_system_message-gpt-5-mini.spec.snap
│ │ │ │ │ │ │ ├── custom_instructions_not_in_system_message.spec.snap
│ │ │ │ │ │ │ ├── edited_file_events_grouped_by_kind-gpt-5-mini.spec.snap
│ │ │ │ │ │ │ ├── edited_file_events_grouped_by_kind.spec.snap
│ │ │ │ │ │ │ ├── omit_base_agent_instructions-gpt-5-mini.spec.snap
│ │ │ │ │ │ │ ├── omit_base_agent_instructions.spec.snap
│ │ │ │ │ │ │ ├── one_attachment-gpt-5-mini.spec.snap
│ │ │ │ │ │ │ ├── one_attachment.spec.snap
│ │ │ │ │ │ │ ├── simple_case-gpt-5-mini.spec.snap
│ │ │ │ │ │ │ ├── simple_case.spec.snap
│ │ │ │ │ │ │ ├── tool_use-gpt-5-mini.spec.snap
│ │ │ │ │ │ │ └── tool_use.spec.snap
│ │ │ │ │ │ ├── agentPrompts-gpt-5.1/
│ │ │ │ │ │ │ ├── agentPrompts-all_non_edit_tools-gpt-5.1.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-all_tools-gpt-5.1.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-cache_BPs-gpt-5.1.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-cache_BPs_multi_round-gpt-5.1.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-custom_instructions_not_in_system_message-gpt-5.1.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-edited_file_events_grouped_by_kind-gpt-5.1.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-omit_base_agent_instructions-gpt-5.1.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-one_attachment-gpt-5.1.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-simple_case-gpt-5.1.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-tool_use-gpt-5.1.spec.snap
│ │ │ │ │ │ │ ├── all_non_edit_tools-gpt-5.1.spec.snap
│ │ │ │ │ │ │ ├── all_non_edit_tools.spec.snap
│ │ │ │ │ │ │ ├── all_tools-gpt-5.1.spec.snap
│ │ │ │ │ │ │ ├── all_tools.spec.snap
│ │ │ │ │ │ │ ├── cache_BPs-gpt-5.1.spec.snap
│ │ │ │ │ │ │ ├── cache_BPs.spec.snap
│ │ │ │ │ │ │ ├── cache_BPs_multi_round-gpt-5.1.spec.snap
│ │ │ │ │ │ │ ├── cache_BPs_multi_round.spec.snap
│ │ │ │ │ │ │ ├── custom_instructions_not_in_system_message-gpt-5.1.spec.snap
│ │ │ │ │ │ │ ├── custom_instructions_not_in_system_message.spec.snap
│ │ │ │ │ │ │ ├── edited_file_events_grouped_by_kind-gpt-5.1.spec.snap
│ │ │ │ │ │ │ ├── edited_file_events_grouped_by_kind.spec.snap
│ │ │ │ │ │ │ ├── omit_base_agent_instructions-gpt-5.1.spec.snap
│ │ │ │ │ │ │ ├── omit_base_agent_instructions.spec.snap
│ │ │ │ │ │ │ ├── one_attachment-gpt-5.1.spec.snap
│ │ │ │ │ │ │ ├── one_attachment.spec.snap
│ │ │ │ │ │ │ ├── simple_case-gpt-5.1.spec.snap
│ │ │ │ │ │ │ ├── simple_case.spec.snap
│ │ │ │ │ │ │ ├── tool_use-gpt-5.1.spec.snap
│ │ │ │ │ │ │ └── tool_use.spec.snap
│ │ │ │ │ │ ├── agentPrompts-gpt-5.1-codex/
│ │ │ │ │ │ │ ├── agentPrompts-all_non_edit_tools-gpt-5.1-codex.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-all_tools-gpt-5.1-codex.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-cache_BPs-gpt-5.1-codex.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-cache_BPs_multi_round-gpt-5.1-codex.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-custom_instructions_not_in_system_message-gpt-5.1-codex.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-edited_file_events_grouped_by_kind-gpt-5.1-codex.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-omit_base_agent_instructions-gpt-5.1-codex.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-one_attachment-gpt-5.1-codex.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-simple_case-gpt-5.1-codex.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-tool_use-gpt-5.1-codex.spec.snap
│ │ │ │ │ │ │ ├── all_non_edit_tools-gpt-5.1-codex.spec.snap
│ │ │ │ │ │ │ ├── all_non_edit_tools.spec.snap
│ │ │ │ │ │ │ ├── all_tools-gpt-5.1-codex.spec.snap
│ │ │ │ │ │ │ ├── all_tools.spec.snap
│ │ │ │ │ │ │ ├── cache_BPs-gpt-5.1-codex.spec.snap
│ │ │ │ │ │ │ ├── cache_BPs.spec.snap
│ │ │ │ │ │ │ ├── cache_BPs_multi_round-gpt-5.1-codex.spec.snap
│ │ │ │ │ │ │ ├── cache_BPs_multi_round.spec.snap
│ │ │ │ │ │ │ ├── custom_instructions_not_in_system_message-gpt-5.1-codex.spec.snap
│ │ │ │ │ │ │ ├── custom_instructions_not_in_system_message.spec.snap
│ │ │ │ │ │ │ ├── edited_file_events_grouped_by_kind-gpt-5.1-codex.spec.snap
│ │ │ │ │ │ │ ├── edited_file_events_grouped_by_kind.spec.snap
│ │ │ │ │ │ │ ├── omit_base_agent_instructions-gpt-5.1-codex.spec.snap
│ │ │ │ │ │ │ ├── omit_base_agent_instructions.spec.snap
│ │ │ │ │ │ │ ├── one_attachment-gpt-5.1-codex.spec.snap
│ │ │ │ │ │ │ ├── one_attachment.spec.snap
│ │ │ │ │ │ │ ├── simple_case-gpt-5.1-codex.spec.snap
│ │ │ │ │ │ │ ├── simple_case.spec.snap
│ │ │ │ │ │ │ ├── tool_use-gpt-5.1-codex.spec.snap
│ │ │ │ │ │ │ └── tool_use.spec.snap
│ │ │ │ │ │ ├── agentPrompts-gpt-5.1-codex-mini/
│ │ │ │ │ │ │ ├── agentPrompts-all_non_edit_tools-gpt-5.1-codex-mini.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-all_tools-gpt-5.1-codex-mini.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-cache_BPs-gpt-5.1-codex-mini.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-cache_BPs_multi_round-gpt-5.1-codex-mini.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-custom_instructions_not_in_system_message-gpt-5.1-codex-mini.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-edited_file_events_grouped_by_kind-gpt-5.1-codex-mini.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-omit_base_agent_instructions-gpt-5.1-codex-mini.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-one_attachment-gpt-5.1-codex-mini.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-simple_case-gpt-5.1-codex-mini.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-tool_use-gpt-5.1-codex-mini.spec.snap
│ │ │ │ │ │ │ ├── all_non_edit_tools-gpt-5.1-codex-mini.spec.snap
│ │ │ │ │ │ │ ├── all_non_edit_tools.spec.snap
│ │ │ │ │ │ │ ├── all_tools-gpt-5.1-codex-mini.spec.snap
│ │ │ │ │ │ │ ├── all_tools.spec.snap
│ │ │ │ │ │ │ ├── cache_BPs-gpt-5.1-codex-mini.spec.snap
│ │ │ │ │ │ │ ├── cache_BPs.spec.snap
│ │ │ │ │ │ │ ├── cache_BPs_multi_round-gpt-5.1-codex-mini.spec.snap
│ │ │ │ │ │ │ ├── cache_BPs_multi_round.spec.snap
│ │ │ │ │ │ │ ├── custom_instructions_not_in_system_message-gpt-5.1-codex-mini.spec.snap
│ │ │ │ │ │ │ ├── custom_instructions_not_in_system_message.spec.snap
│ │ │ │ │ │ │ ├── edited_file_events_grouped_by_kind-gpt-5.1-codex-mini.spec.snap
│ │ │ │ │ │ │ ├── edited_file_events_grouped_by_kind.spec.snap
│ │ │ │ │ │ │ ├── omit_base_agent_instructions-gpt-5.1-codex-mini.spec.snap
│ │ │ │ │ │ │ ├── omit_base_agent_instructions.spec.snap
│ │ │ │ │ │ │ ├── one_attachment-gpt-5.1-codex-mini.spec.snap
│ │ │ │ │ │ │ ├── one_attachment.spec.snap
│ │ │ │ │ │ │ ├── simple_case-gpt-5.1-codex-mini.spec.snap
│ │ │ │ │ │ │ ├── simple_case.spec.snap
│ │ │ │ │ │ │ ├── tool_use-gpt-5.1-codex-mini.spec.snap
│ │ │ │ │ │ │ └── tool_use.spec.snap
│ │ │ │ │ │ ├── agentPrompts-grok-code-fast-1/
│ │ │ │ │ │ │ ├── agentPrompts-all_non_edit_tools-grok-code-fast-1.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-all_tools-grok-code-fast-1.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-cache_BPs-grok-code-fast-1.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-cache_BPs_multi_round-grok-code-fast-1.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-custom_instructions_not_in_system_message-grok-code-fast-1.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-edited_file_events_grouped_by_kind-grok-code-fast-1.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-omit_base_agent_instructions-grok-code-fast-1.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-one_attachment-grok-code-fast-1.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-simple_case-grok-code-fast-1.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-tool_use-grok-code-fast-1.spec.snap
│ │ │ │ │ │ │ ├── all_non_edit_tools-grok-code-fast-1.spec.snap
│ │ │ │ │ │ │ ├── all_non_edit_tools.spec.snap
│ │ │ │ │ │ │ ├── all_tools-grok-code-fast-1.spec.snap
│ │ │ │ │ │ │ ├── all_tools.spec.snap
│ │ │ │ │ │ │ ├── cache_BPs-grok-code-fast-1.spec.snap
│ │ │ │ │ │ │ ├── cache_BPs.spec.snap
│ │ │ │ │ │ │ ├── cache_BPs_multi_round-grok-code-fast-1.spec.snap
│ │ │ │ │ │ │ ├── cache_BPs_multi_round.spec.snap
│ │ │ │ │ │ │ ├── custom_instructions_not_in_system_message-grok-code-fast-1.spec.snap
│ │ │ │ │ │ │ ├── custom_instructions_not_in_system_message.spec.snap
│ │ │ │ │ │ │ ├── edited_file_events_grouped_by_kind-grok-code-fast-1.spec.snap
│ │ │ │ │ │ │ ├── edited_file_events_grouped_by_kind.spec.snap
│ │ │ │ │ │ │ ├── omit_base_agent_instructions-grok-code-fast-1.spec.snap
│ │ │ │ │ │ │ ├── omit_base_agent_instructions.spec.snap
│ │ │ │ │ │ │ ├── one_attachment-grok-code-fast-1.spec.snap
│ │ │ │ │ │ │ ├── one_attachment.spec.snap
│ │ │ │ │ │ │ ├── simple_case-grok-code-fast-1.spec.snap
│ │ │ │ │ │ │ ├── simple_case.spec.snap
│ │ │ │ │ │ │ ├── tool_use-grok-code-fast-1.spec.snap
│ │ │ │ │ │ │ └── tool_use.spec.snap
│ │ │ │ │ │ ├── arctic-fox/
│ │ │ │ │ │ │ ├── agentPrompts-all_non_edit_tools-arctic-fox.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-all_tools-arctic-fox.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-cache_BPs-arctic-fox.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-cache_BPs_multi_round-arctic-fox.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-custom_instructions_not_in_system_message-arctic-fox.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-edited_file_events_grouped_by_kind-arctic-fox.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-omit_base_agent_instructions-arctic-fox.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-one_attachment-arctic-fox.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-simple_case-arctic-fox.spec.snap
│ │ │ │ │ │ │ └── agentPrompts-tool_use-arctic-fox.spec.snap
│ │ │ │ │ │ ├── claude-opus-4.5/
│ │ │ │ │ │ │ ├── agentPrompts-all_non_edit_tools-claude-opus-4.5.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-all_tools-claude-opus-4.5.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-cache_BPs-claude-opus-4.5.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-cache_BPs_multi_round-claude-opus-4.5.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-custom_instructions_not_in_system_message-claude-opus-4.5.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-edited_file_events_grouped_by_kind-claude-opus-4.5.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-omit_base_agent_instructions-claude-opus-4.5.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-one_attachment-claude-opus-4.5.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-simple_case-claude-opus-4.5.spec.snap
│ │ │ │ │ │ │ └── agentPrompts-tool_use-claude-opus-4.5.spec.snap
│ │ │ │ │ │ ├── claude-sonnet-4.5/
│ │ │ │ │ │ │ ├── agentPrompts-all_non_edit_tools-claude-sonnet-4.5.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-all_tools-claude-sonnet-4.5.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-cache_BPs-claude-sonnet-4.5.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-cache_BPs_multi_round-claude-sonnet-4.5.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-custom_instructions_not_in_system_message-claude-sonnet-4.5.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-edited_file_events_grouped_by_kind-claude-sonnet-4.5.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-omit_base_agent_instructions-claude-sonnet-4.5.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-one_attachment-claude-sonnet-4.5.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-simple_case-claude-sonnet-4.5.spec.snap
│ │ │ │ │ │ │ └── agentPrompts-tool_use-claude-sonnet-4.5.spec.snap
│ │ │ │ │ │ ├── default/
│ │ │ │ │ │ │ ├── agentPrompts-all_non_edit_tools-default.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-all_tools-default.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-cache_BPs-default.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-cache_BPs_multi_round-default.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-custom_instructions_not_in_system_message-default.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-edited_file_events_grouped_by_kind-default.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-omit_base_agent_instructions-default.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-one_attachment-default.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-simple_case-default.spec.snap
│ │ │ │ │ │ │ └── agentPrompts-tool_use-default.spec.snap
│ │ │ │ │ │ ├── gemini-2.0-flash/
│ │ │ │ │ │ │ ├── agentPrompts-all_non_edit_tools-gemini-2.0-flash.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-all_tools-gemini-2.0-flash.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-cache_BPs-gemini-2.0-flash.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-cache_BPs_multi_round-gemini-2.0-flash.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-custom_instructions_not_in_system_message-gemini-2.0-flash.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-edited_file_events_grouped_by_kind-gemini-2.0-flash.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-omit_base_agent_instructions-gemini-2.0-flash.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-one_attachment-gemini-2.0-flash.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-simple_case-gemini-2.0-flash.spec.snap
│ │ │ │ │ │ │ └── agentPrompts-tool_use-gemini-2.0-flash.spec.snap
│ │ │ │ │ │ ├── gpt-4.1/
│ │ │ │ │ │ │ ├── agentPrompts-all_non_edit_tools-gpt-4.1.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-all_tools-gpt-4.1.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-cache_BPs-gpt-4.1.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-cache_BPs_multi_round-gpt-4.1.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-custom_instructions_not_in_system_message-gpt-4.1.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-edited_file_events_grouped_by_kind-gpt-4.1.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-omit_base_agent_instructions-gpt-4.1.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-one_attachment-gpt-4.1.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-simple_case-gpt-4.1.spec.snap
│ │ │ │ │ │ │ └── agentPrompts-tool_use-gpt-4.1.spec.snap
│ │ │ │ │ │ ├── gpt-5/
│ │ │ │ │ │ │ ├── agentPrompts-all_non_edit_tools-gpt-5.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-all_tools-gpt-5.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-cache_BPs-gpt-5.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-cache_BPs_multi_round-gpt-5.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-custom_instructions_not_in_system_message-gpt-5.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-edited_file_events_grouped_by_kind-gpt-5.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-omit_base_agent_instructions-gpt-5.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-one_attachment-gpt-5.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-simple_case-gpt-5.spec.snap
│ │ │ │ │ │ │ └── agentPrompts-tool_use-gpt-5.spec.snap
│ │ │ │ │ │ ├── gpt-5-codex/
│ │ │ │ │ │ │ ├── agentPrompts-all_non_edit_tools-gpt-5-codex.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-all_tools-gpt-5-codex.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-cache_BPs-gpt-5-codex.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-cache_BPs_multi_round-gpt-5-codex.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-custom_instructions_not_in_system_message-gpt-5-codex.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-edited_file_events_grouped_by_kind-gpt-5-codex.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-omit_base_agent_instructions-gpt-5-codex.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-one_attachment-gpt-5-codex.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-simple_case-gpt-5-codex.spec.snap
│ │ │ │ │ │ │ └── agentPrompts-tool_use-gpt-5-codex.spec.snap
│ │ │ │ │ │ ├── gpt-5-mini/
│ │ │ │ │ │ │ ├── agentPrompts-all_non_edit_tools-gpt-5-mini.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-all_tools-gpt-5-mini.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-cache_BPs-gpt-5-mini.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-cache_BPs_multi_round-gpt-5-mini.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-custom_instructions_not_in_system_message-gpt-5-mini.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-edited_file_events_grouped_by_kind-gpt-5-mini.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-omit_base_agent_instructions-gpt-5-mini.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-one_attachment-gpt-5-mini.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-simple_case-gpt-5-mini.spec.snap
│ │ │ │ │ │ │ └── agentPrompts-tool_use-gpt-5-mini.spec.snap
│ │ │ │ │ │ ├── gpt-5.1/
│ │ │ │ │ │ │ ├── agentPrompts-all_non_edit_tools-gpt-5.1.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-all_tools-gpt-5.1.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-cache_BPs-gpt-5.1.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-cache_BPs_multi_round-gpt-5.1.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-custom_instructions_not_in_system_message-gpt-5.1.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-edited_file_events_grouped_by_kind-gpt-5.1.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-omit_base_agent_instructions-gpt-5.1.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-one_attachment-gpt-5.1.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-simple_case-gpt-5.1.spec.snap
│ │ │ │ │ │ │ └── agentPrompts-tool_use-gpt-5.1.spec.snap
│ │ │ │ │ │ ├── gpt-5.1-codex/
│ │ │ │ │ │ │ ├── agentPrompts-all_non_edit_tools-gpt-5.1-codex.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-all_tools-gpt-5.1-codex.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-cache_BPs-gpt-5.1-codex.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-cache_BPs_multi_round-gpt-5.1-codex.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-custom_instructions_not_in_system_message-gpt-5.1-codex.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-edited_file_events_grouped_by_kind-gpt-5.1-codex.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-omit_base_agent_instructions-gpt-5.1-codex.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-one_attachment-gpt-5.1-codex.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-simple_case-gpt-5.1-codex.spec.snap
│ │ │ │ │ │ │ └── agentPrompts-tool_use-gpt-5.1-codex.spec.snap
│ │ │ │ │ │ ├── gpt-5.1-codex-mini/
│ │ │ │ │ │ │ ├── agentPrompts-all_non_edit_tools-gpt-5.1-codex-mini.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-all_tools-gpt-5.1-codex-mini.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-cache_BPs-gpt-5.1-codex-mini.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-cache_BPs_multi_round-gpt-5.1-codex-mini.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-custom_instructions_not_in_system_message-gpt-5.1-codex-mini.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-edited_file_events_grouped_by_kind-gpt-5.1-codex-mini.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-omit_base_agent_instructions-gpt-5.1-codex-mini.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-one_attachment-gpt-5.1-codex-mini.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-simple_case-gpt-5.1-codex-mini.spec.snap
│ │ │ │ │ │ │ └── agentPrompts-tool_use-gpt-5.1-codex-mini.spec.snap
│ │ │ │ │ │ ├── grok-code-fast-1/
│ │ │ │ │ │ │ ├── agentPrompts-all_non_edit_tools-grok-code-fast-1.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-all_tools-grok-code-fast-1.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-cache_BPs-grok-code-fast-1.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-cache_BPs_multi_round-grok-code-fast-1.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-custom_instructions_not_in_system_message-grok-code-fast-1.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-edited_file_events_grouped_by_kind-grok-code-fast-1.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-omit_base_agent_instructions-grok-code-fast-1.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-one_attachment-grok-code-fast-1.spec.snap
│ │ │ │ │ │ │ ├── agentPrompts-simple_case-grok-code-fast-1.spec.snap
│ │ │ │ │ │ │ └── agentPrompts-tool_use-grok-code-fast-1.spec.snap
│ │ │ │ │ │ ├── parseAttachments.spec.ts.snap
│ │ │ │ │ │ ├── summarization-currentTurn-Agent.spec.snap
│ │ │ │ │ │ ├── summarization-currentTurnEarlierRound-Agent.spec.snap
│ │ │ │ │ │ ├── summarization-currentTurnEarlierRound-FullSumm.spec.snap
│ │ │ │ │ │ ├── summarization-currentTurnEarlierRound-SimpleSummarizedHistory.spec.snap
│ │ │ │ │ │ ├── summarization-duringToolCalling-Agent.spec.snap
│ │ │ │ │ │ ├── summarization-duringToolCalling-FullSumm.spec.snap
│ │ │ │ │ │ ├── summarization-duringToolCalling-SimpleSummarizedHistory.spec.snap
│ │ │ │ │ │ ├── summarization-previousTurnMultiple-Agent.spec.snap
│ │ │ │ │ │ ├── summarization-previousTurnMultiple-FullSumm.spec.snap
│ │ │ │ │ │ ├── summarization-previousTurnMultiple-SimpleSummarizedHistory.spec.snap
│ │ │ │ │ │ ├── summarization-previousTurnNoRounds-Agent.spec.snap
│ │ │ │ │ │ ├── summarization-previousTurnNoRounds-FullSumm.spec.snap
│ │ │ │ │ │ └── summarization-previousTurnNoRounds-SimpleSummarizedHistory.spec.snap
│ │ │ │ │ ├── agentPrompt.spec.tsx
│ │ │ │ │ ├── agentTasksInstructions.spec.tsx
│ │ │ │ │ ├── backgroundSummarizer.spec.ts
│ │ │ │ │ ├── parseAttachments.spec.ts
│ │ │ │ │ ├── summarization.spec.tsx
│ │ │ │ │ └── terminalPrompt.spec.tsx
│ │ │ │ ├── vscModelPrompts.tsx
│ │ │ │ ├── xAIPrompts.tsx
│ │ │ │ └── zaiPrompts.tsx
│ │ │ ├── base/
│ │ │ │ ├── capabilities.tsx
│ │ │ │ ├── common.tsx
│ │ │ │ ├── copilotIdentity.tsx
│ │ │ │ ├── instructionMessage.tsx
│ │ │ │ ├── promptElement.ts
│ │ │ │ ├── promptRenderer.ts
│ │ │ │ ├── responseTranslationRules.tsx
│ │ │ │ ├── safetyRules.tsx
│ │ │ │ ├── tag.tsx
│ │ │ │ └── terminalState.tsx
│ │ │ ├── chatDiskSessionResourcesImpl.ts
│ │ │ ├── codeMapper/
│ │ │ │ ├── codeMapper.ts
│ │ │ │ ├── codeMapperPrompt.tsx
│ │ │ │ ├── codeMapperService.ts
│ │ │ │ └── patchEditGeneration.tsx
│ │ │ ├── devcontainer/
│ │ │ │ └── devContainerConfigPrompt.tsx
│ │ │ ├── feedback/
│ │ │ │ ├── currentChange.tsx
│ │ │ │ └── provideFeedback.tsx
│ │ │ ├── git/
│ │ │ │ ├── gitChanges.tsx
│ │ │ │ └── gitCommitMessagePrompt.tsx
│ │ │ ├── github/
│ │ │ │ └── pullRequestDescriptionPrompt.tsx
│ │ │ ├── inline/
│ │ │ │ ├── adjustSelection.ts
│ │ │ │ ├── diagnosticsContext.tsx
│ │ │ │ ├── diffEditGeneration.tsx
│ │ │ │ ├── fixCookbookService.ts
│ │ │ │ ├── inlineChat2Prompt.tsx
│ │ │ │ ├── inlineChatEditCodePrompt.tsx
│ │ │ │ ├── inlineChatEditMarkdownPrompt.tsx
│ │ │ │ ├── inlineChatFix3Prompt.tsx
│ │ │ │ ├── inlineChatGenerateCodePrompt.tsx
│ │ │ │ ├── inlineChatGenerateMarkdownPrompt.tsx
│ │ │ │ ├── inlineChatNotebookCommon.ts
│ │ │ │ ├── inlineChatNotebookCommonPromptElements.tsx
│ │ │ │ ├── inlineChatNotebookEditPrompt.tsx
│ │ │ │ ├── inlineChatNotebookFixPrompt.tsx
│ │ │ │ ├── inlineChatNotebookGeneratePrompt.tsx
│ │ │ │ ├── inlineChatWorkspaceSearch.tsx
│ │ │ │ ├── languageServerContextPrompt.tsx
│ │ │ │ ├── progressMessages.tsx
│ │ │ │ ├── promptingSummarizedDocument.ts
│ │ │ │ ├── pythonCookbookData.ts
│ │ │ │ ├── summarizedDocument/
│ │ │ │ │ ├── fragments.ts
│ │ │ │ │ ├── implementation.ts
│ │ │ │ │ ├── projectedText.ts
│ │ │ │ │ ├── summarizeDocument.ts
│ │ │ │ │ └── summarizeDocumentHelpers.ts
│ │ │ │ ├── test/
│ │ │ │ │ └── inlineChat2Prompt.spec.tsx
│ │ │ │ ├── utils/
│ │ │ │ │ └── streaming.ts
│ │ │ │ ├── visualization.ts
│ │ │ │ └── workingCopies.ts
│ │ │ ├── notebook/
│ │ │ │ └── commonPrompts.tsx
│ │ │ ├── panel/
│ │ │ │ ├── binaryFileHexdump.tsx
│ │ │ │ ├── chatVariables.tsx
│ │ │ │ ├── codeBlockFormattingRules.tsx
│ │ │ │ ├── codebaseAgentPrompt.tsx
│ │ │ │ ├── conversationHistory.tsx
│ │ │ │ ├── currentEditor.tsx
│ │ │ │ ├── currentSelection.tsx
│ │ │ │ ├── customInstructions.tsx
│ │ │ │ ├── definitionAtPosition.tsx
│ │ │ │ ├── editCodePrompt.tsx
│ │ │ │ ├── editCodePrompt2.tsx
│ │ │ │ ├── editorIntegrationRules.tsx
│ │ │ │ ├── explain.tsx
│ │ │ │ ├── fileVariable.tsx
│ │ │ │ ├── image.tsx
│ │ │ │ ├── newNotebook.tsx
│ │ │ │ ├── newWorkspace/
│ │ │ │ │ ├── newWorkspace.tsx
│ │ │ │ │ └── newWorkspaceContents.tsx
│ │ │ │ ├── notebookEditCodePrompt.tsx
│ │ │ │ ├── notebookInlinePrompt.tsx
│ │ │ │ ├── notebookSummaryChangePrompt.tsx
│ │ │ │ ├── notebookVariables.tsx
│ │ │ │ ├── panelChatBasePrompt.tsx
│ │ │ │ ├── panelChatFixPrompt.tsx
│ │ │ │ ├── preferences.tsx
│ │ │ │ ├── projectLabels.tsx
│ │ │ │ ├── promptCategorization.tsx
│ │ │ │ ├── promptFile.tsx
│ │ │ │ ├── referencesAtPosition.tsx
│ │ │ │ ├── safeElements.tsx
│ │ │ │ ├── search.tsx
│ │ │ │ ├── searchPanelKeywordsPrompt.tsx
│ │ │ │ ├── searchPanelPrompt.tsx
│ │ │ │ ├── startDebugging.tsx
│ │ │ │ ├── symbolAtCursor.tsx
│ │ │ │ ├── symbolDefinitions.tsx
│ │ │ │ ├── terminal.tsx
│ │ │ │ ├── terminalExplain.tsx
│ │ │ │ ├── terminalLastCommand.tsx
│ │ │ │ ├── terminalQuickFix.tsx
│ │ │ │ ├── terminalSelection.tsx
│ │ │ │ ├── test/
│ │ │ │ │ ├── __snapshots__/
│ │ │ │ │ │ └── fileVariable.spec.ts.snap
│ │ │ │ │ ├── chatVariablesHelpers.spec.ts
│ │ │ │ │ ├── fileVariable.spec.ts
│ │ │ │ │ └── toolCalling.spec.ts
│ │ │ │ ├── title.tsx
│ │ │ │ ├── toolCalling.tsx
│ │ │ │ ├── unsafeElements.tsx
│ │ │ │ ├── vscode.tsx
│ │ │ │ └── workspace/
│ │ │ │ ├── metaPrompt.tsx
│ │ │ │ ├── test/
│ │ │ │ │ └── visualFileTree.spec.ts
│ │ │ │ ├── visualFileTree.ts
│ │ │ │ ├── workspaceContext.tsx
│ │ │ │ ├── workspaceFoldersHint.tsx
│ │ │ │ └── workspaceStructure.tsx
│ │ │ ├── settingsEditor/
│ │ │ │ └── settingsEditorSuggestQueryPrompt.tsx
│ │ │ └── test/
│ │ │ ├── adjustSelection.spec.ts
│ │ │ ├── chatDiskSessionResources.spec.ts
│ │ │ ├── fixtures/
│ │ │ │ ├── 5710.selection.ts
│ │ │ │ ├── 5710.summarized.ts
│ │ │ │ ├── 5710.ts
│ │ │ │ ├── BasketService.cs
│ │ │ │ ├── BasketService.selection.cs
│ │ │ │ ├── BasketService.summarized.cs
│ │ │ │ ├── EditForm.selection.tsx
│ │ │ │ ├── EditForm.summarized.tsx
│ │ │ │ ├── EditForm.tsx
│ │ │ │ ├── bracketPairsTree.summarized.ts
│ │ │ │ ├── bracketPairsTree.ts
│ │ │ │ ├── codeEditorWidget.1.summarized.ts
│ │ │ │ ├── codeEditorWidget.2.summarized.ts
│ │ │ │ ├── codeEditorWidget.3.summarized.ts
│ │ │ │ ├── codeEditorWidget.ts
│ │ │ │ ├── codeEditorWidget.ts.1.tempo-summarized
│ │ │ │ ├── cppNoExtraSemicolons.cpp
│ │ │ │ ├── cppNoExtraSemicolons.summarized.cpp
│ │ │ │ ├── editorGroupWatermark.summarized.ts
│ │ │ │ ├── editorGroupWatermark.ts
│ │ │ │ ├── editorGroupWatermark.ts.summarized.round1
│ │ │ │ ├── editorGroupWatermark.ts.summarized.round2
│ │ │ │ ├── extHost.api.impl.selection.ts
│ │ │ │ ├── extHost.api.impl.summarized.ts
│ │ │ │ ├── extHost.api.impl.ts
│ │ │ │ ├── keybindingParser.summarized.ts
│ │ │ │ ├── keybindingParser.ts
│ │ │ │ ├── map.summarized.ts
│ │ │ │ ├── map.summarized.ts.view-port
│ │ │ │ ├── map.ts
│ │ │ │ ├── problem1.cpp
│ │ │ │ ├── problem1.summarized.cpp
│ │ │ │ ├── problem2.cpp
│ │ │ │ ├── problem2.summarized.cpp
│ │ │ │ ├── pseudoStartStopConversationCallbackTest.selection.ts
│ │ │ │ ├── pseudoStartStopConversationCallbackTest.summarized.ts
│ │ │ │ ├── pseudoStartStopConversationCallbackTest.ts
│ │ │ │ ├── pullRequestModel.selection.ts
│ │ │ │ ├── pullRequestModel.summarized.ts
│ │ │ │ ├── pullRequestModel.ts
│ │ │ │ ├── simpleClass.summarized.tsx
│ │ │ │ ├── simpleClass.tsx
│ │ │ │ ├── strings.test-example.2.summarized.ts
│ │ │ │ ├── strings.test-example.3.summarized.ts
│ │ │ │ ├── strings.test-example.summarized.ts
│ │ │ │ ├── strings.test-example.summarized.ts.round2
│ │ │ │ ├── strings.test-example.ts
│ │ │ │ ├── strings.test-example.ts.summarized.round1
│ │ │ │ ├── strings.test-example.ts.summarized.round2
│ │ │ │ ├── tempo-actions.html
│ │ │ │ ├── tempo-actions.html.3.tempo-summarized
│ │ │ │ ├── tempo-actions.ts
│ │ │ │ ├── tempo-actions.ts.2.tempo-summarized
│ │ │ │ ├── tempo-actions.ts.3.tempo-summarized
│ │ │ │ ├── tempo-chatActions.ts
│ │ │ │ ├── tempo-chatActions.ts.2.tempo-summarized
│ │ │ │ ├── tempo-chatContextActions.ts
│ │ │ │ ├── tempo-chatContextActions.ts.2.tempo-summarized
│ │ │ │ ├── view.css
│ │ │ │ ├── view.summarized.css
│ │ │ │ ├── vscode.proposed.chatParticipantAdditions.d.selection.ts
│ │ │ │ ├── vscode.proposed.chatParticipantAdditions.d.summarized.ts
│ │ │ │ ├── vscode.proposed.chatParticipantAdditions.d.ts
│ │ │ │ ├── webview-index.selection.ts
│ │ │ │ ├── webview-index.summarized.ts
│ │ │ │ ├── webview-index.ts
│ │ │ │ ├── workbench-dev.html
│ │ │ │ ├── workbench-dev.selection.html
│ │ │ │ └── workbench-dev.summarized.html
│ │ │ ├── projectedText.spec.ts
│ │ │ ├── summarizeDocument.spec.ts
│ │ │ ├── summarizeDocumentPlayground.ts
│ │ │ ├── utils.ts
│ │ │ └── workingCopies.spec.ts
│ │ ├── renameSuggestions/
│ │ │ ├── common/
│ │ │ │ └── namingConvention.ts
│ │ │ ├── node/
│ │ │ │ ├── renameSuggestionsPrompt.tsx
│ │ │ │ └── renameSuggestionsProvider.ts
│ │ │ └── test/
│ │ │ ├── common/
│ │ │ │ └── namingConvention.spec.ts
│ │ │ └── node/
│ │ │ └── renameSuggestionsProvider.spec.tsx
│ │ ├── replay/
│ │ │ ├── common/
│ │ │ │ ├── chatReplayResponses.ts
│ │ │ │ └── chatReplayTypes.ts
│ │ │ ├── node/
│ │ │ │ ├── chatReplayExport.ts
│ │ │ │ ├── replayParser.ts
│ │ │ │ ├── replayParsing.spec.ts
│ │ │ │ └── spec.chatreplay.json
│ │ │ └── vscode-node/
│ │ │ ├── chatReplayContrib.ts
│ │ │ ├── chatReplayNotebookSerializer.ts
│ │ │ ├── chatReplayParticipant.ts
│ │ │ ├── chatReplaySessionProvider.ts
│ │ │ ├── replayDebugSession.ts
│ │ │ └── test/
│ │ │ └── chatReplayNotebook.spec.ts
│ │ ├── review/
│ │ │ └── node/
│ │ │ ├── doReview.ts
│ │ │ ├── githubPullRequestReviewerCommentsProvider.ts
│ │ │ ├── githubReviewAgent.ts
│ │ │ └── test/
│ │ │ ├── doReview.spec.ts
│ │ │ ├── githubReviewAgent.spec.ts
│ │ │ └── reviewCommand.spec.ts
│ │ ├── search/
│ │ │ └── vscode-node/
│ │ │ └── commands.ts
│ │ ├── settingsSchema/
│ │ │ └── vscode-node/
│ │ │ └── settingsSchemaFeature.ts
│ │ ├── survey/
│ │ │ └── vscode-node/
│ │ │ └── surveyCommands.ts
│ │ ├── telemetry/
│ │ │ ├── common/
│ │ │ │ └── lifecycleTelemetryContrib.ts
│ │ │ └── vscode/
│ │ │ └── githubTelemetryForwardingContrib.ts
│ │ ├── test/
│ │ │ ├── common/
│ │ │ │ └── importRewriting.spec.ts
│ │ │ ├── node/
│ │ │ │ ├── configurations.spec.ts
│ │ │ │ ├── editFromDiffGeneration.spec.ts
│ │ │ │ ├── extractCodeSnippets.spec.ts
│ │ │ │ ├── fixtures/
│ │ │ │ │ ├── gitdiff/
│ │ │ │ │ │ ├── 01-basic
│ │ │ │ │ │ ├── 01-basic-add-2-lines
│ │ │ │ │ │ ├── 01-basic-add-2-lines.diff
│ │ │ │ │ │ ├── 01-basic-add-first-line
│ │ │ │ │ │ ├── 01-basic-add-first-line.diff
│ │ │ │ │ │ ├── 01-basic-add-last-line
│ │ │ │ │ │ ├── 01-basic-add-last-line-with-eol
│ │ │ │ │ │ ├── 01-basic-add-last-line-with-eol.diff
│ │ │ │ │ │ ├── 01-basic-add-last-line.diff
│ │ │ │ │ │ ├── 01-basic-add-line
│ │ │ │ │ │ ├── 01-basic-add-line.diff
│ │ │ │ │ │ ├── 01-basic-move-lines
│ │ │ │ │ │ ├── 01-basic-move-lines.diff
│ │ │ │ │ │ ├── 01-basic-remove-first-line
│ │ │ │ │ │ ├── 01-basic-remove-first-line.diff
│ │ │ │ │ │ ├── 01-basic-remove-last-line
│ │ │ │ │ │ ├── 01-basic-remove-last-line-with-eol
│ │ │ │ │ │ ├── 01-basic-remove-last-line-with-eol.diff
│ │ │ │ │ │ ├── 01-basic-remove-last-line.diff
│ │ │ │ │ │ ├── 01-basic-remove-line
│ │ │ │ │ │ ├── 01-basic-remove-line.diff
│ │ │ │ │ │ ├── 01-basic-replace-line
│ │ │ │ │ │ ├── 01-basic-replace-line.diff
│ │ │ │ │ │ ├── 02-basicWithEol
│ │ │ │ │ │ ├── 02-basicWithEol-add-line
│ │ │ │ │ │ ├── 02-basicWithEol-add-line.diff
│ │ │ │ │ │ ├── 02-basicWithEol-remove-eol
│ │ │ │ │ │ ├── 02-basicWithEol-remove-eol.diff
│ │ │ │ │ │ ├── 02-basicWithEol-remove-last-line
│ │ │ │ │ │ ├── 02-basicWithEol-remove-last-line.diff
│ │ │ │ │ │ ├── 03-large
│ │ │ │ │ │ ├── 03-large-many-changes
│ │ │ │ │ │ ├── 03-large-many-changes.diff
│ │ │ │ │ │ └── generate-diffs.js
│ │ │ │ │ ├── patch/
│ │ │ │ │ │ ├── basic/
│ │ │ │ │ │ │ ├── nested-codeblock.expected.txt
│ │ │ │ │ │ │ ├── nested-codeblock.original.txt
│ │ │ │ │ │ │ ├── nested-codeblock.patch.txt
│ │ │ │ │ │ │ ├── test1.expected.txt
│ │ │ │ │ │ │ ├── test1.original.txt
│ │ │ │ │ │ │ ├── test1.patch.txt
│ │ │ │ │ │ │ ├── two-blocks.expected.txt
│ │ │ │ │ │ │ ├── two-blocks.original.txt
│ │ │ │ │ │ │ └── two-blocks.patch.txt
│ │ │ │ │ │ ├── indentation/
│ │ │ │ │ │ │ ├── aml-10-58-not-defined-01.expected.txt
│ │ │ │ │ │ │ ├── aml-10-58-not-defined-01.original.txt
│ │ │ │ │ │ │ ├── aml-10-58-not-defined-01.patch.txt
│ │ │ │ │ │ │ ├── aml-8-110-not-defined-00.expected.txt
│ │ │ │ │ │ │ ├── aml-8-110-not-defined-00.original.txt
│ │ │ │ │ │ │ ├── aml-8-110-not-defined-00.patch.txt
│ │ │ │ │ │ │ ├── aml-8-73-no-value-for-argument-in-function-call-00.expected.txt
│ │ │ │ │ │ │ ├── aml-8-73-no-value-for-argument-in-function-call-00.original.txt
│ │ │ │ │ │ │ ├── aml-8-73-no-value-for-argument-in-function-call-00.patch.txt
│ │ │ │ │ │ │ ├── code-mapper-panel-6614-2.expected.txt
│ │ │ │ │ │ │ ├── code-mapper-panel-6614-2.original.txt
│ │ │ │ │ │ │ ├── code-mapper-panel-6614-2.patch.txt
│ │ │ │ │ │ │ ├── code-mapper-panel-6614.expected.txt
│ │ │ │ │ │ │ ├── code-mapper-panel-6614.original.txt
│ │ │ │ │ │ │ ├── code-mapper-panel-6614.patch.txt
│ │ │ │ │ │ │ ├── no-duplicate-case-with-cookbook.expected.txt
│ │ │ │ │ │ │ ├── no-duplicate-case-with-cookbook.original.txt
│ │ │ │ │ │ │ ├── no-duplicate-case-with-cookbook.patch.txt
│ │ │ │ │ │ │ ├── unecessary-parenthesis-00.expected.txt
│ │ │ │ │ │ │ ├── unecessary-parenthesis-00.original.txt
│ │ │ │ │ │ │ └── unecessary-parenthesis-00.patch.txt
│ │ │ │ │ │ └── out-20240514-153256/
│ │ │ │ │ │ ├── class-methods-use-this-with-cookbook-00.expected.txt
│ │ │ │ │ │ ├── class-methods-use-this-with-cookbook-00.original.txt
│ │ │ │ │ │ ├── class-methods-use-this-with-cookbook-00.patch.txt
│ │ │ │ │ │ ├── consistent-this-with-cookbook-00.expected.txt
│ │ │ │ │ │ ├── consistent-this-with-cookbook-00.original.txt
│ │ │ │ │ │ ├── consistent-this-with-cookbook-00.patch.txt
│ │ │ │ │ │ ├── constructor-super-with-cookbook-00.expected.txt
│ │ │ │ │ │ ├── constructor-super-with-cookbook-00.original.txt
│ │ │ │ │ │ ├── constructor-super-with-cookbook-00.patch.txt
│ │ │ │ │ │ ├── max-lines-per-function-with-cookbook-00.expected.txt
│ │ │ │ │ │ ├── max-lines-per-function-with-cookbook-00.original.txt
│ │ │ │ │ │ ├── max-lines-per-function-with-cookbook-00.patch.txt
│ │ │ │ │ │ ├── no-dupe-else-if-with-cookbook-00.expected.txt
│ │ │ │ │ │ ├── no-dupe-else-if-with-cookbook-00.original.txt
│ │ │ │ │ │ ├── no-dupe-else-if-with-cookbook-00.patch.txt
│ │ │ │ │ │ ├── no-duplicate-case-with-cookbook-00.expected.txt
│ │ │ │ │ │ ├── no-duplicate-case-with-cookbook-00.original.txt
│ │ │ │ │ │ ├── no-duplicate-case-with-cookbook-00.patch.txt
│ │ │ │ │ │ ├── no-negated-condition-2-with-cookbook-00.expected.txt
│ │ │ │ │ │ ├── no-negated-condition-2-with-cookbook-00.original.txt
│ │ │ │ │ │ ├── no-negated-condition-2-with-cookbook-00.patch.txt
│ │ │ │ │ │ ├── no-negated-condition-with-cookbook-00.expected.txt
│ │ │ │ │ │ ├── no-negated-condition-with-cookbook-00.original.txt
│ │ │ │ │ │ ├── no-negated-condition-with-cookbook-00.patch.txt
│ │ │ │ │ │ ├── no-new-with-cookbook-00.expected.txt
│ │ │ │ │ │ ├── no-new-with-cookbook-00.original.txt
│ │ │ │ │ │ ├── no-new-with-cookbook-00.patch.txt
│ │ │ │ │ │ ├── no-sequences-with-cookbook-00.expected.txt
│ │ │ │ │ │ ├── no-sequences-with-cookbook-00.original.txt
│ │ │ │ │ │ ├── no-sequences-with-cookbook-00.patch.txt
│ │ │ │ │ │ ├── should-not-generate-an-error-for-variables-declared-in-outer-scopes.expected.txt
│ │ │ │ │ │ ├── should-not-generate-an-error-for-variables-declared-in-outer-scopes.original.txt
│ │ │ │ │ │ └── should-not-generate-an-error-for-variables-declared-in-outer-scopes.patch.txt
│ │ │ │ │ └── pseudodiff/
│ │ │ │ │ ├── 01-simple
│ │ │ │ │ ├── 01-simple-replace-2-lines
│ │ │ │ │ ├── 01-simple-replace-2-lines.diff
│ │ │ │ │ ├── 02-filewithtabs
│ │ │ │ │ ├── 02-filewithtabs-replace
│ │ │ │ │ ├── 02-filewithtabs-replace.diff
│ │ │ │ │ ├── 03-unusedimport
│ │ │ │ │ ├── 03-unusedimport-addone
│ │ │ │ │ ├── 03-unusedimport-addone.diff
│ │ │ │ │ ├── 04-spaces
│ │ │ │ │ ├── 04-spaces-replace
│ │ │ │ │ ├── 04-spaces-replace.diff
│ │ │ │ │ ├── 05-beginend
│ │ │ │ │ ├── 05-beginend-move
│ │ │ │ │ ├── 05-beginend-move.diff
│ │ │ │ │ ├── 06-similarline
│ │ │ │ │ ├── 06-similarline-comma
│ │ │ │ │ ├── 06-similarline-comma.diff
│ │ │ │ │ ├── 07-indent1
│ │ │ │ │ ├── 07-indent1-one
│ │ │ │ │ ├── 07-indent1-one.diff
│ │ │ │ │ ├── 07-indent1-two
│ │ │ │ │ ├── 07-indent1-two.diff
│ │ │ │ │ ├── 08-modifyunchanged
│ │ │ │ │ ├── 08-modifyunchanged-one
│ │ │ │ │ ├── 08-modifyunchanged-one.diff
│ │ │ │ │ ├── 09-indent2
│ │ │ │ │ ├── 09-indent2-one
│ │ │ │ │ ├── 09-indent2-one.diff
│ │ │ │ │ ├── 10-test
│ │ │ │ │ ├── 10-test-one
│ │ │ │ │ ├── 10-test-one.diff
│ │ │ │ │ ├── 10-test-one.messages
│ │ │ │ │ ├── 11-replaceatend
│ │ │ │ │ ├── 11-replaceatend-one
│ │ │ │ │ ├── 11-replaceatend-one.diff
│ │ │ │ │ ├── 11-replaceatend-one.messages
│ │ │ │ │ ├── 12-insertmethod
│ │ │ │ │ ├── 12-insertmethod-one
│ │ │ │ │ ├── 12-insertmethod-one.diff
│ │ │ │ │ ├── 12-insertmethod-one.messages
│ │ │ │ │ ├── 12-insertmethod-two
│ │ │ │ │ ├── 12-insertmethod-two.diff
│ │ │ │ │ ├── 12-insertmethod-two.messages
│ │ │ │ │ ├── 13-coroutine
│ │ │ │ │ ├── 13-coroutine-one
│ │ │ │ │ ├── 13-coroutine-one.diff
│ │ │ │ │ ├── 13-coroutine-one.messages
│ │ │ │ │ ├── 14-rob
│ │ │ │ │ ├── 14-rob-one
│ │ │ │ │ └── 14-rob-one.diff
│ │ │ │ ├── intent.spec.ts
│ │ │ │ ├── notebookPromptRendering.spec.ts
│ │ │ │ ├── patchEditGeneration.spec.ts
│ │ │ │ ├── pseudoStartStopConversationCallback.spec.ts
│ │ │ │ ├── services.ts
│ │ │ │ ├── streaming.spec.ts
│ │ │ │ ├── summarizedDocumentRendering.spec.tsx
│ │ │ │ ├── telemetry.spec.ts
│ │ │ │ ├── testHelpers.ts
│ │ │ │ ├── utils.fileTree.spec.ts
│ │ │ │ └── utils.spec.ts
│ │ │ └── vscode-node/
│ │ │ ├── configurations.test.ts
│ │ │ ├── endpoints.test.ts
│ │ │ ├── extension.test.ts
│ │ │ ├── sanity.sanity-test.ts
│ │ │ ├── services.ts
│ │ │ ├── session.test.ts
│ │ │ └── textDocumentManager.test.ts
│ │ ├── testing/
│ │ │ ├── common/
│ │ │ │ └── files.ts
│ │ │ ├── node/
│ │ │ │ ├── aiEvaluationService.tsx
│ │ │ │ └── setupTestsFileManager.tsx
│ │ │ └── vscode/
│ │ │ └── setupTestContributions.ts
│ │ ├── tools/
│ │ │ ├── common/
│ │ │ │ ├── agentMemoryService.ts
│ │ │ │ ├── askQuestionsTypes.ts
│ │ │ │ ├── editToolLearningService.ts
│ │ │ │ ├── editToolLearningStates.ts
│ │ │ │ ├── memoryCleanupService.ts
│ │ │ │ ├── test/
│ │ │ │ │ ├── agentMemoryService.spec.ts
│ │ │ │ │ ├── toolNames.spec.ts
│ │ │ │ │ └── toolService.spec.ts
│ │ │ │ ├── toJsonSchema.ts
│ │ │ │ ├── toolNames.ts
│ │ │ │ ├── toolSchemaNormalizer.ts
│ │ │ │ ├── toolUtils.ts
│ │ │ │ ├── toolsRegistry.ts
│ │ │ │ ├── toolsService.ts
│ │ │ │ └── virtualTools/
│ │ │ │ ├── builtInToolGroupHandler.ts
│ │ │ │ ├── preComputedToolEmbeddingsCache.ts
│ │ │ │ ├── toolEmbeddingsComputer.ts
│ │ │ │ ├── toolEmbeddingsLocalCache.ts
│ │ │ │ ├── toolGrouping.ts
│ │ │ │ ├── toolGroupingService.ts
│ │ │ │ ├── virtualTool.ts
│ │ │ │ ├── virtualToolGroupCache.ts
│ │ │ │ ├── virtualToolGrouper.ts
│ │ │ │ ├── virtualToolSummarizer.tsx
│ │ │ │ ├── virtualToolTypes.ts
│ │ │ │ └── virtualToolsConstants.ts
│ │ │ ├── node/
│ │ │ │ ├── abstractReplaceStringTool.tsx
│ │ │ │ ├── allTools.ts
│ │ │ │ ├── applyPatch/
│ │ │ │ │ ├── parseApplyPatch.ts
│ │ │ │ │ └── parser.ts
│ │ │ │ ├── applyPatchTool.tsx
│ │ │ │ ├── codebaseTool.tsx
│ │ │ │ ├── createDirectoryTool.tsx
│ │ │ │ ├── createFileTool.tsx
│ │ │ │ ├── editFileHealing.tsx
│ │ │ │ ├── editFileToolResult.tsx
│ │ │ │ ├── editFileToolUtils.tsx
│ │ │ │ ├── editNotebookTool.tsx
│ │ │ │ ├── executionSubagentTool.ts
│ │ │ │ ├── findFilesTool.tsx
│ │ │ │ ├── findTestsFilesTool.tsx
│ │ │ │ ├── findTextInFilesTool.tsx
│ │ │ │ ├── getErrorsTool.tsx
│ │ │ │ ├── getNotebookCellOutputTool.tsx
│ │ │ │ ├── getSearchViewResultsTool.tsx
│ │ │ │ ├── githubRepoTool.tsx
│ │ │ │ ├── imageToolUtils.ts
│ │ │ │ ├── insertEditTool.tsx
│ │ │ │ ├── installExtensionTool.tsx
│ │ │ │ ├── listDirTool.tsx
│ │ │ │ ├── manageTodoListTool.tsx
│ │ │ │ ├── memoryContextPrompt.tsx
│ │ │ │ ├── memoryTool.tsx
│ │ │ │ ├── multiReplaceStringTool.tsx
│ │ │ │ ├── newNotebookTool.tsx
│ │ │ │ ├── newWorkspace/
│ │ │ │ │ ├── newWorkspaceTool.tsx
│ │ │ │ │ └── projectSetupInfoTool.tsx
│ │ │ │ ├── notebookSummaryTool.tsx
│ │ │ │ ├── readFileTool.tsx
│ │ │ │ ├── readProjectStructureTool.ts
│ │ │ │ ├── replaceStringTool.tsx
│ │ │ │ ├── resolveMemoryFileUriTool.tsx
│ │ │ │ ├── runNotebookCellTool.tsx
│ │ │ │ ├── scmChangesTool.ts
│ │ │ │ ├── searchSubagentTool.ts
│ │ │ │ ├── searchWorkspaceSymbolsTool.tsx
│ │ │ │ ├── test/
│ │ │ │ │ ├── __snapshots__/
│ │ │ │ │ │ ├── findFiles.spec.tsx.snap
│ │ │ │ │ │ ├── getErrorsResult.spec.tsx.snap
│ │ │ │ │ │ ├── getErrorsTool.spec.tsx.snap
│ │ │ │ │ │ └── toolCalling.spec.tsx.snap
│ │ │ │ │ ├── applyPatch.spec.ts
│ │ │ │ │ ├── editFileToolUtils.spec.ts
│ │ │ │ │ ├── editFileToolUtilsFixtures/
│ │ │ │ │ │ ├── crlf-input.json
│ │ │ │ │ │ ├── crlf-output.json
│ │ │ │ │ │ ├── crlf-tool-call.json
│ │ │ │ │ │ ├── math-original.txt
│ │ │ │ │ │ ├── multi-sr-bug-actual.txt
│ │ │ │ │ │ └── multi-sr-bug-original.txt
│ │ │ │ │ ├── editNotebookTool.spec.tsx
│ │ │ │ │ ├── editToolLearningService.spec.ts
│ │ │ │ │ ├── executionSubagentTool.spec.ts
│ │ │ │ │ ├── findFiles.spec.tsx
│ │ │ │ │ ├── findTextInFilesResult.spec.tsx
│ │ │ │ │ ├── findTextInFilesTool.spec.tsx
│ │ │ │ │ ├── getErrorsResult.spec.tsx
│ │ │ │ │ ├── getErrorsTool.spec.tsx
│ │ │ │ │ ├── imageToolUtils.spec.ts
│ │ │ │ │ ├── memoryTool.spec.tsx
│ │ │ │ │ ├── multiReplaceStringTool.spec.tsx
│ │ │ │ │ ├── readFile.spec.tsx
│ │ │ │ │ ├── searchSubagentTool.spec.ts
│ │ │ │ │ ├── searchToolTestUtils.ts
│ │ │ │ │ ├── testFailure.spec.tsx
│ │ │ │ │ ├── testTools.ts
│ │ │ │ │ ├── testToolsService.ts
│ │ │ │ │ ├── toJsonSchema.spec.ts
│ │ │ │ │ ├── toolCalling.spec.tsx
│ │ │ │ │ ├── toolTestUtils.tsx
│ │ │ │ │ ├── toolUtils.spec.ts
│ │ │ │ │ └── viewImage.spec.tsx
│ │ │ │ ├── testFailureTool.tsx
│ │ │ │ ├── todoListContextPrompt.tsx
│ │ │ │ ├── toolReplayTool.tsx
│ │ │ │ ├── toolSearchTool.ts
│ │ │ │ ├── toolUtils.task.ts
│ │ │ │ ├── toolUtils.ts
│ │ │ │ ├── viewImageTool.tsx
│ │ │ │ ├── vscodeAPITool.ts
│ │ │ │ └── vscodeCmdTool.tsx
│ │ │ ├── test/
│ │ │ │ ├── common/
│ │ │ │ │ └── toolSchemaNormalizer.spec.ts
│ │ │ │ └── node/
│ │ │ │ ├── applyPatch/
│ │ │ │ │ ├── applyPatch.spec.tsx
│ │ │ │ │ ├── corpus/
│ │ │ │ │ │ ├── 0.patch
│ │ │ │ │ │ ├── 1.patch
│ │ │ │ │ │ ├── 10.patch
│ │ │ │ │ │ ├── 11.patch
│ │ │ │ │ │ ├── 12.patch
│ │ │ │ │ │ ├── 13.patch
│ │ │ │ │ │ ├── 14.patch
│ │ │ │ │ │ ├── 15.patch
│ │ │ │ │ │ ├── 16.patch
│ │ │ │ │ │ ├── 17.patch
│ │ │ │ │ │ ├── 18.patch
│ │ │ │ │ │ ├── 19.patch
│ │ │ │ │ │ ├── 2.patch
│ │ │ │ │ │ ├── 20.patch
│ │ │ │ │ │ ├── 21.patch
│ │ │ │ │ │ ├── 22.patch
│ │ │ │ │ │ ├── 23.patch
│ │ │ │ │ │ ├── 24.patch
│ │ │ │ │ │ ├── 25.patch
│ │ │ │ │ │ ├── 26.patch
│ │ │ │ │ │ ├── 262549-call.txt
│ │ │ │ │ │ ├── 262549-input.txt
│ │ │ │ │ │ ├── 262549-output.txt
│ │ │ │ │ │ ├── 267547-call.txt
│ │ │ │ │ │ ├── 267547-input.txt
│ │ │ │ │ │ ├── 267547-output.txt
│ │ │ │ │ │ ├── 27.patch
│ │ │ │ │ │ ├── 28.patch
│ │ │ │ │ │ ├── 29.patch
│ │ │ │ │ │ ├── 3.patch
│ │ │ │ │ │ ├── 30.patch
│ │ │ │ │ │ ├── 31.patch
│ │ │ │ │ │ ├── 32.patch
│ │ │ │ │ │ ├── 33.patch
│ │ │ │ │ │ ├── 34.patch
│ │ │ │ │ │ ├── 35.patch
│ │ │ │ │ │ ├── 36.patch
│ │ │ │ │ │ ├── 37.patch
│ │ │ │ │ │ ├── 38.patch
│ │ │ │ │ │ ├── 39.patch
│ │ │ │ │ │ ├── 4.patch
│ │ │ │ │ │ ├── 40.patch
│ │ │ │ │ │ ├── 41.patch
│ │ │ │ │ │ ├── 42.patch
│ │ │ │ │ │ ├── 43.patch
│ │ │ │ │ │ ├── 44.patch
│ │ │ │ │ │ ├── 45.patch
│ │ │ │ │ │ ├── 46.patch
│ │ │ │ │ │ ├── 47.patch
│ │ │ │ │ │ ├── 48.patch
│ │ │ │ │ │ ├── 49.patch
│ │ │ │ │ │ ├── 5.patch
│ │ │ │ │ │ ├── 6.patch
│ │ │ │ │ │ ├── 7.patch
│ │ │ │ │ │ ├── 8.patch
│ │ │ │ │ │ ├── 9.patch
│ │ │ │ │ │ ├── multipleIndentedLines-call.txt
│ │ │ │ │ │ ├── multipleIndentedLines-input.txt
│ │ │ │ │ │ ├── multipleIndentedLines-output.txt
│ │ │ │ │ │ ├── multipleSections-call.txt
│ │ │ │ │ │ ├── multipleSections-input.txt
│ │ │ │ │ │ ├── multipleSections-output.txt
│ │ │ │ │ │ ├── reindent-call.txt
│ │ │ │ │ │ └── reindent-input.txt
│ │ │ │ │ ├── fixtures/
│ │ │ │ │ │ ├── 4302.ts.txt
│ │ │ │ │ │ └── 4302.ts.txt.expected
│ │ │ │ │ └── parser.spec.ts
│ │ │ │ ├── replaceString/
│ │ │ │ │ ├── fixtures/
│ │ │ │ │ │ ├── math.js.txt
│ │ │ │ │ │ ├── math.js.txt.expected
│ │ │ │ │ │ └── settingsjson.txt
│ │ │ │ │ └── replaceStringTool.spec.tsx
│ │ │ │ └── virtualTools/
│ │ │ │ ├── testVirtualTools.ts
│ │ │ │ ├── toolEmbeddingsCache.spec.ts
│ │ │ │ ├── toolEmbeddingsLocalCache.spec.ts
│ │ │ │ ├── virtualToolGrouper.spec.ts
│ │ │ │ └── virtualToolGrouping.spec.ts
│ │ │ └── vscode-node/
│ │ │ ├── allTools.ts
│ │ │ ├── fetchWebPageTool.tsx
│ │ │ ├── switchAgentTool.ts
│ │ │ ├── test/
│ │ │ │ └── inputGlobToPattern.test.ts
│ │ │ ├── tools.ts
│ │ │ └── toolsService.ts
│ │ ├── trajectory/
│ │ │ ├── ARCHITECTURE.md
│ │ │ └── vscode-node/
│ │ │ ├── otelChatDebugLogProvider.ts
│ │ │ ├── otelSpanToChatDebugEvent.ts
│ │ │ ├── otlpFormatConversion.ts
│ │ │ ├── test/
│ │ │ │ ├── otelSpanToChatDebugEvent.spec.ts
│ │ │ │ └── otlpFormatConversion.spec.ts
│ │ │ └── trajectoryExportCommands.ts
│ │ ├── typescriptContext/
│ │ │ ├── DEVELOPMENT.md
│ │ │ ├── common/
│ │ │ │ └── serverProtocol.ts
│ │ │ ├── serverPlugin/
│ │ │ │ ├── .esbuild.ts
│ │ │ │ ├── .gitignore
│ │ │ │ ├── .npmignore
│ │ │ │ ├── fixtures/
│ │ │ │ │ ├── context/
│ │ │ │ │ │ ├── p1/
│ │ │ │ │ │ │ ├── source/
│ │ │ │ │ │ │ │ ├── f1.ts
│ │ │ │ │ │ │ │ ├── f2.ts
│ │ │ │ │ │ │ │ ├── f3.ts
│ │ │ │ │ │ │ │ └── f4.ts
│ │ │ │ │ │ │ └── tsconfig.json
│ │ │ │ │ │ ├── p10/
│ │ │ │ │ │ │ ├── source/
│ │ │ │ │ │ │ │ ├── f1.ts
│ │ │ │ │ │ │ │ ├── f2.ts
│ │ │ │ │ │ │ │ └── f3.ts
│ │ │ │ │ │ │ └── tsconfig.json
│ │ │ │ │ │ ├── p11/
│ │ │ │ │ │ │ ├── source/
│ │ │ │ │ │ │ │ ├── f1.ts
│ │ │ │ │ │ │ │ ├── f2.ts
│ │ │ │ │ │ │ │ └── f3.ts
│ │ │ │ │ │ │ └── tsconfig.json
│ │ │ │ │ │ ├── p12/
│ │ │ │ │ │ │ ├── source/
│ │ │ │ │ │ │ │ ├── f1.ts
│ │ │ │ │ │ │ │ ├── f2.ts
│ │ │ │ │ │ │ │ ├── f3.ts
│ │ │ │ │ │ │ │ ├── f4.ts
│ │ │ │ │ │ │ │ └── f5.ts
│ │ │ │ │ │ │ └── tsconfig.json
│ │ │ │ │ │ ├── p13/
│ │ │ │ │ │ │ ├── source/
│ │ │ │ │ │ │ │ ├── f1.ts
│ │ │ │ │ │ │ │ ├── f2.ts
│ │ │ │ │ │ │ │ └── f3.ts
│ │ │ │ │ │ │ └── tsconfig.json
│ │ │ │ │ │ ├── p14/
│ │ │ │ │ │ │ ├── source/
│ │ │ │ │ │ │ │ ├── f1.ts
│ │ │ │ │ │ │ │ ├── f2.ts
│ │ │ │ │ │ │ │ ├── f3.ts
│ │ │ │ │ │ │ │ ├── f4.ts
│ │ │ │ │ │ │ │ ├── f5.ts
│ │ │ │ │ │ │ │ └── f6.ts
│ │ │ │ │ │ │ └── tsconfig.json
│ │ │ │ │ │ ├── p2/
│ │ │ │ │ │ │ ├── source/
│ │ │ │ │ │ │ │ ├── f1.ts
│ │ │ │ │ │ │ │ └── f2.ts
│ │ │ │ │ │ │ └── tsconfig.json
│ │ │ │ │ │ ├── p3/
│ │ │ │ │ │ │ ├── source/
│ │ │ │ │ │ │ │ ├── f1.ts
│ │ │ │ │ │ │ │ └── f2.ts
│ │ │ │ │ │ │ └── tsconfig.json
│ │ │ │ │ │ ├── p4/
│ │ │ │ │ │ │ ├── source/
│ │ │ │ │ │ │ │ ├── f1.ts
│ │ │ │ │ │ │ │ ├── f2.ts
│ │ │ │ │ │ │ │ ├── f3.ts
│ │ │ │ │ │ │ │ ├── f4.ts
│ │ │ │ │ │ │ │ └── f5.ts
│ │ │ │ │ │ │ └── tsconfig.json
│ │ │ │ │ │ ├── p5/
│ │ │ │ │ │ │ ├── source/
│ │ │ │ │ │ │ │ ├── f1.ts
│ │ │ │ │ │ │ │ ├── f2.ts
│ │ │ │ │ │ │ │ └── f3.ts
│ │ │ │ │ │ │ └── tsconfig.json
│ │ │ │ │ │ ├── p6/
│ │ │ │ │ │ │ ├── source/
│ │ │ │ │ │ │ │ ├── f1.ts
│ │ │ │ │ │ │ │ └── f2.ts
│ │ │ │ │ │ │ └── tsconfig.json
│ │ │ │ │ │ ├── p7/
│ │ │ │ │ │ │ ├── source/
│ │ │ │ │ │ │ │ ├── f1.ts
│ │ │ │ │ │ │ │ └── f2.ts
│ │ │ │ │ │ │ └── tsconfig.json
│ │ │ │ │ │ ├── p8/
│ │ │ │ │ │ │ ├── source/
│ │ │ │ │ │ │ │ ├── f1.ts
│ │ │ │ │ │ │ │ ├── f2.ts
│ │ │ │ │ │ │ │ └── f3.ts
│ │ │ │ │ │ │ └── tsconfig.json
│ │ │ │ │ │ ├── p9/
│ │ │ │ │ │ │ ├── source/
│ │ │ │ │ │ │ │ ├── f1.ts
│ │ │ │ │ │ │ │ ├── f2.ts
│ │ │ │ │ │ │ │ ├── f3.ts
│ │ │ │ │ │ │ │ └── f4.ts
│ │ │ │ │ │ │ └── tsconfig.json
│ │ │ │ │ │ └── testbed/
│ │ │ │ │ │ ├── src/
│ │ │ │ │ │ │ ├── company.ts
│ │ │ │ │ │ │ ├── disposable.ts
│ │ │ │ │ │ │ ├── employee.ts
│ │ │ │ │ │ │ ├── entity.ts
│ │ │ │ │ │ │ ├── eventProvider.ts
│ │ │ │ │ │ │ ├── events.ts
│ │ │ │ │ │ │ ├── legalEntity.ts
│ │ │ │ │ │ │ ├── main.ts
│ │ │ │ │ │ │ └── person.ts
│ │ │ │ │ │ └── tsconfig.json
│ │ │ │ │ ├── nes/
│ │ │ │ │ │ ├── p1/
│ │ │ │ │ │ │ ├── source/
│ │ │ │ │ │ │ │ └── test.ts
│ │ │ │ │ │ │ └── tsconfig.json
│ │ │ │ │ │ └── p2/
│ │ │ │ │ │ ├── source/
│ │ │ │ │ │ │ └── test.ts
│ │ │ │ │ │ └── tsconfig.json
│ │ │ │ │ └── readme.md
│ │ │ │ ├── package.json
│ │ │ │ ├── src/
│ │ │ │ │ ├── common/
│ │ │ │ │ │ ├── api.ts
│ │ │ │ │ │ ├── baseContextProviders.ts
│ │ │ │ │ │ ├── classContextProvider.ts
│ │ │ │ │ │ ├── code.ts
│ │ │ │ │ │ ├── contextProvider.ts
│ │ │ │ │ │ ├── functionContextProvider.ts
│ │ │ │ │ │ ├── host.ts
│ │ │ │ │ │ ├── methodContextProvider.ts
│ │ │ │ │ │ ├── moduleContextProvider.ts
│ │ │ │ │ │ ├── nesRenameValidator.ts
│ │ │ │ │ │ ├── nullContextProvider.ts
│ │ │ │ │ │ ├── protocol.ts
│ │ │ │ │ │ ├── sourceFileContextProvider.ts
│ │ │ │ │ │ ├── types.ts
│ │ │ │ │ │ ├── typescript.ts
│ │ │ │ │ │ ├── typescripts.ts
│ │ │ │ │ │ └── utils.ts
│ │ │ │ │ └── node/
│ │ │ │ │ ├── create.ts
│ │ │ │ │ ├── host.ts
│ │ │ │ │ ├── main.ts
│ │ │ │ │ └── test/
│ │ │ │ │ ├── languageServerProxy.ts
│ │ │ │ │ ├── languageServices.ts
│ │ │ │ │ ├── nes.spec.ts
│ │ │ │ │ ├── simple.spec.ts
│ │ │ │ │ └── testing.ts
│ │ │ │ └── tsconfig.json
│ │ │ └── vscode-node/
│ │ │ ├── inspector.ts
│ │ │ ├── languageContextService.ts
│ │ │ ├── nesRenameService.ts
│ │ │ ├── throttledDebounce.ts
│ │ │ └── types.ts
│ │ ├── vscode.proposed.activeComment.d.ts
│ │ ├── vscode.proposed.agentSessionsWorkspace.d.ts
│ │ ├── vscode.proposed.aiRelatedInformation.d.ts
│ │ ├── vscode.proposed.aiSettingsSearch.d.ts
│ │ ├── vscode.proposed.aiTextSearchProvider.d.ts
│ │ ├── vscode.proposed.authLearnMore.d.ts
│ │ ├── vscode.proposed.chatBinaryReferenceData.d.ts
│ │ ├── vscode.proposed.chatDebug.d.ts
│ │ ├── vscode.proposed.chatHooks.d.ts
│ │ ├── vscode.proposed.chatParticipantAdditions.d.ts
│ │ ├── vscode.proposed.chatParticipantPrivate.d.ts
│ │ ├── vscode.proposed.chatPromptFiles.d.ts
│ │ ├── vscode.proposed.chatProvider.d.ts
│ │ ├── vscode.proposed.chatReadonlyPromptReference.d.ts
│ │ ├── vscode.proposed.chatReferenceBinaryData.d.ts
│ │ ├── vscode.proposed.chatReferenceDiagnostic.d.ts
│ │ ├── vscode.proposed.chatSessionsProvider.d.ts
│ │ ├── vscode.proposed.chatStatusItem.d.ts
│ │ ├── vscode.proposed.codeActionAI.d.ts
│ │ ├── vscode.proposed.commentReveal.d.ts
│ │ ├── vscode.proposed.contribChatEditorInlineGutterMenu.d.ts
│ │ ├── vscode.proposed.contribCommentThreadAdditionalMenu.d.ts
│ │ ├── vscode.proposed.contribCommentsViewThreadMenus.d.ts
│ │ ├── vscode.proposed.contribDebugCreateConfiguration.d.ts
│ │ ├── vscode.proposed.contribEditorContentMenu.d.ts
│ │ ├── vscode.proposed.contribLanguageModelToolSets.d.ts
│ │ ├── vscode.proposed.contribSourceControlInputBoxMenu.d.ts
│ │ ├── vscode.proposed.dataChannels.d.ts
│ │ ├── vscode.proposed.defaultChatParticipant.d.ts
│ │ ├── vscode.proposed.devDeviceId.d.ts
│ │ ├── vscode.proposed.documentFiltersExclusive.d.ts
│ │ ├── vscode.proposed.embeddings.d.ts
│ │ ├── vscode.proposed.environmentPower.d.ts
│ │ ├── vscode.proposed.extensionsAny.d.ts
│ │ ├── vscode.proposed.findFiles2.d.ts
│ │ ├── vscode.proposed.findTextInFiles.d.ts
│ │ ├── vscode.proposed.findTextInFiles2.d.ts
│ │ ├── vscode.proposed.inlineCompletionsAdditions.d.ts
│ │ ├── vscode.proposed.interactive.d.ts
│ │ ├── vscode.proposed.languageModelCapabilities.d.ts
│ │ ├── vscode.proposed.languageModelSystem.d.ts
│ │ ├── vscode.proposed.languageModelThinkingPart.d.ts
│ │ ├── vscode.proposed.languageModelToolResultAudience.d.ts
│ │ ├── vscode.proposed.languageModelToolSupportsModel.d.ts
│ │ ├── vscode.proposed.mappedEditsProvider.d.ts
│ │ ├── vscode.proposed.mcpServerDefinitions.d.ts
│ │ ├── vscode.proposed.newSymbolNamesProvider.d.ts
│ │ ├── vscode.proposed.readonlyMessage.d.ts
│ │ ├── vscode.proposed.resolvers.d.ts
│ │ ├── vscode.proposed.scmInputBoxValueProvider.d.ts
│ │ ├── vscode.proposed.tabInputMultiDiff.d.ts
│ │ ├── vscode.proposed.taskExecutionTerminal.d.ts
│ │ ├── vscode.proposed.taskProblemMatcherStatus.d.ts
│ │ ├── vscode.proposed.terminalDataWriteEvent.d.ts
│ │ ├── vscode.proposed.terminalExecuteCommandEvent.d.ts
│ │ ├── vscode.proposed.terminalQuickFixProvider.d.ts
│ │ ├── vscode.proposed.terminalSelection.d.ts
│ │ ├── vscode.proposed.terminalTitle.d.ts
│ │ ├── vscode.proposed.testObserver.d.ts
│ │ ├── vscode.proposed.textDocumentChangeReason.d.ts
│ │ ├── vscode.proposed.textSearchProvider.d.ts
│ │ ├── vscode.proposed.textSearchProvider2.d.ts
│ │ ├── vscode.proposed.workspaceTrust.d.ts
│ │ ├── workspaceChunkSearch/
│ │ │ ├── node/
│ │ │ │ └── workspaceChunkSearch.contribution.ts
│ │ │ └── vscode-node/
│ │ │ ├── commands.ts
│ │ │ ├── workspaceChunkSearch.contribution.ts
│ │ │ └── workspaceIndexingStatus.ts
│ │ ├── workspaceRecorder/
│ │ │ ├── common/
│ │ │ │ ├── jsonlUtil.ts
│ │ │ │ └── workspaceListenerService.ts
│ │ │ └── vscode-node/
│ │ │ ├── safeFileWriteUtils.ts
│ │ │ ├── utils.ts
│ │ │ ├── utilsObservable.ts
│ │ │ ├── workspaceListenerService.ts
│ │ │ ├── workspaceRecorder.ts
│ │ │ └── workspaceRecorderFeature.ts
│ │ ├── workspaceSemanticSearch/
│ │ │ └── node/
│ │ │ ├── combinedRank.ts
│ │ │ ├── semanticSearchTextSearchProvider.ts
│ │ │ └── test/
│ │ │ └── ranking.spec.ts
│ │ └── xtab/
│ │ ├── common/
│ │ │ ├── diffHistoryForPrompt.ts
│ │ │ ├── inlineSuggestion.ts
│ │ │ ├── lintErrors.ts
│ │ │ ├── promptCrafting.ts
│ │ │ ├── promptCraftingUtils.ts
│ │ │ ├── recentFilesForPrompt.md
│ │ │ ├── recentFilesForPrompt.ts
│ │ │ ├── similarFilesContextService.ts
│ │ │ ├── systemMessages.ts
│ │ │ ├── tags.ts
│ │ │ ├── terminalOutput.ts
│ │ │ └── xtabCurrentDocument.ts
│ │ ├── node/
│ │ │ ├── xtabCustomDiffPatchResponseHandler.ts
│ │ │ ├── xtabEndpoint.ts
│ │ │ ├── xtabNextCursorPredictor.ts
│ │ │ ├── xtabProvider.ts
│ │ │ └── xtabUtils.ts
│ │ └── test/
│ │ ├── common/
│ │ │ ├── inlineSuggestion.spec.ts
│ │ │ ├── lintErrors.spec.ts
│ │ │ ├── promptCrafting.spec.ts
│ │ │ ├── recentFilesForPrompt.snapshots.spec.ts
│ │ │ ├── recentFilesForPrompt.spec.ts
│ │ │ └── responseProcessor.spec.ts
│ │ └── node/
│ │ ├── diffHistoryForPrompt.spec.ts
│ │ ├── editIntent.spec.ts
│ │ ├── xtabCustomDiffPatchResponseHandler.spec.ts
│ │ ├── xtabNextCursorPredictor.spec.ts
│ │ └── xtabProvider.spec.ts
│ ├── lib/
│ │ ├── node/
│ │ │ └── chatLibMain.ts
│ │ └── vscode-node/
│ │ └── test/
│ │ ├── getInlineCompletions.reply.txt
│ │ ├── getInlineCompletions.spec.ts
│ │ ├── nesProvider.reply.txt
│ │ ├── nesProvider.spec.ts
│ │ └── simpleExperimentationService.spec.ts
│ ├── platform/
│ │ ├── authentication/
│ │ │ ├── common/
│ │ │ │ ├── authentication.ts
│ │ │ │ ├── authenticationUpgrade.ts
│ │ │ │ ├── authenticationUpgradeService.ts
│ │ │ │ ├── copilotToken.ts
│ │ │ │ ├── copilotTokenManager.ts
│ │ │ │ ├── copilotTokenStore.ts
│ │ │ │ └── staticGitHubAuthenticationService.ts
│ │ │ ├── node/
│ │ │ │ └── copilotTokenManager.ts
│ │ │ ├── test/
│ │ │ │ └── node/
│ │ │ │ ├── authentication.spec.ts
│ │ │ │ ├── copilotToken.spec.ts
│ │ │ │ └── simulationTestCopilotTokenManager.ts
│ │ │ └── vscode-node/
│ │ │ ├── authenticationService.ts
│ │ │ ├── copilotTokenManager.ts
│ │ │ └── session.ts
│ │ ├── chat/
│ │ │ ├── common/
│ │ │ │ ├── blockedExtensionService.ts
│ │ │ │ ├── chatAgents.ts
│ │ │ │ ├── chatDebugFileLoggerService.ts
│ │ │ │ ├── chatHookService.ts
│ │ │ │ ├── chatMLFetcher.ts
│ │ │ │ ├── chatQuotaService.ts
│ │ │ │ ├── chatQuotaServiceImpl.ts
│ │ │ │ ├── chatSessionService.ts
│ │ │ │ ├── commonTypes.ts
│ │ │ │ ├── conversationOptions.ts
│ │ │ │ ├── globalStringUtils.ts
│ │ │ │ ├── hookCommandTypes.ts
│ │ │ │ ├── hookExecutor.ts
│ │ │ │ ├── hooksOutputChannel.ts
│ │ │ │ ├── interactionService.ts
│ │ │ │ ├── responses.ts
│ │ │ │ └── sessionTranscriptService.ts
│ │ │ ├── node/
│ │ │ │ └── hookExecutor.ts
│ │ │ ├── test/
│ │ │ │ ├── common/
│ │ │ │ │ ├── mockChatMLFetcher.ts
│ │ │ │ │ ├── staticChatMLFetcher.ts
│ │ │ │ │ ├── streamingMockChatMLFetcher.ts
│ │ │ │ │ └── testChatSessionService.ts
│ │ │ │ └── node/
│ │ │ │ └── hookExecutor.spec.ts
│ │ │ └── vscode/
│ │ │ └── chatSessionService.ts
│ │ ├── chunking/
│ │ │ ├── common/
│ │ │ │ ├── chunk.ts
│ │ │ │ ├── chunkingEndpointClient.ts
│ │ │ │ ├── chunkingEndpointClientImpl.ts
│ │ │ │ └── chunkingStringUtils.ts
│ │ │ └── node/
│ │ │ ├── naiveChunker.ts
│ │ │ ├── naiveChunkerService.ts
│ │ │ └── test/
│ │ │ └── naiveChunker.spec.ts
│ │ ├── commands/
│ │ │ ├── common/
│ │ │ │ ├── mockRunCommandExecutionService.ts
│ │ │ │ └── runCommandExecutionService.ts
│ │ │ └── vscode/
│ │ │ └── runCommandExecutionServiceImpl.ts
│ │ ├── completions-core/
│ │ │ └── common/
│ │ │ └── openai/
│ │ │ └── copilotAnnotations.ts
│ │ ├── configuration/
│ │ │ ├── common/
│ │ │ │ ├── configurationService.ts
│ │ │ │ ├── defaultsOnlyConfigurationService.ts
│ │ │ │ ├── jsonSchema.ts
│ │ │ │ ├── jsonSchemaDraft7.ts
│ │ │ │ └── validator.ts
│ │ │ ├── test/
│ │ │ │ └── common/
│ │ │ │ ├── inMemoryConfigurationService.ts
│ │ │ │ └── validator.spec.ts
│ │ │ └── vscode/
│ │ │ └── configurationServiceImpl.ts
│ │ ├── customInstructions/
│ │ │ ├── common/
│ │ │ │ ├── customInstructionsService.ts
│ │ │ │ └── promptTypes.ts
│ │ │ └── test/
│ │ │ └── node/
│ │ │ └── customInstructionsService.spec.ts
│ │ ├── debug/
│ │ │ ├── common/
│ │ │ │ └── debugOutputService.ts
│ │ │ └── vscode/
│ │ │ ├── debugOutputListener.ts
│ │ │ └── debugOutputServiceImpl.ts
│ │ ├── devcontainer/
│ │ │ └── common/
│ │ │ └── devContainerConfigurationService.ts
│ │ ├── dialog/
│ │ │ ├── common/
│ │ │ │ └── dialogService.ts
│ │ │ └── vscode/
│ │ │ └── dialogServiceImpl.ts
│ │ ├── diff/
│ │ │ ├── common/
│ │ │ │ ├── diffService.ts
│ │ │ │ └── diffWorker.ts
│ │ │ └── node/
│ │ │ ├── diffServiceImpl.ts
│ │ │ └── diffWorkerMain.ts
│ │ ├── editSurvivalTracking/
│ │ │ ├── common/
│ │ │ │ ├── arcTracker.ts
│ │ │ │ ├── editCollector.ts
│ │ │ │ ├── editComputer.ts
│ │ │ │ ├── editSurvivalReporter.ts
│ │ │ │ ├── editSurvivalTracker.ts
│ │ │ │ └── editSurvivalTrackerService.ts
│ │ │ └── test/
│ │ │ └── common/
│ │ │ └── editCollector.spec.ts
│ │ ├── editing/
│ │ │ ├── common/
│ │ │ │ ├── abstractText.ts
│ │ │ │ ├── edit.ts
│ │ │ │ ├── edits.ts
│ │ │ │ ├── notebookDocumentSnapshot.ts
│ │ │ │ ├── offsetLineColumnConverter.ts
│ │ │ │ ├── positionOffsetTransformer.ts
│ │ │ │ └── textDocumentSnapshot.ts
│ │ │ └── node/
│ │ │ └── edits.spec.ts
│ │ ├── embeddings/
│ │ │ ├── common/
│ │ │ │ ├── embeddingsComputer.ts
│ │ │ │ ├── embeddingsGrouper.ts
│ │ │ │ ├── embeddingsIndex.ts
│ │ │ │ ├── embeddingsStorage.ts
│ │ │ │ ├── remoteEmbeddingsComputer.ts
│ │ │ │ └── vscodeIndex.ts
│ │ │ └── test/
│ │ │ └── node/
│ │ │ ├── embeddingsGrouper.spec.ts
│ │ │ └── packEmbedding.spec.ts
│ │ ├── endpoint/
│ │ │ ├── common/
│ │ │ │ ├── capiClient.ts
│ │ │ │ ├── chatModelCapabilities.ts
│ │ │ │ ├── compactionDataContainer.tsx
│ │ │ │ ├── domainService.ts
│ │ │ │ ├── endpointProvider.ts
│ │ │ │ ├── endpointTypes.ts
│ │ │ │ ├── licenseAgreement.ts
│ │ │ │ ├── modelAliasRegistry.ts
│ │ │ │ ├── phaseDataContainer.tsx
│ │ │ │ ├── statefulMarkerContainer.tsx
│ │ │ │ └── thinkingDataContainer.tsx
│ │ │ ├── node/
│ │ │ │ ├── autoChatEndpoint.ts
│ │ │ │ ├── automodeService.ts
│ │ │ │ ├── capiClientImpl.ts
│ │ │ │ ├── chatEndpoint.ts
│ │ │ │ ├── copilotChatEndpoint.ts
│ │ │ │ ├── domainServiceImpl.ts
│ │ │ │ ├── embeddingsEndpoint.ts
│ │ │ │ ├── messagesApi.ts
│ │ │ │ ├── modelMetadataFetcher.ts
│ │ │ │ ├── proxy4oEndpoint.ts
│ │ │ │ ├── proxyAgenticSearchEndpoint.ts
│ │ │ │ ├── proxyInstantApplyShortEndpoint.ts
│ │ │ │ ├── proxyModelHelper.ts
│ │ │ │ ├── proxyXtabEndpoint.ts
│ │ │ │ ├── responsesApi.ts
│ │ │ │ ├── routerDecisionFetcher.ts
│ │ │ │ └── test/
│ │ │ │ ├── automodeService.spec.ts
│ │ │ │ ├── copilotChatEndpoint.spec.ts
│ │ │ │ └── responsesApi.spec.ts
│ │ │ ├── test/
│ │ │ │ └── node/
│ │ │ │ ├── __snapshots__/
│ │ │ │ │ └── stream.sseProcessor.spec.ts.snap
│ │ │ │ ├── azureEndpoint.ts
│ │ │ │ ├── capiEndpoint.ts
│ │ │ │ ├── chatModelCapabilities.spec.ts
│ │ │ │ ├── customNesEndpoint.ts
│ │ │ │ ├── messagesApi.spec.ts
│ │ │ │ ├── mockEndpoint.ts
│ │ │ │ ├── openaiCompatibleEndpoint.ts
│ │ │ │ ├── stream.splitChunk.spec.ts
│ │ │ │ ├── stream.sseProcessor.spec.ts
│ │ │ │ ├── test/
│ │ │ │ │ └── openaiCompatibleEndpoint.spec.ts
│ │ │ │ └── testEndpointProvider.ts
│ │ │ └── vscode-node/
│ │ │ ├── extChatEndpoint.ts
│ │ │ ├── extChatTokenizer.ts
│ │ │ └── test/
│ │ │ └── extChatTokenizer.spec.ts
│ │ ├── env/
│ │ │ ├── common/
│ │ │ │ ├── envService.ts
│ │ │ │ ├── nullEnvService.ts
│ │ │ │ └── packagejson.ts
│ │ │ ├── vscode/
│ │ │ │ └── envServiceImpl.ts
│ │ │ └── vscode-node/
│ │ │ └── nativeEnvServiceImpl.ts
│ │ ├── extContext/
│ │ │ └── common/
│ │ │ └── extensionContext.ts
│ │ ├── extensions/
│ │ │ ├── common/
│ │ │ │ ├── extensionsService.ts
│ │ │ │ └── packageJson.ts
│ │ │ └── vscode/
│ │ │ └── extensionsService.ts
│ │ ├── filesystem/
│ │ │ ├── common/
│ │ │ │ ├── fileSystemService.ts
│ │ │ │ └── fileTypes.ts
│ │ │ ├── node/
│ │ │ │ ├── fileSystemServiceImpl.ts
│ │ │ │ └── test/
│ │ │ │ └── mockFileSystemService.ts
│ │ │ └── vscode/
│ │ │ └── fileSystemServiceImpl.ts
│ │ ├── git/
│ │ │ ├── common/
│ │ │ │ ├── gitCommitMessageService.ts
│ │ │ │ ├── gitDiffService.ts
│ │ │ │ ├── gitExtensionService.ts
│ │ │ │ ├── gitService.ts
│ │ │ │ ├── nullGitDiffService.ts
│ │ │ │ ├── nullGitExtensionService.ts
│ │ │ │ └── utils.ts
│ │ │ ├── test/
│ │ │ │ └── node/
│ │ │ │ └── gitService.spec.ts
│ │ │ └── vscode/
│ │ │ ├── git.d.ts
│ │ │ ├── gitExtensionServiceImpl.ts
│ │ │ └── gitServiceImpl.ts
│ │ ├── github/
│ │ │ ├── common/
│ │ │ │ ├── githubAPI.ts
│ │ │ │ ├── githubApiFetcherService.ts
│ │ │ │ ├── githubService.ts
│ │ │ │ ├── nullOctokitServiceImpl.ts
│ │ │ │ └── octoKitServiceImpl.ts
│ │ │ └── node/
│ │ │ └── githubRepositoryService.ts
│ │ ├── ignore/
│ │ │ ├── common/
│ │ │ │ └── ignoreService.ts
│ │ │ ├── node/
│ │ │ │ ├── ignoreFile.ts
│ │ │ │ ├── ignoreServiceImpl.ts
│ │ │ │ ├── remoteContentExclusion.ts
│ │ │ │ └── test/
│ │ │ │ ├── mockAuthenticationService.ts
│ │ │ │ ├── mockCAPIClientService.ts
│ │ │ │ ├── mockGitService.ts
│ │ │ │ ├── mockWorkspaceService.ts
│ │ │ │ └── remoteContentExclusion.spec.ts
│ │ │ ├── vscode/
│ │ │ │ └── ignoreInfoFileContentProvider.ts
│ │ │ └── vscode-node/
│ │ │ └── ignoreService.ts
│ │ ├── image/
│ │ │ ├── common/
│ │ │ │ └── imageService.ts
│ │ │ ├── node/
│ │ │ │ └── imageServiceImpl.ts
│ │ │ └── vscode-node/
│ │ │ └── imageServiceImpl.ts
│ │ ├── inlineCompletions/
│ │ │ └── common/
│ │ │ └── api.ts
│ │ ├── inlineEdits/
│ │ │ ├── common/
│ │ │ │ ├── dataTypes/
│ │ │ │ │ ├── codeActionData.ts
│ │ │ │ │ ├── diagnosticData.ts
│ │ │ │ │ ├── documentId.ts
│ │ │ │ │ ├── edit.ts
│ │ │ │ │ ├── editUtils.ts
│ │ │ │ │ ├── fetchCancellationError.ts
│ │ │ │ │ ├── importFilteringOptions.ts
│ │ │ │ │ ├── inlineEditsModelsTypes.ts
│ │ │ │ │ ├── jointCompletionsProviderOptions.ts
│ │ │ │ │ ├── languageContext.ts
│ │ │ │ │ ├── languageId.ts
│ │ │ │ │ ├── nextCursorLinePrediction.ts
│ │ │ │ │ ├── permutation.ts
│ │ │ │ │ ├── rootedLineEdit.ts
│ │ │ │ │ ├── textEditLength.ts
│ │ │ │ │ ├── textEditLengthHelper/
│ │ │ │ │ │ ├── README.md
│ │ │ │ │ │ ├── combineTextEditInfos.ts
│ │ │ │ │ │ ├── length.ts
│ │ │ │ │ │ └── textEditInfo.ts
│ │ │ │ │ ├── triggerOptions.ts
│ │ │ │ │ ├── xtabHistoryOptions.ts
│ │ │ │ │ └── xtabPromptOptions.ts
│ │ │ │ ├── debugRecorderBookmark.ts
│ │ │ │ ├── editReason.ts
│ │ │ │ ├── inlineEditLogContext.ts
│ │ │ │ ├── inlineEditsModelService.ts
│ │ │ │ ├── nesActivationStatusTelemetry.contribution.ts
│ │ │ │ ├── notebook.ts
│ │ │ │ ├── observableGit.ts
│ │ │ │ ├── observableWorkspace.ts
│ │ │ │ ├── responseProcessor.ts
│ │ │ │ ├── statelessNextEditProvider.ts
│ │ │ │ ├── statelessNextEditProviders.ts
│ │ │ │ ├── utils/
│ │ │ │ │ ├── observable.ts
│ │ │ │ │ ├── stringifyChatMessages.ts
│ │ │ │ │ ├── tsExpr.ts
│ │ │ │ │ └── utils.ts
│ │ │ │ └── workspaceEditTracker/
│ │ │ │ ├── historyContextProvider.ts
│ │ │ │ ├── nesHistoryContextProvider.ts
│ │ │ │ ├── nesXtabHistoryTracker.ts
│ │ │ │ ├── singleFileStaticWorkspaceEditTracker.ts
│ │ │ │ ├── staticWorkspaceEditTracker.ts
│ │ │ │ └── workspaceDocumentEditTracker.ts
│ │ │ ├── node/
│ │ │ │ └── inlineEditsModelService.ts
│ │ │ └── test/
│ │ │ ├── common/
│ │ │ │ ├── statelessNextEditProviers.spec.ts
│ │ │ │ └── textEditLength.spec.ts
│ │ │ └── node/
│ │ │ ├── edits.spec.ts
│ │ │ └── random.ts
│ │ ├── interactive/
│ │ │ ├── common/
│ │ │ │ └── interactiveSessionService.ts
│ │ │ └── vscode/
│ │ │ └── interactiveSessionServiceImpl.ts
│ │ ├── languageContextProvider/
│ │ │ └── common/
│ │ │ ├── languageContextProviderService.ts
│ │ │ └── nullLanguageContextProviderService.ts
│ │ ├── languageServer/
│ │ │ └── common/
│ │ │ └── languageContextService.ts
│ │ ├── languages/
│ │ │ ├── common/
│ │ │ │ ├── languageDiagnosticsService.ts
│ │ │ │ ├── languageFeaturesService.ts
│ │ │ │ └── testLanguageDiagnosticsService.ts
│ │ │ └── vscode/
│ │ │ ├── languageDiagnosticsServiceImpl.ts
│ │ │ └── languageFeaturesServicesImpl.ts
│ │ ├── log/
│ │ │ ├── common/
│ │ │ │ ├── logExecTime.ts
│ │ │ │ ├── logService.ts
│ │ │ │ └── messageStringify.ts
│ │ │ ├── test/
│ │ │ │ └── common/
│ │ │ │ ├── loggerHelpers.ts
│ │ │ │ └── subLogger.spec.ts
│ │ │ └── vscode/
│ │ │ └── outputChannelLogTarget.ts
│ │ ├── mcp/
│ │ │ ├── common/
│ │ │ │ └── mcpService.ts
│ │ │ └── vscode/
│ │ │ ├── mcpServiceImpl.ts
│ │ │ └── test/
│ │ │ └── mcpService.spec.ts
│ │ ├── multiFileEdit/
│ │ │ └── common/
│ │ │ ├── editLogService.ts
│ │ │ └── multiFileEditQualityTelemetry.ts
│ │ ├── nesFetch/
│ │ │ ├── common/
│ │ │ │ ├── completionHelpers.ts
│ │ │ │ ├── completionsAPI.ts
│ │ │ │ ├── completionsFetchService.ts
│ │ │ │ └── responseStream.ts
│ │ │ └── node/
│ │ │ ├── completionsFetchServiceImpl.ts
│ │ │ └── streamTransformer.ts
│ │ ├── networking/
│ │ │ ├── common/
│ │ │ │ ├── anthropic.ts
│ │ │ │ ├── fetch.ts
│ │ │ │ ├── fetcherService.ts
│ │ │ │ ├── networking.ts
│ │ │ │ ├── openai.ts
│ │ │ │ └── responseConvert.ts
│ │ │ ├── node/
│ │ │ │ ├── baseFetchFetcher.ts
│ │ │ │ ├── chatStream.ts
│ │ │ │ ├── chatWebSocketManager.ts
│ │ │ │ ├── chatWebSocketTelemetry.ts
│ │ │ │ ├── fetcherFallback.ts
│ │ │ │ ├── nodeFetchFetcher.ts
│ │ │ │ ├── nodeFetcher.ts
│ │ │ │ ├── stream.ts
│ │ │ │ └── test/
│ │ │ │ ├── chatWebSocketManager.spec.ts
│ │ │ │ ├── createWebSocket.spec.ts
│ │ │ │ └── nodeFetcherService.ts
│ │ │ ├── test/
│ │ │ │ └── node/
│ │ │ │ ├── fetcherFallback.spec.ts
│ │ │ │ ├── headerContributors.spec.ts
│ │ │ │ └── networking.spec.ts
│ │ │ └── vscode-node/
│ │ │ ├── electronFetcher.ts
│ │ │ ├── fetcherServiceImpl.ts
│ │ │ └── test/
│ │ │ └── fetcherServiceCrash.spec.ts
│ │ ├── notebook/
│ │ │ ├── common/
│ │ │ │ ├── alternativeContent.ts
│ │ │ │ ├── alternativeContentEditGenerator.ts
│ │ │ │ ├── alternativeContentFormat.ts
│ │ │ │ ├── alternativeContentProvider.json.ts
│ │ │ │ ├── alternativeContentProvider.text.ts
│ │ │ │ ├── alternativeContentProvider.ts
│ │ │ │ ├── alternativeContentProvider.xml.ts
│ │ │ │ ├── alternativeNotebookDocument.ts
│ │ │ │ ├── alternativeNotebookTextDocument.ts
│ │ │ │ ├── helpers.ts
│ │ │ │ ├── mockAlternativeContentService.ts
│ │ │ │ ├── notebookDiff.ts
│ │ │ │ ├── notebookService.ts
│ │ │ │ ├── notebookSummaryTracker.ts
│ │ │ │ └── offsetTranslator.ts
│ │ │ ├── test/
│ │ │ │ ├── common/
│ │ │ │ │ └── offsetTranslator.spec.tsx
│ │ │ │ └── node/
│ │ │ │ ├── __snapshots__/
│ │ │ │ │ └── alternativeNotebookTextDocument.spec.tsx.snap
│ │ │ │ ├── alternativeContent.spec.ts
│ │ │ │ ├── alternativeContentEditGenerator.spec.ts
│ │ │ │ ├── alternativeNotebookTextDocument.spec.tsx
│ │ │ │ ├── fixtures/
│ │ │ │ │ ├── circle_area_edits.altContent.json
│ │ │ │ │ ├── circle_area_edits.altContent.text
│ │ │ │ │ ├── circle_area_edits.altContent.xml
│ │ │ │ │ ├── circle_area_edits_after.ipynb
│ │ │ │ │ ├── circle_area_edits_before.ipynb
│ │ │ │ │ ├── data_processing.altContent.json
│ │ │ │ │ ├── data_processing.altContent.text
│ │ │ │ │ ├── data_processing.altContent.xml
│ │ │ │ │ ├── data_processing_2.altContent.json
│ │ │ │ │ ├── data_processing_2.altContent.text
│ │ │ │ │ ├── data_processing_2.altContent.xml
│ │ │ │ │ ├── data_processing_2_after.ipynb
│ │ │ │ │ ├── data_processing_2_before.ipynb
│ │ │ │ │ ├── data_processing_after.ipynb
│ │ │ │ │ ├── data_processing_before.ipynb
│ │ │ │ │ ├── data_visualization.altContent.json
│ │ │ │ │ ├── data_visualization.altContent.text
│ │ │ │ │ ├── data_visualization.altContent.xml
│ │ │ │ │ ├── data_visualization_2.altContent.json
│ │ │ │ │ ├── data_visualization_2.altContent.text
│ │ │ │ │ ├── data_visualization_2.altContent.xml
│ │ │ │ │ ├── data_visualization_2_after.ipynb
│ │ │ │ │ ├── data_visualization_2_before.ipynb
│ │ │ │ │ ├── data_visualization_after.ipynb
│ │ │ │ │ ├── data_visualization_before.ipynb
│ │ │ │ │ ├── datacleansing.altContent.json
│ │ │ │ │ ├── datacleansing.altContent.text
│ │ │ │ │ ├── datacleansing.altContent.xml
│ │ │ │ │ ├── datacleansing_after.ipynb
│ │ │ │ │ ├── datacleansing_before.ipynb
│ │ │ │ │ ├── dataframe.altContent.json
│ │ │ │ │ ├── dataframe.altContent.text
│ │ │ │ │ ├── dataframe.altContent.xml
│ │ │ │ │ ├── dataframe_after.ipynb
│ │ │ │ │ ├── dataframe_before.ipynb
│ │ │ │ │ ├── delete_1_line_in_cell.altContent.text
│ │ │ │ │ ├── delete_1_line_in_cell.altContent.xml
│ │ │ │ │ ├── delete_1_line_in_cell_after.ipynb
│ │ │ │ │ ├── delete_1_line_in_cell_before.ipynb
│ │ │ │ │ ├── duplicateCellIds.ipynb
│ │ │ │ │ ├── duplicateCellIds.xml
│ │ │ │ │ ├── edit.altContent.json
│ │ │ │ │ ├── edit.altContent.text
│ │ │ │ │ ├── edit.altContent.xml
│ │ │ │ │ ├── edit_after.ipynb
│ │ │ │ │ ├── edit_before.ipynb
│ │ │ │ │ ├── empty.altContent.json
│ │ │ │ │ ├── empty.altContent.text
│ │ │ │ │ ├── empty.altContent.xml
│ │ │ │ │ ├── empty_after.ipynb
│ │ │ │ │ ├── empty_before.ipynb
│ │ │ │ │ ├── imports.altContent.json
│ │ │ │ │ ├── imports.altContent.text
│ │ │ │ │ ├── imports.altContent.xml
│ │ │ │ │ ├── imports_after.ipynb
│ │ │ │ │ ├── imports_before.ipynb
│ │ │ │ │ ├── insert.1.ipynb.xml
│ │ │ │ │ ├── insert.2.ipynb.xml
│ │ │ │ │ ├── insert.3.ipynb.xml
│ │ │ │ │ ├── insert.4.ipynb.xml
│ │ │ │ │ ├── insert.ipynb
│ │ │ │ │ ├── large_cell.altContent.json
│ │ │ │ │ ├── large_cell.altContent.text
│ │ │ │ │ ├── large_cell.altContent.xml
│ │ │ │ │ ├── large_cell_after.ipynb
│ │ │ │ │ ├── large_cell_before.ipynb
│ │ │ │ │ ├── matplotlib_to_plotly_after.ipynb
│ │ │ │ │ ├── matplotlib_to_plotly_before.ipynb
│ │ │ │ │ ├── multicells.altContent.json
│ │ │ │ │ ├── multicells.altContent.text
│ │ │ │ │ ├── multicells.altContent.xml
│ │ │ │ │ ├── multicells_after.ipynb
│ │ │ │ │ ├── multicells_before.ipynb
│ │ │ │ │ ├── plot.altContent.json
│ │ │ │ │ ├── plot.altContent.text
│ │ │ │ │ ├── plot.altContent.xml
│ │ │ │ │ ├── plot_after.ipynb
│ │ │ │ │ ├── plot_before.ipynb
│ │ │ │ │ ├── plotly_to_matplotlib.altContent.text
│ │ │ │ │ ├── plotly_to_matplotlib.altContent.xml
│ │ │ │ │ ├── plotly_to_matplotlib_after.ipynb
│ │ │ │ │ ├── plotly_to_matplotlib_before.ipynb
│ │ │ │ │ ├── refactor.altContent.json
│ │ │ │ │ ├── refactor.altContent.text
│ │ │ │ │ ├── refactor.altContent.xml
│ │ │ │ │ ├── refactor_after.ipynb
│ │ │ │ │ ├── refactor_before.ipynb
│ │ │ │ │ ├── reorder.altContent.json
│ │ │ │ │ ├── reorder.altContent.text
│ │ │ │ │ ├── reorder.altContent.xml
│ │ │ │ │ ├── reorder_after.ipynb
│ │ │ │ │ ├── reorder_before.ipynb
│ │ │ │ │ ├── sample.github-issues
│ │ │ │ │ ├── sample.github-issues.json
│ │ │ │ │ ├── sample.github-issues.text
│ │ │ │ │ ├── sample.github-issues.xml
│ │ │ │ │ ├── sample.ipynb
│ │ │ │ │ ├── sample.ipynb.json
│ │ │ │ │ ├── sample.ipynb.text
│ │ │ │ │ ├── sample.ipynb.xml
│ │ │ │ │ ├── single.altContent.json
│ │ │ │ │ ├── single.altContent.text
│ │ │ │ │ ├── single.altContent.xml
│ │ │ │ │ ├── single_after.ipynb
│ │ │ │ │ ├── single_before.ipynb
│ │ │ │ │ ├── swapping_cells.ipynb
│ │ │ │ │ ├── variables.altContent.json
│ │ │ │ │ ├── variables.altContent.text
│ │ │ │ │ ├── variables.altContent.xml
│ │ │ │ │ ├── variables_after.ipynb
│ │ │ │ │ ├── variables_before.ipynb
│ │ │ │ │ ├── withOutput.ipynb
│ │ │ │ │ ├── withOutput.ipynb.json
│ │ │ │ │ ├── withOutput.ipynb.text
│ │ │ │ │ └── withOutput.ipynb.xml
│ │ │ │ ├── notebookService.spec.ts
│ │ │ │ └── utils.ts
│ │ │ └── vscode/
│ │ │ ├── notebookExectionServiceImpl.ts
│ │ │ ├── notebookServiceImpl.ts
│ │ │ └── notebookSummaryTrackerImpl.ts
│ │ ├── notification/
│ │ │ ├── common/
│ │ │ │ └── notificationService.ts
│ │ │ └── vscode/
│ │ │ └── notificationServiceImpl.ts
│ │ ├── open/
│ │ │ ├── common/
│ │ │ │ └── opener.ts
│ │ │ └── vscode/
│ │ │ └── opener.ts
│ │ ├── openai/
│ │ │ └── node/
│ │ │ ├── fetch.ts
│ │ │ └── test/
│ │ │ └── chatTokens.spec.ts
│ │ ├── otel/
│ │ │ ├── common/
│ │ │ │ ├── agentOTelEnv.ts
│ │ │ │ ├── genAiAttributes.ts
│ │ │ │ ├── genAiEvents.ts
│ │ │ │ ├── genAiMetrics.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── messageFormatters.ts
│ │ │ │ ├── noopOtelService.ts
│ │ │ │ ├── otelConfig.ts
│ │ │ │ ├── otelService.ts
│ │ │ │ └── test/
│ │ │ │ ├── agentOTelEnv.spec.ts
│ │ │ │ ├── agentTraceHierarchy.spec.ts
│ │ │ │ ├── byokProviderSpans.spec.ts
│ │ │ │ ├── capturingOTelService.ts
│ │ │ │ ├── chatMLFetcherSpanLifecycle.spec.ts
│ │ │ │ ├── genAiEvents.spec.ts
│ │ │ │ ├── genAiMetrics.spec.ts
│ │ │ │ ├── messageFormatters.spec.ts
│ │ │ │ ├── noopOtelService.spec.ts
│ │ │ │ ├── otelConfig.spec.ts
│ │ │ │ └── serviceRobustness.spec.ts
│ │ │ └── node/
│ │ │ ├── fileExporters.ts
│ │ │ ├── inMemoryOTelService.ts
│ │ │ ├── otelServiceImpl.ts
│ │ │ └── test/
│ │ │ ├── fileExporters.spec.ts
│ │ │ └── traceContextPropagation.spec.ts
│ │ ├── parser/
│ │ │ ├── node/
│ │ │ │ ├── chunkGroupTypes.ts
│ │ │ │ ├── docGenParsing.ts
│ │ │ │ ├── indentationStructure.ts
│ │ │ │ ├── languageLoader.ts
│ │ │ │ ├── nodes.ts
│ │ │ │ ├── parserImpl.ts
│ │ │ │ ├── parserService.ts
│ │ │ │ ├── parserServiceImpl.ts
│ │ │ │ ├── parserWithCaching.ts
│ │ │ │ ├── parserWorker.ts
│ │ │ │ ├── querying.ts
│ │ │ │ ├── selectionParsing.ts
│ │ │ │ ├── structure.ts
│ │ │ │ ├── testGenParsing.ts
│ │ │ │ ├── treeSitterLanguages.ts
│ │ │ │ ├── treeSitterQueries.ts
│ │ │ │ └── util.ts
│ │ │ └── test/
│ │ │ └── node/
│ │ │ ├── __snapshots__/
│ │ │ │ ├── getStructure.csharp.spec.ts.snap
│ │ │ │ ├── getStructure.golang.spec.ts.snap
│ │ │ │ ├── getStructure.js.spec.ts.snap
│ │ │ │ ├── getStructure.py.spec.ts.snap
│ │ │ │ ├── getStructure.ruby.spec.ts.snap
│ │ │ │ ├── getStructure.ts.spec.ts.snap
│ │ │ │ └── getStructure.tsx.spec.ts.snap
│ │ │ ├── findLastTest/
│ │ │ │ ├── ts.spec.ts
│ │ │ │ └── util.ts
│ │ │ ├── fixtures/
│ │ │ │ ├── EditForm.tsx
│ │ │ │ ├── chatSetup.ts
│ │ │ │ ├── chatSetup.ts.getStructure.html
│ │ │ │ ├── dllmain.cpp
│ │ │ │ ├── dllmain.cpp.getStructure.html
│ │ │ │ ├── problem1.cpp
│ │ │ │ ├── problem1.cpp.getStructure.html
│ │ │ │ ├── test.cpp
│ │ │ │ ├── test.cpp.getStructure.html
│ │ │ │ ├── test.cs
│ │ │ │ ├── test.go
│ │ │ │ ├── test.java
│ │ │ │ ├── test.java.getStructure.html
│ │ │ │ ├── test.js
│ │ │ │ ├── test.py
│ │ │ │ ├── test.rb
│ │ │ │ ├── test.rs
│ │ │ │ ├── test.rs.getStructure.html
│ │ │ │ ├── test.tsx
│ │ │ │ ├── try.py
│ │ │ │ ├── try.py.getStructure.html
│ │ │ │ ├── vscode.proposed.chatParticipantAdditions-annotated.d.ts.txt
│ │ │ │ └── vscode.proposed.chatParticipantAdditions.d.ts
│ │ │ ├── getNodeMatchingSelection.spec.ts
│ │ │ ├── getNodeToDocument.cpp.spec.ts
│ │ │ ├── getNodeToDocument.java.spec.ts
│ │ │ ├── getNodeToDocument.ts.spec.ts
│ │ │ ├── getNodeToDocument.util.ts
│ │ │ ├── getParseErrorCount.spec.ts
│ │ │ ├── getStructure.cpp.spec.ts
│ │ │ ├── getStructure.csharp.spec.ts
│ │ │ ├── getStructure.golang.spec.ts
│ │ │ ├── getStructure.java.spec.ts
│ │ │ ├── getStructure.js.spec.ts
│ │ │ ├── getStructure.py.spec.ts
│ │ │ ├── getStructure.ruby.spec.ts
│ │ │ ├── getStructure.rust.spec.ts
│ │ │ ├── getStructure.ts.spec.ts
│ │ │ ├── getStructure.tsx.spec.ts
│ │ │ ├── getStructure.util.ts
│ │ │ ├── getTestableNode.js.spec.ts
│ │ │ ├── getTestableNode.ts.spec.ts
│ │ │ ├── getTestableNode.util.ts
│ │ │ ├── getTestableNodes.ts.spec.ts
│ │ │ ├── getTestableNodes.util.ts
│ │ │ ├── indentationStructure.spec.ts
│ │ │ ├── markers.ts
│ │ │ └── parser.spec.ts
│ │ ├── projectTemplatesIndex/
│ │ │ └── common/
│ │ │ └── projectTemplatesIndex.ts
│ │ ├── promptFiles/
│ │ │ └── common/
│ │ │ ├── promptsService.ts
│ │ │ └── promptsServiceImpl.ts
│ │ ├── prompts/
│ │ │ ├── common/
│ │ │ │ └── promptPathRepresentationService.ts
│ │ │ └── test/
│ │ │ └── node/
│ │ │ └── promptPathRepresentationService.spec.ts
│ │ ├── proxyModels/
│ │ │ ├── common/
│ │ │ │ └── proxyModelsService.ts
│ │ │ └── node/
│ │ │ └── proxyModelsService.ts
│ │ ├── releaseNotes/
│ │ │ ├── common/
│ │ │ │ └── releaseNotesService.ts
│ │ │ └── vscode/
│ │ │ └── releaseNotesServiceImpl.ts
│ │ ├── remoteCodeSearch/
│ │ │ ├── common/
│ │ │ │ ├── adoCodeSearchService.ts
│ │ │ │ ├── githubCodeSearchService.ts
│ │ │ │ └── remoteCodeSearch.ts
│ │ │ ├── node/
│ │ │ │ └── codeSearchRepoAuth.ts
│ │ │ └── vscode-node/
│ │ │ └── codeSearchRepoAuth.ts
│ │ ├── remoteRepositories/
│ │ │ ├── common/
│ │ │ │ └── utils.ts
│ │ │ └── vscode/
│ │ │ └── remoteRepositories.ts
│ │ ├── remoteSearch/
│ │ │ ├── common/
│ │ │ │ ├── codeOrDocsSearchClient.ts
│ │ │ │ ├── codeOrDocsSearchErrors.ts
│ │ │ │ └── utils.ts
│ │ │ ├── node/
│ │ │ │ └── codeOrDocsSearchClientImpl.ts
│ │ │ └── test/
│ │ │ └── node/
│ │ │ ├── codeOrDocsSearchErrors.spec.ts
│ │ │ └── utils.spec.ts
│ │ ├── requestLogger/
│ │ │ ├── common/
│ │ │ │ └── capturingToken.ts
│ │ │ ├── node/
│ │ │ │ ├── nullRequestLogger.ts
│ │ │ │ └── requestLogger.ts
│ │ │ └── test/
│ │ │ └── node/
│ │ │ └── testRequestLogger.ts
│ │ ├── review/
│ │ │ ├── common/
│ │ │ │ ├── reviewCommand.ts
│ │ │ │ └── reviewService.ts
│ │ │ └── vscode/
│ │ │ └── reviewServiceImpl.ts
│ │ ├── scopeSelection/
│ │ │ ├── common/
│ │ │ │ └── scopeSelection.ts
│ │ │ └── vscode-node/
│ │ │ └── scopeSelectionImpl.ts
│ │ ├── search/
│ │ │ ├── common/
│ │ │ │ └── searchService.ts
│ │ │ ├── vscode/
│ │ │ │ └── baseSearchServiceImpl.ts
│ │ │ └── vscode-node/
│ │ │ └── searchServiceImpl.ts
│ │ ├── settingsEditor/
│ │ │ └── common/
│ │ │ └── settingsEditorSearchService.ts
│ │ ├── simulationTestContext/
│ │ │ └── common/
│ │ │ └── simulationTestContext.ts
│ │ ├── snippy/
│ │ │ └── common/
│ │ │ ├── snippyCompute.ts
│ │ │ ├── snippyFetcher.ts
│ │ │ ├── snippyNotifier.ts
│ │ │ ├── snippyService.ts
│ │ │ ├── snippyServiceImpl.ts
│ │ │ └── snippyTypes.ts
│ │ ├── survey/
│ │ │ ├── common/
│ │ │ │ └── surveyService.ts
│ │ │ └── vscode/
│ │ │ └── surveyServiceImpl.ts
│ │ ├── tabs/
│ │ │ ├── common/
│ │ │ │ └── tabsAndEditorsService.ts
│ │ │ └── vscode/
│ │ │ └── tabsAndEditorsServiceImpl.ts
│ │ ├── tasks/
│ │ │ ├── common/
│ │ │ │ ├── tasksService.ts
│ │ │ │ └── testTasksService.ts
│ │ │ └── vscode/
│ │ │ └── tasksService.ts
│ │ ├── telemetry/
│ │ │ ├── common/
│ │ │ │ ├── baseTelemetryService.ts
│ │ │ │ ├── failingTelemetryReporter.ts
│ │ │ │ ├── ghTelemetrySender.ts
│ │ │ │ ├── ghTelemetryService.ts
│ │ │ │ ├── msftTelemetrySender.ts
│ │ │ │ ├── nullExperimentationService.ts
│ │ │ │ ├── nullTelemetryService.ts
│ │ │ │ ├── telemetry.ts
│ │ │ │ └── telemetryData.ts
│ │ │ ├── node/
│ │ │ │ ├── azureInsights.ts
│ │ │ │ ├── azureInsightsReporter.ts
│ │ │ │ ├── baseExperimentationService.ts
│ │ │ │ └── spyingTelemetryService.ts
│ │ │ ├── test/
│ │ │ │ └── node/
│ │ │ │ ├── experimentation.spec.ts
│ │ │ │ ├── telemetry.spec.ts
│ │ │ │ └── telemetry2.spec.ts
│ │ │ └── vscode-node/
│ │ │ ├── githubTelemetrySender.ts
│ │ │ ├── microsoftExperimentationService.ts
│ │ │ ├── microsoftTelemetrySender.ts
│ │ │ └── telemetryServiceImpl.ts
│ │ ├── terminal/
│ │ │ ├── common/
│ │ │ │ └── terminalService.ts
│ │ │ └── vscode/
│ │ │ ├── terminalBufferListener.ts
│ │ │ └── terminalServiceImpl.ts
│ │ ├── test/
│ │ │ ├── common/
│ │ │ │ ├── endpointTestFixtures.ts
│ │ │ │ ├── testCustomInstructionsService.ts
│ │ │ │ ├── testExtensionsService.ts
│ │ │ │ └── testNotebookService.ts
│ │ │ └── node/
│ │ │ ├── extensionContext.ts
│ │ │ ├── fetcher.ts
│ │ │ ├── isInExtensionHost.ts
│ │ │ ├── promptContextModel.ts
│ │ │ ├── services.ts
│ │ │ ├── simulationWorkspace.ts
│ │ │ ├── simulationWorkspaceServices.ts
│ │ │ ├── telemetry.ts
│ │ │ ├── telemetryFake.ts
│ │ │ ├── testChatAgentService.ts
│ │ │ ├── testHeaderContributor.ts
│ │ │ ├── testWorkbenchService.ts
│ │ │ └── testWorkspaceService.ts
│ │ ├── testing/
│ │ │ ├── common/
│ │ │ │ ├── nullTestProvider.ts
│ │ │ │ ├── nullWorkspaceMutationManager.ts
│ │ │ │ ├── setupTestExtensions.ts
│ │ │ │ ├── testLogService.ts
│ │ │ │ ├── testProvider.ts
│ │ │ │ └── workspaceMutationManager.ts
│ │ │ ├── node/
│ │ │ │ ├── setupTestDetector.mmd
│ │ │ │ ├── setupTestDetector.tsx
│ │ │ │ └── testDepsResolver.ts
│ │ │ ├── test/
│ │ │ │ └── node/
│ │ │ │ └── setupTestDetector.spec.ts
│ │ │ └── vscode/
│ │ │ └── testProviderImpl.ts
│ │ ├── tfidf/
│ │ │ └── node/
│ │ │ ├── test/
│ │ │ │ └── tfidf.spec.ts
│ │ │ ├── tfidf.ts
│ │ │ ├── tfidfMessaging.ts
│ │ │ └── tfidfWorker.ts
│ │ ├── thinking/
│ │ │ └── common/
│ │ │ ├── thinking.ts
│ │ │ └── thinkingUtils.ts
│ │ ├── tokenizer/
│ │ │ ├── node/
│ │ │ │ ├── cl100k_base.tiktoken
│ │ │ │ ├── o200k_base.tiktoken
│ │ │ │ ├── parseTikTokens.ts
│ │ │ │ ├── promptTokenDetails.ts
│ │ │ │ ├── tikTokenizerImpl.ts
│ │ │ │ ├── tikTokenizerWorker.ts
│ │ │ │ └── tokenizer.ts
│ │ │ └── test/
│ │ │ └── node/
│ │ │ └── tokenizer.spec.ts
│ │ ├── trajectory/
│ │ │ ├── common/
│ │ │ │ ├── trajectoryLogger.ts
│ │ │ │ └── trajectoryTypes.ts
│ │ │ └── node/
│ │ │ ├── trajectoryLogger.ts
│ │ │ └── trajectoryLoggerAdapter.ts
│ │ ├── urlChunkSearch/
│ │ │ └── node/
│ │ │ └── urlChunkEmbeddingsIndex.ts
│ │ ├── workbench/
│ │ │ ├── common/
│ │ │ │ └── workbenchService.ts
│ │ │ ├── test/
│ │ │ │ └── vscode-node/
│ │ │ │ └── workbenchServiceImpl.test.ts
│ │ │ └── vscode/
│ │ │ └── workbenchServiceImpt.ts
│ │ ├── workspace/
│ │ │ ├── common/
│ │ │ │ └── workspaceService.ts
│ │ │ └── vscode/
│ │ │ └── workspaceServiceImpl.ts
│ │ ├── workspaceChunkSearch/
│ │ │ ├── common/
│ │ │ │ ├── githubAvailableEmbeddingTypes.ts
│ │ │ │ ├── rerankerService.ts
│ │ │ │ └── workspaceChunkSearch.ts
│ │ │ ├── node/
│ │ │ │ ├── codeSearch/
│ │ │ │ │ ├── codeSearchChunkSearch.ts
│ │ │ │ │ ├── codeSearchRepo.ts
│ │ │ │ │ ├── externalIngestClient.ts
│ │ │ │ │ ├── externalIngestIndex.ts
│ │ │ │ │ ├── repoTracker.ts
│ │ │ │ │ ├── workspaceDiff.ts
│ │ │ │ │ └── workspaceFolderIdMap.ts
│ │ │ │ ├── embeddingsChunkSearch.ts
│ │ │ │ ├── nullWorkspaceFileIndex.ts
│ │ │ │ ├── tfidfChunkSearch.ts
│ │ │ │ ├── tfidfWithSemanticChunkSearch.ts
│ │ │ │ ├── workspaceChunkAndEmbeddingCache.ts
│ │ │ │ ├── workspaceChunkEmbeddingsIndex.ts
│ │ │ │ ├── workspaceChunkSearchService.ts
│ │ │ │ └── workspaceFileIndex.ts
│ │ │ └── test/
│ │ │ └── node/
│ │ │ ├── externalIngest.spec.ts
│ │ │ ├── isMinified.spec.ts
│ │ │ └── workspaceFolderIdMap.spec.ts
│ │ ├── workspaceRecorder/
│ │ │ └── common/
│ │ │ ├── resolvedRecording/
│ │ │ │ ├── documentHistory.ts
│ │ │ │ ├── operation.ts
│ │ │ │ ├── resolvedRecording.ts
│ │ │ │ └── sliceRecording.ts
│ │ │ └── workspaceLog.ts
│ │ └── workspaceState/
│ │ └── common/
│ │ └── promptContextModel.ts
│ ├── util/
│ │ ├── common/
│ │ │ ├── annotatedLineRange.ts
│ │ │ ├── anomalyDetection.ts
│ │ │ ├── arrays.ts
│ │ │ ├── async.ts
│ │ │ ├── asyncIterableUtils.ts
│ │ │ ├── backwardCompatSetting.ts
│ │ │ ├── cache.ts
│ │ │ ├── chatResponseStreamImpl.ts
│ │ │ ├── crypto.ts
│ │ │ ├── debounce.ts
│ │ │ ├── debugValueEditorGlobals.ts
│ │ │ ├── diff.ts
│ │ │ ├── errorMessage.ts
│ │ │ ├── errors.ts
│ │ │ ├── fileSystem.ts
│ │ │ ├── fileTree.ts
│ │ │ ├── glob.ts
│ │ │ ├── globals.d.ts
│ │ │ ├── hexdump.ts
│ │ │ ├── imageUtils.ts
│ │ │ ├── languages.ts
│ │ │ ├── lock.ts
│ │ │ ├── markdown.ts
│ │ │ ├── notebooks.ts
│ │ │ ├── pathRedaction.ts
│ │ │ ├── progress.ts
│ │ │ ├── progressRecorder.ts
│ │ │ ├── racePromise.ts
│ │ │ ├── range.ts
│ │ │ ├── result.ts
│ │ │ ├── services.ts
│ │ │ ├── taskSingler.ts
│ │ │ ├── telemetryCorrelationId.ts
│ │ │ ├── test/
│ │ │ │ ├── annotatedSrc.ts
│ │ │ │ ├── async.spec.ts
│ │ │ │ ├── common/
│ │ │ │ │ └── asyncIterableUtils.spec.ts
│ │ │ │ ├── mockChatResponseStream.ts
│ │ │ │ ├── notebooks.spec.ts
│ │ │ │ ├── result.spec.ts
│ │ │ │ ├── shims/
│ │ │ │ │ ├── chatTypes.ts
│ │ │ │ │ ├── editing.ts
│ │ │ │ │ ├── enums.ts
│ │ │ │ │ ├── l10n.ts
│ │ │ │ │ ├── newSymbolName.ts
│ │ │ │ │ ├── notebookDocument.ts
│ │ │ │ │ ├── notebookEditor.ts
│ │ │ │ │ ├── terminal.ts
│ │ │ │ │ ├── textDocument.ts
│ │ │ │ │ ├── textEditor.ts
│ │ │ │ │ ├── themes.ts
│ │ │ │ │ └── vscodeTypesShim.ts
│ │ │ │ ├── simpleMock.ts
│ │ │ │ ├── testUtils.spec.ts
│ │ │ │ └── testUtils.ts
│ │ │ ├── time.ts
│ │ │ ├── timeTravelScheduler.ts
│ │ │ ├── tokenizer.ts
│ │ │ ├── types.ts
│ │ │ ├── variableLengthQuantity.ts
│ │ │ └── vscodeVersion.ts
│ │ ├── node/
│ │ │ ├── crypto.ts
│ │ │ ├── jsonFile.ts
│ │ │ ├── ports.ts
│ │ │ ├── test/
│ │ │ │ ├── anomalyDetection.spec.ts
│ │ │ │ ├── debounce.spec.ts
│ │ │ │ ├── glob.spec.ts
│ │ │ │ ├── lock.spec.ts
│ │ │ │ ├── markdown.spec.ts
│ │ │ │ └── pathRedaction.spec.ts
│ │ │ └── worker.ts
│ │ ├── test/
│ │ │ └── node/
│ │ │ ├── errorMessage.spec.ts
│ │ │ └── variableLengthQuantity.spec.ts
│ │ └── vs/
│ │ ├── base/
│ │ │ ├── common/
│ │ │ │ ├── arrays.ts
│ │ │ │ ├── arraysFind.ts
│ │ │ │ ├── assert.ts
│ │ │ │ ├── async.ts
│ │ │ │ ├── buffer.ts
│ │ │ │ ├── cache.ts
│ │ │ │ ├── cancellation.ts
│ │ │ │ ├── charCode.ts
│ │ │ │ ├── codicons.ts
│ │ │ │ ├── codiconsLibrary.ts
│ │ │ │ ├── codiconsUtil.ts
│ │ │ │ ├── collections.ts
│ │ │ │ ├── date.ts
│ │ │ │ ├── diff/
│ │ │ │ │ ├── diff.ts
│ │ │ │ │ └── diffChange.ts
│ │ │ │ ├── equals.ts
│ │ │ │ ├── errors.ts
│ │ │ │ ├── event.ts
│ │ │ │ ├── extpath.ts
│ │ │ │ ├── filters.ts
│ │ │ │ ├── functional.ts
│ │ │ │ ├── glob.ts
│ │ │ │ ├── hash.ts
│ │ │ │ ├── htmlContent.ts
│ │ │ │ ├── iconLabels.ts
│ │ │ │ ├── iterator.ts
│ │ │ │ ├── lazy.ts
│ │ │ │ ├── lifecycle.ts
│ │ │ │ ├── linkedList.ts
│ │ │ │ ├── map.ts
│ │ │ │ ├── marshallingIds.ts
│ │ │ │ ├── mime.ts
│ │ │ │ ├── naturalLanguage/
│ │ │ │ │ └── korean.ts
│ │ │ │ ├── network.ts
│ │ │ │ ├── normalization.ts
│ │ │ │ ├── numbers.ts
│ │ │ │ ├── objects.ts
│ │ │ │ ├── observable.ts
│ │ │ │ ├── observableInternal/
│ │ │ │ │ ├── base.ts
│ │ │ │ │ ├── changeTracker.ts
│ │ │ │ │ ├── commonFacade/
│ │ │ │ │ │ ├── cancellation.ts
│ │ │ │ │ │ └── deps.ts
│ │ │ │ │ ├── debugLocation.ts
│ │ │ │ │ ├── debugName.ts
│ │ │ │ │ ├── experimental/
│ │ │ │ │ │ └── utils.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ ├── logging/
│ │ │ │ │ │ ├── consoleObservableLogger.ts
│ │ │ │ │ │ ├── debugGetDependencyGraph.ts
│ │ │ │ │ │ ├── debugger/
│ │ │ │ │ │ │ ├── debuggerApi.d.ts
│ │ │ │ │ │ │ ├── debuggerRpc.ts
│ │ │ │ │ │ │ ├── devToolsLogger.ts
│ │ │ │ │ │ │ ├── rpc.ts
│ │ │ │ │ │ │ └── utils.ts
│ │ │ │ │ │ └── logging.ts
│ │ │ │ │ ├── map.ts
│ │ │ │ │ ├── observables/
│ │ │ │ │ │ ├── baseObservable.ts
│ │ │ │ │ │ ├── constObservable.ts
│ │ │ │ │ │ ├── derived.ts
│ │ │ │ │ │ ├── derivedImpl.ts
│ │ │ │ │ │ ├── lazyObservableValue.ts
│ │ │ │ │ │ ├── observableFromEvent.ts
│ │ │ │ │ │ ├── observableSignal.ts
│ │ │ │ │ │ ├── observableSignalFromEvent.ts
│ │ │ │ │ │ ├── observableValue.ts
│ │ │ │ │ │ └── observableValueOpts.ts
│ │ │ │ │ ├── reactions/
│ │ │ │ │ │ ├── autorun.ts
│ │ │ │ │ │ └── autorunImpl.ts
│ │ │ │ │ ├── set.ts
│ │ │ │ │ ├── transaction.ts
│ │ │ │ │ └── utils/
│ │ │ │ │ ├── promise.ts
│ │ │ │ │ ├── runOnChange.ts
│ │ │ │ │ ├── utils.ts
│ │ │ │ │ ├── utilsCancellation.ts
│ │ │ │ │ └── valueWithChangeEvent.ts
│ │ │ │ ├── path.ts
│ │ │ │ ├── platform.ts
│ │ │ │ ├── process.ts
│ │ │ │ ├── resources.ts
│ │ │ │ ├── sequence.ts
│ │ │ │ ├── sseParser.ts
│ │ │ │ ├── stopwatch.ts
│ │ │ │ ├── stream.ts
│ │ │ │ ├── strings.ts
│ │ │ │ ├── symbols.ts
│ │ │ │ ├── ternarySearchTree.ts
│ │ │ │ ├── themables.ts
│ │ │ │ ├── types.ts
│ │ │ │ ├── uint.ts
│ │ │ │ ├── uri.ts
│ │ │ │ ├── uuid.ts
│ │ │ │ └── yaml.ts
│ │ │ └── node/
│ │ │ └── ports.ts
│ │ ├── base-common.d.ts
================================================
FILE CONTENTS
================================================
================================================
FILE: .agents/skills/launch/SKILL.md
================================================
---
name: launch
description: "Launch and automate VS Code Insiders with the Copilot Chat extension using agent-browser via Chrome DevTools Protocol. Use when you need to interact with the VS Code UI, automate the chat panel, test the extension UI, or take screenshots. Triggers include 'automate VS Code', 'interact with chat', 'test the UI', 'take a screenshot', 'launch with debugging'."
metadata:
allowed-tools: Bash(agent-browser:*), Bash(npx agent-browser:*)
---
# VS Code Extension Automation
Automate VS Code Insiders with the Copilot Chat extension using agent-browser. VS Code is built on Electron/Chromium and exposes a Chrome DevTools Protocol (CDP) port that agent-browser can connect to, enabling the same snapshot-interact workflow used for web pages.
## Prerequisites
- **`agent-browser` must be installed.** It's available in the project's devDependencies — run `npm install`. Use `npx agent-browser` if it's not on your PATH, or install globally with `npm install -g agent-browser`.
- **`code-insiders` is required.** This extension uses 58 proposed VS Code APIs and targets `vscode ^1.110.0-20260223`. VS Code Stable will **not** activate it — you must use VS Code Insiders.
- **The extension must be compiled first.** Use `npm run compile` for a one-shot build, or `npm run watch` for iterative development.
- **CSS selectors are internal implementation details.** Selectors like `.interactive-input-part`, `.monaco-editor`, and `.view-line` are VS Code internals that may change across versions. If automation breaks after a VS Code update, re-snapshot and check for selector changes.
## Core Workflow
1. **Build** the extension
2. **Launch** VS Code Insiders with the extension and remote debugging enabled
3. **Connect** agent-browser to the CDP port
4. **Snapshot** to discover interactive elements
5. **Interact** using element refs
6. **Re-snapshot** after navigation or state changes
> **📸 Take screenshots for a paper trail.** Use `agent-browser screenshot <path>` at key moments — after launch, before/after interactions, and when something goes wrong. Screenshots provide visual proof of what the UI looked like and are invaluable for debugging failures or documenting what was accomplished.
>
> Save screenshots inside `.vscode-ext-debug/screenshots/` (gitignored) using a timestamped subfolder so each run is isolated and nothing gets overwritten:
>
> ```bash
> # Create a timestamped folder for this run's screenshots
> SCREENSHOT_DIR=".vscode-ext-debug/screenshots/$(date +%Y-%m-%dT%H-%M-%S)"
> mkdir -p "$SCREENSHOT_DIR"
>
> # Windows (PowerShell):
> # $screenshotDir = ".vscode-ext-debug\screenshots\$(Get-Date -Format 'yyyy-MM-ddTHH-mm-ss')"
> # New-Item -ItemType Directory -Force -Path $screenshotDir
>
> # Save a screenshot (path is a positional argument — use ./ or absolute paths)
> # Bare filenames without ./ may be misinterpreted as CSS selectors
> agent-browser screenshot "$SCREENSHOT_DIR/after-launch.png"
> ```
```bash
# Build and launch with the extension
npm run compile
# Use a PERSISTENT user-data-dir so auth state is preserved across sessions.
# .vscode-ext-debug is relative to the project root — works in worktrees and is gitignored.
code-insiders --extensionDevelopmentPath="$PWD" --remote-debugging-port=9223 --user-data-dir="$PWD/.vscode-ext-debug"
# On Windows (PowerShell):
# code-insiders --extensionDevelopmentPath="$PWD" --remote-debugging-port=9223 --user-data-dir="$PWD\.vscode-ext-debug"
# Wait for VS Code to start, retry until connected
for i in 1 2 3 4 5; do agent-browser connect 9223 2>/dev/null && break || sleep 3; done
# Verify you're connected to the right target (not about:blank)
# If `tab` shows the wrong target, run `agent-browser close` and reconnect
agent-browser tab
agent-browser snapshot -i
```
## Connecting
```bash
# Connect to a specific port
agent-browser connect 9223
# Or use --cdp on each command
agent-browser --cdp 9223 snapshot -i
# Auto-discover a running Chromium-based app
agent-browser --auto-connect snapshot -i
```
After `connect`, all subsequent commands target the connected app without needing `--cdp`.
## Tab Management
VS Code uses multiple webviews internally. Use tab commands to list and switch between them:
```bash
# List all available targets (windows, webviews, etc.)
agent-browser tab
# Switch to a specific tab by index
agent-browser tab 2
# Switch by URL pattern
agent-browser tab --url "*settings*"
```
## Launching VS Code Extensions for Debugging
To debug a VS Code extension via agent-browser, launch VS Code Insiders with `--extensionDevelopmentPath` pointing to your extension source and `--remote-debugging-port` for CDP. Use `--user-data-dir` to avoid conflicting with an already-running VS Code instance.
```bash
# Build the extension first (from the repo root)
npm run compile
# Launch VS Code Insiders with the extension and CDP
# IMPORTANT: Use a persistent directory (not /tmp) so auth state is preserved.
# .vscode-ext-debug is relative to the project root — works in worktrees and is gitignored.
code-insiders \
--extensionDevelopmentPath="$PWD" \
--remote-debugging-port=9223 \
--user-data-dir="$PWD/.vscode-ext-debug"
# Wait for VS Code to start, retry until connected
for i in 1 2 3 4 5; do agent-browser connect 9223 2>/dev/null && break || sleep 3; done
# Verify you're connected to the right target (not about:blank)
# If `tab` shows the wrong target, run `agent-browser close` and reconnect
agent-browser tab
agent-browser snapshot -i
```
**Key flags:**
- `--extensionDevelopmentPath=<path>` — loads your extension from source (must be compiled first). Use `$PWD` when running from the repo root.
- `--remote-debugging-port=9223` — enables CDP (use 9223 to avoid conflicts with other apps on 9222)
- `--user-data-dir=<path>` — uses a separate profile so it starts a new process instead of sending to an existing VS Code instance. **Always use a persistent path** (e.g., `$PWD/.vscode-ext-debug`) rather than `/tmp/...` so authentication, settings, and extension state survive across sessions.
**Without `--user-data-dir`**, VS Code detects the running instance, forwards the args to it, and exits immediately — you'll see "Sent env to running instance. Terminating..." and CDP never starts.
> **⚠️ Authentication is required.** The Copilot Chat extension needs an authenticated GitHub session to function. Using a temp directory (e.g., `/tmp/...`) creates a fresh profile with no auth — the agent will hit a "Sign in to use Copilot" wall and model resolution will fail with "Language model unavailable."
>
> **Always use a persistent `--user-data-dir`** like `$PWD/.vscode-ext-debug`. On first use, launch once and sign in manually. Subsequent launches will reuse the auth session.
## Restarting After Code Changes
**After making changes to the extension source code, you must restart VS Code to pick up the new build.** The extension host loads the compiled bundle at startup — changes are not hot-reloaded.
### Restart Workflow
1. **Recompile** the extension
2. **Kill** the running VS Code instance (the one using your debug user-data-dir)
3. **Relaunch** VS Code with the same flags
```bash
# 1. Recompile
npm run compile
# 2. Kill the VS Code instance tied to this project's debug profile, then relaunch
# macOS / Linux:
kill $(ps ax -ww -o pid,command | grep "$PWD/.vscode-ext-debug" | grep -v grep | awk '{print $1}' | head -1)
# Windows (PowerShell):
# Get-CimInstance Win32_Process | Where-Object { $_.CommandLine -like "*$PWD\.vscode-ext-debug*" } | ForEach-Object { Stop-Process -Id $_.ProcessId }
# 3. Relaunch
code-insiders \
--extensionDevelopmentPath="$PWD" \
--remote-debugging-port=9223 \
--user-data-dir="$PWD/.vscode-ext-debug"
# 4. Reconnect agent-browser
for i in 1 2 3 4 5; do agent-browser connect 9223 2>/dev/null && break || sleep 3; done
agent-browser snapshot -i
```
> **Tip:** If you're iterating frequently, run `npm run watch` in a separate terminal so compilation happens automatically. You still need to kill and relaunch VS Code to load the new bundle.
## Interacting with Monaco Editor (Chat Input, Code Editors)
VS Code uses Monaco Editor for all text inputs including the Copilot Chat input. Monaco editors appear as textboxes in the accessibility snapshot but require specific agent-browser commands to interact with.
### What Works
#### `type @ref` — The Best Approach
The `type` command with a snapshot ref handles focus and input in one step:
```bash
# Snapshot to find the chat input ref
agent-browser snapshot -i
# Look for: textbox "The editor is not accessible..." [ref=e51]
# Type directly using the ref — handles focus automatically
agent-browser type @e51 "Hello from George!"
# Send the message
agent-browser press Enter
# Wait for the response to complete before re-snapshotting.
# Poll until the "Stop generating" button disappears:
for i in $(seq 1 30); do
agent-browser snapshot -i 2>/dev/null | grep -q "Stop generating" || break
sleep 1
done
agent-browser snapshot -i
```
This is the simplest and most reliable method. It works for both the main editor chat input and the sidebar chat panel.
> **Tip:** If `type @ref` silently drops text (the editor stays empty), the ref may be stale or the editor not yet ready. Re-snapshot to get a fresh ref and try again. You can verify text was entered using the snippet in "Verifying Text in Monaco" below.
#### `keyboard type` / `keyboard inserttext` — After Focus
If focus is already on a Monaco editor, `keyboard type` and `keyboard inserttext` both work:
> **⚠️ Warning:** `keyboard type` can hang indefinitely in some focus states (e.g., after JS mouse events). If it doesn't return within a few seconds, interrupt it and fall back to `press` for individual keystrokes.
```bash
# Focus first (via type @ref, or JS mouse events, or a prior interaction)
agent-browser type @e51 ""
# Then keyboard type works for subsequent input
agent-browser keyboard type "More text here"
agent-browser keyboard inserttext "And this too"
```
#### `press` — Individual Keystrokes
Always works when focus is on a Monaco editor. Useful for special keys, keyboard shortcuts, and as a universal fallback for typing text character by character:
```bash
# Type text character by character (works on all builds)
agent-browser press H
agent-browser press e
agent-browser press l
agent-browser press l
agent-browser press o
agent-browser press Space # Use "Space" for spaces
# Select all
# macOS:
agent-browser press Meta+a
# Linux / Windows:
agent-browser press Control+a
agent-browser press Backspace # Delete selection
agent-browser press Enter # Send message / new line
# Send to new chat
# macOS:
agent-browser press Meta+Shift+Enter
# Linux / Windows:
agent-browser press Control+Shift+Enter
```
### What Does NOT Work
| Method | Result | Reason |
|--------|--------|--------|
| `click @ref` | "Element blocked by another element" | Monaco overlays a transparent div over the textarea |
| `fill @ref "text"` | "Element not found or not visible" | The textbox is not a standard fillable input |
| `document.execCommand("insertText")` via `eval` | No effect | Monaco intercepts and discards execCommand |
| Setting `textarea.value` + dispatching `input` event via `eval` | No effect | Monaco doesn't read from the textarea's value property |
### Fallback: Focus via JavaScript Mouse Events
If `type @ref` doesn't work (e.g., ref is stale), you can focus the editor via JavaScript:
```bash
agent-browser eval '
(() => {
const inputPart = document.querySelector(".interactive-input-part");
const editor = inputPart.querySelector(".monaco-editor");
const rect = editor.getBoundingClientRect();
const x = rect.x + rect.width / 2;
const y = rect.y + rect.height / 2;
editor.dispatchEvent(new MouseEvent("mousedown", { bubbles: true, clientX: x, clientY: y }));
editor.dispatchEvent(new MouseEvent("mouseup", { bubbles: true, clientX: x, clientY: y }));
editor.dispatchEvent(new MouseEvent("click", { bubbles: true, clientX: x, clientY: y }));
return "activeElement: " + document.activeElement?.className;
})()'
# After JS focus, keyboard type and press work
agent-browser keyboard type "Text after JS focus"
```
After JS mouse events, `document.activeElement` becomes a `DIV` with class `native-edit-context` — this is VS Code's native text editing surface.
### Verifying Text in Monaco
Monaco renders text in `.view-line` elements, not the textarea:
```bash
agent-browser eval '
(() => {
const inputPart = document.querySelector(".interactive-input-part");
return Array.from(inputPart.querySelectorAll(".view-line")).map(vl => vl.textContent).join("|");
})()'
```
### Clearing Monaco Input
```bash
# macOS:
agent-browser press Meta+a
# Linux / Windows:
agent-browser press Control+a
agent-browser press Backspace
```
## Troubleshooting
### "Connection refused" or "Cannot connect"
- Make sure VS Code Insiders was launched with `--remote-debugging-port=9223`
- If VS Code was already running, quit and relaunch with the flag
- Check that the port isn't in use by another process:
- macOS / Linux: `lsof -i :9223`
- Windows: `netstat -ano | findstr 9223`
### Elements not appearing in snapshot
- VS Code uses multiple webviews. Use `agent-browser tab` to list targets and switch to the right one
- Use `agent-browser snapshot -i -C` to include cursor-interactive elements (divs with onclick handlers)
### Cannot type in Monaco inputs
- Standard `click` and `fill` don't work on Monaco editors — see the "Interacting with Monaco Editor" section above for the full compatibility matrix
- `type @ref` is the best approach; individual `press` commands work everywhere; `keyboard type` and `keyboard inserttext` work after focus is established
### Screenshots fail with "Permission denied" (macOS)
If `agent-browser screenshot` returns "Permission denied", your terminal needs Screen Recording permission. Grant it in **System Settings → Privacy & Security → Screen Recording**. As a fallback, use the `eval` verification snippet to confirm text was entered — this doesn't require screen permissions.
## Cleanup
**Always kill the debug VS Code instance when you're done.** Leaving it running wastes resources and holds the CDP port.
```bash
# Disconnect agent-browser
agent-browser close
# Kill the debug VS Code instance
# macOS / Linux:
kill $(ps ax -ww -o pid,command | grep "$PWD/.vscode-ext-debug" | grep -v grep | awk '{print $1}' | head -1)
# Windows (PowerShell):
# Get-CimInstance Win32_Process | Where-Object { $_.CommandLine -like "*$PWD\.vscode-ext-debug*" } | ForEach-Object { Stop-Process -Id $_.ProcessId }
```
================================================
FILE: .claude/agents/anthropic-sdk-upgrader.md
================================================
---
name: anthropic-sdk-upgrader
description: "Use this agent when the user needs to upgrade Anthropic SDK packages. This includes: upgrading @anthropic-ai/sdk or @anthropic-ai/claude-agent-sdk to newer versions, migrating between SDK versions, resolving SDK-related dependency conflicts, updating SDK types and interfaces, or asking about SDK upgrade procedures. Examples: 'Upgrade the Anthropic SDK to the latest version', 'Help me migrate to the latest claude-agent-sdk', 'What's the process for upgrading Anthropic packages?'"
model: opus
---
You are an expert at upgrading Anthropic SDK packages in the vscode-copilot-chat project.
## Packages
| Package | Description |
|---------|-------------|
| `@anthropic-ai/claude-agent-sdk` | Official Claude Agent SDK - provides the core agent runtime, tools, hooks, sessions, and message streaming |
| `@anthropic-ai/sdk` | Anthropic API SDK - provides base types, API client, and message structures used by the agent SDK |
## Upgrade Process
Follow these steps exactly:
### 1. Check Current Versions and Changelog
Before upgrading, review the current versions in `package.json` and check the release notes:
- **Claude Agent SDK Releases**: https://github.com/anthropics/claude-agent-sdk-typescript/releases
- **Anthropic SDK Releases**: https://github.com/anthropics/anthropic-sdk-typescript/releases
### 2. Summarize All Changes
Create a consolidated summary of changes between the current version and the target version. Group changes by category, not by individual version:
**Summary Format:**
```markdown
### `@anthropic-ai/package-name` (oldVersion → newVersion)
#### Features
- **Category:** Description of new feature or capability
#### Bug Fixes
- Description of what was fixed
#### Breaking Changes
- **Old API → New API**: Description of what changed and how to migrate
```
**How to Create the Summary:**
1. **Read the GitHub Release Notes**: Go through each release between your versions
2. **Consolidate by Category**: Group all features together, all bug fixes together, etc.
3. **Identify Breaking Changes**: Look for:
- Removed or renamed exports
- Changed function signatures
- Modified type definitions
- Deprecated APIs that have been removed
4. **Document Migration Steps**: For breaking changes, include the old and new patterns
5. **Check Peer Dependencies**: Note if the new version requires different peer dependencies
### 3. List Important Changes
Categorize changes by impact level:
**Critical (Must Address Before Merge):**
- Breaking API changes that will cause compilation errors
- Removed types or functions currently in use
- Changed behavior of core functionality (sessions, streaming, tools)
**Important (Should Address):**
- Deprecated APIs that should be migrated
- New recommended patterns replacing old ones
- Performance improvements that require code changes
**Nice to Have (Can Address Later):**
- New optional features
- Additional type exports
- Enhanced error messages
### 4. Update Package Versions
```bash
# Update to latest
npm install @anthropic-ai/claude-agent-sdk @anthropic-ai/sdk
```
### 5. Detect API Surface Changes
After updating, diff the old and new type definitions to detect API changes that may not cause compilation errors but are important to know about (new parameters, new functions, deprecated APIs, etc.).
**Steps:**
1. **Snapshot before upgrading**: Before running `npm install` in step 4, copy the current type definitions to a temp directory:
```bash
mkdir -p /tmp/anthropic-sdk-old
cp -r node_modules/@anthropic-ai/sdk/*.d.ts node_modules/@anthropic-ai/sdk/resources/*.d.ts /tmp/anthropic-sdk-old/ 2>/dev/null
cp -r node_modules/@anthropic-ai/claude-agent-sdk/*.d.ts /tmp/anthropic-sdk-old/ 2>/dev/null
```
> **Important**: This snapshot must be taken *before* step 4's `npm install`.
2. **Diff the type definitions**: After `npm install`, compare the old and new `.d.ts` files:
```bash
# Diff the Anthropic SDK types
for f in node_modules/@anthropic-ai/sdk/*.d.ts node_modules/@anthropic-ai/sdk/resources/*.d.ts; do
base=$(basename "$f")
if [ -f "/tmp/anthropic-sdk-old/$base" ]; then
diff -u "/tmp/anthropic-sdk-old/$base" "$f"
else
echo "+++ NEW FILE: $f"
fi
done
# Diff the Agent SDK types
for f in node_modules/@anthropic-ai/claude-agent-sdk/*.d.ts; do
base=$(basename "$f")
if [ -f "/tmp/anthropic-sdk-old/$base" ]; then
diff -u "/tmp/anthropic-sdk-old/$base" "$f"
else
echo "+++ NEW FILE: $f"
fi
done
```
3. **Analyze the diff and produce a report** with the following categories:
**New Exports** — Functions, classes, types, or constants that were added:
- New exported functions or methods
- New type/interface definitions
- New enum values
**New Parameters** — Optional or required parameters added to existing functions:
- New optional fields on existing option/config types
- New required parameters (these are breaking changes — flag them as critical)
- New overloads of existing functions
**Changed Signatures** — Modifications to existing function/method signatures:
- Parameter type changes (e.g., `string` → `string | string[]`)
- Return type changes
- Generic type parameter changes
**Removed or Renamed** — Items that were removed or renamed:
- Removed exports (breaking — flag as critical)
- Renamed types/functions (breaking — flag as critical)
- Removed fields from interfaces
**Deprecations** — Items newly marked as `@deprecated`:
- Functions or types with new `@deprecated` JSDoc tags
4. **Cross-reference with our usage**: For each change found, check whether the codebase currently uses the affected API:
```bash
# Example: if `createSession` gained a new parameter, check our usage
grep -rn "createSession" src/extension/agents/claude/
```
Flag changes that affect APIs we actively use as higher priority.
5. **Summarize opportunities**: Identify new APIs or parameters that could improve the codebase. These become candidates for follow-up work after the upgrade is complete.
6. **Clean up**:
```bash
rm -rf /tmp/anthropic-sdk-old
```
### 6. Fix Compilation Errors
After updating, check for compilation errors:
```bash
npm run compile
```
Address any type errors in the following key files:
- `src/extension/agents/claude/node/claudeCodeAgent.ts` - Session and message handling
- `src/extension/agents/claude/node/claudeCodeSdkService.ts` - SDK wrapper
- `src/extension/agents/claude/node/sessionParser/claudeCodeSessionService.ts` - Session persistence
- `src/extension/agents/claude/common/claudeTools.ts` - Tool type definitions
- `src/extension/agents/claude/node/hooks/*.ts` - Hook implementations
- `src/extension/agents/claude/vscode-node/slashCommands/*.ts` - Slash command handlers
- `src/extension/agents/claude/node/toolPermissionHandlers/*.ts` - Permission handlers
### 7. Run Tests
After upgrading, run the Claude-related unit tests to verify nothing is broken:
```bash
# Run all Claude agent tests
npm run test:unit -- --testPathPattern="agents/claude"
```
Fix any test failures before proceeding. Common test files to check:
- `src/extension/agents/claude/node/test/claudeCodeAgent.spec.ts`
- `src/extension/agents/claude/node/test/claudeCodeSessionService.spec.ts`
- `src/extension/agents/claude/node/sessionParser/test/*.spec.ts`
### 8. Update Documentation
If needed, update documentation in the codebase:
1. Update `src/extension/agents/claude/AGENTS.md` if any architectural changes occurred
2. Update type definitions in `common/claudeTools.ts` if tools changed
3. Document any new features or capabilities added
4. Update the "Official Claude Agent SDK Documentation" links if URLs changed
### 9. Commit with a Detailed Message
Create a commit message that documents the upgrade clearly. Include:
1. **Package version changes** - Both old and new versions
2. **Features** - Notable new capabilities added
3. **Bug fixes** - Important fixes included
4. **Breaking changes** - What changed and how it was addressed in the code
**Example commit message:**
```
Update Anthropic SDK packages
### `@anthropic-ai/sdk` (0.71.2 → 0.72.1)
#### Features
- Structured Outputs support in Messages API
- MCP SDK helper functions
#### Breaking Changes
- `output_format` → `output_config` parameter migration
### `@anthropic-ai/claude-agent-sdk` (0.2.5 → 0.2.31)
#### Features
- **Query interface:** Added `close()` method, `reconnectMcpServer()`, `toggleMcpServer()` methods
- **Sessions:** Added `listSessions()` function for discovering resumable sessions
- **MCP:** Added `config`, `scope`, `tools` fields and `disabled` status to `McpServerStatus`
#### Bug Fixes
- Fixed `mcpServerStatus()` to include tools from SDK and dynamically-added MCP servers
- Fixed PermissionRequest hooks in SDK mode
#### Breaking Changes
- `KillShellInput` → `TaskStopInput`: Updated type mapping in claudeTools.ts
```
## Troubleshooting Common Issues
**Type Errors After Upgrade:**
- Check if types were renamed (common: `Message` → `ContentBlock`, etc.)
- Look for removed type exports that need new imports
- Verify generic type parameters haven't changed
**Session Loading Failures:**
- Session file format may have changed between major versions
- Check `ClaudeCodeSessionService` for compatibility issues
- May need to clear old session files during major upgrades
**Hook Registration Failures:**
- Hook event names may have changed
- Check `HookEvent` type for valid event strings
- Verify hook callback signatures match new SDK expectations
**Tool Execution Errors:**
- Tool input schemas may have changed
- Check tool result handling for new error types
- Verify tool confirmation flow hasn't changed
================================================
FILE: .devcontainer/devcontainer-lock.json
================================================
{
"features": {
"ghcr.io/devcontainers/features/azure-cli:1": {
"version": "1.2.7",
"resolved": "ghcr.io/devcontainers/features/azure-cli@sha256:91ffef641dbe5045b9982921487d743f7a3047cc05efd9226345833f446c8bce",
"integrity": "sha256:91ffef641dbe5045b9982921487d743f7a3047cc05efd9226345833f446c8bce"
},
"ghcr.io/devcontainers/features/desktop-lite:1": {
"version": "1.2.8",
"resolved": "ghcr.io/devcontainers/features/desktop-lite@sha256:14ac23fd59afab939e6562ba6a1f42a659a805e4c574a1be23b06f28eb3b0b71",
"integrity": "sha256:14ac23fd59afab939e6562ba6a1f42a659a805e4c574a1be23b06f28eb3b0b71"
},
"ghcr.io/devcontainers/features/docker-in-docker:2.16.1": {
"version": "2.16.1",
"resolved": "ghcr.io/devcontainers/features/docker-in-docker@sha256:ce078b7bf7d9ef3bcb9813b32103795d8d72172446890b64772cbe1dec6baafd",
"integrity": "sha256:ce078b7bf7d9ef3bcb9813b32103795d8d72172446890b64772cbe1dec6baafd"
},
"ghcr.io/devcontainers/features/dotnet:2": {
"version": "2.2.2",
"resolved": "ghcr.io/devcontainers/features/dotnet@sha256:06f4ef2c23792da4832a74da195d478d8f64316c45c7624a0367d6bd5c3fc500",
"integrity": "sha256:06f4ef2c23792da4832a74da195d478d8f64316c45c7624a0367d6bd5c3fc500"
},
"ghcr.io/devcontainers/features/git-lfs:1": {
"version": "1.2.5",
"resolved": "ghcr.io/devcontainers/features/git-lfs@sha256:71c2b371cf12ab7fcec47cf17369c6f59156100dad9abf9e4c593049d789de72",
"integrity": "sha256:71c2b371cf12ab7fcec47cf17369c6f59156100dad9abf9e4c593049d789de72"
},
"ghcr.io/devcontainers/features/python:1": {
"version": "1.7.1",
"resolved": "ghcr.io/devcontainers/features/python@sha256:cf9b6d879790a594b459845b207c5e1762a0c8f954bb8033ff396e497f9c301b",
"integrity": "sha256:cf9b6d879790a594b459845b207c5e1762a0c8f954bb8033ff396e497f9c301b"
}
}
}
================================================
FILE: .devcontainer/devcontainer.json
================================================
// For format details, see https://aka.ms/devcontainer.json. For config options, see the
// README at: https://github.com/devcontainers/templates/tree/main/src/typescript-node
{
"name": "Node.js & TypeScript",
"image": "mcr.microsoft.com/devcontainers/typescript-node:4-24",
"features": {
"ghcr.io/devcontainers/features/docker-in-docker:2.16.1": {
"moby": false
},
"ghcr.io/devcontainers/features/azure-cli:1": {},
"ghcr.io/devcontainers/features/python:1": {},
"ghcr.io/devcontainers/features/dotnet:2": {},
"ghcr.io/devcontainers/features/desktop-lite:1": {},
"ghcr.io/devcontainers/features/git-lfs:1": {}
},
"containerEnv": {
"DEBIAN_FRONTEND": "noninteractive"
},
"customizations": {
"vscode": {
"extensions": [
"dbaeumer.vscode-eslint",
"esbenp.prettier-vscode",
"connor4312.esbuild-problem-matchers",
"GitHub.copilot@prerelease",
"ms-vscode.extension-test-runner"
]
}
},
"hostRequirements": {
"cpus": 4
},
"containerUser": "node",
"onCreateCommand": {
"initGitLfs": "git lfs install --force",
"npmInstall": "npm install || true"
}
}
================================================
FILE: .esbuild.ts
================================================
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import * as watcher from '@parcel/watcher';
import * as esbuild from 'esbuild';
import * as fs from 'fs';
import { copyFile, mkdir, readdir, rename } from 'fs/promises';
import { glob } from 'glob';
import * as path from 'path';
const REPO_ROOT = import.meta.dirname;
const isWatch = process.argv.includes('--watch');
const isDev = process.argv.includes('--dev');
const isPreRelease = process.argv.includes('--prerelease');
const generateSourceMaps = process.argv.includes('--sourcemaps');
const sourceMapOutDir = './dist-sourcemaps';
const baseBuildOptions = {
bundle: true,
logLevel: 'info',
minify: !isDev,
outdir: './dist',
// In dev mode, use linked source maps for debugging.
// With --sourcemaps flag, generate external source maps (no sourceMappingURL comment in output).
sourcemap: isDev ? 'linked' : (generateSourceMaps ? 'external' : false),
sourcesContent: false,
treeShaking: true
} satisfies esbuild.BuildOptions;
const baseNodeBuildOptions = {
...baseBuildOptions,
external: [
'./package.json',
'./.vscode-test.mjs',
'playwright',
'keytar',
'@azure/functions-core',
'applicationinsights-native-metrics',
'@opentelemetry/instrumentation',
'@azure/opentelemetry-instrumentation-azure-sdk',
'electron', // this is for simulation workbench,
'sqlite3',
'node-pty', // Required by @github/copilot
'@github/copilot',
...(isDev ? [] : ['dotenv', 'source-map-support'])
],
platform: 'node',
mainFields: ["module", "main"], // needed for jsonc-parser,
define: {
'process.env.APPLICATIONINSIGHTS_CONFIGURATION_CONTENT': JSON.stringify(JSON.stringify({
proxyHttpUrl: "",
proxyHttpsUrl: ""
}))
},
} satisfies esbuild.BuildOptions;
const webviewBuildOptions = {
...baseBuildOptions,
platform: 'browser',
target: 'es2024', // Electron 34 -> Chrome 132 -> ES2024
entryPoints: [
{ in: 'src/extension/completions-core/vscode-node/extension/src/copilotPanel/webView/suggestionsPanelWebview.ts', out: 'suggestionsPanelWebview' },
],
} satisfies esbuild.BuildOptions;
const nodeExtHostTestGlobs = [
'src/**/vscode/**/*.test.{ts,tsx}',
'src/**/vscode-node/**/*.test.{ts,tsx}',
// deprecated
'src/extension/**/*.test.{ts,tsx}'
];
const testBundlePlugin: esbuild.Plugin = {
name: 'testBundlePlugin',
setup(build) {
build.onResolve({ filter: /[\/\\]test-extension\.ts$/ }, args => {
if (args.kind !== 'entry-point') {
return;
}
return { path: path.resolve(args.path) };
});
build.onLoad({ filter: /[\/\\]test-extension\.ts$/ }, async args => {
let files = await glob(nodeExtHostTestGlobs, { cwd: REPO_ROOT, posix: true, ignore: ['src/extension/completions-core/**/*'] });
files = files.map(f => path.posix.relative('src', f));
if (files.length === 0) {
throw new Error('No extension tests found');
}
return {
contents: files
.map(f => `require('./${f}');`)
.join(''),
watchDirs: files.map(path.dirname),
watchFiles: files,
};
});
}
};
const nodeExtHostSanityTestGlobs = [
'src/**/vscode-node/**/*.sanity-test.{ts,tsx}',
];
const sanityTestBundlePlugin: esbuild.Plugin = {
name: 'sanityTestBundlePlugin',
setup(build) {
build.onResolve({ filter: /[\/\\]sanity-test-extension\.ts$/ }, args => {
if (args.kind !== 'entry-point') {
return;
}
return { path: path.resolve(args.path) };
});
build.onLoad({ filter: /[\/\\]sanity-test-extension\.ts$/ }, async args => {
let files = await glob(nodeExtHostSanityTestGlobs, { cwd: REPO_ROOT, posix: true, ignore: ['src/extension/completions-core/**/*'] });
files = files.map(f => path.posix.relative('src', f));
if (files.length === 0) {
throw new Error('No extension tests found');
}
return {
contents: files
.map(f => `require('./${f}');`)
.join(''),
watchDirs: files.map(path.dirname),
watchFiles: files,
};
});
}
};
const importMetaPlugin: esbuild.Plugin = {
name: 'claudeAgentSdkImportMetaPlugin',
setup(build) {
// Handle import.meta.url in @anthropic-ai/claude-agent-sdk package
build.onLoad({ filter: /node_modules[\/\\]@anthropic-ai[\/\\]claude-agent-sdk[\/\\].*\.mjs$/ }, async (args) => {
const contents = await fs.promises.readFile(args.path, 'utf8');
return {
contents: contents.replace(
/import\.meta\.url/g,
'require("url").pathToFileURL(__filename).href'
),
loader: 'js'
};
});
}
};
const shimVsCodeTypesPlugin: esbuild.Plugin = {
name: 'shimVsCodeTypesPlugin',
setup(build) {
// Create a virtual module that will try to require vscode at runtime
build.onResolve({ filter: /^vscode$/ }, args => {
return {
path: 'vscode-dynamic',
namespace: 'vscode-fallback'
};
});
build.onLoad({ filter: /^vscode-dynamic$/, namespace: 'vscode-fallback' }, () => {
return {
contents: `
let vscode;
// See test/simulationExtension/extension.js for where and why this is created.
if (typeof COPILOT_SIMULATION_VSCODE !== 'undefined') {
vscode = COPILOT_SIMULATION_VSCODE;
} else {
try {
vscode = eval('require(' + JSON.stringify('vscode') + ')');
} catch (e) {
vscode = require('./src/util/common/test/shims/vscodeTypesShim.ts');
}
}
module.exports = vscode;
`,
resolveDir: REPO_ROOT
};
});
}
};
const nodeExtHostBuildOptions = {
...baseNodeBuildOptions,
entryPoints: [
{ in: './src/extension/extension/vscode-node/extension.ts', out: 'extension' },
{ in: './src/platform/parser/node/parserWorker.ts', out: 'worker2' },
{ in: './src/platform/tokenizer/node/tikTokenizerWorker.ts', out: 'tikTokenizerWorker' },
{ in: './src/platform/diff/node/diffWorkerMain.ts', out: 'diffWorker' },
{ in: './src/platform/tfidf/node/tfidfWorker.ts', out: 'tfidfWorker' },
{ in: './src/extension/onboardDebug/node/copilotDebugWorker/index.ts', out: 'copilotDebugCommand' },
{ in: './src/extension/chatSessions/vscode-node/copilotCLIShim.ts', out: 'copilotCLIShim' },
{ in: './src/test-extension.ts', out: 'test-extension' },
{ in: './src/sanity-test-extension.ts', out: 'sanity-test-extension' },
],
loader: { '.ps1': 'text' },
plugins: [testBundlePlugin, sanityTestBundlePlugin, importMetaPlugin],
external: [
...baseNodeBuildOptions.external,
'vscode'
]
} satisfies esbuild.BuildOptions;
const webExtHostBuildOptions = {
...baseBuildOptions,
platform: 'browser',
entryPoints: [
{ in: './src/extension/extension/vscode-worker/extension.ts', out: 'web' },
],
format: 'cjs', // Necessary to export activate function from bundle for extension
external: [
'vscode',
'http',
]
} satisfies esbuild.BuildOptions;
const nodeExtHostSimulationTestOptions = {
...nodeExtHostBuildOptions,
outdir: '.vscode/extensions/test-extension/dist',
entryPoints: [
{ in: '.vscode/extensions/test-extension/main.ts', out: './simulation-extension' }
]
} satisfies esbuild.BuildOptions;
const nodeSimulationBuildOptions = {
...baseNodeBuildOptions,
entryPoints: [
{ in: './test/simulationMain.ts', out: 'simulationMain' },
],
plugins: [testBundlePlugin, shimVsCodeTypesPlugin],
external: [
...baseNodeBuildOptions.external,
]
} satisfies esbuild.BuildOptions;
const nodeSimulationWorkbenchUIBuildOptions = {
...baseNodeBuildOptions,
platform: 'browser', // @ulugbekna: important to target 'browser' for correct bundling using 'window'
mainFields: ["browser", "module", "main"],
entryPoints: [
{ in: './test/simulation/workbench/simulationWorkbench.tsx', out: 'simulationWorkbench' },
],
alias: {
'vscode': './src/util/common/test/shims/vscodeTypesShim.ts'
},
external: [
...baseNodeBuildOptions.external,
'../../node_modules/monaco-editor/*',
// @ulugbekna: libs provided by node that need to be specified manually because of 'platform' is set to 'browser'
'fs',
'path',
'readline',
'child_process',
'http',
'assert',
],
} satisfies esbuild.BuildOptions;
async function typeScriptServerPluginPackageJsonInstall(): Promise<void> {
await mkdir('./node_modules/@vscode/copilot-typescript-server-plugin', { recursive: true });
const source = path.join(import.meta.dirname, './src/extension/typescriptContext/serverPlugin/package.json');
const destination = path.join(import.meta.dirname, './node_modules/@vscode/copilot-typescript-server-plugin/package.json');
try {
await copyFile(source, destination);
} catch (error) {
console.error('Error copying package.json:', error);
}
}
const typeScriptServerPluginBuildOptions = {
bundle: true,
format: 'cjs',
// keepNames: true,
logLevel: 'info',
minify: !isDev,
outdir: './node_modules/@vscode/copilot-typescript-server-plugin/dist',
platform: 'node',
sourcemap: isDev ? 'linked' : false,
sourcesContent: false,
treeShaking: true,
external: [
"typescript",
"typescript/lib/tsserverlibrary"
],
entryPoints: [
{ in: './src/extension/typescriptContext/serverPlugin/src/node/main.ts', out: 'main' },
]
} satisfies esbuild.BuildOptions;
/**
* Moves all .map files from the output directories to a separate source maps directory.
* This keeps source maps out of the packaged extension while making them available for upload.
*/
async function moveSourceMapsToSeparateDir(): Promise<void> {
if (!generateSourceMaps) {
return;
}
const outputDirs = [
'./dist',
'./node_modules/@vscode/copilot-typescript-server-plugin/dist',
];
await mkdir(sourceMapOutDir, { recursive: true });
for (const dir of outputDirs) {
try {
const files = await readdir(dir);
for (const file of files) {
if (file.endsWith('.map')) {
const sourcePath = path.join(dir, file);
// Prefix with directory name to avoid collisions
const prefix = dir === './dist' ? '' : 'ts-plugin-';
const destPath = path.join(sourceMapOutDir, prefix + file);
await rename(sourcePath, destPath);
console.log(`Moved source map: ${sourcePath} -> ${destPath}`);
}
}
} catch (error) {
// Directory might not exist in some build configurations
console.warn(`Could not process directory ${dir}:`, error);
}
}
}
async function main() {
if (!isDev) {
applyPackageJsonPatch(isPreRelease);
}
await typeScriptServerPluginPackageJsonInstall();
if (isWatch) {
const contexts: esbuild.BuildContext[] = [];
const nodeExtHostContext = await esbuild.context(nodeExtHostBuildOptions);
contexts.push(nodeExtHostContext);
const webExtHostContext = await esbuild.context(webExtHostBuildOptions);
contexts.push(webExtHostContext);
const nodeSimulationContext = await esbuild.context(nodeSimulationBuildOptions);
contexts.push(nodeSimulationContext);
const nodeSimulationWorkbenchUIContext = await esbuild.context(nodeSimulationWorkbenchUIBuildOptions);
contexts.push(nodeSimulationWorkbenchUIContext);
const nodeExtHostSimulationContext = await esbuild.context(nodeExtHostSimulationTestOptions);
contexts.push(nodeExtHostSimulationContext);
const typeScriptServerPluginContext = await esbuild.context(typeScriptServerPluginBuildOptions);
contexts.push(typeScriptServerPluginContext);
let debounce: NodeJS.Timeout | undefined;
const rebuild = async () => {
if (debounce) {
clearTimeout(debounce);
}
debounce = setTimeout(async () => {
console.log('[watch] build started');
for (const ctx of contexts) {
try {
await ctx.cancel();
await ctx.rebuild();
} catch (error) {
console.error('[watch]', error);
}
}
console.log('[watch] build finished');
}, 100);
};
watcher.subscribe(REPO_ROOT, (err, events) => {
for (const event of events) {
console.log(`File change detected: ${event.path}`);
}
rebuild();
}, {
ignore: [
`**/.git/**`,
`**/.simulation/**`,
`**/test/outcome/**`,
`.vscode-test/**`,
`**/.venv/**`,
`**/dist/**`,
`**/node_modules/**`,
`**/*.txt`,
`**/baseline.json`,
`**/baseline.old.json`,
`**/*.w.json`,
'**/*.sqlite',
'**/*.sqlite-journal',
'test/aml/out/**'
]
});
rebuild();
} else {
await Promise.all([
esbuild.build(nodeExtHostBuildOptions),
esbuild.build(webExtHostBuildOptions),
esbuild.build(nodeSimulationBuildOptions),
esbuild.build(nodeSimulationWorkbenchUIBuildOptions),
esbuild.build(nodeExtHostSimulationTestOptions),
esbuild.build(typeScriptServerPluginBuildOptions),
esbuild.build(webviewBuildOptions),
]);
// Move source maps to separate directory so they're not packaged with the extension
await moveSourceMapsToSeparateDir();
}
}
function applyPackageJsonPatch(isPreRelease: boolean) {
const packagejsonPath = path.join(import.meta.dirname, './package.json');
const json = JSON.parse(fs.readFileSync(packagejsonPath).toString());
const newProps: any = {
buildType: 'prod',
isPreRelease,
};
const patchedPackageJson = Object.assign(json, newProps);
// Remove fields which might reveal our development process
delete patchedPackageJson['scripts'];
delete patchedPackageJson['devDependencies'];
delete patchedPackageJson['dependencies'];
fs.writeFileSync(packagejsonPath, JSON.stringify(patchedPackageJson));
}
main();
================================================
FILE: .eslint-ignore
================================================
node_modules
dist
coverage
lint-staged.config.js
vite.config.ts
**/vscode.proposed.*.ts
**/vscode.d.ts
.esbuild/extension.esbuild.ts
test/simulation/fixtures/**
test/scenarios/**
.simulation/**
.eslintplugin/**
chat-lib/**
test/aml/out/**
.vscode-test/**
# ignore vs
src/util/vs/**
# ignore test fixtures
src/platform/parser/test/node/fixtures/**
src/extension/test/node/fixtures/**
src/extension/prompts/node/test/fixtures/**
# TypeScript server plugin
src/extension/typescriptContext/serverPlugin/fixtures/**
src/extension/typescriptContext/serverPlugin/lib/**
src/extension/typescriptContext/serverPlugin/dist/**
# Ignore Built test-extension
.vscode/extensions/test-extension/dist/**
================================================
FILE: .eslintplugin/index.ts
================================================
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import type { LooseRuleDefinition } from '@typescript-eslint/utils/ts-eslint';
import * as glob from 'glob';
import path from 'path';
// Re-export all .ts files as rules
const rules: Record<string, LooseRuleDefinition> = {};
await Promise.all(
glob.sync('*.ts', { cwd: import.meta.dirname })
.filter(file => !file.endsWith('index.ts') && !file.endsWith('utils.ts'))
.map(async file => {
rules[path.basename(file, '.ts')] = (await import('./' + file)).default;
})
);
export { rules };
================================================
FILE: .eslintplugin/no-bad-gdpr-comment.ts
================================================
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import * as eslint from 'eslint';
export default new class NoBadGDPRComment implements eslint.Rule.RuleModule {
create(context: eslint.Rule.RuleContext): eslint.Rule.RuleListener {
return {
['Program'](node) {
for (const comment of (node as eslint.AST.Program).comments) {
if (comment.type !== 'Block' || !comment.loc) {
continue;
}
if (!comment.value.includes('__GDPR__')) {
continue;
}
const dataStart = comment.value.indexOf('\n');
const data = comment.value.substring(dataStart)
let gdprData: { [key: string]: object } | undefined
try {
const jsonRaw = `{ ${data} }`
gdprData = JSON.parse(jsonRaw);
} catch (e) {
context.report({
loc: { start: comment.loc.start, end: comment.loc.end },
message: 'GDPR comment is not valid JSON'
});
}
if (gdprData) {
const len = Object.keys(gdprData).length;
if (len !== 1) {
context.report({
loc: { start: comment.loc.start, end: comment.loc.end },
message: `GDPR comment must contain exactly one key, not ${Object.keys(gdprData).join(', ')}`
});
}
}
}
}
};
}
};
================================================
FILE: .eslintplugin/no-funny-filename.ts
================================================
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import * as eslint from 'eslint';
import { readdirSync } from 'fs';
import path from 'path';
export default new class NoTestOnly implements eslint.Rule.RuleModule {
create(context: eslint.Rule.RuleContext): eslint.Rule.RuleListener {
// compute/use real file path because LSP eslint might see cached
// filenames from VSCode that aren't using the latest casing
let realFilename: string | undefined;
const filename = path.basename(context.filename);
const filenames = readdirSync(path.dirname(context.filename));
for (const name of filenames) {
if (name.toLowerCase() === filename.toLowerCase()) {
realFilename = name;
break;
}
}
if (!realFilename) {
throw new Error(`Filename not found ${filename}`)
}
// const filename = path.basename(context.filename);
const idx = realFilename.indexOf('.');
const realFilenameName = idx !== -1 ? realFilename.substring(0, idx) : realFilename;
const regex = /^[a-z0-9-]+([A-Z0-9-][a-z0-9-]*)*$/;
if (!regex.test(realFilenameName)) {
context.report({
loc: {
line: 0,
column: 0,
},
message: `Filename '${realFilename}' should be in camelCase.`,
});
}
return {};
}
};
================================================
FILE: .eslintplugin/no-gdpr-event-name-mismatch.ts
================================================
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import { TSESTree } from '@typescript-eslint/typescript-estree';
import * as eslint from 'eslint';
export default new class NoGDPREventNameMismatch implements eslint.Rule.RuleModule {
readonly meta: eslint.Rule.RuleMetaData = {
type: "problem",
fixable: "code",
docs: {
description: "Finds common cases where the gdpr comment does not match the telemetry event name in code.",
},
};
create(context: eslint.Rule.RuleContext): eslint.Rule.RuleListener {
function getParentOfType<NodeType extends TSESTree.Node>(node: TSESTree.Node, type: string): NodeType | undefined {
let parentNode: TSESTree.Node | undefined = node.parent;
while (parentNode && parentNode.type !== type) {
parentNode = parentNode.parent;
}
return parentNode as NodeType;
}
function getEventNameFromLeadingGdprComment(esNode: TSESTree.Node): string | undefined {
const statement = getParentOfType(esNode, 'ExpressionStatement');
if (!statement) {
return;
}
const comments = context.sourceCode.getCommentsBefore(statement as any);
if (comments.length === 0) {
return;
}
const comment = comments[0];
if (!comment.value.includes('__GDPR__') || !comment.loc) {
return;
}
const dataStart = comment.value.indexOf('\n');
const data = comment.value.substring(dataStart)
let gdprData: { [key: string]: object }
try {
const jsonRaw = `{ ${data} }`
gdprData = JSON.parse(jsonRaw);
} catch (e) {
return;
}
return Object.keys(gdprData)[0];
}
return {
['ExpressionStatement MemberExpression Identifier[name=/^send.*TelemetryEvent$/]'](node: any) {
const esNode = node as TSESTree.Identifier;
const gdprCommentEventName = getEventNameFromLeadingGdprComment(esNode);
if (!gdprCommentEventName) {
return;
}
const callExpr = getParentOfType<TSESTree.CallExpression>(esNode, 'CallExpression');
if (!callExpr) {
return;
}
const firstArg = callExpr.arguments[0];
if (firstArg.type !== TSESTree.AST_NODE_TYPES.Literal) {
return;
}
const callName = firstArg.value
if (callName !== gdprCommentEventName) {
context.report({
node,
message: `Found mismatch between GDPR comment event name (${gdprCommentEventName}) and telemetry event name (${callName}).`
});
}
}
};
}
};
================================================
FILE: .eslintplugin/no-instanceof-uri.ts
================================================
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import * as eslint from 'eslint';
export default new class NoInstanceofUri implements eslint.Rule.RuleModule {
readonly meta: eslint.Rule.RuleMetaData = {
type: "problem",
fixable: "code",
docs: {
description: "Disallow using 'instanceof URI', use 'URI.isURI' instead",
},
messages: {
noInstanceofURI: "Use 'URI.isUri()' instead of 'instanceof URI'. 'instanceof' is an issue because there are multiple URI classes in this codebase."
}
};
create(context: eslint.Rule.RuleContext): eslint.Rule.RuleListener {
return {
BinaryExpression(node: any) {
if (node.operator === 'instanceof' &&
node.right.type === 'Identifier' &&
node.right.name.toUpperCase() === 'URI') {
context.report({
node,
messageId: 'noInstanceofURI',
fix: (fixer) => {
return fixer.replaceText(node, `URI.isUri(${context.sourceCode.getText(node.left)})`);
}
});
}
}
};
}
};
================================================
FILE: .eslintplugin/no-missing-linebreak.ts
================================================
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import * as eslint from 'eslint';
export default new class MissingTSXLinebreak implements eslint.Rule.RuleModule {
readonly meta: eslint.Rule.RuleMetaData = {
type: "problem",
fixable: "code",
hasSuggestions: true,
}
create(context: eslint.Rule.RuleContext): eslint.Rule.RuleListener {
return {
['JSXText']: (node: any) => {
let text = node.value;
if (typeof text !== 'string') {
return {};
}
let jsxText = text;
let index = node.range[0];
// Remove leading linebreaks
const match = jsxText.match(/^\r?\n/);
if (match) {
jsxText = jsxText.slice(match[0].length);
index += match[0].length;
}
const errorLocs = [];
let lastFragment = '';
let linebreak = jsxText.match(/\r?\n/);
while (linebreak?.[0]) {
const linebreakLoc = jsxText.indexOf(linebreak[0]);
index += linebreakLoc + linebreak[0].length;
const fragment = jsxText.slice(0, linebreakLoc);
if (!fragment) {
break;
}
lastFragment = fragment;
jsxText = jsxText.slice(linebreakLoc + linebreak[0].length);
errorLocs.push(index - 1);
linebreak = jsxText.match(/\r?\n/);
}
if (errorLocs.length < 2) {
return; // All text is on one line
}
if (lastFragment.trim().length === 0) {
// Last fragment is whitespace, it might be followed by another JSX element, which we already auto insert linebreaks for
const nextChild = context.sourceCode.getTokenAfter(node);
if (!nextChild || nextChild?.value === '<') {
errorLocs.pop();
}
}
for (const errorLoc of errorLocs) {
context.report({
loc: context.sourceCode.getLocFromIndex(errorLoc),
message: "Use `<br />` linebreak to enforce newline in TSX string literal. Whitespace is removed from TSX during transpilation.",
fix: (fixer) => {
return fixer.insertTextAfterRange([errorLoc, errorLoc], '<br />');
}
});
}
}
};
}
};
================================================
FILE: .eslintplugin/no-nls-localize.ts
================================================
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import * as eslint from 'eslint';
import { createImportRuleListener } from './utils.ts';
export default new class implements eslint.Rule.RuleModule {
readonly meta: eslint.Rule.RuleMetaData = {
messages: {
noNlsLocalize: 'Do not import localize from nls. Use vscode.l10n.t or import l10n from @vscode/l10n instead.'
},
docs: {
description: 'Disallow importing localize from nls files',
},
schema: []
};
create(context: eslint.Rule.RuleContext): eslint.Rule.RuleListener {
return createImportRuleListener((node, path) => {
// Match paths ending with /nls, /nls.js, /vs/nls, etc.
if (path.endsWith('/nls') || path.endsWith('/nls.js') || path === 'vs/nls') {
context.report({
loc: node.parent!.loc,
messageId: 'noNlsLocalize'
});
}
});
}
};
================================================
FILE: .eslintplugin/no-restricted-copilot-pr-string.ts
================================================
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import * as eslint from 'eslint';
export default new class NoBadGDPRComment implements eslint.Rule.RuleModule {
readonly meta: eslint.Rule.RuleMetaData = {
type: 'problem',
docs: {
description: 'Ensure "Generate with Copilot" string in GitHubPullRequestProviders is never changed',
category: 'Best Practices'
},
schema: [
{
type: 'object',
properties: {
className: { type: 'string' },
string: { type: 'string' }
},
additionalProperties: false
}
]
}
create(context: eslint.Rule.RuleContext): eslint.Rule.RuleListener {
const options = context.options[0] || {};
const className = options.className || 'GitHubPullRequestProviders';
const requiredString = options.string || 'Copilot';
let inTargetClass = false;
return {
ClassDeclaration(node) {
if (node.id && node.id.name === className) {
inTargetClass = true;
}
},
'ClassDeclaration:exit'(node) {
if (node.id && node.id.name === className) {
inTargetClass = false;
}
},
Literal(node) {
if (inTargetClass && typeof node.value === 'string' && node.value.includes('Generate')) {
if (!node.value.includes(requiredString)) {
context.report({
node,
message: `String literal in ${className} must include the word "Copilot" as the string is referenced in the GitHub Pull Request extension. Talk to alexr00 if you need to change it.`
});
}
}
}
};
}
};
================================================
FILE: .eslintplugin/no-runtime-import.ts
================================================
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import { TSESTree } from '@typescript-eslint/typescript-estree';
import * as eslint from 'eslint';
import { dirname, join, relative } from 'path';
import picomatch from 'picomatch';
import { createImportRuleListener } from './utils.ts';
export default new class implements eslint.Rule.RuleModule {
readonly meta: eslint.Rule.RuleMetaData = {
messages: {
layerbreaker: 'You are only allowed to import {{import}} from here using `import type ...`.'
},
schema: {
type: "array",
items: {
type: "object",
additionalProperties: {
type: "array",
items: {
type: "string"
}
}
}
}
};
create(context: eslint.Rule.RuleContext): eslint.Rule.RuleListener {
let fileRelativePath = relative(dirname(import.meta.dirname), context.getFilename());
fileRelativePath = fileRelativePath.replace(/\\/g, '/');
if (!fileRelativePath.endsWith('/')) {
fileRelativePath += '/';
}
const ruleArgs = context.options[0] as Record<string, string[]>;
const matchingKey = Object.keys(ruleArgs).find(key => fileRelativePath.startsWith(key) || picomatch(key)(fileRelativePath));
if (!matchingKey) {
// nothing
return {};
}
const restrictedImports = ruleArgs[matchingKey];
return createImportRuleListener((node, path) => {
if (path[0] === '.') {
path = join(dirname(context.getFilename()), path);
}
if (restrictedImports.includes(path) && !(
(node.parent?.type === TSESTree.AST_NODE_TYPES.ImportDeclaration && node.parent.importKind === 'type') ||
(node.parent && 'exportKind' in node.parent && node.parent.exportKind === 'type'))) { // the export could be multiple types
context.report({
loc: node.parent!.loc,
messageId: 'layerbreaker',
data: {
import: path
}
});
}
});
}
};
================================================
FILE: .eslintplugin/no-test-imports.ts
================================================
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import * as eslint from 'eslint';
import { dirname, join } from 'path';
import { createImportRuleListener } from './utils.ts';
export default new class implements eslint.Rule.RuleModule {
readonly meta: eslint.Rule.RuleMetaData = {};
create(context: eslint.Rule.RuleContext): eslint.Rule.RuleListener {
if (context.filename.includes('/test/')) {
return {};
}
return createImportRuleListener((node, path) => {
if (path[0] === '.') {
path = join(dirname(context.filename), path);
}
if (path.includes('/test/')) {
context.report({
loc: node.parent!.loc,
message: 'You are not allowed to import anything form /test/ file in a non-test file.',
data: {
import: path
}
});
}
});
}
};
================================================
FILE: .eslintplugin/no-test-only.ts
================================================
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import * as eslint from 'eslint';
export default new class NoTestOnly implements eslint.Rule.RuleModule {
create(context: eslint.Rule.RuleContext): eslint.Rule.RuleListener {
return {
['MemberExpression[object.name=/^(test|suite)$/][property.name="only"]']: (node: any) => {
return context.report({
node,
message: 'only is a dev-time tool and CANNOT be pushed'
});
}
};
}
};
================================================
FILE: .eslintplugin/no-unexternalized-strings.ts
================================================
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import { AST_NODE_TYPES, TSESTree } from '@typescript-eslint/utils';
import * as eslint from 'eslint';
import type * as ESTree from 'estree';
function isStringLiteral(node: TSESTree.Node | ESTree.Node | null | undefined): node is TSESTree.StringLiteral {
return !!node && node.type === AST_NODE_TYPES.Literal && typeof node.value === 'string';
}
function isDoubleQuoted(node: TSESTree.StringLiteral): boolean {
return node.raw[0] === '"' && node.raw[node.raw.length - 1] === '"';
}
/**
* Enable bulk fixing double-quoted strings to single-quoted strings with the --fix eslint flag
*
* Disabled by default as this is often not the desired fix. Instead the string should be localized. However it is
* useful for bulk conversations of existing code.
*/
const enableDoubleToSingleQuoteFixes = false;
export default new class NoUnexternalizedStrings implements eslint.Rule.RuleModule {
private static _rNlsKeys = /^[_a-zA-Z0-9][ .\-_a-zA-Z0-9]*$/;
readonly meta: eslint.Rule.RuleMetaData = {
messages: {
doubleQuoted: 'Only use double-quoted strings for externalized strings.',
badKey: 'The key \'{{key}}\' doesn\'t conform to a valid localize identifier.',
duplicateKey: 'Duplicate key \'{{key}}\' with different message value.',
badMessage: 'Message argument to \'{{message}}\' must be a string literal.'
},
schema: false,
fixable: enableDoubleToSingleQuoteFixes ? 'code' : undefined,
};
create(context: eslint.Rule.RuleContext): eslint.Rule.RuleListener {
const externalizedStringLiterals = new Map<string, { call: TSESTree.CallExpression; message: TSESTree.Node }[]>();
const doubleQuotedStringLiterals = new Set<TSESTree.Node>();
function collectDoubleQuotedStrings(node: ESTree.Literal) {
if (isStringLiteral(node) && isDoubleQuoted(node)) {
doubleQuotedStringLiterals.add(node);
}
}
function visitLocalizeCall(node: TSESTree.CallExpression) {
// localize(key, message)
const [keyNode, messageNode] = node.arguments;
// (1)
// extract key so that it can be checked later
let key: string | undefined;
if (isStringLiteral(keyNode)) {
doubleQuotedStringLiterals.delete(keyNode);
key = keyNode.value;
} else if (keyNode.type === AST_NODE_TYPES.ObjectExpression) {
for (const property of keyNode.properties) {
if (property.type === AST_NODE_TYPES.Property && !property.computed) {
if (property.key.type === AST_NODE_TYPES.Identifier && property.key.name === 'key') {
if (isStringLiteral(property.value)) {
doubleQuotedStringLiterals.delete(property.value);
key = property.value.value;
break;
}
}
}
}
}
if (typeof key === 'string') {
let array = externalizedStringLiterals.get(key);
if (!array) {
array = [];
externalizedStringLiterals.set(key, array);
}
array.push({ call: node, message: messageNode });
}
// (2)
// remove message-argument from doubleQuoted list and make
// sure it is a string-literal
doubleQuotedStringLiterals.delete(messageNode);
if (!isStringLiteral(messageNode)) {
context.report({
loc: messageNode.loc,
messageId: 'badMessage',
data: { message: context.getSourceCode().getText(node as ESTree.Node) }
});
}
}
function visitL10NCall(node: TSESTree.CallExpression) {
// localize(key, message)
const [messageNode] = (node as TSESTree.CallExpression).arguments; // remove message-argument from doubleQuoted list and make
// sure it is a string-literal
if (isStringLiteral(messageNode)) {
doubleQuotedStringLiterals.delete(messageNode);
} else if (messageNode.type === AST_NODE_TYPES.ObjectExpression) {
for (const prop of messageNode.properties) {
if (prop.type === AST_NODE_TYPES.Property) {
if (prop.key.type === AST_NODE_TYPES.Identifier && prop.key.name === 'message') {
doubleQuotedStringLiterals.delete(prop.value);
break;
}
}
}
}
}
function reportBadStringsAndBadKeys() {
// (1)
// report all strings that are in double quotes
for (const node of doubleQuotedStringLiterals) {
context.report({
loc: node.loc,
messageId: 'doubleQuoted',
fix: enableDoubleToSingleQuoteFixes ? (fixer) => {
// Get the raw string content, unescaping any escaped quotes
const content = (node as ESTree.SimpleLiteral).raw!
.slice(1, -1)
.replace(/(?<!\\)\\'/g, `'`)
.replace(/(?<!\\)\\"/g, `"`);
// If the escaped content contains a single quote, use template string instead
if (content.includes(`'`)
&& !content.includes('${') // Unless the content has a template expressions
&& !content.includes('`') // Or backticks which would need escaping
) {
const templateStr = `\`${content}\``;
return fixer.replaceText(node, templateStr);
}
// Otherwise prefer using a single-quoted string
const singleStr = `'${content.replace(/'/g, `\\'`)}'`;
return fixer.replaceText(node, singleStr);
} : undefined
});
}
for (const [key, values] of externalizedStringLiterals) {
// (2)
// report all invalid NLS keys
if (!key.match(NoUnexternalizedStrings._rNlsKeys)) {
for (const value of values) {
context.report({ loc: value.call.loc, messageId: 'badKey', data: { key } });
}
}
// (2)
// report all invalid duplicates (same key, different message)
if (values.length > 1) {
for (let i = 1; i < values.length; i++) {
if (context.getSourceCode().getText(values[i - 1].message as ESTree.Node) !== context.getSourceCode().getText(values[i].message as ESTree.Node)) {
context.report({ loc: values[i].call.loc, messageId: 'duplicateKey', data: { key } });
}
}
}
}
}
return {
['Literal']: (node: ESTree.Literal) => collectDoubleQuotedStrings(node),
['ExpressionStatement[directive] Literal:exit']: (node: TSESTree.Literal) => doubleQuotedStringLiterals.delete(node),
// localize(...)
['CallExpression[callee.type="MemberExpression"][callee.object.name="nls"][callee.property.name="localize"]:exit']: (node: TSESTree.CallExpression) => visitLocalizeCall(node),
// localize2(...)
['CallExpression[callee.type="MemberExpression"][callee.object.name="nls"][callee.property.name="localize2"]:exit']: (node: TSESTree.CallExpression) => visitLocalizeCall(node),
// vscode.l10n.t(...)
['CallExpression[callee.type="MemberExpression"][callee.object.property.name="l10n"][callee.property.name="t"]:exit']: (node: TSESTree.CallExpression) => visitL10NCall(node),
// l10n.t(...)
['CallExpression[callee.object.name="l10n"][callee.property.name="t"]:exit']: (node: TSESTree.CallExpression) => visitL10NCall(node),
['CallExpression[callee.name="localize"][arguments.length>=2]:exit']: (node: TSESTree.CallExpression) => visitLocalizeCall(node),
['CallExpression[callee.name="localize2"][arguments.length>=2]:exit']: (node: TSESTree.CallExpression) => visitLocalizeCall(node),
['Program:exit']: reportBadStringsAndBadKeys,
};
}
};
================================================
FILE: .eslintplugin/no-unlayered-files.ts
================================================
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import * as eslint from 'eslint';
import path from 'path';
const layers = new Set([
'common',
'vscode',
'node',
'vscode-node',
'worker',
'vscode-worker',
])
export default new class NoUnlayeredFiles implements eslint.Rule.RuleModule {
create(context: eslint.Rule.RuleContext): eslint.Rule.RuleListener {
const filenameParts = context.filename.split(path.sep);
if (!filenameParts.find(part => layers.has(part))) {
context.report({
loc: {
line: 0,
column: 0,
},
message: `File '${context.filename}' should be inside a '${[...layers].join(', ')}' folder.`,
});
}
return {};
}
};
================================================
FILE: .eslintplugin/package.json
================================================
{
"name": "vscode-copilot-chat-eslint-plugin",
"private": true,
"type": "module"
}
================================================
FILE: .eslintplugin/tsconfig.json
================================================
{
"compilerOptions": {
"target": "es2024",
"lib": ["ES2024"],
"module": "esnext",
"allowImportingTsExtensions": true,
"erasableSyntaxOnly": true,
"verbatimModuleSyntax": true,
"noEmit": true,
"strict": true,
"exactOptionalPropertyTypes": false,
"useUnknownInCatchVariables": false,
"noUnusedLocals": true,
"noUnusedParameters": true
},
"exclude": ["node_modules/**"]
}
================================================
FILE: .eslintplugin/utils.ts
================================================
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import { TSESTree } from '@typescript-eslint/typescript-estree';
import * as eslint from 'eslint';
export function createImportRuleListener(validateImport: (node: TSESTree.Literal, value: string) => any): eslint.Rule.RuleListener {
function _checkImport(node: TSESTree.Node | null) {
if (node && node.type === 'Literal' && typeof node.value === 'string') {
validateImport(node, node.value);
}
}
return {
// import ??? from 'module'
ImportDeclaration: (node: any) => {
_checkImport((node as TSESTree.ImportDeclaration).source);
},
// import('module').then(...) OR await import('module')
['CallExpression[callee.type="Import"][arguments.length=1] > Literal']: (node: any) => {
_checkImport(node);
},
// import foo = ...
['TSImportEqualsDeclaration > TSExternalModuleReference > Literal']: (node: any) => {
_checkImport(node);
},
// export ?? from 'module'
ExportAllDeclaration: (node: any) => {
_checkImport((node as TSESTree.ExportAllDeclaration).source);
},
// export {foo} from 'module'
ExportNamedDeclaration: (node: any) => {
_checkImport((node as TSESTree.ExportNamedDeclaration).source);
},
};
}
================================================
FILE: .gitattributes
================================================
* text=auto eol=lf
# Enable Git LFS for SQLite database files
*.sqlite filter=lfs diff=lfs merge=lfs -text
================================================
FILE: .github/CODENOTIFY
================================================
# Model prompts
src/extension/prompts/node/agent/openAIPrompts.tsx @dileepyavan @kcutler
src/extension/prompts/node/agent/anthropicPrompts.tsx @bhavyaus @bryanchen-d
src/extension/prompts/node/agent/geminiPrompts.tsx @vijayupadya @pwang347
src/extension/prompts/node/agent/xAIPrompts.tsx @pwang347 @vijayupadya
src/extension/prompts/node/agent/vscModelPrompts.tsx @karthiknadig @eleanorjboyd
================================================
FILE: .github/CODEOWNERS
================================================
# Ensure Lad and Joao review cache relevant code
.github/workflows/pr-check-cache.yml @lszomoru @joaomoreno
build/pr-check-cache-files.ts @lszomoru @joaomoreno
test/base/cache-cli.ts @lszomoru @joaomoreno
test/base/cache.ts @lszomoru @joaomoreno
================================================
FILE: .github/ISSUE_TEMPLATE/config.yml
================================================
blank_issues_enabled: false
contact_links:
- name: Copilot Chat Issues
url: https://github.com/microsoft/vscode/issues/new?labels=chat-oss-issue
about: Please file issues related to Copilot Chat in the VS Code repository.
- name: Responsible AI Service response blocking
url: https://github.com/microsoft/vscode/issues/253130
about: See meta-issue for information on RAI response blocking.
- name: Request Rate Limiting
url: https://github.com/microsoft/vscode/issues/253124
about: See meta-issue for scenarios where chat requests are blocked due to rate limiting.
- name: Public Code Matching
url: https://github.com/microsoft/vscode/issues/253129
about: Learn how to enable/disable public code matching in responses via your organizational settings.
================================================
FILE: .github/commands.json
================================================
[
{
"type": "comment",
"name": "question",
"action": "updateLabels",
"addLabel": "*question"
},
{
"type": "comment",
"name": "dev-question",
"action": "updateLabels",
"addLabel": "*dev-question"
},
{
"type": "label",
"name": "*question",
"action": "close",
"reason": "not_planned",
"comment": "We closed this issue because it is a question about using VS Code rather than an issue or feature request. Please search for help on [StackOverflow](https://aka.ms/vscodestackoverflow), where the community has already answered thousands of similar questions. You may find their [guide on asking a new question](https://aka.ms/vscodestackoverflowquestion) helpful if your question has not already been asked. See also our [issue reporting guidelines](https://aka.ms/vscodeissuereporting).\n\nHappy Coding!"
},
{
"type": "label",
"name": "*dev-question",
"action": "close",
"reason": "not_planned",
"comment": "We have a great extension developer community over on [GitHub discussions](https://github.com/microsoft/vscode-discussions/discussions) and [Slack](https://vscode-dev-community.slack.com/) where extension authors help each other. This is a great place for you to ask questions and find support.\n\nHappy Coding!"
},
{
"type": "label",
"name": "*extension-candidate",
"action": "close",
"reason": "not_planned",
"comment": "We try to keep VS Code lean and we think the functionality you're asking for is great for a VS Code extension. Maybe you can already find one that suits you in the [VS Code Marketplace](https://aka.ms/vscodemarketplace). Just in case, in a few simple steps you can get started [writing your own extension](https://aka.ms/vscodewritingextensions). See also our [issue reporting guidelines](https://aka.ms/vscodeissuereporting).\n\nHappy Coding!"
},
{
"type": "label",
"name": "*not-reproducible",
"action": "close",
"reason": "not_planned",
"comment": "We closed this issue because we are unable to reproduce the problem with the steps you describe. Chances are we've already fixed your problem in a recent version of VS Code. If not, please ask us to reopen the issue and provide us with more detail. Our [issue reporting guidelines](https://aka.ms/vscodeissuereporting) might help you with that.\n\nHappy Coding!"
},
{
"type": "label",
"name": "*out-of-scope",
"action": "close",
"reason": "not_planned",
"comment": "We closed this issue because we [don't plan to address it](https://aka.ms/vscode-out-of-scope) in the foreseeable future. If you disagree and feel that this issue is crucial: we are happy to listen and to reconsider.\n\nIf you wonder what we are up to, please see our [roadmap](https://aka.ms/vscoderoadmap) and [issue reporting guidelines](https://aka.ms/vscodeissuereporting).\n\nThanks for your understanding, and happy coding!"
},
{
"type": "label",
"name": "wont-fix",
"action": "close",
"reason": "not_planned",
"comment": "We closed this issue because we [don't plan to address it](https://github.com/microsoft/vscode/wiki/Issue-Grooming#wont-fix-bugs).\n\nThanks for your understanding, and happy coding!"
},
{
"type": "comment",
"name": "causedByExtension",
"action": "updateLabels",
"addLabel": "*caused-by-extension"
},
{
"type": "label",
"name": "*caused-by-extension",
"action": "close",
"reason": "not_planned",
"comment": "This issue is caused by an extension, please file it with the repository (or contact) the extension has linked in its overview in VS Code or the [marketplace](https://aka.ms/vscodemarketplace) for VS Code. See also our [issue reporting guidelines](https://aka.ms/vscodeissuereporting). If you don't know which extension is causing the problem, you can run `Help: Start extension bisect` from the command palette (F1) to help identify the problem extension.\n\nHappy Coding!"
},
{
"type": "label",
"name": "*as-designed",
"action": "close",
"reason": "not_planned",
"comment": "The described behavior is how it is expected to work. If you disagree, please explain what is expected and what is not in more detail. See also our [issue reporting guidelines](https://aka.ms/vscodeissuereporting).\n\nHappy Coding!"
},
{
"type": "label",
"name": "L10N",
"assign": [
"csigs",
"TylerLeonhardt"
]
},
{
"type": "comment",
"name": "duplicate",
"action": "updateLabels",
"addLabel": "*duplicate"
},
{
"type": "label",
"name": "*duplicate",
"action": "close",
"reason": "not_planned",
"comment": "Thanks for creating this issue! We figured it's covering the same as another one we already have. Thus, we closed this one as a duplicate. You can search for [similar existing issues](${duplicateQuery}). See also our [issue reporting guidelines](https://aka.ms/vscodeissuereporting).\n\nHappy Coding!"
},
{
"type": "comment",
"name": "verified",
"action": "updateLabels",
"addLabel": "verified",
"removeLabel": "author-verification-requested",
"requireLabel": "author-verification-requested",
"disallowLabel": "unreleased"
},
{
"type": "comment",
"name": "confirm",
"action": "updateLabels",
"addLabel": "confirmed",
"removeLabel": "confirmation-pending"
},
{
"type": "comment",
"name": "confirmationPending",
"action": "updateLabels",
"addLabel": "confirmation-pending",
"removeLabel": "confirmed"
},
{
"type": "comment",
"name": "needsMoreInfo",
"action": "updateLabels",
"addLabel": "~info-needed"
},
{
"type": "comment",
"name": "needsPerfInfo",
"addLabel": "info-needed",
"comment": "Thanks for creating this issue regarding performance! Please follow this guide to help us diagnose performance issues: https://github.com/microsoft/vscode/wiki/Performance-Issues \n\nHappy Coding!"
},
{
"type": "comment",
"name": "jsDebugLogs",
"action": "updateLabels",
"addLabel": "info-needed",
"comment": "Please collect trace logs using the following instructions:\n\n> If you're able to, add `\"trace\": true` to your `launch.json` and reproduce the issue. The location of the log file on your disk will be written to the Debug Console. Share that with us.\n>\n> ⚠️ This log file will not contain source code, but will contain file paths. You can drop it into https://microsoft.github.io/vscode-pwa-analyzer/index.html to see what it contains. If you'd rather not share the log publicly, you can email it to connor@xbox.com"
},
{
"type": "comment",
"name": "closedWith",
"action": "close",
"reason": "completed",
"addLabel": "unreleased"
},
{
"type": "comment",
"name": "spam",
"action": "close",
"reason": "not_planned",
"addLabel": "invalid"
},
{
"type": "comment",
"name": "a11ymas",
"action": "updateLabels",
"addLabel": "a11ymas"
},
{
"type": "label",
"name": "*off-topic",
"action": "close",
"reason": "not_planned",
"comment": "Thanks for creating this issue. We think this issue is unactionable or unrelated to the goals of this project. Please follow our [issue reporting guidelines](https://aka.ms/vscodeissuereporting).\n\nHappy Coding!"
},
{
"type": "comment",
"name": "gifPlease",
"action": "comment",
"addLabel": "info-needed",
"comment": "Thanks for reporting this issue! Unfortunately, it's hard for us to understand what issue you're seeing. Please help us out by providing a screen recording showing exactly what isn't working as expected. While we can work with most standard formats, `.gif` files are preferred as they are displayed inline on GitHub. You may find https://gifcap.dev helpful as a browser-based gif recording tool.\n\nIf the issue depends on keyboard input, you can help us by enabling screencast mode for the recording (`Developer: Toggle Screencast Mode` in the command palette). Lastly, please attach this file via the GitHub web interface as emailed responses will strip files out from the issue.\n\nHappy coding!"
},
{
"type": "comment",
"name": "confirmPlease",
"action": "comment",
"addLabel": "info-needed",
"comment": "Please diagnose the root cause of the issue by running the command `F1 > Help: Troubleshoot Issue` and following the instructions. Once you have done that, please update the issue with the results.\n\nHappy Coding!"
},
{
"__comment__": "Allows folks on the team to label issues by commenting: `\\label My-Label` ",
"type": "comment",
"name": "label"
},
{
"type": "comment",
"name": "assign"
},
{
"type": "label",
"name": "*workspace-trust-docs",
"action": "close",
"reason": "not_planned",
"comment": "This issue appears to be the result of the new workspace trust feature shipped in June 2021. This security-focused feature has major impact on the functionality of VS Code. Due to the volume of issues, we ask that you take some time to review our [comprehensive documentation](https://aka.ms/vscode-workspace-trust) on the feature. If your issue is still not resolved, please let us know."
},
{
"type": "label",
"name": "~verification-steps-needed",
"action": "updateLabels",
"addLabel": "verification-steps-needed",
"removeLabel": "~verification-steps-needed",
"comment": "Friendly ping! Looks like this issue requires some further steps to be verified. Please provide us with the steps necessary to verify this issue."
},
{
"type": "label",
"name": "~info-needed",
"action": "updateLabels",
"addLabel": "info-needed",
"removeLabel": "~info-needed",
"comment": "Thanks for creating this issue! We figured it's missing some basic information or in some other way doesn't follow our [issue reporting guidelines](https://aka.ms/vscodeissuereporting). Please take the time to review these and update the issue.\n\nHappy Coding!"
},
{
"type": "label",
"name": "~version-info-needed",
"action": "updateLabels",
"addLabel": "info-needed",
"removeLabel": "~version-info-needed",
"comment": "Thanks for creating this issue! We figured it's missing some basic information, such as a version number, or in some other way doesn't follow our [issue reporting guidelines](https://aka.ms/vscodeissuereporting). Please take the time to review these and update the issue.\n\nHappy Coding!"
},
{
"type": "label",
"name": "~confirmation-needed",
"action": "updateLabels",
"addLabel": "info-needed",
"removeLabel": "~confirmation-needed",
"comment": "Please diagnose the root cause of the issue by running the command `F1 > Help: Troubleshoot Issue` and following the instructions. Once you have done that, please update the issue with the results.\n\nHappy Coding!"
}
]
================================================
FILE: .github/copilot-instructions.md
================================================
# GitHub Copilot Chat Extension - Copilot Instructions
## Project Overview
This is the **GitHub Copilot Chat** extension for Visual Studio Code - a VS Code extension that provides conversational AI assistance, a coding agent with many tools, inline editing capabilities, and advanced AI-powered features for VS Code.
### Key Features
- **Chat Interface**: Conversational AI assistance with chat participants, variables, and slash commands
- **Inline Chat**: AI-powered editing directly in the editor with `Ctrl+I`
- **Agent Mode**: Multi-step autonomous coding tasks
- **Edit Mode**: Natural language to code
- **Inline Suggestions**: Next edit suggestions and inline completions
- **Language Model Integration**: Support for multiple AI models (GPT-4, Claude, Gemini, etc.)
- **Context-Aware**: Workspace understanding, semantic search, and code analysis
### Tech Stack
- **TypeScript**: Primary language (follows VS Code coding standards)
- **TSX**: Prompts are built using the @vscode/prompt-tsx library
- **Node.js**: Runtime for extension host and language server features
- **WebAssembly**: For performance-critical parsing and tokenization
- **VS Code Extension API**: Extensive use of proposed APIs for chat, language models, and editing
- **ESBuild**: Bundling and compilation
- **Vitest**: Unit testing framework
- **Python**: For notebooks integration and ML evaluation scripts
## Validating changes
You MUST check compilation output before running ANY script or declaring work complete!
1. **ALWAYS** check the `start-watch-tasks` watch task output for compilation errors
2. **NEVER** use the `compile` task as a way to check if everything is working properly
3. **FIX** all compilation errors before moving forward
### TypeScript compilation steps
- Monitor the `start-watch-tasks` task outputs for real-time compilation errors as you make changes
- This task runs `npm: watch:tsc-extension`,`npm: watch:tsc-extension-web`, `npm: watch:tsc-simulation-workbench`, and `npm: watch:esbuild` to incrementally compile the project
- Start the task if it's not already running in the background
## Project Architecture
### Top-Level Directory Structure
#### Core Source Code (`src/`)
- **`src/extension/`**: Main extension implementation, organized by feature
- **`src/platform/`**: Shared platform services and utilities
- **`src/util/`**: Common utilities, VS Code API abstractions, and service infrastructure
#### Build & Configuration
- **`.esbuild.ts`**: Build configuration for bundling extension, web worker, and simulation workbench
- **`tsconfig.json`**: TypeScript configuration extending base config with React JSX settings
- **`vite.config.ts`**: Test configuration for Vitest unit tests
- **`package.json`**: Extension manifest with VS Code contributions, dependencies, and scripts
#### Testing & Simulation
- **`test/`**: Comprehensive test suite including unit, integration, and simulation tests
- **`script/simulate.sh`**: Test runner for scenario-based testing
- **`notebooks/`**: Jupyter notebooks for performance analysis and ML experiments
#### Assets & Documentation
- **`assets/`**: Icons, fonts, and visual resources
- **`CONTRIBUTING.md`**: Architecture documentation and development guide
### Key Source Directories
#### `src/extension/` - Feature Implementation
**Core Chat & Conversation Features:**
- **`conversation/`**: Chat participants, agents, and conversation flow orchestration
- **`inlineChat/`**: Inline editing features (`Ctrl+I`) and hints system
- **`inlineEdits/`**: Advanced inline editing capabilities with streaming edits
**Context & Intelligence:**
- **`context/`**: Context resolution for code understanding and workspace analysis
- **`contextKeys/`**: VS Code context key management for UI state
- **`intents/`**: Chat participant/slash command implementations
- **`prompts/`**: Prompt engineering and template system
- **`prompt/`**: Common prompt utilities
- **`typescriptContext/`**: TypeScript-specific context and analysis
**Search & Discovery:**
- **`search/`**: General search functionality within the extension
- **`workspaceChunkSearch/`**: Chunked workspace search for large codebases
- **`workspaceSemanticSearch/`**: Semantic search across workspace content
- **`workspaceRecorder/`**: Recording and tracking workspace interactions
**Authentication & Configuration:**
- **`authentication/`**: GitHub authentication and token management
- **`configuration/`**: Settings and configuration management
- **`byok/`**: Bring Your Own Key (BYOK) functionality for custom API keys
**AI Integration & Endpoints:**
- **`endpoint/`**: AI service endpoints and model selection
- **`tools/`**: Language model tools and integrations
- **`api/`**: Core API abstractions and interfaces
- **`mcp/`**: Model Context Protocol integration
**Development & Testing:**
- **`testing/`**: Test generation and execution features
- **`test/`**: Extension-specific test utilities and helpers
**User Interface & Experience:**
- **`commands/`**: Service for working with VS Code commands
- **`codeBlocks/`**: Streaming code block processing
- **`linkify/`**: URL and reference linkification
- **`getting-started/`**: Onboarding and setup experience
- **`onboardDebug/`**: Debug onboarding flows
- **`survey/`**: User feedback and survey collection
**Specialized Features:**
- **`notebook/`**: Notebook integration and support
- **`review/`**: Code review and PR integration features
- **`renameSuggestions/`**: AI-powered rename suggestions
- **`ignore/`**: File and pattern ignore functionality
- **`xtab/`**: Cross-tab communication and state management
**Infrastructure & Utilities:**
- **`extension/`**: Core extension initialization and lifecycle
- **`log/`**: Logging infrastructure and utilities
- **`telemetry/`**: Analytics and usage tracking
**VS Code API Type Definitions:**
- Multiple `vscode.proposed.*.d.ts` files for proposed VS Code APIs including chat, language models, embeddings, and various editor integrations
#### `src/platform/` - Platform Services
- **`chat/`**: Core chat services and conversation options
- **`openai/`**: OpenAI API protocol integration and request handling
- **`embedding/`**: Vector embeddings for semantic search
- **`parser/`**: Code parsing and AST analysis
- **`search/`**: Workspace search and indexing
- **`telemetry/`**: Analytics and usage tracking
- **`workspace/`**: Workspace understanding and file management
- **`notebook/`**: Notebook integration
- **`git/`**: Git integration and repository analysis
#### `src/util/` - Infrastructure
- **`common/`**: Shared utilities, service infrastructure, and abstractions
- **`vs/`**: Utilities borrowed from the microsoft/vscode repo (readonly)
### Extension Activation Flow
1. **Base Activation** (`src/extension/extension/vscode/extension.ts`):
- Checks VS Code version compatibility
- Creates service instantiation infrastructure
- Initializes contribution system
2. **Service Registration**:
- Platform services (search, parsing, telemetry, etc.)
- Extension-specific services (chat, authentication, etc.)
- VS Code integrations (commands, providers, etc.)
3. **Contribution Loading**:
- Chat participants
- Language model providers
- Command registrations
- UI contributions (views, menus, etc.)
### Chat System Architecture
#### Chat Participants
- **Default Agent**: Main conversational AI assistant
- **Setup Agent**: Handles initial Copilot setup and onboarding
- **Workspace Agent**: Specialized for workspace-wide operations
- **Agent Mode**: Autonomous multi-step task execution
#### Request Processing
1. **Input Parsing**: Parse user input for participants, variables, slash commands
2. **Context Resolution**: Gather relevant code context, diagnostics, workspace info
3. **Prompt Construction**: Build prompts with context and intent detection
4. **Model Interaction**: Send requests to appropriate language models
5. **Response Processing**: Parse and interpret AI responses
6. **Action Execution**: Apply code edits, show results, handle follow-ups
#### Language Model Integration
- Support for multiple providers (OpenAI, Anthropic, etc.)
- Model selection and switching capabilities
- Quota management and fallback handling
- Custom instruction integration
### Inline Chat System
- **Hint System**: Smart detection of natural language input for inline suggestions
- **Intent Detection**: Automatic detection of user intent (explain, fix, refactor, etc.)
- **Context Collection**: Gather relevant code context around cursor/selection
- **Streaming Edits**: Real-time application of AI-suggested changes
- **Version 2**: New implementation with improved UX and hide-on-request functionality
## Coding Standards
### TypeScript/JavaScript Guidelines
- **Indentation**: Use **tabs**, not spaces
- **Naming Conventions**:
- `PascalCase` for types and enum values
- `camelCase` for functions, methods, properties, and local variables
- Use descriptive, whole words in names
- **Strings**:
- "double quotes" for user-visible strings that need localization
- 'single quotes' for internal strings
- **Functions**: Use arrow functions `=>` over anonymous function expressions
- **Conditionals**: Always use curly braces, opening brace on same line
- **Comments**: Use JSDoc style for functions, interfaces, enums, and classes
### React/JSX Conventions
- Custom JSX factory: `vscpp` (instead of React.createElement)
- Fragment factory: `vscppf`
- Components follow VS Code theming and styling patterns
### Architecture Patterns
- **Service-oriented**: Heavy use of dependency injection via `IInstantiationService`
- **Contribution-based**: Modular system where features register themselves
- **Event-driven**: Extensive use of VS Code's event system and disposables
- **Layered**: Clear separation between platform services and extension features
### Testing Standards
- **Unit Tests**: Vitest for isolated component testing
- **Integration Tests**: VS Code extension host tests for API integration
- **Simulation Tests**: End-to-end scenario testing with `.stest.ts` files
- **Fixtures**: Comprehensive test fixtures for various scenarios
### File Organization
- **Logical Grouping**: Features grouped by functionality, not technical layer
- **Platform Separation**: Different implementations for web vs. Node.js environments
- **Test Proximity**: Tests close to implementation (`/test/` subdirectories)
- **Clear Interfaces**: Strong interface definitions for service boundaries
## Key Development Guidelines
### Arrow Functions and Parameters
- Use arrow functions `=>` over anonymous function expressions
- Only surround arrow function parameters when necessary:
```javascript
x => x + x // ✓ Correct
(x, y) => x + y // ✓ Correct
<T>(x: T, y: T) => x === y // ✓ Correct
(x) => x + x // ✗ Wrong
```
### Code Structure
- Always surround loop and conditional bodies with curly braces
- Open curly braces always go on the same line as whatever necessitates them
- An open curly brace MUST be followed by a newline, with the body indented on the next line
- Parenthesized constructs should have no surrounding whitespace
- Single space follows commas, colons, and semicolons
```javascript
for (let i = 0, n = str.length; i < 10; i++) {
if (x < 10) {
foo();
}
}
function f(x: number, y: string): void { }
```
### Type Management
- Do not export `types` or `functions` unless you need to share it across multiple components
- Do not introduce new `types` or `values` to the global namespace
- Use proper types. Do not use `any` unless absolutely necessary.
- Use `readonly` whenever possible.
- Avoid casts in TypeScript unless absolutely necessary. If you get type errors after your changes, look up the types of the variables involved and set up a proper system of types and interfaces instead of adding type casts.
- Do not use `any` or `unknown` as the type for variables, parameters, or return values unless absolutely necessary. If they need type annotations, they should have proper types or interfaces defined.
## Key APIs and Integrations
### VS Code Proposed APIs (Enabled)
The extension uses numerous proposed VS Code APIs for advanced functionality:
- `chatParticipantPrivate`: Private chat participant features
- `languageModelSystem`: System messages for LM API
- `chatProvider`: Custom chat provider implementation
- `mappedEditsProvider`: Advanced editing capabilities
- `inlineCompletionsAdditions`: Enhanced inline suggestions
- `aiTextSearchProvider`: AI-powered search capabilities
### External Integrations
- **GitHub**: Authentication and API access
- **Azure**: Cloud services and experimentation
- **OpenAI**: Language model API
- **Anthropic**: Claude model integration - See **[src/extension/agents/claude/AGENTS.md](../src/extension/agents/claude/AGENTS.md)** for complete Claude Agent SDK integration documentation including architecture, components, and registries
- **Telemetry**: Usage analytics and performance monitoring
## Development Workflow
### Setup and Build
- `npm install`: Install dependencies
- `npm run compile`: Development build
- `npm run watch:*`: Various watch modes for development
### Updating Dependencies
**Anthropic SDK Packages:**
When updating `@anthropic-ai/claude-agent-sdk` or `@anthropic-ai/sdk`, you **MUST** follow the upgrade guide in **[src/extension/agents/claude/AGENTS.md](../src/extension/agents/claude/AGENTS.md#upgrading-anthropic-sdk-packages)**. This includes:
1. Reviewing changelogs for breaking changes
2. Checking compilation errors in key Claude integration files
3. Running through the testing checklist for core functionality, tools, hooks, and slash commands
### Testing
- `npm run test:unit`: Unit tests
- `npm run test:extension`: VS Code integration tests
- `npm run simulate`: Scenario-based simulation tests
### Key Entry Points for Edits
**Chat & Conversation Features:**
- **Adding new chat features**: Start in `src/extension/conversation/`
- **Chat participants and agents**: Look in `src/extension/conversation/` for participant implementations
- **Conversation storage**: Modify `src/extension/conversationStore/` for persistence features
- **Inline chat improvements**: Look in `src/extension/inlineChat/` and `src/extension/inlineEdits/`
**Context & Intelligence:**
- **Context resolution changes**: Check `src/extension/context/` and `src/extension/typescriptContext/`
- **Prompt engineering**: Update `src/extension/prompts/` and `src/extension/prompt/`
- **Intent detection**: Modify `src/extension/intents/` for user intent classification
**Search & Discovery:**
- **Search functionality**: Update `src/extension/search/` for general search
- **Workspace search**: Modify `src/extension/workspaceChunkSearch/` for large codebase search
- **Semantic search**: Edit `src/extension/workspaceSemanticSearch/` for AI-powered search
- **Workspace tracking**: Update `src/extension/workspaceRecorder/` for interaction recording
**Authentication & Configuration:**
- **Authentication flows**: Modify `src/extension/authentication/` for GitHub integration
- **Settings and config**: Update `src/extension/configuration/` and `src/extension/settingsSchema/`
- **BYOK features**: Edit `src/extension/byok/` for custom API key functionality
**AI Integration:**
- **AI endpoints**: Update `src/extension/endpoint/` for model selection and routing
- **Language model tools**: Modify `src/extension/tools/` for AI tool integrations
- **API abstractions**: Edit `src/extension/api/` for core interfaces
- **MCP integration**: Update `src/extension/mcp/` for Model Context Protocol features
**User Interface:**
- **VS Code commands**: Update `src/extension/commands/` for command implementations
- **Code block rendering**: Modify `src/extension/codeBlocks/` for code display
- **Onboarding flows**: Edit `src/extension/getting-started/` and `src/extension/onboardDebug/`
- **Cross-tab features**: Update `src/extension/xtab/` for multi-tab coordination
**Testing & Development:**
- **Test generation**: Modify `src/extension/testing/` for AI-powered test creation
- **Extension tests**: Update `src/extension/test/` for extension-specific test utilities
**Platform Services:**
- **Core platform services**: Extend `src/platform/` services for cross-cutting functionality
- **VS Code integration**: Update contribution files and extension activation code
- **Configuration**: Modify `package.json` contributions for VS Code integration
This extension is a complex, multi-layered system that provides comprehensive AI assistance within VS Code. Understanding the service architecture, contribution system, and separation between platform and extension layers is crucial for making effective changes.
## Best Practices
- Use services and dependency injection over VS Code extension APIs when possible:
- Use `IFileSystemService` instead of Node's `fs` or `vscode.workspace.fs`
- Use `ILogService` instead of `console.log`
- Look for existing `I*Service` interfaces before reaching for raw APIs
- **Why**: Enables unit testing without VS Code host, supports simulation tests, provides cross-platform abstractions (Node vs web), and adds features like caching and size limits
- Always use the URI type instead of using string file paths. There are many helpers available for working with URIs.
================================================
FILE: .github/dependabot.yml
================================================
version: 2
updates:
- package-ecosystem: "devcontainers"
directory: "/"
groups:
all:
patterns:
- "*"
schedule:
interval: "weekly"
- package-ecosystem: "github-actions"
directory: "/"
groups:
all:
patterns:
- "*"
schedule:
interval: "weekly"
- package-ecosystem: "npm"
directories:
- "/"
groups:
all:
patterns:
- "*"
ignore:
- dependency-name: "@azure/identity"
update-types: ["version-update:semver-major", "version-update:semver-minor"] # Keep @azure/identity because upgrading breaks automation
- dependency-name: "@stylistic/eslint-plugin"
update-types: ["version-update:semver-major"] # Keep @stylistic/eslint-plugin 3 because 4 requires eslint 9 (@jrieken)
- dependency-name: "@hediet/node-reload"
update-types: ["version-update:semver-major", "version-update:semver-minor"] # @hediet/node-reload 0.8 for source compatibility (@hediet)
- dependency-name: "@types/eslint"
update-types: ["version-update:semver-major"] # eslint 8 for json config (@jrieken)
- dependency-name: "@types/node"
update-types: ["version-update:semver-major"] # Keep Node compatibility aligned with current Electron version in VS Code
- dependency-name: "@types/react"
update-types: ["version-update:semver-major"] # @fluentui/react-components currently requires react <19 (@ulugbekna)
- dependency-name: "@types/react-dom"
update-types: ["version-update:semver-major"] # @fluentui/react-components currently requires react <19 (@ulugbekna)
- dependency-name: "@types/vscode" # Manually sync with engine version
- dependency-name: "@vitest/snapshot"
update-types: ["version-update:semver-major"] # @vitest/snapshot 2 for source compatibility (@connor4312)
- dependency-name: "eslint"
update-types: ["version-update:semver-major"] # eslint 8 for json config (@jrieken)
- dependency-name: "eslint-plugin-local"
update-types: ["version-update:semver-major"] # eslint-plugin-local 1 for config compatibility (@jrieken)
- dependency-name: "lint-staged" # lint-staged 15.2.9 because newer versions fail to retrieve staged changes (@ulugbekna)
- dependency-name: "react"
update-types: ["version-update:semver-major"] # @fluentui/react-components currently requires react <19 (@ulugbekna)
- dependency-name: "react-dom"
update-types: ["version-update:semver-major"] # @fluentui/react-components currently requires react <19 (@ulugbekna)
- dependency-name: "@vscode/tree-sitter-wasm"
update-types: ["version-update:semver-major", "version-update:semver-minor"] # @vscode/tree-sitter-wasm 0.0.5 because extension tests fail with newer versions (@alexr00)
- dependency-name: "monaco-editor"
update-types: ["version-update:semver-major", "version-update:semver-minor"] # monaco-editor 0.44.0 because the simulation workbench fails to launch (@alexdima @hediet)
- dependency-name: "applicationinsights"
update-types: ["version-update:semver-major"] # applicationinsights 2 for source compatibility (@lramos15)
- dependency-name: "web-tree-sitter"
update-types: ["version-update:semver-major", "version-update:semver-minor"] # web-tree-sitter 0.23 for source compatibility (@alexr00)
schedule:
interval: "weekly"
================================================
FILE: .github/instructions/prompt-tsx.instructions.md
================================================
---
applyTo: '**/*.tsx'
description: Prompt-TSX coding guidelines
---
Guidelines for TSX files using [prompt-tsx](https://github.com/microsoft/vscode-prompt-tsx) focusing on specific patterns and token budget management for AI prompt engineering.
## Component Structure
### Base Pattern
- Extend `PromptElement<Props>` or `PromptElement<Props, State>` for all prompt components
- Props interfaces must extend `BasePromptElementProps`
```tsx
interface MyPromptProps extends BasePromptElementProps {
readonly userQuery: string;
}
class MyPrompt extends PromptElement<MyPromptProps> {
render() {
return (
<>
<SystemMessage priority={1000}>...</SystemMessage>
<UserMessage priority={900}>{this.props.userQuery}</UserMessage>
</>
);
}
}
```
### Async Components
- The `render` method can be async for components that need to perform async operations
- All async work should be done directly in the `render` method
```tsx
class FileContextPrompt extends PromptElement<FileContextProps> {
async render() {
const fileContent = await readFileAsync(this.props.filePath);
return (
<>
<SystemMessage priority={1000}>File content:</SystemMessage>
<UserMessage priority={900}>{fileContent}</UserMessage>
</>
);
}
}
```
## Prompt-Specific JSX
### Line Breaks
- **CRITICAL**: Use `<br />` for line breaks - newlines are NOT preserved in JSX
- Never rely on whitespace or string literal newlines
```tsx
// ✅ Correct
<SystemMessage>
You are an AI assistant.<br />
Follow these guidelines.<br />
</SystemMessage>
// ❌ Wrong - newlines will be collapsed
<SystemMessage>
You are an AI assistant.
Follow these guidelines.
</SystemMessage>
```
## Priority System
### Priority Values
- Higher numbers = higher priority (like z-index)
- Use consistent ranges:
- System messages: 1000
- User queries: 900
- Recent history: 700-800
- Context/attachments: 600-700
- Background info: 0-500
```tsx
<SystemMessage priority={1000}>...</SystemMessage>
<UserMessage priority={900}>{query}</UserMessage>
<HistoryMessages priority={700} />
<ContextualData priority={500} />
```
### Flex Properties for Token Budget
- `flexGrow={1}` - expand to fill remaining token space
- `flexReserve` - reserve tokens before rendering
- `passPriority` - pass-through containers that don't affect child priorities
```tsx
<FileContext priority={70} flexGrow={1} files={this.props.files} />
<History passPriority older={0} newer={80} flexGrow={2} flexReserve="/5" />
```
## Content Handling
### TextChunk for Truncation
- Use `TextChunk` for content that may exceed token budget
- Set `breakOn` patterns for intelligent truncation
```tsx
<TextChunk breakOnWhitespace priority={100}>
{longUserQuery}
</TextChunk>
<TextChunk breakOn=" " priority={80}>
{documentContent}
</TextChunk>
```
### Tag Component for Structured Content
- Use `Tag` for XML-like structured content with attributes
- Validates tag names and properly formats attributes
```tsx
<Tag name="attachments" attrs={{ id: variableName, type: "file" }}>
{content}
</Tag>
```
## References and Metadata
### Prompt References
- Use `<references>` for tracking variable usage
- Use `<meta>` for metadata that survives pruning
```tsx
<references value={[new PromptReference({ variableName })]} />
<meta value={new ToolResultMetadata(id, result)} />
```
### Keep-With Pattern
- Use `useKeepWith()` for content that should be pruned together
```tsx
const KeepWith = useKeepWith();
return (
<>
<KeepWith priority={2}>
<ToolCallRequest>...</ToolCallRequest>
</KeepWith>
<KeepWith priority={1}>
<ToolCallResponse>...</ToolCallResponse>
</KeepWith>
</>
);
```
## Token Budget Management
### Sizing-Aware Rendering
- Use `PromptSizing` parameter for budget-aware content generation
- Implement cooperative token usage
```tsx
async render(sizing: PromptSizing): Promise<PromptPiece> {
const content = await this.generateContent(sizing.tokenBudget);
return <>{content}</>;
}
```
### Performance
- Avoid expensive work in `render` methods when possible
- Cache computations when appropriate
- Use async `render` for all async operations
================================================
FILE: .github/instructions/vitest-unit-tests.instructions.md
================================================
---
applyTo: '**/*.spec.ts'
description: Vitest unit testing guidelines
---
Please follow these guidelines when writing unit tests using Vitest. These tests are `*.spec.ts`
## Best Practices
- Prefer explicit Test/Mock classes over mutating real instances or creating adhoc one-off mocks.
- Never use `as any` to override private methods or assign properties on real objects.
- Mock versions of services are typically named `Mock*` or `Test*`, you can search to find whether one already exists.
- Some examples: `MockFileSystemService`, `MockChatResponseStream`, `TestTasksService`.
- If there is no preexisting implementation of a service that is appropriate to reuse in the test, then you can create a simple mock or stub implementation in a file under a `test/` folder near the interface definition.
- A mock class should be configurable so that it can be shared and set up for different test scenarios.
- The helper `createExtensionUnitTestingServices` returns a `TestingServiceCollection` preconfigured with some common mock services, use `IInstantiationService` to create instances with those mocks. Here's an example of using it properly
```ts
const serviceCollection = store.add(createExtensionUnitTestingServices());
instantiationService = serviceCollection.createTestingAccessor().get(IInstantiationService);
const mockFs = accessor.get(IFileSystemService) as MockFileSystemService;
const testService = instantiationService.createInstance(SomeServiceToTest);
```
- When asked to write new tests, add tests to cover the behavior of the code under test, especially things that are interesting, unexpected, or edge cases.
- Avoid adding tests that simply repeat existing tests or cover trivial code paths.
- If available, prefer the runTests tool to run tests over a terminal command.
- Keep tests deterministic and fast.
- Avoid starting real servers or performing network I/O.
- Avoid excessive repetition in tests, use `beforeEach` to set up common state.
- Use helper functions to encapsulate common test logic.
================================================
FILE: .github/prompts/updateCopilotCLIToolMapping.prompt.md
================================================
---
name: updateCopilotCLIToolMapping
description: Update the mapping of Copilot CLI tools from the source code for the CLI runtime
---
The constant `ToolFriendlyNameAndHandlers` in src/extension/chatSessions/copilotcli/common/copilotCLITools.ts
contains a mapping of known tools, and how the progress and output is displayed.
The type `ToolInfo` contains all of the tools and their corresponding arguments/return types.
All of this information has been derived from <copilot-agent-runtime repo>/src/tools/**
I would like you to update the `ToolFriendlyNameAndHandlers` mapping as well as `ToolInfo` and other related types based on any new/updated tools that are defined in the CLI runtime repo.
* You must create simple TypeScript interfaces as done today see `WebSearchTool` for the tool `web_search`
* You must have an entry in `ToolFriendlyNameAndHandlers` for the new tools
* You must add/update any of the related tests
At the end of all of your changes you must provide a summary
* List of updated tools and their friendly names
What are the updates to, did the arguments change, did the return type change, etc.
How does this impact what is displayed to the user
* List of new tools and their friendly names
How are the arguments and output displayed to the user
Finally, if the user hasn't already provided this, then you must ask for the folder path to the CLI runtime repo.
================================================
FILE: .github/prompts/updateGithubCopilotSDK.prompt.md
================================================
---
name: updateGithubCopilotSDK
description: Use this to update the Github Copilot CLI/SDK
model: Claude Opus 4.6
---
You are an expert at upgrading the @github/copilot npm package in the vscode-copilot-chat project.
## Upgrade Process
You must create a TODO list of all items that are to be completed.
You MUST create a TODO markdown file before commencing any of the work. Update this file after each step is completed.
You must also use the update_todo tool on each step.
Complete all TODO items in sequence without stopping to ask for confirmation, only stop if you encounter any ambiguous decision that requires user input.
The TODO is your primary tracking mechanism. Before each step you MUST read the TODO to determine what to do next.
At a minimum your TODO must contain the following:
1. Snapshot old type definitions
2. Update the package
3. Compare differences in type definitions and document them
4. Compile,
5. fix
6. test
7. Repease steps Compile, fix and tests until all tests are passing
8. Run integration tests
9. Repeate Compile, Fix, Test, Test integration tests until all integration tests are passing
11. Create a summary
Follow these steps exactly:
### 1. Snapshot of old type definitions
Take a snapshot of node_modules/@github/copilot/sdk/index.d.ts to compare against after the upghttps://github.com/microsoft/vscode/issues/291457rade.
### 2. Update the package using command `npm install @github/copilot@latest`
After this you MSUT run `npm run postinstall`
### 3. Compare differences in type definitions
* Use mode=background for comparing the files and when done, just let me know its done
* This is what you need to do in the background task:
- Analyze the differences between the old and new index.d.ts files to identify any API changes, new features, or breaking changes.
- Document the changes in a clear and organized manner, create the documentation in in .build/upgrade-notes.md
### 4. Compile, fix and test
#### 4.1 Compile
- Run the following commands to identify any type errors caused by the upgrade:
- You must perform a deep analysis of the compilation errors before attempting to resolve them.
- Ensure there are no compilation errors before proceeding to run the tests.
```bash
npm run compile
npx tsc --noEmit --project tsconfig.json
```
#### 4.2 Run Tests
- Use the following command to run test
```bash
npm run test:unit
```
- Do NOT change the behavour of the code just to make the tests pass.
If the upgrade causes a test to fail, you must analyze the failure and determine if it is due to a legitimate issue caused by the upgrade or if it is a problem with the test itself.
- Ensure all tests are passing before proceeding to the next step.
### 5. Running integration tests
- The tests are located in test/e2e/cli.stest.ts.
- The tests in this file are all skipped by default using `suite.skip`, so you must remove the `.skip` to enable them before running the tests.
- Run the tests using the following command:
```bash
npm run simulate -- --grep=@cli --verbose -n=1 -p=1@cli
```
These tests are very slow, you might have to wait for around 5 minutes for them to complete.
- As earlier, fix the test failures without changing the behavior of the code, and ensure that all tests are passing.
NOTE:
Tests are considered passing only if you get a score of 100%
Here's a sample output. As you can see below the score needs to be 100/100 for the tests to be considered passing.
```
Suite Summary by Language:
┌─────────┬───────────────────┬──────────┬───────┬────────────┬──────────┐
│ (index) │ Suite │ Language │ Model │ # of tests │ Score(%) │
├─────────┼───────────────────┼──────────┼───────┼────────────┼──────────┤
│ 0 │ '@cli [external]' │ '-' │ '-' │ 16 │ 100 │
└─────────┴───────────────────┴──────────┴───────┴────────────┴──────────┘
Approximate Summary (due to using --n=1 instead of --n=10):
Overall Approximate Score: 100.00 / 100
```
#### 6. Re-introduce `stest.skip` changes in cli.stest.ts
#### 5. Summarize the changes
- After successfully upgrading the @github/copilot package and ensuring that all tests are passing, you must create a summary of the changes that were made during the upgrade process.
- Give a summary of the changes in the code base
- Give a summary of the changes in the tests
- Give a summary of the differenes in the type definitions between the old and new versions of the @github/copilot package.
- Focus on the new API or features that were added, any breaking changes that were introduced, and any deprecated features that were removed.
- Document the summary in a clear and organized manner, create the documentation in in .build/upgrade-notes.md
================================================
FILE: .github/workflows/copilot-setup-steps.yml
================================================
name: Copilot Setup Steps
# Automatically run the setup steps when they are changed to allow for easy validation, and
# allow manual testing through the repository's "Actions" tab
on:
workflow_dispatch:
push:
paths:
- .github/workflows/copilot-setup-steps.yml
pull_request:
paths:
- .github/workflows/copilot-setup-steps.yml
jobs:
copilot-setup-steps:
name: Setup Development Environment
runs-on: vscode-large-runners
steps:
- name: Checkout repository
uses: actions/checkout@v6
with:
lfs: true
- name: Setup Node.js
uses: actions/setup-node@v6
with:
node-version-file: .nvmrc
- name: Setup Python
uses: actions/setup-python@v6
with:
python-version: '3.12'
architecture: 'x64'
- name: Setup .NET
uses: actions/setup-dotnet@v5
with:
dotnet-version: '10.0'
- name: Install setuptools
run: pip install setuptools
- name: Restore build cache
uses: actions/cache/restore@v4
id: build-cache
with:
key: build_cache-${{ hashFiles('build/.cachesalt', 'package-lock.json') }}
path: .build/build_cache
- name: Extract build cache
if: steps.build-cache.outputs.cache-hit == 'true'
run: tar -xzf .build/build_cache/cache.tgz
- name: Install dependencies
if: steps.build-cache.outputs.cache-hit != 'true'
run: npm ci
- name: Create build cache archive
if: steps.build-cache.outputs.cache-hit != 'true'
run: |
set -e
mkdir -p .build
node build/listBuildCacheFiles.js .build/build_cache_list.txt
mkdir -p .build/build_cache
tar -czf .build/build_cache/cache.tgz --files-from .build/build_cache_list.txt
- name: Verify installation
run: |
node --version
npm --version
python --version
dotnet --version
================================================
FILE: .github/workflows/ensure-node-modules-cache.yml
================================================
name: Ensure node modules cache
on:
push:
branches:
- main
permissions:
contents: read
jobs:
linux:
name: Linux
runs-on: [ self-hosted, 1ES.Pool=1es-vscode-ubuntu-22.04-x64 ]
steps:
- name: Checkout repository
uses: actions/checkout@v6
with:
lfs: true
- name: Setup Node.js
uses: actions/setup-node@v6
with:
node-version-file: .nvmrc
- name: Restore build cache
uses: actions/cache@v4
id: build-cache
with:
key: build_cache-${{ hashFiles('build/.cachesalt', 'package-lock.json') }}
path: .build/build_cache
- name: Install dependencies
if: steps.build-cache.outputs.cache-hit != 'true'
run: npm ci
- name: Create build cache archive
if: steps.build-cache.outputs.cache-hit != 'true'
run: |
set -e
mkdir -p .build
node build/listBuildCacheFiles.js .build/build_cache_list.txt
mkdir -p .build/build_cache
tar -czf .build/build_cache/cache.tgz --files-from .build/build_cache_list.txt
windows:
name: Windows
runs-on: [ self-hosted, 1ES.Pool=1es-vscode-windows-2022-x64 ]
steps:
- name: Checkout repository
uses: actions/checkout@v6
with:
lfs: true
- name: Setup Node.js
uses: actions/setup-node@v6
with:
node-version: '22.21.x'
- name: Setup Python
uses: actions/setup-python@v6
with:
python-version: '3.12'
architecture: 'x64'
- name: Restore build cache
uses: actions/cache@v4
id: build-cache
with:
key: windows-build_cache-${{ hashFiles('build/.cachesalt', 'package-lock.json') }}
path: .build/build_cache
- name: Install dependencies
if: steps.build-cache.outputs.cache-hit != 'true'
run: npm ci
- name: Create build cache archive
if: steps.build-cache.outputs.cache-hit != 'true'
run: |
mkdir -Force .build
node build/listBuildCacheFiles.js .build/build_cache_list.txt
mkdir -Force .build/build_cache
7z.exe a .build/build_cache/cache.7z -mx3 `@.build/build_cache_list.txt
================================================
FILE: .github/workflows/npm-package.yml
================================================
name: chat-lib tests
on:
pull_request:
workflow_dispatch:
permissions:
contents: read
concurrency:
group: chat-lib-tests-${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
jobs:
test:
name: chat-lib tests (${{ matrix.os }})
runs-on: ${{ matrix.os }}
timeout-minutes: 30
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 22.x
cache: npm
cache-dependency-path: |
package-lock.json
chat-lib/package-lock.json
- name: Extract chat-lib
shell: bash
run: |
npm ci
npm run extract-chat-lib
rm -rf node_modules
- name: Install chat-lib dependencies
working-directory: chat-lib
run: npm ci
- name: Build chat-lib
working-directory: chat-lib
run: npm run build
- name: Test chat-lib
working-directory: chat-lib
run: npm test
================================================
FILE: .github/workflows/pr.yml
================================================
name: PR Checks
on:
push:
branches:
- 'gh-readonly-queue/main/*'
pull_request:
branches:
- main
- 'release/*'
permissions:
contents: read
pull-requests: read
jobs:
check-test-cache:
name: Check test cache
runs-on: [ self-hosted, 1ES.Pool=1es-vscode-ubuntu-22.04-x64 ]
steps:
- name: Checkout code
uses: actions/checkout@v6
with:
lfs: true
- uses: actions/setup-node@v6
with:
node-version-file: .nvmrc
- name: Restore build cache
uses: actions/cache/restore@v4
id: build-cache
with:
key: build_cache-${{ hashFiles('build/.cachesalt', 'package-lock.json') }}
path: .build/build_cache
- name: Extract build cache
if: steps.build-cache.outputs.cache-hit == 'true'
run: tar -xzf .build/build_cache/cache.tgz
- name: Install dependencies
if: steps.build-cache.outputs.cache-hit != 'true'
run: npm ci
- name: Ensure no duplicate cache keys
run: npx tsx test/base/cache-cli check
- name: Ensure no untrusted cache changes
run: npx tsx build/pr-check-cache-files.ts
if: github.event_name == 'pull_request'
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
REPOSITORY: ${{ github.repository }}
PULL_REQUEST: ${{ github.event.pull_request.number }}
check-telemetry:
name: Check telemetry events
runs-on: [ self-hosted, 1ES.Pool=1es-vscode-ubuntu-22.04-x64 ]
steps:
- name: Checkout code
uses: actions/checkout@v6
with:
lfs: true
- uses: actions/setup-node@v6
with:
node-version: '22.21.x'
- name: Validate telemetry events
run: npx --package=@vscode/telemetry-extractor --yes vscode-telemetry-extractor -s . > /dev/null
linux-tests:
name: Test (Linux)
runs-on: [ self-hosted, 1ES.Pool=1es-vscode-ubuntu-22.04-x64 ]
steps:
- name: Checkout repository
uses: actions/checkout@v6
with:
lfs: true
- name: Setup Node.js
uses: actions/setup-node@v6
with:
node-version: '22.21.x'
- name: Setup Python
uses: actions/setup-python@v6
with:
python-version: '3.12'
architecture: 'x64'
- name: Setup .NET
uses: actions/setup-dotnet@v5
with:
dotnet-version: '10.0'
- name: Install setuptools
run: pip install setuptools
- name: Restore build cache
uses: actions/cache/restore@v4
id: build-cache
with:
key: build_cache-${{ hashFiles('build/.cachesalt', 'package-lock.json') }}
path: .build/build_cache
- name: Extract build cache
if: steps.build-cache.outputs.cache-hit == 'true'
run: tar -xzf .build/build_cache/cache.tgz
- name: Install dependencies
if: steps.build-cache.outputs.cache-hit != 'true'
run: npm ci
- name: Create build cache archive
if: steps.build-cache.outputs.cache-hit != 'true'
run: |
set -e
mkdir -p .build
node build/listBuildCacheFiles.js .build/build_cache_list.txt
mkdir -p .build/build_cache
tar -czf .build/build_cache/cache.tgz --files-from .build/build_cache_list.txt
- name: Ensure proposed API types are up to date
run: npm run vscode-dts:check
- name: TypeScript type checking
run: npm run typecheck
- name: Lint
run: npm run lint
- name: Compile
run: npm run compile
- name: Run vitest unit tests
run: npm run test:unit
- name: Run simulation tests with cache
run: npm run simulate-ci
- name: Run extension tests using VS Code
run: xvfb-run -a npm run test:extension
- name: Run Completions Core prompt tests
run: npm run test:prompt
- name: Run Completions Core lib tests using VS Code
run: xvfb-run -a npm run test:completions-core
- name: Archive simulation output
if: always()
run: |
set -e
mkdir -p .simulation-archive
tar -czf .simulation-archive/simulation.tgz -C .simulation .
- name: Upload simulation output
if: always()
uses: actions/upload-artifact@v5
with:
name: simulation-output-linux-${{ github.run_attempt }}
path: .simulation-archive/simulation.tgz
windows-tests:
name: Test (Windows)
runs-on: [ self-hosted, 1ES.Pool=1es-vscode-windows-2022-x64 ]
steps:
- name: Checkout repository
uses: actions/checkout@v6
with:
lfs: true
- name: Setup Node.js
uses: actions/setup-node@v6
with:
node-version: '22.21.x'
- name: Setup Python
uses: actions/setup-python@v6
with:
python-version: '3.12'
architecture: 'x64'
- name: Setup .NET
uses: actions/setup-dotnet@v5
with:
dotnet-version: '10.0'
- name: Install setuptools
run: pip install setuptools
- name: Restore build cache
uses: actions/cache/restore@v4
id: build-cache
with:
key: windows-build_cache-${{ hashFiles('build/.cachesalt', 'package-lock.json') }}
path: .build/build_cache
- name: Extract build cache
if: steps.build-cache.outputs.cache-hit == 'true'
run: 7z.exe x .build/build_cache/cache.7z -aoa
- name: Install dependencies
if: steps.build-cache.outputs.cache-hit != 'true'
run: npm ci
- name: Create build cache archive
if: steps.build-cache.outputs.cache-hit != 'true'
run: |
mkdir -Force .build
node build/listBuildCacheFiles.js .build/build_cache_list.txt
mkdir -Force .build/build_cache
7z.exe a .build/build_cache/cache.7z -mx3 `@.build/build_cache_list.txt
- name: TypeScript type checking
run: npm run typecheck
- name: Lint
run: npm run lint
- name: Compile
run: npm run compile
- name: Run vitest unit tests
run: npm run test:unit
- name: Run simulation tests with cache
run: npm run simulate-ci
- name: Run extension tests using VS Code
run: npm run test:extension
- name: Run Completions Core prompt tests
run: npm run test:prompt
- name: Run Completions Core lib tests using VS Code
run: npm run test:completions-core
================================================
FILE: .gitignore
================================================
.DS_Store
.vscode-test/
.vscode-test-web/
node_modules/
dist/
dist-sourcemaps/
# created by simulation
.simulation
# stores wasm and other build files
.build
# created by python scripts
__pycache__/
.venv*
.ruff_cache/
*.egg-info/
# Secret token files
/.env
*.token
# Test infra
test/simulation/language/harness/
# localization files are generated in the build
l10n/
# vitest --coverage
coverage/
# Base cache database (GC mode)
test/simulation/cache/_base.sqlite
test/aml/out
# Ignore files in huksy (else we always end up with files when creating worktrees)
.husky/_/
# claude
.claude/settings.local.json
# VS Code extension debug profile (agent-browser automation)
.vscode-ext-debug/
# playwright
.playwright-mcp/
# Chat customizations
.agents/agents/*.local.md
.claude/agents/*.local.md
.github/agents/*.local.md
.agents/agents/*.local.agent.md
.claude/agents/*.local.agent.md
.github/agents/*.local.agent.md
.agents/hooks/*.local.json
.claude/hooks/*.local.json
.github/hooks/*.local.json
.agents/instructions/*.local.instructions.md
.claude/instructions/*.local.instructions.md
.github/instructions/*.local.instructions.md
.agents/prompts/*.local.prompt.md
.claude/prompts/*.local.prompt.md
.github/prompts/*.local.prompt.md
.agents/skills/.local/
.claude/skills/.local/
.github/skills/.local/
================================================
FILE: .husky/pre-commit
================================================
set -e
npx lint-staged
================================================
FILE: .husky/pre-push
================================================
set -e
# git-lfs hook
command -v git-lfs >/dev/null 2>&1 || { echo >&2 "\nThis repository is configured for Git LFS but 'git-lfs' was not found on your path. If you no longer wish to use Git LFS, remove this hook by deleting '.git/hooks/pre-push'.\n"; exit 2; }
git lfs pre-push "$@"
================================================
FILE: .mocha-multi-reporters.js
================================================
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
const path = require('path');
// In CI, the name of the NPM command that was run is used to generate a unique
// filename for the JUnit report. The name we give it is then used as the test
// bundle name in DataDog.
const commandToBundleName = {
isolatedProxyTests: 'IsolatedProxy',
reverseProxyTests: 'ReverseProxy',
test: 'LSPClient',
'test:agent': 'Agent',
'test:lib': 'Lib',
'test:lib-e2e': 'LibEndToEnd',
};
const config = {
reporterEnabled: 'spec',
};
if (process.env.CI) {
const bundleName = commandToBundleName[process.env.npm_lifecycle_event] || 'Unit';
config.reporterEnabled += ', mocha-junit-reporter';
config.mochaJunitReporterReporterOptions = {
testCaseSwitchClassnameAndName: true,
testsuitesTitle: `Copilot ${bundleName} Tests`,
mochaFile: path.resolve(__dirname, `test-results-${bundleName}.xml`),
};
}
module.exports = config;
================================================
FILE: .mocharc.js
================================================
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
'use strict';
const config = {
exit: true,
'node-option': 'unhandled-rejections=strict',
reporter: 'mocha-multi-reporters',
'reporter-option': [`configFile=${__dirname}/.mocha-multi-reporters.js`],
require: ['tsx'],
ui: 'tdd',
};
const cmd = process.env.npm_lifecycle_event;
if (['test:lsp-client'].includes(cmd) && !process.env.CI) {
config.parallel = true;
}
if (['test:lsp-client', 'reverseProxyTests'].includes(cmd) && process.env.CI) {
config.bail = true;
}
if (['test:lsp-client', 'test:lib-e2e'].includes(cmd) && process.env.CI) {
config.retries = 3;
}
module.exports = config;
================================================
FILE: .npmrc
================================================
engine-strict=true
================================================
FILE: .nvmrc
================================================
22.21.1
================================================
FILE: .prettierignore
================================================
dist/**
.vscode/**
.vscode-test/**
test/.vscode-test/**
.git-blame-ignore-revs
**/*.md
**/*.ts
**/*.js
**/*.yml
test/scenarios/**
.simulation/**
.build/**
test/simulation/fixtures/**
src/extension/prompts/node/test/fixtures/**
test/simulation/baseline.json
prompt/dist/**
src/base/util/*.json
================================================
FILE: .vscode/conversation.schema.json
================================================
{
"$schema": "http://json-schema.org/draft-07/schema",
"type": "array",
"definitions": {
"keyword-list": {
"type": "array",
"items": {
"type": [
"string",
"object"
],
"anyOf": [
{
"type": "string"
},
{
"$ref": "#/definitions/keyword-object"
}
]
}
},
"keyword-object": {
"type": "object",
"properties": {
"allOf": {
"description": "A list of keywords or keyword lists that must all be satisfied in the response for the test to pass.",
"$ref": "#/definitions/keyword-list"
},
"anyOf": {
"description": "A list of keywords or keyword lists which at least one must be satisfied in the response for the test to pass.",
"$ref": "#/definitions/keyword-list"
},
"not": {
"description": "A list of keywords or keyword lists that must not be satisfied in the response for the test to pass.",
"$ref": "#/definitions/keyword-list"
}
}
},
"keywords": {
"anyOf": [
{
"type": "array",
"$ref": "#/definitions/keyword-list"
},
{
"type": "object",
"$ref": "#/definitions/keyword-object"
}
]
}
},
"items": {
"type": "object",
"required": [
"question"
],
"properties": {
"question": {
"description": "The user question to send to Copilot.",
"type": "string"
},
"stateFile": {
"description": "The relative path to the state file to use for this question.",
"type": "string"
},
"keywords": {
"description": "The keywords to expect or exclude from the response.",
"$ref": "#/definitions/keywords"
}
}
},
"additionalProperties": false
}
================================================
FILE: .vscode/extensions/test-extension/.vscode/launch.json
================================================
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"args": [
"--extensionDevelopmentPath=${workspaceFolder}/test-extension"
],
"name": "Launch Simulation Test Runner",
"outFiles": [
"${workspaceFolder}/.vscode/extensions/test-extension/dist/**/*.js"
],
// "preLaunchTask": "npm",
"request": "launch",
"type": "extensionHost"
}
]
}
================================================
FILE: .vscode/extensions/test-extension/bootstrap.ts
================================================
/*---------------------------------------------------------------------------------------------
* 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';
(<any>globalThis).projectRoot = vscode.workspace.workspaceFolders?.at(0)?.uri.fsPath ?? __dirname;
================================================
FILE: .vscode/extensions/test-extension/main.ts
================================================
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import './bootstrap';
import * as fs from 'fs';
import { join } from 'path';
import * as vscode from 'vscode';
import { AsyncIterableObject, AsyncIterableSource } from '../../../src/util/vs/base/common/async';
import { CancellationToken } from '../../../src/util/vs/base/common/cancellation';
import { DisposableStore } from '../../../src/util/vs/base/common/lifecycle';
import { URI } from '../../../src/util/vs/base/common/uri';
import { generateUuid } from '../../../src/util/vs/base/common/uuid';
import { IDetectedSuiteOutput, IDetectedTestOutput, OutputType, RunOutput } from '../../../test/simulation/shared/sharedTypes';
import { ISpawnSimulationOptions, SIMULATION_MAIN_PATH, extractJSONL, spawnSimulation } from '../../../test/simulation/workbench/utils/simulationExec';
import { REPO_ROOT } from '../../../test/simulation/workbench/utils/utils';
export async function activate(context: vscode.ExtensionContext) {
// probe for project root
let isCorrectRepo = false;
try {
const pkg = JSON.parse(String(await fs.promises.readFile(join(REPO_ROOT, 'package.json'))));
isCorrectRepo = pkg.name === 'copilot-chat';
} catch (err) {
console.error('[STEST] error reading ' + join(REPO_ROOT, 'package.json'));
console.error(err);
isCorrectRepo = false;
}
if (!isCorrectRepo) {
console.log('[STEST] NO activation because in wrong REPO/WORKSPACE', REPO_ROOT);
return;
}
const ctrl = vscode.tests.createTestController('simulation', 'STest');
ctrl.refreshHandler = async (token) => {
const stream = spawnSimulation<IDetectedTestOutput | IDetectedSuiteOutput>({ ignoreNonJSONLines: true, args: ['--list-tests', '--list-suites', '--json'] }, token);
const suites = new Map<string, vscode.TestItem>();
for await (const item of stream) {
const testItem = ctrl.createTestItem(item.name, item.name, item.location && URI.file(item.location.path));
testItem.range = item.location && new vscode.Range(item.location.position.line, item.location.position.character, item.location.position.line, item.location.position.character);
if (item.type === OutputType.detectedSuite) {
suites.set(item.name, testItem);
ctrl.items.add(testItem);
} else if (item.type === OutputType.detectedTest) {
const suiteItem = suites.get(item.suiteName);
(suiteItem?.children ?? ctrl.items).add(testItem);
}
}
};
ctrl.refreshHandler(CancellationToken.None);
const simulationAsTestRun = async (request: vscode.TestRunRequest, options: { extraArgs: string[]; debug?: boolean }, token: vscode.CancellationToken) => {
const run = ctrl.createTestRun(request, undefined, false);
const args = ['--json'];
if (options.extraArgs.length) {
args.push(...options.extraArgs);
}
const items = new Map<string, vscode.TestItem>();
const stack: vscode.TestItemCollection[] = [];
if (request.include && request.include.length) {
const grep: string[] = [];
for (const item of request.include) {
grep.push(item.label);
items.set(item.label, item);
stack.push(item.children);
}
args.push('--grep', grep.join('|'));
} else {
stack.push(ctrl.items);
}
while (stack.length > 0) {
const coll = stack.pop()!;
for (const [, item] of coll) {
if (item.children.size > 0) {
stack.push(item.children);
} else {
items.set(item.label, item);
}
}
}
if (request.exclude && request.exclude.length) {
const omitGrep: string[] = [];
for (const item of request.exclude) {
omitGrep.push(item.label);
items.delete(item.label);
}
args.push('--omit-grep', omitGrep.join('|'));
}
run.appendOutput('[STEST] will SPAWN simulation with: ' + args.join(' ') + '\r\n');
try {
const stream = !options.debug
? spawnSimulation<RunOutput>({ ignoreNonJSONLines: true, args }, token)
: debugSimulation<RunOutput>({ ignoreNonJSONLines: true, args }, token);
class Runs {
private _starts: number = 0;
private _passes: number = 0;
private _fails: number = 0;
constructor(readonly n: number) { }
get passes() {
return this._passes;
}
get fails() {
return this._fails;
}
start() {
this._starts++;
return this._starts === 1;
}
done(pass: boolean) {
if (pass) {
this._passes++;
} else {
this._fails++;
}
if (this._passes + this._fails === this.n) {
return true;
}
}
}
const nRuns = new Map<vscode.TestItem, Runs>();
for await (const output of stream) {
run.appendOutput('[STEST] received output:\r\n' + JSON.stringify(output, undefined, 2).replaceAll('\n', '\r\n') + '\r\n');
if (output.type === OutputType.initialTestSummary) {
// mark tests as enqueued
for (const item of output.testsToRun) {
const test = items.get(item);
if (test) {
run.enqueued(test);
nRuns.set(test, new Runs(output.nRuns));
}
}
} else if (output.type === OutputType.skippedTest) {
// mark tests as skipped
const test = items.get(output.name);
if (test) {
run.skipped(test);
nRuns.delete(test);
}
} else if (output.type === OutputType.testRunStart) {
// mark tests as running
const test = items.get(output.name);
const runs = test && nRuns.get(test)!;
if (test && runs?.start()) {
run.started(test);
}
} else if (output.type === OutputType.testRunEnd) {
// mark tests as done, process output
const test = items.get(output.name);
if (!test) {
continue;
}
const runs = nRuns.get(test)!;
if (runs.done(output.pass)) {
run.passed(test);
run.appendOutput(`[STEST] DONE with ${output.name}, ${runs.passes} passes and ${runs.fails} fails`, undefined, test);
}
} else if (output.type === OutputType.deviceCodeCallback) {
vscode.env.openExternal(vscode.Uri.parse(output.url));
}
}
} catch (err) {
if (err instanceof Error && err.name !== 'Cancelled') {
run.appendOutput('[STEST] FAILED to run\r\n');
run.appendOutput(String(err) + '\r\n');
}
} finally {
run.end();
}
};
const defaultRunProfile = ctrl.createRunProfile('STest', vscode.TestRunProfileKind.Run, (request, token) => simulationAsTestRun(request, { extraArgs: ['-p', '20'], }, token));
context.subscriptions.push(defaultRunProfile);
defaultRunProfile.isDefault = true;
const defaultDebugProfile = ctrl.createRunProfile('STest: debug', vscode.TestRunProfileKind.Debug, (request, token) => simulationAsTestRun(request, { extraArgs: ['--n', '1', '-p', '1'], debug: true }, token));
context.subscriptions.push(defaultDebugProfile);
const visualizeDebugProfile = ctrl.createRunProfile('STest: inspect and visualize', vscode.TestRunProfileKind.Debug, (request, token) => {
const args = {
fileName: request.include![0].uri!.fsPath,
path: request.include![0].label,
};
vscode.commands.executeCommand(
'debug-value-editor.debug-and-send-request',
{
launchConfigName: "Test Visualization Runner STests",
args: args,
revealAvailablePropertiesView: true,
}
);
});
context.subscriptions.push(visualizeDebugProfile);
const updateBaselineProfile = ctrl.createRunProfile('STest: update-baseline', vscode.TestRunProfileKind.Run, (request, token) => simulationAsTestRun(request, { extraArgs: ['--update-baseline', '-p', '20'] }, token));
context.subscriptions.push(updateBaselineProfile);
context.subscriptions.push(ctrl);
}
function debugSimulation<T>(options: ISpawnSimulationOptions, token: CancellationToken): AsyncIterableObject<T> {
const source = new AsyncIterableSource<string>();
const key = generateUuid();
const store = new DisposableStore();
const sessions = new Set<vscode.DebugSession>();
// (1) launch
Promise.resolve(vscode.debug.startDebugging(vscode.workspace.workspaceFolders![0], {
type: 'node-terminal',
request: 'launch',
name: 'Debug Simulation Tests',
command: `node ${SIMULATION_MAIN_PATH} ${options.args.map(a => a.includes(' ') ? `"${a}"` : a).join(' ')}`,
__key: key,
})).catch(err => source.reject(err));
token.onCancellationRequested(() => {
sessions.forEach(s => !s.parentSession && vscode.debug.stopDebugging(s));
source.resolve();
});
//(2) spy
store.add(vscode.debug.registerDebugAdapterTrackerFactory('*', {
createDebugAdapterTracker: (session) => {
if (sessions.has(session)) {
return;
}
const __key = session.configuration.__key ?? session.parentSession?.configuration.__key;
if (__key !== key) {
return;
}
sessions.add(session);
return {
onDidSendMessage({ type, event, body }) {
if (type === 'event' && event === 'output' && body.category === 'stdout') {
source.emitOne(body.output);
}
}
};
}
}));
store.add(vscode.debug.onDidTerminateDebugSession(session => {
if (sessions.delete(session)) {
source.resolve();
}
}));
source.asyncIterable.toPromise().finally(() => store.dispose());
return extractJSONL<T>(source.asyncIterable, options);
}
================================================
FILE: .vscode/extensions/test-extension/package.json
================================================
{
"publisher": "ms-vscode",
"name": "simulation-test-runner",
"version": "0.0.4",
"displayName": "STest Runner",
"engines": {
"vscode": "^1.85.0"
},
"main": "./dist/simulation-extension.js",
"activationEvents": [
"onStartupFinished"
]
}
================================================
FILE: .vscode/extensions/visualization-runner/README.md
================================================
# Visualization Runner
This extension add "Visualize Test" code actions to tests that have `[visualizable]` in their name:

It runs them using file://./../../../test/testVisualizationRunner.ts.
================================================
FILE: .vscode/extensions/visualization-runner/entry.js
================================================
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
require('tsx/cjs');
const { enableHotReload, hotRequire } = require("@hediet/node-reload");
enableHotReload({ entryModule: module });
/**
* @param {import("vscode").ExtensionContext} context
*/
function activate(context) {
context.subscriptions.push(hotRequire(module, "./extension", ext => new ext.Extension()));
}
module.exports = { activate };
================================================
FILE: .vscode/extensions/visualization-runner/extension.ts
================================================
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import * as ts from 'typescript';
import { Range, languages, workspace } from 'vscode';
import { timeout } from '../../../src/util/vs/base/common/async';
import { CachedFunction, LRUCachedFunction } from '../../../src/util/vs/base/common/cache';
import { Disposable } from '../../../src/util/vs/base/common/lifecycle';
export class Extension extends Disposable {
private readonly _testCaches = new CachedFunction((fileName: string) => {
let first = true;
return new LRUCachedFunction(async (modelVersion: number) => {
if (first) {
first = false;
} else {
await timeout(1000);
}
const document = workspace.textDocuments.find(d => d.fileName === fileName);
if (document?.version !== modelVersion) { return []; }
const text = document.getText();
if (!text.includes('test')) { return []; }
const tests = getTests(text);
return tests.filter(isVisualizableTest);
});
});
constructor() {
super();
this._register(languages.registerCodeLensProvider([
{ language: 'javascript', scheme: 'file' },
{ language: 'typescript', scheme: 'file' }
], {
provideCodeLenses: async (document, token) => {
const info = await (this._testCaches.get(document.fileName).get(document.version));
return info.map(t => ({
range: new Range(t.lineNumber, 0, t.lineNumber, 0),
command: {
title: 'Visualize Test',
command: 'debug-value-editor.debug-and-send-request',
arguments: [{
launchConfigName: "Test Visualization Runner",
args: {
fileName: document.fileName,
path: t.path,
},
revealAvailablePropertiesView: true,
}],
},
isResolved: true,
}));
},
}));
}
}
function isVisualizableTest(info: TestInfo): boolean {
return info.path.some(p => p.indexOf('[visualizable]') !== -1);
}
type TestInfo = {
path: string[];
lineNumber: number;
};
function getTests(document: string): TestInfo[] {
let sf;
try {
sf = ts.createSourceFile('', document, ts.ScriptTarget.ESNext, true);
} catch (e) {
console.error(e);
return [];
}
function parseTest(node: ts.Node): { testName: string; node: ts.Node } | undefined {
if (!ts.isCallExpression(node)) { return undefined; }
if (!ts.isIdentifier(node.expression)) { return undefined; }
if (node.expression.text !== 'test') { return undefined; }
const firstArg = node.arguments[0];
if (!ts.isStringLiteral(firstArg)) { return undefined; }
return {
testName: firstArg.text,
node: node.expression,
};
}
function parseDescribeOrSuite(node: ts.Node): { describeName: string; node: ts.Node } | undefined {
if (!ts.isCallExpression(node)) { return undefined; }
if (!ts.isIdentifier(node.expression)) { return undefined; }
if (node.expression.text !== 'describe' && node.expression.text !== 'suite') { return undefined; }
const firstArg = node.arguments[0];
if (!ts.isStringLiteral(firstArg)) { return undefined; }
return {
describeName: firstArg.text,
node: node.expression,
};
}
const currentPath: string[] = [];
const result: TestInfo[] = [];
function find(node: ts.Node) {
const test = parseTest(node);
if (test) {
const pos = sf.getLineAndCharacterOfPosition(test.node.getStart());
result.push({ path: [...currentPath, test.testName], lineNumber: pos.line });
}
const describe = parseDescribeOrSuite(node);
if (describe) {
currentPath.push(describe.describeName);
}
ts.forEachChild(node, find);
if (describe) {
currentPath.pop();
}
}
find(sf);
return result;
}
================================================
FILE: .vscode/extensions/visualization-runner/package.json
================================================
{
"publisher": "ms-vscode",
"name": "visualization-runner",
"version": "0.1.0",
"displayName": "Visualization Runner",
"engines": {
"vscode": "^1.85.0"
},
"main": "./entry.js",
"activationEvents": [
"onLanguage:typescript"
],
"extensionDependencies": [
"ms-vscode.debug-value-editor"
]
}
================================================
FILE: .vscode/extensions.json
================================================
{
"recommendations": [
"dbaeumer.vscode-eslint",
"esbenp.prettier-vscode",
"connor4312.esbuild-problem-matchers",
"ms-vscode.extension-test-runner",
"ms-vscode.debug-value-editor",
"ms-vscode.web-editors",
"ms-vscode.visualization-runner",
"vitest.explorer",
"ms-vscode.ts-file-path-support",
"charliermarsh.ruff"
]
}
================================================
FILE: .vscode/launch.json
================================================
{
"version": "0.2.0",
"configurations": [
{
"type": "extensionHost",
"request": "launch",
"name": "Launch Copilot Extension",
"runtimeExecutable": "${execPath}",
"args": [
"--extensionDevelopmentPath=${workspaceFolder}"
],
"smartStep": true,
"sourceMaps": true,
"envFile": "${workspaceFolder}/.env",
"env": {
"COPILOT_LOG_TELEMETRY": "true",
"VSCODE_DEV_DEBUG": "1",
},
"outFiles": [
"${workspaceFolder}/dist/**/*.js",
"!**/node_modules/**"
],
"presentation": {
"group": "0_launch"
}
},
{
"type": "extensionHost",
"request": "launch",
"name": "Launch Copilot Extension - Watch Mode",
"runtimeExecutable": "${execPath}",
"args": [
"--extensionDevelopmentPath=${workspaceFolder}"
],
"smartStep": true,
"sourceMaps": true,
"preLaunchTask": "watch",
"env": {
"COPILOT_LOG_TELEMETRY": "true",
"VSCODE_DEV_DEBUG": "1",
},
"outFiles": [
"${workspaceFolder}/dist/**/*.js",
"!**/node_modules/**"
],
"presentation": {
"group": "0_launch",
}
},
{
"type": "node",
"request": "launch",
"name": "Launch Copilot Extension - Watch Mode - Code OSS",
"runtimeExecutable": "${workspaceFolder}/../vscode/scripts/code.sh",
"windows": {
"runtimeExecutable": "${workspaceFolder}/../vscode/scripts/code.bat",
},
"attachSimplePort": 5870,
"args": [
"--extensionDevelopmentPath=${workspaceFolder}",
],
"smartStep": true,
"sourceMaps": true,
"preLaunchTask": "watch",
"env": {
"COPILOT_LOG_TELEMETRY": "true",
"VSCODE_DEV_DEBUG": "1",
},
"outFiles": [
"${workspaceFolder}/dist/**/*.js",
"!**/node_modules/**"
],
"presentation": {
"group": "0_launch",
}
},
{
// See `launchConfigName` in file://./extensions/visualization-runner/extension.ts
"name": "Test Visualization Runner",
"type": "node",
"request": "launch",
"program": "${workspaceRoot}/test/testVisualizationRunner.ts",
"runtimeExecutable": "${workspaceRoot}/node_modules/.bin/tsx",
"presentation": {
"group": "1_launch"
},
},
{
// See `launchConfigName` in file://./extensions/test-extension/main.ts
"name": "Test Visualization Runner STests",
"type": "node",
"request": "launch",
"program": "${workspaceRoot}/test/testVisualizationRunnerSTest.ts",
"runtimeExecutable": "${workspaceRoot}/node_modules/.bin/tsx",
"presentation": {
"group": "1_launch"
},
},
{
"name": "Extension tests",
"type": "extensionHost",
"request": "launch",
"testConfiguration": "${workspaceFolder}/.vscode-test.mjs",
"sourceMaps": true,
"smartStep": true,
"envFile": "${workspaceFolder}/.env",
"internalConsoleOptions": "openOnSessionStart",
"outFiles": [
"${workspaceFolder}/dist/**/*.js",
"!**/node_modules/**"
],
"presentation": {
"group": "1_launch"
},
},
{
"name": "Run simulation tests",
"internalConsoleOptions": "openOnSessionStart",
"runtimeExecutable": "npm",
"args": [
"run",
"simulate",
"--",
"-n=1",
"-p=1"
],
"request": "launch",
"type": "node",
"presentation": {
"group": "1_launch"
}
},
{
"name": "Run tool call s-test",
"internalConsoleOptions": "openOnSessionStart",
"runtimeExecutable": "npm",
"args": [
"run",
"simulate",
"--",
"--verbose",
"-n=1",
"-p=1",
"--sidebar",
"--scenario-test=toolcall.stest",
"--external-scenarios=${workspaceFolder}/test/toolcalls",
"--output=${workspaceFolder}/test/out/"
],
"request": "launch",
"type": "node",
"presentation": {
"group": "1_launch"
}
},
{
"type": "node",
"name": "Postinstall",
"request": "launch",
"runtimeExecutable": "npm",
"args": [
"run",
"postinstall"
],
"presentation": {
"group": "1_launch"
}
},
{
"name": "Debug Simulation Workbench UI",
"type": "chrome",
"request": "launch",
"runtimeExecutable": "${workspaceRoot}/node_modules/.bin/electron",
"windows": {
"runtimeExecutable": "${workspaceRoot}/node_modules/.bin/electron.cmd"
},
"runtimeArgs": [
"${workspaceRoot}/script/electron/simulationWorkbenchMain.js",
"--remote-debugging-port=9222"
],
"webRoot": "${workspaceRoot}",
"presentation": {
"group": "1_launch"
}
},
{
"name": "Simulation Workbench - Renderer process",
"type": "chrome",
"request": "attach",
"webRoot": "${workspaceFolder}",
"port": 9222,
"presentation": {
"group": "1_launch"
},
},
{
"name": "Simulation Workbench - Main process",
"type": "node",
"request": "launch",
"cwd": "${workspaceFolder}",
"runtimeExecutable": "${workspaceFolder}/node_modules/.bin/electron",
"windows": {
"runtimeExecutable": "${workspaceFolder}/node_modules/.bin/electron.cmd"
},
"args": [
"${workspaceRoot}/script/electron/simulationWorkbenchMain.js",
"--remote-debugging-port=9222"
],
"autoAttachChildProcesses": true,
"presentation": {
"group": "1_launch"
},
},
{
"type": "node",
"request": "launch",
"name": "Debug Test Script",
"runtimeExecutable": "npm",
"args": [
"run",
"test"
],
"console": "integratedTerminal",
"internalConsoleOptions": "neverOpen"
},
{
"type": "node",
"request": "launch",
"name": "Debug chat-lib vitest",
"cwd": "${workspaceFolder}/chat-lib",
"runtimeExecutable": "${workspaceFolder}/chat-lib/node_modules/.bin/vitest",
"runtimeArgs": [
"run",
"--reporter=verbose"
],
"console": "integratedTerminal",
"internalConsoleOptions": "neverOpen",
"skipFiles": [
"<node_internals>/**"
],
"presentation": {
"group": "1_launch"
}
},
{
"type": "node",
"request": "launch",
"name": "Debug vitest",
"cwd": "${workspaceFolder}",
"runtimeExecutable": "${workspaceFolder}/node_modules/.bin/vitest",
"runtimeArgs": [
"run",
"--reporter=verbose"
],
"console": "integratedTerminal",
"internalConsoleOptions": "neverOpen",
"skipFiles": [
"<node_internals>/**"
],
"presentation": {
"group": "1_launch"
}
},
{
"type": "extensionHost",
"request": "launch",
"name": "Launch Copilot Extension - TS Server in Debug Mode",
"runtimeExecutable": "${execPath}",
"args": [
"--extensionDevelopmentPath=${workspaceFolder}"
],
"smartStep": true,
"sourceMaps": true,
"envFile": "${workspaceFolder}/.env",
"env": {
"COPILOT_LOG_TELEMETRY": "true",
"TSS_REMOTE_DEBUG": "9223",
"TSS_DEBUG": "9223",
},
"outFiles": [
"${workspaceFolder}/dist/**/*.js",
"!**/node_modules/**"
],
"presentation": {
"group": "2_launch"
}
},
{
"name": "Attach to TypeScript Server",
"type": "node",
"request": "attach",
"port": 9223,
"outFiles": [
"${workspaceFolder}/node_modules/@vscode/copilot-typescript-server-plugin/dist/**/*.js",
],
"presentation": {
"group": "2_launch"
}
},
{
"name": "Attach to Extension Host - Code OSS",
"type": "node",
"request": "attach",
"restart": true,
"timeout": 0,
"port": 5870,
"sourceMaps": true,
"outFiles": [
"${workspaceFolder}/../vscode/out/**/*.js",
"${workspaceFolder}/../vscode/extensions/*/out/**/*.js",
"${workspaceFolder}/dist/**/*.js",
"!**/node_modules/**"
],
"presentation": {
"group": "2_launch"
}
},
{
"name": "Run Completions-Core Extension Tests",
"type": "extensionHost",
"request": "launch",
"args": [
"--extensionDevelopmentPath=${workspaceFolder}",
"--extensionTestsPath=${workspaceFolder}/src/extension/completions-core/vscode-node/extension/test/run",
"--disable-extensions"
],
"env": {
"TSX_TSCONFIG_PATH": "${workspaceFolder}/tsconfig.json",
"VITEST": "true"
},
"internalConsoleOptions": "openOnSessionStart",
"outFiles": [
"${workspaceFolder}/**/*.ts",
"${workspaceFolder}/dist/**/*.js",
"!**/node_modules/**"
],
"autoAttachChildProcesses": true,
"presentation": {
"group": "1_launch"
}
},
],
"compounds": [
{
"name": "Simulation Workbench",
"configurations": [
"Simulation Workbench - Main process",
"Simulation Workbench - Renderer process"
],
"stopAll": true,
"presentation": {
"group": "1_launch"
}
}
]
}
================================================
FILE: .vscode/mcp.json
================================================
{
"servers": {
"vscode-playwright-mcp": {
"type": "stdio",
"command": "npm",
// See https://github.com/microsoft/vscode/blob/main/test/mcp/README.md for supported arguments
"args": [
"run",
"start-stdio",
"--",
"--extensionDevelopmentPath=${workspaceFolder}",
],
"cwd": "${workspaceFolder}/../vscode/test/mcp"
}
},
"inputs": []
}
================================================
FILE: .vscode/settings.json
================================================
{
"files.trimTrailingWhitespace": true,
"[typescript]": {
"editor.insertSpaces": false,
"editor.defaultFormatter": "vscode.typescript-language-features",
"editor.formatOnSave": true,
"editor.codeActionsOnSave": {
"source.organizeImports": "always"
}
},
"[typescriptreact]": {
"editor.insertSpaces": false,
"editor.defaultFormatter": "vscode.typescript-language-features",
"editor.formatOnSave": true,
"editor.codeActionsOnSave": {
"source.organizeImports": "always"
}
},
"[javascript]": {
"editor.insertSpaces": false,
"editor.defaultFormatter": "vscode.typescript-language-features",
"editor.formatOnSave": true,
"editor.codeActionsOnSave": {
"source.organizeImports": "always"
}
},
"[json]": {
"editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.formatOnSave": true,
"files.insertFinalNewline": false
},
"[jsonc]": {
"editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.formatOnSave": true
},
"[yaml]": {
"editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.formatOnSave": true
},
"[markdown]": {
"editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.formatOnSave": true
},
"[python]": {
"editor.defaultFormatter": "charliermarsh.ruff",
"editor.formatOnSave": true,
"editor.codeActionsOnSave": {
"source.organizeImports": "explicit"
}
},
"search.exclude": {
"**/*.egg-info/**/*": true,
"src/base/util/*.bpe": true,
"src/base/util/tokenizer_*.json": true,
"src/extension/chatSessions/vscode-node/test/fixtures/**": true,
"src/extension/completions-core/dist": true,
"src/extension/prompts/node/test/fixtures/**/*": true,
"src/extension/test/node/fixtures/**/*": true,
"src/platform/parser/test/node/fixtures/**/*": true,
"test/simulation/fixtures": true
},
"files.watcherExclude": {
".simulation": true,
".vscode-test": true,
".build": true,
},
"files.readonlyInclude": {
"src/util/vs/**": true,
"test/simulation/cache/base.sqlite": true
},
"git.branchProtection": [
"main",
"release/*"
],
"git.branchProtectionPrompt": "alwaysCommitToNewBranch",
"git.branchRandomName.enable": true,
"githubPullRequests.assignCreated": "${user}",
"githubPullRequests.defaultMergeMethod": "squash",
"githubPullRequests.ignoredPullRequestBranches": [
"main"
],
"typescript.preferences.quoteStyle": "single",
"typescript.format.enable": true,
"typescript.format.insertSpaceAfterCommaDelimiter": true,
"typescript.format.insertSpaceAfterSemicolonInForStatements": true,
"typescript.format.insertSpaceBeforeAndAfterBinaryOperators": true,
"typescript.format.insertSpaceAfterKeywordsInControlFlowStatements": true,
"typescript.format.insertSpaceAfterFunctionKeywordForAnonymousFunctions": true,
"typescript.format.insertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis": false,
"typescript.format.insertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets": false,
"typescript.format.insertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces": false,
"typescript.format.insertSpaceAfterOpeningAndBeforeClosingEmptyBraces": true,
"typescript.format.insertSpaceBeforeFunctionParenthesis": false,
"typescript.format.placeOpenBraceOnNewLineForFunctions": false,
"typescript.format.placeOpenBraceOnNewLineForControlBlocks": false,
"json.schemas": [
{
"fileMatch": [
"**/*.conversation.json"
],
"url": "./.vscode/conversation.schema.json"
},
{
"fileMatch": [
"**/*.state.json"
],
"url": "./.vscode/state.schema.json"
}
],
"git.detectSubmodules": false,
"githubPullRequests.upstreamRemote": "never",
"extension-test-runner.debugOptions": {
"outFiles": [
"${workspaceFolder}/dist/**/*.js"
]
},
"files.associations": {
"**/*.conversation.json": "jsonc"
},
"workbench.editorAssociations": {
// Use the default diff editor instead of the default custom editor view.
"{git,gitlens}:/**/*.w.json": "default",
"*.workspaceRecording.jsonl": "web-editor"
},
"editor.experimental.preferTreeSitter.typescript": false,
"editor.experimental.preferTreeSitter.regex": false,
"editor.experimental.preferTreeSitter.css": true,
"mochaExplorer.files": "dist/test-unit.js",
"mochaExplorer.ui": "tdd",
"mochaExplorer.timeout": 5000,
"web-editors.editorTypes": {
"ast.w": "https://microsoft.github.io/vscode-web-editor-text-tools/?editor=ast-viewer",
"textRange.w": "https://microsoft.github.io/vscode-web-editor-text-tools/?editor=selection-editor",
"jsonUi.w": "https://microsoft.github.io/vscode-web-editor-json-ui/",
"diff.w": "https://microsoft.github.io/vscode-web-editor-text-tools/?editor=diff",
"text.w": "https://microsoft.github.io/vscode-web-editor-text-tools/?editor=text",
"recording.w.json": "https://microsoft.github.io/vscode-workbench-recorder-viewer/",
"scoredEdits.w.json": "https://microsoft.github.io/vscode-workbench-recorder-viewer/?editRating",
"workspaceRecording.jsonl": "https://microsoft.github.io/vscode-workbench-recorder-viewer/?jsonl=true",
},
"explorer.fileNesting.patterns": {
"vscode.d.ts": "vscode.proposed.*.ts",
},
"git.diagnosticsCommitHook.enabled": true,
"git.diagnosticsCommitHook.sources": {
"*": "error",
"ts": "warning",
"eslint": "warning"
},
"githubPullRequests.codingAgent.enabled": true,
"githubPullRequests.codingAgent.uiIntegration": true,
"python-envs.defaultEnvManager": "ms-python.python:system",
"python-envs.pythonProjects": [],
"chat.tools.terminal.autoApprove": {
"npx vitest": true
},
"chat.agentSkillsLocations": {
".github/skills/.local": true,
".agents/skills/.local": true,
".claude/skills/.local": true,
}
}
================================================
FILE: .vscode/snippets.code-snippets
================================================
{
"copyright": {
"prefix": "copyright",
"body": [
"/*---------------------------------------------------------------------------------------------",
" * Copyright (c) Microsoft Corporation. All rights reserved.",
" * Licensed under the MIT License. See License.txt in the project root for license information.",
" *--------------------------------------------------------------------------------------------*/",
"",
""
]
}
}
================================================
FILE: .vscode/state.schema.json
================================================
{
"$schema": "http://json-schema.org/draft-07/schema",
"type": "object",
"definitions": {
"position": {
"type": "object",
"properties": {
"line": {
"description": "The zero-based line number.",
"type": "integer"
},
"character": {
"description": "The zero-based character number.",
"type": "integer"
}
}
},
"range": {
"type": "object",
"properties": {
"start": {
"description": "The start of the range.",
"$ref": "#/definitions/position"
},
"end": {
"description": "The end of the range.",
"$ref": "#/definitions/position"
}
}
},
"selection": {
"type": "object",
"properties": {
"anchor": {
"description": "The starting position of the selection.",
"$ref": "#/definitions/position"
},
"active": {
"description": "The active cursor position of the selection.",
"$ref": "#/definitions/position"
}
}
},
"diagnostic": {
"type": "object",
"properties": {
"start": {
"description": "The start range of the diagnostic.",
"$ref": "#/definitions/position"
},
"end": {
"description": "The end range of the diagnostic.",
"$ref": "#/definitions/position"
},
"message": {
"description": "The diagnostic message.",
"type": "string"
},
"severity": {
"description": "The diagnostic severity.",
"type": "integer"
},
"relatedInformation": {
"description": "The diagnostic code.",
"type": "integer"
}
}
},
"activeTextEditor": {
"type": "object",
"properties": {
"selections": {
"description": "Selections in the active editor.",
"type": "array",
"items": {
"$ref": "#/definitions/selection"
}
},
"documentFilePath": {
"description": "A relative filepath to the active file test fixture.",
"type": "string"
},
"visibleRanges": {
"description": "Visible ranges in the active editor.",
"type": "array",
"items": {
"$ref": "#/definitions/range"
}
},
"languageId": {
"description": "The language ID of the active editor.",
"type": "string"
}
}
}
},
"required": [
"activeTextEditor",
"terminalBuffer",
"debugConsoleOutput",
"activeFileDiagnostics"
],
"properties": {
"activeTextEditor": {
"description": "The active editor.",
"$ref": "#/definitions/activeTextEditor"
},
"terminalBuffer": {
"description": "The contents of the terminal buffer.",
"type": "string"
},
"debugConsoleOutput": {
"description": "The contents of the debug console.",
"type": "string"
},
"activeFileDiagnostics": {
"description": "The diagnostics for the active file.",
"type": "array",
"items": {
"$ref": "#/definitions/diagnostic"
}
},
"workspaceFoldersFilePaths": {
"description": "A list of workspace folder paths.",
"type": "array",
"items": {
"type": "string"
}
},
"symbols": {
"description": "Symbols in the active file.",
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"kind": {
"type": "integer"
},
"containerName": {
"type": "string"
},
"filePath": {
"type": "string"
},
"start": {
"$ref": "#/definitions/position"
},
"end": {
"$ref": "#/definitions/position"
}
}
}
}
}
}
================================================
FILE: .vscode/tasks.json
================================================
{
"version": "2.0.0",
"tasks": [
{
"label": "Install dependencies",
"type": "shell",
"command": "npm ci",
"inSessions": true,
"runOptions": { "runOn": "worktreeCreated" }
},
{
"label": "Compile & Launch Extension Host",
"type": "shell",
"command": "npm run compile && COPILOT_LOG_TELEMETRY=true VSCODE_DEV_DEBUG=1 code-insiders --extensionDevelopmentPath=$(pwd)",
"inSessions": true
},
{
"label": "Typecheck",
"type": "shell",
"command": "npm run typecheck",
"inSessions": true
},
{
"label": "compile",
"type": "npm",
"script": "compile",
"problemMatcher": "$esbuild",
},
{
"type": "npm",
"script": "watch",
"label": "npm: watch - DO NOT USE", // The auto-discovered npm task is also called watch, so we change its name here. This is here until people clear their histories.
},
{
"label": "ensure-deps",
"type": "shell",
"windows": {
"command": "if not exist node_modules npm ci",
"options": {
"shell": {
"executable": "cmd.exe",
"args": ["/c"]
}
}
},
"linux": {
"command": "test -d node_modules || npm ci"
},
"osx": {
"command": "test -d node_modules || npm ci"
},
"group": "build",
"presentation": {
"reveal": "never",
"close": true
},
"problemMatcher": [],
"isBackground": true,
"promptOnClose": false
},
{
"label": "start-watch-tasks",
"dependsOn": [
"npm: watch:tsc-extension",
"npm: watch:tsc-extension-web",
"npm: watch:tsc-simulation-workbench",
"npm: watch:esbuild"
],
"dependsOrder": "parallel",
"group": "build",
"presentation": {
"reveal": "never"
}
},
{
"label": "watch",
"dependsOn": [
"ensure-deps",
"start-watch-tasks",
],
"dependsOrder": "sequence",
"presentation": {
"reveal": "never",
},
"group": {
"kind": "build",
"isDefault": true
},
"runOptions": {
"runOn": "folderOpen"
}
},
{
"type": "npm",
"script": "watch:tsc-extension",
"group": "build",
"problemMatcher": "$tsc-watch",
"isBackground": true,
"label": "npm: watch:tsc-extension",
"presentation": {
"group": "watch",
"reveal": "never"
}
},
{
"type": "npm",
"script": "watch:tsc-extension-web",
"group": "build",
"problemMatcher": "$tsc-watch",
"isBackground": true,
"label": "npm: watch:tsc-extension-web",
"presentation": {
"group": "watch",
"reveal": "never"
}
},
{
"type": "npm",
"script": "watch:tsc-simulation-workbench",
"group": "build",
"problemMatcher": "$tsc-watch",
"isBackground": true,
"label": "npm: watch:tsc-simulation-workbench",
"presentation": {
"group": "watch",
"reveal": "never"
}
},
{
"type": "npm",
"script": "watch:esbuild",
"group": "build",
"problemMatcher": "$esbuild-watch",
"isBackground": true,
"label": "npm: watch:esbuild",
"presentation": {
"group": "watch",
"reveal": "never"
}
},
{
"label": "simulate",
"type": "process",
"command": "${workspaceFolder}/script/simulate.sh",
"windows": {
"command": "powershell",
"args": ["-ExecutionPolicy", "Bypass", "-File", "${workspaceFolder}/script/simulate.ps1"]
},
"args": [],
"group": {
"kind": "test",
"isDefault": true
},
"presentation": {
"reveal": "always",
"panel": "dedicated",
"clear": true,
"focus": true
},
"problemMatcher": []
}
]
}
================================================
FILE: .vscode-test.mjs
================================================
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import { defineConfig } from '@vscode/test-cli';
import { readFileSync, writeFileSync } from 'fs';
import { dirname, resolve } from 'path';
import { loadEnvFile } from 'process';
import { fileURLToPath } from 'url';
const isSanity = process.argv.includes('--sanity');
const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);
if (isSanity) {
loadEnvFile(resolve(__dirname, '.env'));
}
const packageJsonPath = resolve(__dirname, 'package.json');
const raw = readFileSync(packageJsonPath, 'utf8');
const pkg = JSON.parse(raw);
pkg.engines.vscode = pkg.engines.vscode.split('-')[0];
// remove the date from the vscode engine version
writeFileSync(packageJsonPath, JSON.stringify(pkg, null, '\t'));
// and revert it once done
process.on('exit', () => writeFileSync(packageJsonPath, raw));
const isRecoveryBuild = !pkg.version.endsWith('.0');
export default defineConfig({
files: __dirname + (isSanity ? '/dist/sanity-test-extension.js' : '/dist/test-extension.js'),
version: isRecoveryBuild ? 'stable' : 'insiders-unreleased',
launchArgs: [
'--disable-extensions',
'--profile-temp'
],
mocha: {
ui: 'tdd',
color: true,
forbidOnly: !!process.env.CI,
timeout: 5000
}
});
================================================
FILE: .vscodeignore
================================================
**
!assets/
assets/walkthroughs/**
!dist/compiled/**
!dist/extension.js
!dist/extension.js.LICENSE.txt
!dist/*.wasm
!dist/*.json
!dist/*.bpe
!dist/*.tiktoken
!dist/node_modules/**
!dist/tfidfWorker.js
!dist/worker2.js
!dist/tikTokenizerWorker.js
!dist/diffWorker.js
!dist/webview.js
!dist/copilotDebugCommand.js
!dist/copilotCLIShim.js
!dist/cli.js
!dist/suggestionsPanelWebview.js
!node_modules/@vscode/copilot-typescript-server-plugin/package.json
!node_modules/@vscode/copilot-typescript-server-plugin/dist/*.js
node_modules/@github/copilot/index.js
node_modules/@github/copilot/clipboard/**
node_modules/@github/copilot/prebuilds/**
node_modules/@github/copilot/sharp/**
!node_modules/@github/copilot/package.json
!node_modules/@github/copilot/sdk/**/package.json
!node_modules/@github/copilot/sdk/*.js
!node_modules/@github/copilot/sdk/worker/*.js
!node_modules/@github/copilot/sdk/sharp/**
!node_modules/@github/copilot/sdk/definitions/*.yaml
!CHANGELOG.md
!README.md
!package.json
!package.nls.json
!package.nls.*.json
!telemetry.json
!l10n/bundle.l10n.*.json
!ThirdPartyNotices.txt
!LICENSE.txt
================================================
FILE: CHANGELOG.md
================================================
## 0.40 (2026-03-18)
GitHub Copilot updates for [VS Code 1.112](https://code.visualstudio.com/updates/v1_112):
- Message steering and queueing in Copilot CLI
- Preview changes before delegating to Copilot CLI
- Clickable file links in Copilot CLI terminal output
- Permissions levels in Copilot CLI
- Troubleshoot agent behavior with /troubleshoot (Preview)
- Export and import agent debug logs (Preview)
- Image and binary file support for agents
- Automatic symbol references on paste in chat
- Customizations discovery in parent repositories
- Sandbox locally running MCP servers (Linux and macOS)
- Improved UI for MCP Elicitation
- Enable or disable plugins and MCP servers
- Automatic plugin updates
## 0.39 (2026-03-09)
GitHub Copilot updates for [VS Code 1.111](https://code.visualstudio.com/updates/v1_111):
- Autopilot and agent permissions
- Agent-scoped hooks (Preview)
- Debug events snapshot
- Chat tip improvements
- AI CLI profile group in terminal dropdown (Experimental)
## 0.38 (2026-03-05)
GitHub Copilot updates from [February 2026](https://code.visualstudio.com/updates/v1_110):
### Agent controls
- **Background agent slash commands** — Chat customization options like prompt files, hooks, and skills are now available in background agent sessions as slash commands. Background agent sessions can also be renamed.
- **Claude agent improvements** — Steering and queuing, session renaming, context window rendering with compaction, new slash commands (`/compact`, `/agents`, `/hooks`), `getDiagnostics` tool, and performance improvements for reading sessions.
- **Agent Debug panel (Preview)** — New panel showing chat events in real time, including system prompts, tool calls, and customization events. Includes a chart view for visual event hierarchy. Open via **Developer: Open Agent Debug Panel** or the gear icon in the Chat view.
- **Auto approve slash commands** — Toggle global auto approve directly from chat input with `/autoApprove` and `/disableAutoApprove` (aliases: `/yolo`, `/disableYolo`).
- **Edit mode hidden by default** — Agent mode now handles everything edit mode can do; edit mode is hidden from the agent picker by default, controlled by the `chat.editMode.hidden` setting. Ask mode is now backed by a custom agent definition.
- **Ask questions tool improvements** — The `askQuestions` tool moved into VS Code core for improved reliability. You can now send steering messages without dismissing pending questions first.
- **Prevent auto-suspend during chat** — VS Code asks the OS not to suspend the machine while a chat request is running.
### Agent extensibility
- **Agent plugins (Experimental)** — Prepackaged bundles of chat customizations (skills, commands, agents, MCP servers, hooks) installable from the Extensions view. Configurable plugin marketplaces and local plugin directories.
- **Agentic browser tools (Experimental)** — Agents can read and interact with the integrated browser using tools like `openBrowserPage`, `readPage`, `screenshotPage`, `clickElement`, `typeInPage`, and `runPlaywrightCode`. Enable by setting `workbench.browser.enableChatTools` to `true`.
- **Create agent customizations from chat** — New `/create-prompt`, `/create-instruction`, `/create-skill`, `/create-agent`, and `/create-hook` slash commands to generate customization files directly from a conversation.
- **Tools for usages and rename** — New `vscode_renameSymbol` tool and updated `usages` tool let agents navigate and refactor code using extension/LSP capabilities with high precision.
### Smarter sessions
- **Session memory for plans** — Plans persist to session memory and stay available across conversation turns, surviving compaction.
- **Explore subagent for codebase search** — The Plan agent delegates codebase research to a dedicated read-only Explore subagent running on fast models. Configurable via the `chat.exploreAgent.defaultModel` setting.
- **Inline chat and chat session integration** — When an agent session already changed a file, inline chat queues new messages into that session instead of making changes in isolation.
### Chat experience
- **Redesigned model picker** — New dropdown with Auto, featured/recently used, and other models sections, plus a search box and rich hover details.
- **Contextual tips (Experimental)** — Tips in the Chat view help discover features tailored to your usage patterns, controlled by the `chat.tips.enabled` setting.
- **Custom thinking phrases** — Customize loading text during reasoning/tool calls via the `chat.agent.thinking.phrases` setting.
- **Collapsible terminal tool calls** — Terminal tool invocations displayed as collapsible sections to reduce visual noise, controlled by the `chat.tools.terminal.simpleCollapsible` setting.
- **OS notifications for chat** — Configure notifications for chat responses and confirmations to appear even when the window is in focus (`always` option).
- **Inline chat hover mode** — New hover-based UI for inline chat (set `inlineChat.renderMode` to `hover`).
- **Inline chat affordance** — Selection-triggered affordance for starting inline chat in the editor or gutter, controlled by the `inlineChat.affordance` setting.
### Code editing
- **Long-distance next edit suggestions** — NES now predicts and suggests edits anywhere in the file, not just near the cursor.
- **NES eagerness** — New eagerness option in the Copilot Status Bar to control suggestion frequency vs. relevance.
---
## 0.37 (2026-02-04)
GitHub Copilot updates from [January 2026](https://code.visualstudio.com/updates/v1_109):
### Chat UX
- **Message steering and queueing (Experimental)** — Send follow-up messages while a request is running: queue messages, steer the agent mid-task, or stop and send a new message. Drag-and-drop reordering for queued messages.
- **Anthropic models now show thinking tokens** — Claude models surface thinking tokens with configurable display styles, interleaved tool calls, auto-expanding failed tool calls, scrollable thinking content, and shimmer animations.
- **Mermaid diagrams in chat responses** — Interactive Mermaid diagrams (flowcharts, sequence diagrams, etc.) rendered directly in chat with pan, zoom, and open-in-editor support.
- **Ask Questions tool (Experimental)** — Agent can ask clarifying questions with single/multi-select options, free text input, and recommended answers highlighted.
- **Plan agent improvements** — Structured 4-phase workflow (Discovery → Alignment → Design → Refinement). Invokable via `/plan` slash command.
- **Context window details** — New indicator in chat input showing token usage breakdown by category.
- **Inline chat UX revamp (Preview)** — New text-selection affordance and contextual rendering for triggering inline chat.
- **Model descriptions in the model picker** — Hover or keyboard focus shows model details at a glance.
- **Terminal command output improvements** — Syntax highlighting for inline Node/Python/Ruby, working directory display, command intent descriptions, output streaming for long-running commands, interactive input in embedded terminals.
- **Delete all hidden terminals** — One-click delete for all hidden chat terminals.
### Agent session management
- **Session type picker** — New picker to choose agent type (local, background, cloud) or hand off ongoing sessions between environments.
- **Agent Sessions view improvements** — Resizable side-by-side sessions, multi-select bulk operations, improved stacked view with filters.
- **Agent status indicator** — Command center indicator showing in-progress, unread, and attention-needed sessions.
- **Parallel subagents** — Subagents can now run in parallel for faster task completion.
- **Search subagent (Experimental)** — Dedicated search subagent with isolated context window for iterative codebase searches.
- **Cloud agent improvements** — Model selection, third-party coding agents (Claude, Codex), custom agents, multi-root workspace support, checkout without GitHub PR extension.
- **Background agent improvements** — Custom agents, image attachments, multi-root workspace support, auto-commit at end of each turn.
- **Agent sessions welcome page (Experimental)** — New startup editor showing recent agent sessions with quick actions and embedded chat.
### Agent customization
- **Agent hooks (Preview)** — Execute custom shell commands at agent lifecycle points (PreToolUse, PostToolUse, SessionStart, Stop, etc.). Compatible with Claude Code and Copilot CLI hook formats.
- **Skills as slash commands** — Agent Skills invokable via `/` in chat alongside prompt files. Controllable via `user-invokable` and `disable-model-invocation` frontmatter.
- **`/init` command** — Generate or update workspace instructions (`copilot-instructions.md`, `AGENTS.md`) based on codebase analysis.
- **Agent Skills generally available** — Enabled by default. Manageable via Commands. Configurable skill locations. Extension authors can distribute skills via `chatSkills` contribution point.
- **Organization-wide instructions** — GitHub organization custom instructions automatically applied to chat sessions.
- **Custom agent file locations** — Configurable directories for agent definitions via `chat.agentFilesLocations`.
- **Control agent invocation** — New frontmatter: `user-invokable`, `disable-model-invocation`, `agents` (limit subagent access).
- **Multiple model support for custom agents** — Specify fallback model lists in frontmatter.
- **Chat customization diagnostics** — New diagnostics view showing all loaded agents, prompts, instructions, and skills with error details.
- **Language Models editor improvements** — Multiple configurations per provider, Azure model configuration, provider group management, keyboard access, `chatLanguageModels.json` config file, model provider configuration UI.
- **Language model configuration** — Default model for plan implementation, default model for inline chat, model parameter for agent handoffs.
- **Agent customization skill (Experimental)** — Built-in skill that teaches the agent how to create custom agents, instructions, prompts, and skills.
### Agent extensibility
- **Claude compatibility** — VS Code reads Claude configuration files directly: `CLAUDE.md` instructions, `.claude/agents`, `.claude/skills`, `.claude/settings.json` hooks.
- **Agent orchestration** — Building blocks for multi-agent workflows using custom agents, subagents, and invocation controls. Community examples: Copilot Orchestra, GitHub Copilot Atlas.
- **Claude Agent (Preview)** — Delegate tasks to Claude Agent SDK using Copilot subscription models. Uses official Anthropic agent harness.
- **Anthropic model improvements** — Messages API with interleaved thinking, tool search tool, context editing (Experimental).
- **MCP Apps support** — MCP servers can display rich, interactive UI in chat responses.
- **Custom registry base URLs for MCP packages** — Support for private/alternative package registries.
### Agent optimizations
- **Copilot Memory (Preview)** — Store and recall context across sessions. Agent auto-saves and retrieves relevant memories.
- **External indexing for non-GitHub workspaces (Preview)** — Remote indexing for semantic code search in non-GitHub repositories.
- **Read files outside workspace** — Agents can read external files/directories with user permission.
- **Performance improvements** — Faster large chat scrolling/persistence, parallel dependent task processing.
### Agent security and trust
- **Terminal sandboxing (Experimental)** — Restrict file system access to workspace folder and network access to trusted domains (macOS/Linux only).
- **Terminal tool lifecycle improvements** — Manual background push, required timeout property, `awaitTerminal` and `killTerminal` tools.
- **Terminal auto-approval expansions** — New safe commands auto-approved: `Set-Location`, `dir`, `od`, `xxd`, `docker`, `npm`/`yarn`/`pnpm` safe sub-commands.
### Code editing (AI-related)
- **Rename suggestions for TypeScript** — Also works when typing over existing declarations.
- **Improved ghost text visibility** — Dotted underline for short inline suggestions (fewer than 3 characters).
- **Copilot extension deprecated** — GitHub Copilot extension fully deprecated; all functionality in GitHub Copilot Chat extension.
### Enterprise
- **Improved GitHub organization policy enforcement** — Policies correctly apply based on preferred Copilot account; enforced during network unavailability at startup.
---
## 0.36 (2026-01-08)
GitHub Copilot updates from [December 2025](https://code.visualstudio.com/updates/v1_108):
### Agents
- **Agent Skills (Experimental)** — New capability to teach the coding agent domain-specific knowledge via skill folders containing `SKILL.md` files. Auto-detected from `.github/skills` (or `.claude/skills/`), loaded on-demand into chat context.
- **Agent Sessions view improvements** — Keyboard access, state-based session grouping, changed files and PR info per session, multi-select archiving, and accessibility improvements.
### Chat
- **Chat picker based on agent sessions** — Quick Pick for chat sessions now mirrors the Agent Sessions view with actions like archive, rename, and delete.
- **Chat title improvements** — Title control now visible regardless of Activity Bar configuration; select the title to jump between sessions.
- **Open empty Chat on restart** — Previous sessions no longer auto-restored on restart; configurable via `chat.restoreLastPanelSession`.
- **Terminal tool auto approve defaults** — New safe commands auto-approved by default (e.g., `git ls-files`, `rg`, `sed`, `Out-String`). Workspace npm scripts auto-approved when in `package.json`. Informational messages when rules deny auto-approval.
- **Session and workspace rules for terminal commands** — Allow dropdown now supports allowing commands for the current session or workspace scope.
- **Terminal tool prevents adding to shell history** — Commands run by the terminal tool excluded from shell history (bash, zsh, pwsh, fish).
- **Streaming chat responses in Accessible View** — Chat responses now stream dynamically in the Accessible View without needing to close and reopen.
- **MCP server output excluded from Accessible View** — Reduces noise by excluding MCP server output from the Accessible View.
---
## 0.35 (2025-12-10)
GitHub Copilot updates from [November 2025](https://code.visualstudio.com/updates/v1_107):
### Agents
- **Agent sessions integrated into Chat view** — Unified experience for managing agent sessions directly in the Chat view (compact, side-by-side, or stacked layouts). Sessions show status, progress, and file change stats. Supports search, filtering, and archiving.
- **Local agents remain active when closed** — Local agent sessions continue running in the background when closed, enabling long-running and parallel tasks.
- **Continue tasks in background or cloud agents** — Hand off local chat sessions to background or cloud agents via a new "Continue in" option. Context is passed along automatically.
- **Isolate background agents with Git worktrees** — Background agents can run in dedicated Git worktrees to avoid file conflicts when running multiple agents simultaneously.
- **Adding context to background agents** — Attach selections, problems, symbols, search results, git commits, and more as context to background agent prompts.
- **Share custom agents across your GitHub organization (Experimental)** — Define custom agents at the organization level for shared use across teams.
- **Custom agents with background agents (Experimental)** — Use custom agents defined in `.github/agents` with background agents.
- **Agent tooling reorganization** — Renamed tool references for better compatibility with GitHub custom agents across VS Code and GitHub environments.
- **Run agents as subagents (Experimental)** — Custom agents can be used as subagents for delegating subtasks within a chat session, each with its own context window.
- **Reuse Claude skills (Experimental)** — VS Code can discover and use Claude Code skills from `~/.claude/skills/` and workspace `.claude/skills/` folders.
### Chat
- **Inline chat UX** — Inline chat optimized for single-file code changes; non-code tasks automatically upgrade to the Chat view.
- **Language Models editor** — Centralized editor to view, search, filter, and manage language model visibility and providers. Supports adding models from installed providers.
- **URL and domain auto approval** — Two-step approval for fetch tool URLs: approve the domain, then review fetched content before use (prompt injection protection). Integrates with Trusted Domains.
- **More robust fetch tool** — `#fetch` now handles dynamic/JavaScript-rendered web content (SPAs, Jira, etc.).
- **Text search tool can search ignored files** — `#textSearch` can now search files/folders excluded by `.gitignore`, `files.exclude`, or `search.exclude`.
- **Rich terminal output in chat** — Terminal output renders in a full `xterm.js` terminal inside chat with preserved output history and ANSI color support.
- **Allow all terminal commands in this session** — New option to auto-approve all terminal commands for the current session.
- **Keyboard shortcuts for chat terminal actions** — Dedicated keybindings to focus or toggle the most recent chat terminal.
- **Keyboard shortcuts for custom agents** — Each custom agent gets a unique command in the Command Palette for keybinding.
- **Azure model provider: Entra ID default auth** — Azure BYOK models now default to Entra ID authentication.
- **Anthropic models: Extended thinking support** — Configurable thinking budget for Anthropic models (default: 4,000 tokens). Supports interleaved thinking via BYOK.
- **Chat view appearance improvements** — New chat title control, optional welcome banner, and restore previous session on reopen.
- **Diffs for edits to sensitive files** — Proposed changes to sensitive files (e.g., `settings.json`) now shown as diffs for easier review.
- **Collapsible reasoning and tools output (Experimental)** — Successive tool calls collapsed by default with AI-generated summaries to reduce visual noise.
### Code editing (AI-related)
- **Rename suggestions for TypeScript** — AI predicts symbol renames
Showing preview only (245K chars total). Download the full file or copy to clipboard to get everything.
gitextract_87srrczz/ ├── .agents/ │ └── skills/ │ └── launch/ │ └── SKILL.md ├── .claude/ │ └── agents/ │ └── anthropic-sdk-upgrader.md ├── .devcontainer/ │ ├── devcontainer-lock.json │ └── devcontainer.json ├── .esbuild.ts ├── .eslint-ignore ├── .eslintplugin/ │ ├── index.ts │ ├── no-bad-gdpr-comment.ts │ ├── no-funny-filename.ts │ ├── no-gdpr-event-name-mismatch.ts │ ├── no-instanceof-uri.ts │ ├── no-missing-linebreak.ts │ ├── no-nls-localize.ts │ ├── no-restricted-copilot-pr-string.ts │ ├── no-runtime-import.ts │ ├── no-test-imports.ts │ ├── no-test-only.ts │ ├── no-unexternalized-strings.ts │ ├── no-unlayered-files.ts │ ├── package.json │ ├── tsconfig.json │ └── utils.ts ├── .gitattributes ├── .github/ │ ├── CODENOTIFY │ ├── CODEOWNERS │ ├── ISSUE_TEMPLATE/ │ │ └── config.yml │ ├── commands.json │ ├── copilot-instructions.md │ ├── dependabot.yml │ ├── instructions/ │ │ ├── prompt-tsx.instructions.md │ │ └── vitest-unit-tests.instructions.md │ ├── prompts/ │ │ ├── updateCopilotCLIToolMapping.prompt.md │ │ └── updateGithubCopilotSDK.prompt.md │ └── workflows/ │ ├── copilot-setup-steps.yml │ ├── ensure-node-modules-cache.yml │ ├── npm-package.yml │ └── pr.yml ├── .gitignore ├── .husky/ │ ├── pre-commit │ └── pre-push ├── .mocha-multi-reporters.js ├── .mocharc.js ├── .npmrc ├── .nvmrc ├── .prettierignore ├── .vscode/ │ ├── conversation.schema.json │ ├── extensions/ │ │ ├── test-extension/ │ │ │ ├── .vscode/ │ │ │ │ └── launch.json │ │ │ ├── bootstrap.ts │ │ │ ├── main.ts │ │ │ └── package.json │ │ └── visualization-runner/ │ │ ├── README.md │ │ ├── entry.js │ │ ├── extension.ts │ │ └── package.json │ ├── extensions.json │ ├── launch.json │ ├── mcp.json │ ├── settings.json │ ├── snippets.code-snippets │ ├── state.schema.json │ └── tasks.json ├── .vscode-test.mjs ├── .vscodeignore ├── CHANGELOG.md ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── CodeQL.yml ├── LICENSE.txt ├── README.md ├── SECURITY.md ├── assets/ │ └── prompts/ │ ├── create-agent.prompt.md │ ├── create-hook.prompt.md │ ├── create-instructions.prompt.md │ ├── create-prompt.prompt.md │ ├── create-skill.prompt.md │ ├── init.prompt.md │ ├── plan.prompt.md │ └── skills/ │ ├── agent-customization/ │ │ ├── SKILL.md │ │ └── references/ │ │ ├── agents.md │ │ ├── hooks.md │ │ ├── instructions.md │ │ ├── prompts.md │ │ ├── skills.md │ │ └── workspace-instructions.md │ ├── get-search-view-results/ │ │ └── SKILL.md │ ├── install-vscode-extension/ │ │ └── SKILL.md │ ├── project-setup-info-context7/ │ │ └── SKILL.md │ ├── project-setup-info-local/ │ │ └── SKILL.md │ └── troubleshoot/ │ └── SKILL.md ├── build/ │ ├── .cachesalt │ ├── listBuildCacheFiles.js │ ├── npm-package.yml │ ├── pr-check-cache-files.ts │ ├── pre-release.yml │ ├── release.yml │ ├── setup-emsdk.sh │ └── update-assets.yml ├── cgmanifest.json ├── chat-lib/ │ ├── .gitignore │ ├── LICENSE.txt │ ├── README.md │ ├── package.json │ ├── script/ │ │ └── postinstall.ts │ ├── tsconfig.base.json │ ├── tsconfig.json │ └── vitest.config.ts ├── docs/ │ ├── NES_EXPECTED_EDIT_CAPTURE.md │ ├── monitoring/ │ │ ├── agent_monitoring.md │ │ ├── agent_monitoring_arch.md │ │ ├── docker-compose.yaml │ │ ├── otel-collector-config.yaml │ │ └── otel-data-flow.html │ ├── prompts.md │ └── tools.md ├── eslint.config.mjs ├── lint-staged.config.js ├── package.json ├── package.nls.json ├── script/ │ ├── alternativeAction/ │ │ ├── index.ts │ │ ├── processor.ts │ │ ├── types.ts │ │ └── util.ts │ ├── analyzeEdits.ts │ ├── applyLocalDts.sh │ ├── build/ │ │ ├── compressTikToken.ts │ │ ├── copyStaticAssets.ts │ │ ├── downloadBinary.ts │ │ ├── extractChatLib.ts │ │ ├── moveProposedDts.js │ │ ├── vscodeDtsCheck.js │ │ └── vscodeDtsUpdate.js │ ├── cleanLog.ts │ ├── compareStestAlternativeRuns.ts │ ├── electron/ │ │ ├── simulationWorkbench.css │ │ ├── simulationWorkbench.html │ │ └── simulationWorkbenchMain.js │ ├── eslintGitBlameReport/ │ │ └── generateEslintIgnoreReport.ts │ ├── logRecordingTypes.ts │ ├── postinstall.ts │ ├── scoredEditsReconciler.ts │ ├── setup/ │ │ ├── copySources.ts │ │ ├── createVenv.mts │ │ ├── getEnv.mts │ │ └── getToken.mts │ ├── simulate.ps1 │ ├── simulate.sh │ ├── test/ │ │ └── scoredEditsReconciler.spec.ts │ ├── testGeneration/ │ │ └── editFromPatchTests.ts │ └── tsconfig.json ├── src/ │ ├── extension/ │ │ ├── agentDebug/ │ │ │ ├── common/ │ │ │ │ └── toolResultRenderer.ts │ │ │ └── vscode-node/ │ │ │ └── toolResultContentRenderer.ts │ │ ├── agents/ │ │ │ ├── node/ │ │ │ │ ├── adapters/ │ │ │ │ │ ├── anthropicAdapter.ts │ │ │ │ │ ├── openaiAdapterForSTests.ts │ │ │ │ │ └── types.ts │ │ │ │ ├── langModelServer.ts │ │ │ │ └── test/ │ │ │ │ ├── mockLanguageModelServer.ts │ │ │ │ └── openaiAdapter.spec.ts │ │ │ └── vscode-node/ │ │ │ ├── agentCustomizationSkillProvider.ts │ │ │ ├── agentTypes.ts │ │ │ ├── askAgentProvider.ts │ │ │ ├── baseSkillProvider.ts │ │ │ ├── editModeAgentProvider.ts │ │ │ ├── exploreAgentProvider.ts │ │ │ ├── githubOrgChatResourcesService.ts │ │ │ ├── githubOrgCustomAgentProvider.ts │ │ │ ├── githubOrgInstructionsProvider.ts │ │ │ ├── planAgentProvider.ts │ │ │ ├── promptFileContrib.ts │ │ │ ├── skillFsProviderHelper.ts │ │ │ ├── test/ │ │ │ │ ├── askAgentProvider.spec.ts │ │ │ │ ├── githubOrgChatResourcesService.spec.ts │ │ │ │ ├── githubOrgCustomAgentProvider.spec.ts │ │ │ │ ├── githubOrgInstructionsProvider.spec.ts │ │ │ │ ├── mockOctoKitService.ts │ │ │ │ └── planAgentProvider.spec.ts │ │ │ └── troubleshootSkillProvider.ts │ │ ├── api/ │ │ │ └── vscode/ │ │ │ ├── api.d.ts │ │ │ ├── extensionApi.ts │ │ │ └── vscodeContextProviderApi.ts │ │ ├── authentication/ │ │ │ └── vscode-node/ │ │ │ └── authentication.contribution.ts │ │ ├── byok/ │ │ │ ├── common/ │ │ │ │ ├── anthropicMessageConverter.ts │ │ │ │ ├── byokProvider.ts │ │ │ │ ├── geminiFunctionDeclarationConverter.ts │ │ │ │ ├── geminiMessageConverter.ts │ │ │ │ └── test/ │ │ │ │ ├── __snapshots__/ │ │ │ │ │ └── anthropicMessageConverter.spec.ts.snap │ │ │ │ ├── anthropicMessageConverter.spec.ts │ │ │ │ ├── geminiFunctionDeclarationConverter.spec.ts │ │ │ │ └── geminiMessageConverter.spec.ts │ │ │ ├── node/ │ │ │ │ ├── azureOpenAIEndpoint.ts │ │ │ │ ├── openAIEndpoint.ts │ │ │ │ └── test/ │ │ │ │ ├── azureOpenAIEndpoint.spec.ts │ │ │ │ └── openAIEndpoint.spec.ts │ │ │ └── vscode-node/ │ │ │ ├── abstractLanguageModelChatProvider.ts │ │ │ ├── anthropicProvider.ts │ │ │ ├── azureProvider.ts │ │ │ ├── byokContribution.ts │ │ │ ├── byokStorageService.ts │ │ │ ├── customOAIProvider.ts │ │ │ ├── geminiNativeProvider.ts │ │ │ ├── ollamaProvider.ts │ │ │ ├── openAIProvider.ts │ │ │ ├── openRouterProvider.ts │ │ │ ├── test/ │ │ │ │ ├── azureProvider.spec.ts │ │ │ │ ├── geminiNativeProvider.spec.ts │ │ │ │ └── ollamaProvider.spec.ts │ │ │ └── xAIProvider.ts │ │ ├── chat/ │ │ │ ├── test/ │ │ │ │ └── node/ │ │ │ │ └── chatHookService.spec.ts │ │ │ └── vscode-node/ │ │ │ ├── chatDebugFileLoggerService.ts │ │ │ ├── chatHookService.ts │ │ │ ├── chatHookTelemetry.ts │ │ │ ├── chatQuota.contribution.ts │ │ │ ├── hooksOutputChannel.ts │ │ │ ├── sessionTranscriptService.ts │ │ │ └── test/ │ │ │ └── chatDebugFileLoggerService.spec.ts │ │ ├── chatSessionContext/ │ │ │ └── vscode-node/ │ │ │ └── chatSessionContextProvider.ts │ │ ├── chatSessions/ │ │ │ ├── claude/ │ │ │ │ ├── AGENTS.md │ │ │ │ ├── CLAUDE_SESSION_USER_GUIDE.md │ │ │ │ ├── common/ │ │ │ │ │ ├── claudeFolderInfo.ts │ │ │ │ │ ├── claudeHookRegistry.ts │ │ │ │ │ ├── claudeMcpServerRegistry.ts │ │ │ │ │ ├── claudeSessionUri.ts │ │ │ │ │ ├── claudeToolPermission.ts │ │ │ │ │ ├── claudeToolPermissionRegistry.ts │ │ │ │ │ ├── claudeToolPermissionService.ts │ │ │ │ │ ├── claudeTools.ts │ │ │ │ │ ├── hooks/ │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── mcpServers/ │ │ │ │ │ │ ├── ideMcpServer.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── slashCommands/ │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── test/ │ │ │ │ │ │ ├── claudeToolPermissionRegistry.spec.ts │ │ │ │ │ │ ├── ideMcpServer.spec.ts │ │ │ │ │ │ └── toolInvocationFormatter.spec.ts │ │ │ │ │ ├── toolInvocationFormatter.ts │ │ │ │ │ └── toolPermissionHandlers/ │ │ │ │ │ ├── askUserQuestionHandler.ts │ │ │ │ │ ├── bashToolHandler.ts │ │ │ │ │ ├── exitPlanModeHandler.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── node/ │ │ │ │ │ ├── claudeCodeAgent.ts │ │ │ │ │ ├── claudeCodeModels.ts │ │ │ │ │ ├── claudeCodeSdkService.ts │ │ │ │ │ ├── claudeLanguageModelServer.ts │ │ │ │ │ ├── claudeProjectFolders.ts │ │ │ │ │ ├── claudePromptResolver.ts │ │ │ │ │ ├── claudeSessionStateService.ts │ │ │ │ │ ├── claudeSettingsChangeTracker.ts │ │ │ │ │ ├── hooks/ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── loggingHooks.ts │ │ │ │ │ │ ├── sessionHooks.ts │ │ │ │ │ │ ├── subagentHooks.ts │ │ │ │ │ │ └── toolHooks.ts │ │ │ │ │ ├── mcpServers/ │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── sessionParser/ │ │ │ │ │ │ ├── README.md │ │ │ │ │ │ ├── claudeCodeSessionService.ts │ │ │ │ │ │ ├── claudeSessionParser.ts │ │ │ │ │ │ ├── claudeSessionSchema.ts │ │ │ │ │ │ ├── sdkSessionAdapter.ts │ │ │ │ │ │ └── test/ │ │ │ │ │ │ ├── claudeCodeSessionService.spec.ts │ │ │ │ │ │ ├── claudeSessionParser.spec.ts │ │ │ │ │ │ ├── claudeSessionSchema.spec.ts │ │ │ │ │ │ └── sdkSessionAdapter.spec.ts │ │ │ │ │ ├── slashCommands/ │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── test/ │ │ │ │ │ │ ├── askUserQuestionHandler.spec.ts │ │ │ │ │ │ ├── claudeCodeAgent.spec.ts │ │ │ │ │ │ ├── claudeCodeAgentOTel.spec.ts │ │ │ │ │ │ ├── claudeCodeModels.spec.ts │ │ │ │ │ │ ├── claudeProjectFolders.spec.ts │ │ │ │ │ │ ├── claudeSessionStateService.spec.ts │ │ │ │ │ │ ├── claudeSettingsChangeTracker.spec.ts │ │ │ │ │ │ ├── claudeToolPermissionService.spec.ts │ │ │ │ │ │ ├── extractSessionId.spec.ts │ │ │ │ │ │ ├── fixtures/ │ │ │ │ │ │ │ ├── 30530d66-37fb-4f3b-aa5f-d92b6a8afae2.jsonl │ │ │ │ │ │ │ ├── 50a7220d-7250-46f3-b38e-b716ce25032e/ │ │ │ │ │ │ │ │ └── subagents/ │ │ │ │ │ │ │ │ └── agent-a21e2f5.jsonl │ │ │ │ │ │ │ ├── 50a7220d-7250-46f3-b38e-b716ce25032e.jsonl │ │ │ │ │ │ │ ├── 553dd2b5-8a53-4fbf-9db2-240632522fe5.jsonl │ │ │ │ │ │ │ ├── b02ed4d8-1f00-45cc-949f-3ea63b2dbde2.jsonl │ │ │ │ │ │ │ ├── b3a7bd3c-5a10-4e7b-8ff0-7fc0cd6d1093/ │ │ │ │ │ │ │ │ └── subagents/ │ │ │ │ │ │ │ │ ├── agent-a775a67.jsonl │ │ │ │ │ │ │ │ ├── agent-aa9d784.jsonl │ │ │ │ │ │ │ │ ├── agent-ac47f8c.jsonl │ │ │ │ │ │ │ │ └── agent-ae52dab.jsonl │ │ │ │ │ │ │ ├── b3a7bd3c-5a10-4e7b-8ff0-7fc0cd6d1093.jsonl │ │ │ │ │ │ │ └── c8bcb3a7-8728-4d76-9aae-1cbaf2350114.jsonl │ │ │ │ │ │ ├── mockClaudeCodeModels.ts │ │ │ │ │ │ ├── mockClaudeCodeSdkService.ts │ │ │ │ │ │ ├── mockClaudeToolPermissionService.ts │ │ │ │ │ │ ├── planModeHook.spec.ts │ │ │ │ │ │ └── resolvePromptToContentBlocks.spec.ts │ │ │ │ │ └── toolPermissionHandlers/ │ │ │ │ │ ├── editToolHandler.ts │ │ │ │ │ └── index.ts │ │ │ │ └── vscode-node/ │ │ │ │ ├── claudeSlashCommandService.ts │ │ │ │ ├── hooks/ │ │ │ │ │ └── index.ts │ │ │ │ ├── mcpServers/ │ │ │ │ │ └── index.ts │ │ │ │ ├── slashCommands/ │ │ │ │ │ ├── agentsCommand.ts │ │ │ │ │ ├── claudeSlashCommandRegistry.ts │ │ │ │ │ ├── hooksCommand.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── memoryCommand.ts │ │ │ │ │ ├── terminalCommand.ts │ │ │ │ │ └── test/ │ │ │ │ │ ├── claudeSlashCommandRegistry.spec.ts │ │ │ │ │ └── terminalCommand.spec.ts │ │ │ │ ├── test/ │ │ │ │ │ └── claudeSlashCommandService.spec.ts │ │ │ │ └── toolPermissionHandlers/ │ │ │ │ └── index.ts │ │ │ ├── common/ │ │ │ │ ├── agentSessionsWorkspace.ts │ │ │ │ ├── chatCustomAgentsService.ts │ │ │ │ ├── chatSessionMetadataStore.ts │ │ │ │ ├── chatSessionWorkspaceFolderService.ts │ │ │ │ ├── chatSessionWorktreeCheckpointService.ts │ │ │ │ ├── chatSessionWorktreeService.ts │ │ │ │ ├── externalEditTracker.ts │ │ │ │ ├── folderRepositoryManager.ts │ │ │ │ ├── test/ │ │ │ │ │ ├── externalEditTracker.spec.ts │ │ │ │ │ ├── mockChatSessionMetadataStore.ts │ │ │ │ │ └── ttlCache.spec.ts │ │ │ │ ├── ttlCache.ts │ │ │ │ ├── utils.ts │ │ │ │ └── workspaceInfo.ts │ │ │ ├── copilotcli/ │ │ │ │ ├── common/ │ │ │ │ │ ├── copilotCLIPrompt.ts │ │ │ │ │ ├── copilotCLITools.ts │ │ │ │ │ ├── customSessionTitleService.ts │ │ │ │ │ ├── delegationSummaryService.ts │ │ │ │ │ └── test/ │ │ │ │ │ └── copilotCLITools.spec.ts │ │ │ │ ├── node/ │ │ │ │ │ ├── cliHelpers.ts │ │ │ │ │ ├── copilotCLIImageSupport.ts │ │ │ │ │ ├── copilotCLISkills.ts │ │ │ │ │ ├── copilotCli.ts │ │ │ │ │ ├── copilotCliBridgeSpanProcessor.ts │ │ │ │ │ ├── copilotcliPromptResolver.ts │ │ │ │ │ ├── copilotcliSession.ts │ │ │ │ │ ├── copilotcliSessionService.ts │ │ │ │ │ ├── logger.ts │ │ │ │ │ ├── mcpHandler.ts │ │ │ │ │ ├── nodePtyShim.ts │ │ │ │ │ ├── permissionHelpers.ts │ │ │ │ │ ├── ripgrepShim.ts │ │ │ │ │ ├── test/ │ │ │ │ │ │ ├── copilotCliAgents.spec.ts │ │ │ │ │ │ ├── copilotCliAuth.spec.ts │ │ │ │ │ │ ├── copilotCliBridgeSpanProcessor.spec.ts │ │ │ │ │ │ ├── copilotCliModels.spec.ts │ │ │ │ │ │ ├── copilotCliSessionService.spec.ts │ │ │ │ │ │ ├── copilotcliPromptResolver.spec.ts │ │ │ │ │ │ ├── copilotcliSession.spec.ts │ │ │ │ │ │ ├── permissionHelpers.spec.ts │ │ │ │ │ │ └── testHelpers.ts │ │ │ │ │ └── userInputHelpers.ts │ │ │ │ └── vscode-node/ │ │ │ │ ├── commands/ │ │ │ │ │ ├── addFileReference.ts │ │ │ │ │ ├── addSelection.ts │ │ │ │ │ ├── context.ts │ │ │ │ │ ├── diffCommands.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── pickSession.ts │ │ │ │ │ └── sendContext.ts │ │ │ │ ├── contribution.ts │ │ │ │ ├── copilotCLISessionTracker.ts │ │ │ │ ├── customSessionTitleServiceImpl.ts │ │ │ │ ├── diffState.ts │ │ │ │ ├── inProcHttpServer.ts │ │ │ │ ├── lockFile.ts │ │ │ │ ├── readonlyContentProvider.ts │ │ │ │ ├── test/ │ │ │ │ │ ├── addFileReference.spec.ts │ │ │ │ │ ├── addSelection.spec.ts │ │ │ │ │ ├── closeAllForSession.spec.ts │ │ │ │ │ ├── closeDiff.spec.ts │ │ │ │ │ ├── context.spec.ts │ │ │ │ │ ├── copilotCLISessionTracker.spec.ts │ │ │ │ │ ├── diagnosticsChanged.spec.ts │ │ │ │ │ ├── diffCommands.spec.ts │ │ │ │ │ ├── diffState.spec.ts │ │ │ │ │ ├── getDiagnostics.spec.ts │ │ │ │ │ ├── getSelection.spec.ts │ │ │ │ │ ├── getVscodeInfo.spec.ts │ │ │ │ │ ├── inProcHttpServer.spec.ts │ │ │ │ │ ├── lockFile.spec.ts │ │ │ │ │ ├── openDiff.spec.ts │ │ │ │ │ ├── readonlyContentProvider.spec.ts │ │ │ │ │ ├── selectionChanged.spec.ts │ │ │ │ │ ├── testHelpers.ts │ │ │ │ │ └── updateSessionName.spec.ts │ │ │ │ └── tools/ │ │ │ │ ├── closeDiff.ts │ │ │ │ ├── getDiagnostics.ts │ │ │ │ ├── getSelection.ts │ │ │ │ ├── getVscodeInfo.ts │ │ │ │ ├── index.ts │ │ │ │ ├── openDiff.ts │ │ │ │ ├── push/ │ │ │ │ │ ├── diagnosticsChanged.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ └── selectionChanged.ts │ │ │ │ ├── updateSessionName.ts │ │ │ │ └── utils.ts │ │ │ ├── vscode/ │ │ │ │ ├── chatSessionsUriHandler.ts │ │ │ │ ├── copilotCodingAgentUtils.ts │ │ │ │ └── test/ │ │ │ │ └── copilotCodingAgentUtils.spec.ts │ │ │ └── vscode-node/ │ │ │ ├── agentSessionsWorkspace.ts │ │ │ ├── askUserQuestionHandler.ts │ │ │ ├── chatCustomAgentsService.ts │ │ │ ├── chatHistoryBuilder.ts │ │ │ ├── chatSessionMetadataStoreImpl.ts │ │ │ ├── chatSessionRepositoryTracker.ts │ │ │ ├── chatSessionWorkspaceFolderServiceImpl.ts │ │ │ ├── chatSessionWorktreeCheckpointServiceImpl.ts │ │ │ ├── chatSessionWorktreeServiceImpl.ts │ │ │ ├── chatSessions.ts │ │ │ ├── claudeChatSessionContentProvider.ts │ │ │ ├── copilotCLIChatSessionsContribution.ts │ │ │ ├── copilotCLIPromptReferences.ts │ │ │ ├── copilotCLIPythonEnvironmentApi.ts │ │ │ ├── copilotCLIPythonTerminalService.ts │ │ │ ├── copilotCLIShim.ps1 │ │ │ ├── copilotCLIShim.ts │ │ │ ├── copilotCLITerminalIntegration.ts │ │ │ ├── copilotCLITerminalLinkProvider.ts │ │ │ ├── copilotCloudGitOperationsManager.ts │ │ │ ├── copilotCloudSessionContentBuilder.ts │ │ │ ├── copilotCloudSessionsProvider.ts │ │ │ ├── folderRepositoryManagerImpl.ts │ │ │ ├── prContentProvider.ts │ │ │ ├── pullRequestFileChangesService.ts │ │ │ └── test/ │ │ │ ├── __snapshots__/ │ │ │ │ └── chatSessionContentProvider.spec.ts.snap │ │ │ ├── askUserQuestionHandler.spec.ts │ │ │ ├── chatHistoryBuilder.spec.ts │ │ │ ├── chatSessionMetadataStoreImpl.spec.ts │ │ │ ├── chatSessionWorkspaceFolderService.spec.ts │ │ │ ├── claudeChatSessionContentProvider.spec.ts │ │ │ ├── copilotCLIChatSessionParticipant.spec.ts │ │ │ ├── copilotCLISDKUpgrade.spec.ts │ │ │ ├── copilotCLITerminalIntegration.spec.ts │ │ │ ├── copilotCLITerminalLinkProvider.spec.ts │ │ │ ├── fixtures/ │ │ │ │ ├── 4c289ca8-f8bb-4588-8400-88b78beb784d.jsonl │ │ │ │ ├── 98b76fb9-f5d3-40c5-ab82-b970c20e3764.jsonl │ │ │ │ └── bd937e2a-89e9-4d7b-8125-293a35863fa4.jsonl │ │ │ └── folderRepositoryManager.spec.ts │ │ ├── codeBlocks/ │ │ │ ├── node/ │ │ │ │ ├── codeBlockProcessor.ts │ │ │ │ └── test/ │ │ │ │ └── codeBlockProcessor.spec.ts │ │ │ └── vscode-node/ │ │ │ ├── chatBlockLanguageFeatures.contribution.ts │ │ │ └── provider.ts │ │ ├── commands/ │ │ │ └── node/ │ │ │ └── commandService.ts │ │ ├── common/ │ │ │ ├── constants.ts │ │ │ ├── contributions.ts │ │ │ └── modelContextProtocol.ts │ │ ├── completions/ │ │ │ ├── common/ │ │ │ │ ├── config.ts │ │ │ │ ├── copilotInlineCompletionItemProviderService.ts │ │ │ │ └── parseBlock.ts │ │ │ └── vscode-node/ │ │ │ ├── completionsCoreContribution.ts │ │ │ ├── completionsUnificationContribution.ts │ │ │ └── copilotInlineCompletionItemProviderService.ts │ │ ├── completions-core/ │ │ │ ├── common/ │ │ │ │ └── ghostTextContext.ts │ │ │ └── vscode-node/ │ │ │ ├── bridge/ │ │ │ │ └── src/ │ │ │ │ └── completionsTelemetryServiceBridge.ts │ │ │ ├── completionsServiceBridges.ts │ │ │ ├── extension/ │ │ │ │ ├── src/ │ │ │ │ │ ├── codeReferencing/ │ │ │ │ │ │ ├── citationManager.ts │ │ │ │ │ │ ├── codeReferenceEngagementTracker.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── matchNotifier.ts │ │ │ │ │ │ ├── outputChannel.ts │ │ │ │ │ │ └── test/ │ │ │ │ │ │ ├── codeReferenceEngagementTracker.test.ts │ │ │ │ │ │ ├── codeReferencing.test.ts │ │ │ │ │ │ └── matchNotifier.test.ts │ │ │ │ │ ├── completionsObservableWorkspace.ts │ │ │ │ │ ├── config.ts │ │ │ │ │ ├── constants.ts │ │ │ │ │ ├── contextProviderMatch.ts │ │ │ │ │ ├── copilotCompletionFeedbackTracker.ts │ │ │ │ │ ├── copilotPanel/ │ │ │ │ │ │ ├── common.ts │ │ │ │ │ │ ├── copilotListDocument.ts │ │ │ │ │ │ ├── copilotSuggestionsPanel.ts │ │ │ │ │ │ ├── copilotSuggestionsPanelManager.ts │ │ │ │ │ │ ├── panelConfig.ts │ │ │ │ │ │ └── webView/ │ │ │ │ │ │ ├── suggestionsPanelWebview.ts │ │ │ │ │ │ └── tsconfig.json │ │ │ │ │ ├── extensionStatus.ts │ │ │ │ │ ├── fileSystem.ts │ │ │ │ │ ├── ghostText/ │ │ │ │ │ │ └── ghostTextProvider.ts │ │ │ │ │ ├── icon.ts │ │ │ │ │ ├── lib/ │ │ │ │ │ │ ├── copilotPanel/ │ │ │ │ │ │ │ ├── common.ts │ │ │ │ │ │ │ └── panel.ts │ │ │ │ │ │ └── panelShared/ │ │ │ │ │ │ ├── common.ts │ │ │ │ │ │ └── panelTypes.ts │ │ │ │ │ ├── modelPicker.ts │ │ │ │ │ ├── modelPickerUserSelection.ts │ │ │ │ │ ├── panelShared/ │ │ │ │ │ │ ├── baseListDocument.ts │ │ │ │ │ │ ├── basePanelTypes.ts │ │ │ │ │ │ ├── baseSuggestionsPanel.ts │ │ │ │ │ │ ├── baseSuggestionsPanelManager.ts │ │ │ │ │ │ ├── highlighter.ts │ │ │ │ │ │ ├── languages/ │ │ │ │ │ │ │ ├── cuda-cpp.tmLanguage.ts │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ ├── javaScriptReact.tmLanguage.ts │ │ │ │ │ │ │ ├── markdown-latex-combined.tmLanguage.ts │ │ │ │ │ │ │ ├── md-math.tmLanguage.ts │ │ │ │ │ │ │ ├── rst.tmLanguage.ts │ │ │ │ │ │ │ ├── searchResult.tmLanguage.ts │ │ │ │ │ │ │ └── typeScriptReact.tmLanguage.ts │ │ │ │ │ │ ├── themes/ │ │ │ │ │ │ │ ├── abyss.ts │ │ │ │ │ │ │ ├── dark-hc.ts │ │ │ │ │ │ │ ├── dark-modern.ts │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ ├── kimbie-dark.ts │ │ │ │ │ │ │ ├── light-hc.ts │ │ │ │ │ │ │ ├── light-modern.ts │ │ │ │ │ │ │ ├── monokai-dim.ts │ │ │ │ │ │ │ ├── quiet-light.ts │ │ │ │ │ │ │ ├── red.ts │ │ │ │ │ │ │ ├── tomorrow-night-blue.ts │ │ │ │ │ │ │ ├── vs-dark.ts │ │ │ │ │ │ │ └── vs-light.ts │ │ │ │ │ │ └── utils.ts │ │ │ │ │ ├── statusBar.ts │ │ │ │ │ ├── statusBarPicker.ts │ │ │ │ │ ├── telemetry.ts │ │ │ │ │ ├── test/ │ │ │ │ │ │ ├── config.ts │ │ │ │ │ │ ├── context.ts │ │ │ │ │ │ └── modelPicker.test.ts │ │ │ │ │ ├── textDocumentManager.ts │ │ │ │ │ └── vscodeInlineCompletionItemProvider.ts │ │ │ │ └── test/ │ │ │ │ ├── run.js │ │ │ │ └── runTest.ts │ │ │ ├── lib/ │ │ │ │ └── src/ │ │ │ │ ├── auth/ │ │ │ │ │ ├── copilotTokenManager.ts │ │ │ │ │ ├── copilotTokenNotifier.ts │ │ │ │ │ └── orgs.ts │ │ │ │ ├── changeTracker.ts │ │ │ │ ├── citationManager.ts │ │ │ │ ├── completionNotifier.ts │ │ │ │ ├── completionState.ts │ │ │ │ ├── completionsObservableWorkspace.ts │ │ │ │ ├── config.ts │ │ │ │ ├── constants.ts │ │ │ │ ├── defaultHandlers.ts │ │ │ │ ├── diagnostics.ts │ │ │ │ ├── documentTracker.ts │ │ │ │ ├── error/ │ │ │ │ │ └── userErrorNotifier.ts │ │ │ │ ├── experiments/ │ │ │ │ │ ├── defaultExpFilters.ts │ │ │ │ │ ├── expConfig.ts │ │ │ │ │ ├── features.ts │ │ │ │ │ ├── featuresService.ts │ │ │ │ │ ├── filters.ts │ │ │ │ │ ├── similarFileOptionsProvider.ts │ │ │ │ │ ├── similarFileOptionsProviderCpp.ts │ │ │ │ │ ├── telemetryNames.ts │ │ │ │ │ └── test/ │ │ │ │ │ └── features.test.ts │ │ │ │ ├── fileReader.ts │ │ │ │ ├── fileSystem.ts │ │ │ │ ├── ghostText/ │ │ │ │ │ ├── asyncCompletions.ts │ │ │ │ │ ├── blockTrimmer.ts │ │ │ │ │ ├── cacheUtils.ts │ │ │ │ │ ├── completionsCache.ts │ │ │ │ │ ├── completionsFromNetwork.ts │ │ │ │ │ ├── configBlockMode.ts │ │ │ │ │ ├── contextualFilterConstants.ts │ │ │ │ │ ├── copilotCompletion.ts │ │ │ │ │ ├── current.ts │ │ │ │ │ ├── ghostText.ts │ │ │ │ │ ├── ghostTextStrategy.ts │ │ │ │ │ ├── last.ts │ │ │ │ │ ├── multilineModel.ts │ │ │ │ │ ├── multilineModelWeights.ts │ │ │ │ │ ├── normalizeIndent.ts │ │ │ │ │ ├── requestContext.ts │ │ │ │ │ ├── resultType.ts │ │ │ │ │ ├── speculativeRequestCache.ts │ │ │ │ │ ├── statementTree.ts │ │ │ │ │ ├── streamedCompletionSplitter.ts │ │ │ │ │ ├── telemetry.ts │ │ │ │ │ └── test/ │ │ │ │ │ ├── asyncCompletions.test.ts │ │ │ │ │ ├── blockTrimmer.test.ts │ │ │ │ │ ├── current.test.ts │ │ │ │ │ ├── ghostText.test.ts │ │ │ │ │ ├── last.test.ts │ │ │ │ │ ├── multilineModel.test.ts │ │ │ │ │ ├── normalizeIndent.test.ts │ │ │ │ │ ├── statementTree.test.ts │ │ │ │ │ └── streamedCompletionSplitter.test.ts │ │ │ │ ├── helpers/ │ │ │ │ │ ├── cache.ts │ │ │ │ │ ├── iterableHelpers.ts │ │ │ │ │ ├── radix.ts │ │ │ │ │ └── test/ │ │ │ │ │ ├── cache.test.ts │ │ │ │ │ ├── iterableHelpers.test.ts │ │ │ │ │ └── radix.test.ts │ │ │ │ ├── inlineCompletion.ts │ │ │ │ ├── language/ │ │ │ │ │ ├── generatedLanguages.ts │ │ │ │ │ ├── languageDetection.ts │ │ │ │ │ ├── languages.ts │ │ │ │ │ └── test/ │ │ │ │ │ ├── generatedLanguages.test.ts │ │ │ │ │ └── languageDetection.test.ts │ │ │ │ ├── localFileSystem.ts │ │ │ │ ├── logger.ts │ │ │ │ ├── logging/ │ │ │ │ │ └── util.ts │ │ │ │ ├── networkConfiguration.ts │ │ │ │ ├── networking.ts │ │ │ │ ├── networkingTypes.ts │ │ │ │ ├── notificationSender.ts │ │ │ │ ├── openai/ │ │ │ │ │ ├── config.ts │ │ │ │ │ ├── fetch.fake.ts │ │ │ │ │ ├── fetch.ts │ │ │ │ │ ├── model.ts │ │ │ │ │ ├── openai.ts │ │ │ │ │ ├── stream.ts │ │ │ │ │ └── test/ │ │ │ │ │ ├── config.test.ts │ │ │ │ │ ├── fetch.test.ts │ │ │ │ │ └── stream.test.ts │ │ │ │ ├── postInsertion.ts │ │ │ │ ├── progress.ts │ │ │ │ ├── prompt/ │ │ │ │ │ ├── asyncUtils.ts │ │ │ │ │ ├── completionsPromptFactory/ │ │ │ │ │ │ ├── cascadingPromptFactory.ts │ │ │ │ │ │ ├── completionsPromptFactory.ts │ │ │ │ │ │ ├── componentsCompletionsPromptFactory.tsx │ │ │ │ │ │ └── test/ │ │ │ │ │ │ └── completionsPromptFactory.test.tsx │ │ │ │ │ ├── components/ │ │ │ │ │ │ ├── codeSnippets.tsx │ │ │ │ │ │ ├── completionsContext.tsx │ │ │ │ │ │ ├── completionsPromptRenderer.tsx │ │ │ │ │ │ ├── contextProviderBridge.ts │ │ │ │ │ │ ├── currentFile.tsx │ │ │ │ │ │ ├── diagnostics.tsx │ │ │ │ │ │ ├── elision.ts │ │ │ │ │ │ ├── marker.tsx │ │ │ │ │ │ ├── recentEdits.tsx │ │ │ │ │ │ ├── similarFiles.tsx │ │ │ │ │ │ ├── splitContextPrompt.tsx │ │ │ │ │ │ ├── splitContextPromptRenderer.tsx │ │ │ │ │ │ ├── test/ │ │ │ │ │ │ │ ├── codeSnippets.test.tsx │ │ │ │ │ │ │ ├── completionsPromptRenderer.test.tsx │ │ │ │ │ │ │ ├── contextProviderBridge.test.ts │ │ │ │ │ │ │ ├── currentFile.test.tsx │ │ │ │ │ │ │ ├── marker.test.tsx │ │ │ │ │ │ │ ├── recentEdits.test.tsx │ │ │ │ │ │ │ ├── similarFiles.test.tsx │ │ │ │ │ │ │ ├── splitContextPromptRenderer.test.tsx │ │ │ │ │ │ │ └── traits.test.tsx │ │ │ │ │ │ ├── traits.tsx │ │ │ │ │ │ └── virtualComponent.ts │ │ │ │ │ ├── contextProviderRegistry.ts │ │ │ │ │ ├── contextProviderRegistryCSharp.ts │ │ │ │ │ ├── contextProviderRegistryCpp.ts │ │ │ │ │ ├── contextProviderRegistryMultiLanguage.ts │ │ │ │ │ ├── contextProviderRegistryTs.ts │ │ │ │ │ ├── contextProviderStatistics.ts │ │ │ │ │ ├── contextProviders/ │ │ │ │ │ │ ├── codeSnippets.ts │ │ │ │ │ │ ├── contextItemSchemas.ts │ │ │ │ │ │ ├── diagnostics.ts │ │ │ │ │ │ ├── test/ │ │ │ │ │ │ │ ├── codeSnippets.test.ts │ │ │ │ │ │ │ ├── contextItemSchemas.test.ts │ │ │ │ │ │ │ └── traits.test.ts │ │ │ │ │ │ └── traits.ts │ │ │ │ │ ├── parseBlock.ts │ │ │ │ │ ├── prompt.ts │ │ │ │ │ ├── recentEdits/ │ │ │ │ │ │ ├── emptyRecentEditsProvider.ts │ │ │ │ │ │ ├── recentEditsProvider.ts │ │ │ │ │ │ ├── recentEditsReducer.ts │ │ │ │ │ │ └── test/ │ │ │ │ │ │ └── recentEditsReducer.test.ts │ │ │ │ │ ├── render/ │ │ │ │ │ │ ├── renderNode.ts │ │ │ │ │ │ ├── test/ │ │ │ │ │ │ │ └── renderNode.test.ts │ │ │ │ │ │ └── utils.ts │ │ │ │ │ ├── repository.ts │ │ │ │ │ ├── similarFiles/ │ │ │ │ │ │ ├── compositeRelatedFilesProvider.ts │ │ │ │ │ │ ├── neighborFiles.ts │ │ │ │ │ │ ├── openTabFiles.ts │ │ │ │ │ │ ├── relatedFiles.ts │ │ │ │ │ │ └── test/ │ │ │ │ │ │ ├── neighborFiles.test.ts │ │ │ │ │ │ └── relatedFiles.test.ts │ │ │ │ │ └── test/ │ │ │ │ │ ├── contextProviderRegistry.test.ts │ │ │ │ │ ├── contextProviderRegistryMultiLanguage.test.ts │ │ │ │ │ ├── contextProviderRegistryTs.test.ts │ │ │ │ │ ├── contextProviderStatistics.test.ts │ │ │ │ │ ├── contextProviderStatistics.ts │ │ │ │ │ ├── contextProviderTelemetry.ts │ │ │ │ │ ├── defaultDiagnosticSettings.test.ts │ │ │ │ │ ├── determineTimeComplexity.ts │ │ │ │ │ ├── parseBlock.test.ts │ │ │ │ │ ├── prompt.test.ts │ │ │ │ │ ├── prompt.ts │ │ │ │ │ ├── relatedFiles.ts │ │ │ │ │ └── repository.test.ts │ │ │ │ ├── snippy/ │ │ │ │ │ ├── compute.ts │ │ │ │ │ ├── connectionState.ts │ │ │ │ │ ├── constants.ts │ │ │ │ │ ├── errorCreator.ts │ │ │ │ │ ├── handlePostInsertion.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── logger.ts │ │ │ │ │ ├── network.ts │ │ │ │ │ ├── snippy.proto.ts │ │ │ │ │ ├── telemetryHandlers.ts │ │ │ │ │ └── test/ │ │ │ │ │ ├── compute.test.ts │ │ │ │ │ └── network.test.ts │ │ │ │ ├── suggestions/ │ │ │ │ │ ├── anomalyDetection.ts │ │ │ │ │ ├── editDistance.ts │ │ │ │ │ ├── partialSuggestions.ts │ │ │ │ │ ├── suggestions.ts │ │ │ │ │ └── test/ │ │ │ │ │ ├── anomalyDetection.test.ts │ │ │ │ │ ├── editDistance.test.ts │ │ │ │ │ ├── partialSuggestions.test.ts │ │ │ │ │ └── suggestions.test.ts │ │ │ │ ├── telemetry/ │ │ │ │ │ └── userConfig.ts │ │ │ │ ├── telemetry.ts │ │ │ │ ├── test/ │ │ │ │ │ ├── changeTracker.test.ts │ │ │ │ │ ├── completionNotifier.test.ts │ │ │ │ │ ├── completionState.test.ts │ │ │ │ │ ├── completionsPrompt.ts │ │ │ │ │ ├── config.test.ts │ │ │ │ │ ├── context.ts │ │ │ │ │ ├── copilotTokenManager.ts │ │ │ │ │ ├── fetcher.ts │ │ │ │ │ ├── fileReader.test.ts │ │ │ │ │ ├── filesystem.ts │ │ │ │ │ ├── inlineCompletion.test.ts │ │ │ │ │ ├── localFileSystem.test.ts │ │ │ │ │ ├── loggerHelpers.ts │ │ │ │ │ ├── networking.test.ts │ │ │ │ │ ├── noopTelemetry.ts │ │ │ │ │ ├── notificationSender.test.ts │ │ │ │ │ ├── postInsertion.test.ts │ │ │ │ │ ├── runtimeMode.test.ts │ │ │ │ │ ├── snapshot.ts │ │ │ │ │ ├── telemetry.test.ts │ │ │ │ │ ├── telemetry.ts │ │ │ │ │ ├── telemetrySpy.ts │ │ │ │ │ ├── testContentExclusion.ts │ │ │ │ │ ├── testHelpers.ts │ │ │ │ │ ├── textDocument.test.ts │ │ │ │ │ ├── textDocument.ts │ │ │ │ │ └── textDocumentManager.test.ts │ │ │ │ ├── textDocument.ts │ │ │ │ ├── textDocumentManager.ts │ │ │ │ └── util/ │ │ │ │ ├── async.ts │ │ │ │ ├── documentEvaluation.ts │ │ │ │ ├── event.ts │ │ │ │ ├── map.ts │ │ │ │ ├── priorityQueue.ts │ │ │ │ ├── promiseQueue.ts │ │ │ │ ├── runtimeMode.ts │ │ │ │ ├── shortCircuit.ts │ │ │ │ ├── subject.ts │ │ │ │ ├── test/ │ │ │ │ │ ├── async.test.ts │ │ │ │ │ ├── priorityQueue.test.ts │ │ │ │ │ ├── shortCircuit.test.ts │ │ │ │ │ ├── subject.test.ts │ │ │ │ │ └── uri.test.ts │ │ │ │ ├── typebox.ts │ │ │ │ ├── unknown.ts │ │ │ │ └── uri.ts │ │ │ ├── prompt/ │ │ │ │ ├── jsx-runtime/ │ │ │ │ │ └── jsx-runtime.ts │ │ │ │ └── src/ │ │ │ │ ├── components/ │ │ │ │ │ ├── components.ts │ │ │ │ │ ├── hooks.ts │ │ │ │ │ ├── reconciler.ts │ │ │ │ │ ├── virtualPrompt.ts │ │ │ │ │ └── walker.ts │ │ │ │ ├── error.ts │ │ │ │ ├── fileLoader.ts │ │ │ │ ├── indentation/ │ │ │ │ │ ├── classes.ts │ │ │ │ │ ├── description.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── java.ts │ │ │ │ │ ├── manipulation.ts │ │ │ │ │ ├── markdown.ts │ │ │ │ │ └── parsing.ts │ │ │ │ ├── languageMarker.ts │ │ │ │ ├── parse.ts │ │ │ │ ├── parseBlock.ts │ │ │ │ ├── prompt.ts │ │ │ │ ├── snippetInclusion/ │ │ │ │ │ ├── cursorContext.ts │ │ │ │ │ ├── jaccardMatching.ts │ │ │ │ │ ├── selectRelevance.ts │ │ │ │ │ ├── similarFiles.ts │ │ │ │ │ ├── snippets.ts │ │ │ │ │ ├── subsetMatching.ts │ │ │ │ │ └── windowDelineations.ts │ │ │ │ ├── suffixMatchCriteria.ts │ │ │ │ ├── test/ │ │ │ │ │ ├── components/ │ │ │ │ │ │ ├── hooks.test.ts │ │ │ │ │ │ ├── jsx-runtime.test.ts.off │ │ │ │ │ │ ├── reconciler.test.tsx │ │ │ │ │ │ ├── testHelpers.ts │ │ │ │ │ │ ├── virtualPrompt.test.tsx │ │ │ │ │ │ └── walker.test.ts │ │ │ │ │ ├── indentation.test.ts │ │ │ │ │ ├── indentationLanguages.test.ts │ │ │ │ │ ├── indentationParsing.test.ts │ │ │ │ │ ├── languageMarker.test.ts │ │ │ │ │ ├── multisnippet.test.ts │ │ │ │ │ ├── parse.test.ts │ │ │ │ │ ├── parseBlock.test.ts │ │ │ │ │ ├── similarFiles.test.ts │ │ │ │ │ ├── snippets.test.ts │ │ │ │ │ ├── subsetMatching.test.ts │ │ │ │ │ ├── suffixmatch.test.ts │ │ │ │ │ ├── testHelpers.ts │ │ │ │ │ ├── testdata/ │ │ │ │ │ │ ├── example.py │ │ │ │ │ │ ├── lazy_greet.py │ │ │ │ │ │ ├── testTokenizer.ts │ │ │ │ │ │ └── testWishlist.ts │ │ │ │ │ ├── tokenizer.test.ts │ │ │ │ │ └── windowDelineation.test.ts │ │ │ │ └── tokenization/ │ │ │ │ ├── index.ts │ │ │ │ └── tokenizer.ts │ │ │ └── types/ │ │ │ └── src/ │ │ │ ├── auth.ts │ │ │ ├── codeCitation.ts │ │ │ ├── contextProviderApiV1.ts │ │ │ ├── core.ts │ │ │ ├── index.ts │ │ │ └── status.ts │ │ ├── configuration/ │ │ │ └── vscode-node/ │ │ │ └── configurationMigration.ts │ │ ├── context/ │ │ │ ├── node/ │ │ │ │ └── resolvers/ │ │ │ │ ├── extensionApi.tsx │ │ │ │ ├── fixSelection.ts │ │ │ │ ├── genericInlineIntentInvocation.ts │ │ │ │ ├── genericPanelIntentInvocation.ts │ │ │ │ ├── inlineChatSelection.ts │ │ │ │ ├── inlineFixIntentInvocation.ts │ │ │ │ ├── promptWorkspaceLabels.ts │ │ │ │ ├── selectionContextHelpers.ts │ │ │ │ ├── test/ │ │ │ │ │ └── vscodeContext.spec.ts │ │ │ │ └── vscodeContext.ts │ │ │ └── vscode/ │ │ │ └── context.contribution.ts │ │ ├── contextKeys/ │ │ │ └── vscode-node/ │ │ │ └── contextKeys.contribution.ts │ │ ├── conversation/ │ │ │ ├── common/ │ │ │ │ └── languageModelChatMessageHelpers.ts │ │ │ ├── node/ │ │ │ │ ├── aiMappedEditsProvider.ts │ │ │ │ └── githubPullRequestProviders.ts │ │ │ └── vscode-node/ │ │ │ ├── aiMappedEditsContrib.ts │ │ │ ├── chatParticipants.ts │ │ │ ├── conversationFeature.ts │ │ │ ├── feedbackCollection.ts │ │ │ ├── feedbackContribution.ts │ │ │ ├── feedbackReporter.ts │ │ │ ├── languageModelAccess.ts │ │ │ ├── languageModelAccessPrompt.tsx │ │ │ ├── logWorkspaceState.ts │ │ │ ├── newWorkspaceFollowup.ts │ │ │ ├── remoteAgents.ts │ │ │ ├── resolveModelId.ts │ │ │ ├── terminalFixGenerator.ts │ │ │ ├── test/ │ │ │ │ ├── conversationFeature.test.ts │ │ │ │ ├── githubPullRequestTitleAndDescription.test.ts │ │ │ │ ├── interactiveEditorSessionProvider.test.ts │ │ │ │ ├── interactiveSessionProvider.telemetry.test.ts │ │ │ │ ├── languageModelAccess.test.ts │ │ │ │ └── userActionsResolvedModel.spec.ts │ │ │ ├── userActions.ts │ │ │ └── welcomeMessageProvider.ts │ │ ├── conversationStore/ │ │ │ └── node/ │ │ │ └── conversationStore.ts │ │ ├── diagnosticsContext/ │ │ │ └── vscode/ │ │ │ └── diagnosticsContextProvider.ts │ │ ├── extension/ │ │ │ ├── vscode/ │ │ │ │ ├── contributions.ts │ │ │ │ ├── extension.ts │ │ │ │ └── services.ts │ │ │ ├── vscode-node/ │ │ │ │ ├── contributions.ts │ │ │ │ ├── extension.ts │ │ │ │ └── services.ts │ │ │ └── vscode-worker/ │ │ │ ├── contributions.ts │ │ │ ├── extension.ts │ │ │ └── services.ts │ │ ├── externalAgents/ │ │ │ ├── node/ │ │ │ │ ├── modelProxyProvider.ts │ │ │ │ └── oaiLanguageModelServer.ts │ │ │ └── vscode-node/ │ │ │ └── lmProxyContrib.ts │ │ ├── getting-started/ │ │ │ ├── common/ │ │ │ │ └── newWorkspaceContext.ts │ │ │ └── vscode-node/ │ │ │ ├── commands.ts │ │ │ ├── newWorkspace.contribution.ts │ │ │ └── newWorkspaceInitializer.ts │ │ ├── git/ │ │ │ ├── common/ │ │ │ │ └── mergeConflictService.ts │ │ │ └── vscode/ │ │ │ ├── mergeConflictParser.ts │ │ │ ├── mergeConflictServiceImpl.ts │ │ │ └── scmContextprovider.ts │ │ ├── githubMcp/ │ │ │ ├── common/ │ │ │ │ └── githubMcpDefinitionProvider.ts │ │ │ ├── test/ │ │ │ │ └── node/ │ │ │ │ └── githubMcpDefinitionProvider.spec.ts │ │ │ └── vscode-node/ │ │ │ └── githubMcp.contribution.ts │ │ ├── githubPullRequest.d.ts │ │ ├── ignore/ │ │ │ └── vscode-node/ │ │ │ ├── ignoreMessage.ts │ │ │ └── ignoreProvider.ts │ │ ├── inlineChat/ │ │ │ ├── node/ │ │ │ │ ├── codeContextRegion.ts │ │ │ │ ├── diagnosticsTelemetry.ts │ │ │ │ ├── inlineChatConstants.ts │ │ │ │ ├── inlineChatIntent.ts │ │ │ │ ├── progressMessages.ts │ │ │ │ ├── promptCraftingTypes.ts │ │ │ │ └── rendererVisualization.ts │ │ │ ├── test/ │ │ │ │ └── vscode-node/ │ │ │ │ ├── inlineChat.test.ts │ │ │ │ └── naturalLanguageHint.test.ts │ │ │ └── vscode-node/ │ │ │ ├── inlineChatCodeActions.ts │ │ │ ├── inlineChatCommands.ts │ │ │ ├── inlineChatNotebookActions.ts │ │ │ └── naturalLanguageHint.ts │ │ ├── inlineEdits/ │ │ │ ├── common/ │ │ │ │ ├── common.ts │ │ │ │ ├── correlationId.ts │ │ │ │ ├── delay.ts │ │ │ │ ├── editRebase.ts │ │ │ │ ├── informationDelta.tsx │ │ │ │ ├── nearbyCursorInlineEditProvider.ts │ │ │ │ ├── nesTriggerHint.ts │ │ │ │ ├── observableWorkspaceRecordingReplayer.ts │ │ │ │ ├── rejectionCollector.ts │ │ │ │ └── userInteractionMonitor.ts │ │ │ ├── node/ │ │ │ │ ├── createNextEditProvider.ts │ │ │ │ ├── debugRecorder.ts │ │ │ │ ├── diffNextEdits.ts │ │ │ │ ├── importFiltering.ts │ │ │ │ ├── nesConfigs.ts │ │ │ │ ├── nextEditCache.ts │ │ │ │ ├── nextEditProvider.ts │ │ │ │ ├── nextEditProviderTelemetry.ts │ │ │ │ ├── nextEditResult.ts │ │ │ │ └── rebaseResult.ts │ │ │ ├── test/ │ │ │ │ ├── common/ │ │ │ │ │ ├── editRebase.spec.ts │ │ │ │ │ ├── userHappinessScore.spec.ts │ │ │ │ │ └── userInteractionMonitor.spec.ts │ │ │ │ ├── node/ │ │ │ │ │ ├── debugRecorder.spec.ts │ │ │ │ │ ├── fileLoading.ts │ │ │ │ │ ├── ignoreImportChanges.spec.ts │ │ │ │ │ ├── nesXtabHistoryTracker.spec.ts │ │ │ │ │ ├── nextEditProviderCaching.spec.ts │ │ │ │ │ ├── nextEditProviderSpeculative.spec.ts │ │ │ │ │ ├── nextEditProviderTelemetry.spec.ts │ │ │ │ │ ├── recordings/ │ │ │ │ │ │ ├── ArrayToObject.recording.w.json │ │ │ │ │ │ ├── ChangePointToPoint3D.recording.w.json │ │ │ │ │ │ ├── DeclaringConstructorArgument.recording.w.json │ │ │ │ │ │ ├── EditSourceTracker.test1.recording.w.json │ │ │ │ │ │ └── RejectionCollector.test1.w.json │ │ │ │ │ ├── rejectionCollector.spec.ts │ │ │ │ │ └── runRecording.ts │ │ │ │ └── vscode-node/ │ │ │ │ ├── diagnosticsCollection.spec.ts │ │ │ │ ├── documentFilter.ts │ │ │ │ ├── inlineEditTriggerer.spec.ts │ │ │ │ ├── isInlineSuggestion.spec.ts │ │ │ │ ├── isSubword.spec.ts │ │ │ │ └── raceAndAll.spec.ts │ │ │ └── vscode-node/ │ │ │ ├── components/ │ │ │ │ ├── expectedEditCaptureController.ts │ │ │ │ ├── inlineEditDebugComponent.ts │ │ │ │ ├── logContextRecorder.ts │ │ │ │ ├── nesFeedbackSubmitter.ts │ │ │ │ └── test/ │ │ │ │ ├── inlineEditDebugComponent.spec.ts │ │ │ │ └── nesFeedbackSubmitter.spec.ts │ │ │ ├── features/ │ │ │ │ ├── diagnosticsBasedCompletions/ │ │ │ │ │ ├── anyDiagnosticsCompletionProvider.ts │ │ │ │ │ ├── asyncDiagnosticsCompletionProvider.ts │ │ │ │ │ ├── diagnosticsCompletions.ts │ │ │ │ │ └── importDiagnosticsCompletionProvider.ts │ │ │ │ ├── diagnosticsCompletionProcessor.ts │ │ │ │ └── diagnosticsInlineEditProvider.ts │ │ │ ├── inlineCompletionProvider.ts │ │ │ ├── inlineEditModel.ts │ │ │ ├── inlineEditProviderFeature.ts │ │ │ ├── inlineEditTriggerer.ts │ │ │ ├── isInlineSuggestion.ts │ │ │ ├── jointInlineCompletionProvider.ts │ │ │ ├── parts/ │ │ │ │ ├── common.ts │ │ │ │ ├── documentFilter.ts │ │ │ │ ├── inlineEditLogger.ts │ │ │ │ ├── verifyTextDocumentChanges.ts │ │ │ │ └── vscodeWorkspace.ts │ │ │ ├── raceAndAll.ts │ │ │ ├── similarFilesContext.ts │ │ │ └── utils/ │ │ │ ├── observablesUtils.ts │ │ │ ├── translations.ts │ │ │ └── virtualTextDocumentProvider.ts │ │ ├── intents/ │ │ │ ├── common/ │ │ │ │ ├── agentConfig.ts │ │ │ │ └── intents.ts │ │ │ ├── node/ │ │ │ │ ├── agentIntent.ts │ │ │ │ ├── allIntents.ts │ │ │ │ ├── askAgentIntent.ts │ │ │ │ ├── cacheBreakpoints.ts │ │ │ │ ├── docIntent.tsx │ │ │ │ ├── editCodeIntent.ts │ │ │ │ ├── editCodeIntent2.ts │ │ │ │ ├── editCodeStep.ts │ │ │ │ ├── explainIntent.ts │ │ │ │ ├── fixIntent.ts │ │ │ │ ├── generateCodeIntent.ts │ │ │ │ ├── generateNewWorkspaceContent.ts │ │ │ │ ├── hookResultProcessor.ts │ │ │ │ ├── intentService.ts │ │ │ │ ├── newIntent.ts │ │ │ │ ├── newNotebookIntent.contribution.ts │ │ │ │ ├── newNotebookIntent.ts │ │ │ │ ├── notebookEditorIntent.ts │ │ │ │ ├── promptOverride.ts │ │ │ │ ├── reviewIntent.ts │ │ │ │ ├── searchIntent.ts │ │ │ │ ├── searchKeywordsIntent.ts │ │ │ │ ├── searchPanelIntent.ts │ │ │ │ ├── setupTests.ts │ │ │ │ ├── terminalExplainIntent.ts │ │ │ │ ├── terminalIntent.ts │ │ │ │ ├── test/ │ │ │ │ │ ├── agentSummarizeCommand.spec.ts │ │ │ │ │ └── promptOverride.spec.ts │ │ │ │ ├── testIntent/ │ │ │ │ │ ├── setupTestsFrameworkQueryInvocation.tsx │ │ │ │ │ ├── setupTestsInvocation.tsx │ │ │ │ │ ├── summarizedDocumentWithSelection.tsx │ │ │ │ │ ├── testDeps.tsx │ │ │ │ │ ├── testFromSrcInvocation.tsx │ │ │ │ │ ├── testFromTestInvocation.tsx │ │ │ │ │ ├── testInfoStorage.ts │ │ │ │ │ ├── testIntent.tsx │ │ │ │ │ ├── testPromptUtil.ts │ │ │ │ │ └── userQueryParser.tsx │ │ │ │ ├── toolCallingLoop.ts │ │ │ │ ├── unknownIntent.ts │ │ │ │ └── vscodeIntent.ts │ │ │ ├── test/ │ │ │ │ └── node/ │ │ │ │ ├── editCodeIntent.spec.ts │ │ │ │ ├── hookResultProcessor.spec.ts │ │ │ │ ├── toolCallingLoopAutopilot.spec.ts │ │ │ │ ├── toolCallingLoopHooks.spec.ts │ │ │ │ ├── toolCallingLoopUsage.spec.ts │ │ │ │ └── validateToolMessages.spec.ts │ │ │ └── vscode-node/ │ │ │ ├── fixTestFailureContributions.ts │ │ │ ├── newWorkspacePreviewFileSystemProvider.ts │ │ │ └── newWorkspaceTextDocumentProvider.ts │ │ ├── languageContextProvider/ │ │ │ └── vscode-node/ │ │ │ └── languageContextProviderService.ts │ │ ├── linkify/ │ │ │ ├── common/ │ │ │ │ ├── commands.ts │ │ │ │ ├── filePathLinkifier.ts │ │ │ │ ├── linkifiedText.ts │ │ │ │ ├── linkifier.ts │ │ │ │ ├── linkifyService.ts │ │ │ │ ├── modelFilePathLinkifier.ts │ │ │ │ ├── responseStreamWithLinkification.ts │ │ │ │ └── statCache.ts │ │ │ ├── test/ │ │ │ │ ├── node/ │ │ │ │ │ ├── filePathLinkifier.spec.ts │ │ │ │ │ ├── linkifier.spec.ts │ │ │ │ │ ├── modelFilePathLinkifier.spec.ts │ │ │ │ │ ├── statCaching.spec.ts │ │ │ │ │ └── util.ts │ │ │ │ └── vscode-node/ │ │ │ │ ├── findSymbol.test.ts │ │ │ │ ├── notebookCellLinkifier.spec.ts │ │ │ │ └── symbolLinkifier.test.ts │ │ │ └── vscode-node/ │ │ │ ├── commands.ts │ │ │ ├── findSymbol.ts │ │ │ ├── findWord.ts │ │ │ ├── inlineCodeSymbolLinkifier.ts │ │ │ ├── notebookCellLinkifier.ts │ │ │ └── symbolLinkifier.ts │ │ ├── log/ │ │ │ └── vscode-node/ │ │ │ ├── extensionStateCommand.ts │ │ │ ├── loggingActions.ts │ │ │ ├── requestLogTree.ts │ │ │ └── test/ │ │ │ └── sanitizer.spec.ts │ │ ├── mcp/ │ │ │ ├── test/ │ │ │ │ └── vscode-node/ │ │ │ │ ├── commands.spec.ts │ │ │ │ ├── fixtures/ │ │ │ │ │ ├── nuget/ │ │ │ │ │ │ ├── basetestpackage.dotnettool.1.0.0.nupkg │ │ │ │ │ │ ├── basetestpackage.mcpserver.0.1.0-beta.nupkg │ │ │ │ │ │ └── knapcode.samplemcpserver.0.6.0-beta.nupkg │ │ │ │ │ └── snapshots/ │ │ │ │ │ ├── docker-mcp-node-code-sandbox.json │ │ │ │ │ ├── dotnet-package-search-does-not-exist.json │ │ │ │ │ ├── dotnet-package-search-exists.json │ │ │ │ │ ├── npm-modelcontextprotocol-server-everything.json │ │ │ │ │ ├── nuget-readme.md │ │ │ │ │ ├── nuget-service-index.json │ │ │ │ │ └── pip-mcp-server-fetch.json │ │ │ │ ├── nuget.integration.spec.ts │ │ │ │ ├── nuget.mapping.spec.ts │ │ │ │ ├── nuget.stub.spec.ts │ │ │ │ └── util.ts │ │ │ └── vscode-node/ │ │ │ ├── commands.ts │ │ │ ├── mcpToolCallingLoop.tsx │ │ │ ├── mcpToolCallingLoopPrompt.tsx │ │ │ ├── mcpToolCallingTools.tsx │ │ │ ├── nuget.ts │ │ │ └── util.ts │ │ ├── notebook/ │ │ │ └── vscode-node/ │ │ │ └── followActions.ts │ │ ├── onboardDebug/ │ │ │ ├── common/ │ │ │ │ └── launchConfigService.ts │ │ │ ├── node/ │ │ │ │ ├── commandToConfigConverter.tsx │ │ │ │ ├── copilotDebugCommandSessionFactory.tsx │ │ │ │ ├── copilotDebugWorker/ │ │ │ │ │ ├── copilotDebugWorker.ps1 │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── open.ts │ │ │ │ │ ├── rpc.ts │ │ │ │ │ ├── shared.ts │ │ │ │ │ └── streamSplitter.ts │ │ │ │ ├── debuggableCommandIdentifier.ts │ │ │ │ ├── languageToolsProvider.tsx │ │ │ │ └── parseLaunchConfigFromResponse.ts │ │ │ ├── test/ │ │ │ │ └── node/ │ │ │ │ ├── debuggableCommandIdentifier.spec.ts │ │ │ │ └── parseLaunchConfigFromResponse.spec.ts │ │ │ ├── vscode/ │ │ │ │ └── launchConfigService.ts │ │ │ └── vscode-node/ │ │ │ ├── copilotDebugCommandContribution.ts │ │ │ ├── copilotDebugCommandHandle.ts │ │ │ ├── copilotDebugCommandSession.ts │ │ │ └── onboardTerminalTestsContribution.ts │ │ ├── otel/ │ │ │ └── vscode-node/ │ │ │ └── otelContrib.ts │ │ ├── power/ │ │ │ ├── common/ │ │ │ │ └── powerService.ts │ │ │ └── vscode-node/ │ │ │ ├── powerService.ts │ │ │ └── powerStateLogger.ts │ │ ├── prompt/ │ │ │ ├── common/ │ │ │ │ ├── chatVariablesCollection.ts │ │ │ │ ├── codeGuesser.ts │ │ │ │ ├── conversation.ts │ │ │ │ ├── fileTreeParser.ts │ │ │ │ ├── importStatement.ts │ │ │ │ ├── intents.ts │ │ │ │ ├── promptCategorizationTaxonomy.ts │ │ │ │ ├── repository.ts │ │ │ │ ├── specialRequestTypes.ts │ │ │ │ ├── streamingGrammar.ts │ │ │ │ └── toolCallRound.ts │ │ │ ├── node/ │ │ │ │ ├── chatMLFetcher.ts │ │ │ │ ├── chatMLFetcherTelemetry.ts │ │ │ │ ├── chatParticipantRequestHandler.ts │ │ │ │ ├── chatParticipantTelemetry.ts │ │ │ │ ├── codebaseToolCalling.ts │ │ │ │ ├── conversation.ts │ │ │ │ ├── defaultIntentRequestHandler.ts │ │ │ │ ├── definitionAroundCursor.tsx │ │ │ │ ├── devContainerConfigGenerator.ts │ │ │ │ ├── documentContext.ts │ │ │ │ ├── editFromDiffGeneration.ts │ │ │ │ ├── editGeneration.ts │ │ │ │ ├── executionSubagentToolCallingLoop.ts │ │ │ │ ├── feedbackGenerator.ts │ │ │ │ ├── feedbackReporter.ts │ │ │ │ ├── gitCommitMessageGenerator.ts │ │ │ │ ├── githubPullRequestTitleAndDescriptionGenerator.ts │ │ │ │ ├── indentationGuesser.ts │ │ │ │ ├── intentDetector.tsx │ │ │ │ ├── intentRegistry.ts │ │ │ │ ├── intents.ts │ │ │ │ ├── promptCategorizer.ts │ │ │ │ ├── promptVariablesService.ts │ │ │ │ ├── pseudoStartStopConversationCallback.ts │ │ │ │ ├── repoInfoTelemetry.ts │ │ │ │ ├── responseProcessorContext.ts │ │ │ │ ├── searchSubagentToolCallingLoop.ts │ │ │ │ ├── settingsEditorSearchResultsSelector.ts │ │ │ │ ├── streamingEdits.ts │ │ │ │ ├── summarizer.ts │ │ │ │ ├── telemetry.ts │ │ │ │ ├── test/ │ │ │ │ │ ├── __snapshots__/ │ │ │ │ │ │ └── defaultIntentRequestHandler.spec.ts.snap │ │ │ │ │ ├── chatMLFetcherResponseApiTelemetry.spec.ts │ │ │ │ │ ├── chatMLFetcherRetry.spec.ts │ │ │ │ │ ├── codeGuesser.spec.ts │ │ │ │ │ ├── defaultIntentRequestHandler.spec.ts │ │ │ │ │ ├── feedbackGenerator.spec.ts │ │ │ │ │ ├── indentationGuesser.spec.ts │ │ │ │ │ ├── positionOffsetTransformer.spec.ts │ │ │ │ │ ├── repoInfoTelemetry.spec.ts │ │ │ │ │ ├── streamingEdits.spec.ts │ │ │ │ │ └── testFiles.spec.ts │ │ │ │ ├── test2Impl.tsx │ │ │ │ ├── testExample.tsx │ │ │ │ ├── testFiles.ts │ │ │ │ ├── title.ts │ │ │ │ └── todoListContextProvider.ts │ │ │ ├── test/ │ │ │ │ ├── common/ │ │ │ │ │ ├── fileTreeParser.spec.ts │ │ │ │ │ └── streamingGrammar.spec.ts │ │ │ │ └── node/ │ │ │ │ └── conversation.spec.ts │ │ │ └── vscode-node/ │ │ │ ├── debugCommands.ts │ │ │ ├── devContainerConfigurationServiceImpl.ts │ │ │ ├── endpointProviderImpl.ts │ │ │ ├── gitCommitMessageServiceImpl.ts │ │ │ ├── gitDiffService.ts │ │ │ ├── promptVariablesService.ts │ │ │ ├── renameSuggestions.ts │ │ │ ├── requestLoggerImpl.ts │ │ │ ├── requestLoggerToolResult.tsx │ │ │ ├── scenarioAutomationEndpointProviderImpl.ts │ │ │ ├── settingsEditorSearchServiceImpl.ts │ │ │ ├── test/ │ │ │ │ ├── gitDiffService.spec.ts │ │ │ │ └── promptVariablesService.spec.ts │ │ │ └── workspaceEditRecorder.ts │ │ ├── promptFileContext/ │ │ │ └── vscode-node/ │ │ │ └── promptFileContextService.ts │ │ ├── prompts/ │ │ │ ├── common/ │ │ │ │ └── chatDiskSessionResources.ts │ │ │ └── node/ │ │ │ ├── agent/ │ │ │ │ ├── agentConversationHistory.tsx │ │ │ │ ├── agentPrompt.tsx │ │ │ │ ├── allAgentPrompts.ts │ │ │ │ ├── anthropicPrompts.tsx │ │ │ │ ├── backgroundSummarizer.ts │ │ │ │ ├── copilotCLIPrompt.tsx │ │ │ │ ├── defaultAgentInstructions.tsx │ │ │ │ ├── executionSubagentPrompt.tsx │ │ │ │ ├── fileLinkificationInstructions.tsx │ │ │ │ ├── geminiPrompts.tsx │ │ │ │ ├── minimaxPrompts.tsx │ │ │ │ ├── openai/ │ │ │ │ │ ├── defaultOpenAIPrompt.tsx │ │ │ │ │ ├── gpt51CodexPrompt.tsx │ │ │ │ │ ├── gpt51Prompt.tsx │ │ │ │ │ ├── gpt52Prompt.tsx │ │ │ │ │ ├── gpt53CodexPrompt.tsx │ │ │ │ │ ├── gpt54Prompt.tsx │ │ │ │ │ ├── gpt5CodexPrompt.tsx │ │ │ │ │ └── gpt5Prompt.tsx │ │ │ │ ├── promptRegistry.ts │ │ │ │ ├── searchSubagentPrompt.tsx │ │ │ │ ├── simpleSummarizedHistoryPrompt.tsx │ │ │ │ ├── summarizedConversationHistory.tsx │ │ │ │ ├── test/ │ │ │ │ │ ├── __snapshots__/ │ │ │ │ │ │ ├── agentPrompts-arctic-fox/ │ │ │ │ │ │ │ ├── agentPrompts-all_non_edit_tools-arctic-fox.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-all_tools-arctic-fox.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-cache_BPs-arctic-fox.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-cache_BPs_multi_round-arctic-fox.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-custom_instructions_not_in_system_message-arctic-fox.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-edited_file_events_grouped_by_kind-arctic-fox.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-omit_base_agent_instructions-arctic-fox.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-one_attachment-arctic-fox.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-simple_case-arctic-fox.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-tool_use-arctic-fox.spec.snap │ │ │ │ │ │ │ ├── all_non_edit_tools-arctic-fox.spec.snap │ │ │ │ │ │ │ ├── all_non_edit_tools.spec.snap │ │ │ │ │ │ │ ├── all_tools-arctic-fox.spec.snap │ │ │ │ │ │ │ ├── all_tools.spec.snap │ │ │ │ │ │ │ ├── cache_BPs-arctic-fox.spec.snap │ │ │ │ │ │ │ ├── cache_BPs.spec.snap │ │ │ │ │ │ │ ├── cache_BPs_multi_round-arctic-fox.spec.snap │ │ │ │ │ │ │ ├── cache_BPs_multi_round.spec.snap │ │ │ │ │ │ │ ├── custom_instructions_not_in_system_message-arctic-fox.spec.snap │ │ │ │ │ │ │ ├── custom_instructions_not_in_system_message.spec.snap │ │ │ │ │ │ │ ├── edited_file_events_grouped_by_kind-arctic-fox.spec.snap │ │ │ │ │ │ │ ├── edited_file_events_grouped_by_kind.spec.snap │ │ │ │ │ │ │ ├── omit_base_agent_instructions-arctic-fox.spec.snap │ │ │ │ │ │ │ ├── omit_base_agent_instructions.spec.snap │ │ │ │ │ │ │ ├── one_attachment-arctic-fox.spec.snap │ │ │ │ │ │ │ ├── one_attachment.spec.snap │ │ │ │ │ │ │ ├── simple_case-arctic-fox.spec.snap │ │ │ │ │ │ │ ├── simple_case.spec.snap │ │ │ │ │ │ │ ├── tool_use-arctic-fox.spec.snap │ │ │ │ │ │ │ └── tool_use.spec.snap │ │ │ │ │ │ ├── agentPrompts-claude-haiku-4.5/ │ │ │ │ │ │ │ ├── all_non_edit_tools.spec.snap │ │ │ │ │ │ │ ├── all_tools.spec.snap │ │ │ │ │ │ │ ├── cache_BPs.spec.snap │ │ │ │ │ │ │ ├── cache_BPs_multi_round.spec.snap │ │ │ │ │ │ │ ├── custom_instructions_not_in_system_message.spec.snap │ │ │ │ │ │ │ ├── edited_file_events_grouped_by_kind.spec.snap │ │ │ │ │ │ │ ├── omit_base_agent_instructions.spec.snap │ │ │ │ │ │ │ ├── one_attachment.spec.snap │ │ │ │ │ │ │ ├── simple_case.spec.snap │ │ │ │ │ │ │ └── tool_use.spec.snap │ │ │ │ │ │ ├── agentPrompts-claude-opus-4.5/ │ │ │ │ │ │ │ ├── agentPrompts-all_non_edit_tools-claude-opus-4.5.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-all_tools-claude-opus-4.5.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-cache_BPs-claude-opus-4.5.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-cache_BPs_multi_round-claude-opus-4.5.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-custom_instructions_not_in_system_message-claude-opus-4.5.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-edited_file_events_grouped_by_kind-claude-opus-4.5.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-omit_base_agent_instructions-claude-opus-4.5.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-one_attachment-claude-opus-4.5.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-simple_case-claude-opus-4.5.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-tool_use-claude-opus-4.5.spec.snap │ │ │ │ │ │ │ ├── all_non_edit_tools-claude-opus-4.5.spec.snap │ │ │ │ │ │ │ ├── all_non_edit_tools.spec.snap │ │ │ │ │ │ │ ├── all_tools-claude-opus-4.5.spec.snap │ │ │ │ │ │ │ ├── all_tools.spec.snap │ │ │ │ │ │ │ ├── cache_BPs-claude-opus-4.5.spec.snap │ │ │ │ │ │ │ ├── cache_BPs.spec.snap │ │ │ │ │ │ │ ├── cache_BPs_multi_round-claude-opus-4.5.spec.snap │ │ │ │ │ │ │ ├── cache_BPs_multi_round.spec.snap │ │ │ │ │ │ │ ├── custom_instructions_not_in_system_message-claude-opus-4.5.spec.snap │ │ │ │ │ │ │ ├── custom_instructions_not_in_system_message.spec.snap │ │ │ │ │ │ │ ├── edited_file_events_grouped_by_kind-claude-opus-4.5.spec.snap │ │ │ │ │ │ │ ├── edited_file_events_grouped_by_kind.spec.snap │ │ │ │ │ │ │ ├── omit_base_agent_instructions-claude-opus-4.5.spec.snap │ │ │ │ │ │ │ ├── omit_base_agent_instructions.spec.snap │ │ │ │ │ │ │ ├── one_attachment-claude-opus-4.5.spec.snap │ │ │ │ │ │ │ ├── one_attachment.spec.snap │ │ │ │ │ │ │ ├── simple_case-claude-opus-4.5.spec.snap │ │ │ │ │ │ │ ├── simple_case.spec.snap │ │ │ │ │ │ │ ├── tool_use-claude-opus-4.5.spec.snap │ │ │ │ │ │ │ └── tool_use.spec.snap │ │ │ │ │ │ ├── agentPrompts-claude-opus-4.6/ │ │ │ │ │ │ │ ├── all_non_edit_tools.spec.snap │ │ │ │ │ │ │ ├── all_tools.spec.snap │ │ │ │ │ │ │ ├── cache_BPs.spec.snap │ │ │ │ │ │ │ ├── cache_BPs_multi_round.spec.snap │ │ │ │ │ │ │ ├── custom_instructions_not_in_system_message.spec.snap │ │ │ │ │ │ │ ├── edited_file_events_grouped_by_kind.spec.snap │ │ │ │ │ │ │ ├── omit_base_agent_instructions.spec.snap │ │ │ │ │ │ │ ├── one_attachment.spec.snap │ │ │ │ │ │ │ ├── simple_case.spec.snap │ │ │ │ │ │ │ └── tool_use.spec.snap │ │ │ │ │ │ ├── agentPrompts-claude-opus-4.6-fast/ │ │ │ │ │ │ │ ├── all_non_edit_tools.spec.snap │ │ │ │ │ │ │ ├── all_tools.spec.snap │ │ │ │ │ │ │ ├── cache_BPs.spec.snap │ │ │ │ │ │ │ ├── cache_BPs_multi_round.spec.snap │ │ │ │ │ │ │ ├── custom_instructions_not_in_system_message.spec.snap │ │ │ │ │ │ │ ├── edited_file_events_grouped_by_kind.spec.snap │ │ │ │ │ │ │ ├── omit_base_agent_instructions.spec.snap │ │ │ │ │ │ │ ├── one_attachment.spec.snap │ │ │ │ │ │ │ ├── simple_case.spec.snap │ │ │ │ │ │ │ └── tool_use.spec.snap │ │ │ │ │ │ ├── agentPrompts-claude-sonnet-4.5/ │ │ │ │ │ │ │ ├── agentPrompts-all_non_edit_tools-claude-sonnet-4.5.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-all_tools-claude-sonnet-4.5.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-cache_BPs-claude-sonnet-4.5.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-cache_BPs_multi_round-claude-sonnet-4.5.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-custom_instructions_not_in_system_message-claude-sonnet-4.5.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-edited_file_events_grouped_by_kind-claude-sonnet-4.5.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-omit_base_agent_instructions-claude-sonnet-4.5.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-one_attachment-claude-sonnet-4.5.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-simple_case-claude-sonnet-4.5.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-tool_use-claude-sonnet-4.5.spec.snap │ │ │ │ │ │ │ ├── all_non_edit_tools-claude-sonnet-4.5.spec.snap │ │ │ │ │ │ │ ├── all_non_edit_tools.spec.snap │ │ │ │ │ │ │ ├── all_tools-claude-sonnet-4.5.spec.snap │ │ │ │ │ │ │ ├── all_tools.spec.snap │ │ │ │ │ │ │ ├── cache_BPs-claude-sonnet-4.5.spec.snap │ │ │ │ │ │ │ ├── cache_BPs.spec.snap │ │ │ │ │ │ │ ├── cache_BPs_multi_round-claude-sonnet-4.5.spec.snap │ │ │ │ │ │ │ ├── cache_BPs_multi_round.spec.snap │ │ │ │ │ │ │ ├── custom_instructions_not_in_system_message-claude-sonnet-4.5.spec.snap │ │ │ │ │ │ │ ├── custom_instructions_not_in_system_message.spec.snap │ │ │ │ │ │ │ ├── edited_file_events_grouped_by_kind-claude-sonnet-4.5.spec.snap │ │ │ │ │ │ │ ├── edited_file_events_grouped_by_kind.spec.snap │ │ │ │ │ │ │ ├── omit_base_agent_instructions-claude-sonnet-4.5.spec.snap │ │ │ │ │ │ │ ├── omit_base_agent_instructions.spec.snap │ │ │ │ │ │ │ ├── one_attachment-claude-sonnet-4.5.spec.snap │ │ │ │ │ │ │ ├── one_attachment.spec.snap │ │ │ │ │ │ │ ├── simple_case-claude-sonnet-4.5.spec.snap │ │ │ │ │ │ │ ├── simple_case.spec.snap │ │ │ │ │ │ │ ├── tool_use-claude-sonnet-4.5.spec.snap │ │ │ │ │ │ │ └── tool_use.spec.snap │ │ │ │ │ │ ├── agentPrompts-default/ │ │ │ │ │ │ │ ├── agentPrompts-all_non_edit_tools-default.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-all_tools-default.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-cache_BPs-default.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-cache_BPs_multi_round-default.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-custom_instructions_not_in_system_message-default.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-edited_file_events_grouped_by_kind-default.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-omit_base_agent_instructions-default.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-one_attachment-default.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-simple_case-default.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-tool_use-default.spec.snap │ │ │ │ │ │ │ ├── all_non_edit_tools-default.spec.snap │ │ │ │ │ │ │ ├── all_non_edit_tools.spec.snap │ │ │ │ │ │ │ ├── all_tools-default.spec.snap │ │ │ │ │ │ │ ├── all_tools.spec.snap │ │ │ │ │ │ │ ├── cache_BPs-default.spec.snap │ │ │ │ │ │ │ ├── cache_BPs.spec.snap │ │ │ │ │ │ │ ├── cache_BPs_multi_round-default.spec.snap │ │ │ │ │ │ │ ├── cache_BPs_multi_round.spec.snap │ │ │ │ │ │ │ ├── custom_instructions_not_in_system_message-default.spec.snap │ │ │ │ │ │ │ ├── custom_instructions_not_in_system_message.spec.snap │ │ │ │ │ │ │ ├── edited_file_events_grouped_by_kind-default.spec.snap │ │ │ │ │ │ │ ├── edited_file_events_grouped_by_kind.spec.snap │ │ │ │ │ │ │ ├── omit_base_agent_instructions-default.spec.snap │ │ │ │ │ │ │ ├── omit_base_agent_instructions.spec.snap │ │ │ │ │ │ │ ├── one_attachment-default.spec.snap │ │ │ │ │ │ │ ├── one_attachment.spec.snap │ │ │ │ │ │ │ ├── simple_case-default.spec.snap │ │ │ │ │ │ │ ├── simple_case.spec.snap │ │ │ │ │ │ │ ├── tool_use-default.spec.snap │ │ │ │ │ │ │ └── tool_use.spec.snap │ │ │ │ │ │ ├── agentPrompts-gemini-2.0-flash/ │ │ │ │ │ │ │ ├── agentPrompts-all_non_edit_tools-gemini-2.0-flash.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-all_tools-gemini-2.0-flash.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-cache_BPs-gemini-2.0-flash.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-cache_BPs_multi_round-gemini-2.0-flash.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-custom_instructions_not_in_system_message-gemini-2.0-flash.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-edited_file_events_grouped_by_kind-gemini-2.0-flash.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-omit_base_agent_instructions-gemini-2.0-flash.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-one_attachment-gemini-2.0-flash.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-simple_case-gemini-2.0-flash.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-tool_use-gemini-2.0-flash.spec.snap │ │ │ │ │ │ │ ├── all_non_edit_tools-gemini-2.0-flash.spec.snap │ │ │ │ │ │ │ ├── all_non_edit_tools.spec.snap │ │ │ │ │ │ │ ├── all_tools-gemini-2.0-flash.spec.snap │ │ │ │ │ │ │ ├── all_tools.spec.snap │ │ │ │ │ │ │ ├── cache_BPs-gemini-2.0-flash.spec.snap │ │ │ │ │ │ │ ├── cache_BPs.spec.snap │ │ │ │ │ │ │ ├── cache_BPs_multi_round-gemini-2.0-flash.spec.snap │ │ │ │ │ │ │ ├── cache_BPs_multi_round.spec.snap │ │ │ │ │ │ │ ├── custom_instructions_not_in_system_message-gemini-2.0-flash.spec.snap │ │ │ │ │ │ │ ├── custom_instructions_not_in_system_message.spec.snap │ │ │ │ │ │ │ ├── edited_file_events_grouped_by_kind-gemini-2.0-flash.spec.snap │ │ │ │ │ │ │ ├── edited_file_events_grouped_by_kind.spec.snap │ │ │ │ │ │ │ ├── omit_base_agent_instructions-gemini-2.0-flash.spec.snap │ │ │ │ │ │ │ ├── omit_base_agent_instructions.spec.snap │ │ │ │ │ │ │ ├── one_attachment-gemini-2.0-flash.spec.snap │ │ │ │ │ │ │ ├── one_attachment.spec.snap │ │ │ │ │ │ │ ├── simple_case-gemini-2.0-flash.spec.snap │ │ │ │ │ │ │ ├── simple_case.spec.snap │ │ │ │ │ │ │ ├── tool_use-gemini-2.0-flash.spec.snap │ │ │ │ │ │ │ └── tool_use.spec.snap │ │ │ │ │ │ ├── agentPrompts-gpt-4.1/ │ │ │ │ │ │ │ ├── agentPrompts-all_non_edit_tools-gpt-4.1.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-all_tools-gpt-4.1.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-cache_BPs-gpt-4.1.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-cache_BPs_multi_round-gpt-4.1.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-custom_instructions_not_in_system_message-gpt-4.1.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-edited_file_events_grouped_by_kind-gpt-4.1.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-omit_base_agent_instructions-gpt-4.1.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-one_attachment-gpt-4.1.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-simple_case-gpt-4.1.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-tool_use-gpt-4.1.spec.snap │ │ │ │ │ │ │ ├── all_non_edit_tools-gpt-4.1.spec.snap │ │ │ │ │ │ │ ├── all_non_edit_tools.spec.snap │ │ │ │ │ │ │ ├── all_tools-gpt-4.1.spec.snap │ │ │ │ │ │ │ ├── all_tools.spec.snap │ │ │ │ │ │ │ ├── cache_BPs-gpt-4.1.spec.snap │ │ │ │ │ │ │ ├── cache_BPs.spec.snap │ │ │ │ │ │ │ ├── cache_BPs_multi_round-gpt-4.1.spec.snap │ │ │ │ │ │ │ ├── cache_BPs_multi_round.spec.snap │ │ │ │ │ │ │ ├── custom_instructions_not_in_system_message-gpt-4.1.spec.snap │ │ │ │ │ │ │ ├── custom_instructions_not_in_system_message.spec.snap │ │ │ │ │ │ │ ├── edited_file_events_grouped_by_kind-gpt-4.1.spec.snap │ │ │ │ │ │ │ ├── edited_file_events_grouped_by_kind.spec.snap │ │ │ │ │ │ │ ├── omit_base_agent_instructions-gpt-4.1.spec.snap │ │ │ │ │ │ │ ├── omit_base_agent_instructions.spec.snap │ │ │ │ │ │ │ ├── one_attachment-gpt-4.1.spec.snap │ │ │ │ │ │ │ ├── one_attachment.spec.snap │ │ │ │ │ │ │ ├── simple_case-gpt-4.1.spec.snap │ │ │ │ │ │ │ ├── simple_case.spec.snap │ │ │ │ │ │ │ ├── tool_use-gpt-4.1.spec.snap │ │ │ │ │ │ │ └── tool_use.spec.snap │ │ │ │ │ │ ├── agentPrompts-gpt-5/ │ │ │ │ │ │ │ ├── agentPrompts-all_non_edit_tools-gpt-5.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-all_tools-gpt-5.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-cache_BPs-gpt-5.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-cache_BPs_multi_round-gpt-5.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-custom_instructions_not_in_system_message-gpt-5.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-edited_file_events_grouped_by_kind-gpt-5.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-omit_base_agent_instructions-gpt-5.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-one_attachment-gpt-5.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-simple_case-gpt-5.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-tool_use-gpt-5.spec.snap │ │ │ │ │ │ │ ├── all_non_edit_tools-gpt-5.spec.snap │ │ │ │ │ │ │ ├── all_non_edit_tools.spec.snap │ │ │ │ │ │ │ ├── all_tools-gpt-5.spec.snap │ │ │ │ │ │ │ ├── all_tools.spec.snap │ │ │ │ │ │ │ ├── cache_BPs-gpt-5.spec.snap │ │ │ │ │ │ │ ├── cache_BPs.spec.snap │ │ │ │ │ │ │ ├── cache_BPs_multi_round-gpt-5.spec.snap │ │ │ │ │ │ │ ├── cache_BPs_multi_round.spec.snap │ │ │ │ │ │ │ ├── custom_instructions_not_in_system_message-gpt-5.spec.snap │ │ │ │ │ │ │ ├── custom_instructions_not_in_system_message.spec.snap │ │ │ │ │ │ │ ├── edited_file_events_grouped_by_kind-gpt-5.spec.snap │ │ │ │ │ │ │ ├── edited_file_events_grouped_by_kind.spec.snap │ │ │ │ │ │ │ ├── omit_base_agent_instructions-gpt-5.spec.snap │ │ │ │ │ │ │ ├── omit_base_agent_instructions.spec.snap │ │ │ │ │ │ │ ├── one_attachment-gpt-5.spec.snap │ │ │ │ │ │ │ ├── one_attachment.spec.snap │ │ │ │ │ │ │ ├── simple_case-gpt-5.spec.snap │ │ │ │ │ │ │ ├── simple_case.spec.snap │ │ │ │ │ │ │ ├── tool_use-gpt-5.spec.snap │ │ │ │ │ │ │ └── tool_use.spec.snap │ │ │ │ │ │ ├── agentPrompts-gpt-5-codex/ │ │ │ │ │ │ │ ├── agentPrompts-all_non_edit_tools-gpt-5-codex.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-all_tools-gpt-5-codex.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-cache_BPs-gpt-5-codex.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-cache_BPs_multi_round-gpt-5-codex.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-custom_instructions_not_in_system_message-gpt-5-codex.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-edited_file_events_grouped_by_kind-gpt-5-codex.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-omit_base_agent_instructions-gpt-5-codex.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-one_attachment-gpt-5-codex.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-simple_case-gpt-5-codex.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-tool_use-gpt-5-codex.spec.snap │ │ │ │ │ │ │ ├── all_non_edit_tools-gpt-5-codex.spec.snap │ │ │ │ │ │ │ ├── all_non_edit_tools.spec.snap │ │ │ │ │ │ │ ├── all_tools-gpt-5-codex.spec.snap │ │ │ │ │ │ │ ├── all_tools.spec.snap │ │ │ │ │ │ │ ├── cache_BPs-gpt-5-codex.spec.snap │ │ │ │ │ │ │ ├── cache_BPs.spec.snap │ │ │ │ │ │ │ ├── cache_BPs_multi_round-gpt-5-codex.spec.snap │ │ │ │ │ │ │ ├── cache_BPs_multi_round.spec.snap │ │ │ │ │ │ │ ├── custom_instructions_not_in_system_message-gpt-5-codex.spec.snap │ │ │ │ │ │ │ ├── custom_instructions_not_in_system_message.spec.snap │ │ │ │ │ │ │ ├── edited_file_events_grouped_by_kind-gpt-5-codex.spec.snap │ │ │ │ │ │ │ ├── edited_file_events_grouped_by_kind.spec.snap │ │ │ │ │ │ │ ├── omit_base_agent_instructions-gpt-5-codex.spec.snap │ │ │ │ │ │ │ ├── omit_base_agent_instructions.spec.snap │ │ │ │ │ │ │ ├── one_attachment-gpt-5-codex.spec.snap │ │ │ │ │ │ │ ├── one_attachment.spec.snap │ │ │ │ │ │ │ ├── simple_case-gpt-5-codex.spec.snap │ │ │ │ │ │ │ ├── simple_case.spec.snap │ │ │ │ │ │ │ ├── tool_use-gpt-5-codex.spec.snap │ │ │ │ │ │ │ └── tool_use.spec.snap │ │ │ │ │ │ ├── agentPrompts-gpt-5-mini/ │ │ │ │ │ │ │ ├── agentPrompts-all_non_edit_tools-gpt-5-mini.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-all_tools-gpt-5-mini.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-cache_BPs-gpt-5-mini.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-cache_BPs_multi_round-gpt-5-mini.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-custom_instructions_not_in_system_message-gpt-5-mini.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-edited_file_events_grouped_by_kind-gpt-5-mini.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-omit_base_agent_instructions-gpt-5-mini.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-one_attachment-gpt-5-mini.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-simple_case-gpt-5-mini.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-tool_use-gpt-5-mini.spec.snap │ │ │ │ │ │ │ ├── all_non_edit_tools-gpt-5-mini.spec.snap │ │ │ │ │ │ │ ├── all_non_edit_tools.spec.snap │ │ │ │ │ │ │ ├── all_tools-gpt-5-mini.spec.snap │ │ │ │ │ │ │ ├── all_tools.spec.snap │ │ │ │ │ │ │ ├── cache_BPs-gpt-5-mini.spec.snap │ │ │ │ │ │ │ ├── cache_BPs.spec.snap │ │ │ │ │ │ │ ├── cache_BPs_multi_round-gpt-5-mini.spec.snap │ │ │ │ │ │ │ ├── cache_BPs_multi_round.spec.snap │ │ │ │ │ │ │ ├── custom_instructions_not_in_system_message-gpt-5-mini.spec.snap │ │ │ │ │ │ │ ├── custom_instructions_not_in_system_message.spec.snap │ │ │ │ │ │ │ ├── edited_file_events_grouped_by_kind-gpt-5-mini.spec.snap │ │ │ │ │ │ │ ├── edited_file_events_grouped_by_kind.spec.snap │ │ │ │ │ │ │ ├── omit_base_agent_instructions-gpt-5-mini.spec.snap │ │ │ │ │ │ │ ├── omit_base_agent_instructions.spec.snap │ │ │ │ │ │ │ ├── one_attachment-gpt-5-mini.spec.snap │ │ │ │ │ │ │ ├── one_attachment.spec.snap │ │ │ │ │ │ │ ├── simple_case-gpt-5-mini.spec.snap │ │ │ │ │ │ │ ├── simple_case.spec.snap │ │ │ │ │ │ │ ├── tool_use-gpt-5-mini.spec.snap │ │ │ │ │ │ │ └── tool_use.spec.snap │ │ │ │ │ │ ├── agentPrompts-gpt-5.1/ │ │ │ │ │ │ │ ├── agentPrompts-all_non_edit_tools-gpt-5.1.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-all_tools-gpt-5.1.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-cache_BPs-gpt-5.1.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-cache_BPs_multi_round-gpt-5.1.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-custom_instructions_not_in_system_message-gpt-5.1.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-edited_file_events_grouped_by_kind-gpt-5.1.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-omit_base_agent_instructions-gpt-5.1.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-one_attachment-gpt-5.1.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-simple_case-gpt-5.1.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-tool_use-gpt-5.1.spec.snap │ │ │ │ │ │ │ ├── all_non_edit_tools-gpt-5.1.spec.snap │ │ │ │ │ │ │ ├── all_non_edit_tools.spec.snap │ │ │ │ │ │ │ ├── all_tools-gpt-5.1.spec.snap │ │ │ │ │ │ │ ├── all_tools.spec.snap │ │ │ │ │ │ │ ├── cache_BPs-gpt-5.1.spec.snap │ │ │ │ │ │ │ ├── cache_BPs.spec.snap │ │ │ │ │ │ │ ├── cache_BPs_multi_round-gpt-5.1.spec.snap │ │ │ │ │ │ │ ├── cache_BPs_multi_round.spec.snap │ │ │ │ │ │ │ ├── custom_instructions_not_in_system_message-gpt-5.1.spec.snap │ │ │ │ │ │ │ ├── custom_instructions_not_in_system_message.spec.snap │ │ │ │ │ │ │ ├── edited_file_events_grouped_by_kind-gpt-5.1.spec.snap │ │ │ │ │ │ │ ├── edited_file_events_grouped_by_kind.spec.snap │ │ │ │ │ │ │ ├── omit_base_agent_instructions-gpt-5.1.spec.snap │ │ │ │ │ │ │ ├── omit_base_agent_instructions.spec.snap │ │ │ │ │ │ │ ├── one_attachment-gpt-5.1.spec.snap │ │ │ │ │ │ │ ├── one_attachment.spec.snap │ │ │ │ │ │ │ ├── simple_case-gpt-5.1.spec.snap │ │ │ │ │ │ │ ├── simple_case.spec.snap │ │ │ │ │ │ │ ├── tool_use-gpt-5.1.spec.snap │ │ │ │ │ │ │ └── tool_use.spec.snap │ │ │ │ │ │ ├── agentPrompts-gpt-5.1-codex/ │ │ │ │ │ │ │ ├── agentPrompts-all_non_edit_tools-gpt-5.1-codex.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-all_tools-gpt-5.1-codex.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-cache_BPs-gpt-5.1-codex.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-cache_BPs_multi_round-gpt-5.1-codex.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-custom_instructions_not_in_system_message-gpt-5.1-codex.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-edited_file_events_grouped_by_kind-gpt-5.1-codex.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-omit_base_agent_instructions-gpt-5.1-codex.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-one_attachment-gpt-5.1-codex.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-simple_case-gpt-5.1-codex.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-tool_use-gpt-5.1-codex.spec.snap │ │ │ │ │ │ │ ├── all_non_edit_tools-gpt-5.1-codex.spec.snap │ │ │ │ │ │ │ ├── all_non_edit_tools.spec.snap │ │ │ │ │ │ │ ├── all_tools-gpt-5.1-codex.spec.snap │ │ │ │ │ │ │ ├── all_tools.spec.snap │ │ │ │ │ │ │ ├── cache_BPs-gpt-5.1-codex.spec.snap │ │ │ │ │ │ │ ├── cache_BPs.spec.snap │ │ │ │ │ │ │ ├── cache_BPs_multi_round-gpt-5.1-codex.spec.snap │ │ │ │ │ │ │ ├── cache_BPs_multi_round.spec.snap │ │ │ │ │ │ │ ├── custom_instructions_not_in_system_message-gpt-5.1-codex.spec.snap │ │ │ │ │ │ │ ├── custom_instructions_not_in_system_message.spec.snap │ │ │ │ │ │ │ ├── edited_file_events_grouped_by_kind-gpt-5.1-codex.spec.snap │ │ │ │ │ │ │ ├── edited_file_events_grouped_by_kind.spec.snap │ │ │ │ │ │ │ ├── omit_base_agent_instructions-gpt-5.1-codex.spec.snap │ │ │ │ │ │ │ ├── omit_base_agent_instructions.spec.snap │ │ │ │ │ │ │ ├── one_attachment-gpt-5.1-codex.spec.snap │ │ │ │ │ │ │ ├── one_attachment.spec.snap │ │ │ │ │ │ │ ├── simple_case-gpt-5.1-codex.spec.snap │ │ │ │ │ │ │ ├── simple_case.spec.snap │ │ │ │ │ │ │ ├── tool_use-gpt-5.1-codex.spec.snap │ │ │ │ │ │ │ └── tool_use.spec.snap │ │ │ │ │ │ ├── agentPrompts-gpt-5.1-codex-mini/ │ │ │ │ │ │ │ ├── agentPrompts-all_non_edit_tools-gpt-5.1-codex-mini.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-all_tools-gpt-5.1-codex-mini.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-cache_BPs-gpt-5.1-codex-mini.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-cache_BPs_multi_round-gpt-5.1-codex-mini.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-custom_instructions_not_in_system_message-gpt-5.1-codex-mini.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-edited_file_events_grouped_by_kind-gpt-5.1-codex-mini.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-omit_base_agent_instructions-gpt-5.1-codex-mini.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-one_attachment-gpt-5.1-codex-mini.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-simple_case-gpt-5.1-codex-mini.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-tool_use-gpt-5.1-codex-mini.spec.snap │ │ │ │ │ │ │ ├── all_non_edit_tools-gpt-5.1-codex-mini.spec.snap │ │ │ │ │ │ │ ├── all_non_edit_tools.spec.snap │ │ │ │ │ │ │ ├── all_tools-gpt-5.1-codex-mini.spec.snap │ │ │ │ │ │ │ ├── all_tools.spec.snap │ │ │ │ │ │ │ ├── cache_BPs-gpt-5.1-codex-mini.spec.snap │ │ │ │ │ │ │ ├── cache_BPs.spec.snap │ │ │ │ │ │ │ ├── cache_BPs_multi_round-gpt-5.1-codex-mini.spec.snap │ │ │ │ │ │ │ ├── cache_BPs_multi_round.spec.snap │ │ │ │ │ │ │ ├── custom_instructions_not_in_system_message-gpt-5.1-codex-mini.spec.snap │ │ │ │ │ │ │ ├── custom_instructions_not_in_system_message.spec.snap │ │ │ │ │ │ │ ├── edited_file_events_grouped_by_kind-gpt-5.1-codex-mini.spec.snap │ │ │ │ │ │ │ ├── edited_file_events_grouped_by_kind.spec.snap │ │ │ │ │ │ │ ├── omit_base_agent_instructions-gpt-5.1-codex-mini.spec.snap │ │ │ │ │ │ │ ├── omit_base_agent_instructions.spec.snap │ │ │ │ │ │ │ ├── one_attachment-gpt-5.1-codex-mini.spec.snap │ │ │ │ │ │ │ ├── one_attachment.spec.snap │ │ │ │ │ │ │ ├── simple_case-gpt-5.1-codex-mini.spec.snap │ │ │ │ │ │ │ ├── simple_case.spec.snap │ │ │ │ │ │ │ ├── tool_use-gpt-5.1-codex-mini.spec.snap │ │ │ │ │ │ │ └── tool_use.spec.snap │ │ │ │ │ │ ├── agentPrompts-grok-code-fast-1/ │ │ │ │ │ │ │ ├── agentPrompts-all_non_edit_tools-grok-code-fast-1.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-all_tools-grok-code-fast-1.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-cache_BPs-grok-code-fast-1.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-cache_BPs_multi_round-grok-code-fast-1.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-custom_instructions_not_in_system_message-grok-code-fast-1.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-edited_file_events_grouped_by_kind-grok-code-fast-1.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-omit_base_agent_instructions-grok-code-fast-1.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-one_attachment-grok-code-fast-1.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-simple_case-grok-code-fast-1.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-tool_use-grok-code-fast-1.spec.snap │ │ │ │ │ │ │ ├── all_non_edit_tools-grok-code-fast-1.spec.snap │ │ │ │ │ │ │ ├── all_non_edit_tools.spec.snap │ │ │ │ │ │ │ ├── all_tools-grok-code-fast-1.spec.snap │ │ │ │ │ │ │ ├── all_tools.spec.snap │ │ │ │ │ │ │ ├── cache_BPs-grok-code-fast-1.spec.snap │ │ │ │ │ │ │ ├── cache_BPs.spec.snap │ │ │ │ │ │ │ ├── cache_BPs_multi_round-grok-code-fast-1.spec.snap │ │ │ │ │ │ │ ├── cache_BPs_multi_round.spec.snap │ │ │ │ │ │ │ ├── custom_instructions_not_in_system_message-grok-code-fast-1.spec.snap │ │ │ │ │ │ │ ├── custom_instructions_not_in_system_message.spec.snap │ │ │ │ │ │ │ ├── edited_file_events_grouped_by_kind-grok-code-fast-1.spec.snap │ │ │ │ │ │ │ ├── edited_file_events_grouped_by_kind.spec.snap │ │ │ │ │ │ │ ├── omit_base_agent_instructions-grok-code-fast-1.spec.snap │ │ │ │ │ │ │ ├── omit_base_agent_instructions.spec.snap │ │ │ │ │ │ │ ├── one_attachment-grok-code-fast-1.spec.snap │ │ │ │ │ │ │ ├── one_attachment.spec.snap │ │ │ │ │ │ │ ├── simple_case-grok-code-fast-1.spec.snap │ │ │ │ │ │ │ ├── simple_case.spec.snap │ │ │ │ │ │ │ ├── tool_use-grok-code-fast-1.spec.snap │ │ │ │ │ │ │ └── tool_use.spec.snap │ │ │ │ │ │ ├── arctic-fox/ │ │ │ │ │ │ │ ├── agentPrompts-all_non_edit_tools-arctic-fox.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-all_tools-arctic-fox.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-cache_BPs-arctic-fox.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-cache_BPs_multi_round-arctic-fox.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-custom_instructions_not_in_system_message-arctic-fox.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-edited_file_events_grouped_by_kind-arctic-fox.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-omit_base_agent_instructions-arctic-fox.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-one_attachment-arctic-fox.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-simple_case-arctic-fox.spec.snap │ │ │ │ │ │ │ └── agentPrompts-tool_use-arctic-fox.spec.snap │ │ │ │ │ │ ├── claude-opus-4.5/ │ │ │ │ │ │ │ ├── agentPrompts-all_non_edit_tools-claude-opus-4.5.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-all_tools-claude-opus-4.5.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-cache_BPs-claude-opus-4.5.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-cache_BPs_multi_round-claude-opus-4.5.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-custom_instructions_not_in_system_message-claude-opus-4.5.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-edited_file_events_grouped_by_kind-claude-opus-4.5.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-omit_base_agent_instructions-claude-opus-4.5.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-one_attachment-claude-opus-4.5.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-simple_case-claude-opus-4.5.spec.snap │ │ │ │ │ │ │ └── agentPrompts-tool_use-claude-opus-4.5.spec.snap │ │ │ │ │ │ ├── claude-sonnet-4.5/ │ │ │ │ │ │ │ ├── agentPrompts-all_non_edit_tools-claude-sonnet-4.5.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-all_tools-claude-sonnet-4.5.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-cache_BPs-claude-sonnet-4.5.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-cache_BPs_multi_round-claude-sonnet-4.5.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-custom_instructions_not_in_system_message-claude-sonnet-4.5.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-edited_file_events_grouped_by_kind-claude-sonnet-4.5.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-omit_base_agent_instructions-claude-sonnet-4.5.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-one_attachment-claude-sonnet-4.5.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-simple_case-claude-sonnet-4.5.spec.snap │ │ │ │ │ │ │ └── agentPrompts-tool_use-claude-sonnet-4.5.spec.snap │ │ │ │ │ │ ├── default/ │ │ │ │ │ │ │ ├── agentPrompts-all_non_edit_tools-default.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-all_tools-default.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-cache_BPs-default.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-cache_BPs_multi_round-default.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-custom_instructions_not_in_system_message-default.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-edited_file_events_grouped_by_kind-default.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-omit_base_agent_instructions-default.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-one_attachment-default.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-simple_case-default.spec.snap │ │ │ │ │ │ │ └── agentPrompts-tool_use-default.spec.snap │ │ │ │ │ │ ├── gemini-2.0-flash/ │ │ │ │ │ │ │ ├── agentPrompts-all_non_edit_tools-gemini-2.0-flash.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-all_tools-gemini-2.0-flash.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-cache_BPs-gemini-2.0-flash.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-cache_BPs_multi_round-gemini-2.0-flash.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-custom_instructions_not_in_system_message-gemini-2.0-flash.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-edited_file_events_grouped_by_kind-gemini-2.0-flash.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-omit_base_agent_instructions-gemini-2.0-flash.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-one_attachment-gemini-2.0-flash.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-simple_case-gemini-2.0-flash.spec.snap │ │ │ │ │ │ │ └── agentPrompts-tool_use-gemini-2.0-flash.spec.snap │ │ │ │ │ │ ├── gpt-4.1/ │ │ │ │ │ │ │ ├── agentPrompts-all_non_edit_tools-gpt-4.1.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-all_tools-gpt-4.1.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-cache_BPs-gpt-4.1.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-cache_BPs_multi_round-gpt-4.1.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-custom_instructions_not_in_system_message-gpt-4.1.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-edited_file_events_grouped_by_kind-gpt-4.1.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-omit_base_agent_instructions-gpt-4.1.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-one_attachment-gpt-4.1.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-simple_case-gpt-4.1.spec.snap │ │ │ │ │ │ │ └── agentPrompts-tool_use-gpt-4.1.spec.snap │ │ │ │ │ │ ├── gpt-5/ │ │ │ │ │ │ │ ├── agentPrompts-all_non_edit_tools-gpt-5.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-all_tools-gpt-5.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-cache_BPs-gpt-5.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-cache_BPs_multi_round-gpt-5.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-custom_instructions_not_in_system_message-gpt-5.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-edited_file_events_grouped_by_kind-gpt-5.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-omit_base_agent_instructions-gpt-5.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-one_attachment-gpt-5.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-simple_case-gpt-5.spec.snap │ │ │ │ │ │ │ └── agentPrompts-tool_use-gpt-5.spec.snap │ │ │ │ │ │ ├── gpt-5-codex/ │ │ │ │ │ │ │ ├── agentPrompts-all_non_edit_tools-gpt-5-codex.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-all_tools-gpt-5-codex.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-cache_BPs-gpt-5-codex.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-cache_BPs_multi_round-gpt-5-codex.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-custom_instructions_not_in_system_message-gpt-5-codex.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-edited_file_events_grouped_by_kind-gpt-5-codex.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-omit_base_agent_instructions-gpt-5-codex.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-one_attachment-gpt-5-codex.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-simple_case-gpt-5-codex.spec.snap │ │ │ │ │ │ │ └── agentPrompts-tool_use-gpt-5-codex.spec.snap │ │ │ │ │ │ ├── gpt-5-mini/ │ │ │ │ │ │ │ ├── agentPrompts-all_non_edit_tools-gpt-5-mini.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-all_tools-gpt-5-mini.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-cache_BPs-gpt-5-mini.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-cache_BPs_multi_round-gpt-5-mini.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-custom_instructions_not_in_system_message-gpt-5-mini.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-edited_file_events_grouped_by_kind-gpt-5-mini.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-omit_base_agent_instructions-gpt-5-mini.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-one_attachment-gpt-5-mini.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-simple_case-gpt-5-mini.spec.snap │ │ │ │ │ │ │ └── agentPrompts-tool_use-gpt-5-mini.spec.snap │ │ │ │ │ │ ├── gpt-5.1/ │ │ │ │ │ │ │ ├── agentPrompts-all_non_edit_tools-gpt-5.1.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-all_tools-gpt-5.1.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-cache_BPs-gpt-5.1.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-cache_BPs_multi_round-gpt-5.1.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-custom_instructions_not_in_system_message-gpt-5.1.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-edited_file_events_grouped_by_kind-gpt-5.1.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-omit_base_agent_instructions-gpt-5.1.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-one_attachment-gpt-5.1.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-simple_case-gpt-5.1.spec.snap │ │ │ │ │ │ │ └── agentPrompts-tool_use-gpt-5.1.spec.snap │ │ │ │ │ │ ├── gpt-5.1-codex/ │ │ │ │ │ │ │ ├── agentPrompts-all_non_edit_tools-gpt-5.1-codex.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-all_tools-gpt-5.1-codex.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-cache_BPs-gpt-5.1-codex.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-cache_BPs_multi_round-gpt-5.1-codex.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-custom_instructions_not_in_system_message-gpt-5.1-codex.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-edited_file_events_grouped_by_kind-gpt-5.1-codex.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-omit_base_agent_instructions-gpt-5.1-codex.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-one_attachment-gpt-5.1-codex.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-simple_case-gpt-5.1-codex.spec.snap │ │ │ │ │ │ │ └── agentPrompts-tool_use-gpt-5.1-codex.spec.snap │ │ │ │ │ │ ├── gpt-5.1-codex-mini/ │ │ │ │ │ │ │ ├── agentPrompts-all_non_edit_tools-gpt-5.1-codex-mini.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-all_tools-gpt-5.1-codex-mini.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-cache_BPs-gpt-5.1-codex-mini.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-cache_BPs_multi_round-gpt-5.1-codex-mini.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-custom_instructions_not_in_system_message-gpt-5.1-codex-mini.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-edited_file_events_grouped_by_kind-gpt-5.1-codex-mini.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-omit_base_agent_instructions-gpt-5.1-codex-mini.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-one_attachment-gpt-5.1-codex-mini.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-simple_case-gpt-5.1-codex-mini.spec.snap │ │ │ │ │ │ │ └── agentPrompts-tool_use-gpt-5.1-codex-mini.spec.snap │ │ │ │ │ │ ├── grok-code-fast-1/ │ │ │ │ │ │ │ ├── agentPrompts-all_non_edit_tools-grok-code-fast-1.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-all_tools-grok-code-fast-1.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-cache_BPs-grok-code-fast-1.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-cache_BPs_multi_round-grok-code-fast-1.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-custom_instructions_not_in_system_message-grok-code-fast-1.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-edited_file_events_grouped_by_kind-grok-code-fast-1.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-omit_base_agent_instructions-grok-code-fast-1.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-one_attachment-grok-code-fast-1.spec.snap │ │ │ │ │ │ │ ├── agentPrompts-simple_case-grok-code-fast-1.spec.snap │ │ │ │ │ │ │ └── agentPrompts-tool_use-grok-code-fast-1.spec.snap │ │ │ │ │ │ ├── parseAttachments.spec.ts.snap │ │ │ │ │ │ ├── summarization-currentTurn-Agent.spec.snap │ │ │ │ │ │ ├── summarization-currentTurnEarlierRound-Agent.spec.snap │ │ │ │ │ │ ├── summarization-currentTurnEarlierRound-FullSumm.spec.snap │ │ │ │ │ │ ├── summarization-currentTurnEarlierRound-SimpleSummarizedHistory.spec.snap │ │ │ │ │ │ ├── summarization-duringToolCalling-Agent.spec.snap │ │ │ │ │ │ ├── summarization-duringToolCalling-FullSumm.spec.snap │ │ │ │ │ │ ├── summarization-duringToolCalling-SimpleSummarizedHistory.spec.snap │ │ │ │ │ │ ├── summarization-previousTurnMultiple-Agent.spec.snap │ │ │ │ │ │ ├── summarization-previousTurnMultiple-FullSumm.spec.snap │ │ │ │ │ │ ├── summarization-previousTurnMultiple-SimpleSummarizedHistory.spec.snap │ │ │ │ │ │ ├── summarization-previousTurnNoRounds-Agent.spec.snap │ │ │ │ │ │ ├── summarization-previousTurnNoRounds-FullSumm.spec.snap │ │ │ │ │ │ └── summarization-previousTurnNoRounds-SimpleSummarizedHistory.spec.snap │ │ │ │ │ ├── agentPrompt.spec.tsx │ │ │ │ │ ├── agentTasksInstructions.spec.tsx │ │ │ │ │ ├── backgroundSummarizer.spec.ts │ │ │ │ │ ├── parseAttachments.spec.ts │ │ │ │ │ ├── summarization.spec.tsx │ │ │ │ │ └── terminalPrompt.spec.tsx │ │ │ │ ├── vscModelPrompts.tsx │ │ │ │ ├── xAIPrompts.tsx │ │ │ │ └── zaiPrompts.tsx │ │ │ ├── base/ │ │ │ │ ├── capabilities.tsx │ │ │ │ ├── common.tsx │ │ │ │ ├── copilotIdentity.tsx │ │ │ │ ├── instructionMessage.tsx │ │ │ │ ├── promptElement.ts │ │ │ │ ├── promptRenderer.ts │ │ │ │ ├── responseTranslationRules.tsx │ │ │ │ ├── safetyRules.tsx │ │ │ │ ├── tag.tsx │ │ │ │ └── terminalState.tsx │ │ │ ├── chatDiskSessionResourcesImpl.ts │ │ │ ├── codeMapper/ │ │ │ │ ├── codeMapper.ts │ │ │ │ ├── codeMapperPrompt.tsx │ │ │ │ ├── codeMapperService.ts │ │ │ │ └── patchEditGeneration.tsx │ │ │ ├── devcontainer/ │ │ │ │ └── devContainerConfigPrompt.tsx │ │ │ ├── feedback/ │ │ │ │ ├── currentChange.tsx │ │ │ │ └── provideFeedback.tsx │ │ │ ├── git/ │ │ │ │ ├── gitChanges.tsx │ │ │ │ └── gitCommitMessagePrompt.tsx │ │ │ ├── github/ │ │ │ │ └── pullRequestDescriptionPrompt.tsx │ │ │ ├── inline/ │ │ │ │ ├── adjustSelection.ts │ │ │ │ ├── diagnosticsContext.tsx │ │ │ │ ├── diffEditGeneration.tsx │ │ │ │ ├── fixCookbookService.ts │ │ │ │ ├── inlineChat2Prompt.tsx │ │ │ │ ├── inlineChatEditCodePrompt.tsx │ │ │ │ ├── inlineChatEditMarkdownPrompt.tsx │ │ │ │ ├── inlineChatFix3Prompt.tsx │ │ │ │ ├── inlineChatGenerateCodePrompt.tsx │ │ │ │ ├── inlineChatGenerateMarkdownPrompt.tsx │ │ │ │ ├── inlineChatNotebookCommon.ts │ │ │ │ ├── inlineChatNotebookCommonPromptElements.tsx │ │ │ │ ├── inlineChatNotebookEditPrompt.tsx │ │ │ │ ├── inlineChatNotebookFixPrompt.tsx │ │ │ │ ├── inlineChatNotebookGeneratePrompt.tsx │ │ │ │ ├── inlineChatWorkspaceSearch.tsx │ │ │ │ ├── languageServerContextPrompt.tsx │ │ │ │ ├── progressMessages.tsx │ │ │ │ ├── promptingSummarizedDocument.ts │ │ │ │ ├── pythonCookbookData.ts │ │ │ │ ├── summarizedDocument/ │ │ │ │ │ ├── fragments.ts │ │ │ │ │ ├── implementation.ts │ │ │ │ │ ├── projectedText.ts │ │ │ │ │ ├── summarizeDocument.ts │ │ │ │ │ └── summarizeDocumentHelpers.ts │ │ │ │ ├── test/ │ │ │ │ │ └── inlineChat2Prompt.spec.tsx │ │ │ │ ├── utils/ │ │ │ │ │ └── streaming.ts │ │ │ │ ├── visualization.ts │ │ │ │ └── workingCopies.ts │ │ │ ├── notebook/ │ │ │ │ └── commonPrompts.tsx │ │ │ ├── panel/ │ │ │ │ ├── binaryFileHexdump.tsx │ │ │ │ ├── chatVariables.tsx │ │ │ │ ├── codeBlockFormattingRules.tsx │ │ │ │ ├── codebaseAgentPrompt.tsx │ │ │ │ ├── conversationHistory.tsx │ │ │ │ ├── currentEditor.tsx │ │ │ │ ├── currentSelection.tsx │ │ │ │ ├── customInstructions.tsx │ │ │ │ ├── definitionAtPosition.tsx │ │ │ │ ├── editCodePrompt.tsx │ │ │ │ ├── editCodePrompt2.tsx │ │ │ │ ├── editorIntegrationRules.tsx │ │ │ │ ├── explain.tsx │ │ │ │ ├── fileVariable.tsx │ │ │ │ ├── image.tsx │ │ │ │ ├── newNotebook.tsx │ │ │ │ ├── newWorkspace/ │ │ │ │ │ ├── newWorkspace.tsx │ │ │ │ │ └── newWorkspaceContents.tsx │ │ │ │ ├── notebookEditCodePrompt.tsx │ │ │ │ ├── notebookInlinePrompt.tsx │ │ │ │ ├── notebookSummaryChangePrompt.tsx │ │ │ │ ├── notebookVariables.tsx │ │ │ │ ├── panelChatBasePrompt.tsx │ │ │ │ ├── panelChatFixPrompt.tsx │ │ │ │ ├── preferences.tsx │ │ │ │ ├── projectLabels.tsx │ │ │ │ ├── promptCategorization.tsx │ │ │ │ ├── promptFile.tsx │ │ │ │ ├── referencesAtPosition.tsx │ │ │ │ ├── safeElements.tsx │ │ │ │ ├── search.tsx │ │ │ │ ├── searchPanelKeywordsPrompt.tsx │ │ │ │ ├── searchPanelPrompt.tsx │ │ │ │ ├── startDebugging.tsx │ │ │ │ ├── symbolAtCursor.tsx │ │ │ │ ├── symbolDefinitions.tsx │ │ │ │ ├── terminal.tsx │ │ │ │ ├── terminalExplain.tsx │ │ │ │ ├── terminalLastCommand.tsx │ │ │ │ ├── terminalQuickFix.tsx │ │ │ │ ├── terminalSelection.tsx │ │ │ │ ├── test/ │ │ │ │ │ ├── __snapshots__/ │ │ │ │ │ │ └── fileVariable.spec.ts.snap │ │ │ │ │ ├── chatVariablesHelpers.spec.ts │ │ │ │ │ ├── fileVariable.spec.ts │ │ │ │ │ └── toolCalling.spec.ts │ │ │ │ ├── title.tsx │ │ │ │ ├── toolCalling.tsx │ │ │ │ ├── unsafeElements.tsx │ │ │ │ ├── vscode.tsx │ │ │ │ └── workspace/ │ │ │ │ ├── metaPrompt.tsx │ │ │ │ ├── test/ │ │ │ │ │ └── visualFileTree.spec.ts │ │ │ │ ├── visualFileTree.ts │ │ │ │ ├── workspaceContext.tsx │ │ │ │ ├── workspaceFoldersHint.tsx │ │ │ │ └── workspaceStructure.tsx │ │ │ ├── settingsEditor/ │ │ │ │ └── settingsEditorSuggestQueryPrompt.tsx │ │ │ └── test/ │ │ │ ├── adjustSelection.spec.ts │ │ │ ├── chatDiskSessionResources.spec.ts │ │ │ ├── fixtures/ │ │ │ │ ├── 5710.selection.ts │ │ │ │ ├── 5710.summarized.ts │ │ │ │ ├── 5710.ts │ │ │ │ ├── BasketService.cs │ │ │ │ ├── BasketService.selection.cs │ │ │ │ ├── BasketService.summarized.cs │ │ │ │ ├── EditForm.selection.tsx │ │ │ │ ├── EditForm.summarized.tsx │ │ │ │ ├── EditForm.tsx │ │ │ │ ├── bracketPairsTree.summarized.ts │ │ │ │ ├── bracketPairsTree.ts │ │ │ │ ├── codeEditorWidget.1.summarized.ts │ │ │ │ ├── codeEditorWidget.2.summarized.ts │ │ │ │ ├── codeEditorWidget.3.summarized.ts │ │ │ │ ├── codeEditorWidget.ts │ │ │ │ ├── codeEditorWidget.ts.1.tempo-summarized │ │ │ │ ├── cppNoExtraSemicolons.cpp │ │ │ │ ├── cppNoExtraSemicolons.summarized.cpp │ │ │ │ ├── editorGroupWatermark.summarized.ts │ │ │ │ ├── editorGroupWatermark.ts │ │ │ │ ├── editorGroupWatermark.ts.summarized.round1 │ │ │ │ ├── editorGroupWatermark.ts.summarized.round2 │ │ │ │ ├── extHost.api.impl.selection.ts │ │ │ │ ├── extHost.api.impl.summarized.ts │ │ │ │ ├── extHost.api.impl.ts │ │ │ │ ├── keybindingParser.summarized.ts │ │ │ │ ├── keybindingParser.ts │ │ │ │ ├── map.summarized.ts │ │ │ │ ├── map.summarized.ts.view-port │ │ │ │ ├── map.ts │ │ │ │ ├── problem1.cpp │ │ │ │ ├── problem1.summarized.cpp │ │ │ │ ├── problem2.cpp │ │ │ │ ├── problem2.summarized.cpp │ │ │ │ ├── pseudoStartStopConversationCallbackTest.selection.ts │ │ │ │ ├── pseudoStartStopConversationCallbackTest.summarized.ts │ │ │ │ ├── pseudoStartStopConversationCallbackTest.ts │ │ │ │ ├── pullRequestModel.selection.ts │ │ │ │ ├── pullRequestModel.summarized.ts │ │ │ │ ├── pullRequestModel.ts │ │ │ │ ├── simpleClass.summarized.tsx │ │ │ │ ├── simpleClass.tsx │ │ │ │ ├── strings.test-example.2.summarized.ts │ │ │ │ ├── strings.test-example.3.summarized.ts │ │ │ │ ├── strings.test-example.summarized.ts │ │ │ │ ├── strings.test-example.summarized.ts.round2 │ │ │ │ ├── strings.test-example.ts │ │ │ │ ├── strings.test-example.ts.summarized.round1 │ │ │ │ ├── strings.test-example.ts.summarized.round2 │ │ │ │ ├── tempo-actions.html │ │ │ │ ├── tempo-actions.html.3.tempo-summarized │ │ │ │ ├── tempo-actions.ts │ │ │ │ ├── tempo-actions.ts.2.tempo-summarized │ │ │ │ ├── tempo-actions.ts.3.tempo-summarized │ │ │ │ ├── tempo-chatActions.ts │ │ │ │ ├── tempo-chatActions.ts.2.tempo-summarized │ │ │ │ ├── tempo-chatContextActions.ts │ │ │ │ ├── tempo-chatContextActions.ts.2.tempo-summarized │ │ │ │ ├── view.css │ │ │ │ ├── view.summarized.css │ │ │ │ ├── vscode.proposed.chatParticipantAdditions.d.selection.ts │ │ │ │ ├── vscode.proposed.chatParticipantAdditions.d.summarized.ts │ │ │ │ ├── vscode.proposed.chatParticipantAdditions.d.ts │ │ │ │ ├── webview-index.selection.ts │ │ │ │ ├── webview-index.summarized.ts │ │ │ │ ├── webview-index.ts │ │ │ │ ├── workbench-dev.html │ │ │ │ ├── workbench-dev.selection.html │ │ │ │ └── workbench-dev.summarized.html │ │ │ ├── projectedText.spec.ts │ │ │ ├── summarizeDocument.spec.ts │ │ │ ├── summarizeDocumentPlayground.ts │ │ │ ├── utils.ts │ │ │ └── workingCopies.spec.ts │ │ ├── renameSuggestions/ │ │ │ ├── common/ │ │ │ │ └── namingConvention.ts │ │ │ ├── node/ │ │ │ │ ├── renameSuggestionsPrompt.tsx │ │ │ │ └── renameSuggestionsProvider.ts │ │ │ └── test/ │ │ │ ├── common/ │ │ │ │ └── namingConvention.spec.ts │ │ │ └── node/ │ │ │ └── renameSuggestionsProvider.spec.tsx │ │ ├── replay/ │ │ │ ├── common/ │ │ │ │ ├── chatReplayResponses.ts │ │ │ │ └── chatReplayTypes.ts │ │ │ ├── node/ │ │ │ │ ├── chatReplayExport.ts │ │ │ │ ├── replayParser.ts │ │ │ │ ├── replayParsing.spec.ts │ │ │ │ └── spec.chatreplay.json │ │ │ └── vscode-node/ │ │ │ ├── chatReplayContrib.ts │ │ │ ├── chatReplayNotebookSerializer.ts │ │ │ ├── chatReplayParticipant.ts │ │ │ ├── chatReplaySessionProvider.ts │ │ │ ├── replayDebugSession.ts │ │ │ └── test/ │ │ │ └── chatReplayNotebook.spec.ts │ │ ├── review/ │ │ │ └── node/ │ │ │ ├── doReview.ts │ │ │ ├── githubPullRequestReviewerCommentsProvider.ts │ │ │ ├── githubReviewAgent.ts │ │ │ └── test/ │ │ │ ├── doReview.spec.ts │ │ │ ├── githubReviewAgent.spec.ts │ │ │ └── reviewCommand.spec.ts │ │ ├── search/ │ │ │ └── vscode-node/ │ │ │ └── commands.ts │ │ ├── settingsSchema/ │ │ │ └── vscode-node/ │ │ │ └── settingsSchemaFeature.ts │ │ ├── survey/ │ │ │ └── vscode-node/ │ │ │ └── surveyCommands.ts │ │ ├── telemetry/ │ │ │ ├── common/ │ │ │ │ └── lifecycleTelemetryContrib.ts │ │ │ └── vscode/ │ │ │ └── githubTelemetryForwardingContrib.ts │ │ ├── test/ │ │ │ ├── common/ │ │ │ │ └── importRewriting.spec.ts │ │ │ ├── node/ │ │ │ │ ├── configurations.spec.ts │ │ │ │ ├── editFromDiffGeneration.spec.ts │ │ │ │ ├── extractCodeSnippets.spec.ts │ │ │ │ ├── fixtures/ │ │ │ │ │ ├── gitdiff/ │ │ │ │ │ │ ├── 01-basic │ │ │ │ │ │ ├── 01-basic-add-2-lines │ │ │ │ │ │ ├── 01-basic-add-2-lines.diff │ │ │ │ │ │ ├── 01-basic-add-first-line │ │ │ │ │ │ ├── 01-basic-add-first-line.diff │ │ │ │ │ │ ├── 01-basic-add-last-line │ │ │ │ │ │ ├── 01-basic-add-last-line-with-eol │ │ │ │ │ │ ├── 01-basic-add-last-line-with-eol.diff │ │ │ │ │ │ ├── 01-basic-add-last-line.diff │ │ │ │ │ │ ├── 01-basic-add-line │ │ │ │ │ │ ├── 01-basic-add-line.diff │ │ │ │ │ │ ├── 01-basic-move-lines │ │ │ │ │ │ ├── 01-basic-move-lines.diff │ │ │ │ │ │ ├── 01-basic-remove-first-line │ │ │ │ │ │ ├── 01-basic-remove-first-line.diff │ │ │ │ │ │ ├── 01-basic-remove-last-line │ │ │ │ │ │ ├── 01-basic-remove-last-line-with-eol │ │ │ │ │ │ ├── 01-basic-remove-last-line-with-eol.diff │ │ │ │ │ │ ├── 01-basic-remove-last-line.diff │ │ │ │ │ │ ├── 01-basic-remove-line │ │ │ │ │ │ ├── 01-basic-remove-line.diff │ │ │ │ │ │ ├── 01-basic-replace-line │ │ │ │ │ │ ├── 01-basic-replace-line.diff │ │ │ │ │ │ ├── 02-basicWithEol │ │ │ │ │ │ ├── 02-basicWithEol-add-line │ │ │ │ │ │ ├── 02-basicWithEol-add-line.diff │ │ │ │ │ │ ├── 02-basicWithEol-remove-eol │ │ │ │ │ │ ├── 02-basicWithEol-remove-eol.diff │ │ │ │ │ │ ├── 02-basicWithEol-remove-last-line │ │ │ │ │ │ ├── 02-basicWithEol-remove-last-line.diff │ │ │ │ │ │ ├── 03-large │ │ │ │ │ │ ├── 03-large-many-changes │ │ │ │ │ │ ├── 03-large-many-changes.diff │ │ │ │ │ │ └── generate-diffs.js │ │ │ │ │ ├── patch/ │ │ │ │ │ │ ├── basic/ │ │ │ │ │ │ │ ├── nested-codeblock.expected.txt │ │ │ │ │ │ │ ├── nested-codeblock.original.txt │ │ │ │ │ │ │ ├── nested-codeblock.patch.txt │ │ │ │ │ │ │ ├── test1.expected.txt │ │ │ │ │ │ │ ├── test1.original.txt │ │ │ │ │ │ │ ├── test1.patch.txt │ │ │ │ │ │ │ ├── two-blocks.expected.txt │ │ │ │ │ │ │ ├── two-blocks.original.txt │ │ │ │ │ │ │ └── two-blocks.patch.txt │ │ │ │ │ │ ├── indentation/ │ │ │ │ │ │ │ ├── aml-10-58-not-defined-01.expected.txt │ │ │ │ │ │ │ ├── aml-10-58-not-defined-01.original.txt │ │ │ │ │ │ │ ├── aml-10-58-not-defined-01.patch.txt │ │ │ │ │ │ │ ├── aml-8-110-not-defined-00.expected.txt │ │ │ │ │ │ │ ├── aml-8-110-not-defined-00.original.txt │ │ │ │ │ │ │ ├── aml-8-110-not-defined-00.patch.txt │ │ │ │ │ │ │ ├── aml-8-73-no-value-for-argument-in-function-call-00.expected.txt │ │ │ │ │ │ │ ├── aml-8-73-no-value-for-argument-in-function-call-00.original.txt │ │ │ │ │ │ │ ├── aml-8-73-no-value-for-argument-in-function-call-00.patch.txt │ │ │ │ │ │ │ ├── code-mapper-panel-6614-2.expected.txt │ │ │ │ │ │ │ ├── code-mapper-panel-6614-2.original.txt │ │ │ │ │ │ │ ├── code-mapper-panel-6614-2.patch.txt │ │ │ │ │ │ │ ├── code-mapper-panel-6614.expected.txt │ │ │ │ │ │ │ ├── code-mapper-panel-6614.original.txt │ │ │ │ │ │ │ ├── code-mapper-panel-6614.patch.txt │ │ │ │ │ │ │ ├── no-duplicate-case-with-cookbook.expected.txt │ │ │ │ │ │ │ ├── no-duplicate-case-with-cookbook.original.txt │ │ │ │ │ │ │ ├── no-duplicate-case-with-cookbook.patch.txt │ │ │ │ │ │ │ ├── unecessary-parenthesis-00.expected.txt │ │ │ │ │ │ │ ├── unecessary-parenthesis-00.original.txt │ │ │ │ │ │ │ └── unecessary-parenthesis-00.patch.txt │ │ │ │ │ │ └── out-20240514-153256/ │ │ │ │ │ │ ├── class-methods-use-this-with-cookbook-00.expected.txt │ │ │ │ │ │ ├── class-methods-use-this-with-cookbook-00.original.txt │ │ │ │ │ │ ├── class-methods-use-this-with-cookbook-00.patch.txt │ │ │ │ │ │ ├── consistent-this-with-cookbook-00.expected.txt │ │ │ │ │ │ ├── consistent-this-with-cookbook-00.original.txt │ │ │ │ │ │ ├── consistent-this-with-cookbook-00.patch.txt │ │ │ │ │ │ ├── constructor-super-with-cookbook-00.expected.txt │ │ │ │ │ │ ├── constructor-super-with-cookbook-00.original.txt │ │ │ │ │ │ ├── constructor-super-with-cookbook-00.patch.txt │ │ │ │ │ │ ├── max-lines-per-function-with-cookbook-00.expected.txt │ │ │ │ │ │ ├── max-lines-per-function-with-cookbook-00.original.txt │ │ │ │ │ │ ├── max-lines-per-function-with-cookbook-00.patch.txt │ │ │ │ │ │ ├── no-dupe-else-if-with-cookbook-00.expected.txt │ │ │ │ │ │ ├── no-dupe-else-if-with-cookbook-00.original.txt │ │ │ │ │ │ ├── no-dupe-else-if-with-cookbook-00.patch.txt │ │ │ │ │ │ ├── no-duplicate-case-with-cookbook-00.expected.txt │ │ │ │ │ │ ├── no-duplicate-case-with-cookbook-00.original.txt │ │ │ │ │ │ ├── no-duplicate-case-with-cookbook-00.patch.txt │ │ │ │ │ │ ├── no-negated-condition-2-with-cookbook-00.expected.txt │ │ │ │ │ │ ├── no-negated-condition-2-with-cookbook-00.original.txt │ │ │ │ │ │ ├── no-negated-condition-2-with-cookbook-00.patch.txt │ │ │ │ │ │ ├── no-negated-condition-with-cookbook-00.expected.txt │ │ │ │ │ │ ├── no-negated-condition-with-cookbook-00.original.txt │ │ │ │ │ │ ├── no-negated-condition-with-cookbook-00.patch.txt │ │ │ │ │ │ ├── no-new-with-cookbook-00.expected.txt │ │ │ │ │ │ ├── no-new-with-cookbook-00.original.txt │ │ │ │ │ │ ├── no-new-with-cookbook-00.patch.txt │ │ │ │ │ │ ├── no-sequences-with-cookbook-00.expected.txt │ │ │ │ │ │ ├── no-sequences-with-cookbook-00.original.txt │ │ │ │ │ │ ├── no-sequences-with-cookbook-00.patch.txt │ │ │ │ │ │ ├── should-not-generate-an-error-for-variables-declared-in-outer-scopes.expected.txt │ │ │ │ │ │ ├── should-not-generate-an-error-for-variables-declared-in-outer-scopes.original.txt │ │ │ │ │ │ └── should-not-generate-an-error-for-variables-declared-in-outer-scopes.patch.txt │ │ │ │ │ └── pseudodiff/ │ │ │ │ │ ├── 01-simple │ │ │ │ │ ├── 01-simple-replace-2-lines │ │ │ │ │ ├── 01-simple-replace-2-lines.diff │ │ │ │ │ ├── 02-filewithtabs │ │ │ │ │ ├── 02-filewithtabs-replace │ │ │ │ │ ├── 02-filewithtabs-replace.diff │ │ │ │ │ ├── 03-unusedimport │ │ │ │ │ ├── 03-unusedimport-addone │ │ │ │ │ ├── 03-unusedimport-addone.diff │ │ │ │ │ ├── 04-spaces │ │ │ │ │ ├── 04-spaces-replace │ │ │ │ │ ├── 04-spaces-replace.diff │ │ │ │ │ ├── 05-beginend │ │ │ │ │ ├── 05-beginend-move │ │ │ │ │ ├── 05-beginend-move.diff │ │ │ │ │ ├── 06-similarline │ │ │ │ │ ├── 06-similarline-comma │ │ │ │ │ ├── 06-similarline-comma.diff │ │ │ │ │ ├── 07-indent1 │ │ │ │ │ ├── 07-indent1-one │ │ │ │ │ ├── 07-indent1-one.diff │ │ │ │ │ ├── 07-indent1-two │ │ │ │ │ ├── 07-indent1-two.diff │ │ │ │ │ ├── 08-modifyunchanged │ │ │ │ │ ├── 08-modifyunchanged-one │ │ │ │ │ ├── 08-modifyunchanged-one.diff │ │ │ │ │ ├── 09-indent2 │ │ │ │ │ ├── 09-indent2-one │ │ │ │ │ ├── 09-indent2-one.diff │ │ │ │ │ ├── 10-test │ │ │ │ │ ├── 10-test-one │ │ │ │ │ ├── 10-test-one.diff │ │ │ │ │ ├── 10-test-one.messages │ │ │ │ │ ├── 11-replaceatend │ │ │ │ │ ├── 11-replaceatend-one │ │ │ │ │ ├── 11-replaceatend-one.diff │ │ │ │ │ ├── 11-replaceatend-one.messages │ │ │ │ │ ├── 12-insertmethod │ │ │ │ │ ├── 12-insertmethod-one │ │ │ │ │ ├── 12-insertmethod-one.diff │ │ │ │ │ ├── 12-insertmethod-one.messages │ │ │ │ │ ├── 12-insertmethod-two │ │ │ │ │ ├── 12-insertmethod-two.diff │ │ │ │ │ ├── 12-insertmethod-two.messages │ │ │ │ │ ├── 13-coroutine │ │ │ │ │ ├── 13-coroutine-one │ │ │ │ │ ├── 13-coroutine-one.diff │ │ │ │ │ ├── 13-coroutine-one.messages │ │ │ │ │ ├── 14-rob │ │ │ │ │ ├── 14-rob-one │ │ │ │ │ └── 14-rob-one.diff │ │ │ │ ├── intent.spec.ts │ │ │ │ ├── notebookPromptRendering.spec.ts │ │ │ │ ├── patchEditGeneration.spec.ts │ │ │ │ ├── pseudoStartStopConversationCallback.spec.ts │ │ │ │ ├── services.ts │ │ │ │ ├── streaming.spec.ts │ │ │ │ ├── summarizedDocumentRendering.spec.tsx │ │ │ │ ├── telemetry.spec.ts │ │ │ │ ├── testHelpers.ts │ │ │ │ ├── utils.fileTree.spec.ts │ │ │ │ └── utils.spec.ts │ │ │ └── vscode-node/ │ │ │ ├── configurations.test.ts │ │ │ ├── endpoints.test.ts │ │ │ ├── extension.test.ts │ │ │ ├── sanity.sanity-test.ts │ │ │ ├── services.ts │ │ │ ├── session.test.ts │ │ │ └── textDocumentManager.test.ts │ │ ├── testing/ │ │ │ ├── common/ │ │ │ │ └── files.ts │ │ │ ├── node/ │ │ │ │ ├── aiEvaluationService.tsx │ │ │ │ └── setupTestsFileManager.tsx │ │ │ └── vscode/ │ │ │ └── setupTestContributions.ts │ │ ├── tools/ │ │ │ ├── common/ │ │ │ │ ├── agentMemoryService.ts │ │ │ │ ├── askQuestionsTypes.ts │ │ │ │ ├── editToolLearningService.ts │ │ │ │ ├── editToolLearningStates.ts │ │ │ │ ├── memoryCleanupService.ts │ │ │ │ ├── test/ │ │ │ │ │ ├── agentMemoryService.spec.ts │ │ │ │ │ ├── toolNames.spec.ts │ │ │ │ │ └── toolService.spec.ts │ │ │ │ ├── toJsonSchema.ts │ │ │ │ ├── toolNames.ts │ │ │ │ ├── toolSchemaNormalizer.ts │ │ │ │ ├── toolUtils.ts │ │ │ │ ├── toolsRegistry.ts │ │ │ │ ├── toolsService.ts │ │ │ │ └── virtualTools/ │ │ │ │ ├── builtInToolGroupHandler.ts │ │ │ │ ├── preComputedToolEmbeddingsCache.ts │ │ │ │ ├── toolEmbeddingsComputer.ts │ │ │ │ ├── toolEmbeddingsLocalCache.ts │ │ │ │ ├── toolGrouping.ts │ │ │ │ ├── toolGroupingService.ts │ │ │ │ ├── virtualTool.ts │ │ │ │ ├── virtualToolGroupCache.ts │ │ │ │ ├── virtualToolGrouper.ts │ │ │ │ ├── virtualToolSummarizer.tsx │ │ │ │ ├── virtualToolTypes.ts │ │ │ │ └── virtualToolsConstants.ts │ │ │ ├── node/ │ │ │ │ ├── abstractReplaceStringTool.tsx │ │ │ │ ├── allTools.ts │ │ │ │ ├── applyPatch/ │ │ │ │ │ ├── parseApplyPatch.ts │ │ │ │ │ └── parser.ts │ │ │ │ ├── applyPatchTool.tsx │ │ │ │ ├── codebaseTool.tsx │ │ │ │ ├── createDirectoryTool.tsx │ │ │ │ ├── createFileTool.tsx │ │ │ │ ├── editFileHealing.tsx │ │ │ │ ├── editFileToolResult.tsx │ │ │ │ ├── editFileToolUtils.tsx │ │ │ │ ├── editNotebookTool.tsx │ │ │ │ ├── executionSubagentTool.ts │ │ │ │ ├── findFilesTool.tsx │ │ │ │ ├── findTestsFilesTool.tsx │ │ │ │ ├── findTextInFilesTool.tsx │ │ │ │ ├── getErrorsTool.tsx │ │ │ │ ├── getNotebookCellOutputTool.tsx │ │ │ │ ├── getSearchViewResultsTool.tsx │ │ │ │ ├── githubRepoTool.tsx │ │ │ │ ├── imageToolUtils.ts │ │ │ │ ├── insertEditTool.tsx │ │ │ │ ├── installExtensionTool.tsx │ │ │ │ ├── listDirTool.tsx │ │ │ │ ├── manageTodoListTool.tsx │ │ │ │ ├── memoryContextPrompt.tsx │ │ │ │ ├── memoryTool.tsx │ │ │ │ ├── multiReplaceStringTool.tsx │ │ │ │ ├── newNotebookTool.tsx │ │ │ │ ├── newWorkspace/ │ │ │ │ │ ├── newWorkspaceTool.tsx │ │ │ │ │ └── projectSetupInfoTool.tsx │ │ │ │ ├── notebookSummaryTool.tsx │ │ │ │ ├── readFileTool.tsx │ │ │ │ ├── readProjectStructureTool.ts │ │ │ │ ├── replaceStringTool.tsx │ │ │ │ ├── resolveMemoryFileUriTool.tsx │ │ │ │ ├── runNotebookCellTool.tsx │ │ │ │ ├── scmChangesTool.ts │ │ │ │ ├── searchSubagentTool.ts │ │ │ │ ├── searchWorkspaceSymbolsTool.tsx │ │ │ │ ├── test/ │ │ │ │ │ ├── __snapshots__/ │ │ │ │ │ │ ├── findFiles.spec.tsx.snap │ │ │ │ │ │ ├── getErrorsResult.spec.tsx.snap │ │ │ │ │ │ ├── getErrorsTool.spec.tsx.snap │ │ │ │ │ │ └── toolCalling.spec.tsx.snap │ │ │ │ │ ├── applyPatch.spec.ts │ │ │ │ │ ├── editFileToolUtils.spec.ts │ │ │ │ │ ├── editFileToolUtilsFixtures/ │ │ │ │ │ │ ├── crlf-input.json │ │ │ │ │ │ ├── crlf-output.json │ │ │ │ │ │ ├── crlf-tool-call.json │ │ │ │ │ │ ├── math-original.txt │ │ │ │ │ │ ├── multi-sr-bug-actual.txt │ │ │ │ │ │ └── multi-sr-bug-original.txt │ │ │ │ │ ├── editNotebookTool.spec.tsx │ │ │ │ │ ├── editToolLearningService.spec.ts │ │ │ │ │ ├── executionSubagentTool.spec.ts │ │ │ │ │ ├── findFiles.spec.tsx │ │ │ │ │ ├── findTextInFilesResult.spec.tsx │ │ │ │ │ ├── findTextInFilesTool.spec.tsx │ │ │ │ │ ├── getErrorsResult.spec.tsx │ │ │ │ │ ├── getErrorsTool.spec.tsx │ │ │ │ │ ├── imageToolUtils.spec.ts │ │ │ │ │ ├── memoryTool.spec.tsx │ │ │ │ │ ├── multiReplaceStringTool.spec.tsx │ │ │ │ │ ├── readFile.spec.tsx │ │ │ │ │ ├── searchSubagentTool.spec.ts │ │ │ │ │ ├── searchToolTestUtils.ts │ │ │ │ │ ├── testFailure.spec.tsx │ │ │ │ │ ├── testTools.ts │ │ │ │ │ ├── testToolsService.ts │ │ │ │ │ ├── toJsonSchema.spec.ts │ │ │ │ │ ├── toolCalling.spec.tsx │ │ │ │ │ ├── toolTestUtils.tsx │ │ │ │ │ ├── toolUtils.spec.ts │ │ │ │ │ └── viewImage.spec.tsx │ │ │ │ ├── testFailureTool.tsx │ │ │ │ ├── todoListContextPrompt.tsx │ │ │ │ ├── toolReplayTool.tsx │ │ │ │ ├── toolSearchTool.ts │ │ │ │ ├── toolUtils.task.ts │ │ │ │ ├── toolUtils.ts │ │ │ │ ├── viewImageTool.tsx │ │ │ │ ├── vscodeAPITool.ts │ │ │ │ └── vscodeCmdTool.tsx │ │ │ ├── test/ │ │ │ │ ├── common/ │ │ │ │ │ └── toolSchemaNormalizer.spec.ts │ │ │ │ └── node/ │ │ │ │ ├── applyPatch/ │ │ │ │ │ ├── applyPatch.spec.tsx │ │ │ │ │ ├── corpus/ │ │ │ │ │ │ ├── 0.patch │ │ │ │ │ │ ├── 1.patch │ │ │ │ │ │ ├── 10.patch │ │ │ │ │ │ ├── 11.patch │ │ │ │ │ │ ├── 12.patch │ │ │ │ │ │ ├── 13.patch │ │ │ │ │ │ ├── 14.patch │ │ │ │ │ │ ├── 15.patch │ │ │ │ │ │ ├── 16.patch │ │ │ │ │ │ ├── 17.patch │ │ │ │ │ │ ├── 18.patch │ │ │ │ │ │ ├── 19.patch │ │ │ │ │ │ ├── 2.patch │ │ │ │ │ │ ├── 20.patch │ │ │ │ │ │ ├── 21.patch │ │ │ │ │ │ ├── 22.patch │ │ │ │ │ │ ├── 23.patch │ │ │ │ │ │ ├── 24.patch │ │ │ │ │ │ ├── 25.patch │ │ │ │ │ │ ├── 26.patch │ │ │ │ │ │ ├── 262549-call.txt │ │ │ │ │ │ ├── 262549-input.txt │ │ │ │ │ │ ├── 262549-output.txt │ │ │ │ │ │ ├── 267547-call.txt │ │ │ │ │ │ ├── 267547-input.txt │ │ │ │ │ │ ├── 267547-output.txt │ │ │ │ │ │ ├── 27.patch │ │ │ │ │ │ ├── 28.patch │ │ │ │ │ │ ├── 29.patch │ │ │ │ │ │ ├── 3.patch │ │ │ │ │ │ ├── 30.patch │ │ │ │ │ │ ├── 31.patch │ │ │ │ │ │ ├── 32.patch │ │ │ │ │ │ ├── 33.patch │ │ │ │ │ │ ├── 34.patch │ │ │ │ │ │ ├── 35.patch │ │ │ │ │ │ ├── 36.patch │ │ │ │ │ │ ├── 37.patch │ │ │ │ │ │ ├── 38.patch │ │ │ │ │ │ ├── 39.patch │ │ │ │ │ │ ├── 4.patch │ │ │ │ │ │ ├── 40.patch │ │ │ │ │ │ ├── 41.patch │ │ │ │ │ │ ├── 42.patch │ │ │ │ │ │ ├── 43.patch │ │ │ │ │ │ ├── 44.patch │ │ │ │ │ │ ├── 45.patch │ │ │ │ │ │ ├── 46.patch │ │ │ │ │ │ ├── 47.patch │ │ │ │ │ │ ├── 48.patch │ │ │ │ │ │ ├── 49.patch │ │ │ │ │ │ ├── 5.patch │ │ │ │ │ │ ├── 6.patch │ │ │ │ │ │ ├── 7.patch │ │ │ │ │ │ ├── 8.patch │ │ │ │ │ │ ├── 9.patch │ │ │ │ │ │ ├── multipleIndentedLines-call.txt │ │ │ │ │ │ ├── multipleIndentedLines-input.txt │ │ │ │ │ │ ├── multipleIndentedLines-output.txt │ │ │ │ │ │ ├── multipleSections-call.txt │ │ │ │ │ │ ├── multipleSections-input.txt │ │ │ │ │ │ ├── multipleSections-output.txt │ │ │ │ │ │ ├── reindent-call.txt │ │ │ │ │ │ └── reindent-input.txt │ │ │ │ │ ├── fixtures/ │ │ │ │ │ │ ├── 4302.ts.txt │ │ │ │ │ │ └── 4302.ts.txt.expected │ │ │ │ │ └── parser.spec.ts │ │ │ │ ├── replaceString/ │ │ │ │ │ ├── fixtures/ │ │ │ │ │ │ ├── math.js.txt │ │ │ │ │ │ ├── math.js.txt.expected │ │ │ │ │ │ └── settingsjson.txt │ │ │ │ │ └── replaceStringTool.spec.tsx │ │ │ │ └── virtualTools/ │ │ │ │ ├── testVirtualTools.ts │ │ │ │ ├── toolEmbeddingsCache.spec.ts │ │ │ │ ├── toolEmbeddingsLocalCache.spec.ts │ │ │ │ ├── virtualToolGrouper.spec.ts │ │ │ │ └── virtualToolGrouping.spec.ts │ │ │ └── vscode-node/ │ │ │ ├── allTools.ts │ │ │ ├── fetchWebPageTool.tsx │ │ │ ├── switchAgentTool.ts │ │ │ ├── test/ │ │ │ │ └── inputGlobToPattern.test.ts │ │ │ ├── tools.ts │ │ │ └── toolsService.ts │ │ ├── trajectory/ │ │ │ ├── ARCHITECTURE.md │ │ │ └── vscode-node/ │ │ │ ├── otelChatDebugLogProvider.ts │ │ │ ├── otelSpanToChatDebugEvent.ts │ │ │ ├── otlpFormatConversion.ts │ │ │ ├── test/ │ │ │ │ ├── otelSpanToChatDebugEvent.spec.ts │ │ │ │ └── otlpFormatConversion.spec.ts │ │ │ └── trajectoryExportCommands.ts │ │ ├── typescriptContext/ │ │ │ ├── DEVELOPMENT.md │ │ │ ├── common/ │ │ │ │ └── serverProtocol.ts │ │ │ ├── serverPlugin/ │ │ │ │ ├── .esbuild.ts │ │ │ │ ├── .gitignore │ │ │ │ ├── .npmignore │ │ │ │ ├── fixtures/ │ │ │ │ │ ├── context/ │ │ │ │ │ │ ├── p1/ │ │ │ │ │ │ │ ├── source/ │ │ │ │ │ │ │ │ ├── f1.ts │ │ │ │ │ │ │ │ ├── f2.ts │ │ │ │ │ │ │ │ ├── f3.ts │ │ │ │ │ │ │ │ └── f4.ts │ │ │ │ │ │ │ └── tsconfig.json │ │ │ │ │ │ ├── p10/ │ │ │ │ │ │ │ ├── source/ │ │ │ │ │ │ │ │ ├── f1.ts │ │ │ │ │ │ │ │ ├── f2.ts │ │ │ │ │ │ │ │ └── f3.ts │ │ │ │ │ │ │ └── tsconfig.json │ │ │ │ │ │ ├── p11/ │ │ │ │ │ │ │ ├── source/ │ │ │ │ │ │ │ │ ├── f1.ts │ │ │ │ │ │ │ │ ├── f2.ts │ │ │ │ │ │ │ │ └── f3.ts │ │ │ │ │ │ │ └── tsconfig.json │ │ │ │ │ │ ├── p12/ │ │ │ │ │ │ │ ├── source/ │ │ │ │ │ │ │ │ ├── f1.ts │ │ │ │ │ │ │ │ ├── f2.ts │ │ │ │ │ │ │ │ ├── f3.ts │ │ │ │ │ │ │ │ ├── f4.ts │ │ │ │ │ │ │ │ └── f5.ts │ │ │ │ │ │ │ └── tsconfig.json │ │ │ │ │ │ ├── p13/ │ │ │ │ │ │ │ ├── source/ │ │ │ │ │ │ │ │ ├── f1.ts │ │ │ │ │ │ │ │ ├── f2.ts │ │ │ │ │ │ │ │ └── f3.ts │ │ │ │ │ │ │ └── tsconfig.json │ │ │ │ │ │ ├── p14/ │ │ │ │ │ │ │ ├── source/ │ │ │ │ │ │ │ │ ├── f1.ts │ │ │ │ │ │ │ │ ├── f2.ts │ │ │ │ │ │ │ │ ├── f3.ts │ │ │ │ │ │ │ │ ├── f4.ts │ │ │ │ │ │ │ │ ├── f5.ts │ │ │ │ │ │ │ │ └── f6.ts │ │ │ │ │ │ │ └── tsconfig.json │ │ │ │ │ │ ├── p2/ │ │ │ │ │ │ │ ├── source/ │ │ │ │ │ │ │ │ ├── f1.ts │ │ │ │ │ │ │ │ └── f2.ts │ │ │ │ │ │ │ └── tsconfig.json │ │ │ │ │ │ ├── p3/ │ │ │ │ │ │ │ ├── source/ │ │ │ │ │ │ │ │ ├── f1.ts │ │ │ │ │ │ │ │ └── f2.ts │ │ │ │ │ │ │ └── tsconfig.json │ │ │ │ │ │ ├── p4/ │ │ │ │ │ │ │ ├── source/ │ │ │ │ │ │ │ │ ├── f1.ts │ │ │ │ │ │ │ │ ├── f2.ts │ │ │ │ │ │ │ │ ├── f3.ts │ │ │ │ │ │ │ │ ├── f4.ts │ │ │ │ │ │ │ │ └── f5.ts │ │ │ │ │ │ │ └── tsconfig.json │ │ │ │ │ │ ├── p5/ │ │ │ │ │ │ │ ├── source/ │ │ │ │ │ │ │ │ ├── f1.ts │ │ │ │ │ │ │ │ ├── f2.ts │ │ │ │ │ │ │ │ └── f3.ts │ │ │ │ │ │ │ └── tsconfig.json │ │ │ │ │ │ ├── p6/ │ │ │ │ │ │ │ ├── source/ │ │ │ │ │ │ │ │ ├── f1.ts │ │ │ │ │ │ │ │ └── f2.ts │ │ │ │ │ │ │ └── tsconfig.json │ │ │ │ │ │ ├── p7/ │ │ │ │ │ │ │ ├── source/ │ │ │ │ │ │ │ │ ├── f1.ts │ │ │ │ │ │ │ │ └── f2.ts │ │ │ │ │ │ │ └── tsconfig.json │ │ │ │ │ │ ├── p8/ │ │ │ │ │ │ │ ├── source/ │ │ │ │ │ │ │ │ ├── f1.ts │ │ │ │ │ │ │ │ ├── f2.ts │ │ │ │ │ │ │ │ └── f3.ts │ │ │ │ │ │ │ └── tsconfig.json │ │ │ │ │ │ ├── p9/ │ │ │ │ │ │ │ ├── source/ │ │ │ │ │ │ │ │ ├── f1.ts │ │ │ │ │ │ │ │ ├── f2.ts │ │ │ │ │ │ │ │ ├── f3.ts │ │ │ │ │ │ │ │ └── f4.ts │ │ │ │ │ │ │ └── tsconfig.json │ │ │ │ │ │ └── testbed/ │ │ │ │ │ │ ├── src/ │ │ │ │ │ │ │ ├── company.ts │ │ │ │ │ │ │ ├── disposable.ts │ │ │ │ │ │ │ ├── employee.ts │ │ │ │ │ │ │ ├── entity.ts │ │ │ │ │ │ │ ├── eventProvider.ts │ │ │ │ │ │ │ ├── events.ts │ │ │ │ │ │ │ ├── legalEntity.ts │ │ │ │ │ │ │ ├── main.ts │ │ │ │ │ │ │ └── person.ts │ │ │ │ │ │ └── tsconfig.json │ │ │ │ │ ├── nes/ │ │ │ │ │ │ ├── p1/ │ │ │ │ │ │ │ ├── source/ │ │ │ │ │ │ │ │ └── test.ts │ │ │ │ │ │ │ └── tsconfig.json │ │ │ │ │ │ └── p2/ │ │ │ │ │ │ ├── source/ │ │ │ │ │ │ │ └── test.ts │ │ │ │ │ │ └── tsconfig.json │ │ │ │ │ └── readme.md │ │ │ │ ├── package.json │ │ │ │ ├── src/ │ │ │ │ │ ├── common/ │ │ │ │ │ │ ├── api.ts │ │ │ │ │ │ ├── baseContextProviders.ts │ │ │ │ │ │ ├── classContextProvider.ts │ │ │ │ │ │ ├── code.ts │ │ │ │ │ │ ├── contextProvider.ts │ │ │ │ │ │ ├── functionContextProvider.ts │ │ │ │ │ │ ├── host.ts │ │ │ │ │ │ ├── methodContextProvider.ts │ │ │ │ │ │ ├── moduleContextProvider.ts │ │ │ │ │ │ ├── nesRenameValidator.ts │ │ │ │ │ │ ├── nullContextProvider.ts │ │ │ │ │ │ ├── protocol.ts │ │ │ │ │ │ ├── sourceFileContextProvider.ts │ │ │ │ │ │ ├── types.ts │ │ │ │ │ │ ├── typescript.ts │ │ │ │ │ │ ├── typescripts.ts │ │ │ │ │ │ └── utils.ts │ │ │ │ │ └── node/ │ │ │ │ │ ├── create.ts │ │ │ │ │ ├── host.ts │ │ │ │ │ ├── main.ts │ │ │ │ │ └── test/ │ │ │ │ │ ├── languageServerProxy.ts │ │ │ │ │ ├── languageServices.ts │ │ │ │ │ ├── nes.spec.ts │ │ │ │ │ ├── simple.spec.ts │ │ │ │ │ └── testing.ts │ │ │ │ └── tsconfig.json │ │ │ └── vscode-node/ │ │ │ ├── inspector.ts │ │ │ ├── languageContextService.ts │ │ │ ├── nesRenameService.ts │ │ │ ├── throttledDebounce.ts │ │ │ └── types.ts │ │ ├── vscode.proposed.activeComment.d.ts │ │ ├── vscode.proposed.agentSessionsWorkspace.d.ts │ │ ├── vscode.proposed.aiRelatedInformation.d.ts │ │ ├── vscode.proposed.aiSettingsSearch.d.ts │ │ ├── vscode.proposed.aiTextSearchProvider.d.ts │ │ ├── vscode.proposed.authLearnMore.d.ts │ │ ├── vscode.proposed.chatBinaryReferenceData.d.ts │ │ ├── vscode.proposed.chatDebug.d.ts │ │ ├── vscode.proposed.chatHooks.d.ts │ │ ├── vscode.proposed.chatParticipantAdditions.d.ts │ │ ├── vscode.proposed.chatParticipantPrivate.d.ts │ │ ├── vscode.proposed.chatPromptFiles.d.ts │ │ ├── vscode.proposed.chatProvider.d.ts │ │ ├── vscode.proposed.chatReadonlyPromptReference.d.ts │ │ ├── vscode.proposed.chatReferenceBinaryData.d.ts │ │ ├── vscode.proposed.chatReferenceDiagnostic.d.ts │ │ ├── vscode.proposed.chatSessionsProvider.d.ts │ │ ├── vscode.proposed.chatStatusItem.d.ts │ │ ├── vscode.proposed.codeActionAI.d.ts │ │ ├── vscode.proposed.commentReveal.d.ts │ │ ├── vscode.proposed.contribChatEditorInlineGutterMenu.d.ts │ │ ├── vscode.proposed.contribCommentThreadAdditionalMenu.d.ts │ │ ├── vscode.proposed.contribCommentsViewThreadMenus.d.ts │ │ ├── vscode.proposed.contribDebugCreateConfiguration.d.ts │ │ ├── vscode.proposed.contribEditorContentMenu.d.ts │ │ ├── vscode.proposed.contribLanguageModelToolSets.d.ts │ │ ├── vscode.proposed.contribSourceControlInputBoxMenu.d.ts │ │ ├── vscode.proposed.dataChannels.d.ts │ │ ├── vscode.proposed.defaultChatParticipant.d.ts │ │ ├── vscode.proposed.devDeviceId.d.ts │ │ ├── vscode.proposed.documentFiltersExclusive.d.ts │ │ ├── vscode.proposed.embeddings.d.ts │ │ ├── vscode.proposed.environmentPower.d.ts │ │ ├── vscode.proposed.extensionsAny.d.ts │ │ ├── vscode.proposed.findFiles2.d.ts │ │ ├── vscode.proposed.findTextInFiles.d.ts │ │ ├── vscode.proposed.findTextInFiles2.d.ts │ │ ├── vscode.proposed.inlineCompletionsAdditions.d.ts │ │ ├── vscode.proposed.interactive.d.ts │ │ ├── vscode.proposed.languageModelCapabilities.d.ts │ │ ├── vscode.proposed.languageModelSystem.d.ts │ │ ├── vscode.proposed.languageModelThinkingPart.d.ts │ │ ├── vscode.proposed.languageModelToolResultAudience.d.ts │ │ ├── vscode.proposed.languageModelToolSupportsModel.d.ts │ │ ├── vscode.proposed.mappedEditsProvider.d.ts │ │ ├── vscode.proposed.mcpServerDefinitions.d.ts │ │ ├── vscode.proposed.newSymbolNamesProvider.d.ts │ │ ├── vscode.proposed.readonlyMessage.d.ts │ │ ├── vscode.proposed.resolvers.d.ts │ │ ├── vscode.proposed.scmInputBoxValueProvider.d.ts │ │ ├── vscode.proposed.tabInputMultiDiff.d.ts │ │ ├── vscode.proposed.taskExecutionTerminal.d.ts │ │ ├── vscode.proposed.taskProblemMatcherStatus.d.ts │ │ ├── vscode.proposed.terminalDataWriteEvent.d.ts │ │ ├── vscode.proposed.terminalExecuteCommandEvent.d.ts │ │ ├── vscode.proposed.terminalQuickFixProvider.d.ts │ │ ├── vscode.proposed.terminalSelection.d.ts │ │ ├── vscode.proposed.terminalTitle.d.ts │ │ ├── vscode.proposed.testObserver.d.ts │ │ ├── vscode.proposed.textDocumentChangeReason.d.ts │ │ ├── vscode.proposed.textSearchProvider.d.ts │ │ ├── vscode.proposed.textSearchProvider2.d.ts │ │ ├── vscode.proposed.workspaceTrust.d.ts │ │ ├── workspaceChunkSearch/ │ │ │ ├── node/ │ │ │ │ └── workspaceChunkSearch.contribution.ts │ │ │ └── vscode-node/ │ │ │ ├── commands.ts │ │ │ ├── workspaceChunkSearch.contribution.ts │ │ │ └── workspaceIndexingStatus.ts │ │ ├── workspaceRecorder/ │ │ │ ├── common/ │ │ │ │ ├── jsonlUtil.ts │ │ │ │ └── workspaceListenerService.ts │ │ │ └── vscode-node/ │ │ │ ├── safeFileWriteUtils.ts │ │ │ ├── utils.ts │ │ │ ├── utilsObservable.ts │ │ │ ├── workspaceListenerService.ts │ │ │ ├── workspaceRecorder.ts │ │ │ └── workspaceRecorderFeature.ts │ │ ├── workspaceSemanticSearch/ │ │ │ └── node/ │ │ │ ├── combinedRank.ts │ │ │ ├── semanticSearchTextSearchProvider.ts │ │ │ └── test/ │ │ │ └── ranking.spec.ts │ │ └── xtab/ │ │ ├── common/ │ │ │ ├── diffHistoryForPrompt.ts │ │ │ ├── inlineSuggestion.ts │ │ │ ├── lintErrors.ts │ │ │ ├── promptCrafting.ts │ │ │ ├── promptCraftingUtils.ts │ │ │ ├── recentFilesForPrompt.md │ │ │ ├── recentFilesForPrompt.ts │ │ │ ├── similarFilesContextService.ts │ │ │ ├── systemMessages.ts │ │ │ ├── tags.ts │ │ │ ├── terminalOutput.ts │ │ │ └── xtabCurrentDocument.ts │ │ ├── node/ │ │ │ ├── xtabCustomDiffPatchResponseHandler.ts │ │ │ ├── xtabEndpoint.ts │ │ │ ├── xtabNextCursorPredictor.ts │ │ │ ├── xtabProvider.ts │ │ │ └── xtabUtils.ts │ │ └── test/ │ │ ├── common/ │ │ │ ├── inlineSuggestion.spec.ts │ │ │ ├── lintErrors.spec.ts │ │ │ ├── promptCrafting.spec.ts │ │ │ ├── recentFilesForPrompt.snapshots.spec.ts │ │ │ ├── recentFilesForPrompt.spec.ts │ │ │ └── responseProcessor.spec.ts │ │ └── node/ │ │ ├── diffHistoryForPrompt.spec.ts │ │ ├── editIntent.spec.ts │ │ ├── xtabCustomDiffPatchResponseHandler.spec.ts │ │ ├── xtabNextCursorPredictor.spec.ts │ │ └── xtabProvider.spec.ts │ ├── lib/ │ │ ├── node/ │ │ │ └── chatLibMain.ts │ │ └── vscode-node/ │ │ └── test/ │ │ ├── getInlineCompletions.reply.txt │ │ ├── getInlineCompletions.spec.ts │ │ ├── nesProvider.reply.txt │ │ ├── nesProvider.spec.ts │ │ └── simpleExperimentationService.spec.ts │ ├── platform/ │ │ ├── authentication/ │ │ │ ├── common/ │ │ │ │ ├── authentication.ts │ │ │ │ ├── authenticationUpgrade.ts │ │ │ │ ├── authenticationUpgradeService.ts │ │ │ │ ├── copilotToken.ts │ │ │ │ ├── copilotTokenManager.ts │ │ │ │ ├── copilotTokenStore.ts │ │ │ │ └── staticGitHubAuthenticationService.ts │ │ │ ├── node/ │ │ │ │ └── copilotTokenManager.ts │ │ │ ├── test/ │ │ │ │ └── node/ │ │ │ │ ├── authentication.spec.ts │ │ │ │ ├── copilotToken.spec.ts │ │ │ │ └── simulationTestCopilotTokenManager.ts │ │ │ └── vscode-node/ │ │ │ ├── authenticationService.ts │ │ │ ├── copilotTokenManager.ts │ │ │ └── session.ts │ │ ├── chat/ │ │ │ ├── common/ │ │ │ │ ├── blockedExtensionService.ts │ │ │ │ ├── chatAgents.ts │ │ │ │ ├── chatDebugFileLoggerService.ts │ │ │ │ ├── chatHookService.ts │ │ │ │ ├── chatMLFetcher.ts │ │ │ │ ├── chatQuotaService.ts │ │ │ │ ├── chatQuotaServiceImpl.ts │ │ │ │ ├── chatSessionService.ts │ │ │ │ ├── commonTypes.ts │ │ │ │ ├── conversationOptions.ts │ │ │ │ ├── globalStringUtils.ts │ │ │ │ ├── hookCommandTypes.ts │ │ │ │ ├── hookExecutor.ts │ │ │ │ ├── hooksOutputChannel.ts │ │ │ │ ├── interactionService.ts │ │ │ │ ├── responses.ts │ │ │ │ └── sessionTranscriptService.ts │ │ │ ├── node/ │ │ │ │ └── hookExecutor.ts │ │ │ ├── test/ │ │ │ │ ├── common/ │ │ │ │ │ ├── mockChatMLFetcher.ts │ │ │ │ │ ├── staticChatMLFetcher.ts │ │ │ │ │ ├── streamingMockChatMLFetcher.ts │ │ │ │ │ └── testChatSessionService.ts │ │ │ │ └── node/ │ │ │ │ └── hookExecutor.spec.ts │ │ │ └── vscode/ │ │ │ └── chatSessionService.ts │ │ ├── chunking/ │ │ │ ├── common/ │ │ │ │ ├── chunk.ts │ │ │ │ ├── chunkingEndpointClient.ts │ │ │ │ ├── chunkingEndpointClientImpl.ts │ │ │ │ └── chunkingStringUtils.ts │ │ │ └── node/ │ │ │ ├── naiveChunker.ts │ │ │ ├── naiveChunkerService.ts │ │ │ └── test/ │ │ │ └── naiveChunker.spec.ts │ │ ├── commands/ │ │ │ ├── common/ │ │ │ │ ├── mockRunCommandExecutionService.ts │ │ │ │ └── runCommandExecutionService.ts │ │ │ └── vscode/ │ │ │ └── runCommandExecutionServiceImpl.ts │ │ ├── completions-core/ │ │ │ └── common/ │ │ │ └── openai/ │ │ │ └── copilotAnnotations.ts │ │ ├── configuration/ │ │ │ ├── common/ │ │ │ │ ├── configurationService.ts │ │ │ │ ├── defaultsOnlyConfigurationService.ts │ │ │ │ ├── jsonSchema.ts │ │ │ │ ├── jsonSchemaDraft7.ts │ │ │ │ └── validator.ts │ │ │ ├── test/ │ │ │ │ └── common/ │ │ │ │ ├── inMemoryConfigurationService.ts │ │ │ │ └── validator.spec.ts │ │ │ └── vscode/ │ │ │ └── configurationServiceImpl.ts │ │ ├── customInstructions/ │ │ │ ├── common/ │ │ │ │ ├── customInstructionsService.ts │ │ │ │ └── promptTypes.ts │ │ │ └── test/ │ │ │ └── node/ │ │ │ └── customInstructionsService.spec.ts │ │ ├── debug/ │ │ │ ├── common/ │ │ │ │ └── debugOutputService.ts │ │ │ └── vscode/ │ │ │ ├── debugOutputListener.ts │ │ │ └── debugOutputServiceImpl.ts │ │ ├── devcontainer/ │ │ │ └── common/ │ │ │ └── devContainerConfigurationService.ts │ │ ├── dialog/ │ │ │ ├── common/ │ │ │ │ └── dialogService.ts │ │ │ └── vscode/ │ │ │ └── dialogServiceImpl.ts │ │ ├── diff/ │ │ │ ├── common/ │ │ │ │ ├── diffService.ts │ │ │ │ └── diffWorker.ts │ │ │ └── node/ │ │ │ ├── diffServiceImpl.ts │ │ │ └── diffWorkerMain.ts │ │ ├── editSurvivalTracking/ │ │ │ ├── common/ │ │ │ │ ├── arcTracker.ts │ │ │ │ ├── editCollector.ts │ │ │ │ ├── editComputer.ts │ │ │ │ ├── editSurvivalReporter.ts │ │ │ │ ├── editSurvivalTracker.ts │ │ │ │ └── editSurvivalTrackerService.ts │ │ │ └── test/ │ │ │ └── common/ │ │ │ └── editCollector.spec.ts │ │ ├── editing/ │ │ │ ├── common/ │ │ │ │ ├── abstractText.ts │ │ │ │ ├── edit.ts │ │ │ │ ├── edits.ts │ │ │ │ ├── notebookDocumentSnapshot.ts │ │ │ │ ├── offsetLineColumnConverter.ts │ │ │ │ ├── positionOffsetTransformer.ts │ │ │ │ └── textDocumentSnapshot.ts │ │ │ └── node/ │ │ │ └── edits.spec.ts │ │ ├── embeddings/ │ │ │ ├── common/ │ │ │ │ ├── embeddingsComputer.ts │ │ │ │ ├── embeddingsGrouper.ts │ │ │ │ ├── embeddingsIndex.ts │ │ │ │ ├── embeddingsStorage.ts │ │ │ │ ├── remoteEmbeddingsComputer.ts │ │ │ │ └── vscodeIndex.ts │ │ │ └── test/ │ │ │ └── node/ │ │ │ ├── embeddingsGrouper.spec.ts │ │ │ └── packEmbedding.spec.ts │ │ ├── endpoint/ │ │ │ ├── common/ │ │ │ │ ├── capiClient.ts │ │ │ │ ├── chatModelCapabilities.ts │ │ │ │ ├── compactionDataContainer.tsx │ │ │ │ ├── domainService.ts │ │ │ │ ├── endpointProvider.ts │ │ │ │ ├── endpointTypes.ts │ │ │ │ ├── licenseAgreement.ts │ │ │ │ ├── modelAliasRegistry.ts │ │ │ │ ├── phaseDataContainer.tsx │ │ │ │ ├── statefulMarkerContainer.tsx │ │ │ │ └── thinkingDataContainer.tsx │ │ │ ├── node/ │ │ │ │ ├── autoChatEndpoint.ts │ │ │ │ ├── automodeService.ts │ │ │ │ ├── capiClientImpl.ts │ │ │ │ ├── chatEndpoint.ts │ │ │ │ ├── copilotChatEndpoint.ts │ │ │ │ ├── domainServiceImpl.ts │ │ │ │ ├── embeddingsEndpoint.ts │ │ │ │ ├── messagesApi.ts │ │ │ │ ├── modelMetadataFetcher.ts │ │ │ │ ├── proxy4oEndpoint.ts │ │ │ │ ├── proxyAgenticSearchEndpoint.ts │ │ │ │ ├── proxyInstantApplyShortEndpoint.ts │ │ │ │ ├── proxyModelHelper.ts │ │ │ │ ├── proxyXtabEndpoint.ts │ │ │ │ ├── responsesApi.ts │ │ │ │ ├── routerDecisionFetcher.ts │ │ │ │ └── test/ │ │ │ │ ├── automodeService.spec.ts │ │ │ │ ├── copilotChatEndpoint.spec.ts │ │ │ │ └── responsesApi.spec.ts │ │ │ ├── test/ │ │ │ │ └── node/ │ │ │ │ ├── __snapshots__/ │ │ │ │ │ └── stream.sseProcessor.spec.ts.snap │ │ │ │ ├── azureEndpoint.ts │ │ │ │ ├── capiEndpoint.ts │ │ │ │ ├── chatModelCapabilities.spec.ts │ │ │ │ ├── customNesEndpoint.ts │ │ │ │ ├── messagesApi.spec.ts │ │ │ │ ├── mockEndpoint.ts │ │ │ │ ├── openaiCompatibleEndpoint.ts │ │ │ │ ├── stream.splitChunk.spec.ts │ │ │ │ ├── stream.sseProcessor.spec.ts │ │ │ │ ├── test/ │ │ │ │ │ └── openaiCompatibleEndpoint.spec.ts │ │ │ │ └── testEndpointProvider.ts │ │ │ └── vscode-node/ │ │ │ ├── extChatEndpoint.ts │ │ │ ├── extChatTokenizer.ts │ │ │ └── test/ │ │ │ └── extChatTokenizer.spec.ts │ │ ├── env/ │ │ │ ├── common/ │ │ │ │ ├── envService.ts │ │ │ │ ├── nullEnvService.ts │ │ │ │ └── packagejson.ts │ │ │ ├── vscode/ │ │ │ │ └── envServiceImpl.ts │ │ │ └── vscode-node/ │ │ │ └── nativeEnvServiceImpl.ts │ │ ├── extContext/ │ │ │ └── common/ │ │ │ └── extensionContext.ts │ │ ├── extensions/ │ │ │ ├── common/ │ │ │ │ ├── extensionsService.ts │ │ │ │ └── packageJson.ts │ │ │ └── vscode/ │ │ │ └── extensionsService.ts │ │ ├── filesystem/ │ │ │ ├── common/ │ │ │ │ ├── fileSystemService.ts │ │ │ │ └── fileTypes.ts │ │ │ ├── node/ │ │ │ │ ├── fileSystemServiceImpl.ts │ │ │ │ └── test/ │ │ │ │ └── mockFileSystemService.ts │ │ │ └── vscode/ │ │ │ └── fileSystemServiceImpl.ts │ │ ├── git/ │ │ │ ├── common/ │ │ │ │ ├── gitCommitMessageService.ts │ │ │ │ ├── gitDiffService.ts │ │ │ │ ├── gitExtensionService.ts │ │ │ │ ├── gitService.ts │ │ │ │ ├── nullGitDiffService.ts │ │ │ │ ├── nullGitExtensionService.ts │ │ │ │ └── utils.ts │ │ │ ├── test/ │ │ │ │ └── node/ │ │ │ │ └── gitService.spec.ts │ │ │ └── vscode/ │ │ │ ├── git.d.ts │ │ │ ├── gitExtensionServiceImpl.ts │ │ │ └── gitServiceImpl.ts │ │ ├── github/ │ │ │ ├── common/ │ │ │ │ ├── githubAPI.ts │ │ │ │ ├── githubApiFetcherService.ts │ │ │ │ ├── githubService.ts │ │ │ │ ├── nullOctokitServiceImpl.ts │ │ │ │ └── octoKitServiceImpl.ts │ │ │ └── node/ │ │ │ └── githubRepositoryService.ts │ │ ├── ignore/ │ │ │ ├── common/ │ │ │ │ └── ignoreService.ts │ │ │ ├── node/ │ │ │ │ ├── ignoreFile.ts │ │ │ │ ├── ignoreServiceImpl.ts │ │ │ │ ├── remoteContentExclusion.ts │ │ │ │ └── test/ │ │ │ │ ├── mockAuthenticationService.ts │ │ │ │ ├── mockCAPIClientService.ts │ │ │ │ ├── mockGitService.ts │ │ │ │ ├── mockWorkspaceService.ts │ │ │ │ └── remoteContentExclusion.spec.ts │ │ │ ├── vscode/ │ │ │ │ └── ignoreInfoFileContentProvider.ts │ │ │ └── vscode-node/ │ │ │ └── ignoreService.ts │ │ ├── image/ │ │ │ ├── common/ │ │ │ │ └── imageService.ts │ │ │ ├── node/ │ │ │ │ └── imageServiceImpl.ts │ │ │ └── vscode-node/ │ │ │ └── imageServiceImpl.ts │ │ ├── inlineCompletions/ │ │ │ └── common/ │ │ │ └── api.ts │ │ ├── inlineEdits/ │ │ │ ├── common/ │ │ │ │ ├── dataTypes/ │ │ │ │ │ ├── codeActionData.ts │ │ │ │ │ ├── diagnosticData.ts │ │ │ │ │ ├── documentId.ts │ │ │ │ │ ├── edit.ts │ │ │ │ │ ├── editUtils.ts │ │ │ │ │ ├── fetchCancellationError.ts │ │ │ │ │ ├── importFilteringOptions.ts │ │ │ │ │ ├── inlineEditsModelsTypes.ts │ │ │ │ │ ├── jointCompletionsProviderOptions.ts │ │ │ │ │ ├── languageContext.ts │ │ │ │ │ ├── languageId.ts │ │ │ │ │ ├── nextCursorLinePrediction.ts │ │ │ │ │ ├── permutation.ts │ │ │ │ │ ├── rootedLineEdit.ts │ │ │ │ │ ├── textEditLength.ts │ │ │ │ │ ├── textEditLengthHelper/ │ │ │ │ │ │ ├── README.md │ │ │ │ │ │ ├── combineTextEditInfos.ts │ │ │ │ │ │ ├── length.ts │ │ │ │ │ │ └── textEditInfo.ts │ │ │ │ │ ├── triggerOptions.ts │ │ │ │ │ ├── xtabHistoryOptions.ts │ │ │ │ │ └── xtabPromptOptions.ts │ │ │ │ ├── debugRecorderBookmark.ts │ │ │ │ ├── editReason.ts │ │ │ │ ├── inlineEditLogContext.ts │ │ │ │ ├── inlineEditsModelService.ts │ │ │ │ ├── nesActivationStatusTelemetry.contribution.ts │ │ │ │ ├── notebook.ts │ │ │ │ ├── observableGit.ts │ │ │ │ ├── observableWorkspace.ts │ │ │ │ ├── responseProcessor.ts │ │ │ │ ├── statelessNextEditProvider.ts │ │ │ │ ├── statelessNextEditProviders.ts │ │ │ │ ├── utils/ │ │ │ │ │ ├── observable.ts │ │ │ │ │ ├── stringifyChatMessages.ts │ │ │ │ │ ├── tsExpr.ts │ │ │ │ │ └── utils.ts │ │ │ │ └── workspaceEditTracker/ │ │ │ │ ├── historyContextProvider.ts │ │ │ │ ├── nesHistoryContextProvider.ts │ │ │ │ ├── nesXtabHistoryTracker.ts │ │ │ │ ├── singleFileStaticWorkspaceEditTracker.ts │ │ │ │ ├── staticWorkspaceEditTracker.ts │ │ │ │ └── workspaceDocumentEditTracker.ts │ │ │ ├── node/ │ │ │ │ └── inlineEditsModelService.ts │ │ │ └── test/ │ │ │ ├── common/ │ │ │ │ ├── statelessNextEditProviers.spec.ts │ │ │ │ └── textEditLength.spec.ts │ │ │ └── node/ │ │ │ ├── edits.spec.ts │ │ │ └── random.ts │ │ ├── interactive/ │ │ │ ├── common/ │ │ │ │ └── interactiveSessionService.ts │ │ │ └── vscode/ │ │ │ └── interactiveSessionServiceImpl.ts │ │ ├── languageContextProvider/ │ │ │ └── common/ │ │ │ ├── languageContextProviderService.ts │ │ │ └── nullLanguageContextProviderService.ts │ │ ├── languageServer/ │ │ │ └── common/ │ │ │ └── languageContextService.ts │ │ ├── languages/ │ │ │ ├── common/ │ │ │ │ ├── languageDiagnosticsService.ts │ │ │ │ ├── languageFeaturesService.ts │ │ │ │ └── testLanguageDiagnosticsService.ts │ │ │ └── vscode/ │ │ │ ├── languageDiagnosticsServiceImpl.ts │ │ │ └── languageFeaturesServicesImpl.ts │ │ ├── log/ │ │ │ ├── common/ │ │ │ │ ├── logExecTime.ts │ │ │ │ ├── logService.ts │ │ │ │ └── messageStringify.ts │ │ │ ├── test/ │ │ │ │ └── common/ │ │ │ │ ├── loggerHelpers.ts │ │ │ │ └── subLogger.spec.ts │ │ │ └── vscode/ │ │ │ └── outputChannelLogTarget.ts │ │ ├── mcp/ │ │ │ ├── common/ │ │ │ │ └── mcpService.ts │ │ │ └── vscode/ │ │ │ ├── mcpServiceImpl.ts │ │ │ └── test/ │ │ │ └── mcpService.spec.ts │ │ ├── multiFileEdit/ │ │ │ └── common/ │ │ │ ├── editLogService.ts │ │ │ └── multiFileEditQualityTelemetry.ts │ │ ├── nesFetch/ │ │ │ ├── common/ │ │ │ │ ├── completionHelpers.ts │ │ │ │ ├── completionsAPI.ts │ │ │ │ ├── completionsFetchService.ts │ │ │ │ └── responseStream.ts │ │ │ └── node/ │ │ │ ├── completionsFetchServiceImpl.ts │ │ │ └── streamTransformer.ts │ │ ├── networking/ │ │ │ ├── common/ │ │ │ │ ├── anthropic.ts │ │ │ │ ├── fetch.ts │ │ │ │ ├── fetcherService.ts │ │ │ │ ├── networking.ts │ │ │ │ ├── openai.ts │ │ │ │ └── responseConvert.ts │ │ │ ├── node/ │ │ │ │ ├── baseFetchFetcher.ts │ │ │ │ ├── chatStream.ts │ │ │ │ ├── chatWebSocketManager.ts │ │ │ │ ├── chatWebSocketTelemetry.ts │ │ │ │ ├── fetcherFallback.ts │ │ │ │ ├── nodeFetchFetcher.ts │ │ │ │ ├── nodeFetcher.ts │ │ │ │ ├── stream.ts │ │ │ │ └── test/ │ │ │ │ ├── chatWebSocketManager.spec.ts │ │ │ │ ├── createWebSocket.spec.ts │ │ │ │ └── nodeFetcherService.ts │ │ │ ├── test/ │ │ │ │ └── node/ │ │ │ │ ├── fetcherFallback.spec.ts │ │ │ │ ├── headerContributors.spec.ts │ │ │ │ └── networking.spec.ts │ │ │ └── vscode-node/ │ │ │ ├── electronFetcher.ts │ │ │ ├── fetcherServiceImpl.ts │ │ │ └── test/ │ │ │ └── fetcherServiceCrash.spec.ts │ │ ├── notebook/ │ │ │ ├── common/ │ │ │ │ ├── alternativeContent.ts │ │ │ │ ├── alternativeContentEditGenerator.ts │ │ │ │ ├── alternativeContentFormat.ts │ │ │ │ ├── alternativeContentProvider.json.ts │ │ │ │ ├── alternativeContentProvider.text.ts │ │ │ │ ├── alternativeContentProvider.ts │ │ │ │ ├── alternativeContentProvider.xml.ts │ │ │ │ ├── alternativeNotebookDocument.ts │ │ │ │ ├── alternativeNotebookTextDocument.ts │ │ │ │ ├── helpers.ts │ │ │ │ ├── mockAlternativeContentService.ts │ │ │ │ ├── notebookDiff.ts │ │ │ │ ├── notebookService.ts │ │ │ │ ├── notebookSummaryTracker.ts │ │ │ │ └── offsetTranslator.ts │ │ │ ├── test/ │ │ │ │ ├── common/ │ │ │ │ │ └── offsetTranslator.spec.tsx │ │ │ │ └── node/ │ │ │ │ ├── __snapshots__/ │ │ │ │ │ └── alternativeNotebookTextDocument.spec.tsx.snap │ │ │ │ ├── alternativeContent.spec.ts │ │ │ │ ├── alternativeContentEditGenerator.spec.ts │ │ │ │ ├── alternativeNotebookTextDocument.spec.tsx │ │ │ │ ├── fixtures/ │ │ │ │ │ ├── circle_area_edits.altContent.json │ │ │ │ │ ├── circle_area_edits.altContent.text │ │ │ │ │ ├── circle_area_edits.altContent.xml │ │ │ │ │ ├── circle_area_edits_after.ipynb │ │ │ │ │ ├── circle_area_edits_before.ipynb │ │ │ │ │ ├── data_processing.altContent.json │ │ │ │ │ ├── data_processing.altContent.text │ │ │ │ │ ├── data_processing.altContent.xml │ │ │ │ │ ├── data_processing_2.altContent.json │ │ │ │ │ ├── data_processing_2.altContent.text │ │ │ │ │ ├── data_processing_2.altContent.xml │ │ │ │ │ ├── data_processing_2_after.ipynb │ │ │ │ │ ├── data_processing_2_before.ipynb │ │ │ │ │ ├── data_processing_after.ipynb │ │ │ │ │ ├── data_processing_before.ipynb │ │ │ │ │ ├── data_visualization.altContent.json │ │ │ │ │ ├── data_visualization.altContent.text │ │ │ │ │ ├── data_visualization.altContent.xml │ │ │ │ │ ├── data_visualization_2.altContent.json │ │ │ │ │ ├── data_visualization_2.altContent.text │ │ │ │ │ ├── data_visualization_2.altContent.xml │ │ │ │ │ ├── data_visualization_2_after.ipynb │ │ │ │ │ ├── data_visualization_2_before.ipynb │ │ │ │ │ ├── data_visualization_after.ipynb │ │ │ │ │ ├── data_visualization_before.ipynb │ │ │ │ │ ├── datacleansing.altContent.json │ │ │ │ │ ├── datacleansing.altContent.text │ │ │ │ │ ├── datacleansing.altContent.xml │ │ │ │ │ ├── datacleansing_after.ipynb │ │ │ │ │ ├── datacleansing_before.ipynb │ │ │ │ │ ├── dataframe.altContent.json │ │ │ │ │ ├── dataframe.altContent.text │ │ │ │ │ ├── dataframe.altContent.xml │ │ │ │ │ ├── dataframe_after.ipynb │ │ │ │ │ ├── dataframe_before.ipynb │ │ │ │ │ ├── delete_1_line_in_cell.altContent.text │ │ │ │ │ ├── delete_1_line_in_cell.altContent.xml │ │ │ │ │ ├── delete_1_line_in_cell_after.ipynb │ │ │ │ │ ├── delete_1_line_in_cell_before.ipynb │ │ │ │ │ ├── duplicateCellIds.ipynb │ │ │ │ │ ├── duplicateCellIds.xml │ │ │ │ │ ├── edit.altContent.json │ │ │ │ │ ├── edit.altContent.text │ │ │ │ │ ├── edit.altContent.xml │ │ │ │ │ ├── edit_after.ipynb │ │ │ │ │ ├── edit_before.ipynb │ │ │ │ │ ├── empty.altContent.json │ │ │ │ │ ├── empty.altContent.text │ │ │ │ │ ├── empty.altContent.xml │ │ │ │ │ ├── empty_after.ipynb │ │ │ │ │ ├── empty_before.ipynb │ │ │ │ │ ├── imports.altContent.json │ │ │ │ │ ├── imports.altContent.text │ │ │ │ │ ├── imports.altContent.xml │ │ │ │ │ ├── imports_after.ipynb │ │ │ │ │ ├── imports_before.ipynb │ │ │ │ │ ├── insert.1.ipynb.xml │ │ │ │ │ ├── insert.2.ipynb.xml │ │ │ │ │ ├── insert.3.ipynb.xml │ │ │ │ │ ├── insert.4.ipynb.xml │ │ │ │ │ ├── insert.ipynb │ │ │ │ │ ├── large_cell.altContent.json │ │ │ │ │ ├── large_cell.altContent.text │ │ │ │ │ ├── large_cell.altContent.xml │ │ │ │ │ ├── large_cell_after.ipynb │ │ │ │ │ ├── large_cell_before.ipynb │ │ │ │ │ ├── matplotlib_to_plotly_after.ipynb │ │ │ │ │ ├── matplotlib_to_plotly_before.ipynb │ │ │ │ │ ├── multicells.altContent.json │ │ │ │ │ ├── multicells.altContent.text │ │ │ │ │ ├── multicells.altContent.xml │ │ │ │ │ ├── multicells_after.ipynb │ │ │ │ │ ├── multicells_before.ipynb │ │ │ │ │ ├── plot.altContent.json │ │ │ │ │ ├── plot.altContent.text │ │ │ │ │ ├── plot.altContent.xml │ │ │ │ │ ├── plot_after.ipynb │ │ │ │ │ ├── plot_before.ipynb │ │ │ │ │ ├── plotly_to_matplotlib.altContent.text │ │ │ │ │ ├── plotly_to_matplotlib.altContent.xml │ │ │ │ │ ├── plotly_to_matplotlib_after.ipynb │ │ │ │ │ ├── plotly_to_matplotlib_before.ipynb │ │ │ │ │ ├── refactor.altContent.json │ │ │ │ │ ├── refactor.altContent.text │ │ │ │ │ ├── refactor.altContent.xml │ │ │ │ │ ├── refactor_after.ipynb │ │ │ │ │ ├── refactor_before.ipynb │ │ │ │ │ ├── reorder.altContent.json │ │ │ │ │ ├── reorder.altContent.text │ │ │ │ │ ├── reorder.altContent.xml │ │ │ │ │ ├── reorder_after.ipynb │ │ │ │ │ ├── reorder_before.ipynb │ │ │ │ │ ├── sample.github-issues │ │ │ │ │ ├── sample.github-issues.json │ │ │ │ │ ├── sample.github-issues.text │ │ │ │ │ ├── sample.github-issues.xml │ │ │ │ │ ├── sample.ipynb │ │ │ │ │ ├── sample.ipynb.json │ │ │ │ │ ├── sample.ipynb.text │ │ │ │ │ ├── sample.ipynb.xml │ │ │ │ │ ├── single.altContent.json │ │ │ │ │ ├── single.altContent.text │ │ │ │ │ ├── single.altContent.xml │ │ │ │ │ ├── single_after.ipynb │ │ │ │ │ ├── single_before.ipynb │ │ │ │ │ ├── swapping_cells.ipynb │ │ │ │ │ ├── variables.altContent.json │ │ │ │ │ ├── variables.altContent.text │ │ │ │ │ ├── variables.altContent.xml │ │ │ │ │ ├── variables_after.ipynb │ │ │ │ │ ├── variables_before.ipynb │ │ │ │ │ ├── withOutput.ipynb │ │ │ │ │ ├── withOutput.ipynb.json │ │ │ │ │ ├── withOutput.ipynb.text │ │ │ │ │ └── withOutput.ipynb.xml │ │ │ │ ├── notebookService.spec.ts │ │ │ │ └── utils.ts │ │ │ └── vscode/ │ │ │ ├── notebookExectionServiceImpl.ts │ │ │ ├── notebookServiceImpl.ts │ │ │ └── notebookSummaryTrackerImpl.ts │ │ ├── notification/ │ │ │ ├── common/ │ │ │ │ └── notificationService.ts │ │ │ └── vscode/ │ │ │ └── notificationServiceImpl.ts │ │ ├── open/ │ │ │ ├── common/ │ │ │ │ └── opener.ts │ │ │ └── vscode/ │ │ │ └── opener.ts │ │ ├── openai/ │ │ │ └── node/ │ │ │ ├── fetch.ts │ │ │ └── test/ │ │ │ └── chatTokens.spec.ts │ │ ├── otel/ │ │ │ ├── common/ │ │ │ │ ├── agentOTelEnv.ts │ │ │ │ ├── genAiAttributes.ts │ │ │ │ ├── genAiEvents.ts │ │ │ │ ├── genAiMetrics.ts │ │ │ │ ├── index.ts │ │ │ │ ├── messageFormatters.ts │ │ │ │ ├── noopOtelService.ts │ │ │ │ ├── otelConfig.ts │ │ │ │ ├── otelService.ts │ │ │ │ └── test/ │ │ │ │ ├── agentOTelEnv.spec.ts │ │ │ │ ├── agentTraceHierarchy.spec.ts │ │ │ │ ├── byokProviderSpans.spec.ts │ │ │ │ ├── capturingOTelService.ts │ │ │ │ ├── chatMLFetcherSpanLifecycle.spec.ts │ │ │ │ ├── genAiEvents.spec.ts │ │ │ │ ├── genAiMetrics.spec.ts │ │ │ │ ├── messageFormatters.spec.ts │ │ │ │ ├── noopOtelService.spec.ts │ │ │ │ ├── otelConfig.spec.ts │ │ │ │ └── serviceRobustness.spec.ts │ │ │ └── node/ │ │ │ ├── fileExporters.ts │ │ │ ├── inMemoryOTelService.ts │ │ │ ├── otelServiceImpl.ts │ │ │ └── test/ │ │ │ ├── fileExporters.spec.ts │ │ │ └── traceContextPropagation.spec.ts │ │ ├── parser/ │ │ │ ├── node/ │ │ │ │ ├── chunkGroupTypes.ts │ │ │ │ ├── docGenParsing.ts │ │ │ │ ├── indentationStructure.ts │ │ │ │ ├── languageLoader.ts │ │ │ │ ├── nodes.ts │ │ │ │ ├── parserImpl.ts │ │ │ │ ├── parserService.ts │ │ │ │ ├── parserServiceImpl.ts │ │ │ │ ├── parserWithCaching.ts │ │ │ │ ├── parserWorker.ts │ │ │ │ ├── querying.ts │ │ │ │ ├── selectionParsing.ts │ │ │ │ ├── structure.ts │ │ │ │ ├── testGenParsing.ts │ │ │ │ ├── treeSitterLanguages.ts │ │ │ │ ├── treeSitterQueries.ts │ │ │ │ └── util.ts │ │ │ └── test/ │ │ │ └── node/ │ │ │ ├── __snapshots__/ │ │ │ │ ├── getStructure.csharp.spec.ts.snap │ │ │ │ ├── getStructure.golang.spec.ts.snap │ │ │ │ ├── getStructure.js.spec.ts.snap │ │ │ │ ├── getStructure.py.spec.ts.snap │ │ │ │ ├── getStructure.ruby.spec.ts.snap │ │ │ │ ├── getStructure.ts.spec.ts.snap │ │ │ │ └── getStructure.tsx.spec.ts.snap │ │ │ ├── findLastTest/ │ │ │ │ ├── ts.spec.ts │ │ │ │ └── util.ts │ │ │ ├── fixtures/ │ │ │ │ ├── EditForm.tsx │ │ │ │ ├── chatSetup.ts │ │ │ │ ├── chatSetup.ts.getStructure.html │ │ │ │ ├── dllmain.cpp │ │ │ │ ├── dllmain.cpp.getStructure.html │ │ │ │ ├── problem1.cpp │ │ │ │ ├── problem1.cpp.getStructure.html │ │ │ │ ├── test.cpp │ │ │ │ ├── test.cpp.getStructure.html │ │ │ │ ├── test.cs │ │ │ │ ├── test.go │ │ │ │ ├── test.java │ │ │ │ ├── test.java.getStructure.html │ │ │ │ ├── test.js │ │ │ │ ├── test.py │ │ │ │ ├── test.rb │ │ │ │ ├── test.rs │ │ │ │ ├── test.rs.getStructure.html │ │ │ │ ├── test.tsx │ │ │ │ ├── try.py │ │ │ │ ├── try.py.getStructure.html │ │ │ │ ├── vscode.proposed.chatParticipantAdditions-annotated.d.ts.txt │ │ │ │ └── vscode.proposed.chatParticipantAdditions.d.ts │ │ │ ├── getNodeMatchingSelection.spec.ts │ │ │ ├── getNodeToDocument.cpp.spec.ts │ │ │ ├── getNodeToDocument.java.spec.ts │ │ │ ├── getNodeToDocument.ts.spec.ts │ │ │ ├── getNodeToDocument.util.ts │ │ │ ├── getParseErrorCount.spec.ts │ │ │ ├── getStructure.cpp.spec.ts │ │ │ ├── getStructure.csharp.spec.ts │ │ │ ├── getStructure.golang.spec.ts │ │ │ ├── getStructure.java.spec.ts │ │ │ ├── getStructure.js.spec.ts │ │ │ ├── getStructure.py.spec.ts │ │ │ ├── getStructure.ruby.spec.ts │ │ │ ├── getStructure.rust.spec.ts │ │ │ ├── getStructure.ts.spec.ts │ │ │ ├── getStructure.tsx.spec.ts │ │ │ ├── getStructure.util.ts │ │ │ ├── getTestableNode.js.spec.ts │ │ │ ├── getTestableNode.ts.spec.ts │ │ │ ├── getTestableNode.util.ts │ │ │ ├── getTestableNodes.ts.spec.ts │ │ │ ├── getTestableNodes.util.ts │ │ │ ├── indentationStructure.spec.ts │ │ │ ├── markers.ts │ │ │ └── parser.spec.ts │ │ ├── projectTemplatesIndex/ │ │ │ └── common/ │ │ │ └── projectTemplatesIndex.ts │ │ ├── promptFiles/ │ │ │ └── common/ │ │ │ ├── promptsService.ts │ │ │ └── promptsServiceImpl.ts │ │ ├── prompts/ │ │ │ ├── common/ │ │ │ │ └── promptPathRepresentationService.ts │ │ │ └── test/ │ │ │ └── node/ │ │ │ └── promptPathRepresentationService.spec.ts │ │ ├── proxyModels/ │ │ │ ├── common/ │ │ │ │ └── proxyModelsService.ts │ │ │ └── node/ │ │ │ └── proxyModelsService.ts │ │ ├── releaseNotes/ │ │ │ ├── common/ │ │ │ │ └── releaseNotesService.ts │ │ │ └── vscode/ │ │ │ └── releaseNotesServiceImpl.ts │ │ ├── remoteCodeSearch/ │ │ │ ├── common/ │ │ │ │ ├── adoCodeSearchService.ts │ │ │ │ ├── githubCodeSearchService.ts │ │ │ │ └── remoteCodeSearch.ts │ │ │ ├── node/ │ │ │ │ └── codeSearchRepoAuth.ts │ │ │ └── vscode-node/ │ │ │ └── codeSearchRepoAuth.ts │ │ ├── remoteRepositories/ │ │ │ ├── common/ │ │ │ │ └── utils.ts │ │ │ └── vscode/ │ │ │ └── remoteRepositories.ts │ │ ├── remoteSearch/ │ │ │ ├── common/ │ │ │ │ ├── codeOrDocsSearchClient.ts │ │ │ │ ├── codeOrDocsSearchErrors.ts │ │ │ │ └── utils.ts │ │ │ ├── node/ │ │ │ │ └── codeOrDocsSearchClientImpl.ts │ │ │ └── test/ │ │ │ └── node/ │ │ │ ├── codeOrDocsSearchErrors.spec.ts │ │ │ └── utils.spec.ts │ │ ├── requestLogger/ │ │ │ ├── common/ │ │ │ │ └── capturingToken.ts │ │ │ ├── node/ │ │ │ │ ├── nullRequestLogger.ts │ │ │ │ └── requestLogger.ts │ │ │ └── test/ │ │ │ └── node/ │ │ │ └── testRequestLogger.ts │ │ ├── review/ │ │ │ ├── common/ │ │ │ │ ├── reviewCommand.ts │ │ │ │ └── reviewService.ts │ │ │ └── vscode/ │ │ │ └── reviewServiceImpl.ts │ │ ├── scopeSelection/ │ │ │ ├── common/ │ │ │ │ └── scopeSelection.ts │ │ │ └── vscode-node/ │ │ │ └── scopeSelectionImpl.ts │ │ ├── search/ │ │ │ ├── common/ │ │ │ │ └── searchService.ts │ │ │ ├── vscode/ │ │ │ │ └── baseSearchServiceImpl.ts │ │ │ └── vscode-node/ │ │ │ └── searchServiceImpl.ts │ │ ├── settingsEditor/ │ │ │ └── common/ │ │ │ └── settingsEditorSearchService.ts │ │ ├── simulationTestContext/ │ │ │ └── common/ │ │ │ └── simulationTestContext.ts │ │ ├── snippy/ │ │ │ └── common/ │ │ │ ├── snippyCompute.ts │ │ │ ├── snippyFetcher.ts │ │ │ ├── snippyNotifier.ts │ │ │ ├── snippyService.ts │ │ │ ├── snippyServiceImpl.ts │ │ │ └── snippyTypes.ts │ │ ├── survey/ │ │ │ ├── common/ │ │ │ │ └── surveyService.ts │ │ │ └── vscode/ │ │ │ └── surveyServiceImpl.ts │ │ ├── tabs/ │ │ │ ├── common/ │ │ │ │ └── tabsAndEditorsService.ts │ │ │ └── vscode/ │ │ │ └── tabsAndEditorsServiceImpl.ts │ │ ├── tasks/ │ │ │ ├── common/ │ │ │ │ ├── tasksService.ts │ │ │ │ └── testTasksService.ts │ │ │ └── vscode/ │ │ │ └── tasksService.ts │ │ ├── telemetry/ │ │ │ ├── common/ │ │ │ │ ├── baseTelemetryService.ts │ │ │ │ ├── failingTelemetryReporter.ts │ │ │ │ ├── ghTelemetrySender.ts │ │ │ │ ├── ghTelemetryService.ts │ │ │ │ ├── msftTelemetrySender.ts │ │ │ │ ├── nullExperimentationService.ts │ │ │ │ ├── nullTelemetryService.ts │ │ │ │ ├── telemetry.ts │ │ │ │ └── telemetryData.ts │ │ │ ├── node/ │ │ │ │ ├── azureInsights.ts │ │ │ │ ├── azureInsightsReporter.ts │ │ │ │ ├── baseExperimentationService.ts │ │ │ │ └── spyingTelemetryService.ts │ │ │ ├── test/ │ │ │ │ └── node/ │ │ │ │ ├── experimentation.spec.ts │ │ │ │ ├── telemetry.spec.ts │ │ │ │ └── telemetry2.spec.ts │ │ │ └── vscode-node/ │ │ │ ├── githubTelemetrySender.ts │ │ │ ├── microsoftExperimentationService.ts │ │ │ ├── microsoftTelemetrySender.ts │ │ │ └── telemetryServiceImpl.ts │ │ ├── terminal/ │ │ │ ├── common/ │ │ │ │ └── terminalService.ts │ │ │ └── vscode/ │ │ │ ├── terminalBufferListener.ts │ │ │ └── terminalServiceImpl.ts │ │ ├── test/ │ │ │ ├── common/ │ │ │ │ ├── endpointTestFixtures.ts │ │ │ │ ├── testCustomInstructionsService.ts │ │ │ │ ├── testExtensionsService.ts │ │ │ │ └── testNotebookService.ts │ │ │ └── node/ │ │ │ ├── extensionContext.ts │ │ │ ├── fetcher.ts │ │ │ ├── isInExtensionHost.ts │ │ │ ├── promptContextModel.ts │ │ │ ├── services.ts │ │ │ ├── simulationWorkspace.ts │ │ │ ├── simulationWorkspaceServices.ts │ │ │ ├── telemetry.ts │ │ │ ├── telemetryFake.ts │ │ │ ├── testChatAgentService.ts │ │ │ ├── testHeaderContributor.ts │ │ │ ├── testWorkbenchService.ts │ │ │ └── testWorkspaceService.ts │ │ ├── testing/ │ │ │ ├── common/ │ │ │ │ ├── nullTestProvider.ts │ │ │ │ ├── nullWorkspaceMutationManager.ts │ │ │ │ ├── setupTestExtensions.ts │ │ │ │ ├── testLogService.ts │ │ │ │ ├── testProvider.ts │ │ │ │ └── workspaceMutationManager.ts │ │ │ ├── node/ │ │ │ │ ├── setupTestDetector.mmd │ │ │ │ ├── setupTestDetector.tsx │ │ │ │ └── testDepsResolver.ts │ │ │ ├── test/ │ │ │ │ └── node/ │ │ │ │ └── setupTestDetector.spec.ts │ │ │ └── vscode/ │ │ │ └── testProviderImpl.ts │ │ ├── tfidf/ │ │ │ └── node/ │ │ │ ├── test/ │ │ │ │ └── tfidf.spec.ts │ │ │ ├── tfidf.ts │ │ │ ├── tfidfMessaging.ts │ │ │ └── tfidfWorker.ts │ │ ├── thinking/ │ │ │ └── common/ │ │ │ ├── thinking.ts │ │ │ └── thinkingUtils.ts │ │ ├── tokenizer/ │ │ │ ├── node/ │ │ │ │ ├── cl100k_base.tiktoken │ │ │ │ ├── o200k_base.tiktoken │ │ │ │ ├── parseTikTokens.ts │ │ │ │ ├── promptTokenDetails.ts │ │ │ │ ├── tikTokenizerImpl.ts │ │ │ │ ├── tikTokenizerWorker.ts │ │ │ │ └── tokenizer.ts │ │ │ └── test/ │ │ │ └── node/ │ │ │ └── tokenizer.spec.ts │ │ ├── trajectory/ │ │ │ ├── common/ │ │ │ │ ├── trajectoryLogger.ts │ │ │ │ └── trajectoryTypes.ts │ │ │ └── node/ │ │ │ ├── trajectoryLogger.ts │ │ │ └── trajectoryLoggerAdapter.ts │ │ ├── urlChunkSearch/ │ │ │ └── node/ │ │ │ └── urlChunkEmbeddingsIndex.ts │ │ ├── workbench/ │ │ │ ├── common/ │ │ │ │ └── workbenchService.ts │ │ │ ├── test/ │ │ │ │ └── vscode-node/ │ │ │ │ └── workbenchServiceImpl.test.ts │ │ │ └── vscode/ │ │ │ └── workbenchServiceImpt.ts │ │ ├── workspace/ │ │ │ ├── common/ │ │ │ │ └── workspaceService.ts │ │ │ └── vscode/ │ │ │ └── workspaceServiceImpl.ts │ │ ├── workspaceChunkSearch/ │ │ │ ├── common/ │ │ │ │ ├── githubAvailableEmbeddingTypes.ts │ │ │ │ ├── rerankerService.ts │ │ │ │ └── workspaceChunkSearch.ts │ │ │ ├── node/ │ │ │ │ ├── codeSearch/ │ │ │ │ │ ├── codeSearchChunkSearch.ts │ │ │ │ │ ├── codeSearchRepo.ts │ │ │ │ │ ├── externalIngestClient.ts │ │ │ │ │ ├── externalIngestIndex.ts │ │ │ │ │ ├── repoTracker.ts │ │ │ │ │ ├── workspaceDiff.ts │ │ │ │ │ └── workspaceFolderIdMap.ts │ │ │ │ ├── embeddingsChunkSearch.ts │ │ │ │ ├── nullWorkspaceFileIndex.ts │ │ │ │ ├── tfidfChunkSearch.ts │ │ │ │ ├── tfidfWithSemanticChunkSearch.ts │ │ │ │ ├── workspaceChunkAndEmbeddingCache.ts │ │ │ │ ├── workspaceChunkEmbeddingsIndex.ts │ │ │ │ ├── workspaceChunkSearchService.ts │ │ │ │ └── workspaceFileIndex.ts │ │ │ └── test/ │ │ │ └── node/ │ │ │ ├── externalIngest.spec.ts │ │ │ ├── isMinified.spec.ts │ │ │ └── workspaceFolderIdMap.spec.ts │ │ ├── workspaceRecorder/ │ │ │ └── common/ │ │ │ ├── resolvedRecording/ │ │ │ │ ├── documentHistory.ts │ │ │ │ ├── operation.ts │ │ │ │ ├── resolvedRecording.ts │ │ │ │ └── sliceRecording.ts │ │ │ └── workspaceLog.ts │ │ └── workspaceState/ │ │ └── common/ │ │ └── promptContextModel.ts │ ├── util/ │ │ ├── common/ │ │ │ ├── annotatedLineRange.ts │ │ │ ├── anomalyDetection.ts │ │ │ ├── arrays.ts │ │ │ ├── async.ts │ │ │ ├── asyncIterableUtils.ts │ │ │ ├── backwardCompatSetting.ts │ │ │ ├── cache.ts │ │ │ ├── chatResponseStreamImpl.ts │ │ │ ├── crypto.ts │ │ │ ├── debounce.ts │ │ │ ├── debugValueEditorGlobals.ts │ │ │ ├── diff.ts │ │ │ ├── errorMessage.ts │ │ │ ├── errors.ts │ │ │ ├── fileSystem.ts │ │ │ ├── fileTree.ts │ │ │ ├── glob.ts │ │ │ ├── globals.d.ts │ │ │ ├── hexdump.ts │ │ │ ├── imageUtils.ts │ │ │ ├── languages.ts │ │ │ ├── lock.ts │ │ │ ├── markdown.ts │ │ │ ├── notebooks.ts │ │ │ ├── pathRedaction.ts │ │ │ ├── progress.ts │ │ │ ├── progressRecorder.ts │ │ │ ├── racePromise.ts │ │ │ ├── range.ts │ │ │ ├── result.ts │ │ │ ├── services.ts │ │ │ ├── taskSingler.ts │ │ │ ├── telemetryCorrelationId.ts │ │ │ ├── test/ │ │ │ │ ├── annotatedSrc.ts │ │ │ │ ├── async.spec.ts │ │ │ │ ├── common/ │ │ │ │ │ └── asyncIterableUtils.spec.ts │ │ │ │ ├── mockChatResponseStream.ts │ │ │ │ ├── notebooks.spec.ts │ │ │ │ ├── result.spec.ts │ │ │ │ ├── shims/ │ │ │ │ │ ├── chatTypes.ts │ │ │ │ │ ├── editing.ts │ │ │ │ │ ├── enums.ts │ │ │ │ │ ├── l10n.ts │ │ │ │ │ ├── newSymbolName.ts │ │ │ │ │ ├── notebookDocument.ts │ │ │ │ │ ├── notebookEditor.ts │ │ │ │ │ ├── terminal.ts │ │ │ │ │ ├── textDocument.ts │ │ │ │ │ ├── textEditor.ts │ │ │ │ │ ├── themes.ts │ │ │ │ │ └── vscodeTypesShim.ts │ │ │ │ ├── simpleMock.ts │ │ │ │ ├── testUtils.spec.ts │ │ │ │ └── testUtils.ts │ │ │ ├── time.ts │ │ │ ├── timeTravelScheduler.ts │ │ │ ├── tokenizer.ts │ │ │ ├── types.ts │ │ │ ├── variableLengthQuantity.ts │ │ │ └── vscodeVersion.ts │ │ ├── node/ │ │ │ ├── crypto.ts │ │ │ ├── jsonFile.ts │ │ │ ├── ports.ts │ │ │ ├── test/ │ │ │ │ ├── anomalyDetection.spec.ts │ │ │ │ ├── debounce.spec.ts │ │ │ │ ├── glob.spec.ts │ │ │ │ ├── lock.spec.ts │ │ │ │ ├── markdown.spec.ts │ │ │ │ └── pathRedaction.spec.ts │ │ │ └── worker.ts │ │ ├── test/ │ │ │ └── node/ │ │ │ ├── errorMessage.spec.ts │ │ │ └── variableLengthQuantity.spec.ts │ │ └── vs/ │ │ ├── base/ │ │ │ ├── common/ │ │ │ │ ├── arrays.ts │ │ │ │ ├── arraysFind.ts │ │ │ │ ├── assert.ts │ │ │ │ ├── async.ts │ │ │ │ ├── buffer.ts │ │ │ │ ├── cache.ts │ │ │ │ ├── cancellation.ts │ │ │ │ ├── charCode.ts │ │ │ │ ├── codicons.ts │ │ │ │ ├── codiconsLibrary.ts │ │ │ │ ├── codiconsUtil.ts │ │ │ │ ├── collections.ts │ │ │ │ ├── date.ts │ │ │ │ ├── diff/ │ │ │ │ │ ├── diff.ts │ │ │ │ │ └── diffChange.ts │ │ │ │ ├── equals.ts │ │ │ │ ├── errors.ts │ │ │ │ ├── event.ts │ │ │ │ ├── extpath.ts │ │ │ │ ├── filters.ts │ │ │ │ ├── functional.ts │ │ │ │ ├── glob.ts │ │ │ │ ├── hash.ts │ │ │ │ ├── htmlContent.ts │ │ │ │ ├── iconLabels.ts │ │ │ │ ├── iterator.ts │ │ │ │ ├── lazy.ts │ │ │ │ ├── lifecycle.ts │ │ │ │ ├── linkedList.ts │ │ │ │ ├── map.ts │ │ │ │ ├── marshallingIds.ts │ │ │ │ ├── mime.ts │ │ │ │ ├── naturalLanguage/ │ │ │ │ │ └── korean.ts │ │ │ │ ├── network.ts │ │ │ │ ├── normalization.ts │ │ │ │ ├── numbers.ts │ │ │ │ ├── objects.ts │ │ │ │ ├── observable.ts │ │ │ │ ├── observableInternal/ │ │ │ │ │ ├── base.ts │ │ │ │ │ ├── changeTracker.ts │ │ │ │ │ ├── commonFacade/ │ │ │ │ │ │ ├── cancellation.ts │ │ │ │ │ │ └── deps.ts │ │ │ │ │ ├── debugLocation.ts │ │ │ │ │ ├── debugName.ts │ │ │ │ │ ├── experimental/ │ │ │ │ │ │ └── utils.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── logging/ │ │ │ │ │ │ ├── consoleObservableLogger.ts │ │ │ │ │ │ ├── debugGetDependencyGraph.ts │ │ │ │ │ │ ├── debugger/ │ │ │ │ │ │ │ ├── debuggerApi.d.ts │ │ │ │ │ │ │ ├── debuggerRpc.ts │ │ │ │ │ │ │ ├── devToolsLogger.ts │ │ │ │ │ │ │ ├── rpc.ts │ │ │ │ │ │ │ └── utils.ts │ │ │ │ │ │ └── logging.ts │ │ │ │ │ ├── map.ts │ │ │ │ │ ├── observables/ │ │ │ │ │ │ ├── baseObservable.ts │ │ │ │ │ │ ├── constObservable.ts │ │ │ │ │ │ ├── derived.ts │ │ │ │ │ │ ├── derivedImpl.ts │ │ │ │ │ │ ├── lazyObservableValue.ts │ │ │ │ │ │ ├── observableFromEvent.ts │ │ │ │ │ │ ├── observableSignal.ts │ │ │ │ │ │ ├── observableSignalFromEvent.ts │ │ │ │ │ │ ├── observableValue.ts │ │ │ │ │ │ └── observableValueOpts.ts │ │ │ │ │ ├── reactions/ │ │ │ │ │ │ ├── autorun.ts │ │ │ │ │ │ └── autorunImpl.ts │ │ │ │ │ ├── set.ts │ │ │ │ │ ├── transaction.ts │ │ │ │ │ └── utils/ │ │ │ │ │ ├── promise.ts │ │ │ │ │ ├── runOnChange.ts │ │ │ │ │ ├── utils.ts │ │ │ │ │ ├── utilsCancellation.ts │ │ │ │ │ └── valueWithChangeEvent.ts │ │ │ │ ├── path.ts │ │ │ │ ├── platform.ts │ │ │ │ ├── process.ts │ │ │ │ ├── resources.ts │ │ │ │ ├── sequence.ts │ │ │ │ ├── sseParser.ts │ │ │ │ ├── stopwatch.ts │ │ │ │ ├── stream.ts │ │ │ │ ├── strings.ts │ │ │ │ ├── symbols.ts │ │ │ │ ├── ternarySearchTree.ts │ │ │ │ ├── themables.ts │ │ │ │ ├── types.ts │ │ │ │ ├── uint.ts │ │ │ │ ├── uri.ts │ │ │ │ ├── uuid.ts │ │ │ │ └── yaml.ts │ │ │ └── node/ │ │ │ └── ports.ts │ │ ├── base-common.d.ts │ │ ├── crypto.d.ts │ │ ├── editor/ │ │ │ └── common/ │ │ │ ├── core/ │ │ │
Showing preview only (2,650K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (27446 symbols across 2463 files)
FILE: .esbuild.ts
constant REPO_ROOT (line 13) | const REPO_ROOT = import.meta.dirname;
method setup (line 77) | setup(build) {
method setup (line 107) | setup(build) {
method setup (line 133) | setup(build) {
method setup (line 150) | setup(build) {
function typeScriptServerPluginPackageJsonInstall (line 259) | async function typeScriptServerPluginPackageJsonInstall(): Promise<void> {
function moveSourceMapsToSeparateDir (line 294) | async function moveSourceMapsToSeparateDir(): Promise<void> {
function main (line 326) | async function main() {
function applyPackageJsonPatch (line 417) | function applyPackageJsonPatch(isPreRelease: boolean) {
FILE: .eslintplugin/no-bad-gdpr-comment.ts
method create (line 10) | create(context: eslint.Rule.RuleContext): eslint.Rule.RuleListener {
FILE: .eslintplugin/no-funny-filename.ts
method create (line 12) | create(context: eslint.Rule.RuleContext): eslint.Rule.RuleListener {
FILE: .eslintplugin/no-gdpr-event-name-mismatch.ts
method create (line 18) | create(context: eslint.Rule.RuleContext): eslint.Rule.RuleListener {
FILE: .eslintplugin/no-instanceof-uri.ts
method create (line 20) | create(context: eslint.Rule.RuleContext): eslint.Rule.RuleListener {
FILE: .eslintplugin/no-missing-linebreak.ts
method create (line 16) | create(context: eslint.Rule.RuleContext): eslint.Rule.RuleListener {
FILE: .eslintplugin/no-nls-localize.ts
method create (line 21) | create(context: eslint.Rule.RuleContext): eslint.Rule.RuleListener {
FILE: .eslintplugin/no-restricted-copilot-pr-string.ts
method create (line 26) | create(context: eslint.Rule.RuleContext): eslint.Rule.RuleListener {
FILE: .eslintplugin/no-runtime-import.ts
method create (line 32) | create(context: eslint.Rule.RuleContext): eslint.Rule.RuleListener {
FILE: .eslintplugin/no-test-imports.ts
method create (line 14) | create(context: eslint.Rule.RuleContext): eslint.Rule.RuleListener {
FILE: .eslintplugin/no-test-only.ts
method create (line 10) | create(context: eslint.Rule.RuleContext): eslint.Rule.RuleListener {
FILE: .eslintplugin/no-unexternalized-strings.ts
function isStringLiteral (line 10) | function isStringLiteral(node: TSESTree.Node | ESTree.Node | null | unde...
function isDoubleQuoted (line 14) | function isDoubleQuoted(node: TSESTree.StringLiteral): boolean {
method create (line 42) | create(context: eslint.Rule.RuleContext): eslint.Rule.RuleListener {
FILE: .eslintplugin/no-unlayered-files.ts
method create (line 20) | create(context: eslint.Rule.RuleContext): eslint.Rule.RuleListener {
FILE: .eslintplugin/utils.ts
function createImportRuleListener (line 9) | function createImportRuleListener(validateImport: (node: TSESTree.Litera...
FILE: .vscode/extensions/test-extension/main.ts
function activate (line 20) | async function activate(context: vscode.ExtensionContext) {
function debugSimulation (line 237) | function debugSimulation<T>(options: ISpawnSimulationOptions, token: Can...
FILE: .vscode/extensions/visualization-runner/entry.js
function activate (line 14) | function activate(context) {
FILE: .vscode/extensions/visualization-runner/extension.ts
class Extension (line 12) | class Extension extends Disposable {
method constructor (line 31) | constructor() {
function isVisualizableTest (line 60) | function isVisualizableTest(info: TestInfo): boolean {
type TestInfo (line 64) | type TestInfo = {
function getTests (line 68) | function getTests(document: string): TestInfo[] {
FILE: build/listBuildCacheFiles.js
constant ROOT (line 17) | const ROOT = path.join(__dirname, '../');
function listAllFiles (line 23) | function listAllFiles(location, result) {
FILE: build/pr-check-cache-files.ts
type Commit (line 11) | type Commit = {
type PullRequestFile (line 25) | type PullRequestFile = {
type PullRequestCommit (line 30) | type PullRequestCommit = {
function getCommit (line 56) | async function getCommit(repository: string, sha: string): Promise<Commi...
function getPullRequestFiles (line 67) | async function getPullRequestFiles(repository: string, pullRequestNumber...
function getPullRequestCommits (line 78) | async function getPullRequestCommits(repository: string, pullRequestNumb...
function checkDatabaseFile (line 89) | async function checkDatabaseFile(files: ReadonlyArray<PullRequestFile>):...
function checkDatabaseLayerFiles (line 103) | async function checkDatabaseLayerFiles(repository: string, pullRequestNu...
function main (line 151) | async function main() {
FILE: chat-lib/script/postinstall.ts
function copyStaticAssets (line 9) | async function copyStaticAssets(srcpaths: string[], dst: string): Promis...
function fileExists (line 18) | async function fileExists(filePath: string): Promise<boolean> {
constant REPO_ROOT (line 41) | const REPO_ROOT = path.join(__dirname, '..');
function platformDir (line 43) | async function platformDir(): Promise<string> {
function treeSitterWasmDir (line 55) | function treeSitterWasmDir(): string {
function main (line 60) | async function main() {
FILE: script/alternativeAction/index.ts
function extractFromCsv (line 15) | async function extractFromCsv(csvContents: string): Promise<(Scoring.t |...
function writeFiles (line 55) | function writeFiles(basename: string, scoring: Scoring.t) {
function handleCsv (line 62) | async function handleCsv(inputFilePath: string) {
function parseFile (line 81) | function parseFile(fileContents: string): Either<IData, IAlternativeActi...
function handleAlternativeActionJson (line 96) | async function handleAlternativeActionJson(inputFilePath: string) {
function parseSuggestedEdit (line 126) | function parseSuggestedEdit(suggestedEditStr: string): [number, number, ...
function main (line 138) | async function main() {
FILE: script/alternativeAction/processor.ts
function createScoringForAlternativeAction (line 17) | function createScoringForAlternativeAction(
function splitRecordingAtRequestTime (line 67) | function splitRecordingAtRequestTime(altAction: IAlternativeAction): {
function documentIndexMapping (line 105) | function documentIndexMapping(recording: LogEntry[]): Map<number, string> {
function determineCurrentFileId (line 115) | function determineCurrentFileId(recording: LogEntry[]): number | undefin...
function getNextUserEdit (line 127) | function getNextUserEdit(currentFile: { id: number; relativePath: string...
FILE: script/alternativeAction/types.ts
type IStringReplacement (line 10) | type IStringReplacement = [start: number, endEx: number, text: string];
type IData (line 12) | type IData = {
type t (line 24) | type t = {
type t (line 32) | type t = {
type t (line 43) | type t = {
type t (line 52) | type t = {
function create (line 62) | function create(recording: Recording.t, edits: SuggestedEdit.t[]): Scori...
FILE: script/alternativeAction/util.ts
constant DEBUG (line 6) | const DEBUG = true;
function log (line 8) | function log(...args: any[]) {
function binarySearch (line 14) | function binarySearch<T>(
type Either (line 41) | type Either<L, R> = Left<L> | Right<R>;
function left (line 44) | function left<L>(value: L): Left<L> {
function right (line 48) | function right<R>(value: R): Right<R> {
class Left (line 57) | class Left<L> {
method constructor (line 58) | constructor(readonly value: L) { }
method isLeft (line 60) | isLeft(): this is Left<L> {
method isRight (line 64) | isRight(): this is Right<never> {
class Right (line 73) | class Right<R> {
method constructor (line 74) | constructor(readonly value: R) { }
method isLeft (line 76) | isLeft(): this is Left<never> {
method isRight (line 80) | isRight(): this is Right<R> {
FILE: script/analyzeEdits.ts
constant EDIT_TOOL_NAMES (line 11) | const EDIT_TOOL_NAMES = ['insert_edit_into_file', 'replace_string_in_fil...
constant CONTINUATION_TOOL_NAMES (line 14) | const CONTINUATION_TOOL_NAMES = ['read_file'];
type ToolCall (line 16) | interface ToolCall {
type EditOperation (line 33) | interface EditOperation {
type ConversationAnalysis (line 43) | interface ConversationAnalysis {
type RunAnalysis (line 54) | interface RunAnalysis {
function listRuns (line 64) | async function listRuns(amlOutPath: string): Promise<string[]> {
function promptUserForRun (line 74) | async function promptUserForRun(runs: string[]): Promise<string> {
function analyzeConversation (line 107) | async function analyzeConversation(conversationPath: string): Promise<Co...
function analyzeRun (line 206) | async function analyzeRun(runId: string, basePath: string): Promise<RunA...
function generateHTML (line 246) | function generateHTML(analysis: RunAnalysis, outputPath: string, include...
function main (line 690) | async function main() {
FILE: script/build/compressTikToken.ts
function compressTikToken (line 35) | async function compressTikToken(inputFile: string, outputFile: string) {
function assertOk (line 67) | function assertOk(outputFile: string, terms: Buffer[]) {
FILE: script/build/copyStaticAssets.ts
constant REPO_ROOT (line 9) | const REPO_ROOT = path.join(__dirname, '..', '..');
function copyStaticAssets (line 11) | async function copyStaticAssets(srcpaths: string[], dst: string): Promis...
FILE: script/build/downloadBinary.ts
constant REPO_ROOT (line 12) | const REPO_ROOT = path.join(__dirname, '..', '..');
type IBinary (line 14) | interface IBinary {
function ensureBinary (line 20) | async function ensureBinary(binary: IBinary) {
function computeSha256 (line 46) | function computeSha256(filePath: string): Promise<string> {
function downloadFile (line 56) | function downloadFile(url: string, tempPath: string, headers?: Record<st...
function get (line 81) | function get(url: string, opts: https.RequestOptions): Promise<string> {
function untar (line 109) | function untar(filePath: string, destination: string, strip?: number): P...
FILE: script/build/extractChatLib.ts
constant REPO_ROOT (line 13) | const REPO_ROOT = path.join(__dirname, '..', '..');
constant CHAT_LIB_DIR (line 14) | const CHAT_LIB_DIR = path.join(REPO_ROOT, 'chat-lib');
constant TARGET_DIR (line 15) | const TARGET_DIR = path.join(CHAT_LIB_DIR, 'src');
type FileInfo (line 34) | interface FileInfo {
class ChatLibExtractor (line 41) | class ChatLibExtractor {
method extract (line 46) | async extract(): Promise<void> {
method loadPathMappings (line 72) | private async loadPathMappings(): Promise<void> {
method cleanTargetDir (line 99) | private async cleanTargetDir(): Promise<void> {
method processEntryPoints (line 107) | private async processEntryPoints(): Promise<void> {
method extractDependencies (line 147) | private async extractDependencies(filePath: string): Promise<string[]> {
method resolvePathAlias (line 251) | private resolvePathAlias(importPath: string): string | null {
method resolveFileWithExtensions (line 271) | private resolveFileWithExtensions(basePath: string): string | null {
method resolveImportPath (line 310) | private resolveImportPath(fromFile: string, importPath: string): strin...
method normalizePath (line 364) | private normalizePath(filePath: string): string {
method getDestinationPath (line 369) | private getDestinationPath(filePath: string): string {
method copyFiles (line 376) | private async copyFiles(): Promise<void> {
method transformFileContent (line 398) | private transformFileContent(content: string, filePath: string): string {
method rewriteVscodeImports (line 432) | private rewriteVscodeImports(content: string, filePath: string): string {
method rewriteVscodeTypesImports (line 455) | private rewriteVscodeTypesImports(content: string, filePath: string): ...
method getVscodeTypesShimPath (line 481) | private getVscodeTypesShimPath(filePath: string): string {
method rewriteImportPath (line 501) | private rewriteImportPath(fromFile: string, importPath: string): string {
method generateModuleFiles (line 514) | private async generateModuleFiles(): Promise<void> {
method copyTestReplyFiles (line 539) | private async copyTestReplyFiles(): Promise<void> {
method updateChatLibTsConfig (line 557) | private async updateChatLibTsConfig(): Promise<void> {
method validateModule (line 615) | private async validateModule(): Promise<void> {
method copyVSCodeProposedTypes (line 636) | private async copyVSCodeProposedTypes(): Promise<void> {
method copyTikTokenFiles (line 654) | private async copyTikTokenFiles(): Promise<void> {
method copyRootPackageJson (line 672) | private async copyRootPackageJson(): Promise<void> {
method updateChatLibDependencies (line 685) | private async updateChatLibDependencies(): Promise<void> {
method compileTypeScript (line 839) | private async compileTypeScript(): Promise<void> {
function main (line 862) | async function main(): Promise<void> {
FILE: script/build/vscodeDtsCheck.js
function main (line 17) | function main() {
FILE: script/build/vscodeDtsUpdate.js
function resolveCommitSha (line 17) | function resolveCommitSha(branch) {
function main (line 36) | async function main() {
FILE: script/cleanLog.ts
function showHelp (line 9) | function showHelp(): void {
function parseArgs (line 32) | function parseArgs(args: string[]): { logTopic: string; filePath: string...
constant LOG_LINE_PATTERN (line 58) | const LOG_LINE_PATTERN = /^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3} \[/;
constant TIMESTAMP_PATTERN (line 60) | const TIMESTAMP_PATTERN = /^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3} /;
function stripTimestamp (line 62) | function stripTimestamp(line: string): string {
function escapeRegExp (line 66) | function escapeRegExp(value: string): string {
function filterLogByTopic (line 70) | function filterLogByTopic(content: string, topic: string): string {
function main (line 106) | function main() {
FILE: script/compareStestAlternativeRuns.ts
type BaselineTestResult (line 14) | interface BaselineTestResult {
type SignalKind (line 24) | enum SignalKind {
function getFromTestName (line 33) | function getFromTestName(testName: string): SignalKind | undefined {
type TestResult (line 42) | interface TestResult {
constant DEFAULT_PROVIDER_NAME (line 53) | const DEFAULT_PROVIDER_NAME = 'Default Provider';
function getFlavor (line 55) | function getFlavor(testResult: BaselineTestResult): string {
function computeTestResultsFromBaseline (line 70) | function computeTestResultsFromBaseline(baseline: BaselineTestResult[]):...
function formatAsBold (line 111) | function formatAsBold(text: string) {
function formatAsColored (line 115) | function formatAsColored(text: string, color: 'green' | 'violet' | 'red'...
function isBadSuggestionPassed (line 128) | function isBadSuggestionPassed(score: number): boolean {
function formatPassRatio (line 133) | function formatPassRatio(passed: number, total: number): string {
type TestScoreByFlavor (line 140) | type TestScoreByFlavor = Record<string /* flavor */, number | { oldScore...
type AggregatedTest (line 141) | type AggregatedTest = { test: string; scores: TestScoreByFlavor; signalK...
function printTable (line 143) | function printTable(data: AggregatedTest[], { compare, useColoredOutput,...
constant DEFAULT_BASELINE_JSON_PATH (line 357) | const DEFAULT_BASELINE_JSON_PATH = path.join(__dirname, '../test/simulat...
constant DEFAULT_BASELINE_OLD_JSON_PATH (line 358) | const DEFAULT_BASELINE_OLD_JSON_PATH = path.join(__dirname, '../test/sim...
function main (line 360) | async function main() {
FILE: script/electron/simulationWorkbenchMain.js
function createWindow (line 20) | function createWindow() {
function registerListeners (line 64) | function registerListeners() {
FILE: script/eslintGitBlameReport/generateEslintIgnoreReport.ts
type ESLintMessage (line 11) | interface ESLintMessage {
type ESLintResult (line 19) | interface ESLintResult {
type CommitHandleCache (line 24) | interface CommitHandleCache {
function main (line 45) | async function main(): Promise<void> {
function getLintResults (line 95) | async function getLintResults(): Promise<{ cacheKey: string; results: ES...
function runLintCommand (line 116) | function runLintCommand(): void {
function spawnOptions (line 130) | function spawnOptions(): SpawnSyncOptions {
function collectViolations (line 137) | function collectViolations(results: ESLintResult[]): Map<string, ESLintM...
function loadCommitHandles (line 154) | async function loadCommitHandles(): Promise<CommitHandleCache> {
type HandleResolution (line 168) | interface HandleResolution {
function resolveHandleForMessage (line 174) | async function resolveHandleForMessage(file: string, line: number, cache...
type CommitHandleLookup (line 215) | interface CommitHandleLookup {
function getHandleForCommit (line 221) | async function getHandleForCommit(commit: string | undefined, cache: Com...
function getHandleFromLocalGit (line 274) | function getHandleFromLocalGit(commit: string): string | undefined {
function extractHandleFromEmail (line 288) | function extractHandleFromEmail(email: string): string | undefined {
function normalizePossibleHandle (line 297) | function normalizePossibleHandle(name: string): string | undefined {
function normalizeHandle (line 305) | function normalizeHandle(handle: string): string {
function extractCommitHash (line 309) | function extractCommitHash(blameOutput: string): string | undefined {
function formatReportLine (line 323) | function formatReportLine(message: ESLintMessage, handle: string): string {
function updateEslintIgnores (line 337) | async function updateEslintIgnores(files: string[]): Promise<void> {
function toPosixPath (line 347) | function toPosixPath(input: string): string {
function runGit (line 351) | function runGit(args: string[]): string {
function fileExists (line 355) | async function fileExists(filePath: string): Promise<boolean> {
function resolveHandleFromAlternateRepo (line 364) | async function resolveHandleFromAlternateRepo(file: string): Promise<str...
function hasAlternateRepo (line 415) | async function hasAlternateRepo(): Promise<boolean> {
function runGitCommand (line 430) | function runGitCommand(cwd: string, args: string[]): string {
FILE: script/logRecordingTypes.ts
type LogDocumentId (line 8) | type LogDocumentId = number;
type LogEntry (line 10) | type LogEntry =
type DocumentLogEntry (line 27) | type DocumentLogEntry = { id: LogDocumentId; time: number };
function is (line 29) | function is(entry: unknown): entry is DocumentLogEntry {
type HeaderLogEntry (line 35) | type HeaderLogEntry = { documentType: "workspaceRecording@1.0"; kind: 'h...
type ApplicationStartLogEntry (line 37) | type ApplicationStartLogEntry = { kind: 'applicationStart'; time: number };
type DocumentSetContentLogEntry (line 39) | type DocumentSetContentLogEntry = DocumentLogEntry & { kind: 'setContent...
type DocumentStoreContentLogEntry (line 41) | type DocumentStoreContentLogEntry = DocumentLogEntry & { kind: 'storeCon...
type DocumentRestoreContentLogEntry (line 44) | type DocumentRestoreContentLogEntry = DocumentLogEntry & { kind: 'restor...
type DocumentOpenedLogEntry (line 46) | type DocumentOpenedLogEntry = DocumentLogEntry & { kind: 'opened' };
type DocumentClosedLogEntry (line 48) | type DocumentClosedLogEntry = DocumentLogEntry & { kind: 'closed' };
type DocumentChangedLogEntry (line 50) | type DocumentChangedLogEntry = DocumentLogEntry & { kind: 'changed'; edi...
type DocumentFocusChangedLogEntry (line 52) | type DocumentFocusChangedLogEntry = DocumentLogEntry & { kind: 'focused' };
type DocumentSelectionChangedLogEntry (line 54) | type DocumentSelectionChangedLogEntry = DocumentLogEntry & { kind: 'sele...
type DocumentEncounteredLogEntry (line 56) | type DocumentEncounteredLogEntry = DocumentLogEntry & { kind: 'documentE...
type DocumentEventLogEntry (line 58) | type DocumentEventLogEntry = DocumentLogEntry & { kind: 'documentEvent';...
type EventLogEntry (line 60) | type EventLogEntry = { kind: 'event'; time: number; data: unknown };
type MetaLogEntry (line 62) | type MetaLogEntry = { kind: 'meta'; data: unknown | { repoRootUri: strin...
type BookmarkLogEntry (line 64) | type BookmarkLogEntry = { kind: 'bookmark'; time: number };
type ISerializedOffsetRange (line 69) | type ISerializedOffsetRange = [start: number, endEx: number];
type ISerializedEdit (line 70) | type ISerializedEdit = [start: number, endEx: number, text: string][];
FILE: script/postinstall.ts
type ITreeSitterGrammar (line 11) | interface ITreeSitterGrammar {
constant REPO_ROOT (line 62) | const REPO_ROOT = path.join(__dirname, '..');
function copyCopilotCliWorkerFiles (line 68) | async function copyCopilotCliWorkerFiles() {
function copyCopilotCliSharpFiles (line 75) | async function copyCopilotCliSharpFiles() {
function copyCopilotCliDefinitionFiles (line 82) | async function copyCopilotCliDefinitionFiles() {
function copyCopilotCLIFolders (line 89) | async function copyCopilotCLIFolders(sourceDir: string, targetDir: strin...
function main (line 95) | async function main() {
FILE: script/scoredEditsReconciler.ts
function main (line 10) | async function main() {
function scoredEditsWithMergeConflicts (line 57) | async function scoredEditsWithMergeConflicts(): Promise<string[]> /* pat...
function findFilesWithMergeConflicts (line 62) | async function findFilesWithMergeConflicts() {
function resolveMergeConflictFromFile (line 77) | async function resolveMergeConflictFromFile(filePath: string) {
function resolveMergeConflict (line 82) | function resolveMergeConflict(fileContents: string): string {
function removeNonHeadSections (line 109) | function removeNonHeadSections(fileContents: string) {
function removeHeadSections (line 126) | function removeHeadSections(fileContents: string) {
FILE: script/setup/copySources.ts
constant VS_ROOT (line 10) | const VS_ROOT = join(__dirname, '../../../vscode/src');
constant TARGET (line 11) | const TARGET = join(__dirname, '../../src/util/vs');
function determineTargetPath (line 16) | function determineTargetPath(absoluteVSCodeFilePath: string): string {
function createRelativeImportPath (line 32) | function createRelativeImportPath(currentFilePath: string, importedFileP...
function doIt (line 38) | async function doIt(filepaths: string[]) {
FILE: script/testGeneration/editFromPatchTests.ts
function main (line 12) | async function main(simulationFolder: string | undefined, all: boolean |...
function findLastRun (line 96) | async function findLastRun(simulationsRootFolder: string): Promise<strin...
function checkExists (line 101) | async function checkExists(filePath: string): Promise<boolean> {
FILE: src/extension/agentDebug/common/toolResultRenderer.ts
type IToolResultContentRenderer (line 15) | interface IToolResultContentRenderer {
FILE: src/extension/agentDebug/vscode-node/toolResultContentRenderer.ts
class ToolResultContentRenderer (line 10) | class ToolResultContentRenderer implements IToolResultContentRenderer {
method renderToolResultContent (line 13) | renderToolResultContent(content: Iterable<unknown>): string[] {
FILE: src/extension/agents/node/adapters/anthropicAdapter.ts
class AnthropicAdapterFactory (line 15) | class AnthropicAdapterFactory implements IProtocolAdapterFactory {
method createAdapter (line 16) | createAdapter(): IProtocolAdapter {
class AnthropicAdapter (line 21) | class AnthropicAdapter implements IProtocolAdapter {
method parseRequest (line 28) | parseRequest(body: string): IParsedRequest {
method formatStreamResponse (line 77) | formatStreamResponse(
method generateFinalEvents (line 179) | generateFinalEvents(context: IStreamingContext, usage?: APIUsage): ISt...
method adjustTokenUsageForContextWindow (line 229) | private adjustTokenUsageForContextWindow(context: IStreamingContext, u...
method generateInitialEvents (line 263) | generateInitialEvents(context: IStreamingContext): IStreamEventData[] {
method getContentType (line 298) | getContentType(): string {
method extractAuthKey (line 302) | extractAuthKey(headers: http.IncomingHttpHeaders): string | undefined {
method formatEventData (line 306) | private formatEventData(data: unknown): string {
FILE: src/extension/agents/node/adapters/openaiAdapterForSTests.ts
class OpenAIAdapterFactoryForSTests (line 16) | class OpenAIAdapterFactoryForSTests implements IProtocolAdapterFactory {
method createAdapter (line 19) | createAdapter(): IProtocolAdapter {
method addHooks (line 22) | public addHooks(requestHook?: (body: string) => string, responseHook?:...
class OpenAIAdapterForSTests (line 32) | class OpenAIAdapterForSTests implements IProtocolAdapter {
method constructor (line 39) | constructor(private readonly requestHooks: ((body: string) => string)[...
method parseRequest (line 43) | parseRequest(body: string): IParsedRequest {
method collectTextContent (line 112) | private collectTextContent(context: IStreamingContext, content: string...
method getCollectedTextContent (line 116) | private getCollectedTextContent(context: IStreamingContext): IStreamEv...
method formatStreamResponse (line 145) | formatStreamResponse(
method generateFinalEvents (line 208) | generateFinalEvents(context: IStreamingContext, usage?: APIUsage): ISt...
method generateInitialEvents (line 246) | generateInitialEvents(context: IStreamingContext): IStreamEventData[] {
method getContentType (line 251) | getContentType(): string {
method extractAuthKey (line 255) | extractAuthKey(headers: http.IncomingHttpHeaders): string | undefined {
method formatEventData (line 261) | private formatEventData(data: unknown): string {
function responseApiInputToRawMessages (line 265) | function responseApiInputToRawMessages(messages: ChatCompletionMessagePa...
FILE: src/extension/agents/node/adapters/types.ts
type IParsedRequest (line 11) | interface IParsedRequest {
type IStreamEventData (line 18) | interface IStreamEventData {
type IAgentTextBlock (line 23) | interface IAgentTextBlock {
type IAgentToolCallBlock (line 28) | interface IAgentToolCallBlock {
type IAgentStreamBlock (line 35) | type IAgentStreamBlock = IAgentTextBlock | IAgentToolCallBlock;
type IProtocolAdapter (line 37) | interface IProtocolAdapter {
type IProtocolAdapterFactory (line 77) | interface IProtocolAdapterFactory {
type IStreamingContext (line 84) | interface IStreamingContext {
FILE: src/extension/agents/node/langModelServer.ts
type ILanguageModelServerConfig (line 20) | interface ILanguageModelServerConfig {
type ILanguageModelServer (line 26) | interface ILanguageModelServer {
class LanguageModelServer (line 33) | class LanguageModelServer implements ILanguageModelServer {
method constructor (line 40) | constructor(
method createServer (line 54) | private createServer(): http.Server {
method parseUrlPathname (line 116) | private parseUrlPathname(url: string): string {
method getAdapterFactoryForPath (line 125) | private getAdapterFactoryForPath(url: string): IProtocolAdapterFactory...
method readRequestBody (line 130) | private async readRequestBody(req: http.IncomingMessage): Promise<stri...
method handleChatRequest (line 143) | private async handleChatRequest(adapter: IProtocolAdapter, body: strin...
method selectEndpoint (line 290) | private selectEndpoint(endpoints: readonly IChatEndpoint[], requestedM...
method start (line 323) | public async start(): Promise<void> {
method stop (line 339) | public stop(): void {
method getConfig (line 343) | public getConfig(): ILanguageModelServerConfig {
FILE: src/extension/agents/node/test/mockLanguageModelServer.ts
class MockLanguageModelServer (line 12) | class MockLanguageModelServer extends LanguageModelServer {
method start (line 15) | override async start(): Promise<void> {
method setMockConfig (line 18) | setMockConfig(cfg: ILanguageModelServerConfig) { this._cfg = cfg; }
method getConfig (line 20) | override getConfig(): ILanguageModelServerConfig { return this._cfg; }
FILE: src/extension/agents/vscode-node/agentCustomizationSkillProvider.ts
constant USER_PROMPTS_FOLDER_PLACEHOLDER (line 11) | const USER_PROMPTS_FOLDER_PLACEHOLDER = '{{USER_PROMPTS_FOLDER}}';
class AgentCustomizationSkillProvider (line 17) | class AgentCustomizationSkillProvider extends BaseSkillProvider {
method constructor (line 21) | constructor(
method getUserPromptsFolder (line 28) | private getUserPromptsFolder(): string {
method processTemplate (line 36) | protected override processTemplate(templateContent: string): string {
method getSkillContentBytes (line 42) | protected override async getSkillContentBytes(): Promise<Uint8Array> {
FILE: src/extension/agents/vscode-node/agentTypes.ts
type AgentHandoff (line 9) | interface AgentHandoff {
type AgentConfig (line 22) | interface AgentConfig {
constant DEFAULT_READ_TOOLS (line 40) | const DEFAULT_READ_TOOLS: readonly string[] = [
function buildAgentMarkdown (line 56) | function buildAgentMarkdown(config: AgentConfig): string {
FILE: src/extension/agents/vscode-node/askAgentProvider.ts
constant BASE_ASK_AGENT_CONFIG (line 20) | const BASE_ASK_AGENT_CONFIG: AgentConfig = {
class AskAgentProvider (line 42) | class AskAgentProvider extends Disposable implements vscode.ChatCustomAg...
method constructor (line 51) | constructor(
method provideCustomAgents (line 67) | async provideCustomAgents(
method _writeCacheFile (line 77) | private async _writeCacheFile(content: string): Promise<vscode.Uri> {
method buildAgentBody (line 95) | static buildAgentBody(): string {
method _buildCustomizedConfig (line 129) | private _buildCustomizedConfig(): AgentConfig {
FILE: src/extension/agents/vscode-node/baseSkillProvider.ts
method constructor (line 27) | constructor(
method getSkillContentBytes (line 50) | protected async getSkillContentBytes(): Promise<Uint8Array> {
method provideSkills (line 71) | async provideSkills(_context: unknown, token: vscode.CancellationToken):...
FILE: src/extension/agents/vscode-node/editModeAgentProvider.ts
constant BASE_EDIT_MODE_AGENT_CONFIG (line 14) | const BASE_EDIT_MODE_AGENT_CONFIG: AgentConfig = {
class EditModeAgentProvider (line 49) | class EditModeAgentProvider extends Disposable implements vscode.ChatCus...
method constructor (line 55) | constructor(
method provideCustomAgents (line 63) | async provideCustomAgents(
method _writeCacheFile (line 72) | private async _writeCacheFile(content: string): Promise<vscode.Uri> {
FILE: src/extension/agents/vscode-node/exploreAgentProvider.ts
constant EXPLORE_AGENT_FALLBACK_MODELS (line 19) | const EXPLORE_AGENT_FALLBACK_MODELS: readonly string[] = [
constant BASE_EXPLORE_AGENT_CONFIG (line 30) | const BASE_EXPLORE_AGENT_CONFIG: AgentConfig = {
class ExploreAgentProvider (line 50) | class ExploreAgentProvider extends Disposable implements vscode.ChatCust...
method constructor (line 59) | constructor(
method provideCustomAgents (line 75) | async provideCustomAgents(
method _writeCacheFile (line 85) | private async _writeCacheFile(content: string): Promise<vscode.Uri> {
method buildAgentBody (line 103) | static buildAgentBody(): string {
method _buildCustomizedConfig (line 135) | private _buildCustomizedConfig(): AgentConfig {
FILE: src/extension/agents/vscode-node/githubOrgChatResourcesService.ts
type IGitHubOrgChatResourcesService (line 19) | interface IGitHubOrgChatResourcesService extends IDisposable {
function getCacheSubdirectory (line 64) | function getCacheSubdirectory(type: PromptsType): string {
function isValidFile (line 78) | function isValidFile(type: PromptsType, fileName: string): boolean {
class GitHubOrgChatResourcesService (line 89) | class GitHubOrgChatResourcesService extends Disposable implements IGitHu...
method constructor (line 95) | constructor(
method getPreferredOrganizationName (line 119) | async getPreferredOrganizationName(): Promise<string | undefined> {
method computePreferredOrganizationName (line 126) | private async computePreferredOrganizationName(): Promise<string | und...
method getWorkspaceRepositoryOrganization (line 173) | private async getWorkspaceRepositoryOrganization(): Promise<string | u...
method startPolling (line 205) | startPolling(intervalMs: number, callback: (orgName: string) => Promis...
method getCacheDir (line 241) | private getCacheDir(orgName: string, type: PromptsType): vscode.Uri {
method getCacheFileUri (line 252) | private getCacheFileUri(orgName: string, type: PromptsType, filename: ...
method sanitizeFilename (line 256) | private sanitizeFilename(name: string): string {
method ensureCacheDir (line 260) | private async ensureCacheDir(orgName: string, type: PromptsType): Prom...
method readCacheFile (line 270) | async readCacheFile(type: PromptsType, orgName: string, filename: stri...
method writeCacheFile (line 281) | async writeCacheFile(type: PromptsType, orgName: string, filename: str...
method clearCache (line 319) | async clearCache(type: PromptsType, orgName: string, exclude?: Set<str...
method listCachedFiles (line 335) | async listCachedFiles(type: PromptsType, orgName: string): Promise<vsc...
FILE: src/extension/agents/vscode-node/githubOrgCustomAgentProvider.ts
constant REFRESH_INTERVAL_MS (line 18) | const REFRESH_INTERVAL_MS = 5 * 60 * 1000;
class GitHubOrgCustomAgentProvider (line 20) | class GitHubOrgCustomAgentProvider extends Disposable implements vscode....
method constructor (line 24) | constructor(
method provideCustomAgents (line 35) | async provideCustomAgents(_context: unknown, token: vscode.Cancellatio...
method pollAgents (line 55) | private async pollAgents(orgId: string): Promise<void> {
method generateAgentMarkdown (line 118) | private generateAgentMarkdown(agent: CustomAgentDetails): string {
function yamlString (line 164) | function yamlString(value: string): string | Scalar {
function looksLikeNumber (line 204) | function looksLikeNumber(value: string): boolean {
FILE: src/extension/agents/vscode-node/githubOrgInstructionsProvider.ts
constant INSTRUCTIONS_BASE_FILE_NAME (line 13) | const INSTRUCTIONS_BASE_FILE_NAME = 'default';
constant REFRESH_INTERVAL_MS (line 14) | const REFRESH_INTERVAL_MS = 2 * 60 * 1000;
class GitHubOrgInstructionsProvider (line 16) | class GitHubOrgInstructionsProvider extends Disposable implements vscode...
method constructor (line 21) | constructor(
method provideInstructions (line 32) | async provideInstructions(
method pollInstructions (line 55) | private async pollInstructions(orgId: string): Promise<void> {
FILE: src/extension/agents/vscode-node/planAgentProvider.ts
constant BASE_PLAN_AGENT_CONFIG (line 19) | const BASE_PLAN_AGENT_CONFIG: AgentConfig = {
class PlanAgentProvider (line 41) | class PlanAgentProvider extends Disposable implements vscode.ChatCustomA...
method constructor (line 50) | constructor(
method provideCustomAgents (line 72) | async provideCustomAgents(
method writeCacheFile (line 87) | private async writeCacheFile(content: string): Promise<vscode.Uri> {
method buildAgentBody (line 106) | static buildAgentBody(): string {
method buildCustomizedConfig (line 198) | private buildCustomizedConfig(): AgentConfig {
FILE: src/extension/agents/vscode-node/promptFileContrib.ts
class PromptFileContribution (line 21) | class PromptFileContribution extends Disposable implements IExtensionCon...
method constructor (line 24) | constructor(
FILE: src/extension/agents/vscode-node/skillFsProviderHelper.ts
constant SKILL_FILENAME (line 10) | const SKILL_FILENAME = 'SKILL.md';
constant SKILL_SCHEME (line 11) | const SKILL_SCHEME = 'copilot-skill';
type IDynamicSkillFolder (line 13) | interface IDynamicSkillFolder {
class SkillFsProvider (line 18) | class SkillFsProvider implements vscode.FileSystemProvider {
method constructor (line 25) | constructor(
method registerDynamicSkill (line 30) | public registerDynamicSkill(dynamicSkill: IDynamicSkillFolder): vscode...
method watch (line 40) | watch(_uri: vscode.Uri, _options: { readonly recursive: boolean; reado...
method stat (line 44) | async stat(uri: vscode.Uri): Promise<vscode.FileStat> {
method readDirectory (line 91) | async readDirectory(uri: vscode.Uri): Promise<[string, vscode.FileType...
method createDirectory (line 123) | createDirectory(_uri: vscode.Uri): void {
method readFile (line 127) | async readFile(uri: vscode.Uri): Promise<Uint8Array> {
method writeFile (line 146) | writeFile(_uri: vscode.Uri, _content: Uint8Array, _options: { readonly...
method delete (line 150) | delete(_uri: vscode.Uri, _options: { readonly recursive: boolean }): v...
method rename (line 154) | rename(_oldUri: vscode.Uri, _newUri: vscode.Uri, _options: { readonly ...
method toAssetUri (line 158) | private toAssetUri(folderName: string, relativePath: string): vscode.U...
method parseSkillUri (line 170) | private parseSkillUri(uri: vscode.Uri):
function getOrCreateSharedFsProvider (line 203) | function getOrCreateSharedFsProvider(
function registerDynamicSkillFolder (line 215) | function registerDynamicSkillFolder(
FILE: src/extension/agents/vscode-node/test/askAgentProvider.spec.ts
function createProvider (line 48) | function createProvider() {
function getAgentContent (line 54) | async function getAgentContent(agent: vscode.ChatResource): Promise<stri...
FILE: src/extension/agents/vscode-node/test/githubOrgChatResourcesService.spec.ts
function createService (line 60) | function createService(): GitHubOrgChatResourcesService {
FILE: src/extension/agents/vscode-node/test/githubOrgCustomAgentProvider.spec.ts
function createProvider (line 73) | function createProvider() {
function waitForPolling (line 100) | async function waitForPolling(): Promise<void> {
function prepopulateCache (line 108) | function prepopulateCache(orgName: string, files: Map<string, string>): ...
function roundTrip (line 1474) | function roundTrip(value: string): string | undefined {
FILE: src/extension/agents/vscode-node/test/githubOrgInstructionsProvider.spec.ts
function createProvider (line 70) | function createProvider(): GitHubOrgInstructionsProvider {
function waitForPolling (line 97) | async function waitForPolling(): Promise<void> {
function prepopulateCache (line 104) | function prepopulateCache(orgName: string, files: Map<string, string>): ...
FILE: src/extension/agents/vscode-node/test/mockOctoKitService.ts
class MockOctoKitService (line 11) | class MockOctoKitService implements IOctoKitService {
method getOrgCustomInstructions (line 47) | async getOrgCustomInstructions(orgLogin: string, _authOptions?: { crea...
method getCustomAgents (line 51) | async getCustomAgents(_owner: string, _repo: string, _options: CustomA...
method getCustomAgentDetails (line 58) | async getCustomAgentDetails(_owner: string, _repo: string, agentName: ...
method setOrgInstructions (line 64) | setOrgInstructions(orgLogin: string, instructions: string | undefined) {
method clearInstructions (line 72) | clearInstructions() {
method setCustomAgents (line 76) | setCustomAgents(agents: CustomAgentListItem[]) {
method setAgentDetails (line 80) | setAgentDetails(name: string, details: CustomAgentDetails) {
method setUserOrganizations (line 84) | setUserOrganizations(orgs: string[]) {
method clearAgents (line 88) | clearAgents() {
method reset (line 96) | reset() {
FILE: src/extension/agents/vscode-node/test/planAgentProvider.spec.ts
function createProvider (line 50) | function createProvider() {
function getAgentContent (line 56) | async function getAgentContent(agent: vscode.ChatResource): Promise<stri...
FILE: src/extension/agents/vscode-node/troubleshootSkillProvider.ts
constant RUNTIME_CONTEXT_PLACEHOLDER (line 10) | const RUNTIME_CONTEXT_PLACEHOLDER = '{{DEBUG_LOG_RUNTIME_CONTEXT}}';
class TroubleshootSkillProvider (line 12) | class TroubleshootSkillProvider extends BaseSkillProvider {
method constructor (line 14) | constructor(
method getRuntimeContext (line 21) | private getRuntimeContext(): string {
method processTemplate (line 40) | protected override processTemplate(templateContent: string): string {
FILE: src/extension/api/vscode/api.d.ts
type CopilotExtensionApi (line 11) | interface CopilotExtensionApi {
FILE: src/extension/api/vscode/extensionApi.ts
class CopilotExtensionApi (line 13) | class CopilotExtensionApi implements ICopilotExtensionApi {
method constructor (line 16) | constructor(
method selectScope (line 21) | async selectScope(editor?: TextEditor, options?: { reason?: string }) {
method getContextProviderAPI (line 29) | getContextProviderAPI(_version: 'v1'): Copilot.ContextProviderApiV1 {
FILE: src/extension/api/vscode/vscodeContextProviderApi.ts
class VSCodeContextProviderApiV1 (line 11) | class VSCodeContextProviderApiV1 implements Copilot.ContextProviderApiV1 {
method constructor (line 13) | constructor(
method registerContextProvider (line 18) | registerContextProvider<T extends Copilot.SupportedContextItem>(provid...
FILE: src/extension/authentication/vscode-node/authentication.contribution.ts
class AuthenticationContrib (line 17) | class AuthenticationContrib extends Disposable {
method constructor (line 18) | constructor(@IInstantiationService private readonly instantiationServi...
method askToUpgradeAuthPermissions (line 22) | private async askToUpgradeAuthPermissions() {
class AuthUpgradeAsk (line 31) | class AuthUpgradeAsk extends Disposable {
method constructor (line 34) | constructor(
method run (line 46) | async run() {
method waitForChatEnabled (line 52) | private async waitForChatEnabled() {
method registerListeners (line 68) | private registerListeners() {
method showPrompt (line 92) | private async showPrompt() {
FILE: src/extension/byok/common/anthropicMessageConverter.ts
function apiContentToAnthropicContent (line 12) | function apiContentToAnthropicContent(content: (LanguageModelTextPart | ...
function apiMessageToAnthropicMessage (line 91) | function apiMessageToAnthropicMessage(messages: LanguageModelChatMessage...
function contentBlockSupportsCacheControl (line 138) | function contentBlockSupportsCacheControl(block: ContentBlockParam): blo...
function anthropicMessagesToRawMessagesForLogging (line 142) | function anthropicMessagesToRawMessagesForLogging(messages: MessageParam...
function anthropicMessagesToRawMessages (line 178) | function anthropicMessagesToRawMessages(messages: MessageParam[], system...
FILE: src/extension/byok/common/byokProvider.ts
type BYOKAuthType (line 12) | const enum BYOKAuthType {
type BYOKBaseModelConfig (line 27) | interface BYOKBaseModelConfig {
type LMResponsePart (line 32) | type LMResponsePart = LanguageModelTextPart | LanguageModelToolCallPart ...
type BYOKGlobalKeyModelConfig (line 34) | interface BYOKGlobalKeyModelConfig extends BYOKBaseModelConfig {
type BYOKPerModelConfig (line 38) | interface BYOKPerModelConfig extends BYOKBaseModelConfig {
type BYOKNoAuthModelConfig (line 43) | interface BYOKNoAuthModelConfig extends BYOKBaseModelConfig {
type BYOKModelConfig (line 47) | type BYOKModelConfig = BYOKGlobalKeyModelConfig | BYOKPerModelConfig | B...
type BYOKModelCapabilities (line 49) | interface BYOKModelCapabilities {
type BYOKModelRegistry (line 65) | interface BYOKModelRegistry {
type BYOKKnownModels (line 74) | type BYOKKnownModels = Record<string, BYOKModelCapabilities>;
function isGlobalKeyConfig (line 77) | function isGlobalKeyConfig(config: BYOKModelConfig): config is BYOKGloba...
function isPerModelConfig (line 81) | function isPerModelConfig(config: BYOKModelConfig): config is BYOKPerMod...
function isNoAuthConfig (line 85) | function isNoAuthConfig(config: BYOKModelConfig): config is BYOKNoAuthMo...
function resolveModelInfo (line 89) | function resolveModelInfo(modelId: string, providerName: string, knownMo...
function byokKnownModelsToAPIInfo (line 131) | function byokKnownModelsToAPIInfo(providerName: string, knownModels: BYO...
function byokKnownModelToAPIInfo (line 138) | function byokKnownModelToAPIInfo(providerName: string, id: string, capab...
function isBYOKEnabled (line 156) | function isBYOKEnabled(copilotToken: Omit<CopilotToken, 'token'>, capiCl...
type HandleAPIKeyUpdateResult (line 169) | interface HandleAPIKeyUpdateResult {
type IBYOKStorageServiceLike (line 188) | interface IBYOKStorageServiceLike {
function handleAPIKeyUpdate (line 206) | async function handleAPIKeyUpdate(
FILE: src/extension/byok/common/geminiFunctionDeclarationConverter.ts
type ToolJsonSchema (line 8) | type ToolJsonSchema = {
function mapType (line 23) | function mapType(jsonType: string): Type {
function toGeminiFunction (line 45) | function toGeminiFunction(name: string, description: string, schema: Too...
function transformProperties (line 63) | function transformProperties(props: Record<string, ToolJsonSchema>): Rec...
FILE: src/extension/byok/common/geminiMessageConverter.ts
function apiContentToGeminiContent (line 11) | function apiContentToGeminiContent(content: (LanguageModelTextPart | Lan...
function apiMessageToGeminiMessage (line 123) | function apiMessageToGeminiMessage(messages: LanguageModelChatMessage[])...
function geminiMessagesToRawMessagesForLogging (line 203) | function geminiMessagesToRawMessagesForLogging(contents: Content[], syst...
function geminiMessagesToRawMessages (line 232) | function geminiMessagesToRawMessages(contents: Content[], systemInstruct...
FILE: src/extension/byok/node/azureOpenAIEndpoint.ts
class AzureOpenAIEndpoint (line 12) | class AzureOpenAIEndpoint extends OpenAIEndpoint {
method getExtraHeaders (line 16) | public override getExtraHeaders(): Record<string, string> {
FILE: src/extension/byok/node/openAIEndpoint.ts
function hydrateBYOKErrorMessages (line 21) | function hydrateBYOKErrorMessages(response: ChatResponse): ChatResponse {
function isBYOKModel (line 49) | function isBYOKModel(endpoint: IChatEndpoint | undefined): number {
class OpenAIEndpoint (line 56) | class OpenAIEndpoint extends ChatEndpoint {
method constructor (line 114) | constructor(
method _sanitizeCustomHeaders (line 141) | private _sanitizeCustomHeaders(headers: Readonly<Record<string, string...
method _sanitizeHeaderValue (line 211) | private _sanitizeHeaderValue(value: unknown): string | undefined {
method createRequestBody (line 237) | override createRequestBody(options: ICreateEndpointBodyOptions): IEndp...
method interceptBody (line 267) | override interceptBody(body: IEndpointBody | undefined): void {
method urlOrRequestMetadata (line 297) | override get urlOrRequestMetadata(): string {
method getExtraHeaders (line 301) | public override getExtraHeaders(): Record<string, string> {
method cloneWithTokenOverride (line 316) | override cloneWithTokenOverride(modelMaxPromptTokens: number): IChatEn...
method makeChatRequest2 (line 321) | public override async makeChatRequest2(options: IMakeChatRequestOption...
FILE: src/extension/byok/vscode-node/abstractLanguageModelChatProvider.ts
type LanguageModelChatConfiguration (line 19) | interface LanguageModelChatConfiguration {
type ExtendedLanguageModelChatInformation (line 23) | interface ExtendedLanguageModelChatInformation<C extends LanguageModelCh...
method constructor (line 29) | constructor(
method configureDefaultGroupWithApiKeyOnly (line 40) | protected async configureDefaultGroupWithApiKeyOnly(): Promise<string | ...
method configureDefaultGroupIfExists (line 49) | protected async configureDefaultGroupIfExists(name: string, configuratio...
method provideLanguageModelChatInformation (line 53) | async provideLanguageModelChatInformation({ silent, configuration }: Pre...
type OpenAICompatibleLanguageModelChatInformation (line 72) | interface OpenAICompatibleLanguageModelChatInformation<C extends Languag...
method constructor (line 79) | constructor(
method provideLanguageModelChatResponse (line 94) | async provideLanguageModelChatResponse(model: OpenAICompatibleLanguageMo...
method provideTokenCount (line 99) | async provideTokenCount(model: OpenAICompatibleLanguageModelChatInformat...
method getAllModels (line 104) | protected async getAllModels(silent: boolean, apiKey: string | undefined...
method getModelsFromEndpoint (line 116) | private async getModelsFromEndpoint(endpoint: string, silent: boolean, a...
method createOpenAIEndPoint (line 162) | protected async createOpenAIEndPoint(model: OpenAICompatibleLanguageMode...
method getModelInfo (line 170) | protected getModelInfo(modelId: string, modelUrl: string): IChatModelInf...
method resolveModelCapabilities (line 174) | protected resolveModelCapabilities(modelData: unknown): BYOKModelCapabil...
method getModelsDiscoveryUrl (line 180) | protected getModelsDiscoveryUrl(modelsBaseUrl: string): string {
FILE: src/extension/byok/vscode-node/anthropicProvider.ts
class AnthropicLMProvider (line 29) | class AnthropicLMProvider extends AbstractLanguageModelChatProvider {
method constructor (line 33) | constructor(
method _getThinkingBudget (line 47) | private _getThinkingBudget(modelId: string, maxOutputTokens: number): ...
method getAllModels (line 63) | protected async getAllModels(silent: boolean, apiKey: string | undefin...
method provideLanguageModelChatResponse (line 93) | async provideLanguageModelChatResponse(model: ExtendedLanguageModelCha...
method provideTokenCount (line 533) | async provideTokenCount(model: LanguageModelChatInformation, text: str...
method _makeRequest (line 538) | private async _makeRequest(anthropicClient: Anthropic, progress: Recor...
FILE: src/extension/byok/vscode-node/azureProvider.ts
function resolveAzureUrl (line 21) | function resolveAzureUrl(modelId: string, url: string): string {
class AzureBYOKModelProvider (line 48) | class AzureBYOKModelProvider extends AbstractCustomOAIBYOKModelProvider {
method constructor (line 52) | constructor(
method migrateExistingConfigs (line 76) | private async migrateExistingConfigs(): Promise<void> {
method resolveUrl (line 81) | protected override resolveUrl(modelId: string, url: string): string {
method provideLanguageModelChatResponse (line 85) | override async provideLanguageModelChatResponse(
FILE: src/extension/byok/vscode-node/byokContribution.ts
class BYOKContrib (line 25) | class BYOKContrib extends Disposable implements IExtensionContribution {
method constructor (line 31) | constructor(
method _authChange (line 48) | private async _authChange(authService: IAuthenticationService, instant...
method fetchKnownModelList (line 70) | private async fetchKnownModelList(fetcherService: IFetcherService): Pr...
FILE: src/extension/byok/vscode-node/byokStorageService.ts
type StoredModelConfig (line 8) | interface StoredModelConfig {
type IBYOKStorageService (line 15) | interface IBYOKStorageService {
class BYOKStorageService (line 58) | class BYOKStorageService implements IBYOKStorageService {
method constructor (line 61) | constructor(extensionContext: IVSCodeExtensionContext) {
method getAPIKey (line 65) | public async getAPIKey(providerName: string, modelId?: string): Promis...
method storeAPIKey (line 81) | public async storeAPIKey(providerName: string, apiKey: string, authTyp...
method deleteAPIKey (line 103) | public async deleteAPIKey(providerName: string, authType: BYOKAuthType...
method getStoredModelConfigs (line 117) | public async getStoredModelConfigs(providerName: string): Promise<Reco...
method saveModelConfig (line 124) | public async saveModelConfig(
method removeModelConfig (line 149) | public async removeModelConfig(modelId: string, providerName: string, ...
FILE: src/extension/byok/vscode-node/customOAIProvider.ts
function resolveCustomOAIUrl (line 19) | function resolveCustomOAIUrl(modelId: string, url: string): string {
function hasExplicitApiPath (line 43) | function hasExplicitApiPath(url: string): boolean {
type CustomOAIModelProviderConfig (line 47) | interface CustomOAIModelProviderConfig extends LanguageModelChatConfigur...
type _CustomOAIModelConfig (line 52) | interface _CustomOAIModelConfig {
type CustomOAIModelConfig (line 66) | interface CustomOAIModelConfig extends _CustomOAIModelConfig {
method constructor (line 72) | constructor(
method migrateConfig (line 86) | protected async migrateConfig(configKey: Config<IStringDictionary<_Custo...
method configureDefaultGroupWithApiKeyOnly (line 111) | protected override async configureDefaultGroupWithApiKeyOnly(): Promise<...
method getAllModels (line 116) | protected override async getAllModels(silent: boolean, apiKey: string | ...
method createOpenAIEndPoint (line 132) | protected override async createOpenAIEndPoint(model: OpenAICompatibleLan...
method getModelsBaseUrl (line 157) | protected getModelsBaseUrl(configuration: CustomOAIModelProviderConfig |...
class CustomOAIBYOKModelProvider (line 164) | class CustomOAIBYOKModelProvider extends AbstractCustomOAIBYOKModelProvi...
method constructor (line 169) | constructor(
method migrateExistingConfigs (line 183) | private async migrateExistingConfigs(): Promise<void> {
method resolveUrl (line 187) | protected resolveUrl(modelId: string, url: string): string {
FILE: src/extension/byok/vscode-node/geminiNativeProvider.ts
class GeminiNativeBYOKLMProvider (line 25) | class GeminiNativeBYOKLMProvider extends AbstractLanguageModelChatProvid...
method constructor (line 29) | constructor(
method getAllModels (line 40) | protected async getAllModels(silent: boolean, apiKey: string | undefin...
method provideLanguageModelChatResponse (line 76) | async provideLanguageModelChatResponse(model: ExtendedLanguageModelCha...
method provideTokenCount (line 385) | async provideTokenCount(model: LanguageModelChatInformation, text: str...
method _makeRequest (line 390) | private async _makeRequest(client: GoogleGenAI, progress: Progress<LMR...
FILE: src/extension/byok/vscode-node/ollamaProvider.ts
type OllamaModelInfoAPIResponse (line 17) | interface OllamaModelInfoAPIResponse {
type OllamaVersionResponse (line 29) | interface OllamaVersionResponse {
constant MINIMUM_OLLAMA_VERSION (line 34) | const MINIMUM_OLLAMA_VERSION = '0.6.4';
type OllamaConfig (line 36) | interface OllamaConfig extends LanguageModelChatConfiguration {
class OllamaLMProvider (line 40) | class OllamaLMProvider extends AbstractOpenAICompatibleLMProvider<Ollama...
method constructor (line 44) | constructor(
method migrateConfig (line 67) | private async migrateConfig(): Promise<void> {
method getBaseUrlFromSettings (line 76) | private getBaseUrlFromSettings(): string | undefined {
method getAllModels (line 83) | protected override async getAllModels(silent: boolean, apiKey: string ...
method getModelsBaseUrl (line 133) | protected override getModelsBaseUrl(configuration: OllamaConfig | unde...
method createOpenAIEndPoint (line 137) | protected override async createOpenAIEndPoint(model: OpenAICompatibleL...
method _getOllamaModelInfo (line 143) | private async _getOllamaModelInfo(ollamaBaseUrl: string, modelId: stri...
method _isVersionSupported (line 163) | private _isVersionSupported(currentVersion: string): boolean {
method _fetchOllamaModelInformation (line 188) | private async _fetchOllamaModelInformation(ollamaBaseUrl: string, mode...
method _checkOllamaVersion (line 203) | private async _checkOllamaVersion(ollamaBaseUrl: string): Promise<void> {
FILE: src/extension/byok/vscode-node/openAIProvider.ts
class OAIBYOKLMProvider (line 15) | class OAIBYOKLMProvider extends AbstractOpenAICompatibleLMProvider {
method constructor (line 18) | constructor(
method getModelsBaseUrl (line 40) | protected override getModelsBaseUrl(): string {
method getModelInfo (line 44) | protected override getModelInfo(modelId: string, modelUrl: string): IC...
FILE: src/extension/byok/vscode-node/openRouterProvider.ts
type OpenRouterModelData (line 14) | interface OpenRouterModelData {
class OpenRouterLMProvider (line 26) | class OpenRouterLMProvider extends AbstractOpenAICompatibleLMProvider {
method constructor (line 28) | constructor(
method getModelsBaseUrl (line 49) | protected override getModelsBaseUrl(): string | undefined {
method getModelsDiscoveryUrl (line 53) | protected override getModelsDiscoveryUrl(modelsBaseUrl: string): string {
method resolveModelCapabilities (line 57) | protected override resolveModelCapabilities(modelData: unknown): BYOKM...
FILE: src/extension/byok/vscode-node/test/geminiNativeProvider.spec.ts
class MockGoogleGenAI (line 18) | class MockGoogleGenAI {
method constructor (line 29) | constructor(opts: { apiKey: string }) {
type ProgressItem (line 57) | type ProgressItem = vscode.LanguageModelResponsePart2;
class TestProgress (line 59) | class TestProgress implements vscode.Progress<ProgressItem> {
method report (line 61) | report(value: ProgressItem): void {
function createStorageService (line 66) | function createStorageService(overrides?: Partial<IBYOKStorageService>):...
function createRequestLogger (line 78) | function createRequestLogger(): IRequestLogger {
method [Symbol.asyncIterator] (line 258) | async *[Symbol.asyncIterator]() {
FILE: src/extension/byok/vscode-node/xAIProvider.ts
type XAIModelData (line 15) | interface XAIModelData {
class XAIBYOKLMProvider (line 32) | class XAIBYOKLMProvider extends AbstractOpenAICompatibleLMProvider {
method constructor (line 36) | constructor(
method getModelsBaseUrl (line 58) | protected getModelsBaseUrl(): string | undefined {
method getModelsDiscoveryUrl (line 62) | protected override getModelsDiscoveryUrl(modelsBaseUrl: string): string {
method resolveModelCapabilities (line 66) | protected override resolveModelCapabilities(modelData: unknown): BYOKM...
method parseXAIModelVersion (line 91) | private parseXAIModelVersion(modelId: string): number | undefined {
method humanizeXAIModelId (line 96) | private humanizeXAIModelId(modelId: string): string {
FILE: src/extension/chat/test/node/chatHookService.spec.ts
function cmd (line 12) | function cmd(command: string, cwd?: Uri): ChatHookCommand {
class TestableExecuteHookService (line 21) | class TestableExecuteHookService {
method executeHook (line 27) | async executeHook(hookType: string, hooks: ChatRequestHooks | undefine...
method _toHookResult (line 78) | private _toHookResult(hookType: string, commandResult: IHookCommandRes...
type IPreToolUseHookSpecificOutput (line 381) | interface IPreToolUseHookSpecificOutput {
function collapsePreToolUseHookResults (line 396) | function collapsePreToolUseHookResults(results: ChatHookResult[]): IPreT...
function hookResult (line 456) | function hookResult(output: unknown, kind: ChatHookResultKind = 'success...
class TestableChatHookService (line 464) | class TestableChatHookService {
method executeHook (line 468) | async executeHook(): Promise<ChatHookResult[]> {
method executePreToolUseHook (line 472) | async executePreToolUseHook(
type IPostToolUseHookSpecificOutput (line 755) | interface IPostToolUseHookSpecificOutput {
function collapsePostToolUseHookResults (line 760) | function collapsePostToolUseHookResults(results: ChatHookResult[]): IPos...
class TestablePostToolUseChatHookService (line 815) | class TestablePostToolUseChatHookService {
method executeHook (line 818) | async executeHook(): Promise<ChatHookResult[]> {
method executePostToolUseHook (line 822) | async executePostToolUseHook(
FILE: src/extension/chat/vscode-node/chatDebugFileLoggerService.ts
constant DEBUG_LOGS_DIR_NAME (line 22) | const DEBUG_LOGS_DIR_NAME = 'debug-logs';
constant MAX_RETAINED_LOGS (line 23) | const MAX_RETAINED_LOGS = 50;
constant DEFAULT_FLUSH_INTERVAL_MS (line 24) | const DEFAULT_FLUSH_INTERVAL_MS = 4_000;
constant MIN_FLUSH_INTERVAL_MS (line 25) | const MIN_FLUSH_INTERVAL_MS = 2_000;
constant MAX_ATTR_VALUE_LENGTH (line 26) | const MAX_ATTR_VALUE_LENGTH = 5_000;
constant MAX_PENDING_CORE_EVENTS (line 27) | const MAX_PENDING_CORE_EVENTS = 100;
constant MAX_SESSION_LOG_BYTES (line 28) | const MAX_SESSION_LOG_BYTES = 100 * 1024 * 1024;
constant TRUNCATION_RETAIN_BYTES (line 29) | const TRUNCATION_RETAIN_BYTES = 60 * 1024 * 1024;
constant MAX_SPAN_SESSION_INDEX (line 30) | const MAX_SPAN_SESSION_INDEX = 10_000;
type IActiveLogSession (line 33) | interface IActiveLogSession {
type IDebugLogEntry (line 52) | interface IDebugLogEntry {
class ChatDebugFileLoggerService (line 73) | class ChatDebugFileLoggerService extends Disposable implements IChatDebu...
method constructor (line 90) | constructor(
method dispose (line 142) | override dispose(): void {
method debugLogsDir (line 163) | public get debugLogsDir(): URI | undefined {
method _getDebugLogsDir (line 167) | private _getDebugLogsDir(): URI | undefined {
method startSession (line 179) | async startSession(sessionId: string): Promise<void> {
method _ensureSession (line 191) | private _ensureSession(sessionId: string, hasOwnSpans = false): void {
method endSession (line 280) | async endSession(sessionId: string): Promise<void> {
method flush (line 302) | async flush(sessionId: string): Promise<void> {
method getLogPath (line 325) | getLogPath(sessionId: string): URI | undefined {
method getSessionDir (line 329) | getSessionDir(sessionId: string): URI | undefined {
method getActiveSessionIds (line 333) | getActiveSessionIds(): string[] {
method isDebugLogUri (line 337) | isDebugLogUri(uri: URI): boolean {
method getSessionDirForResource (line 345) | getSessionDirForResource(sessionResource: URI): URI | undefined {
method _onSpanCompleted (line 352) | private _onSpanCompleted(span: ICompletedSpanData): void {
method _onSpanEvent (line 421) | private _onSpanEvent(event: ISpanEventData): void {
method _onCoreDebugEvent (line 496) | private _onCoreDebugEvent(event: vscode.ChatDebugEvent): void {
method _spanToEntry (line 539) | private _spanToEntry(span: ICompletedSpanData, sessionId: string): IDe...
method _extractSessionId (line 680) | private _extractSessionId(span: ICompletedSpanData): string | undefined {
method _bufferEntry (line 686) | private _bufferEntry(sessionId: string, entry: IDebugLogEntry): void {
method _writeToFile (line 694) | private async _writeToFile(session: IActiveLogSession, content: string...
method _truncateLogFile (line 714) | private async _truncateLogFile(session: IActiveLogSession): Promise<vo...
method _autoFlushAll (line 782) | private _autoFlushAll(): void {
method _restartFlushTimer (line 788) | private _restartFlushTimer(): void {
method _cleanupOldLogs (line 798) | private async _cleanupOldLogs(): Promise<void> {
class ChatDebugFileLoggerContribution (line 870) | class ChatDebugFileLoggerContribution implements IExtensionContribution {
method constructor (line 873) | constructor(
function asString (line 881) | function asString(v: unknown): string | undefined {
function asNumber (line 885) | function asNumber(v: unknown): number | undefined {
function truncate (line 889) | function truncate(s: string, maxLen: number): string {
FILE: src/extension/chat/vscode-node/chatHookService.ts
class ChatHookService (line 30) | class ChatHookService implements IChatHookService {
method constructor (line 36) | constructor(
method _log (line 48) | private _log(requestId: number, hookType: string, message: string): vo...
method _redactForLogging (line 52) | private _redactForLogging(input: Record<string, unknown>): Record<stri...
method _logCommandResult (line 62) | private _logCommandResult(requestId: number, hookType: string, command...
method logConfiguredHooks (line 77) | logConfiguredHooks(hooks: vscode.ChatRequestHooks | undefined): void {
method executeHook (line 83) | async executeHook(hookType: vscode.ChatHookType, hooks: vscode.ChatReq...
method _toHookResult (line 224) | private _toHookResult(hookType: string, commandResult: IHookCommandRes...
method executePreToolUseHook (line 313) | async executePreToolUseHook(toolName: string, toolInput: unknown, tool...
method executePostToolUseHook (line 410) | async executePostToolUseHook(toolName: string, toolInput: unknown, too...
FILE: src/extension/chat/vscode-node/chatHookTelemetry.ts
class ChatHookTelemetry (line 10) | class ChatHookTelemetry {
method constructor (line 11) | constructor(
method logConfiguredHooks (line 15) | logConfiguredHooks(hooks: vscode.ChatRequestHooks): void {
method logHookExecuted (line 45) | logHookExecuted(hookType: string, hookCount: number, durationMs: numbe...
method logPreToolUseResult (line 67) | logPreToolUseResult(result: IPreToolUseHookResult): void {
method logPostToolUseResult (line 84) | logPostToolUseResult(result: IPostToolUseHookResult): void {
FILE: src/extension/chat/vscode-node/chatQuota.contribution.ts
class ChatQuotaContribution (line 10) | class ChatQuotaContribution extends Disposable implements IExtensionCont...
method constructor (line 13) | constructor(@IChatQuotaService chatQuotaService: IChatQuotaService) {
FILE: src/extension/chat/vscode-node/hooksOutputChannel.ts
class HooksOutputChannel (line 9) | class HooksOutputChannel implements IHooksOutputChannel {
method appendLine (line 14) | appendLine(message: string): void {
FILE: src/extension/chat/vscode-node/sessionTranscriptService.ts
constant TRANSCRIPT_VERSION (line 21) | const TRANSCRIPT_VERSION = 1;
constant TRANSCRIPT_PRODUCER (line 22) | const TRANSCRIPT_PRODUCER = 'copilot-agent';
constant DEFAULT_MAX_RETAINED (line 23) | const DEFAULT_MAX_RETAINED = 20;
function stripInternalToolCallId (line 30) | function stripInternalToolCallId(id: string): string {
type IActiveSession (line 34) | interface IActiveSession {
class SessionTranscriptService (line 43) | class SessionTranscriptService implements ISessionTranscriptService {
method constructor (line 49) | constructor(
method _getTranscriptsDir (line 56) | private _getTranscriptsDir(): URI | undefined {
method startSession (line 68) | async startSession(sessionId: string, context?: { cwd?: string }, hist...
method logUserMessage (line 135) | logUserMessage(sessionId: string, content: string, attachments?: reado...
method logAssistantTurnStart (line 145) | logAssistantTurnStart(sessionId: string, turnId: string): void {
method logAssistantMessage (line 152) | logAssistantMessage(sessionId: string, content: string, toolRequests: ...
method logToolExecutionStart (line 164) | logToolExecutionStart(sessionId: string, toolCallId: string, toolName:...
method logToolExecutionComplete (line 175) | logToolExecutionComplete(sessionId: string, toolCallId: string, succes...
method logAssistantTurnEnd (line 186) | logAssistantTurnEnd(sessionId: string, turnId: string): void {
method flush (line 193) | async flush(sessionId: string): Promise<void> {
method endSession (line 210) | async endSession(sessionId: string): Promise<void> {
method getTranscriptPath (line 215) | getTranscriptPath(sessionId: string): URI | undefined {
method isTranscriptUri (line 219) | isTranscriptUri(uri: URI): boolean {
method cleanupOldTranscripts (line 227) | async cleanupOldTranscripts(maxRetained: number = DEFAULT_MAX_RETAINED...
method _replayHistory (line 285) | private _replayHistory(sessionId: string, history: readonly IHistorica...
method _bufferEntry (line 340) | private _bufferEntry(sessionId: string, entry: Omit<TranscriptEntry, '...
method _writeToFile (line 361) | private async _writeToFile(session: IActiveSession, content: string): ...
FILE: src/extension/chat/vscode-node/test/chatDebugFileLoggerService.spec.ts
function makeSpan (line 25) | function makeSpan(overrides: Partial<ICompletedSpanData> & { attributes?...
function makeToolCallSpan (line 39) | function makeToolCallSpan(sessionId: string, toolName: string): IComplet...
function makeChatSpan (line 50) | function makeChatSpan(sessionId: string, model: string, inputTokens: num...
class TestOTelService (line 63) | class TestOTelService {
method fireSpan (line 73) | fireSpan(span: ICompletedSpanData): void {
method fireSpanEvent (line 77) | fireSpanEvent(event: ISpanEventData): void {
method startSpan (line 81) | startSpan() { return { setAttribute() { }, setAttributes() { }, setSta...
method startActiveSpan (line 82) | startActiveSpan<T>(_n: string, _o: unknown, fn: (s: unknown) => Promis...
method getActiveTraceContext (line 83) | getActiveTraceContext() { return undefined; }
method storeTraceContext (line 84) | storeTraceContext() { }
method getStoredTraceContext (line 85) | getStoredTraceContext() { return undefined; }
method runWithTraceContext (line 86) | runWithTraceContext<T>(_c: unknown, fn: () => Promise<T>) { return fn(...
method recordMetric (line 87) | recordMetric() { }
method incrementCounter (line 88) | incrementCounter() { }
method emitLogRecord (line 89) | emitLogRecord() { }
method flush (line 90) | async flush() { }
method shutdown (line 91) | async shutdown() { }
method dispose (line 93) | dispose(): void {
class TestExtensionContext (line 99) | class TestExtensionContext {
method constructor (line 103) | constructor(tmpDir: string) {
class TestFileSystemService (line 108) | class TestFileSystemService {
method stat (line 111) | async stat(uri: URI) {
method readDirectory (line 116) | async readDirectory(uri: URI) {
method createDirectory (line 121) | async createDirectory(uri: URI) {
method delete (line 125) | async delete(uri: URI, options?: { recursive?: boolean }) {
class TestLogService (line 135) | class TestLogService {
method info (line 137) | info() { }
method warn (line 138) | warn() { }
method error (line 139) | error() { }
method debug (line 140) | debug() { }
method trace (line 141) | trace() { }
class TestConfigurationService (line 144) | class TestConfigurationService {
method getConfig (line 146) | getConfig(key: { defaultValue: unknown }) { return key.defaultValue; }
method getExperimentBasedConfig (line 147) | getExperimentBasedConfig(key: { defaultValue: unknown }) {
class TestTelemetryService (line 156) | class TestTelemetryService {
method sendMSFTTelemetryEvent (line 158) | sendMSFTTelemetryEvent() { }
function readLogEntries (line 191) | async function readLogEntries(sessionId: string): Promise<Record<string,...
FILE: src/extension/chatSessionContext/vscode-node/chatSessionContextProvider.ts
type SummaryCache (line 20) | interface SummaryCache {
constant SINGLE_TURN_MESSAGE_LIMIT (line 25) | const SINGLE_TURN_MESSAGE_LIMIT = 1_000;
constant MAX_TOTAL_MESSAGE_LENGTH (line 26) | const MAX_TOTAL_MESSAGE_LENGTH = 10_000;
class ChatSessionContextContribution (line 28) | class ChatSessionContextContribution extends Disposable {
method constructor (line 35) | constructor(
method trackBranchChanges (line 53) | private trackBranchChanges(): IDisposable {
method watchBranchChanges (line 69) | private watchBranchChanges(repo: RepoContext): IDisposable {
method register (line 83) | private register(): IDisposable {
class ContextResolver (line 112) | class ContextResolver implements Copilot.ContextResolver<Copilot.Support...
method constructor (line 114) | constructor(
method resolve (line 122) | async resolve(request: Copilot.ResolveRequest, token: CancellationToke...
method getFirstTurnStartTime (line 168) | private getFirstTurnStartTime(conversation: Conversation): number {
method getCacheKey (line 176) | private getCacheKey(conversation: Conversation): string {
method generateSummary (line 180) | private async generateSummary(conversation: Conversation): Promise<str...
method buildConversationContent (line 225) | private buildConversationContent(conversation: Conversation): string |...
method createTraitFromSummary (line 272) | private createTraitFromSummary(summary: string): Copilot.Trait[] {
FILE: src/extension/chatSessions/claude/common/claudeFolderInfo.ts
type ClaudeFolderInfo (line 6) | interface ClaudeFolderInfo {
FILE: src/extension/chatSessions/claude/common/claudeHookRegistry.ts
type IClaudeHookHandlerCtor (line 15) | type IClaudeHookHandlerCtor = new (...args: any[]) => HookCallbackMatcher;
type ClaudeHookRegistryType (line 20) | type ClaudeHookRegistryType = Partial<Record<HookEvent, IClaudeHookHandl...
function registerClaudeHook (line 34) | function registerClaudeHook(hookEvent: HookEvent, ctor: IClaudeHookHandl...
function buildHooksFromRegistry (line 47) | function buildHooksFromRegistry(
function withHookOTelSpan (line 76) | async function withHookOTelSpan<T>(
FILE: src/extension/chatSessions/claude/common/claudeMcpServerRegistry.ts
type IClaudeMcpServerContributor (line 16) | interface IClaudeMcpServerContributor {
type IClaudeMcpServerContributorCtor (line 30) | type IClaudeMcpServerContributorCtor = new (...args: any[]) => IClaudeMc...
function registerClaudeMcpServerContributor (line 58) | function registerClaudeMcpServerContributor(ctor: IClaudeMcpServerContri...
function getClaudeMcpServerContributorRegistry (line 65) | function getClaudeMcpServerContributorRegistry(): readonly IClaudeMcpSer...
function buildMcpServersFromRegistry (line 79) | async function buildMcpServersFromRegistry(
FILE: src/extension/chatSessions/claude/common/claudeSessionUri.ts
function forSessionId (line 11) | function forSessionId(sessionId: string): URI {
function getSessionId (line 15) | function getSessionId(resource: URI): string {
FILE: src/extension/chatSessions/claude/common/claudeToolPermission.ts
type ClaudeToolPermissionResult (line 13) | type ClaudeToolPermissionResult =
type ClaudeToolPermissionContext (line 20) | interface ClaudeToolPermissionContext {
type IClaudeToolConfirmationParams (line 29) | interface IClaudeToolConfirmationParams {
type IClaudeToolPermissionHandler (line 43) | interface IClaudeToolPermissionHandler<TToolName extends ClaudeToolNames...
type IClaudeToolPermissionHandlerCtor (line 83) | type IClaudeToolPermissionHandlerCtor<TToolName extends ClaudeToolNames ...
FILE: src/extension/chatSessions/claude/common/claudeToolPermissionRegistry.ts
type IToolPermissionHandlerRegistration (line 12) | interface IToolPermissionHandlerRegistration {
function registerToolPermissionHandler (line 30) | function registerToolPermissionHandler<T extends ClaudeToolNames>(
function getToolPermissionHandlerRegistry (line 41) | function getToolPermissionHandlerRegistry(): readonly IToolPermissionHan...
FILE: src/extension/chatSessions/claude/common/claudeToolPermissionService.ts
type IClaudeToolPermissionService (line 23) | interface IClaudeToolPermissionService {
class ClaudeToolPermissionService (line 45) | class ClaudeToolPermissionService implements IClaudeToolPermissionService {
method constructor (line 50) | constructor(
method canUseTool (line 55) | public async canUseTool(
method _getHandler (line 89) | private _getHandler(toolName: ClaudeToolNames): IClaudeToolPermissionH...
method _getDefaultConfirmationParams (line 111) | private _getDefaultConfirmationParams(toolName: string, input: Record<...
method _showConfirmation (line 118) | private async _showConfirmation(
FILE: src/extension/chatSessions/claude/common/claudeTools.ts
type ExitPlanModeInput (line 30) | interface ExitPlanModeInput extends SDKExitPlanModeInput {
type EnterPlanModeInput (line 37) | interface EnterPlanModeInput {
type ClaudeToolNames (line 42) | enum ClaudeToolNames {
type LSInput (line 68) | interface LSInput {
type ClaudeToolInputMap (line 75) | interface ClaudeToolInputMap {
function getAffectedUrisForEditTool (line 98) | function getAffectedUrisForEditTool(input: PreToolUseHookInput): URI[] {
FILE: src/extension/chatSessions/claude/common/mcpServers/ideMcpServer.ts
type DiagnosticEntry (line 20) | interface DiagnosticEntry {
function getDiagnosticsHandler (line 39) | function getDiagnosticsHandler(
class IdeMcpServerContributor (line 75) | class IdeMcpServerContributor implements IClaudeMcpServerContributor {
method constructor (line 77) | constructor(
method getMcpServers (line 81) | async getMcpServers(): Promise<Record<string, McpServerConfig>> {
FILE: src/extension/chatSessions/claude/common/test/claudeToolPermissionRegistry.spec.ts
class TestHandler (line 29) | class TestHandler implements IClaudeToolPermissionHandler<ClaudeToolName...
class MultiToolHandler (line 44) | class MultiToolHandler implements IClaudeToolPermissionHandler<ClaudeToo...
class CustomHandler (line 56) | class CustomHandler implements IClaudeToolPermissionHandler<ClaudeToolNa...
method canAutoApprove (line 59) | async canAutoApprove(): Promise<boolean> {
method getConfirmationParams (line 63) | getConfirmationParams() {
method handle (line 70) | async handle(): Promise<ClaudeToolPermissionResult> {
class Handler1 (line 110) | class Handler1 implements IClaudeToolPermissionHandler<ClaudeToolNames.W...
class Handler2 (line 114) | class Handler2 implements IClaudeToolPermissionHandler<ClaudeToolNames.W...
class FirstHandler (line 128) | class FirstHandler implements IClaudeToolPermissionHandler<ClaudeToolNam...
class SecondHandler (line 132) | class SecondHandler implements IClaudeToolPermissionHandler<ClaudeToolNa...
FILE: src/extension/chatSessions/claude/common/test/toolInvocationFormatter.spec.ts
function createToolUseBlock (line 13) | function createToolUseBlock(name: string, input: object): Anthropic.Beta...
function createToolResultBlock (line 22) | function createToolResultBlock(toolUseId: string, content: Anthropic.Mes...
FILE: src/extension/chatSessions/claude/common/toolInvocationFormatter.ts
function extractToolResultContent (line 20) | function extractToolResultContent(content: Anthropic.Messages.ToolResult...
function completeToolInvocation (line 42) | function completeToolInvocation(
function completeBashInvocation (line 80) | function completeBashInvocation(
function completeReadInvocation (line 112) | function completeReadInvocation(
function completeSearchInvocation (line 135) | function completeSearchInvocation(
function completeTaskInvocation (line 160) | function completeTaskInvocation(
function completeGenericInvocation (line 173) | function completeGenericInvocation(
function createFormattedToolInvocation (line 196) | function createFormattedToolInvocation(
function formatBashInvocation (line 243) | function formatBashInvocation(invocation: ChatToolInvocationPart, toolUs...
function formatReadInvocation (line 253) | function formatReadInvocation(invocation: ChatToolInvocationPart, toolUs...
function formatGlobInvocation (line 259) | function formatGlobInvocation(invocation: ChatToolInvocationPart, toolUs...
function formatGrepInvocation (line 264) | function formatGrepInvocation(invocation: ChatToolInvocationPart, toolUs...
function formatLSInvocation (line 269) | function formatLSInvocation(invocation: ChatToolInvocationPart, toolUse:...
function formatExitPlanModeInvocation (line 275) | function formatExitPlanModeInvocation(invocation: ChatToolInvocationPart...
function formatTaskInvocation (line 279) | function formatTaskInvocation(invocation: ChatToolInvocationPart, toolUs...
function formatGenericInvocation (line 290) | function formatGenericInvocation(invocation: ChatToolInvocationPart, too...
function formatUriForMessage (line 294) | function formatUriForMessage(path: string): string {
FILE: src/extension/chatSessions/claude/common/toolPermissionHandlers/askUserQuestionHandler.ts
class AskUserQuestionHandler (line 25) | class AskUserQuestionHandler implements IClaudeToolPermissionHandler<Cla...
method constructor (line 28) | constructor(
method handle (line 32) | public async handle(
FILE: src/extension/chatSessions/claude/common/toolPermissionHandlers/bashToolHandler.ts
class BashToolHandler (line 25) | class BashToolHandler implements IClaudeToolPermissionHandler<ClaudeTool...
method constructor (line 28) | constructor(
method handle (line 32) | public async handle(
FILE: src/extension/chatSessions/claude/common/toolPermissionHandlers/exitPlanModeHandler.ts
class ExitPlanModeToolHandler (line 23) | class ExitPlanModeToolHandler implements IClaudeToolPermissionHandler<Cl...
method constructor (line 26) | constructor(
method handle (line 31) | public async handle(
FILE: src/extension/chatSessions/claude/node/claudeCodeAgent.ts
class ClaudeAgentManager (line 42) | class ClaudeAgentManager extends Disposable {
method getLangModelServer (line 46) | private async getLangModelServer(): Promise<ClaudeLanguageModelServer> {
method constructor (line 55) | constructor(
method handleRequest (line 63) | public async handleRequest(
class KnownClaudeError (line 134) | class KnownClaudeError extends Error { }
type QueuedRequest (line 139) | interface QueuedRequest {
type CurrentRequest (line 152) | interface CurrentRequest {
class ClaudeCodeSession (line 159) | class ClaudeCodeSession extends Disposable {
method _setModel (line 182) | private async _setModel(modelId: string): Promise<void> {
method _setPermissionMode (line 194) | private async _setPermissionMode(mode: PermissionMode): Promise<void> {
method constructor (line 203) | constructor(
method _createSettingsChangeTracker (line 246) | private _createSettingsChangeTracker(): ClaudeSettingsChangeTracker {
method dispose (line 292) | public override dispose(): void {
method invoke (line 312) | public async invoke(
method _startSession (line 381) | private async _startSession(token: vscode.CancellationToken): Promise<...
method _doStartSession (line 397) | private async _doStartSession(token: vscode.CancellationToken): Promis...
method _buildHooks (line 492) | private _buildHooks(token: CancellationToken): Partial<Record<HookEven...
method _onWillEditTool (line 515) | private async _onWillEditTool(input: HookInput, toolUseID: string | un...
method _onDidEditTool (line 535) | private async _onDidEditTool(_input: HookInput, toolUseID: string | un...
method _createPromptIterable (line 540) | private async *_createPromptIterable(): AsyncIterable<SDKUserMessage> {
method _getNextRequest (line 601) | private async _getNextRequest(): Promise<QueuedRequest> {
method _processMessages (line 615) | private async _processMessages(): Promise<void> {
method _cleanup (line 682) | private _cleanup(error: Error): void {
method _resetSessionState (line 701) | private _resetSessionState(): void {
method _restartAfterYield (line 711) | private _restartAfterYield(): void {
method _rejectPendingRequests (line 726) | private _rejectPendingRequests(error: Error): void {
method _checkYieldRequested (line 744) | private async _checkYieldRequested(): Promise<boolean> {
method _restartSession (line 769) | private _restartSession(): void {
method _cancelGatewayIdleTimer (line 781) | private _cancelGatewayIdleTimer(): void {
method _startGatewayIdleTimer (line 788) | private _startGatewayIdleTimer(): void {
method _disposeGateway (line 797) | private _disposeGateway(): void {
method _snapshotTools (line 807) | private _snapshotTools(tools: vscode.ChatRequest['tools']): void {
method _hasToolsChanged (line 819) | private _hasToolsChanged(tools: vscode.ChatRequest['tools']): boolean {
method handleAssistantMessage (line 847) | private handleAssistantMessage(
method handleUserMessage (line 895) | private handleUserMessage(
method processToolResult (line 915) | private processToolResult(
method processTodoWriteTool (line 973) | private processTodoWriteTool(
method handleResultMessage (line 1000) | private handleResultMessage(
type IManageTodoListToolInputParams (line 1013) | interface IManageTodoListToolInputParams {
FILE: src/extension/chatSessions/claude/node/claudeCodeModels.ts
constant CLAUDE_CODE_MODEL_MEMENTO_KEY (line 15) | const CLAUDE_CODE_MODEL_MEMENTO_KEY = 'github.copilot.claudeCode.session...
class NoClaudeModelsAvailableError (line 18) | class NoClaudeModelsAvailableError extends Error {
method constructor (line 19) | constructor() {
type ClaudeCodeModelInfo (line 25) | interface ClaudeCodeModelInfo {
type IClaudeCodeModels (line 31) | interface IClaudeCodeModels {
class ClaudeCodeModels (line 55) | class ClaudeCodeModels extends Disposable implements IClaudeCodeModels {
method constructor (line 60) | constructor(
method registerLanguageModelChatProvider (line 72) | public registerLanguageModelChatProvider(lm: typeof vscode['lm']): void {
method _getEndpoints (line 91) | private _getEndpoints(): Promise<IChatEndpoint[]> {
method _provideLanguageModelChatInfo (line 98) | private async _provideLanguageModelChatInfo(): Promise<vscode.Language...
method getDefaultModel (line 124) | public async getDefaultModel(): Promise<string> {
method setDefaultModel (line 145) | public async setDefaultModel(modelId: string | undefined): Promise<voi...
method getModels (line 149) | public async getModels(): Promise<ClaudeCodeModelInfo[]> {
method _fetchAvailableEndpoints (line 154) | private async _fetchAvailableEndpoints(): Promise<IChatEndpoint[]> {
method mapSdkModelToEndpointModel (line 178) | public async mapSdkModelToEndpointModel(sdkModelId: string): Promise<s...
method _normalizeSdkModelId (line 233) | private _normalizeSdkModelId(sdkModelId: string): { family: string; ve...
FILE: src/extension/chatSessions/claude/node/claudeCodeSdkService.ts
type IClaudeCodeSdkService (line 9) | interface IClaudeCodeSdkService {
class ClaudeCodeSdkService (line 66) | class ClaudeCodeSdkService implements IClaudeCodeSdkService {
method _loadSdk (line 71) | private _loadSdk() {
method query (line 76) | public async query(options: {
method listSessions (line 84) | public async listSessions(dir: string): Promise<SDKSessionInfo[]> {
method getSessionInfo (line 89) | public async getSessionInfo(sessionId: string, dir: string): Promise<S...
method getSessionMessages (line 94) | public async getSessionMessages(sessionId: string, dir: string): Promi...
method renameSession (line 99) | public async renameSession(sessionId: string, title: string): Promise<...
method forkSession (line 104) | public async forkSession(sessionId: string, options?: ForkSessionOptio...
FILE: src/extension/chatSessions/claude/node/claudeLanguageModelServer.ts
constant SUPPORTED_ANTHROPIC_BETAS (line 35) | const SUPPORTED_ANTHROPIC_BETAS = [
type IClaudeLanguageModelServerConfig (line 41) | interface IClaudeLanguageModelServerConfig {
type AnthropicMessagesRequest (line 46) | interface AnthropicMessagesRequest {
type AnthropicErrorResponse (line 56) | interface AnthropicErrorResponse {
constant DEFAULT_MAX_TOKENS (line 64) | const DEFAULT_MAX_TOKENS = 200_000;
constant DEFAULT_MAX_OUTPUT_TOKENS (line 65) | const DEFAULT_MAX_OUTPUT_TOKENS = 64_000;
class ClaudeLanguageModelServer (line 71) | class ClaudeLanguageModelServer extends Disposable {
method constructor (line 76) | constructor(
method createServer (line 93) | private createServer(): http.Server {
method handleMessagesRequest (line 121) | private async handleMessagesRequest(req: http.IncomingMessage, res: ht...
method readRequestBody (line 138) | private async readRequestBody(req: http.IncomingMessage): Promise<stri...
method handleAuthedMessagesRequest (line 151) | private async handleAuthedMessagesRequest(bodyString: string, headers:...
method selectEndpoint (line 253) | private selectEndpoint(endpoints: readonly IChatEndpoint[], requestedM...
method sendErrorResponse (line 287) | private sendErrorResponse(
method start (line 304) | public async start(): Promise<void> {
method stop (line 328) | public stop(): void {
method getConfig (line 332) | public getConfig(): IClaudeLanguageModelServerConfig {
method incrementUserInitiatedMessageCount (line 340) | public incrementUserInitiatedMessageCount(modelId: string): void {
method info (line 345) | private info(message: string): void {
method error (line 350) | private error(message: string): void {
method exception (line 355) | private exception(err: Error, message?: string): void {
method trace (line 359) | private trace(message: string): void {
type ExtractSessionIdResult (line 365) | interface ExtractSessionIdResult {
function extractSessionId (line 379) | function extractSessionId(headers: http.IncomingHttpHeaders, expectedNon...
function filterSupportedBetas (line 420) | function filterSupportedBetas(headerValue: string): string | undefined {
function messagesApiInputToRawMessagesForLogging (line 432) | function messagesApiInputToRawMessagesForLogging(request: AnthropicMessa...
class ClaudeStreamingPassThroughEndpoint (line 474) | class ClaudeStreamingPassThroughEndpoint implements IChatEndpoint {
method constructor (line 475) | constructor(
method urlOrRequestMetadata (line 488) | public get urlOrRequestMetadata(): string | RequestMetadata {
method getExtraHeaders (line 498) | public getExtraHeaders(): Record<string, string> {
method getEndpointFetchOptions (line 512) | getEndpointFetchOptions(): IEndpointFetchOptions {
method getUserAgent (line 518) | private getUserAgent(incomingUserAgent: string): string {
method interceptBody (line 527) | public interceptBody(body: IEndpointBody | undefined): void {
method acquireTokenizer (line 531) | public acquireTokenizer(): ITokenizer {
method modelMaxPromptTokens (line 535) | public get modelMaxPromptTokens(): number {
method maxOutputTokens (line 539) | public get maxOutputTokens(): number {
method model (line 543) | public get model(): string {
method modelProvider (line 547) | public get modelProvider(): string {
method name (line 551) | public get name(): string {
method version (line 555) | public get version(): string {
method family (line 559) | public get family(): string {
method tokenizer (line 563) | public get tokenizer(): TokenizerType {
method showInModelPicker (line 567) | public get showInModelPicker(): boolean {
method isPremium (line 571) | public get isPremium(): boolean | undefined {
method degradationReason (line 575) | public get degradationReason(): string | undefined {
method multiplier (line 579) | public get multiplier(): number | undefined {
method restrictedToSkus (line 583) | public get restrictedToSkus(): string[] | undefined {
method isFallback (line 587) | public get isFallback(): boolean {
method customModel (line 591) | public get customModel(): CustomModel | undefined {
method isExtensionContributed (line 595) | public get isExtensionContributed(): boolean | undefined {
method apiType (line 599) | public get apiType(): string | undefined {
method supportsThinkingContentInHistory (line 603) | public get supportsThinkingContentInHistory(): boolean | undefined {
method supportsAdaptiveThinking (line 607) | public get supportsAdaptiveThinking(): boolean | undefined {
method minThinkingBudget (line 611) | public get minThinkingBudget(): number | undefined {
method maxThinkingBudget (line 615) | public get maxThinkingBudget(): number | undefined {
method supportsReasoningEffort (line 619) | public get supportsReasoningEffort(): string[] | undefined {
method supportsToolCalls (line 623) | public get supportsToolCalls(): boolean {
method supportsVision (line 627) | public get supportsVision(): boolean {
method supportsPrediction (line 631) | public get supportsPrediction(): boolean {
method supportedEditTools (line 635) | public get supportedEditTools(): readonly EndpointEditToolName[] | und...
method processResponseFromChatEndpoint (line 639) | public async processResponseFromChatEndpoint(
method makeChatRequest (line 703) | public makeChatRequest(
method makeChatRequest2 (line 716) | public makeChatRequest2(
method createRequestBody (line 727) | public createRequestBody(
method cloneWithTokenOverride (line 747) | public cloneWithTokenOverride(modelMaxPromptTokens: number): IChatEndp...
FILE: src/extension/chatSessions/claude/node/claudeProjectFolders.ts
function computeFolderSlug (line 23) | function computeFolderSlug(folderUri: URI): string {
type ProjectFolder (line 33) | interface ProjectFolder {
function getProjectFolders (line 46) | async function getProjectFolders(
FILE: src/extension/chatSessions/claude/node/claudePromptResolver.ts
function uriToString (line 15) | function uriToString(uri: URI): string {
function resolvePromptToContentBlocks (line 27) | async function resolvePromptToContentBlocks(request: vscode.ChatRequest)...
FILE: src/extension/chatSessions/claude/node/claudeSessionStateService.ts
type UsageHandler (line 18) | type UsageHandler = (usage: vscode.ChatResultUsage) => void;
type SessionState (line 20) | interface SessionState {
type SessionStateChangeEvent (line 31) | interface SessionStateChangeEvent {
type IClaudeSessionStateService (line 38) | interface IClaudeSessionStateService {
class ClaudeSessionStateService (line 99) | class ClaudeSessionStateService extends Disposable implements IClaudeSes...
method constructor (line 109) | constructor() {
method getModelIdForSession (line 113) | getModelIdForSession(sessionId: string): string | undefined {
method setModelIdForSession (line 118) | setModelIdForSession(sessionId: string, modelId: string | undefined): ...
method getPermissionModeForSession (line 133) | getPermissionModeForSession(sessionId: string): PermissionMode {
method setPermissionModeForSession (line 137) | setPermissionModeForSession(sessionId: string, mode: PermissionMode): ...
method getCapturingTokenForSession (line 152) | getCapturingTokenForSession(sessionId: string): CapturingToken | undef...
method setCapturingTokenForSession (line 156) | setCapturingTokenForSession(sessionId: string, token: CapturingToken |...
method getFolderInfoForSession (line 167) | getFolderInfoForSession(sessionId: string): ClaudeFolderInfo | undefin...
method setFolderInfoForSession (line 171) | setFolderInfoForSession(sessionId: string, folderInfo: ClaudeFolderInf...
method getUsageHandlerForSession (line 186) | getUsageHandlerForSession(sessionId: string): UsageHandler | undefined {
method setUsageHandlerForSession (line 190) | setUsageHandlerForSession(sessionId: string, handler: UsageHandler | u...
method dispose (line 201) | override dispose(): void {
FILE: src/extension/chatSessions/claude/node/claudeSettingsChangeTracker.ts
type SettingsPathResolver (line 15) | type SettingsPathResolver = () => URI[];
type DirectoryResolverConfig (line 21) | interface DirectoryResolverConfig {
class ClaudeSettingsChangeTracker (line 35) | class ClaudeSettingsChangeTracker {
method constructor (line 40) | constructor(
method registerPathResolver (line 51) | registerPathResolver(resolver: SettingsPathResolver): void {
method registerDirectoryResolver (line 62) | registerDirectoryResolver(resolver: () => URI[], extension?: string): ...
method _enumerateDirectory (line 69) | private async _enumerateDirectory(dir: URI, extension?: string): Promi...
method _getAllPaths (line 89) | private async _getAllPaths(): Promise<URI[]> {
method takeSnapshot (line 109) | async takeSnapshot(): Promise<void> {
method _checkUri (line 131) | private async _checkUri(uri: URI): Promise<URI | undefined> {
method _changedFilesGenerator (line 159) | private async *_changedFilesGenerator(): AsyncGenerator<URI> {
method hasChanges (line 204) | async hasChanges(): Promise<boolean> {
FILE: src/extension/chatSessions/claude/node/hooks/loggingHooks.ts
class NotificationLoggingHook (line 23) | class NotificationLoggingHook implements HookCallbackMatcher {
method constructor (line 26) | constructor(
method _handle (line 33) | private async _handle(input: HookInput): Promise<HookJSONOutput> {
class UserPromptSubmitLoggingHook (line 47) | class UserPromptSubmitLoggingHook implements HookCallbackMatcher {
method constructor (line 50) | constructor(
method _handle (line 57) | private async _handle(input: HookInput): Promise<HookJSONOutput> {
class StopLoggingHook (line 71) | class StopLoggingHook implements HookCallbackMatcher {
method constructor (line 74) | constructor(
method _handle (line 81) | private async _handle(input: HookInput): Promise<HookJSONOutput> {
class PreCompactLoggingHook (line 95) | class PreCompactLoggingHook implements HookCallbackMatcher {
method constructor (line 98) | constructor(
method _handle (line 105) | private async _handle(input: HookInput): Promise<HookJSONOutput> {
class PermissionRequestLoggingHook (line 119) | class PermissionRequestLoggingHook implements HookCallbackMatcher {
method constructor (line 122) | constructor(
method _handle (line 129) | private async _handle(input: HookInput): Promise<HookJSONOutput> {
FILE: src/extension/chatSessions/claude/node/hooks/sessionHooks.ts
class SessionStartLoggingHook (line 21) | class SessionStartLoggingHook implements HookCallbackMatcher {
method constructor (line 24) | constructor(
method _handle (line 31) | private async _handle(input: HookInput): Promise<HookJSONOutput> {
class SessionEndLoggingHook (line 45) | class SessionEndLoggingHook implements HookCallbackMatcher {
method constructor (line 48) | constructor(
method _handle (line 55) | private async _handle(input: HookInput): Promise<HookJSONOutput> {
FILE: src/extension/chatSessions/claude/node/hooks/subagentHooks.ts
class SubagentStartLoggingHook (line 21) | class SubagentStartLoggingHook implements HookCallbackMatcher {
method constructor (line 24) | constructor(
method _handle (line 31) | private async _handle(input: HookInput): Promise<HookJSONOutput> {
class SubagentStopLoggingHook (line 45) | class SubagentStopLoggingHook implements HookCallbackMatcher {
method constructor (line 48) | constructor(
method _handle (line 55) | private async _handle(input: HookInput): Promise<HookJSONOutput> {
FILE: src/extension/chatSessions/claude/node/hooks/toolHooks.ts
class PreToolUseLoggingHook (line 26) | class PreToolUseLoggingHook implements HookCallbackMatcher {
method constructor (line 29) | constructor(
method _handle (line 36) | private async _handle(input: HookInput, toolID: string | undefined): P...
class PostToolUseLoggingHook (line 51) | class PostToolUseLoggingHook implements HookCallbackMatcher {
method constructor (line 54) | constructor(
method _handle (line 63) | private async _handle(input: HookInput, toolID: string | undefined): P...
class PostToolUseFailureLoggingHook (line 107) | class PostToolUseFailureLoggingHook implements HookCallbackMatcher {
method constructor (line 110) | constructor(
method _handle (line 119) | private async _handle(input: HookInput, toolID: string | undefined): P...
class PlanModeHook (line 160) | class PlanModeHook implements HookCallbackMatcher {
method constructor (line 163) | constructor(
method _handle (line 170) | private async _handle(input: HookInput): Promise<HookJSONOutput> {
FILE: src/extension/chatSessions/claude/node/sessionParser/claudeCodeSessionService.ts
function getErrorCode (line 50) | function getErrorCode(error: unknown): string | undefined {
type IClaudeCodeSessionService (line 72) | interface IClaudeCodeSessionService {
class ClaudeCodeSessionService (line 92) | class ClaudeCodeSessionService implements IClaudeCodeSessionService {
method constructor (line 95) | constructor(
method getAllSessions (line 108) | async getAllSessions(token: CancellationToken): Promise<readonly IClau...
method getSession (line 136) | async getSession(resource: URI, token: CancellationToken): Promise<ICl...
method _getProjectFolders (line 177) | private _getProjectFolders() {
method _tryReadDirectory (line 188) | private async _tryReadDirectory(dirUri: URI): Promise<[string, FileTyp...
method _loadSubagents (line 210) | private async _loadSubagents(
method _loadSubagentsFromEntries (line 236) | private async _loadSubagentsFromEntries(
method _parseSubagentFile (line 280) | private async _parseSubagentFile(
method _extractSubagentCorrelation (line 313) | private async _extractSubagentCorrelation(
FILE: src/extension/chatSessions/claude/node/sessionParser/claudeSessionParser.ts
type ParseError (line 42) | interface ParseError {
type LinkedListParseResult (line 52) | interface LinkedListParseResult {
type ParseStats (line 68) | interface ParseStats {
function parseSessionFileContent (line 94) | function parseSessionFileContent(
function isVisibleNode (line 219) | function isVisibleNode(raw: Record<string, unknown>): boolean {
function validateAndReviveNode (line 244) | function validateAndReviveNode(node: ChainNode): StoredMessage | null {
function reviveUserMessage (line 278) | function reviveUserMessage(entry: UserMessageEntry): StoredMessage {
function reviveAssistantMessage (line 305) | function reviveAssistantMessage(entry: AssistantMessageEntry): StoredMes...
function reviveSystemMessage (line 327) | function reviveSystemMessage(node: ChainNode): StoredMessage | null {
function buildSubagentSession (line 356) | function buildSubagentSession(
FILE: src/extension/chatSessions/claude/node/sessionParser/claudeSessionSchema.ts
function vIsoTimestamp (line 58) | function vIsoTimestamp(): IValidator<string> {
function vUuid (line 85) | function vUuid(): IValidator<string> {
function assertValidatorAssignable (line 113) | function assertValidatorAssignable<_TValidator extends TSDKType, TSDKTyp...
type TextBlock (line 125) | type TextBlock = Anthropic.TextBlock;
type ThinkingBlock (line 137) | type ThinkingBlock = Anthropic.ThinkingBlock;
type ToolUseBlock (line 150) | type ToolUseBlock = Anthropic.Beta.Messages.BetaToolUseBlock;
type ToolResultBlock (line 172) | type ToolResultBlock = Anthropic.ToolResultBlockParam;
type ImageBlock (line 205) | type ImageBlock = Anthropic.ImageBlockParam;
type UnknownContentBlock (line 214) | type UnknownContentBlock = { type: string };
type ContentBlock (line 229) | type ContentBlock = TextBlock | ThinkingBlock | ToolUseBlock | ToolResul...
type CacheCreation (line 242) | type CacheCreation = ValidatorType<typeof vCacheCreation>;
type Usage (line 254) | type Usage = ValidatorType<typeof vUsage>;
type UserMessageContent (line 267) | type UserMessageContent = ValidatorType<typeof vUserMessageContent>;
type AssistantMessageContent (line 283) | type AssistantMessageContent = ValidatorType<typeof vAssistantMessageCon...
type SystemMessageContent (line 289) | interface SystemMessageContent {
constant SYNTHETIC_MODEL_ID (line 298) | const SYNTHETIC_MODEL_ID = '<synthetic>';
type QueueOperationEntry (line 314) | type QueueOperationEntry = ValidatorType<typeof vQueueOperationEntry>;
type UserMessageEntry (line 345) | type UserMessageEntry = ValidatorType<typeof vUserMessageEntry>;
type AssistantMessageEntry (line 356) | type AssistantMessageEntry = ValidatorType<typeof vAssistantMessageEntry>;
type SummaryEntry (line 367) | type SummaryEntry = ValidatorType<typeof vSummaryEntry>;
type CustomTitleEntry (line 379) | type CustomTitleEntry = ValidatorType<typeof vCustomTitleEntry>;
type MessageEntry (line 400) | type MessageEntry = ValidatorType<typeof vMessageEntry>;
type ImageMediaType (line 406) | type ImageMediaType = Anthropic.Messages.Base64ImageSource['media_type'];
constant SUPPORTED_IMAGE_MEDIA_TYPES (line 409) | const SUPPORTED_IMAGE_MEDIA_TYPES: Record<ImageMediaType, true> = {
function isImageMediaType (line 416) | function isImageMediaType(value: string): value is ImageMediaType {
function toAnthropicImageMediaType (line 425) | function toAnthropicImageMediaType(mimeType: string): ImageMediaType | u...
function isUserRequest (line 435) | function isUserRequest(content: UserMessageContent['content']): boolean {
type ChainNode (line 453) | interface ChainNode {
type StoredMessage (line 463) | interface StoredMessage {
type ISubagentSession (line 485) | interface ISubagentSession {
type IClaudeCodeSession (line 494) | interface IClaudeCodeSession extends IClaudeCodeSessionInfo {
type IClaudeCodeSessionInfo (line 507) | interface IClaudeCodeSessionInfo {
FILE: src/extension/chatSessions/claude/node/sessionParser/sdkSessionAdapter.ts
function stripSystemReminders (line 38) | function stripSystemReminders(text: string): string {
function computeSessionLabel (line 46) | function computeSessionLabel(info: SDKSessionInfo): string {
constant MAX_LABEL_LENGTH (line 64) | const MAX_LABEL_LENGTH = 50;
function truncateLabel (line 66) | function truncateLabel(text: string): string {
function sdkSessionInfoToSessionInfo (line 82) | function sdkSessionInfoToSessionInfo(
type SubagentCorrelationMap (line 105) | type SubagentCorrelationMap = ReadonlyMap<string, string>;
function sdkSessionMessagesToStoredMessages (line 121) | function sdkSessionMessagesToStoredMessages(
function sdkSessionMessageToStoredMessage (line 137) | function sdkSessionMessageToStoredMessage(
function buildClaudeCodeSession (line 188) | function buildClaudeCodeSession(
FILE: src/extension/chatSessions/claude/node/sessionParser/test/claudeCodeSessionService.spec.ts
function createSdkSessionInfo (line 29) | function createSdkSessionInfo(overrides?: Partial<SDKSessionInfo>): SDKS...
function createUserSessionMessage (line 38) | function createUserSessionMessage(overrides?: Partial<SessionMessage>): ...
function createAssistantSessionMessage (line 49) | function createAssistantSessionMessage(overrides?: Partial<SessionMessag...
class MockFolderRepositoryManager (line 67) | class MockFolderRepositoryManager implements IFolderRepositoryManager {
method setMRUEntries (line 71) | setMRUEntries(entries: FolderRepositoryMRUEntry[]): void {
method setUntitledSessionFolder (line 75) | setUntitledSessionFolder(): void { }
method getUntitledSessionFolder (line 76) | getUntitledSessionFolder(): undefined { return undefined; }
method deleteUntitledSessionFolder (line 77) | deleteUntitledSessionFolder(): void { }
method getFolderRepository (line 78) | async getFolderRepository(): Promise<{ folder: undefined; repository: ...
method initializeFolderRepository (line 79) | async initializeFolderRepository(): Promise<{ folder: undefined; repos...
method getRepositoryInfo (line 80) | async getRepositoryInfo(): Promise<{ repository: undefined; headBranch...
method getFolderMRU (line 81) | async getFolderMRU(): Promise<FolderRepositoryMRUEntry[]> { return thi...
method deleteMRUEntry (line 82) | async deleteMRUEntry(): Promise<void> { }
method getLastUsedFolderIdInUntitledWorkspace (line 83) | getLastUsedFolderIdInUntitledWorkspace(): undefined { return undefined; }
FILE: src/extension/chatSessions/claude/node/sessionParser/test/sdkSessionAdapter.spec.ts
function createSdkSessionInfo (line 17) | function createSdkSessionInfo(overrides?: Partial<SDKSessionInfo>): SDKS...
function createUserSessionMessage (line 26) | function createUserSessionMessage(overrides?: Partial<SessionMessage> & ...
function createAssistantSessionMessage (line 41) | function createAssistantSessionMessage(overrides?: Partial<SessionMessag...
FILE: src/extension/chatSessions/claude/node/test/askUserQuestionHandler.spec.ts
class MockToolsService (line 24) | class MockToolsService implements IToolsService {
method setResult (line 37) | setResult(answerResult: IAnswerResult): void {
method setEmptyResult (line 43) | setEmptyResult(): void {
method setShouldThrow (line 47) | setShouldThrow(): void {
method invokeToolCalls (line 51) | get invokeToolCalls(): ReadonlyArray<{ name: string; input: unknown }> {
method invokeTool (line 55) | async invokeTool(name: string, options: vscode.LanguageModelToolInvoca...
method invokeToolWithEndpoint (line 63) | invokeToolWithEndpoint(name: string, options: vscode.LanguageModelTool...
method getCopilotTool (line 67) | getCopilotTool(): ICopilotTool<unknown> | undefined { return undefined; }
method getTool (line 68) | getTool(): vscode.LanguageModelToolInformation | undefined { return un...
method getToolByToolReferenceName (line 69) | getToolByToolReferenceName(): vscode.LanguageModelToolInformation | un...
method validateToolInput (line 70) | validateToolInput(): IToolValidationResult { return { inputObj: {} }; }
method validateToolName (line 71) | validateToolName(): string | undefined { return undefined; }
method getEnabledTools (line 72) | getEnabledTools(): vscode.LanguageModelToolInformation[] { return []; }
function createMockContext (line 75) | function createMockContext(): ClaudeToolPermissionContext {
function createInput (line 81) | function createInput(questions: AskUserQuestionInput['questions']): AskU...
FILE: src/extension/chatSessions/claude/node/test/claudeCodeAgent.spec.ts
function createMockLangModelServer (line 24) | function createMockLangModelServer(): ClaudeLanguageModelServer {
function toPromptBlocks (line 31) | function toPromptBlocks(text: string): Anthropic.TextBlockParam[] {
function createMockChatRequest (line 35) | function createMockChatRequest(): vscode.ChatRequest {
constant TEST_MODEL_ID (line 39) | const TEST_MODEL_ID = 'claude-3-sonnet';
constant TEST_PERMISSION_MODE (line 40) | const TEST_PERMISSION_MODE = 'acceptEdits' as const;
constant TEST_FOLDER_INFO (line 41) | const TEST_FOLDER_INFO: ClaudeFolderInfo = { cwd: '/test/project', addit...
constant TEST_SESSION_ID (line 42) | const TEST_SESSION_ID = 'test-session-id';
function commitTestState (line 49) | function commitTestState(
FILE: src/extension/chatSessions/claude/node/test/claudeCodeAgentOTel.spec.ts
constant TEST_MODEL_ID (line 27) | const TEST_MODEL_ID = 'claude-3-sonnet';
constant TEST_PERMISSION_MODE (line 28) | const TEST_PERMISSION_MODE: PermissionMode = 'acceptEdits';
constant TEST_FOLDER_INFO (line 29) | const TEST_FOLDER_INFO: ClaudeFolderInfo = { cwd: '/test/project', addit...
constant SERVER_CONFIG (line 30) | const SERVER_CONFIG = { port: 8080, nonce: 'test-nonce' };
function createMockLangModelServer (line 32) | function createMockLangModelServer(): ClaudeLanguageModelServer {
function createMockChatRequest (line 38) | function createMockChatRequest(): vscode.ChatRequest {
function commitTestState (line 42) | function commitTestState(
function createToolCallSdkService (line 54) | function createToolCallSdkService(messageFactory: (sessionId: string) =>...
function createSdkServiceWithHooks (line 84) | function createSdkServiceWithHooks(
function invokeHook (line 117) | async function invokeHook(
function createOTelService (line 131) | function createOTelService() {
function toPromptBlocks (line 140) | function toPromptBlocks(text: string): Anthropic.TextBlockParam[] {
function makeAssistantMessage (line 145) | function makeAssistantMessage(sessionId: string, content: Anthropic.Beta...
function makeUserMessage (line 165) | function makeUserMessage(sessionId: string, content: Anthropic.Messages....
function makeResultMessage (line 178) | function makeResultMessage(sessionId: string): SDKResultMessage {
FILE: src/extension/chatSessions/claude/node/test/claudeCodeModels.spec.ts
function createMockEndpoint (line 19) | function createMockEndpoint(overrides: {
class MockEndpointProvider (line 58) | class MockEndpointProvider implements IEndpointProvider {
method constructor (line 62) | constructor(private readonly endpoints: IChatEndpoint[]) { }
method getAllChatEndpoints (line 64) | async getAllChatEndpoints(): Promise<IChatEndpoint[]> {
method getChatEndpoint (line 69) | getChatEndpoint(): Promise<IChatEndpoint> {
method getEmbeddingsEndpoint (line 72) | getEmbeddingsEndpoint(): Promise<any> {
method getAllCompletionModels (line 75) | getAllCompletionModels(): Promise<any[]> {
class RefreshableMockEndpointProvider (line 83) | class RefreshableMockEndpointProvider implements IEndpointProvider {
method constructor (line 89) | constructor(endpoints: IChatEndpoint[]) {
method setEndpoints (line 93) | setEndpoints(endpoints: IChatEndpoint[]): void {
method fireRefresh (line 97) | fireRefresh(): void {
method getAllChatEndpoints (line 101) | async getAllChatEndpoints(): Promise<IChatEndpoint[]> {
method getChatEndpoint (line 105) | getChatEndpoint(): Promise<IChatEndpoint> {
method getEmbeddingsEndpoint (line 108) | getEmbeddingsEndpoint(): Promise<any> {
method getAllCompletionModels (line 111) | getAllCompletionModels(): Promise<any[]> {
function createServiceWithEndpoints (line 123) | function createServiceWithEndpoints(endpoints: IChatEndpoint[]): ClaudeC...
function createServiceWithRefreshableEndpoints (line 408) | function createServiceWithRefreshableEndpoints(
function createMockLm (line 419) | function createMockLm(): { lm: typeof vscode['lm']; getCapturedProvider:...
function getProviderInfo (line 430) | async function getProviderInfo(service: ClaudeCodeModels, lm: typeof vsc...
FILE: src/extension/chatSessions/claude/node/test/claudeProjectFolders.spec.ts
class MockFolderRepositoryManager (line 14) | class MockFolderRepositoryManager implements IFolderRepositoryManager {
method setMRUEntries (line 18) | setMRUEntries(entries: FolderRepositoryMRUEntry[]): void {
method setUntitledSessionFolder (line 22) | setUntitledSessionFolder(): void { }
method getUntitledSessionFolder (line 23) | getUntitledSessionFolder(): undefined { return undefined; }
method deleteUntitledSessionFolder (line 24) | deleteUntitledSessionFolder(): void { }
method getFolderRepository (line 25) | async getFolderRepository(): Promise<{ folder: undefined; repository: ...
method initializeFolderRepository (line 26) | async initializeFolderRepository(): Promise<{ folder: undefined; repos...
method getRepositoryInfo (line 27) | async getRepositoryInfo(): Promise<any> { return undefined; }
method getFolderMRU (line 28) | async getFolderMRU(): Promise<FolderRepositoryMRUEntry[]> { return thi...
method deleteMRUEntry (line 29) | async deleteMRUEntry(): Promise<void> { }
method getLastUsedFolderIdInUntitledWorkspace (line 30) | getLastUsedFolderIdInUntitledWorkspace(): undefined { return undefined; }
FILE: src/extension/chatSessions/claude/node/test/claudeToolPermissionService.spec.ts
class MockToolsService (line 29) | class MockToolsService implements IToolsService {
method setConfirmationResult (line 42) | setConfirmationResult(result: 'yes' | 'no'): void {
method setOptionsConfirmationResult (line 46) | setOptionsConfirmationResult(result: string | undefined): void {
method invokeToolCalls (line 50) | get invokeToolCalls(): ReadonlyArray<{ name: string; input: unknown }> {
method clearCalls (line 54) | clearCalls(): void {
method invokeToolWithEndpoint (line 58) | invokeToolWithEndpoint(name: string, options: vscode.LanguageModelTool...
method invokeTool (line 64) | async invokeTool(
method getCopilotTool (line 87) | getCopilotTool(): ICopilotTool<unknown> | undefined {
method getTool (line 91) | getTool(): vscode.LanguageModelToolInformation | undefined {
method getToolByToolReferenceName (line 95) | getToolByToolReferenceName(): vscode.LanguageModelToolInformation | un...
method validateToolInput (line 99) | validateToolInput(): IToolValidationResult {
method validateToolName (line 103) | validateToolName(): string | undefined {
method getEnabledTools (line 107) | getEnabledTools(): vscode.LanguageModelToolInformation[] {
function createMockContext (line 115) | function createMockContext(): ClaudeToolPermissionContext {
class AutoApproveHandler (line 211) | class AutoApproveHandler implements IClaudeToolPermissionHandler<ClaudeT...
method canAutoApprove (line 214) | async canAutoApprove(): Promise<boolean> {
class FullHandler (line 238) | class FullHandler implements IClaudeToolPermissionHandler<ClaudeToolName...
method handle (line 241) | async handle(): Promise<ClaudeToolPermissionResult> {
method invokeTool (line 331) | override async invokeTool(name: string): Promise<vscode.LanguageModelToo...
method invokeTool (line 368) | override async invokeTool(): Promise<vscode.LanguageModelToolResult2> {
method invokeTool (line 386) | override async invokeTool(): Promise<vscode.LanguageModelToolResult2> {
FILE: src/extension/chatSessions/claude/node/test/extractSessionId.spec.ts
constant NONCE (line 9) | const NONCE = 'vscode-lm-test-nonce';
FILE: src/extension/chatSessions/claude/node/test/mockClaudeCodeModels.ts
class MockClaudeCodeModels (line 11) | class MockClaudeCodeModels extends ClaudeCodeModels {
method constructor (line 12) | constructor(
method getModels (line 20) | override async getModels(): Promise<ClaudeCodeModelInfo[]> {
FILE: src/extension/chatSessions/claude/node/test/mockClaudeCodeSdkService.ts
class MockClaudeCodeSdkService (line 12) | class MockClaudeCodeSdkService implements IClaudeCodeSdkService {
method query (line 23) | public async query(options: {
method listSessions (line 32) | public async listSessions(dir: string): Promise<SDKSessionInfo[]> {
method getSessionInfo (line 36) | public async getSessionInfo(sessionId: string, dir: string): Promise<S...
method getSessionMessages (line 40) | public async getSessionMessages(sessionId: string, dir: string): Promi...
method renameSession (line 47) | public async renameSession(sessionId: string, title: string): Promise<...
method forkSession (line 55) | public async forkSession(sessionId: string, options?: ForkSessionOptio...
method createMockQuery (line 61) | private createMockQuery(prompt: AsyncIterable<SDKUserMessage>): Query {
method createMockGenerator (line 74) | private async* createMockGenerator(prompt: AsyncIterable<SDKUserMessag...
FILE: src/extension/chatSessions/claude/node/test/mockClaudeToolPermissionService.ts
class MockClaudeToolPermissionService (line 16) | class MockClaudeToolPermissionService implements IClaudeToolPermissionSe...
method canUseTool (line 21) | public async canUseTool(
FILE: src/extension/chatSessions/claude/node/test/planModeHook.spec.ts
function createPostToolUseHookInput (line 57) | function createPostToolUseHookInput(toolName: string, sessionId: string)...
FILE: src/extension/chatSessions/claude/node/test/resolvePromptToContentBlocks.spec.ts
function makeRef (line 16) | function makeRef(
function makeLocationRef (line 23) | function makeLocationRef(
function textBlocks (line 32) | function textBlocks(blocks: Anthropic.ContentBlockParam[]): Anthropic.Te...
function imageBlocks (line 36) | function imageBlocks(blocks: Anthropic.ContentBlockParam[]): Anthropic.I...
FILE: src/extension/chatSessions/claude/node/toolPermissionHandlers/editToolHandler.ts
type EditToolName (line 14) | type EditToolName = ClaudeToolNames.Edit | ClaudeToolNames.Write | Claud...
class EditToolHandler (line 20) | class EditToolHandler implements IClaudeToolPermissionHandler<EditToolNa...
method constructor (line 23) | constructor(
method canAutoApprove (line 27) | public async canAutoApprove(
FILE: src/extension/chatSessions/claude/vscode-node/claudeSlashCommandService.ts
type IClaudeSlashCommandRequest (line 13) | interface IClaudeSlashCommandRequest {
type IClaudeSlashCommandResult (line 21) | interface IClaudeSlashCommandResult {
type IClaudeSlashCommandService (line 26) | interface IClaudeSlashCommandService {
class ClaudeSlashCommandService (line 54) | class ClaudeSlashCommandService extends Disposable implements IClaudeSla...
method constructor (line 60) | constructor(
method tryHandleCommand (line 69) | async tryHandleCommand(
method getRegisteredCommands (line 99) | getRegisteredCommands(): readonly string[] {
method _getHandler (line 104) | private _getHandler(commandName: string): IClaudeSlashCommandHandler |...
method _ensureInitialized (line 109) | private _ensureInitialized(): void {
FILE: src/extension/chatSessions/claude/vscode-node/slashCommands/agentsCommand.ts
type AgentLocationType (line 80) | type AgentLocationType = 'project' | 'user';
type AgentLocation (line 85) | interface AgentLocation {
type AgentConfig (line 95) | interface AgentConfig {
type AgentWithSource (line 106) | interface AgentWithSource {
constant AGENT_MODELS (line 115) | const AGENT_MODELS = [
constant TOOL_CATEGORIES (line 142) | const TOOL_CATEGORIES = [
constant ALL_TOOLS (line 153) | const ALL_TOOLS = [
class AgentsSlashCommand (line 172) | class AgentsSlashCommand implements IClaudeSlashCommandHandler {
method constructor (line 177) | constructor(
method handle (line 184) | async handle(
method _runWizard (line 202) | private async _runWizard(): Promise<void> {
method _showMainMenu (line 219) | private async _showMainMenu(): Promise<{ action: 'create' | 'select'; ...
method _runCreateFlow (line 291) | private async _runCreateFlow(): Promise<void> {
method _selectLocation (line 314) | private async _selectLocation(): Promise<AgentLocation | undefined> {
method _selectCreationMethod (line 356) | private async _selectCreationMethod(): Promise<'generate' | 'manual' |...
method _runGenerateFlow (line 380) | private async _runGenerateFlow(location: AgentLocation): Promise<void> {
method _runManualFlow (line 436) | private async _runManualFlow(location: AgentLocation): Promise<void> {
method _generateAgentConfig (line 512) | private async _generateAgentConfig(
method _selectTools (line 584) | private async _selectTools(): Promise<string[] | undefined> {
method _selectModel (line 717) | private async _selectModel(): Promise<string | undefined> {
method _runAgentActionMenu (line 736) | private async _runAgentActionMenu(agent: AgentWithSource): Promise<voi...
method _runEditMenu (line 775) | private async _runEditMenu(agent: AgentWithSource): Promise<void> {
method _deleteAgent (line 828) | private async _deleteAgent(agent: AgentWithSource): Promise<void> {
method _loadProjectAgents (line 846) | private async _loadProjectAgents(): Promise<AgentWithSource[]> {
method _loadUserAgents (line 869) | private async _loadUserAgents(): Promise<AgentWithSource[]> {
method _loadAgentsFromDirectory (line 883) | private async _loadAgentsFromDirectory(dir: URI, location: AgentLocati...
method _parseAgentFile (line 912) | private async _parseAgentFile(filePath: URI): Promise<AgentConfig | un...
method _saveAgent (line 960) | private async _saveAgent(filePath: URI, config: AgentConfig): Promise<...
method _openAgentFile (line 983) | private async _openAgentFile(filePath: URI): Promise<void> {
FILE: src/extension/chatSessions/claude/vscode-node/slashCommands/claudeSlashCommandRegistry.ts
type IClaudeSlashCommandHandler (line 15) | interface IClaudeSlashCommandHandler {
type IClaudeSlashCommandHandlerCtor (line 54) | interface IClaudeSlashCommandHandlerCtor {
function registerClaudeSlashCommand (line 93) | function registerClaudeSlashCommand(ctor: IClaudeSlashCommandHandlerCtor...
function getClaudeSlashCommandRegistry (line 101) | function getClaudeSlashCommandRegistry(): readonly IClaudeSlashCommandHa...
FILE: src/extension/chatSessions/claude/vscode-node/slashCommands/hooksCommand.ts
constant HOOK_EVENTS (line 58) | const HOOK_EVENTS = [
type HookEventId (line 147) | type HookEventId = typeof HOOK_EVENTS[number]['id'];
type HookEvent (line 148) | type HookEvent = typeof HOOK_EVENTS[number];
type SettingsLocationType (line 153) | type SettingsLocationType = 'local' | 'shared' | 'user';
type SettingsLocation (line 159) | interface SettingsLocation {
type HookConfig (line 170) | interface HookConfig {
type MatcherConfig (line 175) | interface MatcherConfig {
type HooksSettings (line 180) | interface HooksSettings {
type MatcherWithSource (line 187) | interface MatcherWithSource {
type HookWithSource (line 195) | interface HookWithSource {
type IHooksWizardResult (line 200) | interface IHooksWizardResult {
class HooksSlashCommand (line 216) | class HooksSlashCommand implements IClaudeSlashCommandHandler {
method constructor (line 221) | constructor(
method handle (line 228) | async handle(
method _runWizard (line 246) | private async _runWizard(): Promise<IHooksWizardResult | undefined> {
method _openFileAtHook (line 354) | private async _openFileAtHook(location: SettingsLocation, command: str...
method _showSuccessAndReturn (line 385) | private _showSuccessAndReturn(
method _selectHookEvent (line 401) | private async _selectHookEvent(): Promise<HookEvent | undefined> {
method _selectOrCreateMatcher (line 422) | private async _selectOrCreateMatcher(eventConfig: HookEvent): Promise<{
method _selectOrAddHookForEdit (line 507) | private async _selectOrAddHookForEdit(
method _selectOrAddHookFromList (line 580) | private async _selectOrAddHookFromList(
method _enterCommand (line 668) | private async _enterCommand(eventConfig: HookEvent, matcher: string, l...
method _selectSaveLocation (line 683) | private async _selectSaveLocation(): Promise<SettingsLocation | undefi...
method _getAllSettingsLocations (line 755) | private _getAllSettingsLocations(): SettingsLocation[] {
method _loadSettings (line 790) | private async _loadSettings(settingsPath: URI): Promise<HooksSettings> {
method _saveSettings (line 799) | private async _saveSettings(settingsPath: URI, settings: HooksSettings...
method _saveHookConfig (line 811) | private async _saveHookConfig(
method _getExistingMatchersWithSource (line 858) | private async _getExistingMatchersWithSource(event: HookEventId): Prom...
method _getExistingHooksWithSource (line 888) | private async _getExistingHooksWithSource(event: HookEventId, matcher:...
method _getHooksAtLocation (line 917) | private async _getHooksAtLocation(event: HookEventId, matcher: string,...
FILE: src/extension/chatSessions/claude/vscode-node/slashCommands/memoryCommand.ts
type MemoryLocationType (line 38) | type MemoryLocationType = 'user' | 'project' | 'local';
type MemoryLocation (line 43) | interface MemoryLocation {
class MemorySlashCommand (line 60) | class MemorySlashCommand implements IClaudeSlashCommandHandler {
method constructor (line 65) | constructor(
method handle (line 72) | async handle(
method _runPicker (line 90) | private async _runPicker(): Promise<void> {
method _getMemoryLocations (line 109) | private _getMemoryLocations(): MemoryLocation[] {
method _buildQuickPickItems (line 158) | private async _buildQuickPickItems(locations: MemoryLocation[]): Promi...
method _fileExists (line 174) | private async _fileExists(path: URI): Promise<boolean> {
method _openOrCreateMemoryFile (line 183) | private async _openOrCreateMemoryFile(location: MemoryLocation): Promi...
method _getTemplate (line 201) | private _getTemplate(type: MemoryLocationType): string {
FILE: src/extension/chatSessions/claude/vscode-node/slashCommands/terminalCommand.ts
class TerminalSlashCommand (line 40) | class TerminalSlashCommand implements IClaudeSlashCommandHandler {
method constructor (line 47) | constructor(
method handle (line 54) | async handle(
method _getClaudeCliCommand (line 133) | private async _getClaudeCliCommand(): Promise<string | undefined> {
method _isCommandAvailable (line 152) | private async _isCommandAvailable(whichCommand: string, command: strin...
method _getLanguageModelServer (line 161) | private async _getLanguageModelServer(): Promise<ClaudeLanguageModelSe...
type ITerminalFormatMessageOptions (line 174) | interface ITerminalFormatMessageOptions {
function formatMessageForTerminal (line 189) | function formatMessageForTerminal(message: string, options: ITerminalFor...
FILE: src/extension/chatSessions/claude/vscode-node/slashCommands/test/claudeSlashCommandRegistry.spec.ts
class TestHandler (line 26) | class TestHandler implements IClaudeSlashCommandHandler {
method handle (line 29) | async handle(): Promise<vscode.ChatResult> {
class TestHandlerWithId (line 42) | class TestHandlerWithId implements IClaudeSlashCommandHandler {
method handle (line 46) | async handle(): Promise<vscode.ChatResult> {
class Handler1 (line 59) | class Handler1 implements IClaudeSlashCommandHandler {
method handle (line 62) | async handle(): Promise<vscode.ChatResult> {
class Handler2 (line 67) | class Handler2 implements IClaudeSlashCommandHandler {
method handle (line 70) | async handle(): Promise<vscode.ChatResult> {
class FirstHandler (line 85) | class FirstHandler implements IClaudeSlashCommandHandler {
method handle (line 88) | async handle(): Promise<vscode.ChatResult> {
class SecondHandler (line 93) | class SecondHandler implements IClaudeSlashCommandHandler {
method handle (line 96) | async handle(): Promise<vscode.ChatResult> {
class MinimalHandler (line 134) | class MinimalHandler implements IClaudeSlashCommandHandler {
method handle (line 137) | async handle(
class HandlerWithId (line 153) | class HandlerWithId implements IClaudeSlashCommandHandler {
method handle (line 157) | async handle(): Promise<vscode.ChatResult> {
class ParamHandler (line 171) | class ParamHandler implements IClaudeSlashCommandHandler {
method handle (line 174) | async handle(
class VoidHandler (line 201) | class VoidHandler implements IClaudeSlashCommandHandler {
method handle (line 204) | async handle(
class InstantiableHandler (line 226) | class InstantiableHandler implements IClaudeSlashCommandHandler {
method constructor (line 230) | constructor(public readonly testValue?: string) { }
method handle (line 232) | async handle(): Promise<vscode.ChatResult> {
class DIHandler (line 253) | class DIHandler implements IClaudeSlashCommandHandler {
method constructor (line 257) | constructor(
method handle (line 262) | async handle(): Promise<vscode.ChatResult> {
FILE: src/extension/chatSessions/claude/vscode-node/slashCommands/test/terminalCommand.spec.ts
type MockTerminal (line 26) | interface MockTerminal extends Pick<Terminal, 'show' | 'sendText' | 'dis...
class TestTerminalService (line 32) | class TestTerminalService extends NullTerminalService {
method constructor (line 36) | constructor() {
method createTerminal (line 46) | override createTerminal(): Terminal {
type MockLanguageModelServer (line 51) | interface MockLanguageModelServer extends Pick<ClaudeLanguageModelServer...
FILE: src/extension/chatSessions/claude/vscode-node/test/claudeSlashCommandService.spec.ts
class TestHooksHandler (line 23) | class TestHooksHandler implements IClaudeSlashCommandHandler {
method handle (line 28) | handle(args: string, stream: vscode.ChatResponseStream | undefined, to...
class TestMemoryHandler (line 33) | class TestMemoryHandler implements IClaudeSlashCommandHandler {
method handle (line 38) | handle(args: string, stream: vscode.ChatResponseStream | undefined, to...
function makeRequest (line 43) | function makeRequest(prompt: string, command?: string): IClaudeSlashComm...
FILE: src/extension/chatSessions/common/agentSessionsWorkspace.ts
type IAgentSessionsWorkspace (line 10) | interface IAgentSessionsWorkspace {
FILE: src/extension/chatSessions/common/chatCustomAgentsService.ts
type IChatCustomAgentsService (line 13) | interface IChatCustomAgentsService extends IDisposable {
FILE: src/extension/chatSessions/common/chatSessionMetadataStore.ts
type WorkspaceFolderEntry (line 12) | interface WorkspaceFolderEntry {
type RequestDetails (line 17) | interface RequestDetails {
type ChatSessionMetadataFile (line 31) | interface ChatSessionMetadataFile {
type IChatSessionMetadataStore (line 50) | interface IChatSessionMetadataStore {
FILE: src/extension/chatSessions/common/chatSessionWorkspaceFolderService.ts
type IChatSessionWorkspaceFolderService (line 17) | interface IChatSessionWorkspaceFolderService {
FILE: src/extension/chatSessions/common/chatSessionWorktreeCheckpointService.ts
type IChatSessionWorktreeCheckpointService (line 11) | interface IChatSessionWorktreeCheckpointService {
FILE: src/extension/chatSessions/common/chatSessionWorktreeService.ts
type ChatSessionWorktreeFile (line 10) | interface ChatSessionWorktreeFile {
type ChatSessionWorktreeData (line 20) | interface ChatSessionWorktreeData {
type ChatSessionWorktreeBaseProperties (line 25) | interface ChatSessionWorktreeBaseProperties {
type ChatSessionWorktreePropertiesV1 (line 33) | interface ChatSessionWorktreePropertiesV1 extends ChatSessionWorktreeBas...
type ChatSessionWorktreePropertiesV2 (line 38) | interface ChatSessionWorktreePropertiesV2 extends ChatSessionWorktreeBas...
type ChatSessionWorktreeProperties (line 48) | type ChatSessionWorktreeProperties = ChatSessionWorktreePropertiesV1 | C...
type IChatSessionWorktreeService (line 52) | interface IChatSessionWorktreeService {
FILE: src/extension/chatSessions/common/externalEditTracker.ts
class ExternalEditTracker (line 18) | class ExternalEditTracker {
method constructor (line 25) | constructor(
method trackEdit (line 38) | public async trackEdit(
method completeEdit (line 84) | public async completeEdit(editKey: string): Promise<string | undefined> {
FILE: src/extension/chatSessions/common/folderRepositoryManager.ts
type IsolationMode (line 16) | enum IsolationMode {
type InitializeFolderRepositoryOptions (line 25) | interface InitializeFolderRepositoryOptions {
type FolderRepositoryInfo (line 35) | interface FolderRepositoryInfo extends IWorkspaceInfo {
type GetFolderRepositoryOptions (line 53) | interface GetFolderRepositoryOptions {
type FolderRepositoryMRUEntry (line 65) | interface FolderRepositoryMRUEntry {
type IFolderRepositoryManager (line 89) | interface IFolderRepositoryManager {
FILE: src/extension/chatSessions/common/test/mockChatSessionMetadataStore.ts
class MockChatSessionMetadataStore (line 11) | class MockChatSessionMetadataStore implements IChatSessionMetadataStore {
method getMetadataFileUri (line 12) | getMetadataFileUri(sessionId: string): vscode.Uri {
method deleteSessionMetadata (line 24) | async deleteSessionMetadata(sessionId: string): Promise<void> {
method storeWorktreeInfo (line 33) | async storeWorktreeInfo(sessionId: string, properties: ChatSessionWork...
method storeWorkspaceFolderInfo (line 37) | async storeWorkspaceFolderInfo(sessionId: string, entry: WorkspaceFold...
method getSessionIdForWorktree (line 41) | async getSessionIdForWorktree(_folder: vscode.Uri): Promise<string | u...
method getWorktreeProperties (line 45) | async getWorktreeProperties(sessionIdOrFolder: string | vscode.Uri): P...
method getSessionWorkspaceFolder (line 52) | async getSessionWorkspaceFolder(_sessionId: string): Promise<vscode.Ur...
method getUsedWorkspaceFolders (line 56) | async getUsedWorkspaceFolders(): Promise<WorkspaceFolderEntry[]> {
method getAdditionalWorkspaces (line 60) | async getAdditionalWorkspaces(sessionId: string): Promise<IWorkspaceIn...
method setAdditionalWorkspaces (line 64) | async setAdditionalWorkspaces(sessionId: string, workspaces: IWorkspac...
method getSessionFirstUserMessage (line 68) | async getSessionFirstUserMessage(sessionId: string): Promise<string | ...
method setSessionFirstUserMessage (line 72) | async setSessionFirstUserMessage(sessionId: string, message: string): ...
method getCustomTitle (line 76) | async getCustomTitle(sessionId: string): Promise<string | undefined> {
method setCustomTitle (line 80) | async setCustomTitle(sessionId: string, title: string): Promise<void> {
method getRequestDetails (line 84) | async getRequestDetails(sessionId: string): Promise<RequestDetails[]> {
method updateRequestDetails (line 88) | async updateRequestDetails(sessionId: string, details: (Partial<Reques...
method getSessionAgent (line 101) | async getSessionAgent(sessionId: string): Promise<string | undefined> {
FILE: src/extension/chatSessions/common/ttlCache.ts
class TtlCache (line 10) | class TtlCache<V> {
method constructor (line 16) | constructor(private readonly _ttlMs: number) { }
method get (line 21) | get(key: string): V | undefined {
method set (line 36) | set(key: string, value: V): void {
method delete (line 43) | delete(key: string): void {
method clear (line 50) | clear(): void {
method has (line 57) | has(key: string): boolean {
class SingleSlotTtlCache (line 66) | class SingleSlotTtlCache<V> {
method constructor (line 72) | constructor(private readonly _ttlMs: number) { }
method get (line 77) | get(key: string): V | undefined {
method set (line 91) | set(key: string, value: V): void {
method clear (line 98) | clear(): void {
method has (line 105) | has(key: string): boolean {
FILE: src/extension/chatSessions/common/utils.ts
function isUntitledSessionId (line 6) | function isUntitledSessionId(sessionId: string): boolean {
FILE: src/extension/chatSessions/common/workspaceInfo.ts
type IWorkspaceInfo (line 9) | interface IWorkspaceInfo {
function getWorkingDirectory (line 34) | function getWorkingDirectory(workspaceInfo: IWorkspaceInfo): vscode.Uri ...
function isIsolationEnabled (line 40) | function isIsolationEnabled(workspaceInfo: IWorkspaceInfo): boolean {
function emptyWorkspaceInfo (line 44) | function emptyWorkspaceInfo(): IWorkspaceInfo {
FILE: src/extension/chatSessions/copilotcli/common/copilotCLIPrompt.ts
function extractChatPromptReferences (line 27) | function extractChatPromptReferences(prompt: string): ChatPromptReferenc...
function severityToString (line 127) | function severityToString(severity: DiagnosticSeverity): string {
function extractResourcesFromTag (line 137) | function extractResourcesFromTag(prompt: string, tagText: string): ChatP...
function extractPromptReferencesFromTag (line 250) | function extractPromptReferencesFromTag(prompt: string, tagText: string)...
function extractDiagnosticsFromTag (line 272) | function extractDiagnosticsFromTag(tagText: string): ChatPromptReference...
function extractGitHubIssueOrPRChatReference (line 300) | function extractGitHubIssueOrPRChatReference(content: string): ChatPromp...
function toEditorRange (line 340) | function toEditorRange(range: Range): EditorRange {
function getFolderAttachmentPath (line 344) | function getFolderAttachmentPath(folderPath: string): string {
function pathToUri (line 351) | function pathToUri(pathStr: string): URI {
FILE: src/extension/chatSessions/copilotcli/common/copilotCLITools.ts
type CreateTool (line 28) | interface CreateTool {
type ViewTool (line 36) | interface ViewTool {
type EditTool (line 45) | interface EditTool {
type StrReplaceTool (line 54) | interface StrReplaceTool {
type InsertTool (line 63) | interface InsertTool {
type ShellTool (line 72) | interface ShellTool {
type WriteShellTool (line 84) | interface WriteShellTool {
type ReadShellTool (line 93) | interface ReadShellTool {
type StopShellTool (line 101) | interface StopShellTool {
type ListShellTool (line 108) | interface ListShellTool {
type GrepTool (line 113) | interface GrepTool {
type GLobTool (line 131) | interface GLobTool {
type ReportIntentTool (line 139) | type ReportIntentTool = {
type ThinkTool (line 145) | type ThinkTool = {
type UpdateTodoTool (line 152) | type UpdateTodoTool = {
type ReportProgressTool (line 159) | type ReportProgressTool = {
type WebFetchTool (line 167) | type WebFetchTool = {
type WebSearchTool (line 177) | type WebSearchTool = {
type SearchCodeSubagentTool (line 184) | type SearchCodeSubagentTool = {
type ReplyToCommentTool (line 191) | type ReplyToCommentTool = {
type CodeReviewTool (line 199) | type CodeReviewTool = {
type ShowFileTool (line 207) | type ShowFileTool = {
type FetchCopilotCliDocumentationTool (line 216) | type FetchCopilotCliDocumentationTool = {
type ProposeWorkTool (line 221) | type ProposeWorkTool = {
type TaskCompleteTool (line 230) | type TaskCompleteTool = {
type AskUserTool (line 237) | type AskUserTool = {
type SkillTool (line 254) | type SkillTool = {
type TaskTool (line 261) | type TaskTool = {
type ListAgentsTool (line 272) | type ListAgentsTool = {
type ReadAgentTool (line 279) | type ReadAgentTool = {
type ExitPlanModeTool (line 288) | type ExitPlanModeTool = {
type SqlTool (line 297) | type SqlTool = {
type LspTool (line 306) | type LspTool = {
type CreatePullRequestTool (line 320) | type CreatePullRequestTool = {
type DependencyCheckerTool (line 329) | type DependencyCheckerTool = {
type StoreMemoryTool (line 336) | type StoreMemoryTool = {
type ParallelValidationTool (line 347) | type ParallelValidationTool = {
type ApplyPatchTool (line 352) | type ApplyPatchTool = {
type WriteAgentTool (line 360) | type WriteAgentTool = {
type McpReloadTool (line 368) | type McpReloadTool = {
type McpValidateTool (line 373) | type McpValidateTool = {
type ToolSearchTool (line 380) | type ToolSearchTool = {
type CodeQLCheckerTool (line 388) | type CodeQLCheckerTool = {
type StringReplaceArgumentTypes (line 394) | type StringReplaceArgumentTypes = CreateTool | ViewTool | StrReplaceTool...
type ToStringReplaceEditorArguments (line 395) | type ToStringReplaceEditorArguments<T extends StringReplaceArgumentTypes...
type StringReplaceEditorTool (line 398) | type StringReplaceEditorTool = {
type ToolInfo (line 403) | type ToolInfo = StringReplaceEditorTool | EditTool | CreateTool | ViewTo...
type ToolCall (line 414) | type ToolCall = ToolInfo & {
type UnknownToolCall (line 419) | type UnknownToolCall = { toolName: string; arguments: unknown; toolCallI...
function isInstructionAttachmentPath (line 421) | function isInstructionAttachmentPath(path: string): boolean {
function isCopilotCliEditToolCall (line 427) | function isCopilotCliEditToolCall(data: { toolName: string; arguments?: ...
function isCopilotCLIToolThatCouldRequirePermissions (line 435) | function isCopilotCLIToolThatCouldRequirePermissions(event: ToolExecutio...
function getAffectedUrisForEditTool (line 452) | function getAffectedUrisForEditTool(data: { toolName: string; arguments?...
function stripReminders (line 468) | function stripReminders(text: string): string {
function extractPRMetadata (line 486) | function extractPRMetadata(content: string): { cleanedContent: string; p...
function buildChatHistoryFromEvents (line 519) | function buildChatHistoryFromEvents(sessionId: string, modelId: string |...
function getRangeInPrompt (line 698) | function getRangeInPrompt(prompt: string, referencedName: string): [numb...
function convertMcpContentToToolInvocationData (line 717) | function convertMcpContentToToolInvocationData(result: ToolExecutionComp...
function processToolExecutionStart (line 793) | function processToolExecutionStart(event: ToolExecutionStartEvent, pendi...
function processToolExecutionComplete (line 805) | function processToolExecutionComplete(event: ToolExecutionCompleteEvent,...
function createCopilotCLIToolInvocation (line 843) | function createCopilotCLIToolInvocation(data: {
type Formatter (line 887) | type Formatter = (invocation: ChatToolInvocationPart, toolCall: ToolCall...
type PostInvocationFormatter (line 888) | type PostInvocationFormatter = (invocation: ChatToolInvocationPart, tool...
type ToolCallFor (line 889) | type ToolCallFor<T extends ToolCall['toolName']> = Extract<ToolCall, { t...
type ToolCallResult (line 890) | type ToolCallResult = ToolExecutionCompleteEvent['data'];
function formatProgressToolInvocation (line 946) | function formatProgressToolInvocation(invocation: ChatToolInvocationPart...
function formatViewToolInvocation (line 956) | function formatViewToolInvocation(invocation: ChatToolInvocationPart, to...
function formatStrReplaceEditorInvocation (line 979) | function formatStrReplaceEditorInvocation(invocation: ChatToolInvocation...
function formatInsertToolInvocation (line 1003) | function formatInsertToolInvocation(invocation: ChatToolInvocationPart, ...
function formatEditToolInvocation (line 1010) | function formatEditToolInvocation(invocation: ChatToolInvocationPart, to...
function formatCreateToolInvocation (line 1023) | function formatCreateToolInvocation(invocation: ChatToolInvocationPart, ...
function extractCdPrefix (line 1040) | function extractCdPrefix(commandLine: string, isPowershell: boolean): { ...
function getCdPresentationOverrides (line 1061) | function getCdPresentationOverrides(commandLine: string, isPowershell: b...
function formatShellInvocation (line 1073) | function formatShellInvocation(invocation: ChatToolInvocationPart, toolC...
function formatShellInvocationCompleted (line 1087) | function formatShellInvocationCompleted(invocation: ChatToolInvocationPa...
function formatSearchToolInvocation (line 1111) | function formatSearchToolInvocation(invocation: ChatToolInvocationPart, ...
function formatSearchToolInvocationCompleted (line 1126) | function formatSearchToolInvocationCompleted(invocation: ChatToolInvocat...
function formatCodeReviewInvocation (line 1158) | function formatCodeReviewInvocation(invocation: ChatToolInvocationPart, ...
function formatReplyToCommentInvocation (line 1163) | function formatReplyToCommentInvocation(invocation: ChatToolInvocationPa...
function formatShowFileInvocation (line 1169) | function formatShowFileInvocation(invocation: ChatToolInvocationPart, to...
function formatProposeWorkInvocation (line 1192) | function formatProposeWorkInvocation(invocation: ChatToolInvocationPart,...
function formatTaskCompleteInvocation (line 1197) | function formatTaskCompleteInvocation(invocation: ChatToolInvocationPart...
function formatAskUserInvocation (line 1202) | function formatAskUserInvocation(invocation: ChatToolInvocationPart, too...
function formatSkillInvocation (line 1213) | function formatSkillInvocation(invocation: ChatToolInvocationPart, toolC...
function formatTaskInvocation (line 1218) | function formatTaskInvocation(invocation: ChatToolInvocationPart, toolCa...
function formatTaskInvocationCompleted (line 1227) | function formatTaskInvocationCompleted(invocation: ChatToolInvocationPar...
function formatReadAgentInvocation (line 1234) | function formatReadAgentInvocation(invocation: ChatToolInvocationPart, t...
function formatExitPlanModeInvocation (line 1239) | function formatExitPlanModeInvocation(invocation: ChatToolInvocationPart...
function formatSqlInvocation (line 1244) | function formatSqlInvocation(invocation: ChatToolInvocationPart, toolCal...
function formatLspInvocation (line 1249) | function formatLspInvocation(invocation: ChatToolInvocationPart, toolCal...
function formatCreatePullRequestInvocation (line 1260) | function formatCreatePullRequestInvocation(invocation: ChatToolInvocatio...
function formatStoreMemoryInvocation (line 1268) | function formatStoreMemoryInvocation(invocation: ChatToolInvocationPart,...
function formatApplyPatchInvocation (line 1273) | function formatApplyPatchInvocation(invocation: ChatToolInvocationPart, ...
function formatWriteAgentInvocation (line 1278) | function formatWriteAgentInvocation(invocation: ChatToolInvocationPart, ...
function formatMcpValidateInvocation (line 1283) | function formatMcpValidateInvocation(invocation: ChatToolInvocationPart,...
function formatToolSearchInvocation (line 1293) | function formatToolSearchInvocation(invocation: ChatToolInvocationPart, ...
function parseTodoMarkdown (line 1299) | function parseTodoMarkdown(markdown: string): { title: string; todoList:...
function formatUpdateTodoInvocation (line 1375) | function formatUpdateTodoInvocation(invocation: ChatToolInvocationPart, ...
function formatUpdateTodoInvocationCompleted (line 1391) | function formatUpdateTodoInvocationCompleted(invocation: ChatToolInvocat...
function updateTodoList (line 1400) | async function updateTodoList(
type IManageTodoListToolInputParams (line 1431) | interface IManageTodoListToolInputParams {
function emptyInvocation (line 1445) | function emptyInvocation(_invocation: ChatToolInvocationPart, _toolCall:...
function emptyToolInvocationCompleted (line 1452) | function emptyToolInvocationCompleted(_invocation: ChatToolInvocationPar...
function genericToolInvocationCompleted (line 1457) | function genericToolInvocationCompleted(invocation: ChatToolInvocationPa...
class FakeToolsService (line 1471) | class FakeToolsService implements IToolsService {
method setConfirmationResult (line 1483) | setConfirmationResult(result: 'yes' | 'no'): void {
method invokeToolCalls (line 1487) | get invokeToolCalls(): ReadonlyArray<{ name: string; input: unknown }> {
method clearCalls (line 1491) | clearCalls(): void {
method invokeToolWithEndpoint (line 1495) | invokeToolWithEndpoint(name: string, options: LanguageModelToolInvocat...
method invokeTool (line 1501) | async invokeTool(
method getCopilotTool (line 1516) | getCopilotTool(): ICopilotTool<unknown> | undefined {
method getTool (line 1520) | getTool(): LanguageModelToolInformation | undefined {
method getToolByToolReferenceName (line 1524) | getToolByToolReferenceName(): LanguageModelToolInformation | undefined {
method validateToolInput (line 1528) | validateToolInput(): IToolValidationResult {
method validateToolName (line 1532) | validateToolName(): string | undefined {
method getEnabledTools (line 1536) | getEnabledTools(): LanguageModelToolInformation[] {
FILE: src/extension/chatSessions/copilotcli/common/customSessionTitleService.ts
type ICustomSessionTitleService (line 11) | interface ICustomSessionTitleService {
FILE: src/extension/chatSessions/copilotcli/common/delegationSummaryService.ts
type IChatDelegationSummaryService (line 18) | interface IChatDelegationSummaryService {
class ChatDelegationSummaryService (line 28) | class ChatDelegationSummaryService implements IChatDelegationSummaryServ...
method constructor (line 33) | constructor(
method summarize (line 37) | async summarize(context: ChatContext, token: CancellationToken): Promi...
method trackSummaryUsage (line 41) | async trackSummaryUsage(sessionId: string, summary: string): Promise<C...
method extractPrompt (line 75) | extractPrompt(sessionId: string, message: string): { prompt: string; r...
method provideTextDocumentContent (line 103) | provideTextDocumentContent(uri: Uri): string | undefined {
FILE: src/extension/chatSessions/copilotcli/common/test/copilotCLITools.spec.ts
function getInvocationMessageText (line 20) | function getInvocationMessageText(part: ChatToolInvocationPart | undefin...
method extractPrompt (line 31) | override extractPrompt(sessionId: string, message: string): { prompt: st...
FILE: src/extension/chatSessions/copilotcli/node/cliHelpers.ts
constant COPILOT_HOME_DIRECTORY (line 9) | const COPILOT_HOME_DIRECTORY = '.copilot';
constant APP_DIRECTORY (line 10) | const APP_DIRECTORY = join(COPILOT_HOME_DIRECTORY, 'ide');
constant SESSION_STATE_DIRECTORY (line 11) | const SESSION_STATE_DIRECTORY = join(COPILOT_HOME_DIRECTORY, 'session-st...
function getCopilotHome (line 13) | function getCopilotHome(): string {
function getCopilotCliStateDir (line 18) | function getCopilotCliStateDir(): string {
function getCopilotCLISessionStateDir (line 23) | function getCopilotCLISessionStateDir(): string {
function getCopilotCLISessionDir (line 28) | function getCopilotCLISessionDir(sessionId: string): string {
function getCopilotCLISessionEventsFile (line 32) | function getCopilotCLISessionEventsFile(sessionId: string) {
function getCopilotCLIWorkspaceFile (line 36) | function getCopilotCLIWorkspaceFile(sessionId: string) {
FILE: src/extension/chatSessions/copilotcli/node/copilotCLIImageSupport.ts
type ICopilotCLIImageSupport (line 15) | interface ICopilotCLIImageSupport {
function isImageMimeType (line 21) | function isImageMimeType(mimeType: string): boolean {
class CopilotCLIImageSupport (line 35) | class CopilotCLIImageSupport implements ICopilotCLIImageSupport {
method constructor (line 40) | constructor(
method initialize (line 50) | private async initialize(): Promise<void> {
method isTrustedImage (line 59) | isTrustedImage(imageUri: URI): boolean {
method storeImage (line 63) | async storeImage(imageData: Uint8Array, mimeType: string): Promise<URI> {
method cleanupOldImages (line 76) | async cleanupOldImages(maxAgeMs: number = 7 * 24 * 60 * 60 * 1000): Pr...
method getExtension (line 100) | private getExtension(mimeType: string): string {
FILE: src/extension/chatSessions/copilotcli/node/copilotCLISkills.ts
type ICopilotCLISkills (line 19) | interface ICopilotCLISkills {
class CopilotCLISkills (line 26) | class CopilotCLISkills extends Disposable implements ICopilotCLISkills {
method constructor (line 28) | constructor(
method getSkillsLocations (line 38) | public getSkillsLocations(): Uri[] {
FILE: src/extension/chatSessions/copilotcli/node/copilotCli.ts
constant COPILOT_CLI_MODEL_MEMENTO_KEY (line 30) | const COPILOT_CLI_MODEL_MEMENTO_KEY = 'github.copilot.cli.sessionModel';
constant COPILOT_CLI_REQUEST_MAP_KEY (line 31) | const COPILOT_CLI_REQUEST_MAP_KEY = 'github.copilot.cli.requestMap';
constant COPILOT_CLI_AGENT_MEMENTO_KEY (line 33) | const COPILOT_CLI_AGENT_MEMENTO_KEY = 'github.copilot.cli.customAgent';
constant COPILOT_CLI_SESSION_AGENTS_MEMENTO_KEY (line 35) | const COPILOT_CLI_SESSION_AGENTS_MEMENTO_KEY = 'github.copilot.cli.sessi...
constant COPILOT_CLI_DEFAULT_AGENT_ID (line 40) | const COPILOT_CLI_DEFAULT_AGENT_ID = '___vscode_default___';
class CopilotCLISessionOptions (line 42) | class CopilotCLISessionOptions {
method constructor (line 50) | constructor(options: { model?: string; workspaceInfo: IWorkspaceInfo; ...
method agentName (line 60) | public get agentName(): string | undefined {
method toSessionOptions (line 64) | public toSessionOptions(): Readonly<SessionOptions> {
type CopilotCLIModelInfo (line 103) | interface CopilotCLIModelInfo {
type ICopilotCLIModels (line 113) | interface ICopilotCLIModels {
class CopilotCLIModels (line 126) | class CopilotCLIModels extends Disposable implements ICopilotCLIModels {
method constructor (line 130) | constructor(
method resolveModel (line 149) | async resolveModel(modelId: string): Promise<string | undefined> {
method getDefaultModel (line 154) | public async getDefaultModel() {
method setDefaultModel (line 166) | public async setDefaultModel(modelId: string | undefined): Promise<voi...
method getModels (line 170) | public async getModels(): Promise<CopilotCLIModelInfo[]> {
method _getAvailableModels (line 179) | private async _getAvailableModels(): Promise<CopilotCLIModelInfo[]> {
method registerLanguageModelChatProvider (line 198) | public registerLanguageModelChatProvider(lm: typeof vscode['lm']): void {
method _provideLanguageModelChatInfo (line 217) | private async _provideLanguageModelChatInfo(): Promise<vscode.Language...
type ICopilotCLIAgents (line 242) | interface ICopilotCLIAgents {
class CopilotCLIAgents (line 255) | class CopilotCLIAgents extends Disposable implements ICopilotCLIAgents {
method constructor (line 261) | constructor(
method _refreshAgents (line 278) | private _refreshAgents(): void {
method trackSessionAgent (line 286) | async trackSessionAgent(sessionId: string, agent: string | undefined):...
method getSessionAgent (line 303) | async getSessionAgent(sessionId: string): Promise<string | undefined> {
method getDefaultAgent (line 318) | async getDefaultAgent(): Promise<string> {
method setDefaultAgent (line 327) | async setDefaultAgent(agent: string | undefined): Promise<void> {
method trackUsedAgent (line 330) | async trackUsedAgent(sessionId: string, agent: string | undefined): Pr...
method resolveAgent (line 333) | async resolveAgent(agentId: string): Promise<SweCustomAgent | undefine...
method getAgents (line 341) | async getAgents(): Promise<Readonly<SweCustomAgent>[]> {
method getAgentsImpl (line 354) | async getAgentsImpl(): Promise<Readonly<SweCustomAgent>[]> {
method getSDKAgents (line 370) | private async getSDKAgents(): Promise<Readonly<SweCustomAgent>[]> {
method toCustomAgent (line 382) | private toCustomAgent(promptFile: ParsedPromptFile): SweCustomAgent | ...
method cloneAgent (line 406) | private cloneAgent(agent: SweCustomAgent): SweCustomAgent {
type ICopilotCLISDK (line 418) | interface ICopilotCLISDK {
type RequestDetails (line 428) | type RequestDetails = { details: { requestId: string; toolIdEditMap: Rec...
class CopilotCLISDK (line 429) | class CopilotCLISDK implements ICopilotCLISDK {
method constructor (line 433) | constructor(
method getRequestId (line 448) | getRequestId(sdkRequestId: string): RequestDetails['details'] | undefi...
method getPackage (line 452) | public async getPackage(): Promise<typeof import('@github/copilot/sdk'...
method ensureShims (line 463) | protected async ensureShims(): Promise<void> {
method getAuthInfo (line 475) | public async getAuthInfo(): Promise<NonNullable<SessionOptions['authIn...
function isWelcomeView (line 505) | function isWelcomeView(workspaceService: IWorkspaceService) {
function checkFileExists (line 509) | async function checkFileExists(filePath: string): Promise<boolean> {
FILE: src/extension/chatSessions/copilotcli/node/copilotCliBridgeSpanProcessor.ts
type ReadableSpan (line 13) | interface ReadableSpan {
type SpanProcessor (line 29) | interface SpanProcessor {
function hrTimeToMs (line 37) | function hrTimeToMs(hrTime: readonly [number, number]): number {
function flattenAttributes (line 42) | function flattenAttributes(attrs: Readonly<Record<string, unknown>>): Re...
class CopilotCliBridgeSpanProcessor (line 67) | class CopilotCliBridgeSpanProcessor implements SpanProcessor {
method constructor (line 75) | constructor(private readonly _otelService: IOTelService) { }
method registerTrace (line 78) | registerTrace(traceId: string, sessionId: string): void {
method unregisterTrace (line 83) | unregisterTrace(traceId: string): void {
method onStart (line 89) | onStart(_span: unknown, _parentContext: unknown): void {
method onEnd (line 93) | onEnd(span: ReadableSpan): void {
method shutdown (line 139) | async shutdown(): Promise<void> {
method forceFlush (line 144) | async forceFlush(): Promise<void> {
FILE: src/extension/chatSessions/copilotcli/node/copilotcliPromptResolver.ts
class CopilotCLIPromptResolver (line 27) | class CopilotCLIPromptResolver {
method constructor (line 28) | constructor(
method resolvePrompt (line 42) | public async resolvePrompt(request: vscode.ChatRequest, prompt: string...
method buildFolderToWorktreeMap (line 58) | private buildFolderToWorktreeMap(primaryWorkspaceInfo: IWorkspaceInfo,...
method constructChatVariablesAndAttachments (line 71) | private async constructChatVariablesAndAttachments(variables: ChatVari...
method constructFileOrFolderAttachments (line 145) | private async constructFileOrFolderAttachments(fileOrFolderReferences:...
method translateWorkspaceRefToWorkingDirectoryRef (line 236) | private async translateWorkspaceRefToWorkingDirectoryRef(ref: vscode.C...
method translateWorkspaceUriToWorkingDirectoryUri (line 272) | private async translateWorkspaceUriToWorkingDirectoryUri(uri: vscode.U...
method findMatchingWorktree (line 290) | private async findMatchingWorktree(uri: vscode.Uri, workspaceInfo: IWo...
function isWorkspaceRepoInformationItem (line 312) | function isWorkspaceRepoInformationItem(variable: PromptVariable): boole...
FILE: src/extension/chatSessions/copilotcli/node/copilotcliSession.ts
type CopilotCLICommand (line 45) | type CopilotCLICommand = 'compact';
type CopilotCLISessionInput (line 62) | type CopilotCLISessionInput =
function getPromptLabel (line 66) | function getPromptLabel(input: CopilotCLISessionInput): string {
type ICopilotCLISession (line 70) | interface ICopilotCLISession extends IDisposable {
class CopilotCLISession (line 95) | class CopilotCLISession extends DisposableStore implements ICopilotCLISe...
method createdPullRequestUrl (line 98) | public get createdPullRequestUrl(): string | undefined {
method status (line 102) | public get status(): vscode.ChatSessionStatus | undefined {
method status (line 105) | private set status(value: vscode.ChatSessionStatus | undefined) {
method permissionRequested (line 114) | public get permissionRequested(): PermissionRequest | undefined {
method title (line 118) | public get title(): string | undefined {
method sdkSession (line 125) | public get sdkSession() {
method workspace (line 128) | public get workspace() {
method pendingPrompt (line 137) | public get pendingPrompt(): string | undefined {
method setBridgeProcessor (line 141) | setBridgeProcessor(bridge: CopilotCliBridgeSpanProcessor | undefined):...
method setSdkTraceContextUpdater (line 145) | setSdkTraceContextUpdater(updater: ((traceparent?: string, tracestate?...
method constructor (line 148) | constructor(
method attachStream (line 177) | attachStream(stream: vscode.ChatResponseStream): IDisposable {
method setPermissionLevel (line 186) | public setPermissionLevel(level: string | undefined): void {
method handleRequest (line 219) | public async handleRequest(
method _handleRequestSteering (line 269) | private async _handleRequestSteering(
method _handleRequestImpl (line 302) | private async _handleRequestImpl(
method _handleRequestImplInner (line 349) | private async _handleRequestImplInner(
method updateModel (line 697) | private async updateModel(modelId: string | undefined, authInfo: NonNu...
method sendRequestInternal (line 726) | private async sendRequestInternal(input: CopilotCLISessionInput, attac...
method addUserMessage (line 761) | addUserMessage(content: string) {
method addUserAssistantMessage (line 765) | addUserAssistantMessage(content: string) {
method getSelectedModelId (line 772) | public getSelectedModelId() {
method getChatHistory (line 776) | public async getChatHistory(): Promise<(ChatRequestTurn2 | ChatRespons...
method isFileFromSessionWorkspace (line 815) | private isFileFromSessionWorkspace(file: Uri): boolean {
method requestPermission (line 832) | private async requestPermission(
method _logRequest (line 945) | private _logRequest(userPrompt: string, modelId: string, attachments: ...
method _logConversation (line 957) | private _logConversation(userPrompt: string, assistantResponse: string...
method _renderAttachments (line 969) | private _renderAttachments(attachments: Attachment[]): string[] {
method _renderRequestToMarkdown (line 983) | private _renderRequestToMarkdown(userPrompt: string, modelId: string, ...
method _renderPermissionToMarkdown (line 1009) | private _renderPermissionToMarkdown(permissionRequest: PermissionReque...
method _renderConversationToMarkdown (line 1070) | private _renderConversationToMarkdown(userPrompt: string, assistantRes...
method _logToolCall (line 1106) | private _logToolCall(toolCallId: string, toolName: string, args: unkno...
function extractPullRequestUrlFromToolResult (line 1143) | function extractPullRequestUrlFromToolResult(result: unknown): string | ...
function isHttpUrl (line 1174) | function isHttpUrl(value: string): boolean {
FILE: src/extension/chatSessions/copilotcli/node/copilotcliSessionService.ts
constant COPILOT_CLI_WORKSPACE_JSON_FILE_KEY (line 51) | const COPILOT_CLI_WORKSPACE_JSON_FILE_KEY = 'github.copilot.cli.workspac...
type ICopilotCLISessionItem (line 53) | interface ICopilotCLISessionItem {
type ExtendedChatRequest (line 61) | type ExtendedChatRequest = ChatRequest & { prompt: string };
type ICopilotCLISessionService (line 63) | interface ICopilotCLISessionService {
constant SESSION_SHUTDOWN_TIMEOUT_MS (line 92) | const SESSION_SHUTDOWN_TIMEOUT_MS = 300 * 1000;
class CopilotCLISessionService (line 94) | class CopilotCLISessionService extends Disposable implements ICopilotCLI...
method constructor (line 128) | constructor(
method getSDKPackage (line 180) | private async getSDKPackage() {
method getSessionWorkingDirectory (line 185) | getSessionWorkingDirectory(sessionId: string): Uri | undefined {
method triggerSessionsChangeEvent (line 189) | private triggerSessionsChangeEvent() {
method monitorSessionFiles (line 198) | protected monitorSessionFiles() {
method getSessionManager (line 245) | async getSessionManager() {
method triggerOnDidChangeSessionItem (line 250) | private triggerOnDidChangeSessionItem(sessionId: string, reason: 'file...
method getSessionItem (line 276) | public async getSessionItem(sessionId: string, token: CancellationToke...
method getSessionItemImpl (line 280) | public async getSessionItemImpl(sessionId: string, source: 'inMemorySe...
method getSessionTitle (line 310) | public async getSessionTitle(sessionId: string, token: CancellationTok...
method getSessionTitleImpl (line 319) | private async getSessionTitleImpl(sessionId: string, metadata: LocalSe...
method getAllSessions (line 345) | async getAllSessions(token: CancellationToken): Promise<readonly ICopi...
method _getAllSessions (line 356) | async _getAllSessions(token: CancellationToken): Promise<readonly ICop...
method constructSessionItem (line 447) | private async constructSessionItem(metadata: LocalSessionMetadata, tok...
method constructSessionItemFromWrappedSession (line 455) | private async constructSessionItemFromWrappedSession(session: RefCount...
method constructSessionItemImpl (line 466) | private async constructSessionItemImpl(metadata: LocalSessionMetadata,...
method createSession (line 490) | public async createSession({ model, workspaceInfo, agent, sessionId }:...
method bridgeProcessor (line 529) | get bridgeProcessor(): CopilotCliBridgeSpanProcessor | undefined {
method _installBridgeIfNeeded (line 537) | private _installBridgeIfNeeded(): void {
method shouldShowSession (line 568) | private async shouldShowSession(sessionId: string, context?: SessionCo...
method createSessionsOptions (line 608) | protected async createSessionsOptions(options: { model?: string; works...
method getSession (line 616) | public async getSession(sessionId: string, { model, workspaceInfo, rea...
method forkSession (line 678) | public async forkSession(sessionId: string, requestId: string | undefi...
method tryGetPartialSesionHistory (line 765) | public async tryGetPartialSesionHistory(sessionId: string): Promise<re...
method getFirstUserMessageFromSession (line 789) | private async getFirstUserMessageFromSession(sessionId: string, token:...
method createCopilotSession (line 823) | private createCopilotSession(sdkSession: Session, options: CopilotCLIS...
method deleteSession (line 881) | public async deleteSession(sessionId: string): Promise<void> {
method renameSession (line 908) | public async renameSession(sessionId: string, title: string): Promise<...
function readSessionEventsFile (line 915) | async function readSessionEventsFile(sessionId: string, findFirstEventTy...
class CopilotCLISessionWorkspaceTracker (line 945) | class CopilotCLISessionWorkspaceTracker {
method constructor (line 949) | constructor(
method initialize (line 989) | public async initialize(): Promise<void> {
method trackSession (line 993) | public async trackSession(sessionId: string, operation: 'add' | 'delet...
method shouldShowSession (line 1013) | public shouldShowSession(sessionId: string): { isOldGlobalSession?: bo...
function labelFromPrompt (line 1021) | function labelFromPrompt(prompt: string): string {
function extractSessionIdFromEventPath (line 1030) | function extractSessionIdFromEventPath(sessionDir: URI, deletedFileUri: ...
class Mutex (line 1042) | class Mutex {
method isLocked (line 1046) | isLocked(): boolean {
method acquire (line 1051) | acquire(token: CancellationToken): Promise<IDisposable | undefined> {
method _release (line 1069) | private _release(): void {
class RefCountedSession (line 1082) | class RefCountedSession extends RefCountedDisposable implements IReferen...
method constructor (line 1083) | constructor(public readonly object: CopilotCLISession) {
method dispose (line 1086) | dispose(): void {
function copySessionFilesForForking (line 1091) | async function copySessionFilesForForking(sessionId: string, targetSessi...
function copySessionEventFileForForking (line 1140) | async function copySessionEventFileForForking(sessionId: string, targetS...
function copySessionWorkspaceYmlFileForForking (line 1150) | async function copySessionWorkspaceYmlFileForForking(sessionId: string, ...
FILE: src/extension/chatSessions/copilotcli/node/logger.ts
function getCopilotLogger (line 8) | function getCopilotLogger(logService: ILogService) {
FILE: src/extension/chatSessions/copilotcli/node/mcpHandler.ts
type MCPServerConfig (line 20) | type MCPServerConfig = NonNullable<Session['mcpServers']>[string];
type ICopilotCLIMCPHandler (line 22) | interface ICopilotCLIMCPHandler {
class CopilotCLIMCPHandler (line 29) | class CopilotCLIMCPHandler implements ICopilotCLIMCPHandler {
method constructor (line 31) | constructor(
method loadMcpConfig (line 38) | public async loadMcpConfig(): Promise<{ mcpConfig: Record<string, MCPS...
method loadMcpConfigWithGateway (line 69) | private async loadMcpConfigWithGateway(): Promise<{ mcpConfig: Record<...
method normalizeServerName (line 109) | private normalizeServerName(originalName: string): string | undefined {
method addBuiltInGitHubServer (line 129) | private async addBuiltInGitHubServer(config: Record<string, MCPServerC...
FILE: src/extension/chatSessions/copilotcli/node/nodePtyShim.ts
constant RETRIABLE_COPY_ERROR_CODES (line 12) | const RETRIABLE_COPY_ERROR_CODES = new Set(['EPERM', 'EBUSY']);
constant MAX_COPY_ATTEMPTS (line 13) | const MAX_COPY_ATTEMPTS = 6;
constant RETRY_DELAY_BASE_MS (line 14) | const RETRY_DELAY_BASE_MS = 50;
constant RETRY_DELAY_CAP_MS (line 15) | const RETRY_DELAY_CAP_MS = 500;
constant MATERIALIZATION_TIMEOUT_MS (line 16) | const MATERIALIZATION_TIMEOUT_MS = 4000;
constant MATERIALIZATION_POLL_INTERVAL_MS (line 17) | const MATERIALIZATION_POLL_INTERVAL_MS = 100;
function ensureNodePtyShim (line 29) | async function ensureNodePtyShim(extensionPath: string, vscodeAppRoot: s...
function _ensureNodePtyShim (line 42) | async function _ensureNodePtyShim(extensionPath: string, vscodeAppRoot: ...
function copyNodePtyFiles (line 48) | async function copyNodePtyFiles(extensionPath: string, sourceNodePtyPath...
function copyNodePtyWithRetries (line 65) | async function copyNodePtyWithRetries(sourceDir: string, destDir: string...
function shouldCopyEntry (line 94) | async function shouldCopyEntry(srcPath: string, logService: ILogService)...
function waitForMaterializedShim (line 113) | async function waitForMaterializedShim(destDir: string, primaryBinary: s...
function isShimMaterialized (line 127) | async function isShimMaterialized(destDir: string, primaryBinary: string...
FILE: src/extension/chatSessions/copilotcli/node/permissionHelpers.ts
type CoreTerminalConfirmationToolParams (line 19) | type CoreTerminalConfirmationToolParams = {
type CoreConfirmationToolParams (line 28) | type CoreConfirmationToolParams = {
function requestPermission (line 37) | async function requestPermission(
function requiresFileEditconfirmation (line 59) | async function requiresFileEditconfirmation(instaService: IInstantiation...
function getFileEditConfirmationToolParams (line 64) | async function getFileEditConfirmationToolParams(instaService: IInstanti...
function getDetailsForFileInsertPermissionRequest (line 111) | async function getDetailsForFileInsertPermissionRequest(accessor: Servic...
function getDetailsForFileCreatePermissionRequest (line 116) | async function getDetailsForFileCreatePermissionRequest(accessor: Servic...
function getDetailsForFileEditPermissionRequest (line 121) | async function getDetailsForFileEditPermissionRequest(accessor: Services...
function getFileBeingEdited (line 127) | function getFileBeingEdited(permissionRequest: PermissionRequest, toolCa...
function getConfirmationToolParams (line 141) | async function getConfirmationToolParams(instaService: IInstantiationSer...
function codeBlock (line 211) | function codeBlock(obj: Record<string, unknown>): string {
type PermissionRequest (line 221) | type PermissionRequest = PermissionRequestedEvent['data']['permissionReq...
FILE: src/extension/chatSessions/copilotcli/node/ripgrepShim.ts
constant RETRIABLE_COPY_ERROR_CODES (line 12) | const RETRIABLE_COPY_ERROR_CODES = new Set(['EPERM', 'EBUSY']);
constant MAX_COPY_ATTEMPTS (line 13) | const MAX_COPY_ATTEMPTS = 6;
constant RETRY_DELAY_BASE_MS (line 14) | const RETRY_DELAY_BASE_MS = 50;
constant RETRY_DELAY_CAP_MS (line 15) | const RETRY_DELAY_CAP_MS = 500;
constant MATERIALIZATION_TIMEOUT_MS (line 16) | const MATERIALIZATION_TIMEOUT_MS = 4000;
constant MATERIALIZATION_POLL_INTERVAL_MS (line 17) | const MATERIALIZATION_POLL_INTERVAL_MS = 100;
function ensureRipgrepShim (line 29) | async function ensureRipgrepShim(extensionPath: string, vscodeAppRoot: s...
function _ensureRipgrepShim (line 42) | async function _ensureRipgrepShim(extensionPath: string, vscodeAppRoot: ...
function copyRipgrepShim (line 48) | async function copyRipgrepShim(extensionPath: string, vscodeRipgrepPath:...
function copyRipgrepWithRetries (line 65) | async function copyRipgrepWithRetries(sourceDir: string, destDir: string...
function shouldCopyEntry (line 94) | async function shouldCopyEntry(srcPath: string, logService: ILogService)...
function waitForMaterializedShim (line 113) | async function waitForMaterializedShim(destDir: string, primaryBinary: s...
function isShimMaterialized (line 127) | async function isShimMaterialized(destDir: string, primaryBinary: string...
FILE: src/extension/chatSessions/copilotcli/node/test/copilotCliAgents.spec.ts
function createMockExtensionContext (line 27) | function createMockExtensionContext(): IVSCodeExtensionContext {
class TestChatCustomAgentsService (line 46) | class TestChatCustomAgentsService extends Disposable implements IChatCus...
method constructor (line 51) | constructor(private customAgents: ParsedPromptFile[] = []) {
method getCustomAgents (line 55) | getCustomAgents(): ParsedPromptFile[] {
method setCustomAgents (line 59) | setCustomAgents(customAgents: ParsedPromptFile[]): void {
function parsePromptFile (line 65) | function parsePromptFile(fileName: string, content: string): ParsedPromp...
function createMockSDK (line 69) | function createMockSDK(agentsByCall: ReadonlyArray<ReadonlyArray<SweCust...
function createWorkspaceService (line 86) | function createWorkspaceService(): IWorkspaceService {
function createAgents (line 107) | function createAgents(options: { sdkAgentsByCall: ReadonlyArray<Readonly...
FILE: src/extension/chatSessions/copilotcli/node/test/copilotCliAuth.spec.ts
type TokenAuthInfo (line 18) | type TokenAuthInfo = Extract<NonNullable<SessionOptions['authInfo']>, { ...
type HmacAuthInfo (line 19) | type HmacAuthInfo = Extract<NonNullable<SessionOptions['authInfo']>, { t...
class TestCopilotCLISDK (line 26) | class TestCopilotCLISDK extends CopilotCLISDK {
method ensureShims (line 27) | protected override async ensureShims(): Promise<void> {
function createMockExtensionContext (line 33) | function createMockExtensionContext(): IVSCodeExtensionContext {
function createMockEnvService (line 44) | function createMockEnvService(): IEnvService {
method getConfig (line 62) | getConfig(key: unknown) {
method getGitHubSession (line 71) | async getGitHubSession(): Promise<undefined> {
method getConfig (line 99) | getConfig() {
method getGitHubSession (line 105) | async getGitHubSession() {
method getConfig (line 136) | getConfig() {
method getGitHubSession (line 142) | async getGitHubSession() {
FILE: src/extension/chatSessions/copilotcli/node/test/copilotCliBridgeSpanProcessor.spec.ts
function createMockOTelService (line 12) | function createMockOTelService(): IOTelService & { injectedSpans: ICompl...
function makeReadableSpan (line 35) | function makeReadableSpan(overrides: {
FILE: src/extension/chatSessions/copilotcli/node/test/copilotCliModels.spec.ts
function createMockExtensionContext (line 17) | function createMockExtensionContext(): IVSCodeExtensionContext {
constant FAKE_MODELS (line 34) | const FAKE_MODELS: CopilotCLIModelInfo[] = [
function createMockSDK (line 39) | function createMockSDK(models: CopilotCLIModelInfo[] = FAKE_MODELS): ICo...
class MockAuthenticationService (line 63) | class MockAuthenticationService {
method constructor (line 69) | constructor(hasSession: boolean) {
method anyGitHubSession (line 75) | get anyGitHubSession(): AuthenticationSession | undefined {
method setSession (line 79) | setSession(session: AuthenticationSession | undefined): void {
method fireAuthenticationChange (line 83) | fireAuthenticationChange(): void {
method dispose (line 87) | dispose(): void {
function createModels (line 107) | function createModels(options: { hasSession?: boolean; sdk?: ICopilotCLI...
FILE: src/extension/chatSessions/copilotcli/node/test/copilotCliSessionService.spec.ts
class MockLocalSession (line 47) | class MockLocalSession {
method fromEvents (line 48) | static async fromEvents(events: readonly { type: string }[]): Promise<...
class NullAgentSessionsWorkspace (line 57) | class NullAgentSessionsWorkspace implements IAgentSessionsWorkspace {
class NullChatSessionWorkspaceFolderService (line 62) | class NullChatSessionWorkspaceFolderService extends mock<IChatSessionWor...
class NullChatSessionWorktreeService (line 72) | class NullChatSessionWorktreeService extends mock<IChatSessionWorktreeSe...
class NullCustomSessionTitleService (line 76) | class NullCustomSessionTitleService implements ICustomSessionTitleService {
method getCustomSessionTitle (line 78) | async getCustomSessionTitle(_sessionId: string): Promise<string | unde...
method setCustomSessionTitle (line 79) | async setCustomSessionTitle(_sessionId: string, _title: string): Promi...
method generateSessionTitle (line 80) | async generateSessionTitle(_sessionId: string, _request: { prompt?: st...
function workspaceInfoFor (line 83) | function workspaceInfoFor(workingDirectory: Uri | undefined): IWorkspace...
function sessionOptionsFor (line 92) | function sessionOptionsFor(workingDirectory?: Uri) {
method summarize (line 121) | override async summarize(context: ChatContext, token: CancellationToken)...
method extractPrompt (line 124) | override extractPrompt(): { prompt: string; reference: never } | undefin...
class FakeUserQuestionHandler (line 128) | class FakeUserQuestionHandler implements IUserQuestionHandler {
method askUserQuestion (line 130) | async askUserQuestion(question: UserInputRequest, toolInvocationToken:...
method invokeFunction (line 136) | invokeFunction(fn: (accessor: unknown, ...args: any[]) => any, ...args: ...
method initialize (line 142) | override async initialize(): Promise<void> { return; }
method trackSession (line 143) | override async trackSession(_sessionId: string, _operation: 'add' | 'del...
method shouldShowSession (line 146) | override shouldShowSession(_sessionId: string): { isOldGlobalSession?: b...
method extractPrompt (line 312) | override extractPrompt(): { prompt: string; reference: never } | undefin...
method extractPrompt (line 349) | override extractPrompt(): { prompt: string; reference: never } | undefin...
method extractPrompt (line 416) | override extractPrompt(): { prompt: string; reference: never } | undefin...
method extractPrompt (line 460) | override extractPrompt(): { prompt: string; reference: never } | undefin...
FILE: src/extension/chatSessions/copilotcli/node/test/copilotcliPromptResolver.spec.ts
function makePromptFileReference (line 34) | function makePromptFileReference(uri: URI) {
function createResolver (line 62) | function createResolver(overrideSkillLocations?: MockSkillLocations) {
FILE: src/extension/chatSessions/copilotcli/node/test/copilotcliSession.spec.ts
type MockSdkEventHandler (line 43) | interface MockSdkEventHandler { (payload: unknown): void }
type MockSdkEventMap (line 44) | type MockSdkEventMap = Map<string, Set<MockSdkEventHandler>>;
class MockSdkSession (line 46) | class MockSdkSession {
method on (line 56) | on(event: string, handler: MockSdkEventHandler) {
method emit (line 64) | emit(event: string, data: unknown) {
method emitPermissionRequest (line 72) | async emitPermissionRequest(permissionRequest: PermissionRequest): Pro...
method respondToPermission (line 80) | respondToPermission(requestId: string, result: unknown) {
method emitExitPlanModeRequest (line 92) | async emitExitPlanModeRequest(data: { summary: string; actions?: strin...
method respondToExitPlanMode (line 100) | respondToExitPlanMode(requestId: string, result: unknown) {
method respondToUserInput (line 108) | respondToUserInput(_requestId: string, _response: unknown) {
method send (line 115) | async send(options: { prompt: string; mode?: string }) {
method compactHistory (line 124) | async compactHistory() { return { success: true }; }
method initializeAndValidateTools (line 126) | async initializeAndValidateTools() { }
method getCurrentToolMetadata (line 127) | getCurrentToolMetadata(): unknown[] | undefined { return this._toolMet...
method toolMetadata (line 129) | set toolMetadata(value: unknown[] | undefined) { this._toolMetadata = ...
method setAuthInfo (line 131) | setAuthInfo(info: any) { this.authInfo = info; }
method getSelectedModel (line 132) | async getSelectedModel() { return this._selectedModel; }
method setSelectedModel (line 133) | async setSelectedModel(model: string) { this._selectedModel = model; }
method getEvents (line 134) | async getEvents() { return []; }
function createWorkspaceService (line 137) | function createWorkspaceService(root: string): IWorkspaceService {
function workspaceInfoFor (line 151) | function workspaceInfoFor(workingDirectory: Uri | undefined): IWorkspace...
method summarize (line 174) | override async summarize(context: ChatContext, token: CancellationToken)...
method extractPrompt (line 177) | override extractPrompt(_sessionId: string, _message: string) {
method getAuthInfo (line 193) | override async getAuthInfo(): Promise<NonNullable<SessionOptions['authIn...
method getRequestId (line 196) | override getRequestId(_sdkRequestId: string) {
function createSession (line 216) | async function createSession(): Promise<CopilotCLISession> {
function setupSendWithExitPlanMode (line 1133) | function setupSendWithExitPlanMode(data: { summary: string; actions?: st...
FILE: src/extension/chatSessions/copilotcli/node/test/testHelpers.ts
class MockCliSdkSession (line 17) | class MockCliSdkSession {
method constructor (line 23) | constructor(public readonly sessionId: string, public readonly startTi...
method getChatContextMessages (line 24) | getChatContextMessages(): Promise<{}[]> { return Promise.resolve(this....
method getEvents (line 25) | getEvents(): {}[] { return this.events; }
method isAbortable (line 26) | isAbortable(): boolean { return !this.aborted; }
method abort (line 27) | abort(): Promise<void> {
method emit (line 31) | emit(event: string, args: { content: string | undefined }): void {
method clearCustomAgent (line 34) | clearCustomAgent() {
class MockSkillLocations (line 39) | class MockSkillLocations implements ICopilotCLISkills {
method constructor (line 42) | constructor(locations: Uri[] = []) {
method getSkillsLocations (line 45) | getSkillsLocations(): Uri[] {
class MockCliSdkSessionManager (line 50) | class MockCliSdkSessionManager {
method constructor (line 52) | constructor(_opts: {}) { }
method createSession (line 53) | createSession(_options: SessionOptions) {
method getSession (line 59) | getSession(opts: SessionOptions & { sessionId: string }, _writable: bo...
method listSessions (line 65) | listSessions() {
method deleteSession (line 68) | deleteSession(id: string) { this.sessions.delete(id); return Promise.r...
method closeSession (line 69) | closeSession(_id: string) { return Promise.resolve(); }
class NullCopilotCLIAgents (line 72) | class NullCopilotCLIAgents implements ICopilotCLIAgents {
method getAgents (line 75) | async getAgents(): Promise<SweCustomAgent[]> {
method getDefaultAgent (line 78) | async getDefaultAgent(): Promise<string> {
method getSessionAgent (line 81) | async getSessionAgent(_sessionId: string): Promise<string | undefined> {
method resolveAgent (line 84) | resolveAgent(_agentId: string): Promise<SweCustomAgent | undefined> {
method setDefaultAgent (line 87) | setDefaultAgent(_agent: string | undefined): Promise<void> {
method trackSessionAgent (line 90) | trackSessionAgent(_sessionId: string, agent: string | undefined): Prom...
class NullICopilotCLIImageSupport (line 95) | class NullICopilotCLIImageSupport implements ICopilotCLIImageSupport {
method storeImage (line 97) | storeImage(_imageData: Uint8Array, _mimeType: string): Promise<URI> {
method isTrustedImage (line 100) | isTrustedImage(_imageUri: URI): boolean {
class NullCopilotCLIMCPHandler (line 105) | class NullCopilotCLIMCPHandler implements ICopilotCLIMCPHandler {
method loadMcpConfig (line 107) | async loadMcpConfig(): Promise<{ mcpConfig: Record<string, NonNullable...
FILE: src/extension/chatSessions/copilotcli/node/userInputHelpers.ts
type UserInputRequest (line 10) | type UserInputRequest = Omit<UserInputRequestedEvent['data'], 'requestId'>;
type UserInputResponse (line 12) | type UserInputResponse = { answer: string; wasFreeform: boolean };
type IUserQuestionHandler (line 16) | interface IUserQuestionHandler {
FILE: src/extension/chatSessions/copilotcli/vscode-node/commands/addFileReference.ts
constant ADD_FILE_REFERENCE_COMMAND (line 12) | const ADD_FILE_REFERENCE_COMMAND = 'github.copilot.chat.copilotCLI.addFi...
function registerAddFileReferenceCommand (line 14) | function registerAddFileReferenceCommand(logger: ILogger, httpServer: In...
FILE: src/extension/chatSessions/copilotcli/vscode-node/commands/addSelection.ts
constant ADD_SELECTION_COMMAND (line 12) | const ADD_SELECTION_COMMAND = 'github.copilot.chat.copilotCLI.addSelecti...
function registerAddSelectionCommand (line 14) | function registerAddSelectionCommand(logger: ILogger, httpServer: InProc...
FILE: src/extension/chatSessions/copilotcli/vscode-node/commands/context.ts
function registerCommandContext (line 10) | function registerCommandContext(httpServer: InProcHttpServer) {
function setCliSessionContext (line 22) | function setCliSessionContext(hasSession: boolean) {
FILE: src/extension/chatSessions/copilotcli/vscode-node/commands/diffCommands.ts
constant ACCEPT_DIFF_COMMAND (line 10) | const ACCEPT_DIFF_COMMAND = 'github.copilot.chat.copilotCLI.acceptDiff';
constant REJECT_DIFF_COMMAND (line 11) | const REJECT_DIFF_COMMAND = 'github.copilot.chat.copilotCLI.rejectDiff';
function registerDiffCommands (line 13) | function registerDiffCommands(logger: ILogger, diffState: DiffStateManag...
FILE: src/extension/chatSessions/copilotcli/vscode-node/commands/pickSession.ts
function pickSession (line 17) | async function pickSession(logger: ILogger, httpServer: InProcHttpServer...
FILE: src/extension/chatSessions/copilotcli/vscode-node/commands/sendContext.ts
type FileReferenceInfo (line 15) | interface FileReferenceInfo {
constant ADD_FILE_REFERENCE_NOTIFICATION (line 25) | const ADD_FILE_REFERENCE_NOTIFICATION = 'add_file_reference';
constant ALLOWED_SCHEMES (line 30) | const ALLOWED_SCHEMES = new Set([Schemas.file]);
function validateScheme (line 36) | function validateScheme(logger: ILogger, uri: vscode.Uri): boolean {
function sendToSession (line 48) | async function sendToSession(
function sendUriToSession (line 66) | async function sendUriToSession(
function sendEditorContextToSession (line 87) | async function sendEditorContextToSession(
FILE: src/extension/chatSessions/copilotcli/vscode-node/contribution.ts
function getServices (line 20) | function getServices(): ConstructorParameters<typeof ServiceCollection> {
class CopilotCLIContrib (line 25) | class CopilotCLIContrib extends Disposable {
method constructor (line 27) | constructor(
method _startMcpServer (line 69) | private async _startMcpServer(logger: ILogger, httpServer: InProcHttpS...
FILE: src/extension/chatSessions/copilotcli/vscode-node/copilotCLISessionTracker.ts
type SessionProcessInfo (line 14) | interface SessionProcessInfo {
type ICopilotCLISessionTracker (line 19) | interface ICopilotCLISessionTracker extends Disposable {
class CopilotCLISessionTracker (line 55) | class CopilotCLISessionTracker extends Disposable implements ICopilotCLI...
method constructor (line 62) | constructor() {
method registerSession (line 72) | registerSession(sessionId: string, info: SessionProcessInfo): IDisposa...
method setSessionName (line 84) | setSessionName(sessionId: string, name: string): void {
method getSessionDisplayName (line 88) | getSessionDisplayName(sessionId: string): string {
method getSessionIds (line 92) | getSessionIds(): readonly string[] {
method setSessionTerminal (line 96) | setSessionTerminal(sessionId: string, terminal: Terminal): void {
method getTerminal (line 100) | async getTerminal(sessionId: string): Promise<Terminal | undefined> {
method _findTerminalByPid (line 144) | private async _findTerminalByPid(targetPid: number): Promise<Terminal ...
function getParentPid (line 167) | async function getParentPid(pid: number): Promise<number | undefined> {
FILE: src/extension/chatSessions/copilotcli/vscode-node/customSessionTitleServiceImpl.ts
constant CUSTOM_SESSION_TITLE_MEMENTO_KEY (line 15) | const CUSTOM_SESSION_TITLE_MEMENTO_KEY = 'github.copilot.cli.customSessi...
class CustomSessionTitleService (line 17) | class CustomSessionTitleService implements ICustomSessionTitleService {
method constructor (line 21) | constructor(
method _getCustomSessionTitles (line 28) | private _getCustomSessionTitles(): { [sessionId: string]: { title: str...
method getCustomSessionTitle (line 32) | public async getCustomSessionTitle(sessionId: string): Promise<string ...
method setCustomSessionTitle (line 56) | public async setCustomSessionTitle(sessionId: string, title: string): ...
method generateSessionTitle (line 60) | public async generateSessionTitle(sessionId: string, request: { prompt...
method generateSessionTitleImpl (line 69) | private async generateSessionTitleImpl(sessionId: string, request: { p...
FILE: src/extension/chatSessions/copilotcli/vscode-node/diffState.ts
type ActiveDiff (line 9) | interface ActiveDiff {
function isDiffTab (line 20) | function isDiffTab(tab: vscode.Tab): tab is vscode.Tab & { input: vscode...
class DiffStateManager (line 24) | class DiffStateManager {
method constructor (line 27) | constructor(private readonly _logger: ILogger) { }
method register (line 29) | register(diff: ActiveDiff): void {
method unregister (line 36) | unregister(diffId: string): void {
method getByTabName (line 44) | getByTabName(tabName: string): ActiveDiff | undefined {
method getByTab (line 53) | getByTab(tab: vscode.Tab): ActiveDiff | undefined {
method getForCurrentTab (line 71) | getForCurrentTab(): ActiveDiff | undefined {
method hasActiveDiffs (line 80) | hasActiveDiffs(): boolean {
method closeAllForSession (line 84) | closeAllForSession(sessionId: string): void {
method setupContextTracking (line 97) | setupContextTracking(): vscode.Disposable[] {
method _updateContext (line 112) | private _updateContext(): void {
FILE: src/extension/chatSessions/copilotcli/vscode-node/inProcHttpServer.ts
type McpProviderOptions (line 18) | interface McpProviderOptions {
class AsyncLazy (line 26) | class AsyncLazy<T> {
method constructor (line 30) | constructor(private readonly factory: () => Promise<T>) { }
method value (line 32) | get value(): Promise<T> {
class InProcHttpServer (line 50) | class InProcHttpServer extends Disposable {
method constructor (line 56) | constructor(
method broadcastNotification (line 63) | broadcastNotification(method: string, params: Record<string, unknown>)...
method sendNotification (line 77) | sendNotification(sessionId: string, method: string, params: Record<str...
method getConnectedSessionIds (line 95) | getConnectedSessionIds(): readonly string[] {
method start (line 99) | async start(
method _registerTransport (line 168) | private _registerTransport(sessionId: string, transport: StreamableHTT...
method _unregisterTransport (line 174) | private _unregisterTransport(sessionId: string): void {
method _getTransport (line 180) | private _getTransport(sessionId: string): StreamableHTTPServerTranspor...
method _authMiddleware (line 184) | private _authMiddleware(nonce: string, req: express.Request, res: expr...
method _handlePost (line 194) | private async _handlePost(mcpOptions: McpProviderOptions, req: express...
method _handleGetDelete (line 287) | private async _handleGetDelete(req: express.Request, res: express.Resp...
function getRandomSocketPath (line 302) | async function getRandomSocketPath(): Promise<string> {
function tryCleanupSocket (line 313) | async function tryCleanupSocket(socketPath: string | undefined): Promise...
FILE: src/extension/chatSessions/copilotcli/vscode-node/lockFile.ts
type LockFileInfo (line 13) | interface LockFileInfo {
class LockFileHandle (line 24) | class LockFileHandle {
method constructor (line 31) | constructor(lockFilePath: string, serverUri: vscode.Uri, headers: Reco...
method path (line 39) | get path(): string {
method update (line 43) | async update(): Promise<void> {
method remove (line 65) | async remove(): Promise<void> {
function createLockFile (line 77) | async function createLockFile(serverUri: vscode.Uri, headers: Record<str...
function isProcessRunning (line 111) | function isProcessRunning(pid: number): boolean {
function cleanupStaleLockFiles (line 124) | async function cleanupStaleLockFiles(logger: ILogger): Promise<number> {
FILE: src/extension/chatSessions/copilotcli/vscode-node/readonlyContentProvider.ts
constant READONLY_SCHEME (line 8) | const READONLY_SCHEME = 'copilot-cli-readonly';
class ReadonlyContentProvider (line 10) | class ReadonlyContentProvider implements TextDocumentContentProvider {
method provideTextDocumentContent (line 13) | provideTextDocumentContent(uri: Uri): string {
method setContent (line 18) | setContent(uri: Uri, content: string): void {
method clearContent (line 22) | clearContent(uri: Uri): void {
method register (line 26) | register(): Disposable {
function createReadonlyUri (line 31) | function createReadonlyUri(originalPath: string, suffix: string): Uri {
FILE: src/extension/chatSessions/copilotcli/vscode-node/test/addFileReference.spec.ts
method activeTextEditor (line 19) | get activeTextEditor() { return mockActiveTextEditor.value; }
FILE: src/extension/chatSessions/copilotcli/vscode-node/test/addSelection.spec.ts
method activeTextEditor (line 19) | get activeTextEditor() { return mockActiveTextEditor.value; }
FILE: src/extension/chatSessions/copilotcli/vscode-node/test/closeAllForSession.spec.ts
method constructor (line 27) | constructor(public original: any, public modified: any) { }
FILE: src/extension/chatSessions/copilotcli/vscode-node/test/closeDiff.spec.ts
method constructor (line 28) | constructor(public original: any, public modified: any) { }
type CloseDiffResult (line 32) | interface CloseDiffResult {
FILE: src/extension/chatSessions/copilotcli/vscode-node/test/context.spec.ts
type Listener (line 17) | type Listener = (...args: unknown[]) => void;
class MockHttpServerWithEvents (line 22) | class MockHttpServerWithEvents {
method setConnectedSessionIds (line 39) | setConnectedSessionIds(ids: readonly string[]): void {
method fireConnect (line 43) | fireConnect(): void {
method fireDisconnect (line 49) | fireDisconnect(): void {
FILE: src/extension/chatSessions/copilotcli/vscode-node/test/copilotCLISessionTracker.spec.ts
type MockTerminal (line 8) | type MockTerminal = { processId: Promise<number | undefined>; name: stri...
method terminals (line 22) | get terminals() { return mockTerminals.value; }
method onDidCloseTerminal (line 23) | onDidCloseTerminal(listener: (terminal: MockTerminal) => void) {
method isWindows (line 36) | get isWindows() { return mockIsWindows.value; }
function fireTerminalClose (line 41) | function fireTerminalClose(terminal: MockTerminal): void {
FILE: src/extension/chatSessions/copilotcli/vscode-node/test/diagnosticsChanged.spec.ts
method constructor (line 31) | constructor(private readonly callOnDispose: () => void) { }
method dispose (line 32) | dispose() { this.callOnDispose(); }
type DiagnosticNotificationParams (line 39) | interface DiagnosticNotificationParams {
FILE: src/extension/chatSessions/copilotcli/vscode-node/test/diffCommands.spec.ts
method constructor (line 29) | constructor(public original: unknown, public modified: unknown) { }
function createTestDiff (line 37) | function createTestDiff(tabName: string): ActiveD
Copy disabled (too large)
Download .json
Condensed preview — 4307 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (50,692K chars).
[
{
"path": ".agents/skills/launch/SKILL.md",
"chars": 14674,
"preview": "---\nname: launch\ndescription: \"Launch and automate VS Code Insiders with the Copilot Chat extension using agent-browser "
},
{
"path": ".claude/agents/anthropic-sdk-upgrader.md",
"chars": 9830,
"preview": "---\nname: anthropic-sdk-upgrader\ndescription: \"Use this agent when the user needs to upgrade Anthropic SDK packages. Thi"
},
{
"path": ".devcontainer/devcontainer-lock.json",
"chars": 1904,
"preview": "{\n \"features\": {\n \"ghcr.io/devcontainers/features/azure-cli:1\": {\n \"version\": \"1.2.7\",\n \"resolved\": \"ghcr."
},
{
"path": ".devcontainer/devcontainer.json",
"chars": 1109,
"preview": "// For format details, see https://aka.ms/devcontainer.json. For config options, see the\n// README at: https://github.co"
},
{
"path": ".esbuild.ts",
"chars": 13463,
"preview": "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Micros"
},
{
"path": ".eslint-ignore",
"chars": 692,
"preview": "node_modules\ndist\ncoverage\nlint-staged.config.js\nvite.config.ts\n**/vscode.proposed.*.ts\n**/vscode.d.ts\n.esbuild/extensio"
},
{
"path": ".eslintplugin/index.ts",
"chars": 848,
"preview": "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Micros"
},
{
"path": ".eslintplugin/no-bad-gdpr-comment.ts",
"chars": 1540,
"preview": "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Micros"
},
{
"path": ".eslintplugin/no-funny-filename.ts",
"chars": 1540,
"preview": "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Micros"
},
{
"path": ".eslintplugin/no-gdpr-event-name-mismatch.ts",
"chars": 2687,
"preview": "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Micros"
},
{
"path": ".eslintplugin/no-instanceof-uri.ts",
"chars": 1284,
"preview": "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Micros"
},
{
"path": ".eslintplugin/no-missing-linebreak.ts",
"chars": 2311,
"preview": "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Micros"
},
{
"path": ".eslintplugin/no-nls-localize.ts",
"chars": 1145,
"preview": "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Micros"
},
{
"path": ".eslintplugin/no-restricted-copilot-pr-string.ts",
"chars": 1799,
"preview": "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Micros"
},
{
"path": ".eslintplugin/no-runtime-import.ts",
"chars": 2145,
"preview": "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Micros"
},
{
"path": ".eslintplugin/no-test-imports.ts",
"chars": 1101,
"preview": "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Micros"
},
{
"path": ".eslintplugin/no-test-only.ts",
"chars": 760,
"preview": "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Micros"
},
{
"path": ".eslintplugin/no-unexternalized-strings.ts",
"chars": 7443,
"preview": "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Micros"
},
{
"path": ".eslintplugin/no-unlayered-files.ts",
"chars": 979,
"preview": "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Micros"
},
{
"path": ".eslintplugin/package.json",
"chars": 94,
"preview": "{\n \"name\": \"vscode-copilot-chat-eslint-plugin\",\n \"private\": true,\n \"type\": \"module\"\n}"
},
{
"path": ".eslintplugin/tsconfig.json",
"chars": 396,
"preview": "{\n\t\"compilerOptions\": {\n\t\t\"target\": \"es2024\",\n\t\t\"lib\": [\"ES2024\"],\n\t\t\"module\": \"esnext\",\n\t\t\"allowImportingTsExtensions\":"
},
{
"path": ".eslintplugin/utils.ts",
"chars": 1514,
"preview": "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Micros"
},
{
"path": ".gitattributes",
"chars": 108,
"preview": "* text=auto eol=lf\n\n# Enable Git LFS for SQLite database files\n*.sqlite filter=lfs diff=lfs merge=lfs -text\n"
},
{
"path": ".github/CODENOTIFY",
"chars": 391,
"preview": "# Model prompts\nsrc/extension/prompts/node/agent/openAIPrompts.tsx @dileepyavan @kcutler\nsrc/extension/prompts/node/agen"
},
{
"path": ".github/CODEOWNERS",
"chars": 246,
"preview": "# Ensure Lad and Joao review cache relevant code\n.github/workflows/pr-check-cache.yml @lszomoru @joaomoreno\nbuild/pr-che"
},
{
"path": ".github/ISSUE_TEMPLATE/config.yml",
"chars": 792,
"preview": "blank_issues_enabled: false\ncontact_links:\n - name: Copilot Chat Issues\n url: https://github.com/microsoft/vscode/is"
},
{
"path": ".github/commands.json",
"chars": 10566,
"preview": "[\n\t{\n\t\t\"type\": \"comment\",\n\t\t\"name\": \"question\",\n\t\t\"action\": \"updateLabels\",\n\t\t\"addLabel\": \"*question\"\n\t},\n\t{\n\t\t\"type\": \""
},
{
"path": ".github/copilot-instructions.md",
"chars": 17393,
"preview": "# GitHub Copilot Chat Extension - Copilot Instructions\n\n## Project Overview\n\nThis is the **GitHub Copilot Chat** extensi"
},
{
"path": ".github/dependabot.yml",
"chars": 3459,
"preview": "version: 2\nupdates:\n - package-ecosystem: \"devcontainers\"\n directory: \"/\"\n groups:\n all:\n patterns:\n "
},
{
"path": ".github/instructions/prompt-tsx.instructions.md",
"chars": 4140,
"preview": "---\napplyTo: '**/*.tsx'\ndescription: Prompt-TSX coding guidelines\n---\n\nGuidelines for TSX files using [prompt-tsx](https"
},
{
"path": ".github/instructions/vitest-unit-tests.instructions.md",
"chars": 2060,
"preview": "---\napplyTo: '**/*.spec.ts'\ndescription: Vitest unit testing guidelines\n---\n\nPlease follow these guidelines when writing"
},
{
"path": ".github/prompts/updateCopilotCLIToolMapping.prompt.md",
"chars": 1392,
"preview": "---\nname: updateCopilotCLIToolMapping\ndescription: Update the mapping of Copilot CLI tools from the source code for the "
},
{
"path": ".github/prompts/updateGithubCopilotSDK.prompt.md",
"chars": 4711,
"preview": "---\nname: updateGithubCopilotSDK\ndescription: Use this to update the Github Copilot CLI/SDK\nmodel: Claude Opus 4.6\n---\n\n"
},
{
"path": ".github/workflows/copilot-setup-steps.yml",
"chars": 2007,
"preview": "name: Copilot Setup Steps\n\n# Automatically run the setup steps when they are changed to allow for easy validation, and\n#"
},
{
"path": ".github/workflows/ensure-node-modules-cache.yml",
"chars": 2278,
"preview": "name: Ensure node modules cache\n\non:\n push:\n branches:\n - main\n\npermissions:\n contents: read\n\njobs:\n linux:\n "
},
{
"path": ".github/workflows/npm-package.yml",
"chars": 1190,
"preview": "name: chat-lib tests\n\non:\n pull_request:\n workflow_dispatch:\n\npermissions:\n contents: read\n\nconcurrency:\n group: cha"
},
{
"path": ".github/workflows/pr.yml",
"chars": 6605,
"preview": "name: PR Checks\n\non:\n push:\n branches:\n - 'gh-readonly-queue/main/*'\n pull_request:\n branches:\n - main"
},
{
"path": ".gitignore",
"chars": 1314,
"preview": ".DS_Store\n.vscode-test/\n.vscode-test-web/\nnode_modules/\ndist/\ndist-sourcemaps/\n\n# created by simulation\n.simulation\n\n# s"
},
{
"path": ".husky/pre-commit",
"chars": 24,
"preview": "set -e\n\nnpx lint-staged\n"
},
{
"path": ".husky/pre-push",
"chars": 284,
"preview": "set -e\n\n# git-lfs hook\ncommand -v git-lfs >/dev/null 2>&1 || { echo >&2 \"\\nThis repository is configured for Git LFS but"
},
{
"path": ".mocha-multi-reporters.js",
"chars": 1219,
"preview": "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Micros"
},
{
"path": ".mocharc.js",
"chars": 952,
"preview": "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Micros"
},
{
"path": ".npmrc",
"chars": 19,
"preview": "engine-strict=true\n"
},
{
"path": ".nvmrc",
"chars": 8,
"preview": "22.21.1\n"
},
{
"path": ".prettierignore",
"chars": 293,
"preview": "dist/**\n.vscode/**\n.vscode-test/**\ntest/.vscode-test/**\n.git-blame-ignore-revs\n**/*.md\n**/*.ts\n**/*.js\n**/*.yml\ntest/sce"
},
{
"path": ".vscode/conversation.schema.json",
"chars": 1658,
"preview": "{\n\t\"$schema\": \"http://json-schema.org/draft-07/schema\",\n\t\"type\": \"array\",\n\t\"definitions\": {\n\t\t\"keyword-list\": {\n\t\t\t\"type"
},
{
"path": ".vscode/extensions/test-extension/.vscode/launch.json",
"chars": 555,
"preview": "{\n\t// Use IntelliSense to learn about possible attributes.\n\t// Hover to view descriptions of existing attributes.\n\t// Fo"
},
{
"path": ".vscode/extensions/test-extension/bootstrap.ts",
"chars": 487,
"preview": "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Micros"
},
{
"path": ".vscode/extensions/test-extension/main.ts",
"chars": 9372,
"preview": "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Micros"
},
{
"path": ".vscode/extensions/test-extension/package.json",
"chars": 250,
"preview": "{\n\t\"publisher\": \"ms-vscode\",\n\t\"name\": \"simulation-test-runner\",\n\t\"version\": \"0.0.4\",\n\t\"displayName\": \"STest Runner\",\n\t\"e"
},
{
"path": ".vscode/extensions/visualization-runner/README.md",
"chars": 232,
"preview": "# Visualization Runner\n\nThis extension add \"Visualize Test\" code actions to tests that have `[visualizable]` in their na"
},
{
"path": ".vscode/extensions/visualization-runner/entry.js",
"chars": 706,
"preview": "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Micros"
},
{
"path": ".vscode/extensions/visualization-runner/extension.ts",
"chars": 3879,
"preview": "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Micros"
},
{
"path": ".vscode/extensions/visualization-runner/package.json",
"chars": 305,
"preview": "{\n\t\"publisher\": \"ms-vscode\",\n\t\"name\": \"visualization-runner\",\n\t\"version\": \"0.1.0\",\n\t\"displayName\": \"Visualization Runner"
},
{
"path": ".vscode/extensions.json",
"chars": 340,
"preview": "{\n\t\"recommendations\": [\n\t\t\"dbaeumer.vscode-eslint\",\n\t\t\"esbenp.prettier-vscode\",\n\t\t\"connor4312.esbuild-problem-matchers\","
},
{
"path": ".vscode/launch.json",
"chars": 8420,
"preview": "{\n\t\"version\": \"0.2.0\",\n\t\"configurations\": [\n\t\t{\n\t\t\t\"type\": \"extensionHost\",\n\t\t\t\"request\": \"launch\",\n\t\t\t\"name\": \"Launch C"
},
{
"path": ".vscode/mcp.json",
"chars": 371,
"preview": "{\n\t\"servers\": {\n\t\t\"vscode-playwright-mcp\": {\n\t\t\t\"type\": \"stdio\",\n\t\t\t\"command\": \"npm\",\n\t\t\t// See https://github.com/micro"
},
{
"path": ".vscode/settings.json",
"chars": 5617,
"preview": "{\n\t\"files.trimTrailingWhitespace\": true,\n\t\"[typescript]\": {\n\t\t\"editor.insertSpaces\": false,\n\t\t\"editor.defaultFormatter\":"
},
{
"path": ".vscode/snippets.code-snippets",
"chars": 452,
"preview": "{\n\t\"copyright\": {\n\t\t\"prefix\": \"copyright\",\n\t\t\"body\": [\n\t\t\t\"/*-----------------------------------------------------------"
},
{
"path": ".vscode/state.schema.json",
"chars": 3453,
"preview": "{\n\t\"$schema\": \"http://json-schema.org/draft-07/schema\",\n\t\"type\": \"object\",\n\t\"definitions\": {\n\t\t\"position\": {\n\t\t\t\"type\": "
},
{
"path": ".vscode/tasks.json",
"chars": 3491,
"preview": "{\n\t\"version\": \"2.0.0\",\n\t\"tasks\": [\n\t\t{\n\t\t\t\"label\": \"Install dependencies\",\n\t\t\t\"type\": \"shell\",\n\t\t\t\"command\": \"npm ci\",\n\t"
},
{
"path": ".vscode-test.mjs",
"chars": 1574,
"preview": "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Micros"
},
{
"path": ".vscodeignore",
"chars": 1103,
"preview": "**\n!assets/\nassets/walkthroughs/**\n!dist/compiled/**\n!dist/extension.js\n!dist/extension.js.LICENSE.txt\n!dist/*.wasm\n!dis"
},
{
"path": "CHANGELOG.md",
"chars": 193557,
"preview": "## 0.40 (2026-03-18)\n\nGitHub Copilot updates for [VS Code 1.112](https://code.visualstudio.com/updates/v1_112):\n\n- Messa"
},
{
"path": "CODE_OF_CONDUCT.md",
"chars": 557,
"preview": "# Microsoft Open Source Code of Conduct\n\nThis project has adopted the [Microsoft Open Source Code of Conduct](https://op"
},
{
"path": "CONTRIBUTING.md",
"chars": 26125,
"preview": "# Contributing to GitHub Copilot Chat\n\n* [Creating good issues](#creating-good-issues)\n * [Look For an Existing Issue]("
},
{
"path": "CodeQL.yml",
"chars": 185,
"preview": "path_classifiers:\n tests:\n - \"test/simulation/fixtures/edit-asyncawait-4151/*.ts\"\n - \"test/simulation/fixtures/ed"
},
{
"path": "LICENSE.txt",
"chars": 1094,
"preview": "MIT License\n\nCopyright (c) Microsoft Corporation. All rights reserved.\n\nPermission is hereby granted, free of charge, to"
},
{
"path": "README.md",
"chars": 8953,
"preview": "# GitHub Copilot - Your autonomous AI peer programmer\n\n**[GitHub Copilot](https://code.visualstudio.com/docs/copilot/ove"
},
{
"path": "SECURITY.md",
"chars": 542,
"preview": "<!-- BEGIN MICROSOFT SECURITY.MD V1.0.0 BLOCK -->\n\n## Security\n\nMicrosoft takes the security of our software products an"
},
{
"path": "assets/prompts/create-agent.prompt.md",
"chars": 1245,
"preview": "---\nname: create-agent\ndescription: 'Create a custom agent (.agent.md) for a specific job.'\nargument-hint: What job shou"
},
{
"path": "assets/prompts/create-hook.prompt.md",
"chars": 1333,
"preview": "---\nname: create-hook\ndescription: 'Create a hook (.json) to enforce policy or automate agent lifecycle events.'\nargumen"
},
{
"path": "assets/prompts/create-instructions.prompt.md",
"chars": 1426,
"preview": "---\nname: create-instructions\ndescription: 'Create an instructions file (.instructions.md) for a project rule or convent"
},
{
"path": "assets/prompts/create-prompt.prompt.md",
"chars": 1224,
"preview": "---\nname: create-prompt\ndescription: 'Create a reusable prompt file (.prompt.md) for a common task.'\nargument-hint: What"
},
{
"path": "assets/prompts/create-skill.prompt.md",
"chars": 1222,
"preview": "---\nname: create-skill\ndescription: 'Create a reusable skill (SKILL.md) that packages a workflow.'\nargument-hint: What s"
},
{
"path": "assets/prompts/init.prompt.md",
"chars": 1981,
"preview": "---\nname: init\ndescription: Generate or update workspace instructions file for AI coding agents\nargument-hint: Optionall"
},
{
"path": "assets/prompts/plan.prompt.md",
"chars": 154,
"preview": "---\nname: plan\ndescription: Research and plan with the Plan agent\nagent: Plan\nargument-hint: Describe what you want to p"
},
{
"path": "assets/prompts/skills/agent-customization/SKILL.md",
"chars": 5424,
"preview": "---\nname: agent-customization\ndescription: '**WORKFLOW SKILL** — Create, update, review, fix, or debug VS Code agent cus"
},
{
"path": "assets/prompts/skills/agent-customization/references/agents.md",
"chars": 3638,
"preview": "# [Custom Agents (.agent.md)](https://code.visualstudio.com/docs/copilot/customization/custom-agents)\n\nCustom personas w"
},
{
"path": "assets/prompts/skills/agent-customization/references/hooks.md",
"chars": 2697,
"preview": "# [Hooks (.json)](https://code.visualstudio.com/docs/copilot/customization/hooks)\n\nDeterministic lifecycle automation fo"
},
{
"path": "assets/prompts/skills/agent-customization/references/instructions.md",
"chars": 2638,
"preview": "# [File-Specific Instructions (.instructions.md)](https://code.visualstudio.com/docs/copilot/customization/custom-instru"
},
{
"path": "assets/prompts/skills/agent-customization/references/prompts.md",
"chars": 2522,
"preview": "# [Prompts (.prompt.md)](https://code.visualstudio.com/docs/copilot/customization/prompt-files)\n\nReusable task templates"
},
{
"path": "assets/prompts/skills/agent-customization/references/skills.md",
"chars": 3003,
"preview": "# [Agent Skills (SKILL.md)](https://code.visualstudio.com/docs/copilot/customization/agent-skills)\n\nFolders of instructi"
},
{
"path": "assets/prompts/skills/agent-customization/references/workspace-instructions.md",
"chars": 2299,
"preview": "# [Workspace Instructions](https://code.visualstudio.com/docs/copilot/customization/custom-instructions)\n\nGuidelines tha"
},
{
"path": "assets/prompts/skills/get-search-view-results/SKILL.md",
"chars": 495,
"preview": "---\nname: get-search-view-results\ndescription: 'Get the current search results from the Search view in VS Code'\n---\n\n# G"
},
{
"path": "assets/prompts/skills/install-vscode-extension/SKILL.md",
"chars": 1056,
"preview": "---\nname: install-vscode-extension\ndescription: 'How to install a VS Code extension from an extension ID. Useful when th"
},
{
"path": "assets/prompts/skills/project-setup-info-context7/SKILL.md",
"chars": 1992,
"preview": "---\nname: project-setup-info-context7\ndescription: \"Comprehensive setup steps to help the user create complete project s"
},
{
"path": "assets/prompts/skills/project-setup-info-local/SKILL.md",
"chars": 7481,
"preview": "---\nname: project-setup-info-local\ndescription: 'Comprehensive setup steps to help the user create complete project stru"
},
{
"path": "assets/prompts/skills/troubleshoot/SKILL.md",
"chars": 15786,
"preview": "---\nname: troubleshoot\ndescription: Investigate unexpected chat agent behavior by analyzing direct debug logs in JSONL f"
},
{
"path": "build/.cachesalt",
"chars": 25,
"preview": "2023-12-30T08:16:00.983Z\n"
},
{
"path": "build/listBuildCacheFiles.js",
"chars": 1310,
"preview": "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Micros"
},
{
"path": "build/npm-package.yml",
"chars": 3116,
"preview": "trigger:\n batch: true\n branches:\n include:\n - main\n tags:\n include:\n - v*\n\npr: [main]\n\nresources:\n r"
},
{
"path": "build/pr-check-cache-files.ts",
"chars": 7511,
"preview": "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Micros"
},
{
"path": "build/pre-release.yml",
"chars": 8633,
"preview": "# Run on a schedule\ntrigger: none\npr: none\n\nschedules:\n - cron: '0 4 * * Mon-Fri'\n displayName: Mon-Fri at 4:00 UTC\n"
},
{
"path": "build/release.yml",
"chars": 8234,
"preview": "name: $(Date:yyyyMMdd)$(Rev:.r)\n\ntrigger:\n branches:\n include:\n - main\npr: none\n\nresources:\n repositories:\n "
},
{
"path": "build/setup-emsdk.sh",
"chars": 238,
"preview": "mkdir -p /opt/dev \\\n&& cd /opt/dev \\\n&& git clone https://github.com/emscripten-core/emsdk.git \\\n&& cd /opt/dev/emsdk \\\n"
},
{
"path": "build/update-assets.yml",
"chars": 1858,
"preview": "trigger: none\npr: none\n\nresources:\n repositories:\n - repository: 1esPipelines\n type: git\n name: 1ESPipelin"
},
{
"path": "cgmanifest.json",
"chars": 351,
"preview": "{\n\t\"$schema\": \"https://json.schemastore.org/component-detection-manifest.json\",\n\t\"Registrations\": [\n\t\t{\n\t\t\t\"Component\": "
},
{
"path": "chat-lib/.gitignore",
"chars": 44,
"preview": "# Generated source files\n/src/\n/dist/\n/*.tgz"
},
{
"path": "chat-lib/LICENSE.txt",
"chars": 1094,
"preview": "MIT License\n\nCopyright (c) Microsoft Corporation. All rights reserved.\n\nPermission is hereby granted, free of charge, to"
},
{
"path": "chat-lib/README.md",
"chars": 141,
"preview": "# @vscode/chat-lib\n\nChat SDK extracted from VS Code Copilot Chat.\n\n## Installation\n\n```bash\nnpm install @vscode/chat-lib"
},
{
"path": "chat-lib/package.json",
"chars": 1816,
"preview": "{\n\t\"name\": \"@vscode/chat-lib\",\n\t\"version\": \"0.0.0\",\n\t\"description\": \"Chat and inline editing SDK extracted from VS Code "
},
{
"path": "chat-lib/script/postinstall.ts",
"chars": 2307,
"preview": "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Micros"
},
{
"path": "chat-lib/tsconfig.base.json",
"chars": 545,
"preview": "{\n\t\"compilerOptions\": {\n\t\t\"module\": \"commonjs\",\n\t\t\"target\": \"es2022\",\n\t\t\"lib\": [\"ES2022\"],\n\t\t\"sourceMap\": true,\n\n\t\t\"expe"
},
{
"path": "chat-lib/tsconfig.json",
"chars": 323,
"preview": "{\n\t\"extends\": \"./tsconfig.base.json\",\n\t\"compilerOptions\": {\n\t\t\"jsx\": \"react\",\n\t\t\"jsxFactory\": \"vscpp\",\n\t\t\"jsxFragmentFac"
},
{
"path": "chat-lib/vitest.config.ts",
"chars": 720,
"preview": "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Micros"
},
{
"path": "docs/NES_EXPECTED_EDIT_CAPTURE.md",
"chars": 9546,
"preview": "# NES Expected Edit Capture Feature\n\n## Overview\n\nA feature that allows users to record/capture their \"expected suggesti"
},
{
"path": "docs/monitoring/agent_monitoring.md",
"chars": 25422,
"preview": "# Monitoring Agent Usage with OpenTelemetry\n\nCopilot Chat can export **traces**, **metrics**, and **events** via [OpenTe"
},
{
"path": "docs/monitoring/agent_monitoring_arch.md",
"chars": 13741,
"preview": "# OTel Instrumentation — Developer Guide\n\nThis document describes the architecture, code structure, and conventions for "
},
{
"path": "docs/monitoring/docker-compose.yaml",
"chars": 1262,
"preview": "# Copilot Chat OTel monitoring stack\n#\n# Starts an OpenTelemetry Collector that accepts OTLP on :4318 (HTTP) and :4317 ("
},
{
"path": "docs/monitoring/otel-collector-config.yaml",
"chars": 1247,
"preview": "# OpenTelemetry Collector configuration for Copilot Chat\n# Receives OTLP from Copilot Chat and exports to multiple backe"
},
{
"path": "docs/monitoring/otel-data-flow.html",
"chars": 37365,
"preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n<meta charset=\"UTF-8\">\n<meta name=\"viewport\" content=\"width=device-width, initia"
},
{
"path": "docs/prompts.md",
"chars": 11686,
"preview": "# Authoring Model-Specific Prompts\n\n## Table of Contents\n\n- [Overview](#overview)\n- [Creating a Custom Prompt](#creating"
},
{
"path": "docs/tools.md",
"chars": 8660,
"preview": "## So you want to write a tool\n\nNew to LLM tools? Here are some starting resources\n- https://code.visualstudio.com/api/e"
},
{
"path": "eslint.config.mjs",
"chars": 18718,
"preview": "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Micros"
},
{
"path": "lint-staged.config.js",
"chars": 1042,
"preview": "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Micros"
},
{
"path": "package.json",
"chars": 216680,
"preview": "{\n\t\"name\": \"copilot-chat\",\n\t\"displayName\": \"GitHub Copilot Chat\",\n\t\"description\": \"AI chat features powered by Copilot\","
},
{
"path": "package.nls.json",
"chars": 57977,
"preview": "{\n\t\"github.copilot.badge.signUp\": \"Sign up for GitHub Copilot\",\n\t\"github.copilot.badge.star\": \"Star Copilot on GitHub\",\n"
},
{
"path": "script/alternativeAction/index.ts",
"chars": 5643,
"preview": "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Micros"
},
{
"path": "script/alternativeAction/processor.ts",
"chars": 4883,
"preview": "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Micros"
},
{
"path": "script/alternativeAction/types.ts",
"chars": 2088,
"preview": "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Micros"
},
{
"path": "script/alternativeAction/util.ts",
"chars": 1693,
"preview": "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Micros"
},
{
"path": "script/analyzeEdits.ts",
"chars": 20592,
"preview": "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Micros"
},
{
"path": "script/applyLocalDts.sh",
"chars": 329,
"preview": "#---------------------------------------------------------------------------------------------\n# Copyright (c) Microsof"
},
{
"path": "script/build/compressTikToken.ts",
"chars": 2422,
"preview": "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Micros"
},
{
"path": "script/build/copyStaticAssets.ts",
"chars": 831,
"preview": "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Micros"
},
{
"path": "script/build/downloadBinary.ts",
"chars": 4165,
"preview": "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Micros"
},
{
"path": "script/build/extractChatLib.ts",
"chars": 31371,
"preview": "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Micros"
},
{
"path": "script/build/moveProposedDts.js",
"chars": 582,
"preview": "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Micros"
},
{
"path": "script/build/vscodeDtsCheck.js",
"chars": 2174,
"preview": "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Micros"
},
{
"path": "script/build/vscodeDtsUpdate.js",
"chars": 2223,
"preview": "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Micros"
},
{
"path": "script/cleanLog.ts",
"chars": 4162,
"preview": "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Micros"
},
{
"path": "script/compareStestAlternativeRuns.ts",
"chars": 17315,
"preview": "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Micros"
},
{
"path": "script/electron/simulationWorkbench.css",
"chars": 5587,
"preview": ".testListMenu {\n\tposition: absolute;\n\tz-index: 1000;\n\tborder: 1px solid black;\n}\n\n.testListMenu .hidden {\n\tdisplay: none"
},
{
"path": "script/electron/simulationWorkbench.html",
"chars": 379,
"preview": "<!DOCTYPE html>\n<html>\n\t<head>\n\t\t<meta charset=\"UTF-8\" />\n\t\t<title>Simulation Workbench</title>\n\t\t<link rel=\"stylesheet\""
},
{
"path": "script/electron/simulationWorkbenchMain.js",
"chars": 3532,
"preview": "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Micros"
},
{
"path": "script/eslintGitBlameReport/generateEslintIgnoreReport.ts",
"chars": 13067,
"preview": "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Micros"
},
{
"path": "script/logRecordingTypes.ts",
"chars": 3061,
"preview": "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Micros"
},
{
"path": "script/postinstall.ts",
"chars": 4126,
"preview": "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Micros"
},
{
"path": "script/scoredEditsReconciler.ts",
"chars": 4343,
"preview": "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Micros"
},
{
"path": "script/setup/copySources.ts",
"chars": 7002,
"preview": "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Micros"
},
{
"path": "script/setup/createVenv.mts",
"chars": 2968,
"preview": "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Micros"
},
{
"path": "script/setup/getEnv.mts",
"chars": 4154,
"preview": "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Micros"
},
{
"path": "script/setup/getToken.mts",
"chars": 3437,
"preview": "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Micros"
},
{
"path": "script/simulate.ps1",
"chars": 514,
"preview": "#---------------------------------------------------------------------------------------------\n# Copyright (c) Microsof"
},
{
"path": "script/simulate.sh",
"chars": 711,
"preview": "#!/usr/bin/env bash\n#---------------------------------------------------------------------------------------------\n# Co"
},
{
"path": "script/test/scoredEditsReconciler.spec.ts",
"chars": 26758,
"preview": "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Micros"
},
{
"path": "script/testGeneration/editFromPatchTests.ts",
"chars": 4533,
"preview": "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Micros"
},
{
"path": "script/tsconfig.json",
"chars": 188,
"preview": "{\n\t\"compilerOptions\": {\n\t\t\"module\": \"Node16\",\n\t\t\"moduleResolution\": \"Node16\",\n\t\t\"noEmit\": true,\n\t\t\"target\": \"ES2022\",\n\t\t"
},
{
"path": "src/extension/agentDebug/common/toolResultRenderer.ts",
"chars": 1182,
"preview": "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Micros"
},
{
"path": "src/extension/agentDebug/vscode-node/toolResultContentRenderer.ts",
"chars": 1418,
"preview": "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Micros"
},
{
"path": "src/extension/agents/node/adapters/anthropicAdapter.ts",
"chars": 9268,
"preview": "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Micros"
},
{
"path": "src/extension/agents/node/adapters/openaiAdapterForSTests.ts",
"chars": 11665,
"preview": "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Micros"
},
{
"path": "src/extension/agents/node/adapters/types.ts",
"chars": 2467,
"preview": "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Micros"
},
{
"path": "src/extension/agents/node/langModelServer.ts",
"chars": 11738,
"preview": "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Micros"
},
{
"path": "src/extension/agents/node/test/mockLanguageModelServer.ts",
"chars": 921,
"preview": "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Micros"
},
{
"path": "src/extension/agents/node/test/openaiAdapter.spec.ts",
"chars": 4868,
"preview": "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Micros"
},
{
"path": "src/extension/agents/vscode-node/agentCustomizationSkillProvider.ts",
"chars": 2033,
"preview": "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Micros"
},
{
"path": "src/extension/agents/vscode-node/agentTypes.ts",
"chars": 3890,
"preview": "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Micros"
},
{
"path": "src/extension/agents/vscode-node/askAgentProvider.ts",
"chars": 6647,
"preview": "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Micros"
},
{
"path": "src/extension/agents/vscode-node/baseSkillProvider.ts",
"chars": 2988,
"preview": "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Micros"
},
{
"path": "src/extension/agents/vscode-node/editModeAgentProvider.ts",
"chars": 4027,
"preview": "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Micros"
},
{
"path": "src/extension/agents/vscode-node/exploreAgentProvider.ts",
"chars": 6366,
"preview": "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Micros"
},
{
"path": "src/extension/agents/vscode-node/githubOrgChatResourcesService.ts",
"chars": 13726,
"preview": "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Micros"
},
{
"path": "src/extension/agents/vscode-node/githubOrgCustomAgentProvider.ts",
"chars": 8572,
"preview": "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Micros"
},
{
"path": "src/extension/agents/vscode-node/githubOrgInstructionsProvider.ts",
"chars": 3585,
"preview": "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Micros"
},
{
"path": "src/extension/agents/vscode-node/planAgentProvider.ts",
"chars": 10754,
"preview": "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Micros"
},
{
"path": "src/extension/agents/vscode-node/promptFileContrib.ts",
"chars": 4795,
"preview": "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Micros"
},
{
"path": "src/extension/agents/vscode-node/skillFsProviderHelper.ts",
"chars": 6672,
"preview": "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Micros"
},
{
"path": "src/extension/agents/vscode-node/test/askAgentProvider.spec.ts",
"chars": 10095,
"preview": "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Micros"
},
{
"path": "src/extension/agents/vscode-node/test/githubOrgChatResourcesService.spec.ts",
"chars": 29916,
"preview": "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Micros"
},
{
"path": "src/extension/agents/vscode-node/test/githubOrgCustomAgentProvider.spec.ts",
"chars": 51043,
"preview": "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Micros"
},
{
"path": "src/extension/agents/vscode-node/test/githubOrgInstructionsProvider.spec.ts",
"chars": 12736,
"preview": "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Micros"
},
{
"path": "src/extension/agents/vscode-node/test/mockOctoKitService.ts",
"chars": 3961,
"preview": "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Micros"
},
{
"path": "src/extension/agents/vscode-node/test/planAgentProvider.spec.ts",
"chars": 19061,
"preview": "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Micros"
},
{
"path": "src/extension/agents/vscode-node/troubleshootSkillProvider.ts",
"chars": 1865,
"preview": "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Micros"
},
{
"path": "src/extension/api/vscode/api.d.ts",
"chars": 1017,
"preview": "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Micros"
},
{
"path": "src/extension/api/vscode/extensionApi.ts",
"chars": 1516,
"preview": "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Micros"
},
{
"path": "src/extension/api/vscode/vscodeContextProviderApi.ts",
"chars": 1043,
"preview": "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Micros"
},
{
"path": "src/extension/authentication/vscode-node/authentication.contribution.ts",
"chars": 4220,
"preview": "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Micros"
},
{
"path": "src/extension/byok/common/anthropicMessageConverter.ts",
"chars": 11826,
"preview": "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Micros"
},
{
"path": "src/extension/byok/common/byokProvider.ts",
"chars": 8873,
"preview": "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Micros"
},
{
"path": "src/extension/byok/common/geminiFunctionDeclarationConverter.ts",
"chars": 3608,
"preview": "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Micros"
},
{
"path": "src/extension/byok/common/geminiMessageConverter.ts",
"chars": 11948,
"preview": "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Micros"
},
{
"path": "src/extension/byok/common/test/__snapshots__/anthropicMessageConverter.spec.ts.snap",
"chars": 3476,
"preview": "// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html\n\nexports[`anthropicMessagesToRawMessages > converts messag"
},
{
"path": "src/extension/byok/common/test/anthropicMessageConverter.spec.ts",
"chars": 5234,
"preview": "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Micros"
},
{
"path": "src/extension/byok/common/test/geminiFunctionDeclarationConverter.spec.ts",
"chars": 13936,
"preview": "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Micros"
},
{
"path": "src/extension/byok/common/test/geminiMessageConverter.spec.ts",
"chars": 15947,
"preview": "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Micros"
},
{
"path": "src/extension/byok/node/azureOpenAIEndpoint.ts",
"chars": 1121,
"preview": "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Micros"
},
{
"path": "src/extension/byok/node/openAIEndpoint.ts",
"chars": 12275,
"preview": "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Micros"
},
{
"path": "src/extension/byok/node/test/azureOpenAIEndpoint.spec.ts",
"chars": 5472,
"preview": "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Micros"
},
{
"path": "src/extension/byok/node/test/openAIEndpoint.spec.ts",
"chars": 6602,
"preview": "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Micros"
},
{
"path": "src/extension/byok/vscode-node/abstractLanguageModelChatProvider.ts",
"chars": 8766,
"preview": "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Micros"
},
{
"path": "src/extension/byok/vscode-node/anthropicProvider.ts",
"chars": 39568,
"preview": "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Micros"
},
{
"path": "src/extension/byok/vscode-node/azureProvider.ts",
"chars": 5574,
"preview": "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Micros"
},
{
"path": "src/extension/byok/vscode-node/byokContribution.ts",
"chars": 5820,
"preview": "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Micros"
},
{
"path": "src/extension/byok/vscode-node/byokStorageService.ts",
"chars": 6820,
"preview": "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Micros"
},
{
"path": "src/extension/byok/vscode-node/customOAIProvider.ts",
"chars": 8564,
"preview": "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Micros"
},
{
"path": "src/extension/byok/vscode-node/geminiNativeProvider.ts",
"chars": 26875,
"preview": "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Micros"
},
{
"path": "src/extension/byok/vscode-node/ollamaProvider.ts",
"chars": 9185,
"preview": "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Micros"
}
]
// ... and 4107 more files (download for full content)
About this extraction
This page contains the full source code of the microsoft/vscode-copilot-chat GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 4307 files (43.9 MB), approximately 11.8M tokens, and a symbol index with 27446 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.