Files
RoslynBridge/AGENTS.md
AJ Isaacs 86500af544 docs: update agent guide and SKILL docs; standardize Web API port 5001
- Update .claude SKILL to use port 5001 in all examples
- Add repo-root SKILL.md consolidated API guide
- Expand AGENTS.md with rb.ps1 usage and policies
2025-10-28 18:18:45 -04:00

93 lines
5.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Repository Guidelines
## Project Structure & Module Organization
- `RoslynBridge/` VSIX source (C#). Key folders: `Server/` (HTTP host), `Services/` (Roslyn queries, refactorings), `Models/`, `Constants/`.
- Build artifacts: `RoslynBridge/bin/` and `RoslynBridge/obj/`.
- Claude skills: `.claude/skills/roslyn-api/SKILL.md` (HTTP query reference for local discovery/testing).
## Build, Test, and Development Commands
- **IMPORTANT**: This VSIX project MUST be built with MSBuild, NOT `dotnet build`. Using `dotnet build` will fail with missing namespace errors.
- Build (CLI): `msbuild RoslynBridge.sln /p:Configuration=Debug` or with full path:
```powershell
& 'C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Current\Bin\MSBuild.exe' RoslynBridge.sln /t:Restore /t:Build /p:Configuration=Debug
```
- Build (VS): Open `RoslynBridge.sln`, set `RoslynBridge` as startup, press F5 to launch the Experimental Instance.
- Health check (server running in VS):
- PowerShell: `$b=@{queryType='getprojects'}|ConvertTo-Json; Invoke-RestMethod -Uri 'http://localhost:59123/query' -Method Post -Body $b -ContentType 'application/json'`
- curl (Windows): `curl -X POST http://localhost:59123/query -H "Content-Type: application/json" -d "{\"queryType\":\"getprojects\"}"`
## Coding Style & Naming Conventions
- Language: C# (net48 VSIX). Use 4space indentation; braces on new lines.
- Naming: `PascalCase` for types/methods; `camelCase` for locals; private fields as `_camelCase`.
- Prefer `async`/`await`, avoid blocking the UI thread; use `JoinableTaskFactory` when switching.
- Keep nullable annotations consistent with project settings.
- Run Format Document and Organize Usings before commits.
## Testing Guidelines
- No unit test project yet. Validate via HTTP endpoints (see SKILL.md): `getprojects`, `getdiagnostics`, `getsolutionoverview`, `getsymbol`, etc.
- Expected response shape: `{ success, message, data, error }` (JSON).
- Lines are 1based; columns 0based. File paths in JSON require escaped backslashes.
## Commit & Pull Request Guidelines
- Commits: concise, imperative subject (e.g., "Add diagnostics endpoint"), with short body explaining rationale and scope.
- PRs: include description, linked issues, sample requests/responses, and screenshots when UI/VS behavior is affected.
- Checklist: builds clean, `getdiagnostics` shows no new errors, code formatted, usings organized.
## Security & Configuration Tips
- Server binds to `http://localhost:59123/` and accepts only POST; CORS is permissive for local tooling. Do not expose externally.
- Endpoints: `/query` (main), `/health` route exists but still requires POST.
- Adjust port/paths in `RoslynBridge/Constants/ServerConstants.cs` if needed.
## Agent Script Usage: rb.ps1 (for AI agents)
This section is for the agent only. Use `rb.ps1` to minimize tokens and speed up local Roslyn queries.
- Location: `rb.ps1` (repo root). Invoke with PowerShell.
- Auto-detects endpoints: prefers Web API (`http://localhost:5001`), falls back to VS plugin (`http://localhost:59123`).
- Output defaults to compact JSON. Use `-Raw` to emit raw response strings, `-Pretty` only for debugging.
- Override detection with `-BaseUrl http://localhost:5001` if needed; `-NoDetect` forces Web API pathing.
Examples (run from repo root):
```powershell
# Health and discovery
powershell -NoProfile -Command .\rb.ps1 health
powershell -NoProfile -Command .\rb.ps1 projects -Raw
powershell -NoProfile -Command .\rb.ps1 overview
# File-specific queries (use full paths from `projects`)
powershell -NoProfile -Command .\rb.ps1 diagnostics -FilePath C:/full/path/File.cs
powershell -NoProfile -Command .\rb.ps1 symbol -FilePath C:/full/path/File.cs -Line 12 -Column 4
powershell -NoProfile -Command .\rb.ps1 references -FilePath C:/full/path/File.cs -Line 12 -Column 4 -Raw
# Symbol search
powershell -NoProfile -Command .\rb.ps1 search -SymbolName Service -Kind class
# Project operations
powershell -NoProfile -Command .\rb.ps1 build -ProjectName MyProject
powershell -NoProfile -Command .\rb.ps1 package-add -ProjectName MyProject -PackageName Newtonsoft.Json -Version 13.0.3
# History (Web API only)
powershell -NoProfile -Command .\rb.ps1 history-recent -Count 10
powershell -NoProfile -Command .\rb.ps1 history-stats
# Compact solution overview summary (uses API-level summary)
powershell -NoProfile -Command .\rb.ps1 solution-overview -Format yaml -Top 5
```
Key behaviors and assumptions:
- Lines are 1-based; columns 0-based.
- Forward slashes `/` are accepted in file paths.
- Prefer `-Raw` to minimize token usage when chaining outputs.
- If Web API is down, commands transparently fall back to the plugin when possible. History endpoints require Web API.
- If auto-detection is ambiguous, set `-BaseUrl` explicitly.
Policy (agent-only):
- Do NOT call `curl`, `Invoke-RestMethod`, or `Invoke-WebRequest` directly to Roslyn Bridge.
- Always invoke `rb.ps1` for all Roslyn-related queries and operations.
- Prefer `-Raw` output and parse only whats needed to reduce tokens.
- Keep timeouts short unless debugging (`-TimeoutSec` can be raised temporarily).
- Avoid pretty output unless explicitly needed (`-Pretty`).