fix(app): middle-click to close workspace tabs#1
Open
thatdaveguy1 wants to merge 116 commits intomainfrom
Open
fix(app): middle-click to close workspace tabs#1thatdaveguy1 wants to merge 116 commits intomainfrom
thatdaveguy1 wants to merge 116 commits intomainfrom
Conversation
shell: true passes commands to cmd.exe /d /s /c which strips outer quotes, causing paths like C:\Program Files\... to split at the space.
Add useWebElementScrollbar (for DOM elements) and useWebScrollViewScrollbar (for RN ScrollView/FlatList) hooks that return renderable overlays, replacing manual WebDesktopScrollbarOverlay wiring across all consumers. Apply the themed scrollbar to the message input textarea. Tint the dark-mode scrollbar handle to match the teal-tinted dark theme. Closes getpaseo#174
…tpaseo#169) Add listCommands() to OpenCodeAgentSession via the OpenCode SDK's command.list() API, and route recognized /commands through session.command() instead of promptAsync(). This fixes issue getpaseo#168 where slash commands didn't load when OpenCode was the selected harness.
On non-Mac platforms, let xterm.js ClipboardAddon handle Ctrl+C (copy when text is selected) and Ctrl+V (paste) instead of sending control codes to the PTY. Closes getpaseo#175
The SDK's supportedModels() API hides the 1M context variant behind a "default" alias and doesn't expose it as a selectable model. Replace dynamic SDK discovery with a hardcoded catalog that exposes both claude-opus-4-6[1m] (1M context) and claude-opus-4-6 (200k) as distinct models. Delete sdk-model-resolver which parsed SDK descriptions.
Improve draft and live model selectors with search, favorites, and clearer provider context. Keep live agents honest by showing other provider catalogs as browse-only until provider switching exists. Co-authored-by: David Longman <dlongman@tokentradegames.com>
…vider unions (getpaseo#170) * feat(server): add ACP base provider with Claude ACP integration Implement a generic Agent Client Protocol (ACP) base provider that any ACP-compatible agent can extend with minimal code. Includes a concrete Claude ACP implementation via @agentclientprotocol/claude-agent-acp with full parity to the existing Claude Code provider. The base handles subprocess lifecycle, streaming translation, permission bridging, terminal/fs callbacks, listModels, loadSession/resume, and mode/model management. The concrete class only specifies the command, modes, and availability check. * fix: update lockfile signatures and Nix hash * feat: add Copilot ACP provider, eliminate hardcoded provider unions, fix ACP streaming bugs Add Copilot as an ACP provider (copilot --acp), with real modes and models discovered from the ACP server. Fix two ACP base bugs: duplicate assistant text (emit deltas not cumulative) and idle→running→stuck (fire-and-return startTurn). Replace all hardcoded provider string unions with string/manifest- derived values so adding a provider only requires: impl class, manifest entry, registry factory, icon, and E2E config. Add provider docs and Copilot icon. * fix: update lockfile signatures and Nix hash * feat(app): add OpenCode provider icon --------- Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
…int, harden defaults - Replace all execAsync shell-interpolated git calls with execFileAsync + array args in session.ts - Add symlink resolution in file-explorer resolveScopedPath to prevent workspace escape - Remove /pairing HTTP endpoint from server; desktop now uses `paseo daemon pair --json` via CLI - Disable MCP HTTP endpoint by default (opt-in via config) - Correct SECURITY.md: fix cipher name (XSalsa20-Poly1305), accurate replay resistance claims, add local daemon trust boundary docs
…andidates Check target, parentElement, and document.activeElement as focus candidates instead of relying solely on the direct event target. Fixes scope misdetection when the keyboard event target is a text node or non-element.
These providers cause old mobile clients (<=0.1.40) to fail parsing the list_available_providers_response because their AgentProviderSchema enum rejects unknown provider IDs, dropping the entire message and leaving the model picker empty. The provider implementations remain in the codebase — only the manifest entries and factory registrations are removed until the updated mobile app (0.1.43) is live in the App Store.
Remove the "Refreshing" and "Failed to refresh agent" toasts from the agent panel — they fire frequently but are meaningless since sync recovers transparently. The "Reconnecting..." toast for host disconnect is preserved. Strip debug console.log calls across the app: render tracking in message/stream views, dependency change tracking in workspace screen, terminal tab slot logging, and verbose audio engine/voice runtime bridge stats logging. Legitimate console.error/warn in catch blocks are kept.
When dictating and focused on an agent, pressing Enter now confirms the dictation and sends the message, matching the behavior of clicking the submit button.
On macOS, apps launched from Finder/Dock inherit a minimal environment (PATH is just /usr/bin:/bin:/usr/sbin:/sbin). This caused two problems: 1. Agent binaries like codex were not detected (findExecutable failed) 2. Terminals spawned by Paseo had no access to user-installed tools (node, bun, direnv — all "command not found") Fix: at Electron startup, spawn the user's login shell and capture its full environment via JSON.stringify(process.env) using UUID markers. This is the same battle-tested approach VS Code uses. The resolved environment is merged into process.env before the daemon starts, so all child processes — agents, terminals, git operations — inherit the correct environment automatically. This replaces the previous approach of invoking resolveShellEnv() (via the shell-env npm package) at multiple scattered call sites. Now there is a single source of truth: process.env is enriched once at startup. Changes: - New: packages/desktop/src/login-shell-env.ts (VS Code approach) - Removed: resolveShellEnv(), shell-env dependency, $SHELL -lic probes - Simplified: applyProviderEnv() and findExecutable() now trust process.env
… and UX polish - Add CombinedModelSelector with two-level drill-down (providers → models), favorites section, search, and single-provider auto-drill mode - Add provider snapshot system (ProviderSnapshotManager) for cached provider/model state - Add provider diagnostics with resolved binary paths and versions across all providers - Add StatusBadge shared component for consistent status visual language - Add ProviderDiagnosticSheet for detailed provider health inspection - Add desktop auto-focus on input after any status bar interaction (model, mode, thinking, features) using focusWithRetries - Fix Combobox flicker on height change by switching to bottom-based CSS positioning once initial floating-ui position resolves - Add dynamic dropdown height: Level 1 fits content, Level 2 calculates from model count - Remove "Other providers" section from model selector (only show available providers)
…el selector - Add onDropdownClose callback to AgentStatusBar and wire through ControlledStatusBar to CombinedModelSelector so running agents focus input after any dropdown closes - Fix mobile misalignment in model selector by adding marginHorizontal: spacing[1] to sectionHeading, drillDownRow, backButton, and providerSearchContainer to match ComboboxItem's mobile margins
The mobile preferences modal split CombinedModelSelector's onSelect into separate onSelectProvider and onSelectModel calls, but onSelectProvider was never passed from DraftAgentStatusBar — so selecting a non-cloud provider was silently ignored while only the model ID updated. Add onSelectProviderAndModel prop to ControlledStatusBar and use it on the mobile path, matching the web path's atomic behavior.
…X polish - Model selector is no longer disabled while providers load; opens immediately and streams available providers as they arrive - Selecting a non-default provider on mobile now works correctly - Provider icon added to model trigger in mobile preferences sheet - Thinking icon (brain) added to thinking trigger in mobile preferences - Model descriptions for OpenCode/Pi shown inline next to model name instead of in a tooltip - Running agents and draft screen share a single provider/model cache, eliminating duplicate network requests - Provider data is prefetched when entering a workspace so the model selector is instant on first open
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Validation
Notes
app.paseo.sh, so the web path is covered by the code change and automated test coverage rather than a manual browser session.