Report the actual IDE (Cursor, Devin Desktop, ...) for session tracking
- Dominant language
- TypeScript
- Stars
- 130
- Forks
- 48
- Avg merge
- 3d 3h
- Merged PRs (30d)
- 15
Description
Client half of the [Scalable Approach for Adding New IDE Session Types RFC](); supersedes coder/vscode-coder#696, closed as a duplicate of this issue. The extension hardcodes `vscode` in both identification mechanisms, so Cursor, Windsurf, and other forks are all recorded as VS Code. The server side (coder/coder#27410 → coder/coder#27412) accepts arbitrary app names; this issue makes the extension send the real one.
Scope (RFC: "Client-side changes" and "Rollout order and version gating"):
* Add a `getIdeType()` util mapping `vscode.env.appName` to an app name: `Visual Studio Code` → `vscode`, `Visual Studio Code - Insiders` → `vscode_insiders`, `Cursor` → `cursor`, ``` Windsu``rf/Devin Desktop ``` → `devin`, plus `positron`, `vscodium`, ...; unknown editors send the raw app name and the server normalizes it (lowercase, `-` → `_`, 64-rune cap)
* Use it in both mechanisms, which feed different pipelines:
* `--usage-app=` on the ProxyCommand (workspace usage API → session counts)
* `CODER_SSH_SESSION_TYPE=` via SSH `SetEnv` (agent magic env → session counts + connection log)
* Version gate: one new `FeatureSet` flag evaluated on two instances, the existing CLI-binary-version instance and a second one built from the already-fetched `/api/v2/buildinfo` version; send a non-`vscode` name only when **both** pass, otherwise fall back to `vscode` (no regression against old servers, old agents, or stale custom binaries)
* The gate targets the coder/coder release containing **both** the `connection_logs` ENUM → TEXT migration (coder/coder#27412) **and** the `template_usage_stats` JSONB merge (coder/coder#27413). Until 642, the phase-1 rollup drops non-canonical app names from `template_usage_stats` entirely (they are not even bucketed by family), so flipping the gate earlier would silently undercount those users' IDE minutes and agent-side usage in template insights. Gating on both closes that window without an interim schema workaround
* Prior art (from coder/vscode-coder#696): [wakatime/vscode-wakatime]() and [kahole/edamagit]() detect the host editor via `vscode.env.appName` the same way
### Done when
- [ ] Cursor/Windsurf sessions show up under their own name on a new-enough deployment (session counts and connection log)
- [ ] The same build falls back to `vscode` against an older server or CLI binary
- [ ] An unmapped fork still connects and reports its raw app name
---
🤖 Created by Coder Agents on behalf of @EhabY.
Contributor guide
Assessment
This issue has not been assessed yet.