> ## Documentation Index
> Fetch the complete documentation index at: https://docs.myrmagent.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# 아티팩트 공유 및 외부 전달

> 에이전트의 모든 결과물을 읽기 전용 공유 링크로 변환 — 수신자는 가입 없이 즉시 열람, 선택적 비밀번호 게이트, TTL 만료, 불변 버전 스냅샷 및 원클릭 취소.

# 아티팩트 공유 및 외부 전달

에이전트가 웹 페이지, 보고서, PDF 또는 다중 파일 사이트를 완성하면 Myrm은 이를 **읽기 전용 공유 링크**로 변환해 어떤 브라우저에서든 열 수 있게 합니다 — 계정, 설치, 로그인 불필요. 이는 "말하기 → 실행 → 보기 → 공유" 전달 루프의 마지막 단계입니다.

## 원클릭 공유 링크

아티팩트 카드에서 **공유**를 클릭하면 즉시 공개 링크가 생성됩니다:

* **수신자 가입 불필요** — 링크를 어떤 브라우저에서든 바로 엽니다
* **읽기 전용 설계** — 수신자는 볼 수만 있고 편집할 수 없습니다; 편집은 Myrm 내부에서만 가능
* **선택적 비밀번호 게이트** — 민감한 콘텐츠(주간 보고서, 계약 초안)를 비밀번호로 보호
* **TTL 자동 만료** — 링크 수명은 1\~30일(설정 가능)이며 만료 후 자동으로 비활성화

## 불변 버전 스냅샷

공유 링크는 항상 아티팩트의 **특정 불변 버전**에 고정됩니다:

* 콘텐츠가 절대 변하지 않음 — 이후 아티팩트를 편집해도 이미 보낸 링크는 오염되지 않습니다
* 각 스냅샷은 SHA-256 지문으로 식별되어 공유 콘텐츠가 공유 시점의 정확한 바이트임이 증명됩니다
* 구체화된 번들이 삭제되어도 다음 접근 시 불변 스냅샷에서 자동으로 다시 구체화됩니다

## 다중 파일 번들

Myrm은 페이지에 필요한 모든 리소스를 단일 공유 번들로 자동 수집합니다:

* **HTML + CSS + JavaScript + 이미지** — 진짜 참조 체인에서 발견(엔트리 파일만이 아닌)
* **중첩 디렉터리** 보존 — 하위 리소스가 올바르게 해석됩니다
* **단일 따옴표 URL이 포함된 인라인 스타일**도 올바르게 처리됩니다
* **Lockfile 및 빌드 산출물**(`package-lock.json`, `node_modules`)은 번들에서 제외됩니다
* **문서와 PDF**는 볼트 객체에 파일 확장자가 없어도 올바른 미디어 유형으로 제공됩니다 — 한글 문서는 Markdown으로 렌더링되고 PDF는 PDF로 열립니다

## 공유 수명 주기 — 취소, 상태 및 감사

아티팩트와 채팅 공유 링크는 **언제든 취소 가능하며 전체 수명 주기를 관리**할 수 있습니다:

* **원클릭 취소** — 취소하면 링크가 **즉시** 404 "Link Revoked"를 반환하며, 유예 기간이나 캐시 우회가 없습니다
* **취소된 비밀번호 링크** — 수명 주기 검사가 비밀번호 게이트보다 먼저 실행되므로, 취소된 보호 링크는 신규 방문자에게 바로 만료 페이지를 표시하고 절대 비밀번호 프롬프트를 노출하지 않습니다
* **취소된 토큰은 영구 폐기** — `share_token_fingerprint`와 `share_revoked_fingerprints` 집합을 영속화하여, 취소된 링크는 나중에 다시 공유해도 영원히 404입니다
* **검색 엔진 차단** — 모든 공개 공유 응답에 `X-Robots-Tag: noindex, nofollow` + `Cache-Control: no-store` + `Referrer-Policy: no-referrer`를 적용하여 취소된 링크가 캐시/인덱스 사본으로 접근될 수 없습니다
* **UI 실시간 상태** — 공유 대화 상자는 열 때마다 현재 상태(`unshared` / `revoked` / `active` / `password_protected`), 링크 주소, 남은 만료 시간을 표시합니다; 취소 후에는 대화 상자가 "취소됨" 상태로 유지됩니다
* **취소 감사 로그** — 모든 취소 작업이 기록되어 추적 가능합니다
* **채팅 삭제 시 연쇄 무효화** — 원본 채팅을 삭제하면 즉시 공유가 무효화됩니다(404 "Content Unavailable")

## 보안 설계

| 항목          | 구현                                                                |
| ----------- | ----------------------------------------------------------------- |
| 위변조 방지      | 상태 비저장 HMAC-SHA256 서명 — 바이트 변경 시 링크 즉시 무효(404)                    |
| 경로 우회 방지    | 구체화 경로는 `Path.is_relative_to`로 엄격히 제한; `../` 및 `%2e%2e` 인코딩 차단    |
| 자격 증명 격리    | 비밀번호 잠금 쿠키가 토큰 지문별(SHA-256)로 명명되어 동시 다중 비밀번호 공유가 충돌하지 않음          |
| HTTPS 보호    | 잠금 해제 쿠키는 HTTPS에서 `Secure` 자동 설정 + `HttpOnly` + `SameSite=Strict` |
| 하위 리소스 인증   | 잠금 해제 후 단기 서명 쿠키가 CSS/JS/이미지 하위 요청을 승인 — 비밀번호 재입력 불필요             |
| 콘텐츠 안전      | HTML 응답에 CSP + `X-Content-Type-Options` 주입; 비 HTML은 정확한 미디어 유형 제공 |
| 만료 회수       | 만료된 링크는 실패로 종료; 만료된 잠금 해제 자격 증명은 자동으로 비밀번호 게이트로 복귀                |
| 비정상 페이로드    | 서명은 유효하나 필드 타입이 비정상인 토큰은 방어적으로 거부 — 크래시 없음                        |
| 취소 후 토큰 방부활 | `share_revoked_fingerprints` 영속 집합 — 취소된 링크는 다시 공유해도 영원히 404      |
| 검색 엔진 차단    | 모든 공개 공유 응답에 `noindex, nofollow` + `Cache-Control: no-store`      |

## 배포 모드

아티팩트 공유는 세 가지 배포 모드에서 동일하게 동작합니다 — 공유 번들은 **자신의 샌드박스**에서 제공되므로 데이터가 인스턴스를 벗어나지 않습니다:

* **로컬 WebUI** — 자체 호스팅, 링크가 로컬 머신에서 제공
* **Tauri 데스크톱** — 데스크톱 인스턴스에서 제공
* **클라우드 호스팅** — 제어 플레인이 할당한 전용 샌드박스에서 제공

## 정직한 경계

* **읽기 전용 공유**는 의도된 선택입니다: 외부 수신자는 조회만 가능하며 공동 편집은 단일 사용자 샌드박스 아키텍처 범위 밖입니다
* **취소는 최종적이며 실시간 협업이 아닙니다** — `noindex`/`no-store`가 소스에서 인덱싱을 막지만, 수신자가 이미 다운로드한 사본은 회수할 수 없습니다
* **비밀번호 게이트는 단일 요소** — 우발적 유출 방지용이며 엔터프라이즈급 접근 제어가 아닙니다
* **비밀번호 링크 재공유 시 새 비밀번호 필요** — 비밀번호는 저장되지 않으며(HMAC 파생), 취소 후 재공유에는 새 비밀번호가 필요합니다. 이는 의도된 설계로, 이전 비밀번호로 이전 링크를 재구축할 수 없습니다
