fix(server): keep installed editors visible when discovery times out - #4956

Closed
eeinarsson wants to merge 1 commit into
pingdotgg:mainfrom
eeinarsson:fix/issue-4697-editor-discovery
Closed

fix(server): keep installed editors visible when discovery times out#4956
eeinarsson wants to merge 1 commit into
pingdotgg:mainfrom
eeinarsson:fix/issue-4697-editor-discovery

Conversation

@eeinarsson

@eeinarssoneeinarsson commented Jul 30, 2026

Copy link
Copy Markdown
Contributor

What Changed

  • made Windows editor discovery bounded and concurrent while preserving partial successes
  • retained last-known editors when a discovery attempt is incomplete
  • added an optional completion signal and one retry through the existing config snapshot stream
  • added focused shell, launcher, server, and picker coverage

Why

Editor discovery could exceed the server config timeout and discard editors already found, causing clients to incorrectly show “No installed editors found.”

The optional completion field and existing snapshot event keep this compatible across mixed client/server versions.

Fixes#4697.

Related approaches: #4739 and #4435. Complementary command-probe performance work: #4778.

UI Changes

Before:
image

After:
image

Checklist

  • This PR is small and focused
  • I explained what changed and why
  • I included before/after screenshots for any UI changes
  • No animation or interaction changes require a video

Note

Medium Risk
Touches server config streaming and cross-platform command discovery with new timeout/partial-result semantics; behavior is well tested but affects what clients show for editor availability.

Overview
Editor discovery no longer collapses to an empty list when probes time out or stall. discoverAvailableCommands in shared shell code runs bounded, concurrent PATH checks and returns { available, complete }. ExternalLauncher.resolveAvailableEditors now returns { editors, complete }, merges partial results with the last known complete list, and only caches successful complete discoveries.

ServerConfig adds optional availableEditorsComplete. The websocket config stream keeps that flag on snapshots, schedules a 1s retry when the initial load is incomplete, and folds retries into live updates without clobbering settings/keybinding events. OpenInPicker shows “Couldn’t check for installed editors” when discovery is incomplete or unknown, instead of “No installed editors found”.

Coverage spans shell discovery, launcher caching/retry behavior, server config subscription, and the picker empty state.

Reviewed by Cursor Bugbot for commit 64d5e41. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Keep installed editors visible in server config when editor discovery times out

  • Adds EditorDiscoveryResult (with editors and complete fields) to replace the plain editor array returned by resolveAvailableEditors in externalLauncher.ts.
  • Introduces discoverAvailableCommands in shell.ts: a platform-aware, timeout-bounded bulk command scanner that returns partial results with a complete flag instead of failing on timeout.
  • Caches complete discoveries for 1 minute; incomplete or failed discoveries are not cached, and the last known complete editor list is preserved on incomplete refreshes.
  • On incomplete discovery, subscribeServerConfig in ws.ts schedules a retry after 1s and emits a refreshed ServerConfig snapshot, propagating availableEditorsComplete to clients.
  • The OpenInPicker UI in OpenInPicker.tsx now shows "Couldn't check for installed editors" when discovery is incomplete, versus "No installed editors found" when it is complete.

Macroscope summarized 64d5e41.

@coderabbitai

coderabbitaiBot commented Jul 30, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: d7839a3b-c087-4823-9ae2-62d405e19537

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actionsgithub-actionsBot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:L 100-499 changed lines (additions + deletions). labels Jul 30, 2026
Comment threadapps/server/src/process/externalLauncher.ts Outdated
@macroscopeapp

macroscopeappBot commented Jul 30, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

This PR introduces new timeout handling, caching, and retry logic for editor discovery - significant runtime behavior changes. An unresolved review comment identifies that retry failures in the discovery stream could terminate the entire config subscription, which warrants human review.

You can customize Macroscope's approvability policy. Learn more.

@eeinarsson
eeinarssonforce-pushed the fix/issue-4697-editor-discovery branch from 8c9c656 to feb5302CompareJuly 30, 2026 10:16

@macroscopeappmacroscopeappBot 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.

One finding on Effect dependency acquisition: the new Windows discovery path reads process.env directly instead of the HostProcessEnvironment reference already used elsewhere in this module.

Posted via Macroscope — Effect Service Conventions

Comment threadpackages/shared/src/shell.ts Outdated
Comment threadpackages/shared/src/shell.ts Outdated
@eeinarssoneeinarsson changed the title Keep installed editors visible when discovery times outfix(server): keep installed editors visible when discovery times outJul 30, 2026
@eeinarsson
eeinarssonforce-pushed the fix/issue-4697-editor-discovery branch 3 times, most recently from e058e19 to 8c0a223CompareAugust 6, 2026 11:34
Comment threadapps/server/src/ws.ts
Bound editor discovery, preserve partial and last-known results, retry incomplete scans through the config stream, and distinguish incomplete discovery from a complete empty result in the picker.
@eeinarsson
eeinarssonforce-pushed the fix/issue-4697-editor-discovery branch from 8c0a223 to 64d5e41CompareAugust 6, 2026 11:48

@cursorcursorBot 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.

Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 64d5e41. Configure here.

Comment threadapps/server/src/ws.ts
);
editorDiscoveryRetry,
Stream.merge(keybindingsUpdates, Stream.merge(providerStatuses, settingsUpdates)),
).pipe(Stream.mapAccum(() => initialConfig, projectServerConfigLiveEvent));

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.

Retry failure kills config stream

Medium Severity

The incomplete-discovery retry is merged into the live subscribeServerConfig stream without isolating failures. Stream.merge propagates errors from either side immediately, so a defect or unexpected failure from resolveAvailableEditors after the initial snapshot terminates settings, keybindings, and provider updates for that subscription. Nearby provider refresh already uses ignoreCause, and launcher tests cover discovery defects, but this retry path does not.

Fix in CursorFix in Web

Reviewed by Cursor Bugbot for commit 64d5e41. Configure here.

@eeinarsson

Copy link
Copy Markdown
ContributorAuthor

Closing as superseded by #5561. I verified on Windows 11 with the latest nightly that the editor dropdown now works correctly without this PR.

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

Labels

size:L100-499 changed lines (additions + deletions).vouch:unvouchedPR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug]: No installed editors found

1 participant

@eeinarsson
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

