Skip to content

Release v0.8.2 — bugfix/perf roundup#16

Merged
moreih29 merged 4 commits into
mainfrom
develop
Jul 15, 2026
Merged

Release v0.8.2 — bugfix/perf roundup#16
moreih29 merged 4 commits into
mainfrom
develop

Conversation

@moreih29

Copy link
Copy Markdown
Owner

Summary

v0.8.1 이후 버그/성능 수정 3건. 신규 기능 없음 → patch bump (0.8.2).

Fixed

  • file-tree: 빈 파일트리에서 파일/폴더 생성 버튼이 동작하지 않던 문제. 빈 트리에서도 inline-create 행이 렌더되도록 수정.
  • terminal (IME): 한글 조합 중 Home/End(Cmd+←/→) 이동 시 마지막 음절이 중복·재정렬되던 문제(안녕하세요요안녕하세요/안녕하세요요). xterm이 Cmd/Meta에서 조합을 조기 확정하는 것을 막고, ^A/^E nav 바이트를 defer. Home/End→^A/^E 인터셉트(의도된 동작)는 유지.

Changed (perf)

  • pty: 터미널 출력 경로에서 chunk마다 발생하던 main-process 비용 절감(OSC fast-path, ready/event Zod 파싱 게이팅). 동작 불변.

Protocol & Remote 영향

  • 없음. 에이전트 프로토콜/원격 경로/캐시 정책 변경 없음. SSH 재업로드 불필요.

검증

  • 로컬 CI 게이트 통과: typecheck ✓ / lint ✓ / test 3211 pass, 0 fail ✓
  • IME 수정은 실제 xterm 6.0.0 하네스로 dup/순서 4개 nav 케이스 확정.

moreih29 and others added 4 commits July 13, 2026 10:13
Empty tree rendered FileTreeStatusView instead of FileTreeVirtualBody
because showStatusView keyed off flat.length. New File/New Folder set
pending state and getDisplayFlat injected the edit-row sentinel, but the
sentinel only renders inside the virtual body — so the input never
appeared and create silently failed. Gate on displayFlat.length so a
pending create flips rendering to the body.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QkLC8RsJKLN52SeVqDPmFL
Two behavior-preserving fast-paths on the hot PTY delivery path, no
structural/protocol changes:

- OSC notification scan: bail before three global-regex matchAll scans
  when the chunk contains no OSC introducer (ESC ]). Plain text / CSI /
  SGR chunks (the vast majority) now skip the scans entirely.
- NDJSON parseFrame: gate ReadyFrameSchema.safeParse behind a cheap
  `type === "ready"` tag check (ready is emitted once, at handshake) so
  every data/response/event frame no longer pays a full Zod parse just
  to fail it; only parse EventFrameSchema when the `event` key is present.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QkLC8RsJKLN52SeVqDPmFL
…nd nav

Two coordinated fixes in the xterm custom key handler, verified against a
throwaway harness driving the real @xterm/xterm 6.0.0 through the recorded
Korean-IME event sequences:

- Bare Cmd/Meta guard: xterm's CompositionHelper treats Meta (keyCode 91) as
  a composition-ending key, so pressing Cmd mid-composition finalizes the
  syllable, and the following compositionend re-sends it (its
  _compositionPosition never advances) — duplicating the last syllable on the
  Mac-laptop Cmd+←/→ line-nav path ("안녕하세요" + Cmd+← → "요안녕하세요").
  Swallow the bare Meta keydown while composing (no preventDefault, so the
  textarea caret is untouched and offsets stay synced — avoids the earlier
  "stuck" desync class) so the syllable commits exactly once via compositionend.

- Defer the ^A/^E byte: writing the nav byte synchronously raced ahead of
  xterm's deferred composition commit, dragging the syllable to the wrong side
  of the cursor move (physical Home → "요안녕하세"). Scheduling it on a later
  macrotask preserves FIFO order behind the composed syllable.

Harness result (real xterm): all four nav cases (Cmd+←, Cmd+→, physical
Home/End) now emit the syllable once, in order. Adds handler-level regression
tests; existing nav tests flush the deferred write before asserting.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QkLC8RsJKLN52SeVqDPmFL
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QkLC8RsJKLN52SeVqDPmFL
@moreih29 moreih29 merged commit 39d1a82 into main Jul 15, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant