Fix Windows PATH hydration and repair - #1729

Merged
juliusmarminge merged 9 commits into
pingdotgg:mainfrom
Badbird5907:fix/windows-path-support-pr
Apr 17, 2026
Merged

Fix Windows PATH hydration and repair#1729
juliusmarminge merged 9 commits into
pingdotgg:mainfrom
Badbird5907:fix/windows-path-support-pr

Conversation

@Badbird5907

@Badbird5907Badbird5907 commented Apr 4, 2026

Copy link
Copy Markdown
Contributor
  • hydrate desktop and server PATH handling for Windows CLI tools
  • probe shells without profiles first, then fall back to profile-loaded env when node is missing
  • share command availability and PATH repair utilities across desktop and server

What Changed

  • Added a Windows startup fallback that loads the user’s PowerShell profile only when the initial no-profile environment still cannot find node
  • Made Windows environment repair update the full set of relevant environment variables, not just PATH
  • This only affects the packaged Windows .exe startup path and does not affect running the CLI from an existing shell, such as npx t3

Why

This adds support for windows setups using environment managers like fnm that initialize node through the user's powershell profile instead of PATH.
I was also able to confirm this still works on systems with a stock node setup.

Before:
image

After:
image

UI Changes

Checklist

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

Note

Medium Risk
Changes Windows environment hydration and terminal shell selection, which can affect process spawning and tool discovery at runtime (especially in packaged apps). Risk is moderate due to cross-platform branching and reliance on PowerShell probing, but changes are well-covered by new tests.

Overview
Improves Windows startup environment repair by adding shared utilities in @t3tools/shared/shell to probe PowerShell for env vars, merge/dedupe PATH (including known CLI install dirs), and only load the user profile when node still isn’t resolvable (also capturing FNM_* vars).

Wires the Windows repair path into app entrypoints: apps/desktopsyncShellEnvironment and apps/serverfixPath now apply the full env patch on win32 and return early; unsupported platforms remain no-ops.

Adjusts Windows terminal spawning behavior: terminal manager now prefers pwsh.exe (with -NoLogo) and falls back through absolute Windows PowerShell and cmd.exe, with tests updated/added; PTY adapter now wraps spawn failures as structured PtySpawnError.

Centralizes command availability + build tweaks: isCommandAvailable is moved to shared shell utils and re-exported from server/open, and the desktop artifact build on Windows disables npmRebuild, disables signing/editing when unsigned, and uses bun install --omit optional plus a fallback-installed electron-builder invocation.

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

Note

Fix Windows PATH hydration and shell environment repair for desktop and server

Macroscope summarized 0bafdb6.

- hydrate desktop and server PATH handling for Windows CLI tools
- probe shells without profiles first, then fall back to profile-loaded env when node is missing
- share command availability and PATH repair utilities across desktop and server
@coderabbitai

coderabbitaiBot commented Apr 4, 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

Run ID: e332b4c3-d8f7-4ca5-a485-df3617a1073b

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
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

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 and usage tips.

@github-actionsgithub-actionsBot added size:L 100-499 changed lines (additions + deletions). vouch:unvouched PR author is not yet trusted in the VOUCHED list. labels Apr 4, 2026

@chatgpt-codex-connectorchatgpt-codex-connectorBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit:32efe2a5dd

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment threadpackages/shared/src/shell.ts
Comment threadpackages/shared/src/shell.ts
Comment threadpackages/shared/src/shell.ts Outdated
- Normalize captured shell output by trimming `\r\n` around extracted values
- Add coverage for Windows PowerShell env parsing
@github-actionsgithub-actionsBot added size:XL 500-999 changed lines (additions + deletions). and removed size:L 100-499 changed lines (additions + deletions). labels Apr 4, 2026
- Remove redundant node availability probe
- Return the profiled patch directly when present
@github-actionsgithub-actionsBot added size:L 100-499 changed lines (additions + deletions). and removed size:XL 500-999 changed lines (additions + deletions). labels Apr 4, 2026
@macroscopeapp

macroscopeappBot commented Apr 4, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

This PR introduces new Windows platform functionality including PATH hydration from PowerShell, shell preference changes (pwsh.exe over cmd.exe), and profile loading for fnm support. These are significant runtime behavior changes on Windows that warrant human review despite comprehensive test coverage.

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

@juliusmarmingejuliusmarminge left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Thank you! Will test on my windows laptop in a bit 👀

Comment threadpackages/shared/src/shell.ts Outdated
Comment threadpackages/shared/src/shell.ts
@Badbird5907

Copy link
Copy Markdown
ContributorAuthor

Thank you! Will test on my windows laptop in a bit 👀

Thanks! I forgot to mention that this issue only happens in the .exe distribution, npx t3 isn't affected as it inherits the PATH from the existing shell

@github-actionsgithub-actionsBot added size:XL 500-999 changed lines (additions + deletions). and removed size:L 100-499 changed lines (additions + deletions). labels Apr 16, 2026
Badbird5907and others added 2 commits April 16, 2026 16:59
…ndows-path-support-pr
# Conflicts:
#	apps/desktop/src/syncShellEnvironment.ts
#	packages/shared/src/shell.test.ts

@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 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 42c7cd5. Configure here.

}

return merged.length > 0 ? merged.join(delimiter) : undefined;
}

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.

New mergePathValues nearly duplicates existing mergePathEntries

Low Severity

The new mergePathValues function has nearly identical structure to the existing mergePathEntries — both split by a platform delimiter, deduplicate, and rejoin. The only meaningful difference is the comparison strategy: mergePathEntries compares trimmed entries directly, while mergePathValues normalizes via normalizePathEntryForComparison (case-insensitive on win32, quote-stripping). These could be consolidated into a single function parameterized by comparison strategy, reducing duplication and the risk of inconsistent future fixes.

Additional Locations (1)
Fix in CursorFix in Web

Reviewed by Cursor Bugbot for commit 42c7cd5. Configure here.

