mirror of
https://github.com/binaricat/Netcatty.git
synced 2026-09-24 15:49:09 +00:00
fb034f08bbbf7fe1f06ff10f1dde11db4e16f212
5 Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
cc5ad3be16 |
perf: isolate Terminal hot props, cut memory/jank, and repay architecture debt (#2790)
* refactor: migrate architecture-debt hooks into application/state Move SFTP Wave A stores/hooks and related vault/AI/terminal/systemManager hooks out of components into application/state, update importers, and keep thin deprecated re-exports at the old paths. Co-authored-by: 陈大猫 <binaricat@users.noreply.github.com> * refactor(sftp): align local bookmarks store API with global bookmarks Export subscribe/get/set/rehydrate helpers from localSftpBookmarks to match the globalSftpBookmarks external-store pattern. Co-authored-by: 陈大猫 <binaricat@users.noreply.github.com> * fix(electron): reduce baseline memory via spellcheck/GPU/prewarm guards Disable spellcheck on BrowserWindows and the default session, drop spare renderers, gate aggressive GPU switches behind NETCATTY_COMPAT_GPU, and make settings prewarm opt-in via NETCATTY_PREWARM_SETTINGS. Co-authored-by: 陈大猫 <binaricat@users.noreply.github.com> * Isolate notes and customAccent from TerminalLayer hot props Route vault notes through notesStore (shellHistoryStore pattern) and app accent through appearanceChromeStore so note edits and accent-drag ticks no longer rebuild TerminalLayer. Notes/AI slots and Terminal leaves subscribe locally; VaultView and open-note callbacks stay unchanged. Co-authored-by: 陈大猫 <binaricat@users.noreply.github.com> * fix(ui): cut unnecessary AppView/VaultView/settings re-renders Stabilize TopTabs close handler, memo AppHostTreeLayer, exclude accent from settingsVersion, ignore connectionLogs off the logs section, share lastConnected host refs, and keep rename dialog drafts local so chrome domain stays stable. Co-authored-by: 陈大猫 <binaricat@users.noreply.github.com> * chore: package size, dead code, and consolidation cleanup Remove unused direct deps, exclude Vite-bundled renderer packages from electron-builder, delete high-confidence dead code/no-op transfer warm wiring, consolidate cloud provider IDs and KnownHost/SFTP helpers, and land UI/AGENTS quick wins (rAF text batching, notes draft debounce, streaming plain text, tempDirBridge, diagnostics adapter, External MCP setters). Co-authored-by: 陈大猫 <binaricat@users.noreply.github.com> * fix: stabilize rAF text batching and diagnostics tests Polyfill requestAnimationFrame for Node, flush pending text before steer buffering, bypass rAF while steer is in flight, and stub global localStorage for AI panel diagnostics adapter tests. Co-authored-by: 陈大猫 <binaricat@users.noreply.github.com> * fix: correct import paths after application/state hook migrations Migrated vault/AI/system hooks still used components/-relative imports; point them at repo-root domain/components/types/lib instead. Co-authored-by: 陈大猫 <binaricat@users.noreply.github.com> * fix: address Bugbot/Codex regressions from perf cleanup - Keep blank Enter from closing RenameDraftDialog; only reset rename state after a non-empty submit - Flush note drafts before vault mutations so pending title/body edits are not overwritten - Re-apply appearanceChromeStore accent on appearanceTheme in Terminal, and keep layer themes unaccented Co-authored-by: 陈大猫 <binaricat@users.noreply.github.com> * fix(notes): flush draft before markdown export paths Co-authored-by: 陈大猫 <binaricat@users.noreply.github.com> * fix: keep editor-close hotkey ref fresh during render Assign handleRequestCloseEditorTabRef in render instead of useEffect so Cmd/Ctrl+W never hits the App stub before the effect runs. Co-authored-by: 陈大猫 <binaricat@users.noreply.github.com> * fix: keep accent in chrome themes without TerminalLayer thrash Restore accent in globalAppearance for chrome/injection consumers. Keep resolveFocusedAppearance identity stable across accent drag via accent ref, while Terminal leaf still re-applies appearanceChromeStore. Co-authored-by: 陈大猫 <binaricat@users.noreply.github.com> * fix: keep compose chrome accent live and merge note renames Subscribe theme-panel focusedAppearance to appearanceChromeStore so compose-bar chrome updates during color-picker drag even when resolveFocusedAppearance identity stays stable. Tree renames now merge title into the post-flush note instead of replacing from a stale row. Co-authored-by: 陈大猫 <binaricat@users.noreply.github.com> * fix: clear terminal accent when switching back to theme mode Re-resolve appearanceTheme by catalog id before applyCustomAccent so a stale baked custom cursor/selection cannot stick after accentMode returns to theme while TerminalLayer memo ignores accent props. Co-authored-by: 陈大猫 <binaricat@users.noreply.github.com> * fix: register unsaved prompt singleton during render AppView close handlers call promptUnsavedChanges outside the old render-prop. Assign the singleton during render so Cmd/Ctrl+W and tab close never hit the pre-effect null window that auto-cancels. Co-authored-by: 陈大猫 <binaricat@users.noreply.github.com> * fix: keep vault import hooks UI-free and flush notes on teardown Move ImportOptions into application/state and inject a notifier so useVaultImportHandlers no longer imports components. Notes drafts also flush on pagehide/beforeunload when Electron tears down without React unmount. Co-authored-by: 陈大猫 <binaricat@users.noreply.github.com> * fix: move AI terminal session context builders into domain buildAITerminalSessionInfo and AIPanelContext now live under domain/ so application hooks no longer import TerminalLayerSupport and create a UI → application → UI cycle. Co-authored-by: 陈大猫 <binaricat@users.noreply.github.com> * fix: drop duplicate AIPanelContext type from TerminalLayerSupport The type is re-exported from domain; the local definition conflicted. Co-authored-by: 陈大猫 <binaricat@users.noreply.github.com> * fix: keep migrated state hooks free of UI-layer imports Move aiChatStreamingSupport into infrastructure/ai and poll list helpers into domain/systemManager so useAIChatStreaming / useSystemManager no longer import from components. Leave thin re-exports at the old paths. Co-authored-by: 陈大猫 <binaricat@users.noreply.github.com> * fix: move remaining migrated-hook deps out of components Host-key verification types/helpers now live in domain/, and SFTP column layout types live in application/state/sftp/columnLayout. Application hooks no longer import those definitions from the UI layer. Co-authored-by: 陈大猫 <binaricat@users.noreply.github.com> * fix: clear lint blockers and flush notes when panels hide Move AI panel diagnostics persistence into application/state so components stop importing localStorageAdapter. Flush note drafts when retained NotesManager mounts become inactive, and silence related lint warnings in theme/host-key helpers. Co-authored-by: 陈大猫 <binaricat@users.noreply.github.com> * fix(notes): publish notesStore sync on vault note updates updateNotes/updateNoteGroups now publishNotesSnapshot immediately so AI/notes consumers do not briefly read a stale catalog after a hide flush. Flush inactive drafts in useLayoutEffect before paint. Co-authored-by: 陈大猫 <binaricat@users.noreply.github.com> --------- Co-authored-by: Cursor Agent <cursoragent@cursor.com> Co-authored-by: 陈大猫 <binaricat@users.noreply.github.com> |
||
|
|
74ec6678bb |
fix(system): increase process list limit and improve Docker detection for openEuler (#1453) (#1455)
* fix(system): increase process list limit and improve Docker detection for openEuler Root cause analysis for issue #1453: 1. Process list limit too low: The `head -n 200` pipeline capped the process list at 200 entries, causing the displayed count to mismatch `ps aux | wc -l` on systems with many processes (common on openEuler servers with Docker, databases, etc.). Increased limit from 200 to 2000 for both Linux/SSH (ps) and Windows (PowerShell) backends. 2. Docker detection failure on openEuler 24.03: The capability probe only relied on `docker info >/dev/null 2>&1`, which can fail even when Docker is running due to: - SSH exec channel environment differences vs interactive shell - Docker socket permission variations in non-interactive sessions - Different socket path configurations on openEuler Added a fallback: if `docker info` fails but the Docker socket exists at `/var/run/docker.sock`, Docker is still detected as available. This matches the behavior of other SSH terminal clients. * fix(system): also add Docker socket fallback to fallback probe script for consistency * fix(system): remove hardcoded process list limit, add capability probe TTL, auto-reprobe on tab switch Three remaining issues from PR #1455: 1. Remove hardcoded `head -n 2000` / `Select-Object -First 2000` process list limits — virtual list handles rendering efficiently. 2. Add 60-second TTL to sessionCapabilitiesStore cache. `get()` returns undefined for expired entries, forcing re-probe on next access. `set()` always refreshes `probedAt`. Export CAPABILITIES_TTL_MS constant for future tuning. 3. Auto-trigger capability re-probe when switching to Docker/Tmux tab whose tool was previously reported unavailable — handles the case where Docker/Tmux was installed after the last probe. * fix: replace Docker socket -S check with -r for permission accuracy; sync capabilities TTL with process refresh interval - Change [ -S /var/run/docker.sock ] to [ -r /var/run/docker.sock ] in both the main capability probe script and the POSIX fallback (electron bridge). -r verifies the socket exists AND the current user has read permission, preventing false-positive Docker detection that leads to failed Docker ops. - Remove hardcoded CAPABILITIES_TTL_MS (60s) from sessionCapabilitiesStore. Store now computes expiresAt internally in set(ttlMs) and checks it in get() without requiring a parameter at call sites. - useSessionCapabilities and useSystemCapabilitiesWarmup accept a capabilitiesTtlMs parameter derived from terminalSettings.systemManagerProcessRefreshInterval (default 3s → 3 000ms). - SystemManagerSidePanel passes the TTL from terminalSettings to the hook. - TerminalLayerTabBridge passes TTL from stableRef settings to warmup hook. - Fix missing refreshCapabilities destructuring in SystemManagerSidePanel. * fix: restore process list safety cap (head -n 2000 / -First 2000) Codex review flagged that removing the process list cap entirely could cause timeout/maxBuffer issues on process-dense hosts. Restore head -n 2000 (POSIX) and -First 2000 (Windows) as a safety guard with comments clarifying this is NOT a functional limit — monitored processes still show accurate metrics. * fix: hoist useRef/useEffect before early returns to fix React hook order violation The useRef and useEffect for tab-switch re-probe were placed after early returns for missing/disconnected sessions. When a session later connects, React discovers new hooks that weren't registered before, causing hook order violation crashes. Moved both hooks immediately after the resolvedTab computation, before any early return path, satisfying React's Rules of Hooks. * fix: change Docker detection from OR to AND (CLI + socket) Both capability detection and fallback probe now require: - docker CLI is on PATH (command -v docker) - docker.sock is readable ([ -r /var/run/docker.sock ]) Previously used OR logic (docker info || socket readable), which could report hasDocker=true even when docker CLI was unavailable (e.g., non-login SSH shell). Fixes #1453 * fix(system-monitor): prefer docker info, fallback to CLI+socket Co-authored-by: Codex <codex@anthropic.com> Changes: - Line 12: Replace strict CLI+socket check with docker info first, falling back to CLI+socket check only if docker info fails. - Line 139: Same fix in the fallback probe script. This handles DOCKER_HOST, Docker contexts, and rootless Docker. * fix: notify subscribers when TTL expires in sessionCapabilitiesStore.get() When capabilitiesBySessionId.get() finds an expired entry, it deletes the entry but did not notify session subscribers. This caused components to stale capabilities until the next successful set() call. Now get() calls notifySession() on expiry, matching the notification behavior already present in delete(). |
||
|
|
324253f23a |
[codex] Optimize terminal side panel performance
Optimize terminal side panel performance, keep process status labels visible, and improve heavy panel loading behavior. |
||
|
|
9013a7e312 | fix terminal popup release behavior (#1403) | ||
|
|
36267717ac |
feat(terminal): add system manager side panel for processes, tmux, and Docker
Introduce workspace-aware System side panel with remote process/tmux/Docker management, terminal popup for interactive attach, capability warmup, review-hardened IPC, performance optimizations, toast action errors, and SSH channel recovery on reconnect. |