fix(FN-2586): restore 0.4.x release line and agent log stability
This commit is contained in:
@@ -1,5 +0,0 @@
|
|||||||
---
|
|
||||||
"@runfusion/fusion": patch
|
|
||||||
---
|
|
||||||
|
|
||||||
Add project-scoped remote access controls across dashboard Settings, dashboard TUI, and `fn serve`, including provider switching, tunnel lifecycle controls, remote URL/QR generation, and hybrid persistent/short-lived auth token flows.
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
---
|
|
||||||
"@runfusion/fusion": patch
|
|
||||||
---
|
|
||||||
|
|
||||||
Add full Remote controls to the dashboard TUI Settings view, including provider activation, tunnel lifecycle actions, persistent and short-lived token flows, and terminal-friendly URL/QR hand-off behavior.
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
---
|
|
||||||
"@runfusion/fusion": patch
|
|
||||||
---
|
|
||||||
|
|
||||||
Harden Remote Access tunnel lifecycle behavior: tunnel startup remains manual-only, restart restore now uses explicit safety gates (`rememberLastRunning`, prior-running markers, valid provider config, runtime prerequisites), and `/api/remote/status` now reports machine-readable restore diagnostics with consistent dashboard/headless parity.
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
---
|
|
||||||
"@fusion/cli": patch
|
|
||||||
"@fusion/engine": patch
|
|
||||||
---
|
|
||||||
|
|
||||||
Simplify remote access configuration: remove the separate top-level enable toggle. Remote access is now active when a provider (Tailscale or Cloudflare) is selected and configured.
|
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
---
|
---
|
||||||
"@runfusion/fusion": minor
|
"@runfusion/fusion": patch
|
||||||
---
|
---
|
||||||
|
|
||||||
Add Cloudflare Quick Tunnel mode for Remote Access so Fusion can auto-provision an ephemeral `trycloudflare.com` URL via `cloudflared tunnel --url` without requiring a pre-created named tunnel or tunnel token.
|
Add Cloudflare Quick Tunnel mode for Remote Access so Fusion can auto-provision an ephemeral `trycloudflare.com` URL via `cloudflared tunnel --url` without requiring a pre-created named tunnel or tunnel token.
|
||||||
|
|||||||
@@ -1,5 +0,0 @@
|
|||||||
---
|
|
||||||
"@runfusion/fusion": minor
|
|
||||||
---
|
|
||||||
|
|
||||||
Release Remote Access as a user-facing Fusion CLI capability: configure provider switching and tunnel lifecycle controls from dashboard/TUI settings, generate tokenized remote login URL/QR handoff flows, and run the same remote-management surface in headless `fn serve` mode.
|
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
# runfusion.ai
|
# runfusion.ai
|
||||||
|
|
||||||
## 1.0.0
|
## 0.4.0
|
||||||
|
|
||||||
### Patch Changes
|
### Patch Changes
|
||||||
|
|
||||||
@@ -15,7 +15,7 @@
|
|||||||
- Updated dependencies [39622f0]
|
- Updated dependencies [39622f0]
|
||||||
- Updated dependencies [26f9c74]
|
- Updated dependencies [26f9c74]
|
||||||
- Updated dependencies [9d8852e]
|
- Updated dependencies [9d8852e]
|
||||||
- @runfusion/fusion@1.0.0
|
- @runfusion/fusion@0.4.0
|
||||||
|
|
||||||
## 0.2.7
|
## 0.2.7
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# @runfusion/fusion
|
# @runfusion/fusion
|
||||||
|
|
||||||
## 1.0.0
|
## 0.4.0
|
||||||
|
|
||||||
### Minor Changes
|
### Minor Changes
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# @fusion/core
|
# @fusion/core
|
||||||
|
|
||||||
## 1.0.0
|
## 0.4.0
|
||||||
|
|
||||||
## 0.2.7
|
## 0.2.7
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@fusion/core",
|
"name": "@fusion/core",
|
||||||
"version": "1.0.0",
|
"version": "0.4.0",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"description": "Fusion core: task store, scheduler, settings, and shared domain types backing the Fusion AI coding agent.",
|
"description": "Fusion core: task store, scheduler, settings, and shared domain types backing the Fusion AI coding agent.",
|
||||||
"homepage": "https://github.com/Runfusion/Fusion#readme",
|
"homepage": "https://github.com/Runfusion/Fusion#readme",
|
||||||
|
|||||||
@@ -1,11 +1,11 @@
|
|||||||
# @fusion/dashboard
|
# @fusion/dashboard
|
||||||
|
|
||||||
## 1.0.0
|
## 0.4.0
|
||||||
|
|
||||||
### Patch Changes
|
### Patch Changes
|
||||||
|
|
||||||
- @fusion/core@1.0.0
|
- @fusion/core@0.4.0
|
||||||
- @fusion/engine@1.0.0
|
- @fusion/engine@0.4.0
|
||||||
|
|
||||||
## 0.2.7
|
## 0.2.7
|
||||||
|
|
||||||
|
|||||||
@@ -185,26 +185,6 @@ export function AgentLogViewer({
|
|||||||
}
|
}
|
||||||
}, [isFullscreen, handleKeyDown]);
|
}, [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 hasExecutorOverride = executorModel?.provider && executorModel?.modelId;
|
||||||
const hasValidatorOverride = validatorModel?.provider && validatorModel?.modelId;
|
const hasValidatorOverride = validatorModel?.provider && validatorModel?.modelId;
|
||||||
const hasPlanningOverride = planningModel?.provider && planningModel?.modelId;
|
const hasPlanningOverride = planningModel?.provider && planningModel?.modelId;
|
||||||
@@ -242,6 +222,26 @@ export function AgentLogViewer({
|
|||||||
planningModel,
|
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 (
|
return (
|
||||||
<div
|
<div
|
||||||
ref={containerRef}
|
ref={containerRef}
|
||||||
|
|||||||
@@ -36,6 +36,19 @@ describe("AgentLogViewer", () => {
|
|||||||
expect(screen.getByText("No agent output yet.")).toBeTruthy();
|
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)", () => {
|
it("renders text entries as spans in reverse order (newest first)", () => {
|
||||||
const entries = [
|
const entries = [
|
||||||
makeEntry({ text: "first chunk" }),
|
makeEntry({ text: "first chunk" }),
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@fusion/dashboard",
|
"name": "@fusion/dashboard",
|
||||||
"version": "1.0.0",
|
"version": "0.4.0",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"description": "Fusion dashboard: React UI and HTTP API server for monitoring and controlling the Fusion AI coding agent.",
|
"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",
|
"homepage": "https://github.com/Runfusion/Fusion#readme",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# @fusion/desktop
|
# @fusion/desktop
|
||||||
|
|
||||||
## 1.0.0
|
## 0.4.0
|
||||||
|
|
||||||
## 0.2.7
|
## 0.2.7
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@fusion/desktop",
|
"name": "@fusion/desktop",
|
||||||
"version": "1.0.0",
|
"version": "0.4.0",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"description": "Fusion desktop: Electron wrapper around the Fusion dashboard for macOS, Windows, and Linux.",
|
"description": "Fusion desktop: Electron wrapper around the Fusion dashboard for macOS, Windows, and Linux.",
|
||||||
"homepage": "https://github.com/Runfusion/Fusion#readme",
|
"homepage": "https://github.com/Runfusion/Fusion#readme",
|
||||||
|
|||||||
@@ -1,11 +1,11 @@
|
|||||||
# @fusion/engine
|
# @fusion/engine
|
||||||
|
|
||||||
## 1.0.0
|
## 0.4.0
|
||||||
|
|
||||||
### Patch Changes
|
### Patch Changes
|
||||||
|
|
||||||
- @fusion/core@1.0.0
|
- @fusion/core@0.4.0
|
||||||
- @fusion/pi-claude-cli@1.0.0
|
- @fusion/pi-claude-cli@0.4.0
|
||||||
|
|
||||||
## 0.2.7
|
## 0.2.7
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@fusion/engine",
|
"name": "@fusion/engine",
|
||||||
"version": "1.0.0",
|
"version": "0.4.0",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"description": "Fusion engine: executor, merger, scheduler, and automation runtime for the Fusion AI coding agent.",
|
"description": "Fusion engine: executor, merger, scheduler, and automation runtime for the Fusion AI coding agent.",
|
||||||
"homepage": "https://github.com/Runfusion/Fusion#readme",
|
"homepage": "https://github.com/Runfusion/Fusion#readme",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# @fusion/mobile
|
# @fusion/mobile
|
||||||
|
|
||||||
## 1.0.0
|
## 0.4.0
|
||||||
|
|
||||||
## 0.2.7
|
## 0.2.7
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@fusion/mobile",
|
"name": "@fusion/mobile",
|
||||||
"version": "1.0.0",
|
"version": "0.4.0",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"description": "Fusion mobile: Capacitor wrapper around the Fusion dashboard for iOS and Android.",
|
"description": "Fusion mobile: Capacitor wrapper around the Fusion dashboard for iOS and Android.",
|
||||||
"homepage": "https://github.com/Runfusion/Fusion#readme",
|
"homepage": "https://github.com/Runfusion/Fusion#readme",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# @fusion/pi-claude-cli
|
# @fusion/pi-claude-cli
|
||||||
|
|
||||||
## 1.0.0
|
## 0.4.0
|
||||||
|
|
||||||
## 0.2.7
|
## 0.2.7
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@fusion/pi-claude-cli",
|
"name": "@fusion/pi-claude-cli",
|
||||||
"version": "1.0.0",
|
"version": "0.4.0",
|
||||||
"description": "Fusion vendored fork: pi coding-agent extension that routes LLM calls through the Claude Code CLI. Forked from rchern/pi-claude-cli (MIT). See UPSTREAM.md.",
|
"description": "Fusion vendored fork: pi coding-agent extension that routes LLM calls through the Claude Code CLI. Forked from rchern/pi-claude-cli (MIT). See UPSTREAM.md.",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"private": true,
|
"private": true,
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
# @fusion/plugin-sdk
|
# @fusion/plugin-sdk
|
||||||
|
|
||||||
## 1.0.0
|
## 0.4.0
|
||||||
|
|
||||||
### Patch Changes
|
### Patch Changes
|
||||||
|
|
||||||
- @fusion/core@1.0.0
|
- @fusion/core@0.4.0
|
||||||
|
|
||||||
## 0.2.7
|
## 0.2.7
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@fusion/plugin-sdk",
|
"name": "@fusion/plugin-sdk",
|
||||||
"version": "1.0.0",
|
"version": "0.4.0",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"description": "Fusion plugin SDK: types and helpers for authoring third-party plugins that extend the Fusion dashboard and engine.",
|
"description": "Fusion plugin SDK: types and helpers for authoring third-party plugins that extend the Fusion dashboard and engine.",
|
||||||
"homepage": "https://github.com/Runfusion/Fusion#readme",
|
"homepage": "https://github.com/Runfusion/Fusion#readme",
|
||||||
|
|||||||
Reference in New Issue
Block a user