Skip to content

Report the actual IDE (Cursor, Devin Desktop, ...) 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, Windsu``rf/Devin Desktopdevin, 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.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions