diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index a4e0ebfa0..42aace77f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -27,7 +27,7 @@ jobs: run: bun test --coverage --coverage-reporter=lcov - name: Upload coverage to Codecov - uses: codecov/codecov-action@v3 + uses: codecov/codecov-action@v5 with: file: ./coverage/lcov.info token: ${{ secrets.CODECOV_TOKEN }} diff --git a/packages/remote-control-server/web/render.js b/packages/remote-control-server/web/render.js index 5678ffff1..19100c9a9 100644 --- a/packages/remote-control-server/web/render.js +++ b/packages/remote-control-server/web/render.js @@ -597,7 +597,7 @@ function renderSystemMessage(text) { const LOADING_ID = "loading-indicator"; // TUI star spinner frames (same as Claude Code CLI) -const SPINNER_FRAMES = ["·", "✢", "✳", "✶", "✻", "✽"]; +const SPINNER_FRAMES = ["·", "✢", "✱", "✶", "✻", "✽"]; const SPINNER_CYCLE = [...SPINNER_FRAMES, ...SPINNER_FRAMES.slice().reverse()]; // 204 verbs from TUI src/constants/spinnerVerbs.ts diff --git a/src/components/Spinner/utils.ts b/src/components/Spinner/utils.ts index 0b90a7a59..6c08375c0 100644 --- a/src/components/Spinner/utils.ts +++ b/src/components/Spinner/utils.ts @@ -3,11 +3,13 @@ import type { RGBColor as RGBColorType } from './types.js' export function getDefaultCharacters(): string[] { if (process.env.TERM === 'xterm-ghostty') { - return ['·', '✢', '✳', '✶', '✻', '*'] // Use * instead of ✽ for Ghostty because the latter renders in a way that's slightly offset + return ['·', '✢', '✱', '✶', '✻', '*'] // ✱ replaces ✳ (emoji, renders offset in Ghostty); * replaces ✽ (same) } + // ✳ (U+2733) is matched by emoji-regex in Node.js → stringWidth returns 2 instead of 1, + // causing layout jitter when the spinner cycles frames. ✱ (U+2731) is visually similar but not emoji. return process.platform === 'darwin' - ? ['·', '✢', '✳', '✶', '✻', '✽'] - : ['·', '✢', '*', '✶', '✻', '✽'] + ? ['·', '✢', '✱', '✶', '✻', '✽'] + : ['·', '✢', '✱', '✶', '✻', '✽'] } // Interpolate between two RGB colors