2026-06-10
요약 (AI 작성)
오늘 주요 활동은 ohah/maru의 IME 통합 구현과 여러 플랫폼/터미널 개선이 중심이었습니다. maru는 IME 작성 단계 1과 2를 완성하며 macOS 입력 방식의 문법 기반 단축키, 편집 중 커서 깜빡임 방지, 편집 중 선택 영역 표시, URL 하이퍼링크(OSC 8), 드래그 선택 가독성 개선 등을 구현했습니다. 또한 PTY의 비차단 처리, 배치 큐 개선, 마스터 파일 디스크립터 논블로킹화 등의 핵심 안정성 개선 작업이 이어졌습니다. ohah/suji에서는 터미널용 PTY 플러그인과 로컬 Node 앱용 libnode 포함, dylib 서명과 종료 시 크래시 수정 등을 진행했습니다. ohah/zntc는 ES2025의 duplicate named capture groups 기능과 관련한 다운레벨링 구현과 템플릿 escape 처리, 그룹명 canonical 정규화, template lowering의 CRLF 정규화 등의 정규표현식 및 트랜스포머 개선 작업에 집중했습니다. 이들 변경은 이미 여러 PR로 머지되었으며, zntc에서는 여전히 병목 해결과 escape-aware 처리 개선 PR가 오픈되어 있습니다.
커밋
ohah/maru
- test(platform): headless integration probe for cursor blink (toggle + regeneration)
- feat(platform): cursor blink driven by the 30Hz tick, plus a Swift paste warning fix
- feat(platform): drag-selection autoscroll at the viewport edges
- feat(terminal,platform): Cmd+click opens the URL under the cursor (ABI v16)
- feat(terminal,platform): Cmd+hover underlines URLs and switches to a pointing-hand cursor (ABI v17)
- fix(terminal): invalidate selection on every row-relocating op (single chokepoint)
- fix(platform): remove the IME fallback double-send and bypass the IME for Option chords
- feat(terminal): OSC 8 explicit hyperlinks (cell link ids + interned URI store)
- fix(terminal,platform): BS moves exactly one column; IME-consumed keys stop reaching the PTY
- fix(platform): freeze the cursor blink during composition; commit preedit on focus loss
- fix(platform,pty): non-blocking paste queue, anchored-rewrap perf coverage, deflaked blink probe
- feat(platform): IME stage 1 — NSTextInputClient composition + layout-independent shortcuts (ABI v18)
- fix(pty): add writeInputNonBlocking to the non-macOS stub (Linux CI build break)
- feat(terminal,platform): IME stage 2 — render the in-progress composition (preedit) at the cursor (ABI v19)
- refactor(platform): move the IME decision logic into Zig (ABI v20); fix last-jamo backspace
- diag(platform): add MARU_IME_DEBUG callback trace for the macOS input method
- fix(terminal,platform): drag autoscroll after word-select, no-rebuild cursor blink, pre-rewrap on selection start
- fix(platform,terminal): crash-safe mouse coords, content-following hover underline, URL paren balance
- fix(terminal,platform): strip ESC from pastes (injection), exact Cmd chord, valid hover coords on flagsChanged
- fix(terminal): hide the block cursor during IME composition (no double cursor)
- fix(platform): always close the IME transaction; replay arrows after candidate commit; fail closed on OOM
- fix(platform): cancel insertText+deleteBackward so last-jamo backspace deletes in one press (ABI v21)
- fix(terminal): reset OSC 8 pen_link on screen switch and RIS; add a real RIS hard reset
- fix(pty): make the master fd non-blocking so paste flush never blocks the UI tick
- fix(platform): show preedit when scrolled, normalize committed newlines, stop autoscroll on bad coords, cover new ABI exports
ohah/suji
- fix(bundle/macos): ship libnode with node-backend apps + sign loose dylibs in Contents/MacOS
- fix(node): quit hang — drain only bridge-owned async close callbacks
- feat(plugins): terminal — PTY plugin (forkpty) with streaming output
ohah/zntc
- fix(regexp): duplicate named group 의 \k
backref 를 모든 인덱스 연접으로 다운레벨 (#4198) - fix(transformer): ES2025 duplicate named capture group 다운레벨 silent miscompile (#4198)
- fix(runtime): __wrapRegExp 에 constructor-side prototype 설정 — matchAll/split species 우회로 .groups 유실 (#4200)
- fix(regex_lower): extractNamedGroupMap 이 ES2025 inline modifier 그룹 (?i:...) 을 capturing 으로 오집계 (#4202)
- fix(runtime): __wrapRegExp buildGroups 의 groups map 부재 가드 — cloneRegExp 패턴 크래시 (#4207)
- fix(regexp): transform 이 inline modifier 영역의 유효 플래그 존중 — (?-s:) dot 오재작성 / (?-i:) iu fold 오확장 (#4211)
- fix(transformer): es5 template lowering 의 TV/TRV CR·CRLF→LF 정규화 + line continuation (#4213)
- feat(compat): ES2025 regex_duplicate_named_groups feature gate (#4199)
- fix(regexp): parseGroupNameChar \u{...} hex 누적 u32 오버플로우 — in-loop cap (#4201)
- fix(regexp): 그룹 이름 비교를 canonical (escape 디코드) 코드포인트 시퀀스로 통일 (#4201)
- fix(transformer): proto 그룹명의 groups map 키를 computed key / JSON.parse 로 emit (#4204)
- fix(transformer): replace template replacement 의 unsafe 문자 시 정적 재작성 bail (#4203)
- fix(semantic): 식별자 이름 해석을 string_ref 정본으로 — bundle+minify 의 합성 temp 선언 오삭제/반쪽 rename (#4218)
- fix(transformer): replace 재작성 합성 string literal 의 \u{...} brace escape 다운레벨 (#4214)
- fix(transformer): const-enum string 인라인의 escape-aware 재인용 + brace lowering (#4228)