Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
42 changes: 42 additions & 0 deletions .github/workflows/ci-build.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
name: CI Build (VSIX)

# Compile l'extension VSIX sur un runner Windows cloud à chaque push.
# Sert de "compilateur distant" : permet de vérifier que le code compile
# sans avoir Visual Studio / Windows en local.
on:
push:
branches: [main]
pull_request:
branches: [main]
workflow_dispatch:

jobs:
build:
name: Build sur Windows
runs-on: windows-latest
defaults:
run:
working-directory: visualstudio-extension
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Setup MSBuild
uses: microsoft/setup-msbuild@v2

- name: Setup NuGet
uses: NuGet/setup-nuget@v2

- name: Restore NuGet packages
run: nuget restore DevGlobe.sln

- name: Build (Release, sans déploiement local)
run: msbuild DevGlobe.sln /p:Configuration=Release /p:DeployExtension=false /m /v:minimal

- name: Upload du VSIX produit
if: success()
uses: actions/upload-artifact@v4
with:
name: DevGlobe-vsix
path: '**/bin/Release/*.vsix'
if-no-files-found: warn
60 changes: 60 additions & 0 deletions .github/workflows/publish-visualstudio.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
name: Publish Visual Studio Extension (GitHub only)

on:
push:
tags:
- "vs-v*"
workflow_dispatch:

jobs:
publish:
runs-on: windows-latest
permissions:
contents: write
defaults:
run:
working-directory: visualstudio-extension

steps:
- uses: actions/checkout@v4

- name: Setup MSBuild
uses: microsoft/setup-msbuild@v2

- name: Setup NuGet
uses: nuget/setup-nuget@v2

- name: Restore NuGet packages
run: nuget restore DevGlobe.sln

- name: Build VSIX (Release)
run: msbuild DevGlobe.sln /t:Rebuild /p:Configuration=Release /p:DeployExtension=false

- name: Locate VSIX
id: vsix
shell: pwsh
run: |
$vsix = Get-ChildItem -Path . -Recurse -Filter *.vsix |
Where-Object { $_.FullName -match 'bin\\Release' } |
Select-Object -First 1
if (-not $vsix) {
Write-Error "No .vsix found under bin\Release"
exit 1
}
Write-Host "Found VSIX: $($vsix.FullName)"
"path=$($vsix.FullName)" >> $env:GITHUB_OUTPUT

- name: Create GitHub Release
uses: softprops/action-gh-release@v2
with:
files: ${{ steps.vsix.outputs.path }}
body: |
## DevGlobe for Visual Studio

Built from commit ${{ github.sha }}

### Install manually
1. Download the `.vsix` file below
2. Double-click it (or use **Extensions → Manage Extensions → Install from VSIX…**)
3. Restart Visual Studio
generate_release_notes: true
1 change: 1 addition & 0 deletions PRIVACY.md
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,7 @@ If your profile is set to `anonymous`, the server stores no precise coordinates
|-----|---------|
| VS Code | OS keychain via `SecretStorage` (macOS Keychain, Windows Credential Manager, Linux libsecret). Old plaintext entries in `settings.json` are migrated automatically. |
| JetBrains | OS keychain via `PasswordSafe`. |
| Visual Studio | Windows Credential Manager. The `devglobe-core` daemon reads the key from `~/.devglobe/config.toml` (written with restrictive permissions). |
| Zed, NeoVim, Claude Code, Codex, OpenCode | `~/.devglobe/config.toml`, written with `0600` permissions. |

---
Expand Down
40 changes: 39 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@

<p align="center">
<a href="#vs-code">VS Code</a> &nbsp;·&nbsp;
<a href="#visual-studio">Visual Studio</a> &nbsp;·&nbsp;
<a href="#jetbrains">JetBrains</a> &nbsp;·&nbsp;
<a href="#zed">Zed</a> &nbsp;·&nbsp;
<a href="#neovim">NeoVim</a> &nbsp;·&nbsp;
Expand Down Expand Up @@ -93,6 +94,43 @@ Available from the Command Palette (`Ctrl+Shift+P` / `Cmd+Shift+P`):

---

### Visual Studio

The full **Visual Studio** IDE on Windows (not to be confused with VS Code).

#### Installation