fix(server): keep installed editors visible when discovery times out - #4956

Closed
eeinarsson wants to merge 1 commit into
pingdotgg:mainfrom
eeinarsson:fix/issue-4697-editor-discovery
Closed

fix(server): keep installed editors visible when discovery times out#4956
eeinarsson wants to merge 1 commit into
pingdotgg:mainfrom
eeinarsson:fix/issue-4697-editor-discovery

Conversation

@eeinarsson

@eeinarssoneeinarsson commented Jul 30, 2026

Copy link
Copy Markdown
Contributor

What Changed

  • made Windows editor discovery bounded and concurrent while preserving partial successes
  • retained last-known editors when a discovery attempt is incomplete
  • added an optional completion signal and one retry through the existing config snapshot stream
  • added focused shell, launcher, server, and picker coverage

Why

Editor discovery could exceed the server config timeout and discard editors already found, causing clients to incorrectly show “No installed editors found.”

The optional completion field and existing snapshot event keep this compatible across mixed client/server versions.

Fixes#4697.

Related approaches: #4739 and #4435. Complementary command-probe performance work: #4778.

UI Changes

Before:
image

After:
image

Checklist

  • This PR is small and focused
  • I explained what changed and why
  • I included before/after screenshots for any UI changes
  • No animation or interaction changes require a video

Note

Medium Risk
Touches server config streaming and cross-platform command discovery with new timeout/partial-result semantics; behavior is well tested but affects what clients show for editor availability.

Overview
Editor discovery no longer collapses to an empty list when probes time out or stall. discoverAvailableCommands in shared shell code runs bounded, concurrent PATH checks and returns { available, complete }. ExternalLauncher.resolveAvailableEditors now returns { editors, complete }, merges partial results with the last known complete list, and only caches successful complete discoveries.

ServerConfig adds optional availableEditorsComplete. The websocket config stream keeps that flag on snapshots, schedules a 1s retry when the initial load is incomplete, and folds retries into live updates without clobbering settings/keybinding events. OpenInPicker shows “Couldn’t check for installed editors” when discovery is incomplete or unknown, instead of “No installed editors found”.

Coverage spans shell discovery, launcher caching/retry behavior, server config subscription, and the picker empty state.

Reviewed by Cursor Bugbot for commit 64d5e41. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Keep installed editors visible in server config when editor discovery times out

  • Adds EditorDiscoveryResult (with editors and complete fields) to replace the plain editor array returned by resolveAvailableEditors in externalLauncher.ts.
  • Introduces discoverAvailableCommands in shell.ts: a platform-aware, timeout-bounded bulk command scanner that returns partial results with a complete flag instead of failing on timeout.
  • Caches complete discoveries for 1 minute; incomplete or failed discoveries are not cached, and the last known complete editor list is preserved on incomplete refreshes.
  • On incomplete discovery, subscribeServerConfig in ws.ts schedules a retry after 1s and emits a refreshed ServerConfig snapshot, propagating availableEditorsComplete to clients.
  • The OpenInPicker UI in OpenInPicker.tsx now shows "Couldn't check for installed editors" when discovery is incomplete, versus "No installed editors found" when it is complete.

Macroscope summarized 64d5e41.

@coderabbitai

coderabbitaiBot commented Jul 30, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: d7839a3b-c087-4823-9ae2-62d405e19537

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actionsgithub-actionsBot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:L 100-499 changed lines (additions + deletions). labels Jul 30, 2026
Comment threadapps/server/src/process/externalLauncher.ts Outdated
@macroscopeapp

macroscopeappBot commented Jul 30, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

This PR introduces new timeout handling, caching, and retry logic for editor discovery - significant runtime behavior changes. An unresolved review comment identifies that retry failures in the discovery stream could terminate the entire config subscription, which warrants human review.

You can customize Macroscope's approvability policy. Learn more.

@eeinarsson
eeinarssonforce-pushed the fix/issue-4697-editor-discovery branch from 8c9c656 to feb5302CompareJuly 30, 2026 10:16

@macroscopeappmacroscopeappBot 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.

One finding on Effect dependency acquisition: the new Windows discovery path reads process.env directly instead of the HostProcessEnvironment reference already used elsewhere in this module.

Posted via Macroscope — Effect Service Conventions

Comment threadpackages/shared/src/shell.ts Outdated
Comment threadpackages/shared/src/shell.ts Outdated
@eeinarssoneeinarsson changed the title Keep installed editors visible when discovery times outfix(server): keep installed editors visible when discovery times outJul 30, 2026
@eeinarsson
eeinarssonforce-pushed the fix/issue-4697-editor-discovery branch 3 times, most recently from e058e19 to 8c0a223CompareAugust 6, 2026 11:34
Comment threadapps/server/src/ws.ts
Bound editor discovery, preserve partial and last-known results, retry incomplete scans through the config stream, and distinguish incomplete discovery from a complete empty result in the picker.
@eeinarsson
eeinarssonforce-pushed the fix/issue-4697-editor-discovery branch from 8c0a223 to 64d5e41CompareAugust 6, 2026 11:48

@cursorcursorBot 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.

Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 64d5e41. Configure here.

Comment threadapps/server/src/ws.ts
);
editorDiscoveryRetry,
Stream.merge(keybindingsUpdates, Stream.merge(providerStatuses, settingsUpdates)),
).pipe(Stream.mapAccum(() => initialConfig, projectServerConfigLiveEvent));

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.

Retry failure kills config stream

Medium Severity

The incomplete-discovery retry is merged into the live subscribeServerConfig stream without isolating failures. Stream.merge propagates errors from either side immediately, so a defect or unexpected failure from resolveAvailableEditors after the initial snapshot terminates settings, keybindings, and provider updates for that subscription. Nearby provider refresh already uses ignoreCause, and launcher tests cover discovery defects, but this retry path does not.

Fix in CursorFix in Web

Reviewed by Cursor Bugbot for commit 64d5e41. Configure here.

@eeinarsson

Copy link
Copy Markdown
ContributorAuthor

Closing as superseded by #5561. I verified on Windows 11 with the latest nightly that the editor dropdown now works correctly without this PR.

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

Labels

size:L100-499 changed lines (additions + deletions).vouch:unvouchedPR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug]: No installed editors found

1 participant

@eeinarsson
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

