Files
vscode/.github/instructions/source-code-organization.instructions.md
T
roblourens a39698f7e6 agentHost: add Claude and Codex session telemetry (#333274)
* agentHost: add Claude and Codex session telemetry

Generalize Agent Host subscription telemetry across providers while preserving Copilot-specific SDK resume dimensions. Add coverage for Claude, Codex, and future providers.\n\n(Written by Copilot)\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* agentHost: filter session telemetry by registered provider

Resolve subscription providers through the provider service so future registered providers are included while terminal and unknown resource schemes are excluded.\n\n(Written by Copilot)\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* agentHost: use canonical provider service interface

Keep the production dependency typed as IAgentHostProviderService and move partial service stubbing into test code.\n\n(Written by Copilot)\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* docs: require canonical injected service interfaces

Document that production service dependencies use their canonical interfaces and keep partial test conveniences in test code.\n\n(Written by Copilot)\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-08-29 00:09:49 +00:00

70 lines
2.8 KiB
Markdown

---
description: VS Code source code organization — layers, target environments, dependency injection, and folder structure conventions. Reference when adding new modules, services, or contributions.
applyTo: 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:
1. **`base`** — General utilities and UI building blocks (no service dependencies)
2. **`platform`** — Service injection support and base services shared across layers
3. **`editor`** — Monaco Editor core (no `node` or `electron-*` dependencies)
4. **`workbench`** — Full VS Code workbench, panels, views, and framework
5. **`code`** — Desktop app entry point (Electron main, shared process, CLI)
6. **`server`** — Server app entry point for remote development
7. **`sessions`** — Agent Sessions window (may import from `workbench` and below; `workbench` must never import from `sessions`)
## 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 core
- `vs/workbench/api``vscode.d.ts` API provider
- `vs/workbench/services` — core services (not contrib-specific)
- `vs/workbench/contrib` — feature contributions
### Contribution Rules
- No dependency from outside `contrib/` into `contrib/`
- Each contribution has a single `.contribution.ts` entry 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 dependencies
- `workbench.desktop.main.ts` — desktop-only
- `workbench.web.main.ts` — web-only
## Dependency Injection
Services are consumed via constructor injection with decorator identifiers:
```typescript
class MyComponent {
constructor(@IMyService private readonly myService: IMyService) { }
}
```
Decorated service parameters must use their canonical service interface. Do not invent local subset interfaces or `Pick<...>` aliases in production to simplify tests; keep partial stubs, adapters, and other test-only conveniences in test code.
Services are provided via `registerSingleton(IMyService, MyServiceImpl, InstantiationType.Delayed)`.