feat(FN-3431): add merge error recovery for auto-merge conflicts and compac
Merged work from FN-3479 and FN-3431: adds agent heartbeat monitoring with auto-claim and work settings to the engine, finalizes workflow token styling in the dashboard, aligns LlamaCppProviderCard compact layout spacing, and adds regression tests for both the card component and merge error recovery Fusion-Task-Id: FN-3431
This commit is contained in:
@@ -550,10 +550,10 @@ The test config (`vitest.config.ts`) includes `test.css: { include: [/.+/] }` so
|
||||
|
||||
### Lazy-Loaded Heavy Views
|
||||
|
||||
These 13 views are lazy-loaded via `React.lazy()` to manage bundle size:
|
||||
These 15 views are lazy-loaded via `React.lazy()` to manage bundle size:
|
||||
|
||||
- `AgentsView`, `RoadmapsView`, `NodesView`, `ChatView`, `MemoryView`
|
||||
- `DevServerView`, `InsightsView`, `DocumentsView`, `SkillsView`
|
||||
- `DevServerView`, `InsightsView`, `DocumentsView`, `SkillsView`, `ResearchView`, `TodoView`
|
||||
- `SetupWizardModal`, `PluginManager`, `PiExtensionsManager`, `AgentDetailView`
|
||||
|
||||
They are loaded in `App.tsx` / `AppModals.tsx` / `SettingsModal.tsx` / `AgentsView.tsx` with `<Suspense fallback={null}>`.
|
||||
|
||||
@@ -0,0 +1,82 @@
|
||||
import { describe, expect, it } from "vitest";
|
||||
import { readFileSync } from "node:fs";
|
||||
import { resolve } from "node:path";
|
||||
|
||||
const EXPECTED_DOCUMENTED_VIEWS = new Set([
|
||||
"AgentsView",
|
||||
"RoadmapsView",
|
||||
"NodesView",
|
||||
"ChatView",
|
||||
"MemoryView",
|
||||
"DevServerView",
|
||||
"InsightsView",
|
||||
"DocumentsView",
|
||||
"SkillsView",
|
||||
"ResearchView",
|
||||
"TodoView",
|
||||
"SetupWizardModal",
|
||||
"PluginManager",
|
||||
"PiExtensionsManager",
|
||||
"AgentDetailView",
|
||||
]);
|
||||
|
||||
const EXPECTED_APP_LEVEL_VIEWS = new Set([
|
||||
"AgentsView",
|
||||
"DocumentsView",
|
||||
"InsightsView",
|
||||
"ResearchView",
|
||||
"NodesView",
|
||||
"ChatView",
|
||||
"RoadmapsView",
|
||||
"SkillsView",
|
||||
"MemoryView",
|
||||
"DevServerView",
|
||||
"TodoView",
|
||||
]);
|
||||
|
||||
function extractLazyLoadedSection(agentsDoc: string): string {
|
||||
const match = agentsDoc.match(/### Lazy-Loaded Heavy Views[\s\S]*?(?=\n### |\n---|$)/);
|
||||
if (!match) {
|
||||
throw new Error("Lazy-Loaded Heavy Views section not found in AGENTS.md");
|
||||
}
|
||||
return match[0];
|
||||
}
|
||||
|
||||
function extractBacktickedNamesFromBullets(section: string): string[] {
|
||||
return section
|
||||
.split("\n")
|
||||
.filter((line) => line.trim().startsWith("- "))
|
||||
.flatMap((line) => [...line.matchAll(/`([^`]+)`/g)].map((m) => m[1]));
|
||||
}
|
||||
|
||||
function extractAppLazyViews(appSource: string): Set<string> {
|
||||
const matches = [...appSource.matchAll(/const\s+(\w+)\s*=\s*lazy\(/g)].map((m) => m[1]);
|
||||
return new Set(matches.map((name) => (name === "_TodoView" ? "TodoView" : name)));
|
||||
}
|
||||
|
||||
describe("AGENTS lazy-loaded views inventory", () => {
|
||||
it("documents the App-level lazy views accurately and keeps the curated 15-view list in sync", () => {
|
||||
const agentsDoc = readFileSync(resolve(__dirname, "../../../../AGENTS.md"), "utf-8");
|
||||
const appSource = readFileSync(resolve(__dirname, "../App.tsx"), "utf-8");
|
||||
|
||||
const section = extractLazyLoadedSection(agentsDoc);
|
||||
const countMatch = section.match(/These\s+(\d+)\s+views\s+are lazy-loaded/);
|
||||
expect(countMatch).toBeTruthy();
|
||||
expect(Number(countMatch?.[1])).toBe(15);
|
||||
|
||||
const documentedViews = extractBacktickedNamesFromBullets(section);
|
||||
expect(new Set(documentedViews)).toEqual(EXPECTED_DOCUMENTED_VIEWS);
|
||||
expect(documentedViews).toHaveLength(15);
|
||||
|
||||
expect(section).toContain("`ResearchView`");
|
||||
expect(section).toContain("`TodoView`");
|
||||
expect((section.match(/`AgentDetailView`/g) ?? []).length).toBe(1);
|
||||
|
||||
const appLevelViews = extractAppLazyViews(appSource);
|
||||
expect(appLevelViews).toEqual(EXPECTED_APP_LEVEL_VIEWS);
|
||||
|
||||
for (const view of appLevelViews) {
|
||||
expect(EXPECTED_DOCUMENTED_VIEWS.has(view)).toBe(true);
|
||||
}
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user