fix(server): keep installed editors visible when discovery times out - #4956

Closed
eeinarsson wants to merge 1 commit into
pingdotgg:mainfrom
eeinarsson:fix/issue-4697-editor-discovery
Closed

fix(server): keep installed editors visible when discovery times out#4956
eeinarsson wants to merge 1 commit into
pingdotgg:mainfrom
eeinarsson:fix/issue-4697-editor-discovery

Conversation

@eeinarsson

@eeinarssoneeinarsson commented Jul 30, 2026

Copy link
Copy Markdown
Contributor

What Changed

  • made Windows editor discovery bounded and concurrent while preserving partial successes
  • retained last-known editors when a discovery attempt is incomplete
  • added an optional completion signal and one retry through the existing config snapshot stream
  • added focused shell, launcher, server, and picker coverage

Why

Editor discovery could exceed the server config timeout and discard editors already found, causing clients to incorrectly show “No installed editors found.”

The optional completion field and existing snapshot event keep this compatible across mixed client/server versions.

Fixes#4697.

Related approaches: #4739 and #4435. Complementary command-probe performance work: #4778.

UI Changes

Before:
image

After:
image

Checklist

  • This PR is small and focused
  • I explained what changed and why
  • I included before/after screenshots for any UI changes
  • No animation or interaction changes require a video

Note

Medium Risk
Touches server config streaming and cross-platform command discovery with new timeout/partial-result semantics; behavior is well tested but affects what clients show for editor availability.

Overview
Editor discovery no longer collapses to an empty list when probes time out or stall. discoverAvailableCommands in shared shell code runs bounded, concurrent PATH checks and returns { available, complete }. ExternalLauncher.resolveAvailableEditors now returns { editors, complete }, merges partial results with the last known complete list, and only caches successful complete discoveries.

ServerConfig adds optional availableEditorsComplete. The websocket config stream keeps that flag on snapshots, schedules a 1s retry when the initial load is incomplete, and folds retries into live updates without clobbering settings/keybinding events. OpenInPicker shows “Couldn’t check for installed editors” when discovery is incomplete or unknown, instead of “No installed editors found”.

Coverage spans shell discovery, launcher caching/retry behavior, server config subscription, and the picker empty state.

Reviewed by Cursor Bugbot for commit 64d5e41. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Keep installed editors visible in server config when editor discovery times out

  • Adds EditorDiscoveryResult (with editors and complete fields) to replace the plain editor array returned by resolveAvailableEditors in externalLauncher.ts.
  • Introduces discoverAvailableCommands in shell.ts: a platform-aware, timeout-bounded bulk command scanner that returns partial results with a complete flag instead of failing on timeout.
  • Caches complete discoveries for 1 minute; incomplete or failed discoveries are not cached, and the last known complete editor list is preserved on incomplete refreshes.
  • On incomplete discovery, subscribeServerConfig in ws.ts schedules a retry after 1s and emits a refreshed ServerConfig snapshot, propagating availableEditorsComplete to clients.
  • The OpenInPicker UI in OpenInPicker.tsx now shows "Couldn't check for installed editors" when discovery is incomplete, versus "No installed editors found" when it is complete.

Macroscope summarized 64d5e41.

@coderabbitai

coderabbitaiBot commented Jul 30, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: d7839a3b-c087-4823-9ae2-62d405e19537

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actionsgithub-actionsBot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:L 100-499 changed lines (additions + deletions). labels Jul 30, 2026
Comment threadapps/server/src/process/externalLauncher.ts Outdated
@macroscopeapp

macroscopeappBot commented Jul 30, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

This PR introduces new timeout handling, caching, and retry logic for editor discovery - significant runtime behavior changes. An unresolved review comment identifies that retry failures in the discovery stream could terminate the entire config subscription, which warrants human review.

You can customize Macroscope's approvability policy. Learn more.

@eeinarsson
eeinarssonforce-pushed the fix/issue-4697-editor-discovery branch from 8c9c656 to feb5302CompareJuly 30, 2026 10:16

@macroscopeappmacroscopeappBot 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.

One finding on Effect dependency acquisition: the new Windows discovery path reads process.env directly instead of the HostProcessEnvironment reference already used elsewhere in this module.

Posted via Macroscope — Effect Service Conventions

Comment threadpackages/shared/src/shell.ts Outdated
Comment threadpackages/shared/src/shell.ts Outdated
@eeinarssoneeinarsson changed the title Keep installed editors visible when discovery times outfix(server): keep installed editors visible when discovery times outJul 30, 2026
@eeinarsson
eeinarssonforce-pushed the fix/issue-4697-editor-discovery branch 3 times, most recently from e058e19 to 8c0a223CompareAugust 6, 2026 11:34
Comment threadapps/server/src/ws.ts
Bound editor discovery, preserve partial and last-known results, retry incomplete scans through the config stream, and distinguish incomplete discovery from a complete empty result in the picker.
@eeinarsson
eeinarssonforce-pushed the fix/issue-4697-editor-discovery branch from 8c0a223 to 64d5e41CompareAugust 6, 2026 11:48

@cursorcursorBot 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.

Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 64d5e41. Configure here.

Comment threadapps/server/src/ws.ts
);
editorDiscoveryRetry,
Stream.merge(keybindingsUpdates, Stream.merge(providerStatuses, settingsUpdates)),
).pipe(Stream.mapAccum(() => initialConfig, projectServerConfigLiveEvent));

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.

Retry failure kills config stream

Medium Severity

The incomplete-discovery retry is merged into the live subscribeServerConfig stream without isolating failures. Stream.merge propagates errors from either side immediately, so a defect or unexpected failure from resolveAvailableEditors after the initial snapshot terminates settings, keybindings, and provider updates for that subscription. Nearby provider refresh already uses ignoreCause, and launcher tests cover discovery defects, but this retry path does not.

Fix in CursorFix in Web

Reviewed by Cursor Bugbot for commit 64d5e41. Configure here.

@eeinarsson

Copy link
Copy Markdown
ContributorAuthor

Closing as superseded by #5561. I verified on Windows 11 with the latest nightly that the editor dropdown now works correctly without this PR.

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

Labels

size:L100-499 changed lines (additions + deletions).vouch:unvouchedPR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug]: No installed editors found

1 participant

@eeinarsson
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

fix(server): keep installed editors visible when discovery times out - #4956

Closed
eeinarsson wants to merge 1 commit into
pingdotgg:mainfrom
eeinarsson:fix/issue-4697-editor-discovery
Closed

fix(server): keep installed editors visible when discovery times out#4956
eeinarsson wants to merge 1 commit into
pingdotgg:mainfrom
eeinarsson:fix/issue-4697-editor-discovery

Conversation

@eeinarsson

@eeinarssoneeinarsson commented Jul 30, 2026

Copy link
Copy Markdown
Contributor

What Changed

  • made Windows editor discovery bounded and concurrent while preserving partial successes
  • retained last-known editors when a discovery attempt is incomplete
  • added an optional completion signal and one retry through the existing config snapshot stream
  • added focused shell, launcher, server, and picker coverage

Why

Editor discovery could exceed the server config timeout and discard editors already found, causing clients to incorrectly show “No installed editors found.”

The optional completion field and existing snapshot event keep this compatible across mixed client/server versions.

Fixes#4697.

Related approaches: #4739 and #4435. Complementary command-probe performance work: #4778.

UI Changes

Before:
image

After:
image

Checklist

  • This PR is small and focused
  • I explained what changed and why
  • I included before/after screenshots for any UI changes
  • No animation or interaction changes require a video

Note

Medium Risk
Touches server config streaming and cross-platform command discovery with new timeout/partial-result semantics; behavior is well tested but affects what clients show for editor availability.

Overview
Editor discovery no longer collapses to an empty list when probes time out or stall. discoverAvailableCommands in shared shell code runs bounded, concurrent PATH checks and returns { available, complete }. ExternalLauncher.resolveAvailableEditors now returns { editors, complete }, merges partial results with the last known complete list, and only caches successful complete discoveries.

ServerConfig adds optional availableEditorsComplete. The websocket config stream keeps that flag on snapshots, schedules a 1s retry when the initial load is incomplete, and folds retries into live updates without clobbering settings/keybinding events. OpenInPicker shows “Couldn’t check for installed editors” when discovery is incomplete or unknown, instead of “No installed editors found”.

Coverage spans shell discovery, launcher caching/retry behavior, server config subscription, and the picker empty state.

Reviewed by Cursor Bugbot for commit 64d5e41. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Keep installed editors visible in server config when editor discovery times out

  • Adds EditorDiscoveryResult (with editors and complete fields) to replace the plain editor array returned by resolveAvailableEditors in externalLauncher.ts.
  • Introduces discoverAvailableCommands in shell.ts: a platform-aware, timeout-bounded bulk command scanner that returns partial results with a complete flag instead of failing on timeout.
  • Caches complete discoveries for 1 minute; incomplete or failed discoveries are not cached, and the last known complete editor list is preserved on incomplete refreshes.
  • On incomplete discovery, subscribeServerConfig in ws.ts schedules a retry after 1s and emits a refreshed ServerConfig snapshot, propagating availableEditorsComplete to clients.
  • The OpenInPicker UI in OpenInPicker.tsx now shows "Couldn't check for installed editors" when discovery is incomplete, versus "No installed editors found" when it is complete.

Macroscope summarized 64d5e41.

@coderabbitai

coderabbitaiBot commented Jul 30, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: d7839a3b-c087-4823-9ae2-62d405e19537

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actionsgithub-actionsBot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:L 100-499 changed lines (additions + deletions). labels Jul 30, 2026
Comment threadapps/server/src/process/externalLauncher.ts Outdated
@macroscopeapp

macroscopeappBot commented Jul 30, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

This PR introduces new timeout handling, caching, and retry logic for editor discovery - significant runtime behavior changes. An unresolved review comment identifies that retry failures in the discovery stream could terminate the entire config subscription, which warrants human review.

You can customize Macroscope's approvability policy. Learn more.

@eeinarsson
eeinarssonforce-pushed the fix/issue-4697-editor-discovery branch from 8c9c656 to feb5302CompareJuly 30, 2026 10:16

@macroscopeappmacroscopeappBot 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.

One finding on Effect dependency acquisition: the new Windows discovery path reads process.env directly instead of the HostProcessEnvironment reference already used elsewhere in this module.

Posted via Macroscope — Effect Service Conventions

Comment threadpackages/shared/src/shell.ts Outdated
Comment threadpackages/shared/src/shell.ts Outdated
@eeinarssoneeinarsson changed the title Keep installed editors visible when discovery times outfix(server): keep installed editors visible when discovery times outJul 30, 2026
@eeinarsson
eeinarssonforce-pushed the fix/issue-4697-editor-discovery branch 3 times, most recently from e058e19 to 8c0a223CompareAugust 6, 2026 11:34
Comment threadapps/server/src/ws.ts
Bound editor discovery, preserve partial and last-known results, retry incomplete scans through the config stream, and distinguish incomplete discovery from a complete empty result in the picker.
@eeinarsson
eeinarssonforce-pushed the fix/issue-4697-editor-discovery branch from 8c0a223 to 64d5e41CompareAugust 6, 2026 11:48

@cursorcursorBot 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.

Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 64d5e41. Configure here.

Comment threadapps/server/src/ws.ts
);
editorDiscoveryRetry,
Stream.merge(keybindingsUpdates, Stream.merge(providerStatuses, settingsUpdates)),
).pipe(Stream.mapAccum(() => initialConfig, projectServerConfigLiveEvent));

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.

Retry failure kills config stream

Medium Severity

The incomplete-discovery retry is merged into the live subscribeServerConfig stream without isolating failures. Stream.merge propagates errors from either side immediately, so a defect or unexpected failure from resolveAvailableEditors after the initial snapshot terminates settings, keybindings, and provider updates for that subscription. Nearby provider refresh already uses ignoreCause, and launcher tests cover discovery defects, but this retry path does not.

Fix in CursorFix in Web

Reviewed by Cursor Bugbot for commit 64d5e41. Configure here.

@eeinarsson

Copy link
Copy Markdown
ContributorAuthor

Closing as superseded by #5561. I verified on Windows 11 with the latest nightly that the editor dropdown now works correctly without this PR.

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

Labels

size:L100-499 changed lines (additions + deletions).vouch:unvouchedPR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug]: No installed editors found

1 participant

@eeinarsson
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

