Keep forked chats focused in new tabs (#2038)
* fix(app): focus explicitly opened workspace tabs Explicit tab navigation could be overwritten by attention-aware workspace navigation when the visible agent had just finished. Make workspace navigation own both normal attention selection and explicit targets so callers cannot sequence them inconsistently. * test(app): strengthen forked tab focus assertion
This commit is contained in:
@@ -3,7 +3,6 @@ import {
|
||||
buildWorkspaceTabPersistenceKey,
|
||||
type WorkspaceTabTarget,
|
||||
} from "@/stores/workspace-tabs-store";
|
||||
import { buildHostWorkspaceRoute } from "@/utils/host-routes";
|
||||
|
||||
export interface PrepareWorkspaceTabInput {
|
||||
serverId: string;
|
||||
@@ -12,17 +11,11 @@ export interface PrepareWorkspaceTabInput {
|
||||
pin?: boolean;
|
||||
}
|
||||
|
||||
export type NavigateToPreparedWorkspaceTabInput = PrepareWorkspaceTabInput;
|
||||
|
||||
export interface PrepareWorkspaceTabDeps {
|
||||
openTabFocused: (workspaceKey: string, target: WorkspaceTabTarget) => string | null;
|
||||
pinAgent: (workspaceKey: string, agentId: string) => void;
|
||||
}
|
||||
|
||||
export interface NavigateToPreparedWorkspaceTabDeps extends PrepareWorkspaceTabDeps {
|
||||
navigateToWorkspace: (serverId: string, workspaceId: string) => void;
|
||||
}
|
||||
|
||||
function getPreparedTarget(target: WorkspaceTabTarget): WorkspaceTabTarget {
|
||||
if (target.kind !== "draft" || target.draftId.trim() !== "new") {
|
||||
return target;
|
||||
@@ -33,7 +26,7 @@ function getPreparedTarget(target: WorkspaceTabTarget): WorkspaceTabTarget {
|
||||
export function prepareWorkspaceTab(
|
||||
input: PrepareWorkspaceTabInput,
|
||||
deps: PrepareWorkspaceTabDeps,
|
||||
): string {
|
||||
): void {
|
||||
const target = getPreparedTarget(input.target);
|
||||
const key =
|
||||
buildWorkspaceTabPersistenceKey({
|
||||
@@ -46,15 +39,4 @@ export function prepareWorkspaceTab(
|
||||
if (input.pin && target.kind === "agent") {
|
||||
deps.pinAgent(key, target.agentId);
|
||||
}
|
||||
|
||||
return buildHostWorkspaceRoute(input.serverId, input.workspaceId);
|
||||
}
|
||||
|
||||
export function navigateToPreparedWorkspaceTab(
|
||||
input: NavigateToPreparedWorkspaceTabInput,
|
||||
deps: NavigateToPreparedWorkspaceTabDeps,
|
||||
): string {
|
||||
const route = prepareWorkspaceTab(input, deps);
|
||||
deps.navigateToWorkspace(input.serverId, input.workspaceId);
|
||||
return route;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user