0.2 - #335997
0.2 #335997Frankenstein-Labs wants to merge 18 commits into
Conversation
Phase 1: stabilize and verify the real VS Code / Code-OSS base. - CODE-OSS-UPSTREAM.md: record provenance of Frankenstein-dev197/vscode against upstream microsoft/vscode. Fork main HEAD c780ea9 is a verbatim microsoft/vscode commit (verified via GitHub API), version 1.133.0, import 2026-08-08. No fork-specific modifications on main. - docs/CODE-OSS-ARCHITECTURE.md: document the real architecture (base/editor/platform/workbench/server/code/extensions/build) and the contribution model GitCortex features must use. Validated real base: - Node 24.18.0 (.nvmrc) installed from nodejs.org (sha256 verified) - System native deps installed (libkrb5-dev, pkg-config, libx11-dev, libxkbfile-dev, libsecret-1-dev, libssl-dev, libdbus-1-dev, libglib2.0-dev) - npm ci succeeded (936 packages, native addons built) - gulp compile succeeded: compilation with 0 errors - npm run test-node: 13680 passing, 0 failing, 192 pending No source modifications yet; docs only. Co-authored-by: openhands <openhands@all-hands.dev>
Phase 2: surgical product-identity rebrand from Code - OSS to GitCortex Studio. product.json (user-visible identity only): - nameShort/nameLong -> GitCortex / GitCortex Studio - applicationName -> gitcortex (CLI command) - dataFolderName -> GitCortexStudio (per spec) - urlProtocol -> gitcortex (gitcortex://) - darwinBundleIdentifier -> studio.gitcortex (app id) - linuxIconName -> gitcortex - server/tunnel application names + win32 mutex/dir/reg/shell names -> gitcortex src/vs/platform/product/common/product.ts: web/dev fallback defaults updated consistently. Preserved (no global sed): installer GUIDs, darwin profile UUIDs, license attribution (MIT -> upstream), reportIssueUrl, builtInExtensions, defaultChatAgent, onboarding keymaps/themes, and all technical VS Code identifiers needed for the extension API and internal services. See docs/BRANDING.md for the full mapping and rationale. Validated: product.json valid JSON; gulp compile 0 errors; full node unit suite 13680 passing, 0 failing. Co-authored-by: openhands <openhands@all-hands.dev>
GitCortex Studio — Phase 1 (stabilize base) & Phase 2 (branding)
Document the real Phase 3 desktop build & runtime validation:
- Runtime: launched real GitCortex Studio (Electron 42.8.1, branding applied)
under Xvfb; window reported ready (id: 1); initialized terminal, debug,
search, files, explorer, scm, testing, activityBar, sidebar, ExtensionHost.
No startup crash.
- Packaging: gulp vscode-linux-x64 completed (5.15 min, EXIT 0); real
artifact at /workspace/VSCode-linux-x64 (gitcortex binary 215MB, bundled
out/, extensions/, node_modules.asar, branded product.json v1.135.0).
- Problems found & fixed:
* P1: npm ci didn't install @vscode/observables (upstream root-lockfile
desync) -> ran npm ci in markdown ext + build-markdown-editor; tsgo then
passed and full packaging completed.
* P3: @github/copilot-sdk 1.0.9 installed vs 1.0.11 in lockfile (upstream
dep desync) surfaced 4 tsgo errors in untouched upstream files
(copilotSessionLauncher/assignmentService). Re-ran postinstall with
VSCODE_FORCE_INSTALL=1 to sync to 1.0.11 -> 0 errors. No source modified.
- Final state: gulp compile 0 errors (incl. tsgo compile-src); test-node
14815 passing, 0 failing, 192 pending.
- P4 (deferred to Phase 4): non-min packaged-bundle NLS bootstrap quirk;
the real distributable is the min build (vscode-linux-x64-min).
No source files modified in this commit; only documentation.
Co-authored-by: openhands <openhands@all-hands.dev>
…op-build Phase 3: Desktop Build & Runtime Validation
Production build verified: `gulp vscode-linux-x64-min` produces a functional 215MB gitcortex artifact. Boots cleanly under Xvfb with a clean env (the NLS MISSING error is an environment artifact from VSCODE_DEV leaking from the OpenVSCode-server host, not a code bug). Welcome window renders as "Welcome - GitCortex Studio". Visual identity & Linux packaging: - Branded .desktop files (tagline "Code editing, reimagined.", keywords) - Branded code.appdata.xml (homepage -> fork, GitCortex description, screenshot -> captured bootscreen), preserving MIT attribution to Code-OSS - Generated a real 1024x1024 GitCortex desktop icon (resources/linux/code.png): neural-cortex + code-bracket motif on an indigo->teal gradient tile - Branded deb/rpm/snap templates (maintainers, homepage, summary, description) - Neutralized the debian postinst Microsoft apt-source/key registration for gitcortex so the .deb never adds packages.microsoft.com to users' systems - product.json: reportIssueUrl/licenseUrl/serverLicenseUrl -> the fork repo (licenseName stays MIT; upstream attribution preserved in LICENSE.txt) - version/commit/date remain build-injected; quality intentionally absent (fork ships no Microsoft auto-update channel) - AGENTS.md: documented project identity, build, NLS gotcha, branding rules Co-authored-by: openhands <openhands@all-hands.dev>
…ction Phase 4: Production Desktop — Visual Identity & Linux Packaging Finalization
…workbench - New 'Ordinateurs virtuels' activity bar view container directly below Extensions - Two well-known machines: Ubuntu Developer and Ubuntu Sandbox with configurable CPU/RAM/disk - Dedicated VM daemon utility process (decoupled from Electron main) managing QEMU lifecycle via QMP - Dependency-free RFC 6455 WebSocket-to-VNC proxy with per-connection tokens, loopback only - noVNC (MIT) vendored and displayed in workbench webview panels with real keyboard/mouse input - Environment checks (qemu binary, KVM, permissions, memory) with clean refusal when unsupported - Security: loopback-only VNC, restricted/isolated networking modes, no privileged sockets, validated config - 27 unit tests for the manager, argument builder, acceleration resolution and lifecycle Co-authored-by: openhands <openhands@all-hands.dev>
…virtuels Ordinateurs virtuels : machines virtuelles QEMU/KVM intégrées nativement à GitCortex Studio
- Replace deprecated callback-based protocol.registerFileProtocol with the modern protocol.handle API: the legacy handler failed with net::ERR_FAILED under Electron 42 when many module script requests raced, which prevented the entire workbench ESM graph from loading in the desktop app - Serve vscode-file:// resources via readFile + Response with an explicit content-type table while keeping the validRoots/validExtensions checks - Persist user-configured virtualMachines.*.installIso settings into the daemon's InstallIsoPaths map so VM cards show their real install media - Register the missing developer/sandbox memory, CPU, disk and install ISO configuration properties in the settings schema Co-authored-by: openhands <openhands@all-hands.dev>
…ry-vm-settings Fix workbench module loading and populate VM install ISO settings
Merge the audited GitCortex VM, VNC, protocol streaming, lifecycle, accessibility, packaging, and branding fixes into main.
…current-state docs: update GitCortex README
📬 CODENOTIFYThe following users are being notified based on files changed in this PR: Raymond Zhao (@rzhao271)Matched files:
Robo (@deepak1556)Matched files:
|
There was a problem hiding this comment.
🔵 Needs a closer look
Critical build and VM lifecycle findings remain unresolved across this broad QEMU/noVNC integration.
Pull request overview
Adds GitCortex desktop virtual-machine support backed by QEMU, daemon IPC, VNC/noVNC, updated branding, and Linux packaging.
Changes:
- Adds VM lifecycle services, QEMU/QMP handling, and VNC proxying.
- Adds VM sidebar controls and noVNC desktop integration.
- Updates branding, build resources, documentation, licensing, and packaging.
File summaries
| File | Change |
|---|---|
src/vs/workbench/workbench.desktop.main.ts |
Desktop contribution entry |
src/vs/workbench/contrib/virtualMachines/electron-browser/virtualMachines.electron.contribution.ts |
Electron VM wiring |
src/vs/workbench/contrib/virtualMachines/browser/virtualMachinesView.ts |
VM sidebar view and actions |
src/vs/workbench/contrib/virtualMachines/browser/virtualMachinesIcons.ts |
VM icons |
src/vs/workbench/contrib/virtualMachines/browser/virtualMachines.contribution.ts |
VM commands and settings |
src/vs/workbench/contrib/virtualMachines/browser/virtualDesktopPanel.ts |
Virtual desktop panel |
src/vs/workbench/contrib/virtualMachines/browser/media/virtualMachines.css |
VM interface styles |
src/vs/workbench/contrib/virtualMachines/browser/media/novnc/vendor/pako/README.md |
Vendored pako documentation |
src/vs/workbench/contrib/virtualMachines/browser/media/novnc/vendor/pako/LICENSE |
Vendored pako license |
src/vs/workbench/contrib/virtualMachines/browser/media/novnc/vendor/pako/lib/zlib/zstream.js |
pako stream support |
src/vs/workbench/contrib/virtualMachines/browser/media/novnc/vendor/pako/lib/zlib/messages.js |
pako messages |
src/vs/workbench/contrib/virtualMachines/browser/media/novnc/vendor/pako/lib/zlib/gzheader.js |
gzip header support |
src/vs/workbench/contrib/virtualMachines/browser/media/novnc/vendor/pako/lib/zlib/crc32.js |
CRC32 support |
src/vs/workbench/contrib/virtualMachines/browser/media/novnc/vendor/pako/lib/zlib/constants.js |
zlib constants |
src/vs/workbench/contrib/virtualMachines/browser/media/novnc/vendor/pako/lib/zlib/adler32.js |
Adler-32 support |
src/vs/workbench/contrib/virtualMachines/browser/media/novnc/vendor/pako/lib/utils/common.js |
pako shared utilities |
src/vs/workbench/contrib/virtualMachines/browser/media/novnc/README.gitcortex.md |
noVNC integration documentation |
src/vs/workbench/contrib/virtualMachines/browser/media/novnc/LICENSE.txt |
noVNC licensing |
src/vs/workbench/contrib/virtualMachines/browser/media/novnc/core/util/strings.js |
noVNC string utilities |
src/vs/workbench/contrib/virtualMachines/browser/media/novnc/core/util/logging.js |
noVNC logging |
src/vs/workbench/contrib/virtualMachines/browser/media/novnc/core/util/int.js |
Integer utilities |
src/vs/workbench/contrib/virtualMachines/browser/media/novnc/core/util/eventtarget.js |
Event target utilities |
src/vs/workbench/contrib/virtualMachines/browser/media/novnc/core/util/events.js |
Event helpers |
src/vs/workbench/contrib/virtualMachines/browser/media/novnc/core/util/element.js |
DOM utilities |
src/vs/workbench/contrib/virtualMachines/browser/media/novnc/core/util/cursor.js |
Cursor handling |
src/vs/workbench/contrib/virtualMachines/browser/media/novnc/core/util/browser.js |
Browser utilities |
src/vs/workbench/contrib/virtualMachines/browser/media/novnc/core/input/vkeys.js |
Virtual key mappings |
src/vs/workbench/contrib/virtualMachines/browser/media/novnc/core/input/util.js |
Input helpers |
src/vs/workbench/contrib/virtualMachines/browser/media/novnc/core/input/fixedkeys.js |
Fixed key mappings |
src/vs/workbench/contrib/virtualMachines/browser/media/novnc/core/inflator.js |
Decompression support |
src/vs/workbench/contrib/virtualMachines/browser/media/novnc/core/encodings.js |
RFB encodings |
src/vs/workbench/contrib/virtualMachines/browser/media/novnc/core/deflator.js |
Compression support |
src/vs/workbench/contrib/virtualMachines/browser/media/novnc/core/decoders/zrle.js |
ZRLE decoder |
src/vs/workbench/contrib/virtualMachines/browser/media/novnc/core/decoders/zlib.js |
zlib decoder |
src/vs/workbench/contrib/virtualMachines/browser/media/novnc/core/decoders/tightpng.js |
TightPNG decoder |
src/vs/workbench/contrib/virtualMachines/browser/media/novnc/core/decoders/rre.js |
RRE decoder |
src/vs/workbench/contrib/virtualMachines/browser/media/novnc/core/decoders/raw.js |
Raw decoder |
src/vs/workbench/contrib/virtualMachines/browser/media/novnc/core/decoders/jpeg.js |
JPEG decoder |
src/vs/workbench/contrib/virtualMachines/browser/media/novnc/core/decoders/hextile.js |
Hextile decoder |
src/vs/workbench/contrib/virtualMachines/browser/media/novnc/core/decoders/copyrect.js |
CopyRect decoder |
src/vs/workbench/contrib/virtualMachines/browser/media/novnc/core/crypto/rsa.js |
RSA support |
src/vs/workbench/contrib/virtualMachines/browser/media/novnc/core/crypto/md5.js |
MD5 support |
src/vs/workbench/contrib/virtualMachines/browser/media/novnc/core/crypto/dh.js |
Diffie-Hellman support |
src/vs/workbench/contrib/virtualMachines/browser/media/novnc/core/crypto/crypto.js |
Crypto helpers |
src/vs/workbench/contrib/virtualMachines/browser/media/novnc/core/crypto/bigint.js |
Big integer support |
src/vs/workbench/contrib/virtualMachines/browser/media/novnc/core/crypto/aes.js |
AES support |
src/vs/workbench/contrib/virtualMachines/browser/media/novnc/core/base64.js |
Base64 support |
src/vs/workbench/contrib/virtualMachines/browser/media/novnc/AUTHORS |
noVNC attribution |
src/vs/sessions/contrib/changes/browser/sessionChangesEditor.ts |
Session changes integration |
src/vs/platform/virtualMachines/node/vncWebSocketProxy.ts |
VNC WebSocket proxy |
src/vs/platform/virtualMachines/node/virtualMachinesDaemonMain.ts |
VM daemon entry point |
src/vs/platform/virtualMachines/node/qemuQmpClient.ts |
QEMU QMP client |
src/vs/platform/virtualMachines/node/qemuLauncher.ts |
QEMU launch configuration |
src/vs/platform/virtualMachines/common/virtualMachines.ts |
VM contracts and resources |
src/vs/platform/product/common/product.ts |
Source fallback branding |
src/vs/code/electron-main/app.ts |
Main-process service registration |
resources/linux/snap/snapcraft.yaml |
Snap packaging |
resources/linux/rpm/code.spec.template |
RPM packaging |
resources/linux/debian/templates.template |
Debian templates |
resources/linux/debian/postrm.template |
Debian removal script |
resources/linux/debian/postinst.template |
Debian installation script |
resources/linux/debian/control.template |
Debian package metadata |
resources/linux/code.desktop |
Linux desktop entry |
resources/linux/code.appdata.xml |
AppStream metadata |
resources/linux/code-url-handler.desktop |
URL handler entry |
product.json |
Product branding and identifiers |
docs/BRANDING.md |
Branding documentation |
CODE-OSS-UPSTREAM.md |
Upstream provenance documentation |
build/next/index.ts |
Next-generation build resources |
build/lib/i18n.resources.json |
Localization resources |
build/gulpfile.vscode.ts |
Legacy build resources |
build/buildfile.ts |
Build entry points |
AGENTS.md |
Repository guidance |
.eslint-ignore |
Vendored source lint configuration |
Review details
Suppressed comments (24)
.eslint-ignore:26
- This ignore pattern is rooted at
/workbench, but the vendored files live undersrc/vs/workbench/...; therefore ESLint will not ignore noVNC and will lint the third-party sources. Use the repository-relativesrc/vs/workbench/contrib/virtualMachines/browser/media/novnc/**path so the vendored code does not fail the project lint rules.
**/workbench/contrib/virtualMachines/browser/media/novnc/**
CODE-OSS-UPSTREAM.md:16
- This says the repository's current
mainis a verbatim upstream commit with no fork-specific modifications, but this PR itself adds the GitCortex branding and VM changes. The provenance statement becomes false after merge; scope it explicitly to the state at import time or update the record when modifications are applied.
The `main` branch HEAD of this repository is a **verbatim** commit from
`microsoft/vscode`. There are **no fork-specific modifications** on `main`.
README.md:43
- The workbench contribution does not expose a remove command or remove action—
IVirtualMachinesService.removeis implemented but never registered or rendered—so this sentence overstates the current UI/API surface. Either add the missing command/action or removeremovefrom the documented capabilities.
The workbench provides commands and view actions to start, stop, restart, open, and remove a stopped machine. It also exposes an environment check and machine settings for QEMU binary selection, acceleration mode, data-root location, network mode, CPU count, memory, disk size, and optional installer ISO paths.
build/gulpfile.vscode.ts:135
- The runtime pattern copies pako's JavaScript but only copies the noVNC top-level license.
vendor/pako/LICENSEis not included in the packaged desktop resources, so the shipped pako code loses its required MIT notice. Add an explicit pako license resource (and mirror it in the next-generation build).
'out-build/vs/workbench/contrib/virtualMachines/browser/media/novnc/**/*.js',
'out-build/vs/workbench/contrib/virtualMachines/browser/media/novnc/LICENSE.txt',
build/next/index.ts:263
- The next-generation resource pattern has the same omission: it packages
vendor/pako/**/*.jsthrough the recursive JavaScript glob but does not copyvendor/pako/LICENSE. The resulting bundle lacks the MIT notice for this vendored dependency; include that license explicitly.
// GitCortex virtual desktop: dynamically imported noVNC runtime.
'vs/workbench/contrib/virtualMachines/browser/media/novnc/**/*.js',
'vs/workbench/contrib/virtualMachines/browser/media/novnc/LICENSE.txt',
product.json:3
- Changing the product name here does not update the hard-coded downstream manifests:
resources/win32/VisualElementsManifest.xmlstill setsShortDisplayName="Code - OSS", andresources/server/manifest.jsonstill names the PWA Code - OSS. Windows tiles and web installations will therefore retain the old identity; make those templates consume the product branding too.
"nameShort": "GitCortex",
"nameLong": "GitCortex Studio",
resources/linux/code.appdata.xml:14
- This AppStream screenshot points at
.build/artifacts/..., which is a generated local build path and has no corresponding tracked file in the repository. Packaged metadata will therefore advertise a broken image URL; use a committed stable asset or remove the screenshot entry.
<image>https://github.com/Frankenstein-dev197/vscode/raw/main/.build/artifacts/gitcortex-studio-min-bootscreen.png</image>
src/vs/platform/product/common/product.ts:83
- The fallback product now uses GitCortex names, but its adjacent
reportIssueUrl,licenseUrl, andserverLicenseUrlstill point tomicrosoft/vscode. When this source fallback is used, users are sent to the upstream issue tracker and license instead of the GitCortex repository; update the fallback URLs to match the product configuration.
nameShort: 'GitCortex Dev',
nameLong: 'GitCortex Studio Dev',
applicationName: 'gitcortex',
src/vs/platform/virtualMachines/common/virtualMachines.ts:159
- The implementation clamps out-of-range values and the tests assert that behavior, but this JSDoc says such values are rejected. That makes the resource-safety contract misleading for callers; describe the clamping/fallback behavior instead.
* Clamp user provided resources to safe bounds. Anything outside these bounds
* is rejected to protect the host.
*/
src/vs/platform/virtualMachines/common/virtualMachines.ts:147
- These names and descriptions cross the daemon IPC as plain strings and are rendered directly by the workbench. Since they are French literals rather than localized messages or display keys, users running an English or other locale will always see French VM metadata; keep stable IDs in the common layer and localize the display strings at the workbench boundary.
name: 'Ubuntu Developer',
description: 'Machine destinée au développement.'
src/vs/platform/virtualMachines/electron-main/virtualMachinesMainService.ts:64
- A configuration change during
startDaemon()is dropped whenthis.daemonhas not been assigned yet. The daemon serializes the earlier settings snapshot into its environment, so a change in this startup window leaves the running daemon with stale acceleration/resources/network settings until it is restarted; apply the latest settings after the daemon becomes available or retain a pending update.
this.daemon?.updateSettings(this.readSettings());
src/vs/platform/virtualMachines/node/virtualMachineManager.ts:424
cleanupRuntimeis asynchronous but is started without awaiting it before publishing theErrorstate. The UI can consequently enable Start while the old cleanup is still unlinking the VM's VNC/QMP sockets; a new start can recreate those paths and then have the old cleanup delete them. Await or serialize this cleanup before exposing the restartable state.
void this.cleanupRuntime(vm, false);
if (vm.info.state === VirtualMachineState.Stopping || vm.stopRequested) {
this.setState(id, VirtualMachineState.Stopped);
} else if (vm.info.state !== VirtualMachineState.Stopped) {
const tail = vm.stderrTail.trim();
src/vs/platform/virtualMachines/node/virtualMachineManager.ts:242
- When the settings map is missing or only partially populated (the daemon's fallback is
resources: {}), Ubuntu Developer falls back to 2048 MB/16 GB here instead of the declaredDEFAULT_VM_RESOURCESof 4096 MB/32 GB. That silently provisions the VM with the wrong size; fall back throughDEFAULT_VM_RESOURCES[id]before the generic sanitizer defaults.
return sanitizeResources(this.settings.resources[id] ?? { cpus: 2, memoryMB: 2048, diskGB: 16 });
src/vs/platform/virtualMachines/node/virtualMachineManager.ts:394
- The setting description says the installer ISO is used only when the disk is empty, but this path is selected on every start whenever it is configured.
buildQemuArgsthen adds-boot once=d, so an already-installed VM boots the ISO again on every launch instead of its existing disk. Track whether the disk was newly created and passinstallIsoPathonly for that first boot.
const installIsoPath = this.settings.installIsoPaths?.[id];
if (installIsoPath && !await this.host.pathExists(installIsoPath)) {
throw new Error(`The configured installer ISO does not exist: ${installIsoPath}`);
src/vs/platform/virtualMachines/node/virtualMachineManager.ts:145
ChildProcessdoes not guarantee anexitevent after a spawn failure (it can emiterrorandcloseonly). Since this handler deliberately ignoreserroranddoStartonly observesonExit, a missing or non-executable configured QEMU binary leavesvm.processset and waits the full VNC startup timeout before reporting a misleading timeout. Propagate the spawn error/close throughIVirtualMachineProcessHandleand fail startup immediately.
child.on('error', () => { /* surfaced through exit */ });
src/vs/workbench/contrib/virtualMachines/browser/media/novnc/LICENSE.txt:53
- This notice references
docs/LICENSE.MPL-2.0and the BSD license files, but nodocs/license files exist in the vendored tree and only this top-level notice is copied by the build. The distributed noVNC component therefore omits the license texts it claims to include; ship the referenced files or include the required notices here.
src/vs/workbench/contrib/virtualMachines/browser/virtualDesktopPanel.ts:128 - The noVNC surface is exposed as an
applicationwith only an aria-label; the remote pixels and guest controls have no textual accessible view or equivalent alternative. The sidebar accessibility help does not cover this webview, leaving screen-reader users unable to inspect or operate the guest desktop. Provide an accessible fallback/view or explicitly gate and announce the unsupported interaction.
src/vs/workbench/contrib/virtualMachines/browser/virtualDesktopPanel.ts:45 - This cache treats an existing panel as reusable forever, but stopping or unexpectedly losing the VM disposes its VNC proxy and invalidates the panel's WebSocket/token. After starting the VM again, clicking Open only reveals this disconnected webview and never calls
openDisplayto obtain a new connection, so the user must manually close the old panel before reconnecting.
src/vs/workbench/contrib/virtualMachines/browser/virtualDesktopPanel.ts:79 - These
localizecalls use French as the fallback/source text, so the desktop focus instructions are French in the default English locale. Keep the fallback strings English and provide the French text through the localization resources, consistent with the rest of the workbench.
src/vs/workbench/contrib/virtualMachines/browser/virtualDesktopPanel.ts:162 - This user-visible security error bypasses
localize, unlike the other status messages in this template, so it cannot be translated and is inconsistent with the workbench's localization contract. Pre-localize a{0}message and substitute the runtime reason before assigningtextContent.
src/vs/workbench/contrib/virtualMachines/browser/virtualDesktopPanel.ts:145 - Because noVNC installs its
keydownhandler on the canvas and stops propagation, this bubbling document listener never sees Escape once the desktop canvas has focus. The advertised keyboard path for leaving desktop interaction therefore does nothing; register this handler in the capture phase and prevent propagation (or expose a noVNC hook) so Escape reliably returns focus to the workbench control.
src/vs/workbench/contrib/virtualMachines/browser/virtualMachines.contribution.ts:34 - This
localize2/localizepair also supplies French fallback strings, so the sidebar title and command label appear in French for the default English locale. The configuration titles and VM commands below use the same pattern; keep the source/fallback strings in English and add French as a translation rather than making it the default.
src/vs/workbench/contrib/virtualMachines/browser/virtualMachinesView.ts:162 - The async operation is explicitly discarded here. If
openDisplayfails because QEMU or the VNC proxy is unavailable, the rejection is unhandled and this view does not show an error; the same discarded-promise pattern is used by the start/stop/restart actions below. Catch these failures and report them through the view or notification service.
src/vs/workbench/contrib/virtualMachines/browser/virtualMachinesView.ts:152 - Every button in every card receives only the action text as its accessible name, while the VM name is present only in a non-focusable sibling. Screen readers will therefore announce multiple indistinguishable “Ouvrir”/“Démarrer” buttons and cannot tell which machine will be affected; include
vm.nameinariaLabelor otherwise associate each action group with the card name.
- Files reviewed: 84/100 changed files
- Comments generated: 7
- Review effort level: Lite (auto)
Note
Copilot is running an experiment and ran this review at Lite.
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
| createModuleDescription('vs/platform/terminal/node/ptyHostMain'), | ||
| createModuleDescription('vs/platform/agentHost/node/agentHostMain'), | ||
| createModuleDescription('vs/platform/agentHost/node/diffWorkerMain'), | ||
| createModuleDescription('vs/platform/virtualMachines/node/virtualMachinesDaemonMain'), |
| '-cpu', spec.acceleration === 'kvm' ? 'host' : 'max', | ||
| '-smp', String(spec.resources.cpus), | ||
| '-m', String(spec.resources.memoryMB), | ||
| '-drive', `file=${spec.diskPath},format=qcow2,if=virtio,discard=unmap`, |
| await this.cleanupRuntime(vm, true); | ||
| throw error; | ||
| } | ||
| this.setState(id, VirtualMachineState.Running); |
| self._profileIdc = parser.profileIdc; | ||
| self._constraintSet = parser.constraintSet; | ||
| self._levelIdc = parser.levelIdc; |
| process.once('exit', () => { | ||
| // `exit` is synchronous: this is the last-resort path after a forced | ||
| // termination and therefore must not wait on promises. | ||
| manager.dispose(); | ||
| disposables.dispose(); |
| const existing = this.panels.get(vm.id); | ||
| if (existing) { | ||
| this.webviewWorkbenchService.revealWebview(existing, this.editorGroup(), false); | ||
| return; | ||
| } |
| [VirtualMachineState.Stopped]: localize('vm.state.stopped', "Arrêté"), | ||
| [VirtualMachineState.Starting]: localize('vm.state.starting', "Démarrage"), | ||
| [VirtualMachineState.Running]: localize('vm.state.running', "En cours d'exécution"), | ||
| [VirtualMachineState.Stopping]: localize('vm.state.stopping', "Arrêt en cours"), | ||
| [VirtualMachineState.Error]: localize('vm.state.error', "Erreur"), |
|
Frankenstein-Labs please read the following Contributor License Agreement(CLA). If you agree with the CLA, please reply with the following information.
Contributor License AgreementContribution License AgreementThis Contribution License Agreement (“Agreement”) is agreed to by the party signing below (“You”),
|
No description provided.