Uses VS Code GitHub auth (no gh CLI) to fetch the private release asset from BernardinD/flutter-bootstrap-tools tag v<version>.
Unzips to %USERPROFILE%\.flutter-bootstrap\<version>\.
When the extension runs in Development mode (F5 from VS Code), it automatically loads src/BootstrapTools.psm1 from the current workspace instead of downloading a release, so local edits are exercised immediately.
Set flutterBootstrap.moduleOverridePath (absolute or workspace-relative) only if you need to force a different .psm1 source.
If .bootstrap.psd1 is missing, prompts and creates it.
If .bootstrap.psd1 already exists, the extension leaves it untouched; it only auto-creates when missing. .bootstrap.local.psd1 is created only when absent (and is always gitignored).
Runs the orchestration through a dedicated VS Code task so the extension can observe completion/exit codes.
After a successful bootstrap the extension can quit and relaunch VS Code (controlled by flutterBootstrap.restartWindowBehavior) to ensure PATH/tooling updates are visible immediately. This relaunch relies on the real VS Code runtime; it cannot be verified when running inside the Extension Development Host (F5). In that scenario you'll see the test window close without reopening, which is expected. On production builds the helper relaunches automatically, and if anything ever fails the user can simply reopen VS Code manually—the bootstrap work is already done.
Config persistence
Project-shared values are written to .bootstrap.psd1 (commit this file).
Machine-specific values (e.g., detected FlutterSdkRoot) go to .bootstrap.local.psd1 (gitignored).
The extension merges both at runtime before invoking the bootstrap.
Config keys (.bootstrap.psd1)
FlutterSdkRoot — preferred; points to an existing SDK (folder containing bin\flutter).
FlutterInstallBase — parent folder for fresh installs; SDK will be installed to <base>\flutter if no SDK detected.
FlutterInstallRoot — legacy; used if it contains a valid SDK, otherwise treated as install base.