feat(FN-2615): merge fusion/fn-2615 (auto-resolved)
- fix(FN-2615): restore workspace lint and test stability
This commit is contained in:
@@ -803,8 +803,10 @@ describe("MailboxModal", () => {
|
||||
});
|
||||
|
||||
// Inbox tab should have the unread badge
|
||||
const inboxTab = screen.getByTestId("mailbox-agent-subtab-inbox");
|
||||
expect(inboxTab.querySelector(".mailbox-tab-badge")?.textContent).toBe("3");
|
||||
await waitFor(() => {
|
||||
const inboxTab = screen.getByTestId("mailbox-agent-subtab-inbox");
|
||||
expect(inboxTab.querySelector(".mailbox-tab-badge")?.textContent).toBe("3");
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
@@ -1074,7 +1074,7 @@ describe("TaskForm workflow step reordering (FN-836)", () => {
|
||||
expect(onWorkflowStepsChange).toHaveBeenCalledWith(["WS-001", "WS-002", "WS-003"]);
|
||||
});
|
||||
|
||||
it("preserves order when removing a step via checkbox (not reorder remove)", async () => {
|
||||
it("preserves order when removing a step via remove action (not reorder remove)", async () => {
|
||||
const { fetchWorkflowSteps } = await import("../../api");
|
||||
vi.mocked(fetchWorkflowSteps).mockResolvedValueOnce([
|
||||
{ id: "WS-001", name: "QA Check", description: "Run tests", prompt: "Check tests", enabled: true, createdAt: "", updatedAt: "" },
|
||||
@@ -1089,9 +1089,8 @@ describe("TaskForm workflow step reordering (FN-836)", () => {
|
||||
expect(screen.getByTestId("workflow-step-order")).toBeTruthy();
|
||||
});
|
||||
|
||||
// Uncheck WS-002 via checkbox
|
||||
const checkbox = screen.getByTestId("workflow-step-checkbox-WS-002").querySelector('input[type="checkbox"]') as HTMLInputElement;
|
||||
fireEvent.click(checkbox);
|
||||
// Remove WS-002 via explicit remove action
|
||||
fireEvent.click(screen.getByTestId("workflow-step-remove-WS-002"));
|
||||
|
||||
expect(onWorkflowStepsChange).toHaveBeenCalledWith(["WS-001", "WS-003"]);
|
||||
});
|
||||
|
||||
@@ -43,7 +43,7 @@ const promptCatalogReadyPromise = initPromptCatalog();
|
||||
import { createFnAgent as engineCreateFnAgent } from "@fusion/engine";
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
let createFnAgent: any = engineCreateFnAgent;
|
||||
const createFnAgent: any = engineCreateFnAgent;
|
||||
|
||||
function ensureEngineReady(): Promise<void> {
|
||||
return Promise.resolve();
|
||||
|
||||
@@ -17,7 +17,7 @@ import { resolvePrompt } from "@fusion/core";
|
||||
import { createFnAgent as engineCreateFnAgent } from "@fusion/engine";
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
let createFnAgent: any = engineCreateFnAgent;
|
||||
const createFnAgent: any = engineCreateFnAgent;
|
||||
|
||||
function ensureEngineReady(): Promise<void> {
|
||||
return Promise.resolve();
|
||||
|
||||
@@ -25,17 +25,14 @@ import { EventEmitter } from "node:events";
|
||||
import { join, resolve, relative } from "node:path";
|
||||
import { SessionEventBuffer } from "./sse-buffer.js";
|
||||
|
||||
import {
|
||||
createFnAgent as engineCreateFnAgent,
|
||||
buildAgentChatPrompt as engineBuildAgentChatPrompt,
|
||||
} from "@fusion/engine";
|
||||
import * as engine from "@fusion/engine";
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
type AgentResult = any;
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
let createFnAgent: any = engineCreateFnAgent;
|
||||
let createFnAgent: any = engine.createFnAgent;
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
let buildAgentChatPromptFn: any = engineBuildAgentChatPrompt;
|
||||
let buildAgentChatPromptFn: any = "buildAgentChatPrompt" in engine ? engine.buildAgentChatPrompt : undefined;
|
||||
|
||||
/**
|
||||
* Diagnostics logger for the chat module.
|
||||
@@ -889,7 +886,7 @@ export function __setBuildAgentChatPrompt(mock: typeof buildAgentChatPromptFn):
|
||||
export function __resetChatState(): void {
|
||||
chatStreamManager.reset();
|
||||
rateLimits.clear();
|
||||
buildAgentChatPromptFn = engineBuildAgentChatPrompt;
|
||||
buildAgentChatPromptFn = "buildAgentChatPrompt" in engine ? engine.buildAgentChatPrompt : undefined;
|
||||
|
||||
// Reset diagnostics logger to default
|
||||
__setChatDiagnostics(null);
|
||||
|
||||
@@ -99,7 +99,7 @@ import { createFnAgent as engineCreateFnAgent } from "@fusion/engine";
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
type AgentResult = any;
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
let createFnAgent: any = engineCreateFnAgent;
|
||||
const createFnAgent: any = engineCreateFnAgent;
|
||||
|
||||
function ensureEngineReady(): Promise<void> {
|
||||
return Promise.resolve();
|
||||
|
||||
@@ -32,7 +32,7 @@ import { createFnAgent as engineCreateFnAgent } from "@fusion/engine";
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
type AgentResult = any;
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
let createFnAgent: any = engineCreateFnAgent;
|
||||
const createFnAgent: any = engineCreateFnAgent;
|
||||
|
||||
/**
|
||||
* Shared diagnostics helper for the mission-interview module.
|
||||
|
||||
@@ -30,17 +30,12 @@ import {
|
||||
resetDiagnosticsSink,
|
||||
nonfatal,
|
||||
} from "./ai-session-diagnostics.js";
|
||||
import {
|
||||
createFnAgent as engineCreateFnAgent,
|
||||
isNtfyEventEnabled as engineIsNtfyEventEnabled,
|
||||
buildNtfyClickUrl as engineBuildNtfyClickUrl,
|
||||
sendNtfyNotification as engineSendNtfyNotification,
|
||||
} from "@fusion/engine";
|
||||
import * as engine from "@fusion/engine";
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
type AgentResult = any;
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
let createFnAgent: any = engineCreateFnAgent;
|
||||
let createFnAgent: any = engine.createFnAgent;
|
||||
|
||||
interface PlanningNtfyConfig {
|
||||
enabled: boolean;
|
||||
@@ -63,11 +58,29 @@ interface PlanningNtfyHelpers {
|
||||
}) => Promise<void>;
|
||||
}
|
||||
|
||||
let planningNtfyHelpers: PlanningNtfyHelpers | undefined = {
|
||||
isNtfyEventEnabled: engineIsNtfyEventEnabled,
|
||||
buildNtfyClickUrl: engineBuildNtfyClickUrl,
|
||||
sendNtfyNotification: engineSendNtfyNotification,
|
||||
};
|
||||
function buildDefaultPlanningNtfyHelpers(): PlanningNtfyHelpers {
|
||||
const isNtfyEventEnabled =
|
||||
"isNtfyEventEnabled" in engine
|
||||
? engine.isNtfyEventEnabled
|
||||
: (events: NtfyNotificationEvent[] | undefined, event: NtfyNotificationEvent) =>
|
||||
Array.isArray(events) ? events.includes(event) : false;
|
||||
|
||||
const buildNtfyClickUrl = "buildNtfyClickUrl" in engine
|
||||
? engine.buildNtfyClickUrl
|
||||
: () => undefined;
|
||||
|
||||
const sendNtfyNotification = "sendNtfyNotification" in engine
|
||||
? engine.sendNtfyNotification
|
||||
: async () => {};
|
||||
|
||||
return {
|
||||
isNtfyEventEnabled,
|
||||
buildNtfyClickUrl,
|
||||
sendNtfyNotification,
|
||||
};
|
||||
}
|
||||
|
||||
let planningNtfyHelpers: PlanningNtfyHelpers | undefined = buildDefaultPlanningNtfyHelpers();
|
||||
|
||||
/**
|
||||
* Shared diagnostics helper for the planning module.
|
||||
@@ -1693,11 +1706,7 @@ export function __resetPlanningState(): void {
|
||||
_aiSessionDeletedListener = undefined;
|
||||
_aiSessionStore = undefined;
|
||||
|
||||
planningNtfyHelpers = {
|
||||
isNtfyEventEnabled: engineIsNtfyEventEnabled,
|
||||
buildNtfyClickUrl: engineBuildNtfyClickUrl,
|
||||
sendNtfyNotification: engineSendNtfyNotification,
|
||||
};
|
||||
planningNtfyHelpers = buildDefaultPlanningNtfyHelpers();
|
||||
|
||||
// Reset diagnostics sink to default
|
||||
resetDiagnosticsSink();
|
||||
|
||||
@@ -12,7 +12,7 @@ import {
|
||||
import { createFnAgent as engineCreateFnAgent } from "@fusion/engine";
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
let createFnAgent: any = engineCreateFnAgent;
|
||||
const createFnAgent: any = engineCreateFnAgent;
|
||||
|
||||
/**
|
||||
* Shared diagnostics helper for the subtask-breakdown module.
|
||||
|
||||
Reference in New Issue
Block a user