diff --git a/packages/kilo-vscode/tests/unit/working-indicator.test.ts b/packages/kilo-vscode/tests/unit/working-indicator.test.ts new file mode 100644 index 00000000000..e2929144cc8 --- /dev/null +++ b/packages/kilo-vscode/tests/unit/working-indicator.test.ts @@ -0,0 +1,20 @@ +import { describe, expect, it } from "bun:test" +import { tracksElapsed } from "../../webview-ui/src/components/shared/working-indicator-utils" + +describe("tracksElapsed", () => { + it("tracks pending submissions before backend status arrives", () => { + expect(tracksElapsed("idle", true, 1)).toBe(true) + }) + + it("tracks active backend statuses", () => { + expect(tracksElapsed("busy", false, 1)).toBe(true) + expect(tracksElapsed("retry", false, 1)).toBe(true) + expect(tracksElapsed("offline", false, 1)).toBe(true) + }) + + it("stops for idle sessions and missing start times", () => { + expect(tracksElapsed("idle", false, 1)).toBe(false) + expect(tracksElapsed("busy", false, undefined)).toBe(false) + expect(tracksElapsed("idle", true, undefined)).toBe(false) + }) +}) diff --git a/packages/kilo-vscode/webview-ui/src/components/shared/WorkingIndicator.tsx b/packages/kilo-vscode/webview-ui/src/components/shared/WorkingIndicator.tsx index a46c9a0b1df..efddf2e2bc9 100644 --- a/packages/kilo-vscode/webview-ui/src/components/shared/WorkingIndicator.tsx +++ b/packages/kilo-vscode/webview-ui/src/components/shared/WorkingIndicator.tsx @@ -10,6 +10,7 @@ import { Button } from "@kilocode/kilo-ui/button" import { useSession } from "../../context/session" import { useLanguage } from "../../context/language" import { useVSCode } from "../../context/vscode" +import { tracksElapsed } from "./working-indicator-utils" export const WorkingIndicator: Component = () => { const session = useSession() @@ -23,7 +24,7 @@ export const WorkingIndicator: Component = () => { const since = session.busySince() const status = session.status() - if (status === "idle" || !since) { + if (!tracksElapsed(status, session.submitting(), since)) { setElapsed(0) return } diff --git a/packages/kilo-vscode/webview-ui/src/components/shared/working-indicator-utils.ts b/packages/kilo-vscode/webview-ui/src/components/shared/working-indicator-utils.ts new file mode 100644 index 00000000000..7b66e886bcd --- /dev/null +++ b/packages/kilo-vscode/webview-ui/src/components/shared/working-indicator-utils.ts @@ -0,0 +1,5 @@ +import type { SessionStatus } from "../../types/messages" + +export function tracksElapsed(status: SessionStatus, submitting: boolean, since: number | undefined): since is number { + return since !== undefined && (status !== "idle" || submitting) +}