Skip to content

Releases: moreih29/nexus-code

v0.7.1 — 브라우저 탭 블랭크 핫픽스

10 Jun 10:09
3a4d72f

Choose a tag to compare

Fixed

  • 브라우저 탭이 까맣게 빈 채로 멈추는 문제 수정. 에디터에서 찾기(Cmd+F)를 한 번이라도 사용하면 Monaco가 Find/Replace 위젯(.editor-widget.find-widget[role="dialog"])을 DOM에 영구히 남깁니다. 브라우저 자동 숨김 감시기가 이 노드를 "오버레이가 떠 있다"로 오인해, 해당 워크스페이스의 브라우저 뷰를 계속 숨긴 채로 두던 버그입니다(워크스페이스 창마다 독립적으로 발생, 크래시 아님).
    • 오버레이 판정에서 Monaco 에디터 위젯(.monaco-editor 하위 + .editor-widget 클래스 — 컨텍스트 메뉴·suggest·overflow 위젯 포함)과 aria-hidden="true" 노드를 제외하도록 수정. 실제로 화면을 가리는 포털 오버레이만 인식합니다.
    • 추가 안전망: 창 포커스 / 가시성 복귀 시 상태를 재동기화해, 백그라운드 동안 어긋난 suspend 상태가 자동 복구됩니다.

Protocol & Remote 영향

  • 없음. 렌더러 한정 수정으로, 프로토콜·원격 에이전트·캐시 구조 변경이 없습니다.

v0.7.0 — 사용자 키바인딩 커스터마이즈

10 Jun 06:24
85232d1

Choose a tag to compare

Added

  • Settings → Keyboard Shortcuts — VSCode 스타일 키바인딩 커스터마이즈. 애플리케이션/에디터 섹션 분리(기본 접힘, 검색·필터 시 자동 펼침), 충돌 감지 + 행별 충돌 배지 + "Conflicts only" 필터, 인라인 레코더(원시 키 입력 캡처, IME 가드, chord 지원). 충돌이 있어도 저장은 차단하지 않고 경고 후 유지(VSCode 모델).
  • In-page 브라우저 단축키 — focus URL / reload / hard reload / back / forward 를 키바인딩 테이블로 라우팅하여 사용자 오버라이드 적용. 브라우저 페이지(WebContentsView)가 포커스를 가진 상태에서도 동작.

Fixed

  • 에디터 하이라이트 tier를 반투명 처리해 선택 영역이 가려지지 않도록 수정.
  • Cmd+/ 가 split-right를 가로채던 문제 수정, Monaco 주석 토글 복원.

Protocol & Remote 영향

  • 없음. 키바인딩 오버라이드는 기존 app-state 스키마에 optional 필드 2개(keybindingOverrides, editorKeybindingOverrides)를 더하는 델타 방식입니다. 부재 시 전부 기본값으로 동작하고, 모르는 command id는 apply 시점에 drop(버전 스큐 내성)됩니다. 신규 저장 파일이나 ~/.nexus-code/ 캐시 구조 변경이 없어 마이그레이션·SSH 재업로드가 필요 없습니다.

v0.6.2 — browser tab focus, PDF, Chrome-parity nav

09 Jun 11:57
639d33d

Choose a tag to compare

