chore: sync with upstream#1
Conversation
…me (superset-sh#2885) * fix(desktop): prevent [gone] from being stored as workspace branch name The porcelain status parser incorrectly extracted "[gone]" as the branch name when git reported "No commits yet on BRANCH...origin/BRANCH [gone]". The old code split by space and took the last element; the fix strips the prefix and applies the same tracking-info regex used for normal branches. Also adds syncBranch validation to reject obviously invalid names and a one-time startup repair that reads the real branch from the worktree HEAD file for any existing corrupted records. * fix(desktop): remove startup branch repair * Refactor porcelain use gh * test(desktop): cover porcelain v2 branch handling * fix(desktop): handle missing HEAD during branch sync * fix(desktop): narrow unborn HEAD recovery * lint
…invalidation (superset-sh#2900) Ensures cached proxy responses are keyed per auth token, preventing stale data when switching orgs or users.
…superset-sh#2901) The proxy handles ~200 req/min — performance-4x (8GB) is vastly over-provisioned. Saves ~$120/mo.
Better-auth defaults to 10 requests per 24 hours per API key. MCP clients burn 3 requests on init alone, causing keys to stop working after ~7 tool calls. Disables the rate limiter entirely.
…focus on pane nav (superset-sh#2676) * fix(desktop): skip pane-nav shortcuts when input/textarea is focused Cmd+Shift+Left/Right should allow text selection in chat prompts, not hijack focus to the adjacent pane. * fix(desktop): stop modifier+arrow propagation in chat textarea Fix pane-nav hotkey hijacking at the source — the prompt input now calls stopPropagation for Cmd/Ctrl+Arrow keys so they perform native text selection rather than switching panes. * fix(desktop): focus chat textarea when pane receives focus via keyboard nav * fix(desktop): place cursor at end of input when chat pane receives focus * refactor(desktop): extract useFocusPromptOnPane shared hook
…t-sh#2903) * feat(desktop): cmd-click file paths opens in external editor Cmd/ctrl-click on files in the file tree, search results, and changes view now opens in the configured external editor. Double-click no longer opens externally, freeing it for future pinning behavior. * keep existing double-click open-in-editor behavior * remove stale workspaceRun tests with drifted mocks
…et-sh#2557) * feat(desktop): configurable light/dark themes for system mode When "System" theme is selected, users can now choose which specific theme to use for light and dark modes via dropdowns on the System card, instead of always resolving to the built-in light/dark themes. * fix(desktop): validate stale system theme IDs and ensure terminal color fallbacks resolveThemeId now validates that persisted system theme IDs reference existing themes, falling back to built-in light/dark when stale. initializeTheme normalizes stale IDs on hydration so system mode is never silently dropped. SystemThemeCard uses getTerminalColors() for guaranteed terminal colors instead of accessing the optional .terminal property directly. * fix(desktop): validate themeId in setSystemThemePreference before persisting Reject invalid or recursive "system" IDs to prevent inconsistent persisted state from non-UI callers. * refactor(desktop): extract fallback theme IDs into shared constants Replace repeated "light"/"dark" literals with DEFAULT_LIGHT_THEME_ID and DEFAULT_DARK_THEME_ID to reduce drift risk during future refactors.
…-sh#2908) * fix(desktop): restore workspace deletion from disk Fixes bug introduced in PR superset-sh#2573 where workspace deletion only removed database records but left worktree files on disk. **Root cause:** - `listExternalWorktrees()` was misnamed and returned ALL git worktrees - Delete logic used this for safety checks, finding the worktree being deleted in the "external" list - This caused disk deletion to be skipped incorrectly **Changes:** 1. Renamed `listExternalWorktrees` → `listAllGitWorktrees` (accurate name) 2. Created proper `listExternalWorktrees(mainRepoPath, projectId)`: - Queries database for tracked worktrees - Returns only git worktrees NOT in database - Provides true "external worktrees" list 3. Removed `createdBySuperset` flag gating from deletion logic: - Users can now delete imported external worktrees - Safety check via `listExternalWorktrees` prevents deleting worktrees that haven't been imported 4. Updated all call sites to pass `projectId` parameter 5. Extracted `normalizePath` helper to git.ts for reuse 6. Simplified git-status.ts to use new implementation **Testing:** - All typechecks pass - Existing tests updated (external-worktree-import.test.ts) - Logic verified: tracked worktrees deleted, external preserved * fix(desktop): add error handling to prevent stuck 'deleting' status Wraps worktree deletion logic in try-catch to ensure workspace deleting status is properly cleared if listExternalWorktrees() or other operations fail. **Problem:** - If listExternalWorktrees() throws (git error, DB error, etc.), the workspace remains stuck in 'deleting' status - User cannot retry deletion or interact with workspace - Requires manual DB cleanup or app restart to recover **Solution:** - Wrap deletion section in outer try-catch - Catch any errors from listExternalWorktrees and related operations - Always call clearWorkspaceDeletingStatus() on error - Return proper error response instead of crashing **Changes:** - workspace delete procedure: added error boundary around disk deletion - deleteWorktree procedure: added error boundary for consistency **Impact:** - Prevents workspace from getting stuck in deleting state - Provides clear error messages to user - Allows user to retry deletion after fixing issues
…t-sh#2892) The `run` field in `.superset/config.json` was undocumented. This adds a section explaining how run scripts work (on-demand via Run button, restartable, dedicated pane) and how they differ from setup/teardown. Also adds the missing `SUPERSET_WORKSPACE_PATH` environment variable. Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
superset-sh#2927) * Clean enougH * fix: biome lint/format fixes * chore: remove unnecessary comments, clean up ws auth middleware * fix: biome format fix * fix: fix flaky external worktree test, remove broken workspaceRun test * Clean enougH
…uperset-sh#2929) * fix(desktop): improve external worktree detection in deletion safety check Enhance the safety mechanism that prevents deletion of external worktrees by cross-referencing git worktrees with database-tracked worktrees. Previously, the check relied solely on listExternalWorktrees(), which could miss cases where a worktree was incorrectly marked as createdBySuperset. Now the logic: - Gets all git worktrees from the repository - Queries all tracked worktrees from the database for the project - Normalizes paths for accurate comparison (handles symlinks) - Determines if a worktree is external by checking if it exists in git but is NOT tracked in the database This prevents accidental deletion of external worktrees that may have been incorrectly flagged, providing an additional layer of safety. Applied to both workspace.delete and workspace.deleteWorktree procedures. * fix(desktop): delete external worktrees from disk when removed from Superset Update deletion logic to remove all worktrees from disk when deleted through Superset, regardless of whether they were created by Superset or imported as external worktrees. Previously: - Superset-created worktrees (createdBySuperset=true) → deleted from disk - External worktrees (createdBySuperset=false) → only removed from database Now: - All worktrees tracked in Superset → deleted from disk when removed - Safety check still prevents deletion of untracked worktrees This provides consistent UX: once a worktree is managed in Superset (even if originally created externally), deleting it removes it completely. The safety mechanism still protects against edge cases where a worktree exists in git but is not properly tracked in the database. Updated both workspace.delete and workspace.deleteWorktree procedures.
…s blocking new terminals (superset-sh#2963) * fix(desktop): exit subprocess on PTY spawn failure to prevent zombie sessions (superset-sh#2960) When pty.spawn() fails (e.g. posix_spawnp failed), the subprocess sent an error frame but stayed alive. This left session.isAlive returning true for a broken session with no PTY, causing TerminalHost to store and attach to it — blocking new terminal creation. Two fixes: - pty-subprocess.ts: exit with code 1 after spawn failure so the daemon correctly detects the session as dead - terminal-host.ts: also check session.pid after ready timeout to catch edge cases where subprocess is alive but PTY never spawned * Deslop --------- Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> Co-authored-by: Kiet Ho <hoakiet98@gmail.com>
…#2966) * Marketplace * fix(desktop,docs): wire marketplace links through env * fix: address marketplace PR review comments
* desktop: make chat work in skip env mode * lint
…ion (superset-sh#2907) * feat(desktop): add CLOSE_WORKSPACE hotkey and context menu delete option (superset-sh#2742, superset-sh#2741) Add ⌘+Backspace hotkey to close/delete the active workspace via DeleteWorkspaceDialog, and expose a "Close Worktree"/"Close Workspace" option in the sidebar context menu for all workspace types using the existing deleteDialogCoordinator pattern. Closes superset-sh#2742 Closes superset-sh#2741 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * fix: freeze delete target and add cross-platform conflict tests Address CodeRabbit review feedback: - Freeze workspace data at hotkey press time to prevent stale target if the active workspace changes before dialog confirmation - Extend conflict test to also check linux platform defaults * Naming --------- Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com> Co-authored-by: Kiet Ho <hoakiet98@gmail.com>
) * fix(cost): remove device heartbeat polling to reduce Vercel costs Replace 30s heartbeat polling with a single device registration on app startup. This eliminates ~2,880 requests/device/day to Vercel while keeping MCP command routing and ownership checks intact. - Remove heartbeat interval from desktop and mobile, register once on mount - Rename `device.heartbeat` to `device.registerDevice` (single-fire) - Remove `device.listOnlineDevices` (unused) - Remove online-check gate from MCP `executeOnDevice` (timeout handles offline) - Remove Devices settings page and sidebar entry - Remove `devicePresence` Electric collection (no longer needed client-side) - Simplify `list_devices` MCP tool (no online/offline status) - Remove online indicator from DevicePicker UI * chore: remove v2DevicePresence Electric collection No consumers remain after removing the presence join from useWorkspaceHostOptions. Presence will be reimplemented via WSS. * fix: scope device registration guard to org and userId - Replace boolean registeredRef with org-scoped ref so switching orgs triggers re-registration on both desktop and mobile - Scope executeOnDevice ownership query to ctx.userId to prevent returning another user's device row * fix: keep deprecated heartbeat endpoint for shipped clients Existing desktop/mobile clients still call device.heartbeat on a 30s interval. Keep it around as a deprecated alias so they don't error out until users update.
…ce modal (superset-sh#2980) * Buttons * Fix build * hotkey * Single CMD enter * Lint
* fix(desktop): honor linked PR push targets * fix(test): remove tests that poison module cache via mock.module Bun's mock.module() leaks across test files (oven-sh/bun#12823) and mock.restore() does not undo module mocks. Tests that call mock.module() on shared modules with partial exports permanently corrupt the module cache, breaking unrelated tests with "Export named X not found" errors. Removed tests: - merge-pull-request.test.ts: mocked 6 shared modules (git, git-client, github, shell-env) with partial exports, poisoning 5 other test files. - editorCoordinator.test.ts: transitively loads trpc-electron/renderer which requires the electronTRPC Electron preload global unavailable when running bun test from the monorepo root. - task.test.ts: mocked 9 shared modules (@superset/db/client, drizzle-orm, etc.) with partial exports, poisoning @superset/db/client for subsequent tests. These tests need dependency injection in the runtime code to be testable without mock.module(). They can be re-added once the functions accept deps as parameters. Also: log unexpected errors in hasUpstreamBranch instead of silently swallowing them (PR review feedback). * fix(ci): unblock test and typecheck * fix(ci): harden merge-ref regressions * fix(desktop): pin @pierre/diffs and support 1.1.7 hunks * chore: drop unrelated CI-only changes from PR * fix(ui): pin streamdown deps and narrow types * fix(desktop): align mastra runtime versions * fix(ci): patch mastracode metadata for desktop * fix(ci): preserve runtime deps for desktop build * fix(desktop): patch runtime metadata after copy
* chore(mastra): switch to upstream packages * fix(desktop): address mastra CI regressions * Upgrade mastra
…uperset-sh#2989) * fix(desktop): clean up review sidebar UI and remove redundant states - Replace inline AlertDialogs with reusable DiscardConfirmDialog component - Simplify ReviewPanel loading skeleton to match app-wide pattern - Flatten comment layout: show active comments directly, Resolved as own section - Remove redundant review label that duplicated badge text - Remove redundant PR state text already conveyed by icon color - Remove duplicate comment count between parent and child sections - Align collapsible trigger styles (padding, hover, chevron sizes) with CategorySection - PR header: compact layout with hover-to-reveal external link - Add section dividers between PR header, checks, and comments - Push comment age to far right, absolutely position hover actions - Clean up unused imports * Update apps/desktop/src/renderer/screens/main/components/WorkspaceView/RightSidebar/ChangesView/components/ReviewPanel/ReviewPanel.tsx Co-authored-by: cubic-dev-ai[bot] <191113872+cubic-dev-ai[bot]@users.noreply.github.com> --------- Co-authored-by: cubic-dev-ai[bot] <191113872+cubic-dev-ai[bot]@users.noreply.github.com>
…uperset-sh#2997) * feat(desktop): add visual indicator when settings search is active Add a compact search results banner and normalize search query handling for a consistent, clean search experience in settings. * fix(desktop): add aria-label to search banner clear button
* Enable Enter on destructive alert dialogs * Use AlertDialogAction for enter focus
…uperset-sh#2909) * fix(desktop): implement server-side PR search in new workspace modal Replace client-side PR search with server-side GitHub search to fix performance and completeness issues in the new workspace modal. Previously: - Fetched all PRs upfront (slow 5-10s initial load) - Limited to 30 PRs total (hardcoded backend limit) - Client-side Fuse.js search only searched fetched PRs - Pasting PR URLs didn't work Now: - Fast initial load: shows 30 recent PRs for browsing (~1-2s) - Unlimited search: server-side GitHub search via gh CLI - Searches ALL PRs in the repo (no limits) - Debounced search (300ms) for better UX - URL detection: extracts PR number from pasted GitHub URLs Changes: - Add searchPullRequests tRPC endpoint using gh pr list --search - Update PRLinkCommand to use conditional queries - Add URL parsing to extract PR numbers from GitHub URLs - Show result count and appropriate loading states Fixes the regression from v1.1.7 where PR search could access all PRs via synced database. This approach works without requiring ElectricSQL sync and provides better performance. * fix(desktop): use immediate trim for PR search UI decisions Fix stale UI behavior caused by debouncing the trimmed query value. Previously: - trimmedQuery was derived from debouncedQuery.trim() - This caused 300ms delay before UI decisions (show browse/search mode) - Pressing Enter had stale behavior due to delayed trim Now: - trimmedQuery = searchQuery.trim() (immediate, for UI decisions) - debouncedTrimmed = debouncedQuery.trim() (debounced, for RPC calls) - URL detection and search RPC use debounced value - UI state (enabled flags, display logic) use immediate trim - No more stale behavior on Enter or mode switching * fix(desktop): eliminate 300ms empty results gap in PR search Previously, search mode toggled immediately on trimmedQuery while data fetching was debounced on debouncedTrimmed, causing a 300ms window where the UI showed "No pull requests found" even though results were still loading. Changes: - Add isPendingDebounce state detection (trimmedQuery !== debouncedTrimmed) - Use debouncedTrimmed consistently for all mode decisions and UI display - Include isPendingDebounce in isLoading calculation - Keep trimmedQuery only for pending state detection This ensures the mode doesn't switch until debounced data is ready, eliminating the empty results gap and providing consistent UI behavior. * refactor(desktop): extract shared PR parsing logic Extract parsePullRequests() helper to eliminate duplication between listPullRequests and searchPullRequests endpoints. Both now use the same filter/map logic for consistent PR shape and state mapping. Benefits: - Single source of truth for PR parsing - Future changes only need updating in one place - Consistent behavior across browse and search modes - Reduced code by 18 lines Resolves cubic.dev P3 refactoring suggestion * fix(desktop): address PR search review feedback --------- Co-authored-by: Kiet Ho <hoakiet98@gmail.com>
…#2999) Add an "Open in Editor" context menu item to worktrees in both the sidebar and the all-workspaces list view. Uses the existing openFileInEditor tRPC mutation which resolves the user's configured default editor (project-level, then global fallback).
* fix workspace search regressions * fix workspace-fs test matcher typing * fix compact path search collisions * address review follow-up * canonicalize search index paths
…superset-sh#3001) Replace setImmediate with 16ms setTimeout for PTY output flushing to coalesce rapid TUI redraws into coherent frames (~60fps), preventing renderer flooding that caused bun dev to crash.
* fix(desktop): skip writes to backpressured terminal sockets and rate-limit warnings Combines the fixes from superset-sh#2969 and superset-sh#2962 into a single changeset: 1. Skip writes to backpressured sockets (superset-sh#2969): When a client socket signals backpressure (write returns false), subsequent broadcastEvent calls skip that socket entirely instead of growing Node's internal write buffer without bound. The terminal emulator still processes all data so snapshot state stays consistent — the next TUI repaint after drain naturally resyncs the display. 2. Rate-limit backpressure warnings (superset-sh#2962): Replace unbounded console.warn on every backpressure event with a rate-limited warnBackpressure() method. Only one warning is emitted per 5-second window; subsequent occurrences are counted and reported in the next warning (e.g. '247 similar warnings suppressed'). Under sustained high-output commands, a single pane could previously generate 400k+ identical warnings flooding the daemon log. Tests cover: writes skipped during backpressure, writes resume after drain, warning rate-limiting within the 5s window, and suppressed count reporting after the window elapses. Closes superset-sh#2969 Closes superset-sh#2962 Co-Authored-By: Mastra Code (anthropic/claude-opus-4-6) <noreply@mastra.ai> * fix(desktop): preserve terminal lifecycle events under backpressure * fix(desktop): preserve terminal output under backpressure * test(desktop): trim terminal host session coverage * fix(desktop): remove terminal backpressure warning --------- Co-authored-by: Mastra Code (anthropic/claude-opus-4-6) <noreply@mastra.ai>
* fix: restore codex loading state hooks * fix: enable codex hooks for running state * fix: migrate stale codex preset commands * fix: enable codex hooks in wrapper launches * chore: drop codex loading state detours
…set-sh#3009) * fix(desktop): match dropdown trigger color to run button state The combo dropdown chevron on the WorkspaceRunButton stayed a static color while the main button changed between idle, running (emerald), and unconfigured (muted) states. Apply the same conditional color classes to the dropdown trigger so both halves look consistent. * Lint
* feat(web): add mobile-first agents experience with prompt input and session views Build two new screens for the mobile web experience at app.superset.sh: - Main Screen (/): Prompt input card with model/repo/branch selectors, file attachments, and a searchable session list grouped by recency - Chat Session Screen (/[sessionId]): Chat/Diff tab toggle, message display using existing AI element components, follow-up input Key implementation details: - ResponsiveDropdown component: renders DropdownMenu on desktop, Drawer on mobile (<768px) for all selection controls - Reuses PromptInput compound components from packages/ui - Pixel-art Superset wordmark SVG from desktop app - Mobile-first with safe-area padding, 44px touch targets, viewport-fit - UI-only with mock data — backend wiring comes later - Renames (dashboard) route group to (dashboard-legacy) * Address issues * Update mobile * fix agents review feedback * guard agents header actions --------- Co-authored-by: Kiet Ho <hoakiet98@gmail.com>
* Fix * Test fix * Lint * Fix terminal emulator surrogate pair chunking * Fix lint in surrogate pair regression test * Handle socket disconnect backpressure cleanup
…l init (superset-sh#3030) Fish shell sends a DA1 escape sequence (ESC[c) at startup to detect terminal capabilities. The headless emulator (xterm.js) correctly generates a response, but it was being dropped during the "pending" shell-ready state. This caused fish to wait 10 seconds before timing out and disabling optional features like cursor shape and reflow. The fix removes the shellReadyState gate from the headless emulator's onData callback. Unlike renderer-generated responses (which go through session.write() and are correctly dropped to avoid appearing as typed text), headless emulator responses are written directly to the PTY and consumed by the shell as protocol data. Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Add a sort dropdown to the resource usage screen with four options: Memory (default, descending), CPU (descending), Name (alphabetical), and Sidebar order (matching the left sidebar's visual ordering). Sorting applies to both project groups and workspaces within each group.
* fix(desktop): change close workspace shortcut to ⌘+Shift+Backspace Prevents accidental workspace deletion by requiring Shift modifier. * fix(desktop): keep Win/Linux close workspace shortcut as Ctrl+Shift+Backspace Pin explicit defaults so the auto-derivation doesn't escalate to Ctrl+Shift+Alt+Backspace — the extra modifier is only needed on macOS. * style: format hotkeys test with biome
…rset-sh#3043) axios@1.14.1 pulls in a malicious package (plain-crypto-js@4.2.1) via a compromised maintainer account. Our transitive deps use caret ranges (^1.13.5, ^1.7.7) that would resolve to 1.14.1 on a fresh install. Adding a root override to lock axios at 1.14.0 until the upstream incident is resolved.
…uperset-sh#2994) * Add Amp Code CLI support * Refactor agent registry and add custom agent CRUD groundwork * Use official Amp press kit logos * Use Amp square mark icon * Fix lint warning in agent settings test * Stop tracking repo Amp workspace settings * Lint * Use stdin for interactive Amp prompts * Trim repo-only Amp cleanup changes * Refactor agent prompt transport rendering * Unify builtin and custom agent models * Fix custom agent regressions and MCP precedence
There was a problem hiding this comment.
3 issues found across 346 files
Note: This PR contains a large number of files. cubic only reviews up to 75 files per PR, so some files may not have been reviewed.
Prompt for AI agents (unresolved issues)
Check if these issues are valid — if so, understand the root cause of each and fix them. If appropriate, use sub-agents to investigate and fix each issue separately.
<file name=".github/workflows/triage-issue.yml">
<violation number="1" location=".github/workflows/triage-issue.yml:35">
P2: The workflow references .bun-version, but the file doesn't exist in the repo. setup-bun will fail to resolve the version. Either add the file or keep an explicit bun-version value.</violation>
</file>
<file name="apps/desktop/src/lib/trpc/routers/workspaces/procedures/delete.ts">
<violation number="1" location="apps/desktop/src/lib/trpc/routers/workspaces/procedures/delete.ts:289">
P1: `deleteWorktree` now removes any tracked worktree from disk, including external worktrees marked `createdBySuperset: false`. That changes prior safety behavior and can delete user-managed worktrees.</violation>
</file>
<file name="apps/desktop/src/lib/trpc/routers/workspaces/utils/git.ts">
<violation number="1" location="apps/desktop/src/lib/trpc/routers/workspaces/utils/git.ts:353">
P1: Regex for unmerged (`u`) entries has one extra `\S+` field, so it will never match actual `git status --porcelain=v2` output. The v2 unmerged format is `u <xy> <sub> <m1> <m2> <m3> <h1> <h2> <h3> <path>` (8 fields before path), but the regex expects 9 fields before the path capture. Merge conflicts will be silently ignored.</violation>
</file>
Reply with feedback, questions, or to request a fix. Tag @cubic-dev-ai to re-run a review.
| const isActuallyExternal = | ||
| existsInGit && !trackedPaths.has(worktreePathNorm); | ||
|
|
||
| if (isActuallyExternal) { |
There was a problem hiding this comment.
P1: deleteWorktree now removes any tracked worktree from disk, including external worktrees marked createdBySuperset: false. That changes prior safety behavior and can delete user-managed worktrees.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At apps/desktop/src/lib/trpc/routers/workspaces/procedures/delete.ts, line 289:
<comment>`deleteWorktree` now removes any tracked worktree from disk, including external worktrees marked `createdBySuperset: false`. That changes prior safety behavior and can delete user-managed worktrees.</comment>
<file context>
@@ -267,43 +265,46 @@ export const createDeleteProcedures = () => {
+ const isActuallyExternal =
+ existsInGit && !trackedPaths.has(worktreePathNorm);
+
+ if (isActuallyExternal) {
+ console.warn(
+ `[workspace/delete] Worktree at ${worktree.path} exists in git but not tracked in database - preserving as safety measure`,
</file context>
| if (isActuallyExternal) { | |
| if (!worktree.createdBySuperset) { | |
| console.log( | |
| `[worktree/delete] Skipping disk deletion for external worktree at ${worktree.path}`, | |
| ); | |
| } else if (isActuallyExternal) { |
| const match = entry.match( | ||
| /^u (\S{2}) \S+ \S+ \S+ \S+ \S+ \S+ \S+ \S+ (.+)$/, | ||
| ); |
There was a problem hiding this comment.
P1: Regex for unmerged (u) entries has one extra \S+ field, so it will never match actual git status --porcelain=v2 output. The v2 unmerged format is u <xy> <sub> <m1> <m2> <m3> <h1> <h2> <h3> <path> (8 fields before path), but the regex expects 9 fields before the path capture. Merge conflicts will be silently ignored.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At apps/desktop/src/lib/trpc/routers/workspaces/utils/git.ts, line 353:
<comment>Regex for unmerged (`u`) entries has one extra `\S+` field, so it will never match actual `git status --porcelain=v2` output. The v2 unmerged format is `u <xy> <sub> <m1> <m2> <m3> <h1> <h2> <h3> <path>` (8 fields before path), but the regex expects 9 fields before the path capture. Merge conflicts will be silently ignored.</comment>
<file context>
@@ -203,84 +271,100 @@ function parsePortelainStatus(stdout: string): StatusResult {
- else if (workingStatus === "D") deletedSet.add(path);
- else if (workingStatus === "U") conflictedSet.add(path);
+ if (entry.startsWith("u ")) {
+ const match = entry.match(
+ /^u (\S{2}) \S+ \S+ \S+ \S+ \S+ \S+ \S+ \S+ (.+)$/,
+ );
</file context>
| const match = entry.match( | |
| /^u (\S{2}) \S+ \S+ \S+ \S+ \S+ \S+ \S+ \S+ (.+)$/, | |
| ); | |
| const match = entry.match( | |
| /^u (\S{2}) \S+ \S+ \S+ \S+ \S+ \S+ \S+ (.+)$/, | |
| ); |
| uses: oven-sh/setup-bun@v2 | ||
| with: | ||
| bun-version: 1.3.6 | ||
| bun-version-file: .bun-version |
There was a problem hiding this comment.
P2: The workflow references .bun-version, but the file doesn't exist in the repo. setup-bun will fail to resolve the version. Either add the file or keep an explicit bun-version value.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At .github/workflows/triage-issue.yml, line 35:
<comment>The workflow references .bun-version, but the file doesn't exist in the repo. setup-bun will fail to resolve the version. Either add the file or keep an explicit bun-version value.</comment>
<file context>
@@ -32,7 +32,7 @@ jobs:
uses: oven-sh/setup-bun@v2
with:
- bun-version: 1.3.6
+ bun-version-file: .bun-version
- name: Cache dependencies
</file context>
Latest Upstream Release: Superset Desktop desktop-v1.4.6
Tag:
desktop-v1.4.6Published: 2026-03-31T05:05:08Z
Release Notes
What's Changed
Full Changelog: superset-sh/superset@desktop-v1.4.5...desktop-v1.4.6
54 new commits from upstream.
This PR is automatically created and updated daily to keep the fork in sync with superset-sh/superset.
Summary by cubic
Sync with upstream Superset Desktop v1.4.6 and align CI to
.bun-version. This brings MCP OAuth/auth fixes, a PSK‑secured local host-service, terminal stability/perf improvements, Amp agent support, resource usage sorting, server‑side PR search, and other quality-of-life updates.New Features
{ port, secret }and the renderer includes the secret on HTTP/WSS.SKIP_ENV_VALIDATIONmode with local-only bootstrap.DESKTOP_AUTOMATION_PORTis set.NEXT_PUBLIC_MARKETING_URL; CI/builds read Bun from.bun-version(1.3.11).Bug Fixes
[gone]from being stored as a branch, reject invalid branch names, honor linked PR push targets, and avoid matching historical PRs when heads differ.Written for commit 2885f51. Summary will update on new commits.