vscode-extension-dev
Conventions for working on this LocalPilot VS Code extension codebase — build/test commands, architecture map, and where to add providers, tools, or UI features.
SKILL.md.localpilot/skills/vscode-extension-dev/SKILL.md
GitHubWorking on LocalPilot
Commands
- Type-check + lint + bundle:
npm run compile - Offline logic tests (mock Ollama/OpenAI servers, agent loop):
npm run smoke - Launch the extension host: VS Code
Run Extension(F5)
Architecture map
| Area | Path | Notes |
|---|---|---|
| Model backends | src/providers/ |
ollama.ts (native API), openaiCompat.ts (LM Studio, llama.cpp, vLLM…), registry.ts resolves provider/model ids |
| Agent loop | src/agent/agentLoop.ts |
model ⇄ tools loop, parallel tool execution, text-protocol fallback |
| Subagents & skills | src/agent/subagents.ts, src/agent/skills.ts |
run_subagent, run_parallel_subagents, load_skill |
| Context window | src/context/contextManager.ts |
prune → summarise → truncate |
| Tools | src/tools/*.ts |
each exports Tool[]; register in src/extension.ts |
| UI | src/ui/, media/chat.{js,css} |
webview controller, chat participant, LM provider, inline completions |
| MCP | src/mcp/mcpManager.ts |
stdio JSON-RPC client |
Adding a tool
- Create
src/tools/<name>.tsexporting aToolwith a JSON-schemadefinition. - Mark
parallelSafe: trueif read-only; setapprovalKindfor anything mutating. - Add it to the
registerAllcall insrc/extension.ts. - Add a
toolSummarycase inmedia/chat.jsfor a nice label.
Adding a provider type
Implement LLMProvider from src/types.ts, then branch on cfg.type in createProvider() in src/providers/registry.ts and extend the enum in package.json → localpilot.providers.