fix: sync debug polling with route changes (#1373) (thanks @yazinsai)
This commit is contained in:
@@ -10,6 +10,7 @@ Docs: https://docs.clawd.bot
|
|||||||
|
|
||||||
### Fixes
|
### Fixes
|
||||||
- Doctor: warn when gateway.mode is unset with configure/config guidance.
|
- Doctor: warn when gateway.mode is unset with configure/config guidance.
|
||||||
|
- UI: refresh debug panel on route-driven tab changes. (#1373) Thanks @yazinsai.
|
||||||
|
|
||||||
## 2026.1.21
|
## 2026.1.21
|
||||||
|
|
||||||
|
|||||||
@@ -273,7 +273,7 @@ describe("update-cli", () => {
|
|||||||
try {
|
try {
|
||||||
await fs.writeFile(
|
await fs.writeFile(
|
||||||
path.join(tempDir, "package.json"),
|
path.join(tempDir, "package.json"),
|
||||||
JSON.stringify({ name: "clawdbot", version: "2026.1.18-1" }),
|
JSON.stringify({ name: "clawdbot", version: "1.0.0" }),
|
||||||
"utf-8",
|
"utf-8",
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
91
ui/src/ui/app-settings.test.ts
Normal file
91
ui/src/ui/app-settings.test.ts
Normal file
@@ -0,0 +1,91 @@
|
|||||||
|
import { beforeEach, describe, expect, it, vi } from "vitest";
|
||||||
|
|
||||||
|
import type { Tab } from "./navigation";
|
||||||
|
|
||||||
|
type SettingsHost = Parameters<typeof import("./app-settings").setTabFromRoute>[0];
|
||||||
|
|
||||||
|
const createHost = (tab: Tab): SettingsHost => ({
|
||||||
|
settings: {
|
||||||
|
gatewayUrl: "",
|
||||||
|
token: "",
|
||||||
|
sessionKey: "main",
|
||||||
|
lastActiveSessionKey: "main",
|
||||||
|
theme: "system",
|
||||||
|
chatFocusMode: false,
|
||||||
|
chatShowThinking: true,
|
||||||
|
splitRatio: 0.6,
|
||||||
|
navCollapsed: false,
|
||||||
|
navGroupsCollapsed: {},
|
||||||
|
},
|
||||||
|
theme: "system",
|
||||||
|
themeResolved: "dark",
|
||||||
|
applySessionKey: "main",
|
||||||
|
sessionKey: "main",
|
||||||
|
tab,
|
||||||
|
connected: false,
|
||||||
|
chatHasAutoScrolled: false,
|
||||||
|
logsAtBottom: false,
|
||||||
|
eventLog: [],
|
||||||
|
eventLogBuffer: [],
|
||||||
|
basePath: "",
|
||||||
|
themeMedia: null,
|
||||||
|
themeMediaHandler: null,
|
||||||
|
});
|
||||||
|
|
||||||
|
describe("setTabFromRoute", () => {
|
||||||
|
beforeEach(() => {
|
||||||
|
vi.resetModules();
|
||||||
|
});
|
||||||
|
|
||||||
|
it("starts and stops log polling based on the tab", async () => {
|
||||||
|
const startLogsPolling = vi.fn();
|
||||||
|
const stopLogsPolling = vi.fn();
|
||||||
|
const startDebugPolling = vi.fn();
|
||||||
|
const stopDebugPolling = vi.fn();
|
||||||
|
|
||||||
|
vi.doMock("./app-polling", () => ({
|
||||||
|
startLogsPolling,
|
||||||
|
stopLogsPolling,
|
||||||
|
startDebugPolling,
|
||||||
|
stopDebugPolling,
|
||||||
|
}));
|
||||||
|
|
||||||
|
const { setTabFromRoute } = await import("./app-settings");
|
||||||
|
const host = createHost("chat");
|
||||||
|
|
||||||
|
setTabFromRoute(host, "logs");
|
||||||
|
expect(startLogsPolling).toHaveBeenCalledTimes(1);
|
||||||
|
expect(stopLogsPolling).not.toHaveBeenCalled();
|
||||||
|
expect(startDebugPolling).not.toHaveBeenCalled();
|
||||||
|
expect(stopDebugPolling).toHaveBeenCalledTimes(1);
|
||||||
|
|
||||||
|
setTabFromRoute(host, "chat");
|
||||||
|
expect(stopLogsPolling).toHaveBeenCalledTimes(1);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("starts and stops debug polling based on the tab", async () => {
|
||||||
|
const startLogsPolling = vi.fn();
|
||||||
|
const stopLogsPolling = vi.fn();
|
||||||
|
const startDebugPolling = vi.fn();
|
||||||
|
const stopDebugPolling = vi.fn();
|
||||||
|
|
||||||
|
vi.doMock("./app-polling", () => ({
|
||||||
|
startLogsPolling,
|
||||||
|
stopLogsPolling,
|
||||||
|
startDebugPolling,
|
||||||
|
stopDebugPolling,
|
||||||
|
}));
|
||||||
|
|
||||||
|
const { setTabFromRoute } = await import("./app-settings");
|
||||||
|
const host = createHost("chat");
|
||||||
|
|
||||||
|
setTabFromRoute(host, "debug");
|
||||||
|
expect(startDebugPolling).toHaveBeenCalledTimes(1);
|
||||||
|
expect(stopDebugPolling).not.toHaveBeenCalled();
|
||||||
|
expect(startLogsPolling).not.toHaveBeenCalled();
|
||||||
|
expect(stopLogsPolling).toHaveBeenCalledTimes(1);
|
||||||
|
|
||||||
|
setTabFromRoute(host, "chat");
|
||||||
|
expect(stopDebugPolling).toHaveBeenCalledTimes(1);
|
||||||
|
});
|
||||||
|
});
|
||||||
@@ -264,6 +264,9 @@ export function setTabFromRoute(host: SettingsHost, next: Tab) {
|
|||||||
if (next === "logs")
|
if (next === "logs")
|
||||||
startLogsPolling(host as unknown as Parameters<typeof startLogsPolling>[0]);
|
startLogsPolling(host as unknown as Parameters<typeof startLogsPolling>[0]);
|
||||||
else stopLogsPolling(host as unknown as Parameters<typeof stopLogsPolling>[0]);
|
else stopLogsPolling(host as unknown as Parameters<typeof stopLogsPolling>[0]);
|
||||||
|
if (next === "debug")
|
||||||
|
startDebugPolling(host as unknown as Parameters<typeof startDebugPolling>[0]);
|
||||||
|
else stopDebugPolling(host as unknown as Parameters<typeof stopDebugPolling>[0]);
|
||||||
if (host.connected) void refreshActiveTab(host);
|
if (host.connected) void refreshActiveTab(host);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user