Skip to content

feat(vscode-desktop-core): support extension pre-installation#955

Open
Edd88-pixel wants to merge 1 commit into
coder:mainfrom
Edd88-pixel:feat/windsurf-extension-preinstall-425
Open

feat(vscode-desktop-core): support extension pre-installation#955
Edd88-pixel wants to merge 1 commit into
coder:mainfrom
Edd88-pixel:feat/windsurf-extension-preinstall-425

Conversation

@Edd88-pixel

@Edd88-pixel Edd88-pixel commented Jul 10, 2026

Copy link
Copy Markdown
Contributor

Why

VS Code-based IDE wrappers currently have no shared way to pre-install remote extensions before the first desktop connection. Each wrapper would otherwise need to duplicate startup orchestration, path handling, login blocking, and failure behavior.

This adds the reusable primitive needed by Windsurf in #425 while keeping IDE-specific server discovery and bootstrap logic in the wrapper that owns those details. The Core change is intentionally submitted first so wrapper modules can depend on a published vscode-desktop-core 1.2.0 instead of an unreleased interface.

Changes

  • Add optional extension IDs, remote CLI path, extension directory, and finite bootstrap-script inputs.
  • Create no additional resource when the extension list is empty, preserving existing consumers.
  • Run one dedicated startup script when extensions are configured; it blocks ordinary login, has a 30-minute timeout, and propagates bootstrap or CLI failures.
  • Pass paths, bootstrap content, and extension IDs safely to the shell template and install each extension as a separately quoted CLI argument.
  • Avoid forced updates so repeated workspace starts can reuse extensions already recognized by the remote IDE server.
  • Add Terraform and TypeScript coverage for defaults, resource attributes, repeated starts, invalid extensions, missing paths, and CLI failures.
  • Document the wrapper contract and bump the module example to 1.2.0.

Description

Adds reusable remote extension pre-installation support to vscode-desktop-core. IDE wrappers provide their verified remote server CLI and storage paths; the Core owns the common finite, login-blocking installation flow.

Type of Change

  • New module
  • New template
  • Bug fix
  • Feature/enhancement
  • Documentation
  • Other

Module Information

Path: registry/coder/modules/vscode-desktop-core
New version: v1.2.0
Breaking change: [ ] Yes [x] No

Validation

  • scripts/terraform_validate.sh — passed for vscode-desktop-core.
  • scripts/terraform_test_all.sh — Core tests passed: 3 passed, 0 failed.
  • scripts/ts_test_auto.sh — 21 passed, 0 failed.
  • bun run fmt and bun run fmt:ci — passed; no unrelated formatting changes.
  • terraform fmt -check -recursive and git diff --check — passed.
  • scripts/validate_set_u_order.sh — passed.
  • Local wrapper integration against this Core: Windsurf Terraform 2/2 and TypeScript 11/11 passed.
  • Real Coder workspace validation: Windsurf Remote Host 1.110.1 installed esbenp.prettier-vscode@12.4.0; after a workspace restart, the server and extension were reused from the persistent home volume and the first client connection recognized Prettier without manual installation.
  • README validation binary was not run because Go is unavailable in the local environment.

Testing & Validation

  • Tests pass (bun test)
  • Code formatted (bun fmt)
  • Changes tested locally

Related Issues

Related to #425. The Windsurf wrapper change will follow after Core 1.2.0 is published.

@Edd88-pixel Edd88-pixel marked this pull request as ready for review July 10, 2026 20:39
@Edd88-pixel

Copy link
Copy Markdown
Contributor Author

This Core change needs to be merged and released before the follow-up Windsurf PR can be submitted. The Windsurf module must depend on a published vscode-desktop-core 1.2.0; submitting it earlier would leave the Registry dependency unresolved and prevent Terraform initialization.

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.

1 participant