mirror of
https://github.com/MoonshotAI/kimi-code.git
synced 2026-07-09 17:29:12 +00:00
* fix(pi-tui): stop scrollback duplication from viewport rewinds Rewinding the viewport anchor repaints rows that the terminal scrollback already holds, and the next scroll commits them again — every rewind duplicated its span. Two paths triggered it during streaming oscillation (content shrinking then growing back): the shrink re-anchor rewound immediately, and the clamped differential path then painted the shifted content through the screen. Rework the shrink/shift handling around a shared in-place viewport repaint that never scrolls, with the anchor treated as the scrollback high-water mark that must never move backward: - Partial shrinks keep the anchor pinned: the content bottom hovers above a bounded blank gap that the next growth naturally fills. No rewind means duplication is impossible by construction. - Only a collapse past the viewport top (compaction, clears) rewinds, as nothing sensible could be shown otherwise; the content has changed so drastically there that the repainted span is not recognizable as a duplicate. - Above-viewport length changes repaint the visible window in place instead of painting through: nothing scrolls, scrollback keeps the stale old version, and the anchor only advances when the content outgrows the pinned window. - Deleted-tail changes within a pinned viewport repaint at the pinned anchor instead of falling back to a destructive full render. Pure appends keep flowing through the screen into scrollback, and equal-length above-viewport changes keep the bounded clamped diff. * fix(pi-tui): commit skipped rows on anchor advance and guard cursor visibility Address two review findings on the pinned-anchor rendering: - An anchor advance (growth past the pinned viewport combined with an above-viewport change) repainted the screen in place without scrolling, so the rows between the old and new anchor were never committed to scrollback and vanished. repaintViewport now paints from the old anchor and lets the paint loop scroll the skipped rows out, committing each exactly once with fresh content. - positionHardwareCursor recorded hardwareCursorRow on a logical row outside the visible window when the cursor marker sat above a pinned viewport (tall editor after a deep shrink), desyncing every later differential move. It now hides the cursor and keeps the bookkeeping on the real cursor row when the marker is not visible. Also add an e2e rendering-bug ledger (packages/pi-tui/e2e): one xterm-emulated repro per production rendering bug, asserting the renderer invariants (monotonic anchor, exactly-once commit, cursor bookkeeping sync). The two findings above are case05/case06. * ci: run the pi-tui node:test suite in a dedicated job pi-tui's tests (unit + e2e) run on node:test, which the root vitest run silently skips, so CI never executed them. Add a test-pi-tui job that runs the package's test script.
129 lines
3 KiB
YAML
129 lines
3 KiB
YAML
name: CI
|
|
|
|
on:
|
|
pull_request:
|
|
push:
|
|
branches:
|
|
- main
|
|
|
|
permissions:
|
|
contents: read
|
|
|
|
jobs:
|
|
build:
|
|
runs-on: ubuntu-latest
|
|
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
|
|
- uses: pnpm/action-setup@v6
|
|
|
|
- uses: actions/setup-node@v6
|
|
with:
|
|
node-version-file: .nvmrc
|
|
cache: pnpm
|
|
|
|
- run: pnpm install --frozen-lockfile
|
|
- run: pnpm run build
|
|
- name: Smoke test CLI bundle
|
|
run: pnpm -C apps/kimi-code run smoke
|
|
|
|
test:
|
|
runs-on: ubuntu-latest
|
|
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
|
|
- uses: pnpm/action-setup@v6
|
|
|
|
- uses: actions/setup-node@v6
|
|
with:
|
|
node-version-file: .nvmrc
|
|
cache: pnpm
|
|
|
|
- run: pnpm install --frozen-lockfile
|
|
- run: pnpm run test
|
|
|
|
# pi-tui's suite runs on node:test (not vitest), so the root `pnpm run test`
|
|
# does not execute it; it needs its own job.
|
|
test-pi-tui:
|
|
runs-on: ubuntu-latest
|
|
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
|
|
- uses: pnpm/action-setup@v6
|
|
|
|
- uses: actions/setup-node@v6
|
|
with:
|
|
node-version-file: .nvmrc
|
|
cache: pnpm
|
|
|
|
- run: pnpm install --frozen-lockfile
|
|
- run: pnpm --filter @moonshot-ai/pi-tui test
|
|
|
|
test-windows:
|
|
runs-on: windows-latest
|
|
# Temporarily disabled while Windows tests are being stabilized.
|
|
if: false
|
|
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
|
|
- uses: pnpm/action-setup@v6
|
|
|
|
- uses: actions/setup-node@v6
|
|
with:
|
|
node-version-file: .nvmrc
|
|
cache: pnpm
|
|
|
|
- run: pnpm install --frozen-lockfile
|
|
# Windows runners are slower and run the whole suite (including
|
|
# in-process e2e tests) under more contention, so the default 5s test
|
|
# timeout causes flaky failures. Give it more headroom.
|
|
- run: pnpm run test -- --testTimeout=30000
|
|
|
|
lint:
|
|
runs-on: ubuntu-latest
|
|
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
|
|
- uses: pnpm/action-setup@v6
|
|
|
|
- uses: actions/setup-node@v6
|
|
with:
|
|
node-version-file: .nvmrc
|
|
cache: pnpm
|
|
|
|
- run: pnpm install --frozen-lockfile
|
|
- run: pnpm run lint
|
|
- run: pnpm run sherif
|
|
|
|
typecheck:
|
|
runs-on: ubuntu-latest
|
|
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
|
|
- uses: pnpm/action-setup@v6
|
|
|
|
- uses: actions/setup-node@v6
|
|
with:
|
|
node-version-file: .nvmrc
|
|
cache: pnpm
|
|
|
|
- run: pnpm install --frozen-lockfile
|
|
- name: Typecheck
|
|
run: |
|
|
pnpm dlx --package @typescript/native-preview@beta tsgo --version
|
|
for config in packages/*/tsconfig.json apps/kimi-code/tsconfig.json; do
|
|
echo "Typechecking ${config}"
|
|
pnpm dlx --package @typescript/native-preview@beta tsgo -p "${config}" --noEmit
|
|
done
|
|
- name: Typecheck kimi-web (vue-tsc)
|
|
run: pnpm --filter @moonshot-ai/kimi-web run typecheck
|
|
- name: Typecheck vis-server
|
|
run: pnpm --filter @moonshot-ai/vis-server run typecheck
|
|
- name: Typecheck vis-web
|
|
run: pnpm --filter @moonshot-ai/vis-web run typecheck
|