Christian Byrne
6c8473e4e4
refactor: replace runtime isElectron() with build-time isDesktop constant ( #8710 )
...
## Summary
Replace all runtime `isElectron()` function calls with the build-time
`isDesktop` constant from `@/platform/distribution/types`, enabling
dead-code elimination in non-desktop builds.
## Changes
- **What**: Migrate 30 files from runtime `isElectron()` detection
(checking `window.electronAPI`) to the compile-time `isDesktop` constant
(driven by `__DISTRIBUTION__` Vite define). Remove `isElectron` from
`envUtil.ts`. Update `isNativeWindow()` to use `isDesktop`. Guard
`electronAPI()` calls behind `isDesktop` checks in stores. Update 7 test
files to use `vi.hoisted` + getter mock pattern for per-test `isDesktop`
toggling. Add `DISTRIBUTION=desktop` to `dev:electron` script.
## Review Focus
- The `electronDownloadStore.ts` now guards the top-level
`electronAPI()` call behind `isDesktop` to prevent crashes on
non-desktop builds.
- Test mocking pattern uses `vi.hoisted` with a getter to allow per-test
toggling of the `isDesktop` value.
- Pre-existing issues not addressed: `as ElectronAPI` cast in
`envUtil.ts`, `:class="[]"` in `BaseViewTemplate.vue`,
`@ts-expect-error` in `ModelLibrarySidebarTab.vue`.
- This subsumes PR #8627 and renders PR #6122 and PR #7374 obsolete.
┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-8710-refactor-replace-runtime-isElectron-with-build-time-isDesktop-constant-3006d73d365081c08037f0e61c2f6c77 )
by [Unito](https://www.unito.io )
2026-02-07 19:47:05 -08:00
Christian Byrne
32da91ea32
perf: code-split xterm bundle and gate terminal features for cloud ( #8528 )
...
## Summary
Code-splits the ~400KB xterm bundle and excludes terminal features from
cloud distribution where they are not needed.
### Changes
- **bottomPanelStore.ts**: Gate terminal tab registration behind
`__DISTRIBUTION__ !== 'cloud'` check with dynamic import, enabling
tree-shaking
- **keybindingService.ts**: Skip logs-terminal keybinding registration
for cloud distribution
- **vite.config.mts**: Add `vendor-xterm` code splitting group
### Bundle Impact
| Distribution | xterm in bundle | Terminal tabs |
|--------------|-----------------|---------------|
| cloud | ❌ No (~400KB saved) | None |
| localhost | ✅ Yes (vendor-xterm chunk) | Logs terminal |
| desktop | ✅ Yes (vendor-xterm chunk) | Logs + Command terminal |
### Verification Script
Run locally to verify xterm exclusion works correctly:
```bash
#!/bin/bash
set -e
echo "=== Verifying xterm bundle exclusion ==="
echo
# Clear Nx cache to ensure fresh builds
pnpm nx reset 2>/dev/null
# Build cloud distribution
echo "Building CLOUD distribution..."
rm -rf dist
DISTRIBUTION=cloud pnpm build --mode production 2>/dev/null
echo "Cloud build - checking for xterm:"
if grep -r "xterm" dist/assets/*.js >/dev/null 2>&1; then
echo " ❌ FAIL: xterm found in cloud bundle"
grep -l "xterm" dist/assets/*.js | head -5
else
echo " ✅ PASS: xterm NOT in cloud bundle"
fi
echo
# Build localhost distribution
echo "Building LOCALHOST distribution..."
pnpm nx reset 2>/dev/null
rm -rf dist
DISTRIBUTION=localhost pnpm build --mode production 2>/dev/null
echo "Localhost build - checking for xterm:"
if grep -r "xterm" dist/assets/*.js >/dev/null 2>&1; then
echo " ✅ PASS: xterm found in localhost bundle"
echo " Files containing xterm:"
grep -l "xterm" dist/assets/*.js | while read f; do
size=$(wc -c < "$f")
echo " $(basename $f) ($(numfmt --to=iec $size))"
done
else
echo " ❌ FAIL: xterm NOT in localhost bundle"
fi
echo
echo "=== Verification complete ==="
```
**Note**: Nx cache must be reset between builds with different
`DISTRIBUTION` values or it may return stale results.
## Test Plan
- [x] Quality gates pass (typecheck, lint, format, tests)
- [x] Cloud build verified: xterm NOT present
- [x] Localhost build verified: xterm present as vendor-xterm chunk
Fixes COM-14129
┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-8528-perf-code-split-xterm-bundle-and-gate-terminal-features-for-cloud-2fa6d73d365081a093ecc74ca7ce6e7c )
by [Unito](https://www.unito.io )
<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit
* **Refactor**
* Terminal tab declarations adjusted (no user-visible behavior change).
* Bottom panel tabs now load asynchronously; panel toggle falls back to
shortcuts when terminal tabs aren’t loaded.
* **Chores**
* Terminal tabs and related keybindings suppressed in cloud deployments.
* Core commands wired to a new utility to support widget promotion.
* **Tests**
* E2E tests updated to handle async terminal-tab loading and minor test
cleanup.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
---------
Co-authored-by: Amp <amp@ampcode.com >
Co-authored-by: GitHub Action <action@github.com >
Co-authored-by: Alexander Brown <drjkl@comfy.org >
2026-02-03 15:15:37 -08:00
Alexander Brown
08220d50d9
Lint: Turn on rules that should allow for verbatimModuleSyntax ( #5616 )
...
* lint: turn on type import rules setting up for verbatimModuleSyntax
* lint: --fix for type imports
2025-09-16 22:03:41 -07:00
Benjamin Lu
7a1a2dd654
fix: Make bottom panel tab titles reactive to language changes ( #5077 )
...
* computed extraMenuItems
* add i18n key option
* underline fix
* Update locales [skip ci]
* restore title
* Update locales [skip ci]
* refactor: Extract tab title logic to helper method for better readability
- Moved complex nested ternary logic from template to getTabDisplayTitle helper
- Improves code readability and maintainability
- Addresses review feedback about using computed/method for performance
---------
Co-authored-by: github-actions <github-actions@github.com >
2025-08-18 19:27:21 -04:00
Johnpaul Chiwetelu
70c06d10bb
Keyboard Shortcut Bottom Panel ( #4635 )
2025-08-07 11:51:23 -07:00
Benjamin Lu
b22713daf0
Add source prop to commands ( #3429 )
...
Co-authored-by: Benjamin Lu <templu1107@proton.me >
Co-authored-by: github-actions <github-actions@github.com >
2025-04-12 21:20:53 -04:00
Chenlei Hu
2db29fc2af
[TS] Fix ts-strict errors in Vue components (Part 1) ( #3119 )
2025-03-17 21:15:00 -04:00
Chenlei Hu
6525ae7cf4
[Refactor] Rename hooks/ to composables/ ( #2437 )
2025-02-05 15:05:56 -05:00
Chenlei Hu
d8f074fea0
[Lint] Sort imports ( #2104 )
2024-12-30 17:26:37 -05:00
Chenlei Hu
4997d13219
[i18n] Add commands label translation ( #1890 )
...
* [i18n] Add commands label translation
* Use translation
2024-12-12 09:28:47 -08:00
pythongosssss
b5f0c4bf73
[Electron] Terminal commands ( #1531 )
...
* Add live terminal output
* Fix scrolling
* Refactor loading
* Fallback to polling if endpoint fails
* Comment
* Move clientId to executionStore
Refactor types
* Remove polling
* wip terminal command input
* Refactor to use node-pty
* Hide tabs if not electron
* Lint fix
* ts fix
* Refactor tab components
2024-11-17 14:43:08 -05:00
Chenlei Hu
377fed584f
[Extension API] Register custom bottom panel tabs ( #1296 )
...
* Bottom panel API
* Update README
2024-10-24 19:58:44 -04:00
Chenlei Hu
14a6687cc9
Integrated terminal ( #1295 )
...
* Add terminal tab
* Add basic terminal
* Style terminal
* Add keybinding
* Auto scroll:
* Mock for jest test
2024-10-24 17:31:00 -04:00
Chenlei Hu
d142893244
Add bottom panel support ( #1294 )
...
* Add bottom panel
* Bottom panel store
* Extract ExtensionSlot component
* Tab rendering
* Add toggle button on top menu bar
* nit
* Add toggle button tooltip
* Add command
2024-10-24 15:15:19 -04:00