Skip to content

Commit c5ede86

Browse files
authored
Merge pull request #21 from rrusax/feat/visual-studio-extension
Add Visual Studio extension
2 parents 542ed7c + 7c6953a commit c5ede86

44 files changed

Lines changed: 4204 additions & 4 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/ci-build.yml

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
name: CI Build (VSIX)
2+
3+
# Compile l'extension VSIX sur un runner Windows cloud à chaque push.
4+
# Sert de "compilateur distant" : permet de vérifier que le code compile
5+
# sans avoir Visual Studio / Windows en local.
6+
on:
7+
push:
8+
branches: [main]
9+
pull_request:
10+
branches: [main]
11+
workflow_dispatch:
12+
13+
jobs:
14+
build:
15+
name: Build sur Windows
16+
runs-on: windows-latest
17+
defaults:
18+
run:
19+
working-directory: visualstudio-extension
20+
steps:
21+
- name: Checkout
22+
uses: actions/checkout@v4
23+
24+
- name: Setup MSBuild
25+
uses: microsoft/setup-msbuild@v2
26+
27+
- name: Setup NuGet
28+
uses: NuGet/setup-nuget@v2
29+
30+
- name: Restore NuGet packages
31+
run: nuget restore DevGlobe.sln
32+
33+
- name: Build (Release, sans déploiement local)
34+
run: msbuild DevGlobe.sln /p:Configuration=Release /p:DeployExtension=false /m /v:minimal
35+
36+
- name: Upload du VSIX produit
37+
if: success()
38+
uses: actions/upload-artifact@v4
39+
with:
40+
name: DevGlobe-vsix
41+
path: '**/bin/Release/*.vsix'
42+
if-no-files-found: warn
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
name: Publish Visual Studio Extension (GitHub only)
2+
3+
on:
4+
push:
5+
tags:
6+
- "vs-v*"
7+
workflow_dispatch:
8+
9+
jobs:
10+
publish:
11+
runs-on: windows-latest
12+
permissions:
13+
contents: write
14+
defaults:
15+
run:
16+
working-directory: visualstudio-extension
17+
18+
steps:
19+
- uses: actions/checkout@v4
20+
21+
- name: Setup MSBuild
22+
uses: microsoft/setup-msbuild@v2
23+
24+
- name: Setup NuGet
25+
uses: nuget/setup-nuget@v2
26+
27+
- name: Restore NuGet packages
28+
run: nuget restore DevGlobe.sln
29+
30+
- name: Build VSIX (Release)
31+
run: msbuild DevGlobe.sln /t:Rebuild /p:Configuration=Release /p:DeployExtension=false
32+
33+
- name: Locate VSIX
34+
id: vsix
35+
shell: pwsh
36+
run: |
37+
$vsix = Get-ChildItem -Path . -Recurse -Filter *.vsix |
38+
Where-Object { $_.FullName -match 'bin\\Release' } |
39+
Select-Object -First 1
40+
if (-not $vsix) {
41+
Write-Error "No .vsix found under bin\Release"
42+
exit 1
43+
}
44+
Write-Host "Found VSIX: $($vsix.FullName)"
45+
"path=$($vsix.FullName)" >> $env:GITHUB_OUTPUT
46+
47+
- name: Create GitHub Release
48+
uses: softprops/action-gh-release@v2
49+
with:
50+
files: ${{ steps.vsix.outputs.path }}
51+
body: |
52+
## DevGlobe for Visual Studio
53+
54+
Built from commit ${{ github.sha }}
55+
56+
### Install manually
57+
1. Download the `.vsix` file below
58+
2. Double-click it (or use **Extensions → Manage Extensions → Install from VSIX…**)
59+
3. Restart Visual Studio
60+
generate_release_notes: true

PRIVACY.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ If your profile is set to `anonymous`, the server stores no precise coordinates
7979
|-----|---------|
8080
| VS Code | OS keychain via `SecretStorage` (macOS Keychain, Windows Credential Manager, Linux libsecret). Old plaintext entries in `settings.json` are migrated automatically. |
8181
| JetBrains | OS keychain via `PasswordSafe`. |
82+
| Visual Studio | Windows Credential Manager. The `devglobe-core` daemon reads the key from `~/.devglobe/config.toml` (written with restrictive permissions). |
8283
| Zed, NeoVim, Claude Code, Codex, OpenCode | `~/.devglobe/config.toml`, written with `0600` permissions. |
8384

8485
---

README.md

Lines changed: 39 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

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

9495
---
9596

97+
### Visual Studio
98+
99+
The full **Visual Studio** IDE on Windows (not to be confused with VS Code).
100+
101+
#### Installation
102+
103+
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…**
104+
2. Open the **DevGlobe** panel — click the **globe button** in the toolbar, or **View → Other Windows → DevGlobe**
105+
3. Paste your API key → **Connect**
106+
107+
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`.
108+
109+
#### Tool window
110+
111+
- **Login** — masked API key field + link to get your key on devglobe.app
112+
- **Dashboard** — live coding time, active language, status message, start/stop tracking, disconnect
113+
114+
#### Commands
115+
116+
Available under **Tools → DevGlobe**:
117+
118+
| Command | Description |
119+
|---|---|
120+
| `Set Status Message` | Set your status message on the globe |
121+
| `Show Coding Time` | Show your coding time today |
122+
| `Open Globe` | Open [devglobe.app/space](https://devglobe.app/space) in your browser |
123+
| `Debug` | Toggle debug logging in `~/.devglobe/devglobe.log` |
124+
| `Open Log File…` | Open `~/.devglobe/devglobe.log` |
125+
| `Open Config File…` | Open `~/.devglobe/config.toml` |
126+
127+
#### Compatibility
128+
129+
- **Visual Studio 2022 (17.x)** and **Visual Studio 2026 (18.x)** — Windows only
130+
- .NET Framework 4.7.2
131+
132+
---
133+
96134
### JetBrains
97135

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

362400
**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.
363401

364-
**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.
402+
**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.
365403

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

SECURITY.md

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,9 @@ Only the latest release of each extension receives security updates.
66

77
| Extension | Current version | Status |
88
|-----------|----------------|--------|
9-
| VS Code | 0.1.8 | Supported |
10-
| JetBrains | 0.1.7 | Supported |
9+
| VS Code | 2.1.0 | Supported |
10+
| JetBrains | 2.0.1 | Supported |
11+
| Visual Studio | 0.1.0 | Supported |
1112
| Claude Code | 1.0.0 | Supported |
1213

1314
## Reporting a vulnerability
@@ -78,7 +79,7 @@ Key design decisions:
7879

7980
- **HTTPS only** — all network requests enforce TLS, no HTTP fallback
8081
- **Minimal data** — only what is listed in [PRIVACY.md](PRIVACY.md) is sent; source code, file contents, and keystrokes are never accessed
81-
- **Secure key storage** — OS keychain on VS Code (SecretStorage) and JetBrains (PasswordSafe); `~/.devglobe/config.toml` (mode `0600`) on the other extensions
82+
- **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
8283
- **Content Security Policy** — VS Code webview uses a cryptographic nonce-based CSP
8384
- **No telemetry** — no third-party analytics or tracking services
8485

visualstudio-extension/.gitignore

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
# .NET / MSBuild build output
2+
bin/
3+
obj/
4+
5+
# Visual Studio user / cache files
6+
.vs/
7+
*.user
8+
*.suo
9+
*.userosscache
10+
*.sln.docstates
11+
12+
# VSIX package output
13+
*.vsix
14+
15+
# ReSharper / Rider
16+
_ReSharper*/
17+
*.DotSettings.user
18+
19+
# Test results
20+
[Tt]est[Rr]esult*/
21+
*.trx
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
# Changelog
2+
3+
All notable changes to the DevGlobe Visual Studio extension are documented here.
4+
5+
## [0.1.0] - 2026-06-23
6+
7+
### Added
8+
9+
- Initial release of DevGlobe for Visual Studio (VS 2022 / VS 2026).
10+
- DevGlobe tool window with **Login** and **Dashboard** views.
11+
- Live heartbeat tracking driven by the `devglobe-core` binary (heartbeat every 30s, auto-pause after 1 min of inactivity).
12+
- Activity detection: typing, active document, document open/save.
13+
- Language detection from the active document.
14+
- Status bar showing today's coding time.
15+
- Six commands under **Tools → DevGlobe**: Set Status Message, Show Coding Time, Open Globe, Debug, Open Log File, Open Config File.
16+
- API key stored in the Windows Credential Manager and written to `%USERPROFILE%\.devglobe\config.toml`.
17+
- One-time download of the `devglobe-core-win-x64.exe` binary from GitHub Releases on first launch, cached under `%LOCALAPPDATA%\DevGlobe\core`.
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
2+
Microsoft Visual Studio Solution File, Format Version 12.00
3+
# Visual Studio Version 17
4+
VisualStudioVersion = 17.0.31903.59
5+
MinimumVisualStudioVersion = 10.0.40219.1
6+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DevGlobe", "DevGlobe\DevGlobe.csproj", "{5F3A9C2E-7B14-4E8A-9D6F-1A2B3C4D5E6F}"
7+
EndProject
8+
Global
9+
GlobalSection(SolutionConfigurationPlatforms) = preSolution
10+
Debug|Any CPU = Debug|Any CPU
11+
Release|Any CPU = Release|Any CPU
12+
EndGlobalSection
13+
GlobalSection(ProjectConfigurationPlatforms) = postSolution
14+
{5F3A9C2E-7B14-4E8A-9D6F-1A2B3C4D5E6F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
15+
{5F3A9C2E-7B14-4E8A-9D6F-1A2B3C4D5E6F}.Debug|Any CPU.Build.0 = Debug|Any CPU
16+
{5F3A9C2E-7B14-4E8A-9D6F-1A2B3C4D5E6F}.Release|Any CPU.ActiveCfg = Release|Any CPU
17+
{5F3A9C2E-7B14-4E8A-9D6F-1A2B3C4D5E6F}.Release|Any CPU.Build.0 = Release|Any CPU
18+
EndGlobalSection
19+
GlobalSection(SolutionProperties) = preSolution
20+
HideSolutionNode = FALSE
21+
EndGlobalSection
22+
EndGlobal

0 commit comments

Comments
 (0)