Skip to main content

파일 체크포인트 및 롤백

에이전트가 파괴적인 명령(파일 편집, 셸 명령)을 실행할 때마다 Myrm은 작업공간의 Shadow Git 스냅샷을 자동으로 캡처합니다. 변경 사항을 보고 파일을 선택적으로 복원할 수 있으며 에이전트는 롤백에 자동으로 적응합니다.

일괄 원자 편집

에이전트가 하나의 파일에서 여러 영역을 변경해야 하는 경우(가져오기 이름 변경, 여러 상수 업데이트 등), file_edit_tooledits 배열(최대 20개 항목)을 수락하고 이를 단일 원자 트랜잭션에 적용합니다.
  • 읽기 1회, 쓰기 1회 — 모든 교체는 단일 디스크 커밋 전에 메모리에서 발생합니다.
  • 겹침 방지 — 원본 파일에서 검색 범위가 겹치는 편집 내용은 먼저 거부됩니다.
  • 전부 아니면 전무 확인verify_command이 실패하면(예: 구문 검사) 일괄 처리의 모든 편집 내용이 롤백됩니다.
  • UI — 진행 패널에 --- edit 1 ---, --- edit 2 --- 섹션과 병합된 차이점이 표시됩니다.
이렇게 하면 편집 3은 실패하지만 편집 1-2는 이미 파일을 손상시키는 전형적인 다중 호출 실패 모드를 방지합니다. Chrome LIVE WebUI E2E로 확인되었습니다(실제 LLM + 실제 작업공간 쓰기).

작동 방식

1

자동 스냅샷

파괴적인 작업(파일 쓰기, bash 명령) 전에 시스템은 프로젝트의 .git과 완전히 별개인 격리된 Shadow Git 저장소를 사용하여 추적된 모든 파일의 스냅샷을 투명하게 만듭니다.
2

시각적 타임라인

기록 패널을 열어 모든 스냅샷의 시간순 타임라인을 확인하세요. 각 카드에는 라인 수준 통계(+X/-Y 라인)와 함께 변경된 파일이 표시됩니다.
3

선택적 복원

다른 변경 사항을 유지하면서 롤백할 특정 파일을 선택하세요. 또는 확인 대화 상자를 통해 모든 것을 한 번에 복원할 수 있습니다.
4

에이전트 자동 인식

파일을 복원한 후 에이전트는 다음 차례의 롤백을 자동으로 감지하고 영향을 받은 파일을 다시 읽습니다. 수동 개입이 필요하지 않습니다.

다중 에이전트 활동 보기

여러 에이전트가 작업에 대해 공동 작업을 수행하는 경우 각 스냅샷에는 해당 스냅샷을 트리거한 에이전트가 자동으로 태그 지정됩니다. 스냅샷 패널은 다음을 제공합니다.
  • 에이전트 이름 배지 — 각 스냅샷 카드에는 담당 에이전트의 이름이 파란색 태그로 표시됩니다.
  • 에이전트 필터 — 2명 이상의 에이전트가 스냅샷을 생성하면 필터 표시줄이 나타나 특정 에이전트의 스냅샷을 볼 수 있습니다.
  • SSE 실시간 새로 고침 — 500ms 디바운스로 서버 전송 이벤트를 통해 새 스냅샷이 자동으로 나타납니다(수동 새로 고침 필요 없음).
이렇게 하면 “어떤 에이전트가 무엇을 변경했습니까?”라는 질문에 쉽게 대답할 수 있습니다. 한 에이전트의 작업을 취소하고 다른 에이전트의 작업을 유지해야 하는 경우 대상 롤백을 수행합니다.

외부 효과 경고

명령에 파일 시스템 외부의 되돌릴 수 없는 부작용이 포함된 경우 Myrm은 이에 플래그를 지정합니다. 이러한 작업이 포함된 스냅샷을 복원하면 UI에 다음과 같은 명확한 경고가 표시됩니다.
“파일은 복원되지만 이 명령 중에 수행된 데이터베이스/네트워크/컨테이너 변경 사항은 되돌릴 수 없습니다.”

제로 구성

파일 체크포인트는 기본적으로 작동합니다.
  • 설정 필요 없음 — 모든 배포 모드에서 기본적으로 활성화됩니다.
  • git 오염 없음 — Shadow Git은 프로젝트에서 완전히 격리됩니다.
  • 성능에 영향 없음 — 3초 제한 시간의 비동기 스냅샷
  • 자동 스토리지 관리 — 프로젝트당 스냅샷 50개, 글로벌 한도 2GB, 자동 정리

스토리지 아키텍처

Shadow Git 시스템은 프로젝트별 참조가 있는 공유 베어 저장소를 사용합니다.
  • 콘텐츠 중복 제거 — 프로젝트 전체에서 동일한 파일이 한 번만 저장됩니다.
  • 고아 정리 — 삭제된 프로젝트가 자동으로 정리됩니다.
  • 손상 복구 — 자동 git fsck + 감지 시 재포장
  • Global gc — 주기적인 가비지 수집으로 디스크 사용량을 최소화합니다.

충돌 복구

서버가 작업 도중에 충돌하는 경우:
  1. LangGraph의 영구 SQLite 체크포인터는 모든 그래프 전환 시 전체 상태를 저장합니다.
  2. 다시 시작하면 OfflineDurableTask이 중단된 작업을 감지합니다.
  3. 정확한 중단 지점부터 작업이 재개됩니다. 사용자 조치가 필요하지 않습니다.
이는 수동으로 계측된 지점뿐만 아니라 모든 그래프 노드 전환에서 상태가 자동으로 캡처되므로 수동 체크포인트 콜백(일부 경쟁업체에서 사용)보다 구조적으로 우수합니다.

6중 복원력 시스템

파일 체크포인트는 Myrm의 포괄적인 중단 복구 시스템의 한 계층일 뿐입니다. 프로세스 중단, 네트워크 중단, 사용자 일시 중지 또는 예산 소진 등 중단이 발생하더라도 Myrm은(는) 데이터 손실 없이 정확한 중단 지점에서 복구합니다.

실시간 차이 시각화

에이전트가 파일을 수정할 때마다 Myrm은(는) 자동으로 통합 diff를 계산하고 이를 SSE을 통해 UI로 스트리밍합니다. 새로 고칠 필요가 없습니다.

당신이 보는 것

  • 변경 통계가 포함된 파일 목록 — 수정된 각 파일에는 추가/제거된 +N/-N 줄이 표시됩니다.
  • 확장하려면 클릭 — 구문 강조 기능을 사용하여 전체 차이점을 인라인으로 확인하세요.
  • 통합 또는 분할 보기 — 단일 창(GitHub 스타일)과 병렬 비교 간 전환
  • 언어 인식 강조 — Prism.js가 자동으로 파일 언어를 감지합니다.
  • 줄 번호 — 이중 열에 표시되는 이전 줄 번호와 새 줄 번호
  • 차이점 복사 — 원시 차이 콘텐츠의 원클릭 복사본

작동 방식

  1. DiffCollectorObserver(하네스 레이어)는 모든 파일 쓰기/편집을 가로챕니다.
  2. 턴의 초기 스냅샷에 대한 누적 통합 차이를 계산합니다.
  3. FILE_DIFF SSE 이벤트를 프런트엔드에 푸시합니다.
  4. FilePathRenderer는 변경 통계가 포함된 파일 배지를 표시합니다.
  5. DiffViewer는 확장 시 전체 대화형 diff를 렌더링합니다.

안전 제한

  • 긴 diff는 (truncated) 표시를 사용하여 2,000줄에서 자동으로 잘립니다.
  • 바이너리 파일에 잘못된 콘텐츠 대신 “바이너리 파일이 변경됨”이 표시됩니다.
  • DiffViewer에는 스크롤 기능이 있는 400px 최대 높이가 있어 대화를 압도하지 않습니다.

메시지 수준 실행 취소(Honest UX)

