The dependency-graph plugin imported the deleted taskStuck util through its dashboard interop shim, breaking the dashboard vite build. Remove the isStuck gate from graph nodes, the taskStuckTimeoutMs prop threading, the taskStuck module declaration from dashboard-interop.d.ts, and the stalled-card-as-stuck test coverage. Covered by the existing remove-stuck-task-tagging changeset. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
63 lines
2.8 KiB
TypeScript
63 lines
2.8 KiB
TypeScript
/*
|
|
FNXC:StuckTagRemoval 2026-08-17-22:30:
|
|
The taskStuck shim was deleted with the dashboard's stuck-task tagging; the host module no longer exists.
|
|
*/
|
|
declare module "@fusion/dashboard/app/plugins/types" {
|
|
import type { ReactNode } from "react";
|
|
import type { Task, TaskDetail, TraitFlags, WorkflowStep } from "@fusion/core";
|
|
|
|
export type DetailTaskTab = "definition" | "logs" | "changes" | "comments" | "model" | "workflow" | "pr" | "retries";
|
|
|
|
export type PluginToastType = "success" | "error" | "warning" | "info";
|
|
|
|
export interface PluginDashboardViewContext {
|
|
projectId?: string;
|
|
tasks: Task[];
|
|
workflowSteps: WorkflowStep[];
|
|
openTaskDetail: (task: Task | TaskDetail, initialTab?: DetailTaskTab) => void;
|
|
/* FNXC:WorkflowLifecycleColumns 2026-07-31-15:30: mirrors the host's `PluginDashboardViewContext`. */
|
|
columnFlagsByTaskId?: ReadonlyMap<string, Partial<TraitFlags>>;
|
|
renderTaskCard?: (task: Task | TaskDetail) => ReactNode;
|
|
addToast?: (message: string, type?: PluginToastType) => void;
|
|
}
|
|
|
|
export type PluginTaskView = `plugin:${string}:${string}`;
|
|
}
|
|
|
|
declare module "@fusion/dashboard/app/components/TaskCard" {
|
|
import type { Column, Task, TaskDetail, TraitFlags } from "@fusion/core";
|
|
import type { ReactElement } from "react";
|
|
|
|
interface TaskCardProps {
|
|
task: Task;
|
|
projectId?: string;
|
|
onOpenDetail: (task: Task | TaskDetail) => void;
|
|
addToast: (message: string, type?: "success" | "error" | "info" | "warning") => void;
|
|
globalPaused?: boolean;
|
|
onUpdateTask?: (
|
|
id: string,
|
|
updates: { title?: string; description?: string; dependencies?: string[] }
|
|
) => Promise<Task>;
|
|
onArchiveTask?: (id: string) => Promise<Task>;
|
|
onUnarchiveTask?: (id: string) => Promise<Task>;
|
|
onDeleteTask?: (id: string, options?: { removeDependencyReferences?: boolean }) => Promise<Task>;
|
|
onRetryTask?: (id: string) => Promise<Task>;
|
|
onOpenDetailWithTab?: (task: Task | TaskDetail, initialTab: "changes") => void;
|
|
onOpenMission?: (missionId: string) => void;
|
|
onMoveTask?: (id: string, column: Column, optionsOrPosition?: { preserveProgress?: boolean } | number) => Promise<Task>;
|
|
lastFetchTimeMs?: number;
|
|
/* FNXC:WorkflowLifecycleColumns 2026-07-31-15:30: the prop the host card already accepts; without it
|
|
declared here a plugin-drawn card could not be given the board's traits at all. */
|
|
taskColumnFlags?: Partial<TraitFlags>;
|
|
disableDrag?: boolean;
|
|
}
|
|
|
|
export function TaskCard(props: TaskCardProps): ReactElement;
|
|
}
|
|
|
|
declare module "@fusion/dashboard/app/utils/projectStorage" {
|
|
export function getScopedItem(baseKey: string, projectId?: string): string | null;
|
|
export function setScopedItem(baseKey: string, value: string, projectId?: string): void;
|
|
export function removeScopedItem(baseKey: string, projectId?: string): void;
|
|
}
|