fix(server): keep installed editors visible when discovery times out - #4956

Closed
eeinarsson wants to merge 1 commit into
pingdotgg:mainfrom
eeinarsson:fix/issue-4697-editor-discovery
Closed

fix(server): keep installed editors visible when discovery times out#4956
eeinarsson wants to merge 1 commit into
pingdotgg:mainfrom
eeinarsson:fix/issue-4697-editor-discovery

Conversation

@eeinarsson

@eeinarssoneeinarsson commented Jul 30, 2026

Copy link
Copy Markdown
Contributor

What Changed

  • made Windows editor discovery bounded and concurrent while preserving partial successes
  • retained last-known editors when a discovery attempt is incomplete
  • added an optional completion signal and one retry through the existing config snapshot stream
  • added focused shell, launcher, server, and picker coverage

Why

Editor discovery could exceed the server config timeout and discard editors already found, causing clients to incorrectly show “No installed editors found.”

The optional completion field and existing snapshot event keep this compatible across mixed client/server versions.

Fixes#4697.

Related approaches: #4739 and #4435. Complementary command-probe performance work: #4778.

UI Changes

Before:
image

After:
image

Checklist

  • This PR is small and focused
  • I explained what changed and why
  • I included before/after screenshots for any UI changes
  • No animation or interaction changes require a video

Note

Medium Risk
Touches server config streaming and cross-platform command discovery with new timeout/partial-result semantics; behavior is well tested but affects what clients show for editor availability.

Overview
Editor discovery no longer collapses to an empty list when probes time out or stall. discoverAvailableCommands in shared shell code runs bounded, concurrent PATH checks and returns { available, complete }. ExternalLauncher.resolveAvailableEditors now returns { editors, complete }, merges partial results with the last known complete list, and only caches successful complete discoveries.

ServerConfig adds optional availableEditorsComplete. The websocket config stream keeps that flag on snapshots, schedules a 1s retry when the initial load is incomplete, and folds retries into live updates without clobbering settings/keybinding events. OpenInPicker shows “Couldn’t check for installed editors” when discovery is incomplete or unknown, instead of “No installed editors found”.

Coverage spans shell discovery, launcher caching/retry behavior, server config subscription, and the picker empty state.

Reviewed by Cursor Bugbot for commit 64d5e41. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Keep installed editors visible in server config when editor discovery times out

  • Adds EditorDiscoveryResult (with editors and complete fields) to replace the plain editor array returned by resolveAvailableEditors in externalLauncher.ts.
  • Introduces discoverAvailableCommands in shell.ts: a platform-aware, timeout-bounded bulk command scanner that returns partial results with a complete flag instead of failing on timeout.
  • Caches complete discoveries for 1 minute; incomplete or failed discoveries are not cached, and the last known complete editor list is preserved on incomplete refreshes.
  • On incomplete discovery, subscribeServerConfig in ws.ts schedules a retry after 1s and emits a refreshed ServerConfig snapshot, propagating availableEditorsComplete to clients.
  • The OpenInPicker UI in OpenInPicker.tsx now shows "Couldn't check for installed editors" when discovery is incomplete, versus "No installed editors found" when it is complete.

Macroscope summarized 64d5e41.

@coderabbitai

coderabbitaiBot commented Jul 30, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: d7839a3b-c087-4823-9ae2-62d405e19537

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actionsgithub-actionsBot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:L 100-499 changed lines (additions + deletions). labels Jul 30, 2026
Comment threadapps/server/src/process/externalLauncher.ts Outdated
@macroscopeapp

macroscopeappBot commented Jul 30, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

This PR introduces new timeout handling, caching, and retry logic for editor discovery - significant runtime behavior changes. An unresolved review comment identifies that retry failures in the discovery stream could terminate the entire config subscription, which warrants human review.

You can customize Macroscope's approvability policy. Learn more.

@eeinarsson
eeinarssonforce-pushed the fix/issue-4697-editor-discovery branch from 8c9c656 to feb5302CompareJuly 30, 2026 10:16

@macroscopeappmacroscopeappBot 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.

One finding on Effect dependency acquisition: the new Windows discovery path reads process.env directly instead of the HostProcessEnvironment reference already used elsewhere in this module.

Posted via Macroscope — Effect Service Conventions

Comment threadpackages/shared/src/shell.ts Outdated
Comment threadpackages/shared/src/shell.ts Outdated
@eeinarssoneeinarsson changed the title Keep installed editors visible when discovery times outfix(server): keep installed editors visible when discovery times outJul 30, 2026
@eeinarsson
eeinarssonforce-pushed the fix/issue-4697-editor-discovery branch 3 times, most recently from e058e19 to 8c0a223CompareAugust 6, 2026 11:34
Comment threadapps/server/src/ws.ts
Bound editor discovery, preserve partial and last-known results, retry incomplete scans through the config stream, and distinguish incomplete discovery from a complete empty result in the picker.
@eeinarsson
eeinarssonforce-pushed the fix/issue-4697-editor-discovery branch from 8c0a223 to 64d5e41CompareAugust 6, 2026 11:48

@cursorcursorBot 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.

Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 64d5e41. Configure here.

Comment threadapps/server/src/ws.ts
);
editorDiscoveryRetry,
Stream.merge(keybindingsUpdates, Stream.merge(providerStatuses, settingsUpdates)),
).pipe(Stream.mapAccum(() => initialConfig, projectServerConfigLiveEvent));

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.

Retry failure kills config stream

Medium Severity

The incomplete-discovery retry is merged into the live subscribeServerConfig stream without isolating failures. Stream.merge propagates errors from either side immediately, so a defect or unexpected failure from resolveAvailableEditors after the initial snapshot terminates settings, keybindings, and provider updates for that subscription. Nearby provider refresh already uses ignoreCause, and launcher tests cover discovery defects, but this retry path does not.

Fix in CursorFix in Web

Reviewed by Cursor Bugbot for commit 64d5e41. Configure here.

@eeinarsson

Copy link
Copy Markdown
ContributorAuthor

Closing as superseded by #5561. I verified on Windows 11 with the latest nightly that the editor dropdown now works correctly without this PR.

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

Labels

size:L100-499 changed lines (additions + deletions).vouch:unvouchedPR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug]: No installed editors found

1 participant

@eeinarsson
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

