mirror of
https://github.com/t8y2/dbx.git
synced 2026-10-30 00:19:35 +00:00
fix: harden handoff status transitions
This commit is contained in:
@@ -22,8 +22,13 @@ export function isPendingHandoff(item: AgentHandoffItem): boolean {
|
||||
return item.status === "queued" || item.status === "shown";
|
||||
}
|
||||
|
||||
export function mergeLoadedHandoffs(items: AgentHandoffItem[]): AgentHandoffItem[] {
|
||||
return items.filter(isPendingHandoff).sort((a, b) => Date.parse(a.createdAt) - Date.parse(b.createdAt));
|
||||
export function mergeLoadedHandoffs(
|
||||
items: AgentHandoffItem[],
|
||||
ignoredIds: ReadonlySet<string> = new Set(),
|
||||
): AgentHandoffItem[] {
|
||||
return items
|
||||
.filter((item) => isPendingHandoff(item) && !ignoredIds.has(item.id))
|
||||
.sort((a, b) => Date.parse(a.createdAt) - Date.parse(b.createdAt));
|
||||
}
|
||||
|
||||
export function updateHandoffStatus(
|
||||
|
||||
@@ -17,6 +17,7 @@ export const useAgentRuntimeStore = defineStore("agentRuntime", () => {
|
||||
const handoffs = ref<AgentHandoffItem[]>([]);
|
||||
const activeHandoffId = ref<string | null>(null);
|
||||
const handoffDialogOpen = ref(false);
|
||||
const locallyClosedHandoffIds = new Set<string>();
|
||||
let timer: ReturnType<typeof setTimeout> | null = null;
|
||||
|
||||
const activeHandoff = computed(() => handoffs.value.find((item) => item.id === activeHandoffId.value) ?? null);
|
||||
@@ -59,7 +60,7 @@ export const useAgentRuntimeStore = defineStore("agentRuntime", () => {
|
||||
}
|
||||
|
||||
async function loadHandoffs() {
|
||||
const loaded = mergeLoadedHandoffs(await api.agentRuntimeLoadHandoffs());
|
||||
const loaded = mergeLoadedHandoffs(await api.agentRuntimeLoadHandoffs(), locallyClosedHandoffIds);
|
||||
handoffs.value = loaded;
|
||||
const state = deriveHandoffDialogState(loaded, activeHandoffId.value);
|
||||
activeHandoffId.value = state.active?.id ?? null;
|
||||
@@ -76,6 +77,7 @@ export const useAgentRuntimeStore = defineStore("agentRuntime", () => {
|
||||
|
||||
async function rejectHandoff(id: string) {
|
||||
await api.agentRuntimeRejectHandoff(id);
|
||||
locallyClosedHandoffIds.add(id);
|
||||
handoffs.value = updateHandoffStatus(handoffs.value, id, "rejected");
|
||||
const state = deriveHandoffDialogState(handoffs.value, activeHandoffId.value === id ? null : activeHandoffId.value);
|
||||
activeHandoffId.value = state.active?.id ?? null;
|
||||
|
||||
Reference in New Issue
Block a user