fix(extension): restore AI Response Content capture by patching DOM extraction, CSP connect-src, and TS regex literal serialization

This commit is contained in:
Variet Worker
2026-04-10 21:10:33 +09:00
parent 58887f6933
commit a99c283656
22 changed files with 744 additions and 592 deletions

View File

@@ -0,0 +1,15 @@
# Fix gravity bridge Discord Relay AI Chat Body by patching DOM extraction and Regex literals
- **시간**: 2026-04-10 20:30~21:10
- **Vikunja**: #613 → done
## 트러블슈팅: Typescript 백틱 안의 정규식 리터럴 파괴 현상
- **증상**: JSDOM 가상 모의 환경에서 테스트를 돌려보니, 렌더링 화면이나 타겟 Text가 정확히 매치됨에도 정규식이 조건문에서 `false`를 내뱉으며 Button Matching을 건너뛰는 현상 발생.
- **원인**: `observer-script.ts``.js`로 변환할 때, Typescript 컴파일러가 `return \`...\`` 템플릿 리터럴 내부의 `/^(?:Always\s*)?Allow\b/i` 구문을 해석하면서, `\s`를 일반 문자 `s`로, `\b`를 아스키 특수문자 `Backspace(0x08)`로 직렬화하여 클라이언트에 꽂아버리는 문제가 있었음. 이로 인해 정규식 자체가 오염되어 어떠한 버튼도 매칭하지 못하고 있었음.
- **해결**: `observer-script` 내부의 정규식 리터럴 내부의 이스케이프 문자(`\s`, `\b` 등)를 전부 이중 백슬래시(`\\s`, `\\b`)로 패치하여 브라우저에서 스크립트가 실행될 때 올바른 정규식 파서가 열리도록 수정 보완함.
## 결정 사항: 웹뷰 내 로컬 fetch CSP 패치 통과
- `html-patcher.ts`에서 웹뷰 렌더링 시점에 CSP를 조작하여 `default-src 'none'` 방어막을 뚫고 `connect-src``http://127.0.0.1:* wss://127.0.0.1:*`를 주입하도록 강제 적용함. 이를 통해 Bridge 서버로의 로컬 HTTP 통신이 활성화됨.
## 완료 상태
VSCode VSIX (0.5.27) 빌드 완료 및 릴리스 커밋 패키징 수행.