1. Install from the [Visual Studio Marketplace](https://marketplace.visualstudio.com/) (search **DevGlobe**) or download the `.vsix` from the [Releases](https://github.com/Nako0/devglobe-extension/releases) and install it via **Extensions → Manage Extensions → Install from VSIX…**
2. Open the **DevGlobe** panel — click the **globe button** in the toolbar, or **View → Other Windows → DevGlobe**
3. Paste your API key → **Connect**

On first launch, the extension downloads the matching `devglobe-core` binary for Windows from [GitHub Releases](https://github.com/Nako0/devglobe-extension/releases) (one-time) and caches it under `%LOCALAPPDATA%\DevGlobe\core`.

#### Tool window

- **Login** — masked API key field + link to get your key on devglobe.app
- **Dashboard** — live coding time, active language, status message, start/stop tracking, disconnect

#### Commands

Available under **Tools → DevGlobe**:

| Command | Description |
|---|---|
| `Set Status Message` | Set your status message on the globe |
| `Show Coding Time` | Show your coding time today |
| `Open Globe` | Open [devglobe.app/space](https://devglobe.app/space) in your browser |
| `Debug` | Toggle debug logging in `~/.devglobe/devglobe.log` |
| `Open Log File…` | Open `~/.devglobe/devglobe.log` |
| `Open Config File…` | Open `~/.devglobe/config.toml` |

#### Compatibility

- **Visual Studio 2022 (17.x)** and **Visual Studio 2026 (18.x)** — Windows only
- .NET Framework 4.7.2

---

### JetBrains

Compatible with **all JetBrains IDEs**: IntelliJ IDEA, WebStorm, PyCharm, GoLand, Rider, PhpStorm, CLion, RubyMine, DataGrip, Android Studio, RustRover.
Expand Down Expand Up @@ -361,7 +399,7 @@ hide_project_names = false # omit repo + branch (project-level hiding implies

**Globe visibility** (anonymous mode, repo sharing on the live globe, profile mode) is managed on [devglobe.app/dashboard/settings](https://devglobe.app/dashboard/settings) — not in the extension.

**API keys** are stored in your OS keychain (VS Code SecretStorage, JetBrains PasswordSafe) or in a local config file under `~/.devglobe/` (Zed, NeoVim, Claude Code, Codex, OpenCode). Config files are created with `0600` permissions.
**API keys** are stored in your OS keychain (VS Code SecretStorage, JetBrains PasswordSafe, Visual Studio Windows Credential Manager) or in a local config file under `~/.devglobe/` (Zed, NeoVim, Claude Code, Codex, OpenCode). Config files are created with `0600` permissions.

**Network:** HTTPS only (TLS 1.2+), no telemetry, no third-party trackers.

Expand Down
7 changes: 4 additions & 3 deletions SECURITY.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,9 @@ Only the latest release of each extension receives security updates.

| Extension | Current version | Status |
|-----------|----------------|--------|
| VS Code | 0.1.8 | Supported |
| JetBrains | 0.1.7 | Supported |
| VS Code | 2.1.0 | Supported |
| JetBrains | 2.0.1 | Supported |
| Visual Studio | 0.1.0 | Supported |
| Claude Code | 1.0.0 | Supported |

## Reporting a vulnerability
Expand Down Expand Up @@ -78,7 +79,7 @@ Key design decisions:

- **HTTPS only** — all network requests enforce TLS, no HTTP fallback
- **Minimal data** — only what is listed in [PRIVACY.md](PRIVACY.md) is sent; source code, file contents, and keystrokes are never accessed
- **Secure key storage** — OS keychain on VS Code (SecretStorage) and JetBrains (PasswordSafe); `~/.devglobe/config.toml` (mode `0600`) on the other extensions
- **Secure key storage** — OS keychain on VS Code (SecretStorage), JetBrains (PasswordSafe) and Visual Studio (Windows Credential Manager); `~/.devglobe/config.toml` (mode `0600`) on the other extensions
- **Content Security Policy** — VS Code webview uses a cryptographic nonce-based CSP
- **No telemetry** — no third-party analytics or tracking services

Expand Down
21 changes: 21 additions & 0 deletions visualstudio-extension/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# .NET / MSBuild build output
bin/
obj/

# Visual Studio user / cache files
.vs/
*.user
*.suo
*.userosscache
*.sln.docstates

# VSIX package output
*.vsix

# ReSharper / Rider
_ReSharper*/
*.DotSettings.user

# Test results
[Tt]est[Rr]esult*/
*.trx
17 changes: 17 additions & 0 deletions visualstudio-extension/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
# Changelog

All notable changes to the DevGlobe Visual Studio extension are documented here.

## [0.1.0] - 2026-06-23

### Added

- Initial release of DevGlobe for Visual Studio (VS 2022 / VS 2026).
- DevGlobe tool window with **Login** and **Dashboard** views.
- Live heartbeat tracking driven by the `devglobe-core` binary (heartbeat every 30s, auto-pause after 1 min of inactivity).
- Activity detection: typing, active document, document open/save.
- Language detection from the active document.
- Status bar showing today's coding time.
- Six commands under **Tools → DevGlobe**: Set Status Message, Show Coding Time, Open Globe, Debug, Open Log File, Open Config File.
- API key stored in the Windows Credential Manager and written to `%USERPROFILE%\.devglobe\config.toml`.
- One-time download of the `devglobe-core-win-x64.exe` binary from GitHub Releases on first launch, cached under `%LOCALAPPDATA%\DevGlobe\core`.
22 changes: 22 additions & 0 deletions visualstudio-extension/DevGlobe.sln
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.0.31903.59
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DevGlobe", "DevGlobe\DevGlobe.csproj", "{5F3A9C2E-7B14-4E8A-9D6F-1A2B3C4D5E6F}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{5F3A9C2E-7B14-4E8A-9D6F-1A2B3C4D5E6F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{5F3A9C2E-7B14-4E8A-9D6F-1A2B3C4D5E6F}.Debug|Any CPU.Build.0 = Debug|Any CPU
{5F3A9C2E-7B14-4E8A-9D6F-1A2B3C4D5E6F}.Release|Any CPU.ActiveCfg = Release|Any CPU
{5F3A9C2E-7B14-4E8A-9D6F-1A2B3C4D5E6F}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal
Loading
Loading