h-lab/.claude/skills/shortform-queue/fix-opal-json.ps1
hehihoho3@gmail.com 7d8c6bc49b feat: 숏폼 큐 스킬 - 저장 전 JSON 검증·따옴표 보정 단계 추가
Opal이 title_top 같은 값에 따옴표를 이스케이프 없이 뱉으면 파서의
Jackson readTree가 던져서 status=FAILED, clips=0이 된다. 같은 JSON이
캡컷 구간 JSON 붙여넣기로도 들어가므로 저장과 영상 생성이 둘 다 막힌다.

저장 전에 파싱을 시도하고, 깨졌으면 fix-opal-json.ps1로 문자열 값
안쪽 따옴표만 이스케이프한 뒤 재검증한다. 그래도 안 되면 저장하지
않고 PENDING으로 남긴다. 정상 JSON에는 아무 변화가 없다.

캡컷 방식 선택도 모드별로 갈랐다 - 1단계는 구간 JSON(wpaste),
풀버전은 오팔 JSON(paste).

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-10 17:12:49 +09:00

26 lines
1.1 KiB
PowerShell

# Opal 출력 JSON 보정 — 문자열 값 안의 미이스케이프 따옴표를 \" 로 바꾼다.
#
# Opal이 title_top 같은 값에 따옴표를 그대로 뱉는 일이 있다(예: "title_top": ""나 진짜 방장하기 싫어...""").
# 그대로 저장하면 ShortformOutputParser의 Jackson readTree가 던져서 status=FAILED, clips=0이 되고,
# 캡컷 에이전트의 구간 JSON 붙여넣기도 같이 막힌다.
#
# 한 줄에 필드 하나씩 나오는 Opal 출력 형태를 전제로, `"key": "value"` 꼴 줄의
# value 안쪽 따옴표만 이스케이프한다. 이미 정상인 JSON에는 아무 변화가 없다.
#
# 사용:
# $fixed = & .\fix-opal-json.ps1 -Text $raw
param([Parameter(Mandatory = $true)][AllowEmptyString()][string]$Text)
$lines = $Text -split "`r`n|`n|`r"
$out = foreach ($ln in $lines) {
if ($ln -match '^(\s*"[A-Za-z0-9_]+"\s*:\s*)"(.*)"(\s*,?)\s*$') {
$pre = $Matches[1]; $val = $Matches[2]; $tail = $Matches[3]
$val = [regex]::Replace($val, '(?<!\\)"', '\"')
$pre + '"' + $val + '"' + $tail
}
else {
$ln
}
}
$out -join "`r`n"