Real-time code explanation, review, and completion — inside your editor.
CodeSense streams focused LLM responses as you select, save, or pause. No multi-step agents. No RAG. Just three fast modes over a shared SSE gateway.
| Mode | Trigger | Output |
|---|---|---|
| Explain | Selection or manual | Streaming natural-language explanation |
| Review | Save (Ctrl/Cmd+S) or manual |
Structured feedback panel |
| Suggest | Idle (debounced) | Inline ghost-text completion |
Requirements: Node.js 18+ (built-in http / fs only — no npm install)
cd codesense-app
node server.cjs
# or: ./start.shWithout keys, the gateway runs in demo mode (streamed synthetic responses so the UI is fully usable offline).
export ANTHROPIC_API_KEY=sk-ant-… # preferred (Claude Haiku-class)
# or
export XAI_API_KEY=xai-…
export OPENAI_API_KEY=sk-… # fallback
export GEMINI_API_KEY=AQ-…
# Optional model overrides
export ANTHROPIC_MODEL=claude-3-5-haiku-latest
export XAI_MODEL=grok-3-mini
export OPENAI_MODEL=gpt-4o-mini
export GEMINI_API_KEY=gemini-3.6-flash
node server.cjsProvider priority: Anthropic → xAI → Google Gemini → OpenAI → demo.
- Explain — select a block in the Monaco editor, or click Explain
- Review — press
Ctrl/Cmd+Sor click Review - Suggest — pause while typing; accept ghost text with Tab
- Switch language (TypeScript, JavaScript, Python, Go, Rust, Java) and load a sample
- Open Settings to toggle modes and adjust debounce (100–800 ms)
┌──────────────────────┐ ┌───────────────────────────┐
│ Web (Monaco Editor) │ │ VS Code Extension │
│ public/app.js │ │ vscode-extension/ │
└──────────┬───────────┘ └──────────┬────────────────┘
│ snippet + mode + cursor │
└─────────────┬──────────────┘
▼
┌────────────────────┐
│ Gateway │
│ POST /api/codesense
│ • prompt router │
│ • rate limit │
│ • token budget │
└─────────┬──────────┘
▼
┌────────────────────┐
│ LLM providers │
│ Anthropic / xAI / │
│ OpenAI / demo │
│ stream: always on │
└────────────────────┘
GET /api/health{
"ok": true,
"provider": "demo",
"maxInputTokens": 800
}POST /api/codesense
Content-Type: application/json
{
"mode": "explain" | "review" | "suggest",
"language": "typescript",
"snippet": "function add(a: number, b: number) { return a + b; }",
"cursorLine": 12,
"cursorCol": 4
}Response: text/event-stream
data: {"delta":"This function"}
data: {"delta":" adds two numbers…"}
data: [DONE]
Errors (JSON body or SSE payload):
| Code | Meaning |
|---|---|
INVALID_MODE |
mode not one of explain / review / suggest |
EMPTY_SNIPPET |
Missing or blank snippet |
RATE_LIMITED |
>30 requests/min per client IP |
TOKEN_LIMIT_EXCEEDED |
Snippet over ~800 token budget |
PROVIDER_TIMEOUT |
Upstream LLM failure |
codesense-app/
├── server.cjs # HTTP server + SSE gateway (port 8080)
├── start.sh # Convenience launcher
├── lib/
│ ├── prompts.mjs # System + mode templates, token estimate
│ ├── rateLimit.mjs # Token-bucket: 30 req/min per client
│ └── providers.mjs # Anthropic / xAI / OpenAI / demo streams
├── public/
│ ├── index.html # Shell
│ ├── styles.css # Dark editor chrome
│ └── app.js # Monaco + SSE client + settings
└── vscode-extension/ # Optional VS Code target
├── package.json
├── tsconfig.json
└── src/extension.ts
The extension talks to the same gateway.
cd vscode-extension
npm install
npm run compileIn VS Code: Developer: Install Extension from Location… → select this folder.
| Setting | Default | Description |
|---|---|---|
codesense.gatewayUrl |
http://127.0.0.1:8080 |
Gateway base URL |
codesense.debounceMs |
300 |
Debounce for explain / suggest |
codesense.enableExplain |
true |
Explain on selection |
codesense.enableReview |
true |
Review on save |
codesense.enableSuggest |
true |
Inline completions |
Commands: CodeSense: Explain Selection, CodeSense: Review Document, CodeSense: Toggle Suggest
| Concern | Choice | Why |
|---|---|---|
| Streaming | SSE over fetch |
Simple unidirectional LLM streams |
| API keys | Server-side only | Never exposed to the browser |
| Debounce | 300 ms default | Balance responsiveness vs. cost |
| Context window | ±30 / +10 lines around cursor | Keeps input under ~800 tokens |
| Default model path | Fast / cheap (Haiku-class) | Latency is the product for keystroke UX |
| Ghost text | Monaco / VS Code native APIs | No DOM hacks; respects editor UX |
| Dependencies | Node built-ins + CDN Monaco | npm install not required for the web app |
- Multi-step agent loops or tool execution
- Persistent conversation history
- RAG / codebase indexing
- Auth / user accounts
- Jupyter / notebooks
| Env var | Purpose |
|---|---|
PORT |
Listen port (default 8080) |
ANTHROPIC_API_KEY |
Primary provider |
ANTHROPIC_MODEL |
Override Anthropic model id |
XAI_API_KEY |
xAI / Grok provider |
XAI_MODEL |
Override xAI model id |
OPENAI_API_KEY |
OpenAI fallback |
OPENAI_MODEL |
Override OpenAI model id |
MIT — use it, fork it, ship it.
