Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
d8a4c52
fix(desktop): auto-repair worktree path when directory is moved/unnested
Kitenite Mar 5, 2026
0fc3d72
fix(desktop): reject main repo path when repairing worktree path
Kitenite Mar 5, 2026
be7046a
fix(desktop): use realpathSync for main-repo guard and add regression…
Kitenite Mar 5, 2026
9800358
test: derive default branch in main-repo rejection test
Kitenite Mar 5, 2026
dbdc079
fix(desktop): fail explicitly when worktree path is missing in refres…
Kitenite Mar 6, 2026
a48b3bc
fix(desktop): repair stale worktree paths in workspace queries
Kitenite Mar 6, 2026
d5693ef
Merge remote-tracking branch 'origin' into Kitenite/rust-shield
Kitenite Mar 7, 2026
2995064
Path issue
Kitenite Mar 7, 2026
4bbd965
fix(desktop): auto-repair moved tracked worktrees
Kitenite Mar 8, 2026
5075753
refactor(desktop): clarify tracked worktree repair flow
Kitenite Mar 8, 2026
86afa34
Merge remote-tracking branch 'origin' into Kitenite/rust-shield
Kitenite Mar 8, 2026
5e8ed7b
fix(desktop): stabilize worktree repair tests and typing
Kitenite Mar 9, 2026
6012ecf
fix(desktop): keep stale worktrees deletable
Kitenite Mar 9, 2026
01bafa8
fix(desktop): normalize external worktree imports
Kitenite Mar 9, 2026
f64eeb5
fix(desktop): use resolved branch for external imports
Kitenite Mar 9, 2026
08d4a68
fix(desktop): avoid duplicate external worktree imports
Kitenite Mar 10, 2026
d29c5cd
Merge remote-tracking branch 'origin/main' into Kitenite/rust-shield
Kitenite Mar 10, 2026
db75cff
Merge remote-tracking branch 'origin/main' into Kitenite/rust-shield
Kitenite Mar 11, 2026
a820e28
fix(desktop): unblock worktree repair typecheck
Kitenite Mar 11, 2026
386cebb
perf(desktop): move worktree repair off sidebar hot path
Kitenite Mar 11, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 16 additions & 9 deletions apps/desktop/src/lib/trpc/routers/terminal/terminal.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { mkdir, writeFile } from "node:fs/promises";
import path from "node:path";
import { projects, workspaces, worktrees } from "@superset/local-db";
import { projects, workspaces } from "@superset/local-db";
import { TRPCError } from "@trpc/server";
import { observable } from "@trpc/server/observable";
import { eq } from "drizzle-orm";
Expand All @@ -15,6 +15,10 @@ import { getTerminalHostClient } from "main/lib/terminal-host/client";
import { getWorkspaceRuntimeRegistry } from "main/lib/workspace-runtime";
import { z } from "zod";
import { publicProcedure, router } from "../..";
import {
resolveWorktreePathOrThrowWithMetadata,
resolveWorktreePathWithRepair,
} from "../workspaces/utils/repair-worktree-path";
import { assertWorkspaceUsable } from "../workspaces/utils/usability";
import { getWorkspacePath } from "../workspaces/utils/worktree";
import { resolveTerminalThemeType } from "./theme-type";
Expand Down Expand Up @@ -109,9 +113,16 @@ export const createTerminalRouter = () => {
.from(workspaces)
.where(eq(workspaces.id, workspaceId))
.get();
const worktreeResolution =
workspace?.type === "worktree" && workspace.worktreeId
? await resolveWorktreePathOrThrowWithMetadata(workspace.worktreeId)
: null;
const workspacePath = workspace
? (getWorkspacePath(workspace) ?? undefined)
? workspace.type === "worktree" && workspace.worktreeId
? (worktreeResolution?.path ?? undefined)
: (getWorkspacePath(workspace) ?? undefined)
: undefined;

if (workspace?.type === "worktree") {
assertWorkspaceUsable(workspaceId, workspacePath);
}
Expand Down Expand Up @@ -182,6 +193,7 @@ export const createTerminalRouter = () => {
return {
paneId,
isNew: result.isNew,
pathChanged: worktreeResolution?.pathChanged ?? false,
scrollback: result.scrollback,
wasRecovered: result.wasRecovered,
// Cold restore fields (for reboot recovery)
Expand Down Expand Up @@ -442,7 +454,7 @@ export const createTerminalRouter = () => {

getWorkspaceCwd: publicProcedure
.input(z.string())
.query(({ input: workspaceId }) => {
.query(async ({ input: workspaceId }) => {
const workspace = localDb
.select()
.from(workspaces)
Expand All @@ -456,12 +468,7 @@ export const createTerminalRouter = () => {
return null;
}

const worktree = localDb
.select()
.from(worktrees)
.where(eq(worktrees.id, workspace.worktreeId))
.get();
return worktree?.path ?? null;
return resolveWorktreePathWithRepair(workspace.worktreeId);
}),

stream: publicProcedure
Expand Down
Loading