Files
2nd/00_Raw/2026-04-25-Datacollector_Auto_Resume_After_Reauth_Fix.md
T

2.6 KiB

Datacollector - 인증 복구 후 자동 재개 상태 전환 수정

  • 작성 시각: 2026-04-25 22:39:30 KST
  • 프로젝트: /Volumes/Data/project/Antigravity/Datacollector
  • 관련 파일: src/components/AgentDashboard.tsx, src/lib/engine.ts

상황

NotebookLM 인증 복구 로직을 강화했지만, 화면에서는 여전히 CONTINUE MISSION 버튼을 사용자가 눌러야 다음 큐가 이어지는 것처럼 보였다.

사용자 관찰:

  • 작업은 일부 완료됨.
  • 큐에는 아직 작업이 많이 남아 있음.
  • 헤더 상태가 IDLE로 보임.
  • CONTINUE MISSION 버튼이 사용자의 수동 클릭을 기다림.

원인

프론트엔드 상태 전환에 빈틈이 있었다.

AgentDashboarduseEffectstatus !== 'running'일 때 KnowledgeEngine.stop()을 호출한다. 그런데 기존 stop()은 내부 실행 플래그만 끄는 것이 아니라 항상 Zustand 상태까지 idle로 바꿨다.

그 결과 인증 오류 등으로 paused 상태를 유지해야 하는 경우에도 React effect를 지나면서 paused -> idle로 바뀌었다. 이렇게 되면 앱은 "복구 후 자동 재개 가능한 일시정지"가 아니라 "사용자가 다시 Continue를 눌러야 하는 대기 상태"처럼 동작했다.

조치

src/lib/engine.ts:

  • stop(updateStatus = true) 형태로 변경했다.
  • 내부 엔진만 멈춰야 할 때는 UI 상태를 덮어쓰지 않도록 했다.

src/components/AgentDashboard.tsx:

  • status !== 'running' effect에서는 engine.stop(false)를 호출하도록 변경했다.
  • status === 'paused'이고 큐가 남아 있으면 NotebookLM 연결 확인 후 자동으로 running으로 되돌리는 auto-resume effect를 추가했다.
  • 기존 버그로 이미 idle에 갇힌 화면도 구제하기 위해, 수동 정지나 작업 완료 로그가 없는 idle + 남은 큐 상태도 복구 가능한 멈춤으로 보고 자동 재개하도록 보강했다.
  • 중복 자동 재개를 막기 위해 autoResumeRef 잠금을 추가했다.

검증

다음 검증을 완료했다.

npm run lint
curl -sS -I http://127.0.0.1:3000
curl -sS -X POST http://127.0.0.1:3002/api/check-connection

결과:

  • TypeScript 검사 통과
  • 프론트엔드 서버 응답 정상
  • NotebookLM 브리지 연결 확인 success: true

운영 메모

앞으로 인증 복구나 연결 복구로 인해 paused 상태가 되면 앱이 NotebookLM 연결을 확인하고 자동으로 다음 큐를 이어서 실행한다.

사용자가 직접 STOP / PAUSE를 누른 경우는 기존처럼 idle로 유지되므로, 수동 정지는 자동 재개 대상이 아니다.