diff --git a/apps/desktop/src/components/BranchCommitList.svelte b/apps/desktop/src/components/BranchCommitList.svelte
index 892737a63f..7aac8a4171 100644
--- a/apps/desktop/src/components/BranchCommitList.svelte
+++ b/apps/desktop/src/components/BranchCommitList.svelte
@@ -107,7 +107,6 @@
} else {
laneState.selection.set({ branchName, commitId, upstream, previewOpen: true });
}
- projectState.stackId.set(stackId);
onselect?.();
}
diff --git a/apps/desktop/src/components/CreateBranchModal.svelte b/apps/desktop/src/components/CreateBranchModal.svelte
index e9b973f60e..fd52afd26a 100644
--- a/apps/desktop/src/components/CreateBranchModal.svelte
+++ b/apps/desktop/src/components/CreateBranchModal.svelte
@@ -2,8 +2,6 @@
import dependentBranchSvg from '$components/stackTabs/assets/dependent-branch.svg?raw';
import newStackSvg from '$components/stackTabs/assets/new-stack.svg?raw';
import { STACK_SERVICE } from '$lib/stacks/stackService.svelte';
- import { UI_STATE } from '$lib/state/uiState.svelte';
- import { sleep } from '$lib/utils/sleep';
import { inject } from '@gitbutler/core/context';
import {
@@ -28,7 +26,6 @@
let { projectId, stackId }: Props = $props();
const stackService = inject(STACK_SERVICE);
- const uiState = inject(UI_STATE);
const [createNewStack, stackCreation] = stackService.newStack;
const [createNewBranch, branchCreation] = stackService.newBranch;
@@ -84,14 +81,10 @@
async function addNew() {
if (createRefType === 'stack') {
- const stack = await createNewStack({
+ await createNewStack({
projectId,
branch: { name: slugifiedRefName }
});
- // Why is there a timing thing going on here? Without sleep you end
- // up on stacks[0] after creating a new one.
- await sleep(50);
- uiState.project(projectId).stackId.set(stack.id);
createRefModal?.close();
} else {
if (!selectedStackId || !slugifiedRefName) {
diff --git a/apps/desktop/src/components/FeedItem.svelte b/apps/desktop/src/components/FeedItem.svelte
index c5ac183704..08ad5be922 100644
--- a/apps/desktop/src/components/FeedItem.svelte
+++ b/apps/desktop/src/components/FeedItem.svelte
@@ -199,7 +199,7 @@
{getDisplayNameForWorkflowKind(action.kind)}:
-
+
{:else if isFeedMessage(action)}
{#if action.type === 'assistant'}
@@ -237,7 +237,7 @@
{#if action.toolCalls.length > 0}
{#each action.toolCalls as toolCall}
-
+
{/each}
{/if}
diff --git a/apps/desktop/src/components/FeedItemKind.svelte b/apps/desktop/src/components/FeedItemKind.svelte
index 6a7e562f33..b532ee2ad8 100644
--- a/apps/desktop/src/components/FeedItemKind.svelte
+++ b/apps/desktop/src/components/FeedItemKind.svelte
@@ -7,7 +7,6 @@
import type { WorkflowKind } from '$lib/actions/types';
interface BaseProps {
- projectId: string;
type: 'workflow' | 'tool-call';
}
@@ -23,30 +22,26 @@
type Props = WorkflowProps | ToolCallProps;
- const { projectId, ...rest }: Props = $props();
+ const { ...rest }: Props = $props();
const uiState = inject(UI_STATE);
let isExpanded = $state(false);
function selectCommit(stackId: string, branchName: string, commitId: string) {
- const projectState = uiState.project(projectId);
const laneState = uiState.lane(stackId);
laneState.selection.set({
branchName,
commitId,
previewOpen: true
});
- projectState.stackId.set(stackId);
}
function selectBranch(stackId: string, branchName: string) {
- const projectState = uiState.project(projectId);
const laneState = uiState.lane(stackId);
laneState.selection.set({
branchName,
previewOpen: true
});
- projectState.stackId.set(stackId);
}
diff --git a/apps/desktop/src/components/FeedStreamMessage.svelte b/apps/desktop/src/components/FeedStreamMessage.svelte
index 121027d969..7fe8ca1b76 100644
--- a/apps/desktop/src/components/FeedStreamMessage.svelte
+++ b/apps/desktop/src/components/FeedStreamMessage.svelte
@@ -94,7 +94,7 @@
Vibing
{#each toolCalls as toolCall, index (index)}
-
+
{/each}
{/if}
diff --git a/apps/desktop/src/components/NewCommitView.svelte b/apps/desktop/src/components/NewCommitView.svelte
index ff977826d6..bfae1a749a 100644
--- a/apps/desktop/src/components/NewCommitView.svelte
+++ b/apps/desktop/src/components/NewCommitView.svelte
@@ -72,7 +72,6 @@
branch: { name: finalBranchName, order: 0 }
});
finalStackId = stack.id;
- projectState.stackId.set(finalStackId);
finalBranchName = stack.heads[0]?.name; // Updated to access the name property
uiState.global.draftBranchName.set(undefined);
}
diff --git a/apps/desktop/src/lib/stacks/createAiStack.svelte.ts b/apps/desktop/src/lib/stacks/createAiStack.svelte.ts
index 599351c84c..f4933ae834 100644
--- a/apps/desktop/src/lib/stacks/createAiStack.svelte.ts
+++ b/apps/desktop/src/lib/stacks/createAiStack.svelte.ts
@@ -19,16 +19,12 @@ export function useCreateAiStack(projectId: Reactive) {
}
});
- // Because the ui state is updated asyncly, we need to let some time
- // pass. This is far from a good solution to this problem.
- await sleep(50);
- uiState.project(pid).stackId.set(stack.id);
if (!stack.id) return;
-
const lane = uiState.lane(stack.id);
lane.selection.set({ codegen: true, branchName: stack.heads[0]?.name, previewOpen: true });
- // I strongly dislike this sleep
+ // Because the ui state is updated asyncly, we need to let some time
+ // pass. This is far from a good solution to this problem.
await sleep(50);
focusClaudeInput(stack.id);
}
diff --git a/apps/desktop/src/lib/stacks/macros.ts b/apps/desktop/src/lib/stacks/macros.ts
index b298c4bd71..d5c9bf2066 100644
--- a/apps/desktop/src/lib/stacks/macros.ts
+++ b/apps/desktop/src/lib/stacks/macros.ts
@@ -43,8 +43,6 @@ export default class StackMacros {
commitId: outcome.newCommit,
previewOpen: true
});
-
- this.uiState.project(this.projectId).stackId.set(stack.id);
}
}
@@ -124,6 +122,5 @@ export default class StackMacros {
commitId: newCommitId,
previewOpen
});
- this.uiState.project(this.projectId).stackId.set(destinationStackId);
}
}
diff --git a/apps/desktop/src/lib/state/uiState.svelte.ts b/apps/desktop/src/lib/state/uiState.svelte.ts
index c3026f5d41..963e98299d 100644
--- a/apps/desktop/src/lib/state/uiState.svelte.ts
+++ b/apps/desktop/src/lib/state/uiState.svelte.ts
@@ -76,7 +76,6 @@ export type ExclusiveAction =
export type ProjectUiState = {
exclusiveAction: ExclusiveAction | undefined;
- stackId: string | undefined;
branchesSelection: BranchesSelection;
showActions: boolean;
branchesToPoll: string[];
@@ -171,7 +170,6 @@ export class UiState {
readonly project = this.buildScopedProps(this.scopesCache.projects, {
exclusiveAction: undefined,
branchesSelection: {},
- stackId: undefined,
showActions: false,
branchesToPoll: [],
selectedClaudeSession: undefined,
@@ -459,11 +457,6 @@ export function updateStaleProjectState(
) {
const projectState = uiState.project(projectId);
- // Unselect the current stack if it is not in the list of stack IDs
- if (projectState.stackId.current && !stackIds.includes(projectState.stackId.current)) {
- projectState.stackId.set(undefined);
- }
-
if (projectState.exclusiveAction.current) {
updateExclusiveActionState(
projectState.exclusiveAction.current,
diff --git a/apps/desktop/src/lib/testing/mockUiState.ts b/apps/desktop/src/lib/testing/mockUiState.ts
index d44a9b184f..3665ba948e 100644
--- a/apps/desktop/src/lib/testing/mockUiState.ts
+++ b/apps/desktop/src/lib/testing/mockUiState.ts
@@ -25,7 +25,6 @@ const MOCK_STACK_UI_STATE: StackState = {
const MOCK_PROJECT_UI_STATE: ProjectUiState = {
exclusiveAction: undefined,
branchesSelection: { branchName: 'test' },
- stackId: undefined,
showActions: false,
branchesToPoll: [],
selectedClaudeSession: undefined,
diff --git a/apps/desktop/src/routes/[projectId]/workspace/+page.svelte b/apps/desktop/src/routes/[projectId]/workspace/+page.svelte
index 61895ef02c..096ca7547a 100644
--- a/apps/desktop/src/routes/[projectId]/workspace/+page.svelte
+++ b/apps/desktop/src/routes/[projectId]/workspace/+page.svelte
@@ -4,25 +4,18 @@
import WorkspaceView from '$components/WorkspaceView.svelte';
import { MODE_SERVICE } from '$lib/mode/modeService';
import { STACK_SERVICE } from '$lib/stacks/stackService.svelte';
- import { UI_STATE } from '$lib/state/uiState.svelte';
import { inject } from '@gitbutler/core/context';
const modeService = inject(MODE_SERVICE);
const projectId = $derived(page.params.projectId!);
const mode = $derived(modeService.mode({ projectId }));
- const uiState = inject(UI_STATE);
const stackService = inject(STACK_SERVICE);
- const projectState = $derived(uiState.project(projectId));
- const stackId = $derived(projectState.stackId.current);
// Check for stackId in URL query parameters
const urlStackId = $derived(page.url.searchParams.get('stackId'));
let scrollToStackId = $state(undefined);
- const firstStackQuery = $derived(stackService.stackAt(projectId, 0));
- const firstStack = $derived(firstStackQuery.response);
-
// Read all local commits in the workspace for the given project
$effect(() => {
stackService.allLocalCommits(projectId);
@@ -30,10 +23,7 @@
$effect(() => {
if (urlStackId) {
- projectState.stackId.set(urlStackId);
scrollToStackId = urlStackId;
- } else if (stackId === undefined && firstStack) {
- projectState.stackId.set(firstStack.id);
}
});