파일을 변경한 각 보조 메시지는 WebUI에 실행 취소 컨트롤을 표시합니다. 한 번의 클릭으로 차이점을 미리 보고 해당 차례에 대해서만 되돌릴 수 있는 파일을 복원할 수 있습니다. 정직한 피드백 - 거짓 약속 없음: 세션 수준 모든 파일 실행 취소는 채팅 헤더 칩 행에 있습니다. 동일한 정직한 규칙입니다. IM 채널: /undo은 마지막 차례를 제거하고 연결된 파일을 되돌립니다. 일부 경로를 복원할 수 없는 경우 응답에는 명시적으로 그렇게 되어 있습니다. Turn Undo(메시지, 세션 또는 IM)가 성공적으로 수행된 후 에이전트는 다음 차례에 restore_inbox 알림을 수신합니다. 이는 Shadow Git 복원과 동일한 메커니즘이므로 오래된 채팅 메모리에 의존하는 대신 영향을 받은 파일을 다시 읽습니다.

페이지 새로고침 후에도 신뢰할 수 있는 실행 취소

Turn Undo는 세션 메모리에 묶여 있지 않습니다. 스냅샷은 디스크에 영속화되고 안정적인 요청 수준 메시지 ID를 키로 사용하므로, 실행 취소 버튼은 페이지 새로고침, 브라우저 재시작, 다른 기기에서도 계속 작동합니다.
  • 요청 수준 메시지 정체성 — 파일 스냅샷은 대화 전체에서 사용되는 동일한 message_id에 바인딩되어 새로고침 후에도 보조 메시지와 스냅샷의 연결이 유지됩니다(경쟁사의 rewind는 일반적으로 세션 메모리에만 한정되어 페이지를 닫으면 사라집니다).
  • 안정적인 작업공간 바인딩 — 각 채팅은 자체 작업공간 루트를 해석하고 고정하므로 컨테이너 추상 경로(/workspace/...)가 샌드박스 시작 방식과 무관하게 실제 파일로 매핑됩니다.
  • 클라우드 샌드박스 동일 동작 — 동일한 스냅샷 저장소와 되돌림 서비스가 샌드박스 내부에서 실행되어 Local / Tauri / 클라우드 배포에서 동일한 실행 취소 동작을 제공합니다.
라이브 Chrome E2E로 검증됨: 실제 LLM 에이전트가 파일을 수정 → 페이지 새로고침 → 메시지 수준 파일 되돌리기가 해당 차례 이전의 정확한 내용을 복원합니다.

빈 쓰기 거부 및 실패 배너

에이전트가 **비어 있는 공백 전용 또는 보이지 않는 전용 콘텐츠(ZWSP/BOM)**를 사용하여 file_write_tool을 호출하는 경우 Myrm은(는) 디스크에 오해의 소지가 있는 파일을 생성하지 않습니다. 대신에:
  1. 도구가 명확한 오류(Cannot write empty file content)를 반환합니다.
  2. 턴별 돌연변이 검증자는 실패를 기록합니다.
  3. WebUI는 해당 보조 메시지 아래에 FileModificationWarning 황색 배너를 표시합니다. 파일 수정 실패 - 변경 사항이 자동으로 롤백되었습니다.
배너는 페이지를 다시 로드해도 유지됩니다(fileMutationFailures은 보조 메시지 메타데이터에 유지됩니다). 아무것도 작성되지 않았는데 성공했다고 주장하는 모델에 사용자가 오해하지 않습니다. 많은 경쟁업체에서는 빈 쓰기를 허용하고 그에 상응하는 정직한 UI 신호가 부족합니다.
실행 취소는 간단한 메시지별 스냅샷을 사용합니다(기본값은 설정 없음, 설정 없음). Shadow Git 체크포인트(아래)는 파괴적인 셸 워크플로를 위한 별도의 심층 롤백 레이어입니다.

결정하고 행동하세요

차이점을 검토한 후 다음을 수행할 수 있습니다.
  • 이 메시지 실행 취소 — 원클릭 복원(위의 정직한 UX)
  • 승인 — 대화를 계속하면 변경 사항이 그대로 유지됩니다.
  • 롤백 — 파일 체크포인트(위)를 사용하여 모든 파일을 이전 상태로 복원합니다.
  • 에이전트는 자동으로 롤백을 감지하고 그에 따라 다음 작업을 조정합니다.