diff --git a/packages/kilo-console/src/client.ts b/packages/kilo-console/src/client.ts index adca1648a7b..37b3822b2f6 100644 --- a/packages/kilo-console/src/client.ts +++ b/packages/kilo-console/src/client.ts @@ -29,6 +29,7 @@ import type { VcsInfo, Worktree, WorktreeDiffItem, + WorktreeListResponse, } from "@kilocode/sdk/v2/client" export type Scope = "global" | "project" @@ -54,7 +55,7 @@ export type ProjectConsoleSnapshot = { project: ProjectItem config: EffectiveConfig vcs: VcsInfo - worktrees: string[] + worktrees: WorktreeListResponse terminals: ProjectTerminalItem[] } @@ -447,7 +448,7 @@ export async function loadProjectConsole(input: ProjectConsoleQuery): Promise loadProjectTerminals({ url: input.url, dir }, dir)), + [query.dir, ...dirs.map((item) => item.directory)].map((dir) => loadProjectTerminals({ url: input.url, dir }, dir)), ) return { diff --git a/packages/kilo-console/src/routes/projects/ProjectConsoleRoute.tsx b/packages/kilo-console/src/routes/projects/ProjectConsoleRoute.tsx index 6ae761e1589..b4d9e09955b 100644 --- a/packages/kilo-console/src/routes/projects/ProjectConsoleRoute.tsx +++ b/packages/kilo-console/src/routes/projects/ProjectConsoleRoute.tsx @@ -58,6 +58,7 @@ type Context = { dir: string label: string kind: "local" | "worktree" + managed: boolean } type Editor = { kind: "create"; value: string } | { kind: "rename"; item: Context; value: string } @@ -135,6 +136,7 @@ function refreshEvent(event: ProjectConsoleEvent) { if (type.startsWith("permission.")) return true if (type.startsWith("question.")) return true if (type.startsWith("message.")) return true + if (type === "global.config.updated") return true return false } @@ -179,8 +181,14 @@ export function ProjectConsoleRoute() { const data = snap() if (!data) return [] return [ - { id: "local", dir: data.project.worktree, label: "Local", kind: "local" }, - ...data.worktrees.map((dir) => ({ id: dir, dir, label: title(dir), kind: "worktree" as const })), + { id: "local", dir: data.project.worktree, label: "Local", kind: "local", managed: false }, + ...data.worktrees.map((item) => ({ + id: item.directory, + dir: item.directory, + label: title(item.directory), + kind: "worktree" as const, + managed: item.managed, + })), ] }) const terminals = createMemo(() => { @@ -499,8 +507,12 @@ export function ProjectConsoleRoute() { setEditor({ kind: "rename", item, value: displayLabel(item) }) } + function canManage(item: Context | undefined) { + return item?.kind === "worktree" && item.managed + } + function removeWorktree(item: Context) { - if (!projectInput() || item.kind === "local") return + if (!projectInput() || !canManage(item)) return setPending({ kind: "delete", item }) } @@ -512,7 +524,7 @@ export function ProjectConsoleRoute() { function resetSelected() { const item = current() - if (!projectInput() || !item || item.kind === "local") return + if (!projectInput() || !canManage(item)) return setPending({ kind: "reset", item }) } @@ -653,7 +665,7 @@ export function ProjectConsoleRoute() { const base = query() const data = snap() if (!base || !data) return - const dirs = new Set([data.project.worktree, ...data.worktrees]) + const dirs = new Set([data.project.worktree, ...data.worktrees.map((item) => item.directory)]) const stop = subscribeProjectEvents({ url: base.url, dir: data.project.worktree }, (event) => { if (event.directory !== "global" && !dirs.has(event.directory)) return const id = eventSession(event) @@ -768,19 +780,21 @@ export function ProjectConsoleRoute() { > - + + + @@ -916,7 +930,7 @@ export function ProjectConsoleRoute() { {current()?.dir ?? snap()?.project.worktree ?? project()} - +