- Prefer PowerShell on Windows and add fallbacks for pwsh, PowerShell, and cmd
- Thread platform/env through terminal manager for deterministic tests
- Wrap node-pty spawn failures in PtySpawnError
- Disable Windows npm rebuild and executable editing during packaging
- Install production deps without optional packages
- Invoke electron-builder through `bun x --install=fallback`
@juliusmarminge
juliusmarminge enabled auto-merge (squash) April 17, 2026 06:09
aaditagrawal added a commit to aaditagrawal/t3code that referenced this pull request Apr 18, 2026
Integrates upstream/main (9df3c64) on top of fork's main (9602c18).
Upstream features adopted:
- Claude Opus 4.5 and 4.7 built-in models (pingdotgg#2072, pingdotgg#2143)
- Node-native TypeScript migration across desktop/server (pingdotgg#2098)
- Configurable project grouping with client-settings overrides (pingdotgg#2055, pingdotgg#2099)
- Thread status in command palette (pingdotgg#2107)
- Responsive composer / plan sidebar on narrow windows (pingdotgg#1198)
- Capture-phase CTRL+J keydown for Windows terminal toggle (pingdotgg#2113/pingdotgg#2142)
- Bypass xterm for global terminal shortcuts (pingdotgg#1580)
- Windows ARM build target (pingdotgg#2080)
- Windows PATH hydration + repair (pingdotgg#1729)
- Gitignore-aware workspace search (pingdotgg#2078)
- Claude process leak fix + stale session monitoring (pingdotgg#2042)
- Preserve provider bindings when stopping sessions (pingdotgg#2084)
- Clean up invalid pending-approval projections (pingdotgg#2106) — new migration
- Extract backend startup readiness coordination
- Drop stale text-gen options on reset (pingdotgg#2076)
- Extend negative repository identity cache TTL (pingdotgg#2083)
- Allow deleting non-empty projects from warning toast (pingdotgg#1264)
- Restore defaults only on General settings (pingdotgg#1710)
- Release workflow modernization (blacksmith runners, GitHub App token guards, v0.0.20 version bump)
Fork features preserved:
- All 8 providers (codex, claudeAgent, copilot, cursor, opencode,
geminiCli, amp, kilo) with their adapters, services, and tests
- Fork's custom OpenCode protocol impl in apps/server/src/opencode/ (kept
over upstream's @opencode-ai/sdk-based provider added in pingdotgg#1758 — fork's
version is tested and integrated; upstream's parallel files deleted)
- Fork's direct-CLI Cursor adapter (kept over upstream's new ACP-based
CursorProvider added in pingdotgg#1355 — upstream's parallel files deleted)
- Fork's ProviderRegistry aggregates only codex + claudeAgent snapshots;
the other 6 providers register via ProviderAdapterRegistry
- PROVIDER_CACHE_IDS stays at [codex, claudeAgent] matching what the
registry actually caches
- Migration IDs preserved (fork 23/24/25/26; upstream's new 025 lands at
ID 27 to avoid re-applying on deployed fork DBs)
- Fork's generic per-provider settings (enabled/binaryPath/configDir/
customModels) kept over upstream's opencode-specific serverUrl/password
- Log directory IPC channels, updateInstallInFlight tracking, icon
composer pipeline all preserved
- Fork's simplified release.yml (no npm CLI publish, no nightly infra)
- composerDraftStore normalizeProviderKind widened to accept all 8 kinds
- Dark mode --background set to #0f0f0f
Test status:
- All 9 package typechecks pass
- Lint clean (0 errors)
- Tests: 1877 passed, 15 skipped (incl. 4 historically-flaky GitManager
cross-repo PR selector tests newly gated with TODO for Node-native-TS
follow-up)
MuneerAhmed03 pushed a commit to MuneerAhmed03/t3code that referenced this pull request Apr 26, 2026
Co-authored-by: Julius Marminge <julius0216@outlook.com>
youpele52 referenced this pull request in youpele52/bigbud Jun 17, 2026
Co-authored-by: Julius Marminge <julius0216@outlook.com>
NeilTheFisher pushed a commit to NeilTheFisher/t3code that referenced this pull request Aug 18, 2026
Co-authored-by: Julius Marminge <julius0216@outlook.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XL500-999 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.

2 participants

@Badbird5907@juliusmarminge
, '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 Windows PATH hydration and repair - #1729

Merged
juliusmarminge merged 9 commits into
pingdotgg:mainfrom
Badbird5907:fix/windows-path-support-pr
Apr 17, 2026
Merged

Fix Windows PATH hydration and repair#1729
juliusmarminge merged 9 commits into
pingdotgg:mainfrom
Badbird5907:fix/windows-path-support-pr

Conversation

@Badbird5907

@Badbird5907Badbird5907 commented Apr 4, 2026

Copy link
Copy Markdown
Contributor
  • hydrate desktop and server PATH handling for Windows CLI tools
  • probe shells without profiles first, then fall back to profile-loaded env when node is missing
  • share command availability and PATH repair utilities across desktop and server

What Changed

  • Added a Windows startup fallback that loads the user’s PowerShell profile only when the initial no-profile environment still cannot find node
  • Made Windows environment repair update the full set of relevant environment variables, not just PATH
  • This only affects the packaged Windows .exe startup path and does not affect running the CLI from an existing shell, such as npx t3

Why

This adds support for windows setups using environment managers like fnm that initialize node through the user's powershell profile instead of PATH.
I was also able to confirm this still works on systems with a stock node setup.

Before:
image

After:
image

UI Changes

Checklist

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

Note

Medium Risk
Changes Windows environment hydration and terminal shell selection, which can affect process spawning and tool discovery at runtime (especially in packaged apps). Risk is moderate due to cross-platform branching and reliance on PowerShell probing, but changes are well-covered by new tests.

Overview
Improves Windows startup environment repair by adding shared utilities in @t3tools/shared/shell to probe PowerShell for env vars, merge/dedupe PATH (including known CLI install dirs), and only load the user profile when node still isn’t resolvable (also capturing FNM_* vars).

Wires the Windows repair path into app entrypoints: apps/desktopsyncShellEnvironment and apps/serverfixPath now apply the full env patch on win32 and return early; unsupported platforms remain no-ops.

Adjusts Windows terminal spawning behavior: terminal manager now prefers pwsh.exe (with -NoLogo) and falls back through absolute Windows PowerShell and cmd.exe, with tests updated/added; PTY adapter now wraps spawn failures as structured PtySpawnError.

Centralizes command availability + build tweaks: isCommandAvailable is moved to shared shell utils and re-exported from server/open, and the desktop artifact build on Windows disables npmRebuild, disables signing/editing when unsigned, and uses bun install --omit optional plus a fallback-installed electron-builder invocation.

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

Note

Fix Windows PATH hydration and shell environment repair for desktop and server

Macroscope summarized 0bafdb6.

- hydrate desktop and server PATH handling for Windows CLI tools
- probe shells without profiles first, then fall back to profile-loaded env when node is missing
- share command availability and PATH repair utilities across desktop and server
@coderabbitai

coderabbitaiBot commented Apr 4, 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

Run ID: e332b4c3-d8f7-4ca5-a485-df3617a1073b

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
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

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 and usage tips.

@github-actionsgithub-actionsBot added size:L 100-499 changed lines (additions + deletions). vouch:unvouched PR author is not yet trusted in the VOUCHED list. labels Apr 4, 2026

@chatgpt-codex-connectorchatgpt-codex-connectorBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit:32efe2a5dd

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment threadpackages/shared/src/shell.ts
Comment threadpackages/shared/src/shell.ts
Comment threadpackages/shared/src/shell.ts Outdated
- Normalize captured shell output by trimming `\r\n` around extracted values
- Add coverage for Windows PowerShell env parsing
@github-actionsgithub-actionsBot added size:XL 500-999 changed lines (additions + deletions). and removed size:L 100-499 changed lines (additions + deletions). labels Apr 4, 2026
- Remove redundant node availability probe
- Return the profiled patch directly when present
@github-actionsgithub-actionsBot added size:L 100-499 changed lines (additions + deletions). and removed size:XL 500-999 changed lines (additions + deletions). labels Apr 4, 2026
@macroscopeapp

macroscopeappBot commented Apr 4, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

This PR introduces new Windows platform functionality including PATH hydration from PowerShell, shell preference changes (pwsh.exe over cmd.exe), and profile loading for fnm support. These are significant runtime behavior changes on Windows that warrant human review despite comprehensive test coverage.

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

@juliusmarmingejuliusmarminge left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Thank you! Will test on my windows laptop in a bit 👀

Comment threadpackages/shared/src/shell.ts Outdated
Comment threadpackages/shared/src/shell.ts
@Badbird5907

Copy link
Copy Markdown
ContributorAuthor

Thank you! Will test on my windows laptop in a bit 👀

Thanks! I forgot to mention that this issue only happens in the .exe distribution, npx t3 isn't affected as it inherits the PATH from the existing shell

@github-actionsgithub-actionsBot added size:XL 500-999 changed lines (additions + deletions). and removed size:L 100-499 changed lines (additions + deletions). labels Apr 16, 2026
Badbird5907and others added 2 commits April 16, 2026 16:59
…ndows-path-support-pr
# Conflicts:
#	apps/desktop/src/syncShellEnvironment.ts
#	packages/shared/src/shell.test.ts

@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 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 42c7cd5. Configure here.

}

return merged.length > 0 ? merged.join(delimiter) : undefined;
}

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.

New mergePathValues nearly duplicates existing mergePathEntries

Low Severity

The new mergePathValues function has nearly identical structure to the existing mergePathEntries — both split by a platform delimiter, deduplicate, and rejoin. The only meaningful difference is the comparison strategy: mergePathEntries compares trimmed entries directly, while mergePathValues normalizes via normalizePathEntryForComparison (case-insensitive on win32, quote-stripping). These could be consolidated into a single function parameterized by comparison strategy, reducing duplication and the risk of inconsistent future fixes.

Additional Locations (1)
Fix in CursorFix in Web

Reviewed by Cursor Bugbot for commit 42c7cd5. Configure here.

- Prefer PowerShell on Windows and add fallbacks for pwsh, PowerShell, and cmd
- Thread platform/env through terminal manager for deterministic tests
- Wrap node-pty spawn failures in PtySpawnError
- Disable Windows npm rebuild and executable editing during packaging
- Install production deps without optional packages
- Invoke electron-builder through `bun x --install=fallback`
@juliusmarminge
juliusmarminge enabled auto-merge (squash) April 17, 2026 06:09
aaditagrawal added a commit to aaditagrawal/t3code that referenced this pull request Apr 18, 2026
Integrates upstream/main (9df3c64) on top of fork's main (9602c18).
Upstream features adopted:
- Claude Opus 4.5 and 4.7 built-in models (pingdotgg#2072, pingdotgg#2143)
- Node-native TypeScript migration across desktop/server (pingdotgg#2098)
- Configurable project grouping with client-settings overrides (pingdotgg#2055, pingdotgg#2099)
- Thread status in command palette (pingdotgg#2107)
- Responsive composer / plan sidebar on narrow windows (pingdotgg#1198)
- Capture-phase CTRL+J keydown for Windows terminal toggle (pingdotgg#2113/pingdotgg#2142)
- Bypass xterm for global terminal shortcuts (pingdotgg#1580)
- Windows ARM build target (pingdotgg#2080)
- Windows PATH hydration + repair (pingdotgg#1729)
- Gitignore-aware workspace search (pingdotgg#2078)
- Claude process leak fix + stale session monitoring (pingdotgg#2042)
- Preserve provider bindings when stopping sessions (pingdotgg#2084)
- Clean up invalid pending-approval projections (pingdotgg#2106) — new migration
- Extract backend startup readiness coordination
- Drop stale text-gen options on reset (pingdotgg#2076)
- Extend negative repository identity cache TTL (pingdotgg#2083)
- Allow deleting non-empty projects from warning toast (pingdotgg#1264)
- Restore defaults only on General settings (pingdotgg#1710)
- Release workflow modernization (blacksmith runners, GitHub App token guards, v0.0.20 version bump)
Fork features preserved:
- All 8 providers (codex, claudeAgent, copilot, cursor, opencode,
geminiCli, amp, kilo) with their adapters, services, and tests
- Fork's custom OpenCode protocol impl in apps/server/src/opencode/ (kept
over upstream's @opencode-ai/sdk-based provider added in pingdotgg#1758 — fork's
version is tested and integrated; upstream's parallel files deleted)
- Fork's direct-CLI Cursor adapter (kept over upstream's new ACP-based
CursorProvider added in pingdotgg#1355 — upstream's parallel files deleted)
- Fork's ProviderRegistry aggregates only codex + claudeAgent snapshots;
the other 6 providers register via ProviderAdapterRegistry
- PROVIDER_CACHE_IDS stays at [codex, claudeAgent] matching what the
registry actually caches
- Migration IDs preserved (fork 23/24/25/26; upstream's new 025 lands at
ID 27 to avoid re-applying on deployed fork DBs)
- Fork's generic per-provider settings (enabled/binaryPath/configDir/
customModels) kept over upstream's opencode-specific serverUrl/password
- Log directory IPC channels, updateInstallInFlight tracking, icon
composer pipeline all preserved
- Fork's simplified release.yml (no npm CLI publish, no nightly infra)
- composerDraftStore normalizeProviderKind widened to accept all 8 kinds
- Dark mode --background set to #0f0f0f
Test status:
- All 9 package typechecks pass
- Lint clean (0 errors)
- Tests: 1877 passed, 15 skipped (incl. 4 historically-flaky GitManager
cross-repo PR selector tests newly gated with TODO for Node-native-TS
follow-up)
MuneerAhmed03 pushed a commit to MuneerAhmed03/t3code that referenced this pull request Apr 26, 2026
Co-authored-by: Julius Marminge <julius0216@outlook.com>
youpele52 referenced this pull request in youpele52/bigbud Jun 17, 2026
Co-authored-by: Julius Marminge <julius0216@outlook.com>
NeilTheFisher pushed a commit to NeilTheFisher/t3code that referenced this pull request Aug 18, 2026
Co-authored-by: Julius Marminge <julius0216@outlook.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XL500-999 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.

2 participants

@Badbird5907@juliusmarminge
, '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 Windows PATH hydration and repair - #1729

Merged
juliusmarminge merged 9 commits into
pingdotgg:mainfrom
Badbird5907:fix/windows-path-support-pr
Apr 17, 2026
Merged

Fix Windows PATH hydration and repair#1729
juliusmarminge merged 9 commits into
pingdotgg:mainfrom
Badbird5907:fix/windows-path-support-pr

Conversation

@Badbird5907

@Badbird5907Badbird5907 commented Apr 4, 2026

Copy link
Copy Markdown
Contributor
  • hydrate desktop and server PATH handling for Windows CLI tools
  • probe shells without profiles first, then fall back to profile-loaded env when node is missing
  • share command availability and PATH repair utilities across desktop and server

What Changed

  • Added a Windows startup fallback that loads the user’s PowerShell profile only when the initial no-profile environment still cannot find node
  • Made Windows environment repair update the full set of relevant environment variables, not just PATH
  • This only affects the packaged Windows .exe startup path and does not affect running the CLI from an existing shell, such as npx t3

Why

This adds support for windows setups using environment managers like fnm that initialize node through the user's powershell profile instead of PATH.
I was also able to confirm this still works on systems with a stock node setup.

Before:
image

After:
image

UI Changes

Checklist

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

Note

Medium Risk
Changes Windows environment hydration and terminal shell selection, which can affect process spawning and tool discovery at runtime (especially in packaged apps). Risk is moderate due to cross-platform branching and reliance on PowerShell probing, but changes are well-covered by new tests.

Overview
Improves Windows startup environment repair by adding shared utilities in @t3tools/shared/shell to probe PowerShell for env vars, merge/dedupe PATH (including known CLI install dirs), and only load the user profile when node still isn’t resolvable (also capturing FNM_* vars).

Wires the Windows repair path into app entrypoints: apps/desktopsyncShellEnvironment and apps/serverfixPath now apply the full env patch on win32 and return early; unsupported platforms remain no-ops.

Adjusts Windows terminal spawning behavior: terminal manager now prefers pwsh.exe (with -NoLogo) and falls back through absolute Windows PowerShell and cmd.exe, with tests updated/added; PTY adapter now wraps spawn failures as structured PtySpawnError.

Centralizes command availability + build tweaks: isCommandAvailable is moved to shared shell utils and re-exported from server/open, and the desktop artifact build on Windows disables npmRebuild, disables signing/editing when unsigned, and uses bun install --omit optional plus a fallback-installed electron-builder invocation.

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

Note

Fix Windows PATH hydration and shell environment repair for desktop and server

Macroscope summarized 0bafdb6.

- hydrate desktop and server PATH handling for Windows CLI tools
- probe shells without profiles first, then fall back to profile-loaded env when node is missing
- share command availability and PATH repair utilities across desktop and server
@coderabbitai

coderabbitaiBot commented Apr 4, 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

Run ID: e332b4c3-d8f7-4ca5-a485-df3617a1073b

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
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

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 and usage tips.

@github-actionsgithub-actionsBot added size:L 100-499 changed lines (additions + deletions). vouch:unvouched PR author is not yet trusted in the VOUCHED list. labels Apr 4, 2026

@chatgpt-codex-connectorchatgpt-codex-connectorBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit:32efe2a5dd

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment threadpackages/shared/src/shell.ts
Comment threadpackages/shared/src/shell.ts
Comment threadpackages/shared/src/shell.ts Outdated
- Normalize captured shell output by trimming `\r\n` around extracted values
- Add coverage for Windows PowerShell env parsing
@github-actionsgithub-actionsBot added size:XL 500-999 changed lines (additions + deletions). and removed size:L 100-499 changed lines (additions + deletions). labels Apr 4, 2026
- Remove redundant node availability probe
- Return the profiled patch directly when present
@github-actionsgithub-actionsBot added size:L 100-499 changed lines (additions + deletions). and removed size:XL 500-999 changed lines (additions + deletions). labels Apr 4, 2026
@macroscopeapp

macroscopeappBot commented Apr 4, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

This PR introduces new Windows platform functionality including PATH hydration from PowerShell, shell preference changes (pwsh.exe over cmd.exe), and profile loading for fnm support. These are significant runtime behavior changes on Windows that warrant human review despite comprehensive test coverage.

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

@juliusmarmingejuliusmarminge left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Thank you! Will test on my windows laptop in a bit 👀

Comment threadpackages/shared/src/shell.ts Outdated
Comment threadpackages/shared/src/shell.ts
@Badbird5907

Copy link
Copy Markdown
ContributorAuthor

Thank you! Will test on my windows laptop in a bit 👀

Thanks! I forgot to mention that this issue only happens in the .exe distribution, npx t3 isn't affected as it inherits the PATH from the existing shell

@github-actionsgithub-actionsBot added size:XL 500-999 changed lines (additions + deletions). and removed size:L 100-499 changed lines (additions + deletions). labels Apr 16, 2026
Badbird5907and others added 2 commits April 16, 2026 16:59
…ndows-path-support-pr
# Conflicts:
#	apps/desktop/src/syncShellEnvironment.ts
#	packages/shared/src/shell.test.ts

@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 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 42c7cd5. Configure here.

}

return merged.length > 0 ? merged.join(delimiter) : undefined;
}

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.

New mergePathValues nearly duplicates existing mergePathEntries

Low Severity

The new mergePathValues function has nearly identical structure to the existing mergePathEntries — both split by a platform delimiter, deduplicate, and rejoin. The only meaningful difference is the comparison strategy: mergePathEntries compares trimmed entries directly, while mergePathValues normalizes via normalizePathEntryForComparison (case-insensitive on win32, quote-stripping). These could be consolidated into a single function parameterized by comparison strategy, reducing duplication and the risk of inconsistent future fixes.

Additional Locations (1)
Fix in CursorFix in Web

Reviewed by Cursor Bugbot for commit 42c7cd5. Configure here.

- Prefer PowerShell on Windows and add fallbacks for pwsh, PowerShell, and cmd
- Thread platform/env through terminal manager for deterministic tests
- Wrap node-pty spawn failures in PtySpawnError
- Disable Windows npm rebuild and executable editing during packaging
- Install production deps without optional packages
- Invoke electron-builder through `bun x --install=fallback`
@juliusmarminge
juliusmarminge enabled auto-merge (squash) April 17, 2026 06:09
aaditagrawal added a commit to aaditagrawal/t3code that referenced this pull request Apr 18, 2026
Integrates upstream/main (9df3c64) on top of fork's main (9602c18).
Upstream features adopted:
- Claude Opus 4.5 and 4.7 built-in models (pingdotgg#2072, pingdotgg#2143)
- Node-native TypeScript migration across desktop/server (pingdotgg#2098)
- Configurable project grouping with client-settings overrides (pingdotgg#2055, pingdotgg#2099)
- Thread status in command palette (pingdotgg#2107)
- Responsive composer / plan sidebar on narrow windows (pingdotgg#1198)
- Capture-phase CTRL+J keydown for Windows terminal toggle (pingdotgg#2113/pingdotgg#2142)
- Bypass xterm for global terminal shortcuts (pingdotgg#1580)
- Windows ARM build target (pingdotgg#2080)
- Windows PATH hydration + repair (pingdotgg#1729)
- Gitignore-aware workspace search (pingdotgg#2078)
- Claude process leak fix + stale session monitoring (pingdotgg#2042)
- Preserve provider bindings when stopping sessions (pingdotgg#2084)
- Clean up invalid pending-approval projections (pingdotgg#2106) — new migration
- Extract backend startup readiness coordination
- Drop stale text-gen options on reset (pingdotgg#2076)
- Extend negative repository identity cache TTL (pingdotgg#2083)
- Allow deleting non-empty projects from warning toast (pingdotgg#1264)
- Restore defaults only on General settings (pingdotgg#1710)
- Release workflow modernization (blacksmith runners, GitHub App token guards, v0.0.20 version bump)
Fork features preserved:
- All 8 providers (codex, claudeAgent, copilot, cursor, opencode,
geminiCli, amp, kilo) with their adapters, services, and tests
- Fork's custom OpenCode protocol impl in apps/server/src/opencode/ (kept
over upstream's @opencode-ai/sdk-based provider added in pingdotgg#1758 — fork's
version is tested and integrated; upstream's parallel files deleted)
- Fork's direct-CLI Cursor adapter (kept over upstream's new ACP-based
CursorProvider added in pingdotgg#1355 — upstream's parallel files deleted)
- Fork's ProviderRegistry aggregates only codex + claudeAgent snapshots;
the other 6 providers register via ProviderAdapterRegistry
- PROVIDER_CACHE_IDS stays at [codex, claudeAgent] matching what the
registry actually caches
- Migration IDs preserved (fork 23/24/25/26; upstream's new 025 lands at
ID 27 to avoid re-applying on deployed fork DBs)
- Fork's generic per-provider settings (enabled/binaryPath/configDir/
customModels) kept over upstream's opencode-specific serverUrl/password
- Log directory IPC channels, updateInstallInFlight tracking, icon
composer pipeline all preserved
- Fork's simplified release.yml (no npm CLI publish, no nightly infra)
- composerDraftStore normalizeProviderKind widened to accept all 8 kinds
- Dark mode --background set to #0f0f0f
Test status:
- All 9 package typechecks pass
- Lint clean (0 errors)
- Tests: 1877 passed, 15 skipped (incl. 4 historically-flaky GitManager
cross-repo PR selector tests newly gated with TODO for Node-native-TS
follow-up)
MuneerAhmed03 pushed a commit to MuneerAhmed03/t3code that referenced this pull request Apr 26, 2026
Co-authored-by: Julius Marminge <julius0216@outlook.com>
youpele52 referenced this pull request in youpele52/bigbud Jun 17, 2026
Co-authored-by: Julius Marminge <julius0216@outlook.com>
NeilTheFisher pushed a commit to NeilTheFisher/t3code that referenced this pull request Aug 18, 2026
Co-authored-by: Julius Marminge <julius0216@outlook.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XL500-999 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.

2 participants

@Badbird5907@juliusmarminge
, '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 Windows PATH hydration and repair - #1729

Merged
juliusmarminge merged 9 commits into
pingdotgg:mainfrom
Badbird5907:fix/windows-path-support-pr
Apr 17, 2026
Merged

Fix Windows PATH hydration and repair#1729
juliusmarminge merged 9 commits into
pingdotgg:mainfrom
Badbird5907:fix/windows-path-support-pr

Conversation

@Badbird5907

@Badbird5907Badbird5907 commented Apr 4, 2026

Copy link
Copy Markdown
Contributor
  • hydrate desktop and server PATH handling for Windows CLI tools
  • probe shells without profiles first, then fall back to profile-loaded env when node is missing
  • share command availability and PATH repair utilities across desktop and server

What Changed

  • Added a Windows startup fallback that loads the user’s PowerShell profile only when the initial no-profile environment still cannot find node
  • Made Windows environment repair update the full set of relevant environment variables, not just PATH
  • This only affects the packaged Windows .exe startup path and does not affect running the CLI from an existing shell, such as npx t3

Why

This adds support for windows setups using environment managers like fnm that initialize node through the user's powershell profile instead of PATH.
I was also able to confirm this still works on systems with a stock node setup.

Before:
image

After:
image

UI Changes

Checklist

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

Note

Medium Risk
Changes Windows environment hydration and terminal shell selection, which can affect process spawning and tool discovery at runtime (especially in packaged apps). Risk is moderate due to cross-platform branching and reliance on PowerShell probing, but changes are well-covered by new tests.

Overview
Improves Windows startup environment repair by adding shared utilities in @t3tools/shared/shell to probe PowerShell for env vars, merge/dedupe PATH (including known CLI install dirs), and only load the user profile when node still isn’t resolvable (also capturing FNM_* vars).

Wires the Windows repair path into app entrypoints: apps/desktopsyncShellEnvironment and apps/serverfixPath now apply the full env patch on win32 and return early; unsupported platforms remain no-ops.

Adjusts Windows terminal spawning behavior: terminal manager now prefers pwsh.exe (with -NoLogo) and falls back through absolute Windows PowerShell and cmd.exe, with tests updated/added; PTY adapter now wraps spawn failures as structured PtySpawnError.

Centralizes command availability + build tweaks: isCommandAvailable is moved to shared shell utils and re-exported from server/open, and the desktop artifact build on Windows disables npmRebuild, disables signing/editing when unsigned, and uses bun install --omit optional plus a fallback-installed electron-builder invocation.

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

Note

Fix Windows PATH hydration and shell environment repair for desktop and server

Macroscope summarized 0bafdb6.

- hydrate desktop and server PATH handling for Windows CLI tools
- probe shells without profiles first, then fall back to profile-loaded env when node is missing
- share command availability and PATH repair utilities across desktop and server
@coderabbitai

coderabbitaiBot commented Apr 4, 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

Run ID: e332b4c3-d8f7-4ca5-a485-df3617a1073b

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
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

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 and usage tips.

@github-actionsgithub-actionsBot added size:L 100-499 changed lines (additions + deletions). vouch:unvouched PR author is not yet trusted in the VOUCHED list. labels Apr 4, 2026

@chatgpt-codex-connectorchatgpt-codex-connectorBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit:32efe2a5dd

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment threadpackages/shared/src/shell.ts
Comment threadpackages/shared/src/shell.ts
Comment threadpackages/shared/src/shell.ts Outdated
- Normalize captured shell output by trimming `\r\n` around extracted values
- Add coverage for Windows PowerShell env parsing
@github-actionsgithub-actionsBot added size:XL 500-999 changed lines (additions + deletions). and removed size:L 100-499 changed lines (additions + deletions). labels Apr 4, 2026
- Remove redundant node availability probe
- Return the profiled patch directly when present
@github-actionsgithub-actionsBot added size:L 100-499 changed lines (additions + deletions). and removed size:XL 500-999 changed lines (additions + deletions). labels Apr 4, 2026
@macroscopeapp

macroscopeappBot commented Apr 4, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

This PR introduces new Windows platform functionality including PATH hydration from PowerShell, shell preference changes (pwsh.exe over cmd.exe), and profile loading for fnm support. These are significant runtime behavior changes on Windows that warrant human review despite comprehensive test coverage.

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

@juliusmarmingejuliusmarminge left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Thank you! Will test on my windows laptop in a bit 👀

Comment threadpackages/shared/src/shell.ts Outdated
Comment threadpackages/shared/src/shell.ts
@Badbird5907

Copy link
Copy Markdown
ContributorAuthor

Thank you! Will test on my windows laptop in a bit 👀

Thanks! I forgot to mention that this issue only happens in the .exe distribution, npx t3 isn't affected as it inherits the PATH from the existing shell

@github-actionsgithub-actionsBot added size:XL 500-999 changed lines (additions + deletions). and removed size:L 100-499 changed lines (additions + deletions). labels Apr 16, 2026
Badbird5907and others added 2 commits April 16, 2026 16:59
…ndows-path-support-pr
# Conflicts:
#	apps/desktop/src/syncShellEnvironment.ts
#	packages/shared/src/shell.test.ts

@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 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 42c7cd5. Configure here.

}

return merged.length > 0 ? merged.join(delimiter) : undefined;
}

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.

New mergePathValues nearly duplicates existing mergePathEntries

Low Severity

The new mergePathValues function has nearly identical structure to the existing mergePathEntries — both split by a platform delimiter, deduplicate, and rejoin. The only meaningful difference is the comparison strategy: mergePathEntries compares trimmed entries directly, while mergePathValues normalizes via normalizePathEntryForComparison (case-insensitive on win32, quote-stripping). These could be consolidated into a single function parameterized by comparison strategy, reducing duplication and the risk of inconsistent future fixes.

Additional Locations (1)
Fix in CursorFix in Web

Reviewed by Cursor Bugbot for commit 42c7cd5. Configure here.

- Prefer PowerShell on Windows and add fallbacks for pwsh, PowerShell, and cmd
- Thread platform/env through terminal manager for deterministic tests
- Wrap node-pty spawn failures in PtySpawnError
- Disable Windows npm rebuild and executable editing during packaging
- Install production deps without optional packages
- Invoke electron-builder through `bun x --install=fallback`
@juliusmarminge
juliusmarminge enabled auto-merge (squash) April 17, 2026 06:09
aaditagrawal added a commit to aaditagrawal/t3code that referenced this pull request Apr 18, 2026
Integrates upstream/main (9df3c64) on top of fork's main (9602c18).
Upstream features adopted:
- Claude Opus 4.5 and 4.7 built-in models (pingdotgg#2072, pingdotgg#2143)
- Node-native TypeScript migration across desktop/server (pingdotgg#2098)
- Configurable project grouping with client-settings overrides (pingdotgg#2055, pingdotgg#2099)
- Thread status in command palette (pingdotgg#2107)
- Responsive composer / plan sidebar on narrow windows (pingdotgg#1198)
- Capture-phase CTRL+J keydown for Windows terminal toggle (pingdotgg#2113/pingdotgg#2142)
- Bypass xterm for global terminal shortcuts (pingdotgg#1580)
- Windows ARM build target (pingdotgg#2080)
- Windows PATH hydration + repair (pingdotgg#1729)
- Gitignore-aware workspace search (pingdotgg#2078)
- Claude process leak fix + stale session monitoring (pingdotgg#2042)
- Preserve provider bindings when stopping sessions (pingdotgg#2084)
- Clean up invalid pending-approval projections (pingdotgg#2106) — new migration
- Extract backend startup readiness coordination
- Drop stale text-gen options on reset (pingdotgg#2076)
- Extend negative repository identity cache TTL (pingdotgg#2083)
- Allow deleting non-empty projects from warning toast (pingdotgg#1264)
- Restore defaults only on General settings (pingdotgg#1710)
- Release workflow modernization (blacksmith runners, GitHub App token guards, v0.0.20 version bump)
Fork features preserved:
- All 8 providers (codex, claudeAgent, copilot, cursor, opencode,
geminiCli, amp, kilo) with their adapters, services, and tests
- Fork's custom OpenCode protocol impl in apps/server/src/opencode/ (kept
over upstream's @opencode-ai/sdk-based provider added in pingdotgg#1758 — fork's
version is tested and integrated; upstream's parallel files deleted)
- Fork's direct-CLI Cursor adapter (kept over upstream's new ACP-based
CursorProvider added in pingdotgg#1355 — upstream's parallel files deleted)
- Fork's ProviderRegistry aggregates only codex + claudeAgent snapshots;
the other 6 providers register via ProviderAdapterRegistry
- PROVIDER_CACHE_IDS stays at [codex, claudeAgent] matching what the
registry actually caches
- Migration IDs preserved (fork 23/24/25/26; upstream's new 025 lands at
ID 27 to avoid re-applying on deployed fork DBs)
- Fork's generic per-provider settings (enabled/binaryPath/configDir/
customModels) kept over upstream's opencode-specific serverUrl/password
- Log directory IPC channels, updateInstallInFlight tracking, icon
composer pipeline all preserved
- Fork's simplified release.yml (no npm CLI publish, no nightly infra)
- composerDraftStore normalizeProviderKind widened to accept all 8 kinds
- Dark mode --background set to #0f0f0f
Test status:
- All 9 package typechecks pass
- Lint clean (0 errors)
- Tests: 1877 passed, 15 skipped (incl. 4 historically-flaky GitManager
cross-repo PR selector tests newly gated with TODO for Node-native-TS
follow-up)
MuneerAhmed03 pushed a commit to MuneerAhmed03/t3code that referenced this pull request Apr 26, 2026
Co-authored-by: Julius Marminge <julius0216@outlook.com>
youpele52 referenced this pull request in youpele52/bigbud Jun 17, 2026
Co-authored-by: Julius Marminge <julius0216@outlook.com>
NeilTheFisher pushed a commit to NeilTheFisher/t3code that referenced this pull request Aug 18, 2026
Co-authored-by: Julius Marminge <julius0216@outlook.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XL500-999 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.

2 participants

@Badbird5907@juliusmarminge
, '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 Windows PATH hydration and repair - #1729

Merged
juliusmarminge merged 9 commits into
pingdotgg:mainfrom
Badbird5907:fix/windows-path-support-pr
Apr 17, 2026
Merged

Fix Windows PATH hydration and repair#1729
juliusmarminge merged 9 commits into
pingdotgg:mainfrom
Badbird5907:fix/windows-path-support-pr

Conversation

@Badbird5907

@Badbird5907Badbird5907 commented Apr 4, 2026

Copy link
Copy Markdown
Contributor
  • hydrate desktop and server PATH handling for Windows CLI tools
  • probe shells without profiles first, then fall back to profile-loaded env when node is missing
  • share command availability and PATH repair utilities across desktop and server

What Changed

  • Added a Windows startup fallback that loads the user’s PowerShell profile only when the initial no-profile environment still cannot find node
  • Made Windows environment repair update the full set of relevant environment variables, not just PATH
  • This only affects the packaged Windows .exe startup path and does not affect running the CLI from an existing shell, such as npx t3

Why

This adds support for windows setups using environment managers like fnm that initialize node through the user's powershell profile instead of PATH.
I was also able to confirm this still works on systems with a stock node setup.

Before:
image

After:
image

UI Changes

Checklist

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

Note

Medium Risk
Changes Windows environment hydration and terminal shell selection, which can affect process spawning and tool discovery at runtime (especially in packaged apps). Risk is moderate due to cross-platform branching and reliance on PowerShell probing, but changes are well-covered by new tests.

Overview
Improves Windows startup environment repair by adding shared utilities in @t3tools/shared/shell to probe PowerShell for env vars, merge/dedupe PATH (including known CLI install dirs), and only load the user profile when node still isn’t resolvable (also capturing FNM_* vars).

Wires the Windows repair path into app entrypoints: apps/desktopsyncShellEnvironment and apps/serverfixPath now apply the full env patch on win32 and return early; unsupported platforms remain no-ops.

Adjusts Windows terminal spawning behavior: terminal manager now prefers pwsh.exe (with -NoLogo) and falls back through absolute Windows PowerShell and cmd.exe, with tests updated/added; PTY adapter now wraps spawn failures as structured PtySpawnError.

Centralizes command availability + build tweaks: isCommandAvailable is moved to shared shell utils and re-exported from server/open, and the desktop artifact build on Windows disables npmRebuild, disables signing/editing when unsigned, and uses bun install --omit optional plus a fallback-installed electron-builder invocation.

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

Note

Fix Windows PATH hydration and shell environment repair for desktop and server

Macroscope summarized 0bafdb6.

- hydrate desktop and server PATH handling for Windows CLI tools
- probe shells without profiles first, then fall back to profile-loaded env when node is missing
- share command availability and PATH repair utilities across desktop and server
@coderabbitai

coderabbitaiBot commented Apr 4, 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

Run ID: e332b4c3-d8f7-4ca5-a485-df3617a1073b

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
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

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 and usage tips.

@github-actionsgithub-actionsBot added size:L 100-499 changed lines (additions + deletions). vouch:unvouched PR author is not yet trusted in the VOUCHED list. labels Apr 4, 2026

@chatgpt-codex-connectorchatgpt-codex-connectorBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit:32efe2a5dd

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment threadpackages/shared/src/shell.ts
Comment threadpackages/shared/src/shell.ts
Comment threadpackages/shared/src/shell.ts Outdated
- Normalize captured shell output by trimming `\r\n` around extracted values
- Add coverage for Windows PowerShell env parsing
@github-actionsgithub-actionsBot added size:XL 500-999 changed lines (additions + deletions). and removed size:L 100-499 changed lines (additions + deletions). labels Apr 4, 2026
- Remove redundant node availability probe
- Return the profiled patch directly when present
@github-actionsgithub-actionsBot added size:L 100-499 changed lines (additions + deletions). and removed size:XL 500-999 changed lines (additions + deletions). labels Apr 4, 2026
@macroscopeapp

macroscopeappBot commented Apr 4, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

This PR introduces new Windows platform functionality including PATH hydration from PowerShell, shell preference changes (pwsh.exe over cmd.exe), and profile loading for fnm support. These are significant runtime behavior changes on Windows that warrant human review despite comprehensive test coverage.

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

@juliusmarmingejuliusmarminge left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Thank you! Will test on my windows laptop in a bit 👀

Comment threadpackages/shared/src/shell.ts Outdated
Comment threadpackages/shared/src/shell.ts
@Badbird5907

Copy link
Copy Markdown
ContributorAuthor

Thank you! Will test on my windows laptop in a bit 👀

Thanks! I forgot to mention that this issue only happens in the .exe distribution, npx t3 isn't affected as it inherits the PATH from the existing shell

@github-actionsgithub-actionsBot added size:XL 500-999 changed lines (additions + deletions). and removed size:L 100-499 changed lines (additions + deletions). labels Apr 16, 2026
Badbird5907and others added 2 commits April 16, 2026 16:59
…ndows-path-support-pr
# Conflicts:
#	apps/desktop/src/syncShellEnvironment.ts
#	packages/shared/src/shell.test.ts

@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 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 42c7cd5. Configure here.

}

return merged.length > 0 ? merged.join(delimiter) : undefined;
}

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.

New mergePathValues nearly duplicates existing mergePathEntries

Low Severity

The new mergePathValues function has nearly identical structure to the existing mergePathEntries — both split by a platform delimiter, deduplicate, and rejoin. The only meaningful difference is the comparison strategy: mergePathEntries compares trimmed entries directly, while mergePathValues normalizes via normalizePathEntryForComparison (case-insensitive on win32, quote-stripping). These could be consolidated into a single function parameterized by comparison strategy, reducing duplication and the risk of inconsistent future fixes.

Additional Locations (1)
Fix in CursorFix in Web

Reviewed by Cursor Bugbot for commit 42c7cd5. Configure here.

- Prefer PowerShell on Windows and add fallbacks for pwsh, PowerShell, and cmd
- Thread platform/env through terminal manager for deterministic tests
- Wrap node-pty spawn failures in PtySpawnError
- Disable Windows npm rebuild and executable editing during packaging
- Install production deps without optional packages
- Invoke electron-builder through `bun x --install=fallback`
@juliusmarminge
juliusmarminge enabled auto-merge (squash) April 17, 2026 06:09
aaditagrawal added a commit to aaditagrawal/t3code that referenced this pull request Apr 18, 2026
Integrates upstream/main (9df3c64) on top of fork's main (9602c18).
Upstream features adopted:
- Claude Opus 4.5 and 4.7 built-in models (pingdotgg#2072, pingdotgg#2143)
- Node-native TypeScript migration across desktop/server (pingdotgg#2098)
- Configurable project grouping with client-settings overrides (pingdotgg#2055, pingdotgg#2099)
- Thread status in command palette (pingdotgg#2107)
- Responsive composer / plan sidebar on narrow windows (pingdotgg#1198)
- Capture-phase CTRL+J keydown for Windows terminal toggle (pingdotgg#2113/pingdotgg#2142)
- Bypass xterm for global terminal shortcuts (pingdotgg#1580)
- Windows ARM build target (pingdotgg#2080)
- Windows PATH hydration + repair (pingdotgg#1729)
- Gitignore-aware workspace search (pingdotgg#2078)
- Claude process leak fix + stale session monitoring (pingdotgg#2042)
- Preserve provider bindings when stopping sessions (pingdotgg#2084)
- Clean up invalid pending-approval projections (pingdotgg#2106) — new migration
- Extract backend startup readiness coordination
- Drop stale text-gen options on reset (pingdotgg#2076)
- Extend negative repository identity cache TTL (pingdotgg#2083)
- Allow deleting non-empty projects from warning toast (pingdotgg#1264)
- Restore defaults only on General settings (pingdotgg#1710)
- Release workflow modernization (blacksmith runners, GitHub App token guards, v0.0.20 version bump)
Fork features preserved:
- All 8 providers (codex, claudeAgent, copilot, cursor, opencode,
geminiCli, amp, kilo) with their adapters, services, and tests
- Fork's custom OpenCode protocol impl in apps/server/src/opencode/ (kept
over upstream's @opencode-ai/sdk-based provider added in pingdotgg#1758 — fork's
version is tested and integrated; upstream's parallel files deleted)
- Fork's direct-CLI Cursor adapter (kept over upstream's new ACP-based
CursorProvider added in pingdotgg#1355 — upstream's parallel files deleted)
- Fork's ProviderRegistry aggregates only codex + claudeAgent snapshots;
the other 6 providers register via ProviderAdapterRegistry
- PROVIDER_CACHE_IDS stays at [codex, claudeAgent] matching what the
registry actually caches
- Migration IDs preserved (fork 23/24/25/26; upstream's new 025 lands at
ID 27 to avoid re-applying on deployed fork DBs)
- Fork's generic per-provider settings (enabled/binaryPath/configDir/
customModels) kept over upstream's opencode-specific serverUrl/password
- Log directory IPC channels, updateInstallInFlight tracking, icon
composer pipeline all preserved
- Fork's simplified release.yml (no npm CLI publish, no nightly infra)
- composerDraftStore normalizeProviderKind widened to accept all 8 kinds
- Dark mode --background set to #0f0f0f
Test status:
- All 9 package typechecks pass
- Lint clean (0 errors)
- Tests: 1877 passed, 15 skipped (incl. 4 historically-flaky GitManager
cross-repo PR selector tests newly gated with TODO for Node-native-TS
follow-up)
MuneerAhmed03 pushed a commit to MuneerAhmed03/t3code that referenced this pull request Apr 26, 2026
Co-authored-by: Julius Marminge <julius0216@outlook.com>
youpele52 referenced this pull request in youpele52/bigbud Jun 17, 2026
Co-authored-by: Julius Marminge <julius0216@outlook.com>
NeilTheFisher pushed a commit to NeilTheFisher/t3code that referenced this pull request Aug 18, 2026
Co-authored-by: Julius Marminge <julius0216@outlook.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XL500-999 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.

2 participants

@Badbird5907@juliusmarminge
, '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 Windows PATH hydration and repair - #1729

Merged
juliusmarminge merged 9 commits into
pingdotgg:mainfrom
Badbird5907:fix/windows-path-support-pr
Apr 17, 2026
Merged

Fix Windows PATH hydration and repair#1729
juliusmarminge merged 9 commits into
pingdotgg:mainfrom
Badbird5907:fix/windows-path-support-pr

Conversation

@Badbird5907

@Badbird5907Badbird5907 commented Apr 4, 2026

Copy link
Copy Markdown
Contributor
  • hydrate desktop and server PATH handling for Windows CLI tools
  • probe shells without profiles first, then fall back to profile-loaded env when node is missing
  • share command availability and PATH repair utilities across desktop and server

What Changed

  • Added a Windows startup fallback that loads the user’s PowerShell profile only when the initial no-profile environment still cannot find node
  • Made Windows environment repair update the full set of relevant environment variables, not just PATH
  • This only affects the packaged Windows .exe startup path and does not affect running the CLI from an existing shell, such as npx t3

Why

This adds support for windows setups using environment managers like fnm that initialize node through the user's powershell profile instead of PATH.
I was also able to confirm this still works on systems with a stock node setup.

Before:
image

After:
image

UI Changes

Checklist

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

Note

Medium Risk
Changes Windows environment hydration and terminal shell selection, which can affect process spawning and tool discovery at runtime (especially in packaged apps). Risk is moderate due to cross-platform branching and reliance on PowerShell probing, but changes are well-covered by new tests.

Overview
Improves Windows startup environment repair by adding shared utilities in @t3tools/shared/shell to probe PowerShell for env vars, merge/dedupe PATH (including known CLI install dirs), and only load the user profile when node still isn’t resolvable (also capturing FNM_* vars).

Wires the Windows repair path into app entrypoints: apps/desktopsyncShellEnvironment and apps/serverfixPath now apply the full env patch on win32 and return early; unsupported platforms remain no-ops.

Adjusts Windows terminal spawning behavior: terminal manager now prefers pwsh.exe (with -NoLogo) and falls back through absolute Windows PowerShell and cmd.exe, with tests updated/added; PTY adapter now wraps spawn failures as structured PtySpawnError.

Centralizes command availability + build tweaks: isCommandAvailable is moved to shared shell utils and re-exported from server/open, and the desktop artifact build on Windows disables npmRebuild, disables signing/editing when unsigned, and uses bun install --omit optional plus a fallback-installed electron-builder invocation.

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

Note

Fix Windows PATH hydration and shell environment repair for desktop and server

Macroscope summarized 0bafdb6.

- hydrate desktop and server PATH handling for Windows CLI tools
- probe shells without profiles first, then fall back to profile-loaded env when node is missing
- share command availability and PATH repair utilities across desktop and server
@coderabbitai

coderabbitaiBot commented Apr 4, 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

Run ID: e332b4c3-d8f7-4ca5-a485-df3617a1073b

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
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

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 and usage tips.

@github-actionsgithub-actionsBot added size:L 100-499 changed lines (additions + deletions). vouch:unvouched PR author is not yet trusted in the VOUCHED list. labels Apr 4, 2026

@chatgpt-codex-connectorchatgpt-codex-connectorBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit:32efe2a5dd

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment threadpackages/shared/src/shell.ts
Comment threadpackages/shared/src/shell.ts
Comment threadpackages/shared/src/shell.ts Outdated
- Normalize captured shell output by trimming `\r\n` around extracted values
- Add coverage for Windows PowerShell env parsing
@github-actionsgithub-actionsBot added size:XL 500-999 changed lines (additions + deletions). and removed size:L 100-499 changed lines (additions + deletions). labels Apr 4, 2026
- Remove redundant node availability probe
- Return the profiled patch directly when present
@github-actionsgithub-actionsBot added size:L 100-499 changed lines (additions + deletions). and removed size:XL 500-999 changed lines (additions + deletions). labels Apr 4, 2026
@macroscopeapp

macroscopeappBot commented Apr 4, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

This PR introduces new Windows platform functionality including PATH hydration from PowerShell, shell preference changes (pwsh.exe over cmd.exe), and profile loading for fnm support. These are significant runtime behavior changes on Windows that warrant human review despite comprehensive test coverage.

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

@juliusmarmingejuliusmarminge left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Thank you! Will test on my windows laptop in a bit 👀

Comment threadpackages/shared/src/shell.ts Outdated
Comment threadpackages/shared/src/shell.ts
@Badbird5907

Copy link
Copy Markdown
ContributorAuthor

Thank you! Will test on my windows laptop in a bit 👀

Thanks! I forgot to mention that this issue only happens in the .exe distribution, npx t3 isn't affected as it inherits the PATH from the existing shell

@github-actionsgithub-actionsBot added size:XL 500-999 changed lines (additions + deletions). and removed size:L 100-499 changed lines (additions + deletions). labels Apr 16, 2026
Badbird5907and others added 2 commits April 16, 2026 16:59
…ndows-path-support-pr
# Conflicts:
#	apps/desktop/src/syncShellEnvironment.ts
#	packages/shared/src/shell.test.ts

@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 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 42c7cd5. Configure here.

}

return merged.length > 0 ? merged.join(delimiter) : undefined;
}

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.

New mergePathValues nearly duplicates existing mergePathEntries

Low Severity

The new mergePathValues function has nearly identical structure to the existing mergePathEntries — both split by a platform delimiter, deduplicate, and rejoin. The only meaningful difference is the comparison strategy: mergePathEntries compares trimmed entries directly, while mergePathValues normalizes via normalizePathEntryForComparison (case-insensitive on win32, quote-stripping). These could be consolidated into a single function parameterized by comparison strategy, reducing duplication and the risk of inconsistent future fixes.

Additional Locations (1)
Fix in CursorFix in Web

Reviewed by Cursor Bugbot for commit 42c7cd5. Configure here.

- Prefer PowerShell on Windows and add fallbacks for pwsh, PowerShell, and cmd
- Thread platform/env through terminal manager for deterministic tests
- Wrap node-pty spawn failures in PtySpawnError
- Disable Windows npm rebuild and executable editing during packaging
- Install production deps without optional packages
- Invoke electron-builder through `bun x --install=fallback`
@juliusmarminge
juliusmarminge enabled auto-merge (squash) April 17, 2026 06:09
aaditagrawal added a commit to aaditagrawal/t3code that referenced this pull request Apr 18, 2026
Integrates upstream/main (9df3c64) on top of fork's main (9602c18).
Upstream features adopted:
- Claude Opus 4.5 and 4.7 built-in models (pingdotgg#2072, pingdotgg#2143)
- Node-native TypeScript migration across desktop/server (pingdotgg#2098)
- Configurable project grouping with client-settings overrides (pingdotgg#2055, pingdotgg#2099)
- Thread status in command palette (pingdotgg#2107)
- Responsive composer / plan sidebar on narrow windows (pingdotgg#1198)
- Capture-phase CTRL+J keydown for Windows terminal toggle (pingdotgg#2113/pingdotgg#2142)
- Bypass xterm for global terminal shortcuts (pingdotgg#1580)
- Windows ARM build target (pingdotgg#2080)
- Windows PATH hydration + repair (pingdotgg#1729)
- Gitignore-aware workspace search (pingdotgg#2078)
- Claude process leak fix + stale session monitoring (pingdotgg#2042)
- Preserve provider bindings when stopping sessions (pingdotgg#2084)
- Clean up invalid pending-approval projections (pingdotgg#2106) — new migration
- Extract backend startup readiness coordination
- Drop stale text-gen options on reset (pingdotgg#2076)
- Extend negative repository identity cache TTL (pingdotgg#2083)
- Allow deleting non-empty projects from warning toast (pingdotgg#1264)
- Restore defaults only on General settings (pingdotgg#1710)
- Release workflow modernization (blacksmith runners, GitHub App token guards, v0.0.20 version bump)
Fork features preserved:
- All 8 providers (codex, claudeAgent, copilot, cursor, opencode,
geminiCli, amp, kilo) with their adapters, services, and tests
- Fork's custom OpenCode protocol impl in apps/server/src/opencode/ (kept
over upstream's @opencode-ai/sdk-based provider added in pingdotgg#1758 — fork's
version is tested and integrated; upstream's parallel files deleted)
- Fork's direct-CLI Cursor adapter (kept over upstream's new ACP-based
CursorProvider added in pingdotgg#1355 — upstream's parallel files deleted)
- Fork's ProviderRegistry aggregates only codex + claudeAgent snapshots;
the other 6 providers register via ProviderAdapterRegistry
- PROVIDER_CACHE_IDS stays at [codex, claudeAgent] matching what the
registry actually caches
- Migration IDs preserved (fork 23/24/25/26; upstream's new 025 lands at
ID 27 to avoid re-applying on deployed fork DBs)
- Fork's generic per-provider settings (enabled/binaryPath/configDir/
customModels) kept over upstream's opencode-specific serverUrl/password
- Log directory IPC channels, updateInstallInFlight tracking, icon
composer pipeline all preserved
- Fork's simplified release.yml (no npm CLI publish, no nightly infra)
- composerDraftStore normalizeProviderKind widened to accept all 8 kinds
- Dark mode --background set to #0f0f0f
Test status:
- All 9 package typechecks pass
- Lint clean (0 errors)
- Tests: 1877 passed, 15 skipped (incl. 4 historically-flaky GitManager
cross-repo PR selector tests newly gated with TODO for Node-native-TS
follow-up)
MuneerAhmed03 pushed a commit to MuneerAhmed03/t3code that referenced this pull request Apr 26, 2026
Co-authored-by: Julius Marminge <julius0216@outlook.com>
youpele52 referenced this pull request in youpele52/bigbud Jun 17, 2026
Co-authored-by: Julius Marminge <julius0216@outlook.com>
NeilTheFisher pushed a commit to NeilTheFisher/t3code that referenced this pull request Aug 18, 2026
Co-authored-by: Julius Marminge <julius0216@outlook.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XL500-999 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.

2 participants

@Badbird5907@juliusmarminge
, '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 Windows PATH hydration and repair - #1729

Merged
juliusmarminge merged 9 commits into
pingdotgg:mainfrom
Badbird5907:fix/windows-path-support-pr
Apr 17, 2026
Merged

Fix Windows PATH hydration and repair#1729
juliusmarminge merged 9 commits into
pingdotgg:mainfrom
Badbird5907:fix/windows-path-support-pr

Conversation

@Badbird5907

@Badbird5907Badbird5907 commented Apr 4, 2026

Copy link
Copy Markdown
Contributor
  • hydrate desktop and server PATH handling for Windows CLI tools
  • probe shells without profiles first, then fall back to profile-loaded env when node is missing
  • share command availability and PATH repair utilities across desktop and server

What Changed

  • Added a Windows startup fallback that loads the user’s PowerShell profile only when the initial no-profile environment still cannot find node
  • Made Windows environment repair update the full set of relevant environment variables, not just PATH
  • This only affects the packaged Windows .exe startup path and does not affect running the CLI from an existing shell, such as npx t3

Why

This adds support for windows setups using environment managers like fnm that initialize node through the user's powershell profile instead of PATH.
I was also able to confirm this still works on systems with a stock node setup.

Before:
image

After:
image

UI Changes

Checklist

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

Note

Medium Risk
Changes Windows environment hydration and terminal shell selection, which can affect process spawning and tool discovery at runtime (especially in packaged apps). Risk is moderate due to cross-platform branching and reliance on PowerShell probing, but changes are well-covered by new tests.

Overview
Improves Windows startup environment repair by adding shared utilities in @t3tools/shared/shell to probe PowerShell for env vars, merge/dedupe PATH (including known CLI install dirs), and only load the user profile when node still isn’t resolvable (also capturing FNM_* vars).

Wires the Windows repair path into app entrypoints: apps/desktopsyncShellEnvironment and apps/serverfixPath now apply the full env patch on win32 and return early; unsupported platforms remain no-ops.

Adjusts Windows terminal spawning behavior: terminal manager now prefers pwsh.exe (with -NoLogo) and falls back through absolute Windows PowerShell and cmd.exe, with tests updated/added; PTY adapter now wraps spawn failures as structured PtySpawnError.

Centralizes command availability + build tweaks: isCommandAvailable is moved to shared shell utils and re-exported from server/open, and the desktop artifact build on Windows disables npmRebuild, disables signing/editing when unsigned, and uses bun install --omit optional plus a fallback-installed electron-builder invocation.

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

Note

Fix Windows PATH hydration and shell environment repair for desktop and server

Macroscope summarized 0bafdb6.

- hydrate desktop and server PATH handling for Windows CLI tools
- probe shells without profiles first, then fall back to profile-loaded env when node is missing
- share command availability and PATH repair utilities across desktop and server
@coderabbitai

coderabbitaiBot commented Apr 4, 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

Run ID: e332b4c3-d8f7-4ca5-a485-df3617a1073b

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
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

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 and usage tips.

@github-actionsgithub-actionsBot added size:L 100-499 changed lines (additions + deletions). vouch:unvouched PR author is not yet trusted in the VOUCHED list. labels Apr 4, 2026

@chatgpt-codex-connectorchatgpt-codex-connectorBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit:32efe2a5dd

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment threadpackages/shared/src/shell.ts
Comment threadpackages/shared/src/shell.ts
Comment threadpackages/shared/src/shell.ts Outdated
- Normalize captured shell output by trimming `\r\n` around extracted values
- Add coverage for Windows PowerShell env parsing
@github-actionsgithub-actionsBot added size:XL 500-999 changed lines (additions + deletions). and removed size:L 100-499 changed lines (additions + deletions). labels Apr 4, 2026
- Remove redundant node availability probe
- Return the profiled patch directly when present
@github-actionsgithub-actionsBot added size:L 100-499 changed lines (additions + deletions). and removed size:XL 500-999 changed lines (additions + deletions). labels Apr 4, 2026
@macroscopeapp

macroscopeappBot commented Apr 4, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

This PR introduces new Windows platform functionality including PATH hydration from PowerShell, shell preference changes (pwsh.exe over cmd.exe), and profile loading for fnm support. These are significant runtime behavior changes on Windows that warrant human review despite comprehensive test coverage.

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

@juliusmarmingejuliusmarminge left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Thank you! Will test on my windows laptop in a bit 👀

Comment threadpackages/shared/src/shell.ts Outdated
Comment threadpackages/shared/src/shell.ts
@Badbird5907

Copy link
Copy Markdown
ContributorAuthor

Thank you! Will test on my windows laptop in a bit 👀

Thanks! I forgot to mention that this issue only happens in the .exe distribution, npx t3 isn't affected as it inherits the PATH from the existing shell

@github-actionsgithub-actionsBot added size:XL 500-999 changed lines (additions + deletions). and removed size:L 100-499 changed lines (additions + deletions). labels Apr 16, 2026
Badbird5907and others added 2 commits April 16, 2026 16:59
…ndows-path-support-pr
# Conflicts:
#	apps/desktop/src/syncShellEnvironment.ts
#	packages/shared/src/shell.test.ts

@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 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 42c7cd5. Configure here.

}

return merged.length > 0 ? merged.join(delimiter) : undefined;
}

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.

New mergePathValues nearly duplicates existing mergePathEntries

Low Severity

The new mergePathValues function has nearly identical structure to the existing mergePathEntries — both split by a platform delimiter, deduplicate, and rejoin. The only meaningful difference is the comparison strategy: mergePathEntries compares trimmed entries directly, while mergePathValues normalizes via normalizePathEntryForComparison (case-insensitive on win32, quote-stripping). These could be consolidated into a single function parameterized by comparison strategy, reducing duplication and the risk of inconsistent future fixes.

Additional Locations (1)
Fix in CursorFix in Web

Reviewed by Cursor Bugbot for commit 42c7cd5. Configure here.

- Prefer PowerShell on Windows and add fallbacks for pwsh, PowerShell, and cmd
- Thread platform/env through terminal manager for deterministic tests
- Wrap node-pty spawn failures in PtySpawnError
- Disable Windows npm rebuild and executable editing during packaging
- Install production deps without optional packages
- Invoke electron-builder through `bun x --install=fallback`
@juliusmarminge
juliusmarminge enabled auto-merge (squash) April 17, 2026 06:09
aaditagrawal added a commit to aaditagrawal/t3code that referenced this pull request Apr 18, 2026
Integrates upstream/main (9df3c64) on top of fork's main (9602c18).
Upstream features adopted:
- Claude Opus 4.5 and 4.7 built-in models (pingdotgg#2072, pingdotgg#2143)
- Node-native TypeScript migration across desktop/server (pingdotgg#2098)
- Configurable project grouping with client-settings overrides (pingdotgg#2055, pingdotgg#2099)
- Thread status in command palette (pingdotgg#2107)
- Responsive composer / plan sidebar on narrow windows (pingdotgg#1198)
- Capture-phase CTRL+J keydown for Windows terminal toggle (pingdotgg#2113/pingdotgg#2142)
- Bypass xterm for global terminal shortcuts (pingdotgg#1580)
- Windows ARM build target (pingdotgg#2080)
- Windows PATH hydration + repair (pingdotgg#1729)
- Gitignore-aware workspace search (pingdotgg#2078)
- Claude process leak fix + stale session monitoring (pingdotgg#2042)
- Preserve provider bindings when stopping sessions (pingdotgg#2084)
- Clean up invalid pending-approval projections (pingdotgg#2106) — new migration
- Extract backend startup readiness coordination
- Drop stale text-gen options on reset (pingdotgg#2076)
- Extend negative repository identity cache TTL (pingdotgg#2083)
- Allow deleting non-empty projects from warning toast (pingdotgg#1264)
- Restore defaults only on General settings (pingdotgg#1710)
- Release workflow modernization (blacksmith runners, GitHub App token guards, v0.0.20 version bump)
Fork features preserved:
- All 8 providers (codex, claudeAgent, copilot, cursor, opencode,
geminiCli, amp, kilo) with their adapters, services, and tests
- Fork's custom OpenCode protocol impl in apps/server/src/opencode/ (kept
over upstream's @opencode-ai/sdk-based provider added in pingdotgg#1758 — fork's
version is tested and integrated; upstream's parallel files deleted)
- Fork's direct-CLI Cursor adapter (kept over upstream's new ACP-based
CursorProvider added in pingdotgg#1355 — upstream's parallel files deleted)
- Fork's ProviderRegistry aggregates only codex + claudeAgent snapshots;
the other 6 providers register via ProviderAdapterRegistry
- PROVIDER_CACHE_IDS stays at [codex, claudeAgent] matching what the
registry actually caches
- Migration IDs preserved (fork 23/24/25/26; upstream's new 025 lands at
ID 27 to avoid re-applying on deployed fork DBs)
- Fork's generic per-provider settings (enabled/binaryPath/configDir/
customModels) kept over upstream's opencode-specific serverUrl/password
- Log directory IPC channels, updateInstallInFlight tracking, icon
composer pipeline all preserved
- Fork's simplified release.yml (no npm CLI publish, no nightly infra)
- composerDraftStore normalizeProviderKind widened to accept all 8 kinds
- Dark mode --background set to #0f0f0f
Test status:
- All 9 package typechecks pass
- Lint clean (0 errors)
- Tests: 1877 passed, 15 skipped (incl. 4 historically-flaky GitManager
cross-repo PR selector tests newly gated with TODO for Node-native-TS
follow-up)
MuneerAhmed03 pushed a commit to MuneerAhmed03/t3code that referenced this pull request Apr 26, 2026
Co-authored-by: Julius Marminge <julius0216@outlook.com>
youpele52 referenced this pull request in youpele52/bigbud Jun 17, 2026
Co-authored-by: Julius Marminge <julius0216@outlook.com>
NeilTheFisher pushed a commit to NeilTheFisher/t3code that referenced this pull request Aug 18, 2026
Co-authored-by: Julius Marminge <julius0216@outlook.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XL500-999 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.

2 participants

@Badbird5907@juliusmarminge
, '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 Windows PATH hydration and repair - #1729

Merged
juliusmarminge merged 9 commits into
pingdotgg:mainfrom
Badbird5907:fix/windows-path-support-pr
Apr 17, 2026
Merged

Fix Windows PATH hydration and repair#1729
juliusmarminge merged 9 commits into
pingdotgg:mainfrom
Badbird5907:fix/windows-path-support-pr

Conversation

@Badbird5907

@Badbird5907Badbird5907 commented Apr 4, 2026

Copy link
Copy Markdown
Contributor
  • hydrate desktop and server PATH handling for Windows CLI tools
  • probe shells without profiles first, then fall back to profile-loaded env when node is missing
  • share command availability and PATH repair utilities across desktop and server

What Changed

  • Added a Windows startup fallback that loads the user’s PowerShell profile only when the initial no-profile environment still cannot find node
  • Made Windows environment repair update the full set of relevant environment variables, not just PATH
  • This only affects the packaged Windows .exe startup path and does not affect running the CLI from an existing shell, such as npx t3

Why

This adds support for windows setups using environment managers like fnm that initialize node through the user's powershell profile instead of PATH.
I was also able to confirm this still works on systems with a stock node setup.

Before:
image

After:
image

UI Changes

Checklist

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

Note

Medium Risk
Changes Windows environment hydration and terminal shell selection, which can affect process spawning and tool discovery at runtime (especially in packaged apps). Risk is moderate due to cross-platform branching and reliance on PowerShell probing, but changes are well-covered by new tests.

Overview
Improves Windows startup environment repair by adding shared utilities in @t3tools/shared/shell to probe PowerShell for env vars, merge/dedupe PATH (including known CLI install dirs), and only load the user profile when node still isn’t resolvable (also capturing FNM_* vars).

Wires the Windows repair path into app entrypoints: apps/desktopsyncShellEnvironment and apps/serverfixPath now apply the full env patch on win32 and return early; unsupported platforms remain no-ops.

Adjusts Windows terminal spawning behavior: terminal manager now prefers pwsh.exe (with -NoLogo) and falls back through absolute Windows PowerShell and cmd.exe, with tests updated/added; PTY adapter now wraps spawn failures as structured PtySpawnError.

Centralizes command availability + build tweaks: isCommandAvailable is moved to shared shell utils and re-exported from server/open, and the desktop artifact build on Windows disables npmRebuild, disables signing/editing when unsigned, and uses bun install --omit optional plus a fallback-installed electron-builder invocation.

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

Note

Fix Windows PATH hydration and shell environment repair for desktop and server

Macroscope summarized 0bafdb6.

- hydrate desktop and server PATH handling for Windows CLI tools
- probe shells without profiles first, then fall back to profile-loaded env when node is missing
- share command availability and PATH repair utilities across desktop and server
@coderabbitai

coderabbitaiBot commented Apr 4, 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

Run ID: e332b4c3-d8f7-4ca5-a485-df3617a1073b

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
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

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 and usage tips.

@github-actionsgithub-actionsBot added size:L 100-499 changed lines (additions + deletions). vouch:unvouched PR author is not yet trusted in the VOUCHED list. labels Apr 4, 2026

@chatgpt-codex-connectorchatgpt-codex-connectorBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit:32efe2a5dd

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment threadpackages/shared/src/shell.ts
Comment threadpackages/shared/src/shell.ts
Comment threadpackages/shared/src/shell.ts Outdated
- Normalize captured shell output by trimming `\r\n` around extracted values
- Add coverage for Windows PowerShell env parsing
@github-actionsgithub-actionsBot added size:XL 500-999 changed lines (additions + deletions). and removed size:L 100-499 changed lines (additions + deletions). labels Apr 4, 2026
- Remove redundant node availability probe
- Return the profiled patch directly when present
@github-actionsgithub-actionsBot added size:L 100-499 changed lines (additions + deletions). and removed size:XL 500-999 changed lines (additions + deletions). labels Apr 4, 2026
@macroscopeapp

macroscopeappBot commented Apr 4, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

This PR introduces new Windows platform functionality including PATH hydration from PowerShell, shell preference changes (pwsh.exe over cmd.exe), and profile loading for fnm support. These are significant runtime behavior changes on Windows that warrant human review despite comprehensive test coverage.

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

@juliusmarmingejuliusmarminge left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Thank you! Will test on my windows laptop in a bit 👀

Comment threadpackages/shared/src/shell.ts Outdated
Comment threadpackages/shared/src/shell.ts
@Badbird5907

Copy link
Copy Markdown
ContributorAuthor

Thank you! Will test on my windows laptop in a bit 👀

Thanks! I forgot to mention that this issue only happens in the .exe distribution, npx t3 isn't affected as it inherits the PATH from the existing shell

@github-actionsgithub-actionsBot added size:XL 500-999 changed lines (additions + deletions). and removed size:L 100-499 changed lines (additions + deletions). labels Apr 16, 2026
Badbird5907and others added 2 commits April 16, 2026 16:59
…ndows-path-support-pr
# Conflicts:
#	apps/desktop/src/syncShellEnvironment.ts
#	packages/shared/src/shell.test.ts

@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 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 42c7cd5. Configure here.

}

return merged.length > 0 ? merged.join(delimiter) : undefined;
}

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.

New mergePathValues nearly duplicates existing mergePathEntries

Low Severity

The new mergePathValues function has nearly identical structure to the existing mergePathEntries — both split by a platform delimiter, deduplicate, and rejoin. The only meaningful difference is the comparison strategy: mergePathEntries compares trimmed entries directly, while mergePathValues normalizes via normalizePathEntryForComparison (case-insensitive on win32, quote-stripping). These could be consolidated into a single function parameterized by comparison strategy, reducing duplication and the risk of inconsistent future fixes.

Additional Locations (1)
Fix in CursorFix in Web

Reviewed by Cursor Bugbot for commit 42c7cd5. Configure here.

- Prefer PowerShell on Windows and add fallbacks for pwsh, PowerShell, and cmd
- Thread platform/env through terminal manager for deterministic tests
- Wrap node-pty spawn failures in PtySpawnError
- Disable Windows npm rebuild and executable editing during packaging
- Install production deps without optional packages
- Invoke electron-builder through `bun x --install=fallback`
@juliusmarminge
juliusmarminge enabled auto-merge (squash) April 17, 2026 06:09
aaditagrawal added a commit to aaditagrawal/t3code that referenced this pull request Apr 18, 2026
Integrates upstream/main (9df3c64) on top of fork's main (9602c18).
Upstream features adopted:
- Claude Opus 4.5 and 4.7 built-in models (pingdotgg#2072, pingdotgg#2143)
- Node-native TypeScript migration across desktop/server (pingdotgg#2098)
- Configurable project grouping with client-settings overrides (pingdotgg#2055, pingdotgg#2099)
- Thread status in command palette (pingdotgg#2107)
- Responsive composer / plan sidebar on narrow windows (pingdotgg#1198)
- Capture-phase CTRL+J keydown for Windows terminal toggle (pingdotgg#2113/pingdotgg#2142)
- Bypass xterm for global terminal shortcuts (pingdotgg#1580)
- Windows ARM build target (pingdotgg#2080)
- Windows PATH hydration + repair (pingdotgg#1729)
- Gitignore-aware workspace search (pingdotgg#2078)
- Claude process leak fix + stale session monitoring (pingdotgg#2042)
- Preserve provider bindings when stopping sessions (pingdotgg#2084)
- Clean up invalid pending-approval projections (pingdotgg#2106) — new migration
- Extract backend startup readiness coordination
- Drop stale text-gen options on reset (pingdotgg#2076)
- Extend negative repository identity cache TTL (pingdotgg#2083)
- Allow deleting non-empty projects from warning toast (pingdotgg#1264)
- Restore defaults only on General settings (pingdotgg#1710)
- Release workflow modernization (blacksmith runners, GitHub App token guards, v0.0.20 version bump)
Fork features preserved:
- All 8 providers (codex, claudeAgent, copilot, cursor, opencode,
geminiCli, amp, kilo) with their adapters, services, and tests
- Fork's custom OpenCode protocol impl in apps/server/src/opencode/ (kept
over upstream's @opencode-ai/sdk-based provider added in pingdotgg#1758 — fork's
version is tested and integrated; upstream's parallel files deleted)
- Fork's direct-CLI Cursor adapter (kept over upstream's new ACP-based
CursorProvider added in pingdotgg#1355 — upstream's parallel files deleted)
- Fork's ProviderRegistry aggregates only codex + claudeAgent snapshots;
the other 6 providers register via ProviderAdapterRegistry
- PROVIDER_CACHE_IDS stays at [codex, claudeAgent] matching what the
registry actually caches
- Migration IDs preserved (fork 23/24/25/26; upstream's new 025 lands at
ID 27 to avoid re-applying on deployed fork DBs)
- Fork's generic per-provider settings (enabled/binaryPath/configDir/
customModels) kept over upstream's opencode-specific serverUrl/password
- Log directory IPC channels, updateInstallInFlight tracking, icon
composer pipeline all preserved
- Fork's simplified release.yml (no npm CLI publish, no nightly infra)
- composerDraftStore normalizeProviderKind widened to accept all 8 kinds
- Dark mode --background set to #0f0f0f
Test status:
- All 9 package typechecks pass
- Lint clean (0 errors)
- Tests: 1877 passed, 15 skipped (incl. 4 historically-flaky GitManager
cross-repo PR selector tests newly gated with TODO for Node-native-TS
follow-up)
MuneerAhmed03 pushed a commit to MuneerAhmed03/t3code that referenced this pull request Apr 26, 2026
Co-authored-by: Julius Marminge <julius0216@outlook.com>
youpele52 referenced this pull request in youpele52/bigbud Jun 17, 2026
Co-authored-by: Julius Marminge <julius0216@outlook.com>
NeilTheFisher pushed a commit to NeilTheFisher/t3code that referenced this pull request Aug 18, 2026
Co-authored-by: Julius Marminge <julius0216@outlook.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XL500-999 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.

2 participants

@Badbird5907@juliusmarminge