DocPilot 1.2.0 업데이트: 형식별 파일 아이콘과 에이전트 연결 오류 감지

DocPilot 1.2.0 에서 기본 프로그램으로 지정했을 때 형식마다 다른 아이콘을 보이게 한 방법과, Claude 탭에서 문서 도구 연결 실패를 알아채지 못하던 원인·수정을 정리하고 Store 판의 아이콘 누락도 기록합니다.

DocPilot 을 파일 형식의 기본 프로그램으로 지정하면 모든 형식에 같은 아이콘이 표시되었습니다. 탐색기에서 한글·Word·Excel 파일을 구분하려면 형식군별로 아이콘을 분리해야 했습니다. 같은 시기에 Claude 탭에서 문서 도구를 호출하지 못하고 모델이 원인을 추측하는 긴 글만 출력하는 문제가 발생했습니다. 그래서 에이전트 연결 실패를 감지하는 방식도 정해야 했습니다.

탐색기에 표시되는 형식별 파일 아이콘. 한글·한셀·한쇼·Word·Excel·PowerPoint·텍스트·PDF 파일이 각각 다른 색과 배지로 구분됩니다.
형식마다 다른 파일 아이콘: 한글(.hwpx)·한셀(.cell)·한쇼(.show)·Word(.docx)·Excel(.xlsx)·PowerPoint(.pptx)·텍스트(.txt)·PDF

형식군별 프로그램 식별자 12개로 분리

설치 프로그램(NSIS)의 훅은 확장자마다 프로그램 식별자(ProgID)를 연결합니다. 파일 아이콘은 그 식별자의 DefaultIcon 으로 지정됩니다. 기존에는 식별자가 DocPilot.Document 하나뿐이어서 모든 형식에 같은 아이콘이 적용되었습니다. 이번 판에서 식별자를 형식군별 12개로 분리했습니다.

  • 한글(hwp·hwpx·hwt·hwtx·hwdt): 배지 한
  • 한셀(cell): 배지 셀
  • 한쇼(show): 배지 쇼
  • Word: 배지 W
  • Excel: 배지 X
  • PowerPoint: 배지 P
  • OpenDocument: Writer·Calc·Impress 세 종류로 분리
  • 텍스트(csv·tsv·txt·md): 배지 TXT
  • 웹 문서(html·htm): 배지 </>
  • PDF

아이콘은 앱 아이콘의 접힌 문서 도형 경로를 그대로 두고 형식군 색으로 다시 칠한 뒤, 오른쪽 아래에 둥근 사각형 배지와 흰 글자만 더했습니다. 16·24·32·48·64·128·256px 크기로 각각 렌더링해 ICO 로 묶었고, 원본 아이콘 파일은 수정하지 않았습니다. 새 확장자를 지원할 때는 형식 레지스트리뿐 아니라 설치 훅의 확장자 매핑과 MSIX 매니페스트 템플릿에도 알맞은 그룹으로 추가해야 합니다.

Store(MSIX) 판에서 확인된 아이콘 누락

앞에서 설명한 NSIS 훅은 설치 프로그램 판에만 적용됩니다. Store 판은 패키지 매니페스트의 파일 형식 연결로 따로 지정해야 합니다. 그런데 1.2.0 패키지에는 이 설정이 빠져 있었습니다. 1.2.0 으로 업데이트한 뒤 탐색기에 형식 아이콘이 보이지 않는다는 제보로 확인했습니다.

매니페스트의 파일 형식 연결을 같은 12개 형식군으로 나누고, 각각 uap:Logo 로 아이콘을 지정하도록 수정했습니다. 빌드 스크립트는 ICO 안의 PNG 프레임(16·24·32·48·256px)을 추출해 패키지에 배치합니다. 이 수정은 1.3.0 에 반영되었습니다.

확인 범위. 탐색기의 실제 표시는 Store 에서 설치한 판으로만 확인할 수 있습니다. 이 글을 쓰는 시점에는 아직 확인하지 못했습니다.

Claude 탭의 문서 도구 연결 실패 감지

Claude 탭에서 get_paragraph·replace_text·save_document 같은 문서 도구를 호출하지 못했습니다. 이때 모델은 EPERM 같은 원인 후보를 스스로 추측하는 긴 글만 출력했습니다. 실제 원인은 모델의 추측과 같은 권한 오류가 아니라, 앱이 도구 연결 실패를 감지하지 못한 것이었습니다.

앱은 claude 명령줄의 stream-json 출력 중 init 줄에서 세션 ID 만 읽고 mcp_servers 배열은 읽지 않았습니다. 문서 도구 MCP 서버가 어떤 이유로든 시작되지 못해도 claude 는 --strict-mcp-config 를 전달했을 때 전체를 실패 처리하지 않습니다. 대신 init 줄에 status 가 failed 인 항목만 남긴 채 도구 없이 진행합니다. 이때 편집·셸 같은 내장 도구는 앱이 이미 비활성화한 상태여서, 모델은 사용할 도구 없이 추측만 하게 됩니다.

설치된 claude 실행 파일을 앱과 같은 플래그로 직접 실행하고 문서 도구 서버의 경로를 존재하지 않는 파일로 바꾸면 같은 증상이 재현됩니다. 앱이 쓰는 플래그는 --mcp-config·--strict-mcp-config(문서 도구 서버만 연결), --allowedTools mcp__docstudio, --tools Read,Grep,Glob, --permission-mode dontAsk 와 편집·셸 도구를 막는 --disallowedTools 입니다. 정상 경로에서는 도구가 모두 동작하므로 서버와 연결 설정에는 문제가 없었고, 문제는 실패를 감지하지 못한 것이었습니다.

init 줄의 mcp_servers 에서 이름이 docstudio 이고 상태가 connected 가 아니면, 즉시 프로세스 트리를 종료(kill_tree)하고 문서 도구 연결 실패 오류를 표시하도록 수정했습니다. 이로써 모델이 토큰을 소모하며 스스로 원인을 진단하는 동작을 차단합니다. Rust 회귀 시험 두 건(mcp_failure_detected, mcp_success_not_flagged)은 실제로 캡처한 init 줄을 그대로 사용합니다.

한계. 처음에 연결이 끊긴 실제 원인(업데이트 중 파일 교체, 보안 프로그램의 잠금 등)은 로그가 없어 특정하지 못했습니다. 이 수정은 실패했을 때 바로 알리는 것이고 실패 자체를 막지는 않습니다. 다른 에이전트 연동에 같은 유형의 문제가 있는지도 확인하지 않았습니다.

정리

1.2.0 은 형식군별 아이콘 분리와 연결 실패 감지를 반영했습니다. 파일 아이콘은 설치 프로그램 판과 Store 판의 지정 방식이 달라, 1.2.0 에서 누락된 Store 판의 설정은 1.3.0 에서 보완했습니다. 연결 실패 감지는 원인을 제거하지 않고 실패 상태를 사용자에게 알리는 수정입니다.