Skip to content

0.2 - #335997

Open
Frankenstein-Labs wants to merge 18 commits into
microsoft:mainfrom
Frankenstein-Labs:main
Open

0.2 #335997
Frankenstein-Labs wants to merge 18 commits into
microsoft:mainfrom
Frankenstein-Labs:main

Conversation

@Frankenstein-Labs

Copy link
Copy Markdown

No description provided.

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
Copilot AI balanced review requested due to automatic review settings September 13, 2026 00:34
@vs-code-engineering

Copy link
Copy Markdown
Contributor

📬 CODENOTIFY

The following users are being notified based on files changed in this PR:

Raymond Zhao (@rzhao271)

Matched files:

  • resources/linux/debian/control.template
  • resources/linux/debian/postinst.template
  • resources/linux/debian/postrm.template
  • resources/linux/debian/templates.template
  • resources/linux/rpm/code.spec.template

Robo (@deepak1556)

Matched files:

  • src/vs/code/electron-main/app.ts

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔵 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 under src/vs/workbench/...; therefore ESLint will not ignore noVNC and will lint the third-party sources. Use the repository-relative src/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 main is 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.remove is implemented but never registered or rendered—so this sentence overstates the current UI/API surface. Either add the missing command/action or remove remove from 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/LICENSE is 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/**/*.js through the recursive JavaScript glob but does not copy vendor/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.xml still sets ShortDisplayName="Code - OSS", and resources/server/manifest.json still 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, and serverLicenseUrl still point to microsoft/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 when this.daemon has 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

  • cleanupRuntime is asynchronous but is started without awaiting it before publishing the Error state. 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 declared DEFAULT_VM_RESOURCES of 4096 MB/32 GB. That silently provisions the VM with the wrong size; fall back through DEFAULT_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. buildQemuArgs then 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 pass installIsoPath only 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

  • ChildProcess does not guarantee an exit event after a spawn failure (it can emit error and close only). Since this handler deliberately ignores error and doStart only observes onExit, a missing or non-executable configured QEMU binary leaves vm.process set and waits the full VNC startup timeout before reporting a misleading timeout. Propagate the spawn error/close through IVirtualMachineProcessHandle and 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.0 and the BSD license files, but no docs/ 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 application with 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 openDisplay to 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 localize calls 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 assigning textContent.
    src/vs/workbench/contrib/virtualMachines/browser/virtualDesktopPanel.ts:145
  • Because noVNC installs its keydown handler 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/localize pair 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 openDisplay fails 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.name in ariaLabel or 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.