fix(server): keep installed editors visible when discovery times out - #4956

Closed
eeinarsson wants to merge 1 commit into
pingdotgg:mainfrom
eeinarsson:fix/issue-4697-editor-discovery
Closed

fix(server): keep installed editors visible when discovery times out#4956
eeinarsson wants to merge 1 commit into
pingdotgg:mainfrom
eeinarsson:fix/issue-4697-editor-discovery

Conversation

@eeinarsson

@eeinarssoneeinarsson commented Jul 30, 2026

Copy link
Copy Markdown
Contributor

What Changed

  • made Windows editor discovery bounded and concurrent while preserving partial successes
  • retained last-known editors when a discovery attempt is incomplete
  • added an optional completion signal and one retry through the existing config snapshot stream
  • added focused shell, launcher, server, and picker coverage

Why

Editor discovery could exceed the server config timeout and discard editors already found, causing clients to incorrectly show “No installed editors found.”

The optional completion field and existing snapshot event keep this compatible across mixed client/server versions.

Fixes#4697.

Related approaches: #4739 and #4435. Complementary command-probe performance work: #4778.

UI Changes

Before:
image

After:
image

Checklist

  • This PR is small and focused
  • I explained what changed and why
  • I included before/after screenshots for any UI changes
  • No animation or interaction changes require a video

Note

Medium Risk
Touches server config streaming and cross-platform command discovery with new timeout/partial-result semantics; behavior is well tested but affects what clients show for editor availability.

Overview
Editor discovery no longer collapses to an empty list when probes time out or stall. discoverAvailableCommands in shared shell code runs bounded, concurrent PATH checks and returns { available, complete }. ExternalLauncher.resolveAvailableEditors now returns { editors, complete }, merges partial results with the last known complete list, and only caches successful complete discoveries.

ServerConfig adds optional availableEditorsComplete. The websocket config stream keeps that flag on snapshots, schedules a 1s retry when the initial load is incomplete, and folds retries into live updates without clobbering settings/keybinding events. OpenInPicker shows “Couldn’t check for installed editors” when discovery is incomplete or unknown, instead of “No installed editors found”.

Coverage spans shell discovery, launcher caching/retry behavior, server config subscription, and the picker empty state.

Reviewed by Cursor Bugbot for commit 64d5e41. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Keep installed editors visible in server config when editor discovery times out

  • Adds EditorDiscoveryResult (with editors and complete fields) to replace the plain editor array returned by resolveAvailableEditors in externalLauncher.ts.
  • Introduces discoverAvailableCommands in shell.ts: a platform-aware, timeout-bounded bulk command scanner that returns partial results with a complete flag instead of failing on timeout.
  • Caches complete discoveries for 1 minute; incomplete or failed discoveries are not cached, and the last known complete editor list is preserved on incomplete refreshes.
  • On incomplete discovery, subscribeServerConfig in ws.ts schedules a retry after 1s and emits a refreshed ServerConfig snapshot, propagating availableEditorsComplete to clients.
  • The OpenInPicker UI in OpenInPicker.tsx now shows "Couldn't check for installed editors" when discovery is incomplete, versus "No installed editors found" when it is complete.

Macroscope summarized 64d5e41.

@coderabbitai

coderabbitaiBot commented Jul 30, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: d7839a3b-c087-4823-9ae2-62d405e19537

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actionsgithub-actionsBot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:L 100-499 changed lines (additions + deletions). labels Jul 30, 2026
Comment threadapps/server/src/process/externalLauncher.ts Outdated
@macroscopeapp

macroscopeappBot commented Jul 30, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

This PR introduces new timeout handling, caching, and retry logic for editor discovery - significant runtime behavior changes. An unresolved review comment identifies that retry failures in the discovery stream could terminate the entire config subscription, which warrants human review.

You can customize Macroscope's approvability policy. Learn more.

@eeinarsson
eeinarssonforce-pushed the fix/issue-4697-editor-discovery branch from 8c9c656 to feb5302CompareJuly 30, 2026 10:16

@macroscopeappmacroscopeappBot 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.

One finding on Effect dependency acquisition: the new Windows discovery path reads process.env directly instead of the HostProcessEnvironment reference already used elsewhere in this module.

Posted via Macroscope — Effect Service Conventions

Comment threadpackages/shared/src/shell.ts Outdated
Comment threadpackages/shared/src/shell.ts Outdated
@eeinarssoneeinarsson changed the title Keep installed editors visible when discovery times outfix(server): keep installed editors visible when discovery times outJul 30, 2026
@eeinarsson
eeinarssonforce-pushed the fix/issue-4697-editor-discovery branch 3 times, most recently from e058e19 to 8c0a223CompareAugust 6, 2026 11:34
Comment threadapps/server/src/ws.ts
Bound editor discovery, preserve partial and last-known results, retry incomplete scans through the config stream, and distinguish incomplete discovery from a complete empty result in the picker.
@eeinarsson
eeinarssonforce-pushed the fix/issue-4697-editor-discovery branch from 8c0a223 to 64d5e41CompareAugust 6, 2026 11:48

@cursorcursorBot 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.

Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 64d5e41. Configure here.

Comment threadapps/server/src/ws.ts
);
editorDiscoveryRetry,
Stream.merge(keybindingsUpdates, Stream.merge(providerStatuses, settingsUpdates)),
).pipe(Stream.mapAccum(() => initialConfig, projectServerConfigLiveEvent));

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.

Retry failure kills config stream

Medium Severity

The incomplete-discovery retry is merged into the live subscribeServerConfig stream without isolating failures. Stream.merge propagates errors from either side immediately, so a defect or unexpected failure from resolveAvailableEditors after the initial snapshot terminates settings, keybindings, and provider updates for that subscription. Nearby provider refresh already uses ignoreCause, and launcher tests cover discovery defects, but this retry path does not.

Fix in CursorFix in Web

Reviewed by Cursor Bugbot for commit 64d5e41. Configure here.

@eeinarsson

Copy link
Copy Markdown
ContributorAuthor

Closing as superseded by #5561. I verified on Windows 11 with the latest nightly that the editor dropdown now works correctly without this PR.

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

Labels

size:L100-499 changed lines (additions + deletions).vouch:unvouchedPR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug]: No installed editors found

1 participant

@eeinarsson
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

fix(server): keep installed editors visible when discovery times out - #4956

Closed
eeinarsson wants to merge 1 commit into
pingdotgg:mainfrom
eeinarsson:fix/issue-4697-editor-discovery
Closed

fix(server): keep installed editors visible when discovery times out#4956
eeinarsson wants to merge 1 commit into
pingdotgg:mainfrom
eeinarsson:fix/issue-4697-editor-discovery

Conversation

@eeinarsson

@eeinarssoneeinarsson commented Jul 30, 2026

Copy link
Copy Markdown
Contributor

What Changed

  • made Windows editor discovery bounded and concurrent while preserving partial successes
  • retained last-known editors when a discovery attempt is incomplete
  • added an optional completion signal and one retry through the existing config snapshot stream
  • added focused shell, launcher, server, and picker coverage

Why

Editor discovery could exceed the server config timeout and discard editors already found, causing clients to incorrectly show “No installed editors found.”

The optional completion field and existing snapshot event keep this compatible across mixed client/server versions.

Fixes#4697.

Related approaches: #4739 and #4435. Complementary command-probe performance work: #4778.

UI Changes

Before:
image

After:
image

Checklist

  • This PR is small and focused
  • I explained what changed and why
  • I included before/after screenshots for any UI changes
  • No animation or interaction changes require a video

Note

Medium Risk
Touches server config streaming and cross-platform command discovery with new timeout/partial-result semantics; behavior is well tested but affects what clients show for editor availability.

Overview
Editor discovery no longer collapses to an empty list when probes time out or stall. discoverAvailableCommands in shared shell code runs bounded, concurrent PATH checks and returns { available, complete }. ExternalLauncher.resolveAvailableEditors now returns { editors, complete }, merges partial results with the last known complete list, and only caches successful complete discoveries.

ServerConfig adds optional availableEditorsComplete. The websocket config stream keeps that flag on snapshots, schedules a 1s retry when the initial load is incomplete, and folds retries into live updates without clobbering settings/keybinding events. OpenInPicker shows “Couldn’t check for installed editors” when discovery is incomplete or unknown, instead of “No installed editors found”.

Coverage spans shell discovery, launcher caching/retry behavior, server config subscription, and the picker empty state.

Reviewed by Cursor Bugbot for commit 64d5e41. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Keep installed editors visible in server config when editor discovery times out

  • Adds EditorDiscoveryResult (with editors and complete fields) to replace the plain editor array returned by resolveAvailableEditors in externalLauncher.ts.
  • Introduces discoverAvailableCommands in shell.ts: a platform-aware, timeout-bounded bulk command scanner that returns partial results with a complete flag instead of failing on timeout.
  • Caches complete discoveries for 1 minute; incomplete or failed discoveries are not cached, and the last known complete editor list is preserved on incomplete refreshes.
  • On incomplete discovery, subscribeServerConfig in ws.ts schedules a retry after 1s and emits a refreshed ServerConfig snapshot, propagating availableEditorsComplete to clients.
  • The OpenInPicker UI in OpenInPicker.tsx now shows "Couldn't check for installed editors" when discovery is incomplete, versus "No installed editors found" when it is complete.

Macroscope summarized 64d5e41.

@coderabbitai

coderabbitaiBot commented Jul 30, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: d7839a3b-c087-4823-9ae2-62d405e19537

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actionsgithub-actionsBot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:L 100-499 changed lines (additions + deletions). labels Jul 30, 2026
Comment threadapps/server/src/process/externalLauncher.ts Outdated
@macroscopeapp

macroscopeappBot commented Jul 30, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

This PR introduces new timeout handling, caching, and retry logic for editor discovery - significant runtime behavior changes. An unresolved review comment identifies that retry failures in the discovery stream could terminate the entire config subscription, which warrants human review.

You can customize Macroscope's approvability policy. Learn more.

@eeinarsson
eeinarssonforce-pushed the fix/issue-4697-editor-discovery branch from 8c9c656 to feb5302CompareJuly 30, 2026 10:16

@macroscopeappmacroscopeappBot 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.

One finding on Effect dependency acquisition: the new Windows discovery path reads process.env directly instead of the HostProcessEnvironment reference already used elsewhere in this module.

Posted via Macroscope — Effect Service Conventions

Comment threadpackages/shared/src/shell.ts Outdated
Comment threadpackages/shared/src/shell.ts Outdated
@eeinarssoneeinarsson changed the title Keep installed editors visible when discovery times outfix(server): keep installed editors visible when discovery times outJul 30, 2026
@eeinarsson
eeinarssonforce-pushed the fix/issue-4697-editor-discovery branch 3 times, most recently from e058e19 to 8c0a223CompareAugust 6, 2026 11:34
Comment threadapps/server/src/ws.ts
Bound editor discovery, preserve partial and last-known results, retry incomplete scans through the config stream, and distinguish incomplete discovery from a complete empty result in the picker.
@eeinarsson
eeinarssonforce-pushed the fix/issue-4697-editor-discovery branch from 8c0a223 to 64d5e41CompareAugust 6, 2026 11:48

@cursorcursorBot 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.

Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 64d5e41. Configure here.

Comment threadapps/server/src/ws.ts
);
editorDiscoveryRetry,
Stream.merge(keybindingsUpdates, Stream.merge(providerStatuses, settingsUpdates)),
).pipe(Stream.mapAccum(() => initialConfig, projectServerConfigLiveEvent));

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.

Retry failure kills config stream

Medium Severity

The incomplete-discovery retry is merged into the live subscribeServerConfig stream without isolating failures. Stream.merge propagates errors from either side immediately, so a defect or unexpected failure from resolveAvailableEditors after the initial snapshot terminates settings, keybindings, and provider updates for that subscription. Nearby provider refresh already uses ignoreCause, and launcher tests cover discovery defects, but this retry path does not.

Fix in CursorFix in Web

Reviewed by Cursor Bugbot for commit 64d5e41. Configure here.

@eeinarsson

Copy link
Copy Markdown
ContributorAuthor

Closing as superseded by #5561. I verified on Windows 11 with the latest nightly that the editor dropdown now works correctly without this PR.

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

Labels

size:L100-499 changed lines (additions + deletions).vouch:unvouchedPR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug]: No installed editors found

1 participant

@eeinarsson
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

fix(server): keep installed editors visible when discovery times out - #4956

Closed
eeinarsson wants to merge 1 commit into
pingdotgg:mainfrom
eeinarsson:fix/issue-4697-editor-discovery
Closed

fix(server): keep installed editors visible when discovery times out#4956
eeinarsson wants to merge 1 commit into
pingdotgg:mainfrom
eeinarsson:fix/issue-4697-editor-discovery

Conversation

@eeinarsson

@eeinarssoneeinarsson commented Jul 30, 2026

Copy link
Copy Markdown
Contributor

What Changed

  • made Windows editor discovery bounded and concurrent while preserving partial successes
  • retained last-known editors when a discovery attempt is incomplete
  • added an optional completion signal and one retry through the existing config snapshot stream
  • added focused shell, launcher, server, and picker coverage

Why

Editor discovery could exceed the server config timeout and discard editors already found, causing clients to incorrectly show “No installed editors found.”

The optional completion field and existing snapshot event keep this compatible across mixed client/server versions.

Fixes#4697.

Related approaches: #4739 and #4435. Complementary command-probe performance work: #4778.

UI Changes

Before:
image

After:
image

Checklist

  • This PR is small and focused
  • I explained what changed and why
  • I included before/after screenshots for any UI changes
  • No animation or interaction changes require a video

Note

Medium Risk
Touches server config streaming and cross-platform command discovery with new timeout/partial-result semantics; behavior is well tested but affects what clients show for editor availability.

Overview
Editor discovery no longer collapses to an empty list when probes time out or stall. discoverAvailableCommands in shared shell code runs bounded, concurrent PATH checks and returns { available, complete }. ExternalLauncher.resolveAvailableEditors now returns { editors, complete }, merges partial results with the last known complete list, and only caches successful complete discoveries.

ServerConfig adds optional availableEditorsComplete. The websocket config stream keeps that flag on snapshots, schedules a 1s retry when the initial load is incomplete, and folds retries into live updates without clobbering settings/keybinding events. OpenInPicker shows “Couldn’t check for installed editors” when discovery is incomplete or unknown, instead of “No installed editors found”.

Coverage spans shell discovery, launcher caching/retry behavior, server config subscription, and the picker empty state.

Reviewed by Cursor Bugbot for commit 64d5e41. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Keep installed editors visible in server config when editor discovery times out

  • Adds EditorDiscoveryResult (with editors and complete fields) to replace the plain editor array returned by resolveAvailableEditors in externalLauncher.ts.
  • Introduces discoverAvailableCommands in shell.ts: a platform-aware, timeout-bounded bulk command scanner that returns partial results with a complete flag instead of failing on timeout.
  • Caches complete discoveries for 1 minute; incomplete or failed discoveries are not cached, and the last known complete editor list is preserved on incomplete refreshes.
  • On incomplete discovery, subscribeServerConfig in ws.ts schedules a retry after 1s and emits a refreshed ServerConfig snapshot, propagating availableEditorsComplete to clients.
  • The OpenInPicker UI in OpenInPicker.tsx now shows "Couldn't check for installed editors" when discovery is incomplete, versus "No installed editors found" when it is complete.

Macroscope summarized 64d5e41.

@coderabbitai

coderabbitaiBot commented Jul 30, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: d7839a3b-c087-4823-9ae2-62d405e19537

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actionsgithub-actionsBot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:L 100-499 changed lines (additions + deletions). labels Jul 30, 2026
Comment threadapps/server/src/process/externalLauncher.ts Outdated
@macroscopeapp

macroscopeappBot commented Jul 30, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

This PR introduces new timeout handling, caching, and retry logic for editor discovery - significant runtime behavior changes. An unresolved review comment identifies that retry failures in the discovery stream could terminate the entire config subscription, which warrants human review.

You can customize Macroscope's approvability policy. Learn more.

@eeinarsson
eeinarssonforce-pushed the fix/issue-4697-editor-discovery branch from 8c9c656 to feb5302CompareJuly 30, 2026 10:16

@macroscopeappmacroscopeappBot 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.

One finding on Effect dependency acquisition: the new Windows discovery path reads process.env directly instead of the HostProcessEnvironment reference already used elsewhere in this module.

Posted via Macroscope — Effect Service Conventions

Comment threadpackages/shared/src/shell.ts Outdated
Comment threadpackages/shared/src/shell.ts Outdated
@eeinarssoneeinarsson changed the title Keep installed editors visible when discovery times outfix(server): keep installed editors visible when discovery times outJul 30, 2026
@eeinarsson
eeinarssonforce-pushed the fix/issue-4697-editor-discovery branch 3 times, most recently from e058e19 to 8c0a223CompareAugust 6, 2026 11:34
Comment threadapps/server/src/ws.ts
Bound editor discovery, preserve partial and last-known results, retry incomplete scans through the config stream, and distinguish incomplete discovery from a complete empty result in the picker.
@eeinarsson
eeinarssonforce-pushed the fix/issue-4697-editor-discovery branch from 8c0a223 to 64d5e41CompareAugust 6, 2026 11:48

@cursorcursorBot 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.

Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 64d5e41. Configure here.

Comment threadapps/server/src/ws.ts
);
editorDiscoveryRetry,
Stream.merge(keybindingsUpdates, Stream.merge(providerStatuses, settingsUpdates)),
).pipe(Stream.mapAccum(() => initialConfig, projectServerConfigLiveEvent));

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.

Retry failure kills config stream

Medium Severity

The incomplete-discovery retry is merged into the live subscribeServerConfig stream without isolating failures. Stream.merge propagates errors from either side immediately, so a defect or unexpected failure from resolveAvailableEditors after the initial snapshot terminates settings, keybindings, and provider updates for that subscription. Nearby provider refresh already uses ignoreCause, and launcher tests cover discovery defects, but this retry path does not.

Fix in CursorFix in Web

Reviewed by Cursor Bugbot for commit 64d5e41. Configure here.

@eeinarsson

Copy link
Copy Markdown
ContributorAuthor

Closing as superseded by #5561. I verified on Windows 11 with the latest nightly that the editor dropdown now works correctly without this PR.

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

Labels

size:L100-499 changed lines (additions + deletions).vouch:unvouchedPR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug]: No installed editors found

1 participant

@eeinarsson