mirror of
https://github.com/microsoft/vscode.git
synced 2026-05-14 12:11:43 +01:00
a3d955d72a
- Move copilotChatSessions, remoteAgentHost, and agentHost providers from contrib/ into a new contrib/providers/ subfolder for clearer separation - Add ESLint layer rule 'contrib/providers/*/~' (before 'contrib/*/~') so sibling contrib folders cannot import directly from providers - Update all entry points (sessions.common.main.ts, sessions.desktop.main.ts, sessions.web.main.ts) to reference new provider paths - Port all upstream changes from origin/main to the new provider locations - Add contrib/providers entry to build/lib/i18n.resources.json - Rewrite docs: README.md, LAYOUT.md, LAYERS.md, SESSIONS.md, SKILL.md, sessions.instructions.md; add source-code-organization, coding-guidelines, and writing-tests instruction files; remove stale SESSIONS_PROVIDER.md and AGENTS_CHAT_WIDGET.md Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2.6 KiB
2.6 KiB
description, applyTo
| description | applyTo |
|---|---|
| VS Code source code organization — layers, target environments, dependency injection, and folder structure conventions. Reference when adding new modules, services, or contributions. | src/vs/** |
Source Code Organization
Canonical reference: https://github.com/microsoft/vscode/wiki/Source-Code-Organization
Layers
The src/vs/ core is partitioned into ordered layers — each may only import from layers below it:
base— General utilities and UI building blocks (no service dependencies)platform— Service injection support and base services shared across layerseditor— Monaco Editor core (nonodeorelectron-*dependencies)workbench— Full VS Code workbench, panels, views, and frameworkcode— Desktop app entry point (Electron main, shared process, CLI)server— Server app entry point for remote developmentsessions— Agent Sessions window (may import fromworkbenchand below;workbenchmust never import fromsessions)
Target Environments
Within each layer, code is organized by runtime environment:
| Folder | APIs Available | May Use |
|---|---|---|
common |
Basic JavaScript only | — |
browser |
Web/DOM APIs | common |
node |
Node.js APIs | common |
electron-browser |
Browser + limited Electron IPC | common, browser |
electron-utility |
Electron utility process | common, node |
electron-main |
Electron main process | common, node, electron-utility |
Workbench Organization
vs/workbench/{common|browser|electron-browser}— minimal workbench corevs/workbench/api—vscode.d.tsAPI providervs/workbench/services— core services (not contrib-specific)vs/workbench/contrib— feature contributions
Contribution Rules
- No dependency from outside
contrib/intocontrib/ - Each contribution has a single
.contribution.tsentry point - Contributions expose internal API from a single common file
- Cross-contribution dependencies use that common API — never reach into internals
Entry Points
Only code referenced from entry point files is loaded:
workbench.common.main.ts— shared dependenciesworkbench.desktop.main.ts— desktop-onlyworkbench.web.main.ts— web-only
Dependency Injection
Services are consumed via constructor injection with decorator identifiers:
class MyComponent {
constructor(@IMyService private readonly myService: IMyService) { }
}
Services are provided via registerSingleton(IMyService, MyServiceImpl, InstantiationType.Delayed).