Skip to content

Report the actual IDE (Cursor, Windsurf, ...) for session tracking #1044

Description

@EhabY

Client half of the Scalable Approach for Adding New IDE Session Types RFC; supersedes #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#27410coder/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 Codevscode, Visual Studio Code - Insidersvscode_insiders, Cursorcursor, Windsurfwindsurf, 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=<type> on the ProxyCommand (workspace usage API → session counts)
    • CODER_SSH_SESSION_TYPE=<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 (Migrate connection_logs.type from ENUM to TEXT coder#27412) and the template_usage_stats JSONB merge (Merge template_usage_stats *_mins into app_usage_mins JSONB 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 Track Cursor and other VS Code forks separately in usage statistics #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.

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions