feat(FN-2595): merge fusion/fn-2595
This commit is contained in:
@@ -239,7 +239,7 @@ export function AgentLogViewer({
|
||||
)}
|
||||
</div>
|
||||
<div className="agent-log-model-group">
|
||||
<span className="agent-log-model-label">Planning/Triage:</span>
|
||||
<span className="agent-log-model-label">Planning:</span>
|
||||
{hasPlanningOverride ? (
|
||||
<span className="agent-log-model-value">
|
||||
<ProviderIcon provider={planningModel.provider!} size="sm" />
|
||||
|
||||
@@ -403,7 +403,7 @@ describe("AgentLogViewer", () => {
|
||||
expect(header!.textContent).toContain("Using default");
|
||||
});
|
||||
|
||||
it("renders model info header with planning/triage model when set", () => {
|
||||
it("renders model info header with planning model when set", () => {
|
||||
const entries = [makeEntry()];
|
||||
const { container } = render(
|
||||
<AgentLogViewer
|
||||
@@ -414,31 +414,31 @@ describe("AgentLogViewer", () => {
|
||||
);
|
||||
const header = container.querySelector("[data-testid='agent-log-model-header']");
|
||||
expect(header).toBeTruthy();
|
||||
expect(header!.textContent).toContain("Planning/Triage:");
|
||||
expect(header!.textContent).toContain("Planning:");
|
||||
expect(header!.textContent).toContain("anthropic/claude-opus-4");
|
||||
// Verify ProviderIcon is rendered for planning
|
||||
expect(container.querySelector('[data-provider="anthropic"]')).toBeTruthy();
|
||||
});
|
||||
|
||||
it("renders 'Using default' for planning/triage when no planning model is set", () => {
|
||||
it("renders 'Using default' for planning when no planning model is set", () => {
|
||||
const entries = [makeEntry()];
|
||||
const { container } = render(
|
||||
<AgentLogViewer entries={entries} loading={false} planningModel={null} />
|
||||
);
|
||||
const header = container.querySelector("[data-testid='agent-log-model-header']");
|
||||
expect(header).toBeTruthy();
|
||||
expect(header!.textContent).toContain("Planning/Triage:");
|
||||
expect(header!.textContent).toContain("Planning:");
|
||||
expect(header!.textContent).toContain("Using default");
|
||||
});
|
||||
|
||||
it("renders 'Using default' for planning/triage when planningModel is undefined", () => {
|
||||
it("renders 'Using default' for planning when planningModel is undefined", () => {
|
||||
const entries = [makeEntry()];
|
||||
const { container } = render(
|
||||
<AgentLogViewer entries={entries} loading={false} />
|
||||
);
|
||||
const header = container.querySelector("[data-testid='agent-log-model-header']");
|
||||
expect(header).toBeTruthy();
|
||||
expect(header!.textContent).toContain("Planning/Triage:");
|
||||
expect(header!.textContent).toContain("Planning:");
|
||||
expect(header!.textContent).toContain("Using default");
|
||||
});
|
||||
|
||||
@@ -459,7 +459,7 @@ describe("AgentLogViewer", () => {
|
||||
expect(header!.textContent).toContain("anthropic/claude-opus-4");
|
||||
expect(header!.textContent).toContain("Validator:");
|
||||
expect(header!.textContent).toContain("openai/gpt-4o");
|
||||
expect(header!.textContent).toContain("Planning/Triage:");
|
||||
expect(header!.textContent).toContain("Planning:");
|
||||
expect(header!.textContent).toContain("google/gemini-pro");
|
||||
// Verify all three ProviderIcons are rendered
|
||||
expect(container.querySelector('[data-provider="anthropic"]')).toBeTruthy();
|
||||
@@ -478,7 +478,7 @@ describe("AgentLogViewer", () => {
|
||||
);
|
||||
const header = container.querySelector("[data-testid='agent-log-model-header']");
|
||||
expect(header).toBeTruthy();
|
||||
expect(header!.textContent).toContain("Planning/Triage:");
|
||||
expect(header!.textContent).toContain("Planning:");
|
||||
expect(header!.textContent).toContain("Using default");
|
||||
});
|
||||
});
|
||||
|
||||
@@ -655,12 +655,12 @@ describe("PluginManager", () => {
|
||||
|
||||
it("filters events by projectId in project-scoped mode", async () => {
|
||||
// Start with plugin disabled
|
||||
vi.mocked(fetchPlugins).mockResolvedValueOnce([{ ...mockPlugins[0], enabled: false }]);
|
||||
vi.mocked(fetchPlugins).mockResolvedValue([{ ...mockPlugins[0], enabled: false }]);
|
||||
|
||||
render(<PluginManager addToast={addToast} projectId="proj-789" />);
|
||||
|
||||
await waitFor(() => {
|
||||
expect(fetchPlugins).toHaveBeenCalled();
|
||||
expect(screen.getByText("Test Plugin A")).toBeTruthy();
|
||||
});
|
||||
|
||||
// Verify initial state - toggle should NOT be checked
|
||||
|
||||
@@ -1908,8 +1908,8 @@ describe("TaskDetailModal", () => {
|
||||
expect(header.textContent).toContain("openai/gpt-4o");
|
||||
});
|
||||
|
||||
// Planning/Triage model resolution tests
|
||||
describe("Planning/Triage model resolution", () => {
|
||||
// Planning model resolution tests
|
||||
describe("Planning model resolution", () => {
|
||||
it("shows planning model from runtime triage log marker", async () => {
|
||||
const { fetchSettings } = await import("../../api");
|
||||
const { useAgentLogs } = await import("../../hooks/useAgentLogs");
|
||||
@@ -1951,7 +1951,7 @@ describe("TaskDetailModal", () => {
|
||||
const header = container.querySelector("[data-testid='agent-log-model-header']");
|
||||
expect(header).toBeTruthy();
|
||||
// Planning should show the runtime triage marker, not settings default
|
||||
expect(header!.textContent).toContain("Planning/Triage:");
|
||||
expect(header!.textContent).toContain("Planning:");
|
||||
expect(header!.textContent).toContain("google/gemini-pro");
|
||||
});
|
||||
|
||||
@@ -2000,7 +2000,7 @@ describe("TaskDetailModal", () => {
|
||||
const header = container.querySelector("[data-testid='agent-log-model-header']");
|
||||
expect(header).toBeTruthy();
|
||||
// Planning should use planningProvider/planningModelId from settings
|
||||
expect(header!.textContent).toContain("Planning/Triage:");
|
||||
expect(header!.textContent).toContain("Planning:");
|
||||
expect(header!.textContent).toContain("openai/gpt-4o");
|
||||
});
|
||||
|
||||
@@ -2024,7 +2024,7 @@ describe("TaskDetailModal", () => {
|
||||
await waitFor(() => {
|
||||
const header = container.querySelector("[data-testid='agent-log-model-header']");
|
||||
expect(header).toBeTruthy();
|
||||
expect(header!.textContent).toContain("Planning/Triage:");
|
||||
expect(header!.textContent).toContain("Planning:");
|
||||
expect(header!.textContent).toContain("anthropic/claude-sonnet-4-5");
|
||||
});
|
||||
|
||||
@@ -2049,7 +2049,7 @@ describe("TaskDetailModal", () => {
|
||||
});
|
||||
|
||||
const header = container.querySelector("[data-testid='agent-log-model-header']")!;
|
||||
expect(header.textContent).toContain("Planning/Triage:");
|
||||
expect(header.textContent).toContain("Planning:");
|
||||
const defaultBadges = header.querySelectorAll(".model-badge-default");
|
||||
// 3 default badges: executor, validator, planning
|
||||
expect(defaultBadges).toHaveLength(3);
|
||||
@@ -2099,7 +2099,7 @@ describe("TaskDetailModal", () => {
|
||||
const header = container.querySelector("[data-testid='agent-log-model-header']");
|
||||
expect(header).toBeTruthy();
|
||||
// Per-task override should take precedence over settings
|
||||
expect(header!.textContent).toContain("Planning/Triage:");
|
||||
expect(header!.textContent).toContain("Planning:");
|
||||
expect(header!.textContent).toContain("google/gemini-2.5-pro");
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user