feat(FN-2729): merge fusion/fn-2729

- fix(FN-2729): silence ansi strip lint warning
- test(FN-2729): complete Step 10 — cover node health indicators
- feat(FN-2729): complete Step 9 — colorize CLI node status output
- feat(FN-2729): complete Step 8 — use NodeHealthDot in settings routing status
- test(FN-2729): align ListView node override option expectations
- feat(FN-2729): complete Step 7 — add bulk node status indicators
- fix(engine): prevent auto-merge cooldown loop on unresolvable conflicts
- feat(FN-2911): improve chat attachment compose and preview UX
- feat(FN-2921): merge fusion/fn-2921
- feat(FN-2909): merge fusion/fn-2909
- feat(FN-2914): merge fusion/fn-2914
- feat(FN-2902): merge fusion/fn-2902
- chore(release): v0.8.3
- Update changeset
- fix(tui): swap 3/4 panel hotkeys so they match the help text
- fix(tui): always show auth token and report accurate macOS memory usage

Fusion-Task-Id: FN-2729
This commit is contained in:
Fusion
2026-04-28 23:21:27 -07:00
committed by gsxdsm
parent 15e4cba5e9
commit 19d787d74d
18 changed files with 253 additions and 221 deletions

View File

@@ -245,6 +245,7 @@ describe("node commands", () => {
expect(parsed).toHaveLength(1);
expect(parsed[0].name).toBe("json-node");
expect(parsed[0].apiKey).toBe("none");
expect(output).not.toMatch(/\x1b\[[0-9;]*m/);
});
it("runNodeList masks API keys in JSON output", async () => {
@@ -277,9 +278,18 @@ describe("node commands", () => {
await runNodeList();
const output = logSpy.mock.calls.map((call) => String(call[0])).join("\n");
expect(output).toContain("● online");
expect(output).toContain("○ offline");
expect(output).toContain("✕ error");
expect(output).toContain("\x1b[32m●\x1b[0m \x1b[32monline\x1b[0m");
expect(output).toContain("\x1b[31m○\x1b[0m \x1b[31moffline\x1b[0m");
expect(output).toContain("\x1b[31m✕\x1b[0m \x1b[31merror\x1b[0m");
});
it("runNodeList colorizes connecting status", async () => {
mockListNodes.mockResolvedValue([makeNode({ name: "connecting-node", status: "connecting" })]);
await runNodeList();
const output = logSpy.mock.calls.map((call) => String(call[0])).join("\n");
expect(output).toContain("\x1b[33m◐\x1b[0m \x1b[33mconnecting\x1b[0m");
});
// ── runNodeConnect Tests ─────────────────────────────────────────────────