Fixed

  • 브라우저 탭의 패널(페이지) 영역을 클릭해도 해당 그룹으로 포커스가 이동하지 않던 문제. 이제 페이지를 클릭하면 그 탭이 속한 그룹이 활성화된다 (이전에는 탭 헤더만 눌러야 했음).
  • 브라우저 탭에서 PDF가 빈 화면으로 뜨던 문제. Electron 41의 내장 PDF 뷰어는 문서를 out-of-process 서브프레임(chrome-extension://…)으로 렌더하는데, 네비게이션 가드가 이를 차단하고 있었다. 해당 내장 뷰어 출처만 허용해 크롬 네이티브 PDF 뷰어가 정상 동작한다.

Changed (Chrome 패리티)

  • 서브프레임 한정으로 data:/blob: iframe을 허용 (top-level은 계속 차단, javascript:는 모든 프레임에서 차단). 임베드 뷰어·생성된 미리보기·blob 미디어가 표시된다.
  • OAuth/SSO 팝업(window.open) 허용. 하드닝된 팝업으로 열리며(sandbox/contextIsolation/webSecurity 유지, opener의 파티션·세션·권한 핸들러 상속) postMessage 기반 로그인 흐름이 동작한다. 팝업에도 동일 네비게이션 가드를 재귀 적용한다. (DRM/Widevine은 여전히 미지원 — Electron이 CDM을 번들하지 않음.)

Protocol & Remote 영향

  • 없음. 변경은 브라우저 탭 렌더러/네비게이션 정책에 한정되며 agent 프로토콜·SSH·캐시 구조와 무관하다.

v0.6.1 — 로컬 워크스페이스 자동 갱신/터미널/LSP 회귀 수정

06 Jun 14:24
0b2275d

Choose a tag to compare

0.6.0에서 도입된 채널 lifecycle 이벤트(degraded 등)를 구버전 핸들러들이 "채널 사망"으로 오인해 발생한 회귀 일괄 수정 릴리스입니다.

Fixed

  • 로컬 워크스페이스 watch/PTY/LSP 회귀 (v0.6.0): 하트비트 1회 지연(degraded)에 로컬 채널 provider가 teardown되어 다음 증상이 발생 —
    • 파일트리·깃 상태 자동 갱신 정지 (fs.changed/git.changed push 영구 침묵, autofetch 1분 주기만 동작)
    • 기존 터미널 세션 먹통
    • LSP 서버(자동완성·진단) 전멸
    • watch를 보유한 고아 에이전트 프로세스 잔류
      teardown을 진짜 종료 이벤트(exit/failure)로 한정해 수정.
  • 하트비트 경계 걸침 제거: 송신 4초 / 판정 5초로 분리. 도착이 항상 판정 기준+ε에 걸려 만성적으로 발생하던 거짓 degraded의 구조적 원인 제거. 실측 검증(광고 5000ms / 도착 간격 3999–4000ms).

Added (내부)

  • 에이전트 채널 lifecycle 로깅 (main.log, source agent-channel) — spawn/ready/close/respawn을 PID·exit code·stderr tail과 함께 기록. 채널 이상 진단의 1차 단서.
  • 재연결 시 fs/git watch 자동 replay — 에이전트 프로세스가 진짜 교체돼도 감시 등록이 자동 복구됨. 로컬 채널 재연결 성공 시 ready lifecycle 신호 추가.

Protocol & Remote 영향

  • Agent protocol version 변경 없음 (v2, wire 호환).
  • 첫 SSH 부팅 시 에이전트 재업로드 발생 — Go 바이너리 변경(하트비트 송신 주기)으로 sha256이 바뀌어 자동 재업로드됩니다.

🤖 Generated with Claude Code

v0.6.0 — SSH 재접속 복원

05 Jun 06:55
4e92434

Choose a tag to compare

Added

  • SSH 끊김 자동 복구: 연결이 일시적으로 끊겨도 터미널 세션(실행 중인 claude, vim 등 포함)이 원격에서 유지되고, 재접속 시 그대로 복원됩니다.
    • 원격 에이전트가 daemon/dialer 구조로 분리 — 데몬이 PTY를 소유하고 SSH 단절을 넘어 생존 (최대 300초 grace, 만료 시 자가 정리)
    • 끊김 감지 ~12초 (heartbeat 5s × 3-miss), 재접속 후 reattach는 ~150ms
    • 단절 중 터미널 출력은 세션당 1MiB 링 버퍼에 보존 후 재생
    • 복원 직후 풀스크린 TUI 자동 repaint (SIGWINCH wiggle)
  • 재접속 UX: 사이드바 dot "불안정" 펄스 → 끊김 시 터미널 hold 배너+만료 카운트다운 → 복원 플래시 → 만료 시 안내 문구
  • 비밀번호 워크스페이스 자동 재인증: 재접속 시 비밀번호 프롬프트가 자동으로 뜨고 (백오프 0→5s→30s, 3회), 입력 즉시 세션이 복원됩니다.

Changed

  • SSH keepalive 강화: ServerAliveInterval 15s → 5s (감지 ~45s → ~15s)
  • 원격 부트 로그(run/<wsId>.log) 1MiB 상한 (이전: 무제한 증식)

Fixed

  • 인증 실패 시 무한 재연결 루프 → 3회 후 명시적 실패로 전환
  • OSC 52 멀티바이트(한글 등) 복사 깨짐 수정
  • 종료된 앱 인스턴스가 남긴 임시 디렉터리/소켓 찌꺼기 자동 정리 (로컬 nexus-ssh-*, 원격 run/ — 살아있는 인스턴스는 flock·소켓 프로브로 보호)
  • (재발행) 프로토콜 major 상수 드리프트로 로컬 워크스페이스 핸드셰이크가 실패하던 문제 수정 — TS 측 기대값을 envelope.ts 단일 진실원으로 통합하고, Go↔TS 버전 동기화 테스트를 추가해 재발을 CI에서 차단. (첫 v0.6.0 발행본은 철회됨)

Protocol & Remote 영향

  • Agent protocol version: 1 → 2 (major). 구버전 앱은 신버전 원격 에이전트와 통신할 수 없습니다 — 앱 업데이트 후 첫 접속 시 자동 해결됩니다.
  • 첫 SSH 부팅 시 에이전트 재업로드: 원격 바이너리가 갱신되어 워크스페이스별 첫 접속에서 자동 재업로드됩니다. 바이너리 파일명에 버전이 포함되어 구버전 앱과 원격 호스트를 공유해도 충돌하지 않습니다.
  • ~/.nexus-code/ 구조 변경: run/<wsId>.{lock,sock,log} 디렉터리 신설 (데몬 단일 인스턴스 lock, reattach 소켓, 부트 로그). 데몬 부팅 시 죽은 인스턴스의 잔존 파일을 자동 정리합니다.

🤖 Generated with Claude Code

v0.5.4 — SSH 재연결 신뢰성 수정

04 Jun 03:36
af91d3b

Choose a tag to compare

Fixed

  • SSH 워크스페이스 영구 끊김 수정: 일시적 네트워크 단절 후 SSH 워크스페이스가 자동 재연결되지 않고 끊긴 채로 남던 문제를 수정했습니다. 원격 agent가 전송 채널 리셋(EOF 아님)을 정상 종료(exit 0)로 처리해 클라이언트가 재연결을 건너뛰던 것이 원인입니다. 이제 전송 read 에러는 non-zero(EX_IOERR, 74)로 종료해 클라이언트의 기존 재연결 경로가 동작하며, 깨끗한 EOF(의도된 종료)는 exit 0을 유지해 불필요한 재연결을 막습니다.

Protocol & Remote 영향

  • 첫 SSH 부팅 재업로드 필요: agent 바이너리가 갱신되어 기존 SSH 워크스페이스에서 0.5.4 최초 접속 시 원격 agent가 한 번 재업로드됩니다. Agent protocol version 변경은 없습니다.

v0.5.3 — 프리뷰·SSH 경로 입력 개선 + 에이전트 watchdog 견고화

02 Jun 08:26
9351521

Choose a tag to compare

Fixed

  • Agent idle watchdog 견고화 — 오작동 reap과 고아 프로세스를 방지: monotonic clock 기준 적용(노트북 절전/NTP 보정 시 살아있는 세션을 죽이던 문제 해소), --idle-watchdog 플래그로 SSH 전용 적용, 임계값 90s/15s로 완화, 모든 OS에서 PTY 프로세스 그룹 SIGKILL 정리, false positive 시 EX_TEMPFAIL(75) 종료로 클라이언트 재연결.
  • HTML 프리뷰 용량 절단 제거 — iframe은 메인 스레드 밖에서 파싱하므로 512 KB cap을 완전히 제거. Markdown/SVG 프리뷰는 cap을 유지하되 512 KB → 1 MB로 상향.
  • 분할 패널에서 HTML 프리뷰 포커싱 — 분할 상태에서 렌더된 HTML 프리뷰를 클릭하면 해당 패널이 활성화됩니다(iframe 클릭은 버블링되지 않아 window blur + activeElement로 감지).
  • SSH 경로 자동완성 첫 항목 자동 선택 — 목록 첫 항목이 자동 하이라이트되어, 아래 화살표 없이 Enter로 바로 선택됩니다.
  • SSH 없는 경로 처리 — 존재하지 않는 원격 경로 입력 시 "경로를 찾을 수 없음" 메시지를 인라인으로 표시하고 현재 디렉터리 목록을 유지합니다. 기존엔 generic "연결에 실패했습니다"가 뜨며 파일트리가 사라졌습니다. (browse 에러 분류 전반도 함께 수정 — session-expired / connect-failed가 올바르게 라우팅됩니다.)

Protocol & Remote 영향

  • 첫 SSH 부팅 재업로드 필요: 원격 Go 에이전트 바이너리가 변경되어(idle watchdog 보강), 기존 SSH 워크스페이스는 첫 연결 시 에이전트가 재업로드됩니다.
  • Ready 프레임에 idleWatchdogMs 필드 추가 (additive, 하위 호환): 클라이언트는 이 값이 양수일 때만 keepalive ping을 보냅니다.

v0.5.2 — SSH 연결 진행률 UI + 부트스트랩 견고화

02 Jun 05:02
5af12be

Choose a tag to compare

파일/이미지 수정, SSH 연결 진행률 UI, 그리고 SSH 에이전트 부트스트랩 견고화 릴리스.

정책상 feat 포함이라 minor지만, 진행률 UI를 보조 개선으로 보아 patch(0.5.2)로 배포함.

Added

  • 등록된 SSH 워크스페이스 연결 시 에이전트 부트스트랩 진행률 표시 (패널 + 사이드바 점).
  • 워크스페이스 추가 플로우(새 연결 폼 / 저장된 연결 목록)에도 진행률 표시 — 클라이언트 생성 progressId로 키잉, 연결 중인 행 안에 인라인 렌더.
  • 원격 에이전트 idle 워치독(60초 무입력 시 자가 종료) + 클라이언트 20초 keepalive ping 으로 고아 에이전트 수거.

Changed

  • 읽기 가능 파일 크기 상한 5MB → 50MB (이미지/미리보기/검색 게이트에 함께 적용).

Fixed

  • 이미지 미리보기 좌측 잘림 수정. 상한 초과 이미지는 일반 오류 대신 용량 초과 메시지를 표시.
  • SSH 워크스페이스에서 Claude Code 같은 인라인(normal-screen) TUI도 터미널 탭 이름 갱신.
  • 간헐적 SSH 연결 실패: sftp 무성 실패로 rename이 깨질 때 업로드 전체 재시도.
  • 에이전트 exec 시 Text file busy(exit 126) 재시도(shopt -s execfail) — 일시적 writer 점유를 넘김. tmp 청소는 5분 이상 된 것만 대상으로 좁혀 동시 설치를 보호.

Protocol & Remote 영향

  • 첫 SSH 부팅 재업로드 필요: 에이전트 바이너리 이름이 앱 버전에서 파생되므로, 기존 SSH 워크스페이스는 첫 연결 시 agent-0.5.2-<os>-<arch> 를 재업로드한다.
  • 에이전트/부트스트랩 연결에 ssh ServerAlive keepalive 추가. 공유 다중 사용자 서버에서는 sshd 의 ClientAliveInterval/ClientAliveCountMax 설정이 고아 세션에 대한 근본 차단책이다.

v0.5.1 — SSH 에이전트 glibc 회귀 핫픽스

01 Jun 05:59
c26dc2a

Choose a tag to compare

구버전 Linux 원격 서버에서 SSH 연결이 실패하던 회귀를 바로잡는 긴급 패치입니다.

Fixed

  • 구버전 Linux(예: Ubuntu 20.04)에서 SSH 연결 실패 — 원격 에이전트(linux/amd64)가 빌드 호스트의 glibc에 동적 링크되어, glibc가 더 낮은 서버에서 GLIBC_x.xx not found로 기동에 실패하고 앱에는 "SSH workspace validation failed"로만 표시되던 문제. 에이전트를 CGO_ENABLED=0(+netgo/osusergo)로 전 타깃 정적 링크하도록 수정해 빌드 호스트 glibc와 무관하게 동작합니다.
  • 진단 불가했던 전송 종료 — SSH 채널이 닫힐 때 종료 코드·시그널·stderr 꼬리를 보존해 로그(main.log)에 기록합니다. 이제 동일 부류 장애는 로그 한 줄로 원인 파악이 가능합니다.

Changed

  • 에이전트 로더/glibc/아키텍처 실패가 generic "SSH transport failed" 대신 "Remote agent failed to start" 로 표시됩니다.

Protocol & Remote 영향

  • 첫 SSH 부팅 재업로드 필요: 에이전트 바이너리가 정적으로 재빌드되어 체크섬이 변경됩니다. 기존 SSH 워크스페이스는 다음 접속 시 새 바이너리를 자동 재업로드합니다(사용자 조치 불필요).

v0.5.0

31 May 04:04
93916bf

Choose a tag to compare

v0.4.0 이후 누적된 변경을 담은 정식 릴리스입니다.

Added

  • 파일/폴더 아이콘 테마 설정 — Minimal(lucide) / Material 컬러 로고 선택
  • dirty-diff 거터 마커 + 인라인 peek (VSCode 스타일)
  • GitHub식 raw HTML 마크다운 프리뷰<div align>·<img>·<details> 등을 렌더 (rehype-raw + rehype-sanitize, GitHub allowlist). <script>·<iframe>·이벤트 핸들러는 제거

Changed

  • 탭 닫기 동작 통합⌘W가 untitled·browser 탭도 닫도록, untitled dirty-confirm 경로 일원화
  • README 개편 + MIT 라이선스, 단축키 표를 docs/SHORTCUTS.md로 분리

Fixed

  • 저장 후 외부 변경 거짓 양성 제거 (lastLoadedValue 동기화)
  • untitled 빈 버퍼가 clean 상태로 시작하도록 dirty 기준 수정
  • Material 아이콘 lazy 깜빡임 / glob 적용 범위 수정

Protocol & Remote 영향

  • 없음 — 에이전트 프로토콜·원격 부트스트랩 변경 없음. 기존 SSH 워크스페이스 재업로드 불필요

설치 및 Gatekeeper 안내는 README 참고. arm64 단일 빌드만 제공합니다.