feat: add Windows support - #16
Open
dcoffi wants to merge 1 commit into
Open
Conversation
- Add case windows to all runtime.GOOS switches in cmd/bumblebee/roots.go - Windows MCP configs: %APPDATA%\Claude, Cursor, VS Code/Cline - Windows browsers: Chrome, Edge, Brave, Vivaldi, Opera, Firefox, LibreWolf - Windows Python site-packages via LOCALAPPDATA\Programs\Python\Python* - Windows npm global modules via %APPDATA%\npm\node_modules - Windows Ruby gems via C:\Ruby*\lib\ruby\gems - Windows Go module cache via %GOPATH%\pkg\mod (default %USERPROFILE%\go) - --all-users expansion via C:\Users (filters Default, Public, service accounts) - Fix filepath.Join drive-letter bug: use drive+sep+Users not filepath.Join(drive,Users) - Fix cross-platform tests: setTestHome() sets both HOME and USERPROFILE on Windows - Fix scanner_test.go path separator: use filepath.ToSlash() for Contains checks - goreleaser: add windows/amd64 and windows/arm64 targets with zip format - Add GUIA_BUMBLEBEE.md + GUIA_BUMBLEBEE.pdf: Spanish beginner guide (Windows/Linux/macOS) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Author
Binarios pre-compilados disponibles para la comunidadMientras el PR es revisado, dejamos los binarios listos para descargar sin necesidad de instalar Go: Release: https://github.com/dcoffi/bumblebee/releases/tag/v0.1.1-community El ZIP incluye binarios para las 3 plataformas:
También incluye el catálogo
|
Niicolaa
pushed a commit
to Niicolaa/bumblebee
that referenced
this pull request
Aug 4, 2026
Adds Windows to the supported endpoint set so baseline/project scans discover MCP configs (%APPDATA%\Claude, Continue), Chromium-family extensions (Chrome/Edge/Brave/Chromium/Vivaldi/Arc under %LOCALAPPDATA%), and Firefox-family profiles (%APPDATA%\Mozilla\...). isBroadHomeRoot now recognises Windows drive roots and bare <drive>:\Users[\<name>] homes. Endpoint UID stays empty on Windows rather than emitting "-1" when user.Current fails. setHomeDir test helper sets HOME/USERPROFILE/APPDATA/LOCALAPPDATA together so existing home-based tests run on all three platforms. CI matrix gains windows-latest and goreleaser builds windows amd64/arm64 zip archives. Tracks perplexityai#2; implemented from scratch rather than adopting any of the open upstream PRs (#4, perplexityai#16, perplexityai#30).
Niicolaa
pushed a commit
to Niicolaa/bumblebee
that referenced
this pull request
Aug 4, 2026
Audited the earlier Windows work against the four upstream attempts (#3, #4, perplexityai#16, perplexityai#30) and found five things it got wrong or missed. Two of them would have made CI red on the windows-latest runner that the same change added to the matrix. CI-breaking: - The selftest step had no `shell: bash`. windows-latest defaults to PowerShell, where invoking the extensionless build output does not work as it does in a POSIX shell. The gofmt step already pinned bash; this one did not. - scanner_test.go asserted on literal "/proj/" and "/dup/" substrings of source_file, which is a native path. TestEndToEndScan could only have passed on Unix. Correctness: - npm and pnpm derived project_path by slash-joining segments after an internal filepath.ToSlash, so a Windows record carried C:/src/app instead of C:\src\app. This is upstream issue #1 ("Windows package records should preserve native project paths"); PR #3 was closed with the note that it would be folded into the broader Windows work, and it then was not. Both now convert back with filepath.FromSlash, with regression tests. - DefaultExcludes had no Windows entries, so a deep sweep of %USERPROFILE% descended into AppData/Local/{Temp,Microsoft,Packages} and AppData/LocalLow — the Windows analogue of the macOS Library subtrees already excluded there. - systemRoots returned nil on Windows, missing machine-wide Python under %ProgramFiles%\PythonNN\Lib\site-packages; per-user Python under %LOCALAPPDATA%\Programs\Python\* was missing too. Also corrects an over-reach in the preceding ecosystem commit: it added ~/.m2/repository and ~/.gradle/caches as baseline roots, but both are in walk.DefaultExcludes precisely because they are high-cost dependency caches, and opening every cached JAR on a 6-hourly profile is exactly what that exclusion exists to prevent. Those, plus the Pub/Hex/Conan/ Swift caches (which hold no file this scanner parses), are dropped from baseline; all remain reachable via --root or a deep sweep. To make the retained ~/.nuget/packages root earn its walk, adds a .nuspec parser for the global packages folder — installed-state evidence for NuGet, the analogue of RubyGems' installed *.gemspec. The per-version directory shape is required so an authoring .nuspec in a source tree, whose <version> is often a $token$, is not read as an install.
Niicolaa
pushed a commit
to Niicolaa/bumblebee
that referenced
this pull request
Aug 4, 2026
Follow-up to the initial Windows support, from reviewing the earlier upstream Windows attempts (#3, #4, perplexityai#16, perplexityai#30). Two of these would have made CI red on the windows-latest runner the previous commit added. CI-breaking: - The selftest step had no `shell: bash`. windows-latest defaults to PowerShell, where invoking the extensionless build output does not work as it does in a POSIX shell. The gofmt step already pinned bash; this one did not. - scanner_test.go asserted on literal "/proj/" and "/dup/" substrings of source_file, which is a native path, so TestEndToEndScan could only have passed on Unix. Now normalized before matching. Correctness: - npm and pnpm derived project_path by slash-joining segments after an internal filepath.ToSlash, so a Windows record carried C:/src/app instead of C:\src\app. This is issue #1 ("Windows package records should preserve native project paths"); PR #3 was closed with the note that it would be folded into the broader Windows work, and it then was not. Both now convert back with filepath.FromSlash, with regression tests. - DefaultExcludes had no Windows entries, so a deep sweep of %USERPROFILE% descended into AppData/Local/{Temp,Microsoft,Packages} and AppData/LocalLow — the Windows analogue of the macOS Library subtrees already excluded there. - systemRoots returned nil on Windows, missing machine-wide Python under %ProgramFiles%\PythonNN\Lib\site-packages, and per-user Python under %LOCALAPPDATA%\Programs\Python\* was missing as well.
Niicolaa
pushed a commit
to Niicolaa/bumblebee
that referenced
this pull request
Aug 4, 2026
Adds Windows to the supported endpoint set so baseline/project scans discover MCP configs (%APPDATA%\Claude, Continue), Chromium-family extensions (Chrome/Edge/Brave/Chromium/Vivaldi/Arc under %LOCALAPPDATA%), and Firefox-family profiles (%APPDATA%\Mozilla\...). isBroadHomeRoot now recognises Windows drive roots and bare <drive>:\Users[\<name>] homes. Endpoint UID stays empty on Windows rather than emitting "-1" when user.Current fails. setHomeDir test helper sets HOME/USERPROFILE/APPDATA/LOCALAPPDATA together so existing home-based tests run on all three platforms. CI matrix gains windows-latest and goreleaser builds windows amd64/arm64 zip archives. Tracks perplexityai#2; implemented from scratch rather than adopting any of the open upstream PRs (#4, perplexityai#16, perplexityai#30).
Niicolaa
pushed a commit
to Niicolaa/bumblebee
that referenced
this pull request
Aug 4, 2026
Follow-up to the initial Windows support, from reviewing the earlier upstream Windows attempts (#3, #4, perplexityai#16, perplexityai#30). Two of these would have made CI red on the windows-latest runner the previous commit added. CI-breaking: - The selftest step had no `shell: bash`. windows-latest defaults to PowerShell, where invoking the extensionless build output does not work as it does in a POSIX shell. The gofmt step already pinned bash; this one did not. - scanner_test.go asserted on literal "/proj/" and "/dup/" substrings of source_file, which is a native path, so TestEndToEndScan could only have passed on Unix. Now normalized before matching. Correctness: - npm and pnpm derived project_path by slash-joining segments after an internal filepath.ToSlash, so a Windows record carried C:/src/app instead of C:\src\app. This is issue #1 ("Windows package records should preserve native project paths"); PR #3 was closed with the note that it would be folded into the broader Windows work, and it then was not. Both now convert back with filepath.FromSlash, with regression tests. - DefaultExcludes had no Windows entries, so a deep sweep of %USERPROFILE% descended into AppData/Local/{Temp,Microsoft,Packages} and AppData/LocalLow — the Windows analogue of the macOS Library subtrees already excluded there. - systemRoots returned nil on Windows, missing machine-wide Python under %ProgramFiles%\PythonNN\Lib\site-packages, and per-user Python under %LOCALAPPDATA%\Programs\Python\* was missing as well.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary / Resumen
This PR adds full Windows support to Bumblebee. All changes are backward-compatible — existing macOS and Linux behavior is unchanged.
What was added for Windows / Qué se agregó para Windows
Rutas de configuración MCP (Claude, Cursor, VS Code):
%APPDATA%\Claude\claude_desktop_config.json— Claude Desktop%APPDATA%\Cursor\User\globalStorage— Cursor MCP settings%APPDATA%\Code\User\globalStorage\saoudrizwan.claude-dev— Cline (VS Code extension)Extensiones de navegador:
%LOCALAPPDATA%\<browser>\User Data%APPDATA%\Opera Software\Opera Stable%APPDATA%\Mozilla\Firefox\ProfilesPaquetes globales del sistema:
%LOCALAPPDATA%\Programs\Python\Python*\Lib\site-packages%APPDATA%\npm\node_modulesC:\Ruby*\lib\ruby\gems%GOPATH%\pkg\mod(default:%USERPROFILE%\go\pkg\mod)--all-usersen Windows:C:\Users\*filtrando cuentas de servicio:Default,Public,All Users,$WinREAgent, etc.Bug fixes para cross-platform:
filepath.Join(C:, Users)retornaC:Users(ruta relativa) en Windows — corregido usandodrive + sep + UserssetTestHome()ahora setea tantoHOMEcomoUSERPROFILEen Windowsscanner_test.go: usafilepath.ToSlash()para comparar paths constrings.Containsgoreleaser:
windows/amd64ywindows/arm64.zip(en lugar de.tar.gz)Documentación:
GUIA_BUMBLEBEE.mdyGUIA_BUMBLEBEE.pdf: guía paso a paso en español para Windows, Linux y macOSTest plan
go test ./...passes on Windows (all 19 packages)bumblebee selftestreturnsselftest OKon Windowsbumblebee roots --profile baselinelists Windows paths (AppData, Chrome, Edge, VS Code extensions)bumblebee scan --profile baselineproduces valid NDJSON on Windowsgo test ./...still passes on Linux/macOS (no regression)bumblebee_windows_amd64.zipandbumblebee_windows_arm64.zipNotes
os.UserHomeDir()already returnsC:\Users\<user>on Windows viaUSERPROFILE— no change needed~\.vscode,~\.cursor,~\.windsurfon Windows too — already covered by existing home-relative pathsfilepath.Join(C:, Users)bug returnsC:Users(relative path on drive C) on Windows — fixed with explicit separatorGenerated with Claude Code