Comment thread build/buildfile.ts
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);
Comment on lines +199 to +201
self._profileIdc = parser.profileIdc;
self._constraintSet = parser.constraintSet;
self._levelIdc = parser.levelIdc;
Comment on lines +69 to +73
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();
Comment on lines +41 to +45
const existing = this.panels.get(vm.id);
if (existing) {
this.webviewWorkbenchService.revealWebview(existing, this.editorGroup(), false);
return;
}
Comment on lines +28 to +32
[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"),
@microsoft-github-policy-service

Copy link
Copy Markdown
Contributor

Frankenstein-Labs please read the following Contributor License Agreement(CLA). If you agree with the CLA, please reply with the following information.

@microsoft-github-policy-service agree [company="{your company}"]

Options:

  • (default - no company specified) I have sole ownership of intellectual property rights to my Submissions and I am not making Submissions in the course of work for my employer.
@microsoft-github-policy-service agree
  • (when company given) I am making Submissions in the course of work for my employer (or my employer has intellectual property rights in my Submissions by contract or applicable law). I have permission from my employer to make Submissions and enter into this Agreement on behalf of my employer. By signing below, the defined term “You” includes me and my employer.
@microsoft-github-policy-service agree company="Microsoft"
Contributor License Agreement

Contribution License Agreement

This Contribution License Agreement (“Agreement”) is agreed to by the party signing below (“You”),
and conveys certain license rights to Microsoft Corporation and its affiliates (“Microsoft”) for Your
contributions to Microsoft open source projects. This Agreement is effective as of the latest signature
date below.

  1. Definitions.
    “Code” means the computer software code, whether in human-readable or machine-executable form,
    that is delivered by You to Microsoft under this Agreement.
    “Project” means any of the projects owned or managed by Microsoft and offered under a license
    approved by the Open Source Initiative (www.opensource.org).
    “Submit” is the act of uploading, submitting, transmitting, or distributing code or other content to any
    Project, including but not limited to communication on electronic mailing lists, source code control
    systems, and issue tracking systems that are managed by, or on behalf of, the Project for the purpose of
    discussing and improving that Project, but excluding communication that is conspicuously marked or
    otherwise designated in writing by You as “Not a Submission.”
    “Submission” means the Code and any other copyrightable material Submitted by You, including any
    associated comments and documentation.
  2. Your Submission. You must agree to the terms of this Agreement before making a Submission to any
    Project. This Agreement covers any and all Submissions that You, now or in the future (except as
    described in Section 4 below), Submit to any Project.
  3. Originality of Work. You represent that each of Your Submissions is entirely Your original work.
    Should You wish to Submit materials that are not Your original work, You may Submit them separately
    to the Project if You (a) retain all copyright and license information that was in the materials as You
    received them, (b) in the description accompanying Your Submission, include the phrase “Submission
    containing materials of a third party:” followed by the names of the third party and any licenses or other
    restrictions of which You are aware, and (c) follow any other instructions in the Project’s written
    guidelines concerning Submissions.
  4. Your Employer. References to “employer” in this Agreement include Your employer or anyone else
    for whom You are acting in making Your Submission, e.g. as a contractor, vendor, or agent. If Your
    Submission is made in the course of Your work for an employer or Your employer has intellectual
    property rights in Your Submission by contract or applicable law, You must secure permission from Your
    employer to make the Submission before signing this Agreement. In that case, the term “You” in this
    Agreement will refer to You and the employer collectively. If You change employers in the future and
    desire to Submit additional Submissions for the new employer, then You agree to sign a new Agreement
    and secure permission from the new employer before Submitting those Submissions.
  5. Licenses.
  • Copyright License. You grant Microsoft, and those who receive the Submission directly or
    indirectly from Microsoft, a perpetual, worldwide, non-exclusive, royalty-free, irrevocable license in the
    Submission to reproduce, prepare derivative works of, publicly display, publicly perform, and distribute
    the Submission and such derivative works, and to sublicense any or all of the foregoing rights to third
    parties.
  • Patent License. You grant Microsoft, and those who receive the Submission directly or
    indirectly from Microsoft, a perpetual, worldwide, non-exclusive, royalty-free, irrevocable license under
    Your patent claims that are necessarily infringed by the Submission or the combination of the
    Submission with the Project to which it was Submitted to make, have made, use, offer to sell, sell and
    import or otherwise dispose of the Submission alone or with the Project.
  • Other Rights Reserved. Each party reserves all rights not expressly granted in this Agreement.
    No additional licenses or rights whatsoever (including, without limitation, any implied licenses) are
    granted by implication, exhaustion, estoppel or otherwise.
  1. Representations and Warranties. You represent that You are legally entitled to grant the above
    licenses. You represent that each of Your Submissions is entirely Your original work (except as You may
    have disclosed under Section 3). You represent that You have secured permission from Your employer to
    make the Submission in cases where Your Submission is made in the course of Your work for Your
    employer or Your employer has intellectual property rights in Your Submission by contract or applicable
    law. If You are signing this Agreement on behalf of Your employer, You represent and warrant that You
    have the necessary authority to bind the listed employer to the obligations contained in this Agreement.
    You are not expected to provide support for Your Submission, unless You choose to do so. UNLESS
    REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING, AND EXCEPT FOR THE WARRANTIES
    EXPRESSLY STATED IN SECTIONS 3, 4, AND 6, THE SUBMISSION PROVIDED UNDER THIS AGREEMENT IS
    PROVIDED WITHOUT WARRANTY OF ANY KIND, INCLUDING, BUT NOT LIMITED TO, ANY WARRANTY OF
    NONINFRINGEMENT, MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE.
  2. Notice to Microsoft. You agree to notify Microsoft in writing of any facts or circumstances of which
    You later become aware that would make Your representations in this Agreement inaccurate in any
    respect.
  3. Information about Submissions. You agree that contributions to Projects and information about
    contributions may be maintained indefinitely and disclosed publicly, including Your name and other
    information that You submit with Your Submission.
  4. Governing Law/Jurisdiction. This Agreement is governed by the laws of the State of Washington, and
    the parties consent to exclusive jurisdiction and venue in the federal courts sitting in King County,
    Washington, unless no federal subject matter jurisdiction exists, in which case the parties consent to
    exclusive jurisdiction and venue in the Superior Court of King County, Washington. The parties waive all
    defenses of lack of personal jurisdiction and forum non-conveniens.
  5. Entire Agreement/Assignment. This Agreement is the entire agreement between the parties, and
    supersedes any and all prior agreements, understandings or communications, written or oral, between
    the parties relating to the subject matter hereof. This Agreement may be assigned by Microsoft.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants