2026 OpenClaw 프론트 실전:
원격 Mac Source Map — 스택 매핑·PR 요약
압축 스택을 리뷰어가 읽으려면 라우트·모듈·커밋이 드러나야 합니다. 원격 Mac+OpenClaw 재현 루프: 스택 수집 → 동일 빌드 소스맵으로 mapped_stack.json → pr_sourcemap_summary.md → Webhook·PR 회수. 게이트웨이·최소 권한은 다른 게이트와 동일합니다. 번들 PR 요약·Sentry 릴리스 스모크·E2E 로그 분류.
01 OpenClaw 게이트웨이·워크스페이스·권한 기준선
신뢰 표면을 최소화합니다. 에이전트는 체크아웃 옆에 두고, 릴리스 아티팩트(dist/ 또는 빌드 ID tarball)는 읽기, 쓰기는 .openclaw/reports/<git-sha>/만—.gitignore로 커밋 오염 방지.
Webhook·GitHub 토큰·Sentry 키는 환경변수 주입만. 요약·로그에 붙이지 않습니다. 인바운드 HTTP는 TLS·서명/mTLS·속도 제한을 권장합니다.
Git은 저장소 단위 세분화: 코멘트 시 Pull requests 읽기·쓰기, 기준선 시 Contents 읽기. 과도한 org·workflow 스코프는 피하고 CI와 같은 주기로 교체합니다.
02 입력: 스택·맵·릴리스 정렬
한 세트로 고정: 스택 텍스트, 번들 URL·청크, public path, 그 빌드의 .map. CDN 미공개면 아티팩트·심볼 파이프라인(Sentry 업로드+비공개 미러 등)에서 수급.
prod_stack.txt 원문 + release.json(SHA, 번들러, 선택 deploymentId, 다환경이면 environment).
sourcesContent에 민감 경로가 섞일 수 있으니 넓은 채널로 보내기 전 가리고, Markdown은 저장소 상대 경로 위주로.
03 CLI·스크립트 플래그 계약
단일 진입점으로 플래그를 고정합니다(--stack-path / --stack-file 등 별칭은 팀에서 하나만 표준화).
| 플래그·환경변수 | 용도 |
|---|---|
--stack-path / --stack-file |
캡처한 압축 스택(UTF-8 텍스트 파일 경로). |
--map-dir / --dist-dir |
해당 릴리스의 .js와 형제 .map이 있는 디렉터리. |
--map-base-url / --public-path |
맵을 찾을 때 제거할 CDN·에셋 접두사(예: https://cdn.example.com/assets/). |
--release |
릴리스 레이블·빌드 ID(요약 헤더·디렉터리 이름에 사용). |
--out-json |
구조화된 mapped_stack.json 경로(미지정 시 --out-dir 규칙 사용). |
--out-md |
초안 pr_sourcemap_summary.md 경로(OpenClaw가 다듬기 전 1차 출력). |
--max-frames |
프레임워크 노이즈 뒤 상한(기본 12면 PR 본문에 보통 충분). |
--strip-prefix |
소스 경로에서 제거할 접두사(모노레포 루트·임시 빌드 경로 정규화). |
--column-policy |
first 또는 bounded — 미니파이어 열 불일치 시 검색 방식. 요약 각주에 기록. |
--fetch-header |
URL로 맵 fetch 시 헤더 한 쌍(비공개 버킷 등). 다중은 래퍼에서 반복. |
--out-dir |
.openclaw/reports/$SHA/ 등 고정 루트 아래에 JSON·MD·status.txt 배치. |
SOURCEMAP_WEBHOOK_URL |
선택. 성공 시 얇은 curl 단계가 Markdown 본문을 POST. |
source-map 등 공식 파서를 쓰고, 미해결 프레임이 있으면 비영 종료로 “맵/빌드 불일치” 분기.
04 매핑 실행과 Markdown 템플릿
mapped_stack.json이 진실, Markdown은 요약. 템플릿: 릴리스·상위 프레임 3~5(저장소 상대)·담당 힌트·다음 검증 한 줄—짧게 PR·채팅 미리보기에 맞출 것.
OpenClaw 입력은 세 경로(mapped_stack.json, release.json, 스택 발췌). 중복 프레임·쿼리스트립·경로 정규화 후 status.txt로 mapped|partial|failed를 남깁니다.
05 Webhook·PR로 요약 회수
게이트웨이(문서의 아웃바운드 허용 목록에 등록된 엔드포인트)로 JSON POST. HMAC이 있으면 본문 서명, Idempotency-Key(예: ${GIT_SHA}-sourcemap)로 중복 억제.
curl -sS -X POST "$SOURCEMAP_WEBHOOK_URL" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: ${GIT_SHA}-sourcemap-pr" \
-d "$(jq -n --arg rel "${RELEASE:-}" --rawfile body pr_sourcemap_summary.md \
'{text: $body, release: $rel}')"
GitHub는 permissions가 밝혀진 GITHUB_TOKEN 또는 저장소 한정 PAT로 gh pr comment. 디바운스: SHA 키·429 백오프·status.txt 기록.
06 오류·실패 FAQ
줄 어긋남: 다른 패치 맵·CDN 캐시. 캐시 무효·해시 대조.
webpack-internal만: devtool·보조 매핑 조정, 요약에 한계 명시.
401/403: URL·HMAC·IP 허용·Mac 송신 IP.
중복 게시: 잠금·기존 코멘트 조회 가드.
규정: 민감 본문은 버킷, 채널엔 링크+비민감 프레임만.
릴리스로 스택·맵 고정 → JSON → 짧은 Markdown → 허용된 Webhook/PR로 전달, 토큰·시크릿은 최소 권한. Mac은 상시 에이전트·Safari 정합에 유리.