fix(FN-2586): restore 0.4.x release line and agent log stability

This commit is contained in:
gsxdsm
2026-04-26 12:22:06 -07:00
parent 8097db235a
commit ec3e2cb280
24 changed files with 56 additions and 69 deletions

View File

@@ -1,11 +1,11 @@
# @fusion/dashboard
## 1.0.0
## 0.4.0
### Patch Changes
- @fusion/core@1.0.0
- @fusion/engine@1.0.0
- @fusion/core@0.4.0
- @fusion/engine@0.4.0
## 0.2.7

View File

@@ -185,26 +185,6 @@ export function AgentLogViewer({
}
}, [isFullscreen, handleKeyDown]);
if (loading && entries.length === 0) {
return (
<div className="agent-log-viewer" data-testid="agent-log-viewer">
<div className="agent-log-loading">Loading agent logs</div>
</div>
);
}
if (entries.length === 0) {
return (
<div className="agent-log-viewer" data-testid="agent-log-viewer">
<div className="agent-log-empty">No agent output yet.</div>
</div>
);
}
// Reverse entries so newest appear first
const reversedEntries = [...entries].reverse();
const reversedEntryKeys = [...chronologicalEntryKeys].reverse();
const hasExecutorOverride = executorModel?.provider && executorModel?.modelId;
const hasValidatorOverride = validatorModel?.provider && validatorModel?.modelId;
const hasPlanningOverride = planningModel?.provider && planningModel?.modelId;
@@ -242,6 +222,26 @@ export function AgentLogViewer({
planningModel,
]);
if (loading && entries.length === 0) {
return (
<div className="agent-log-viewer" data-testid="agent-log-viewer">
<div className="agent-log-loading">Loading agent logs</div>
</div>
);
}
if (entries.length === 0) {
return (
<div className="agent-log-viewer" data-testid="agent-log-viewer">
<div className="agent-log-empty">No agent output yet.</div>
</div>
);
}
// Reverse entries so newest appear first
const reversedEntries = [...entries].reverse();
const reversedEntryKeys = [...chronologicalEntryKeys].reverse();
return (
<div
ref={containerRef}

View File

@@ -36,6 +36,19 @@ describe("AgentLogViewer", () => {
expect(screen.getByText("No agent output yet.")).toBeTruthy();
});
it("rerenders from empty state to populated logs without changing hook order", () => {
const consoleErrorSpy = vi.spyOn(console, "error").mockImplementation(() => {});
const entry = makeEntry({ text: "streamed chunk" });
const { rerender } = render(<AgentLogViewer entries={[]} loading={false} />);
expect(() => {
rerender(<AgentLogViewer entries={[entry]} loading={false} />);
}).not.toThrow();
expect(screen.getByText("streamed chunk")).toBeTruthy();
consoleErrorSpy.mockRestore();
});
it("renders text entries as spans in reverse order (newest first)", () => {
const entries = [
makeEntry({ text: "first chunk" }),

View File

@@ -1,6 +1,6 @@
{
"name": "@fusion/dashboard",
"version": "1.0.0",
"version": "0.4.0",
"license": "MIT",
"description": "Fusion dashboard: React UI and HTTP API server for monitoring and controlling the Fusion AI coding agent.",
"homepage": "https://github.com/Runfusion/Fusion#readme",