diff --git a/.agents/references/known-issues.md b/.agents/references/known-issues.md index 137ffdf..d316a31 100644 --- a/.agents/references/known-issues.md +++ b/.agents/references/known-issues.md @@ -21,6 +21,12 @@ > 鍮꾩듂븳 臾몄젣媛 옱諛쒗븯硫 archive뿉꽌 寃깋븯꽭슂. +### [2026-04-16] [Extension] 터미널 출력(stdout) 텍스트가 명령어로 Discord에 전송 (v0.5.50) +- **증상**: Discord에 `cmd="No extension.log found"`, `cmd="AG CLI not found..."`, `cmd="Log found: C:\..."` 등 터미널 **출력** 텍스트가 명령어로 전송됨 +- **원인**: Observer가 code 블록 2개를 감지: (1) 프롬프트+명령어 → JUNK_CODE_RE로 스킵, (2) 터미널 출력 → 유효한 code로 판단 → description에 포함. http-bridge enrichment에서 description에 prompt marker(`>`)가 없으면 rawDesc 전체를 enrichedCmd로 채택 +- **해결 (v0.5.50)**: `promptMatch` 실패 시(description에 `>` 없음) → 터미널 OUTPUT으로 판단하여 `terminal_output` 사유로 즉시 필터. 실제 명령어는 항상 `…\project > command` 프롬프트를 포함 +- **주의**: enrichment은 반드시 prompt marker가 있는 경우에만 수행. description에 `>` 없으면 code 블록의 출력 텍스트 + ### [2026-04-15] [Extension] Observer fallback 컨텍스트가 채팅/UI 텍스트를 명령어로 추출 (v0.5.46) - **증상**: Discord에 `cmd="실 동작검증을 해봐야하는데"`, `cmd="variet.gravity-bridge"` 등 사용자 채팅/AI 응답 텍스트가 명령어로 전송됨 - **원인**: v0.5.45에서 `PROMPT_ONLY_RE`가 `code/pre` 요소 스킵 성공했으나, `extractContextFromNearby()`의 fallback(`span/div/p` 수집)이 여전히 작동하여 DOM 트리의 채팅 본문/UI 라벨을 명령어로 추출 diff --git a/docs/devlog/2026-04-16.md b/docs/devlog/2026-04-16.md new file mode 100644 index 0000000..191dadc --- /dev/null +++ b/docs/devlog/2026-04-16.md @@ -0,0 +1,5 @@ +# 2026-04-16 + +| NNN | HH:MM | 작업 설명 | `커밋해시` | 완료? | +|-------|-------|----------|-----------|----------| +| 001 | 04:52 | v16 터미널 출력 필터 + v15 stale LS 자동복구 + heartbeat probe — stdout가 enrichedCmd로 채택되는 버그 수정, VSIX v0.5.50 빌드/배포 | `7ade31e` | 🔧 | diff --git a/docs/devlog/entries/20260416-001.md b/docs/devlog/entries/20260416-001.md new file mode 100644 index 0000000..957b1f7 --- /dev/null +++ b/docs/devlog/entries/20260416-001.md @@ -0,0 +1,38 @@ +# v16 터미널 출력 필터 + v15 Stale LS 자동복구 + Heartbeat Probe (v0.5.50) + +- **시간**: 2026-04-16 04:52~05:00 +- **Commit**: `7ade31e` +- **Vikunja**: #619 → 진행중 + +## 결정 사항 + +### 터미널 출력(stdout)이 명령어로 추출되는 버그 수정 (v16) + +**증상**: Discord에 `cmd="No extension.log found"`, `cmd="AG CLI not found..."`, `cmd="Log found: C:\..."` 등 터미널의 **출력** 텍스트가 명령어로 전송됨. + +**원인**: Observer의 `extractContextFromNearby()`가 code 블록 2개를 찾음: +1. ci=0: 프롬프트+명령어 (`…\gravity_control > $log = ...`) → JUNK_CODE_RE로 스킵 +2. ci=1: 터미널 출력 (`No extension.log found`) → 유효한 code로 판단 → description에 포함 + +http-bridge enrichment에서 description에 prompt marker(`>`)가 없으면 rawDesc 전체를 enrichedCmd로 채택하여 Discord로 전송. + +**해결**: `promptMatch` 실패 시 (description에 `>` 없음) → 터미널 OUTPUT으로 판단하여 즉시 필터. 실제 명령어는 항상 `…\project > command` 형식의 프롬프트를 포함. + +### step-probe v15 — Stale LS 자동감지 + Heartbeat Probe + +- **Stale LS**: 모든 세션이 5분 이상 오래되면 주기적으로 `fixLSConnection()` 시도 +- **Heartbeat Probe**: 매 10 polls마다 `GetCascadeTrajectorySteps`를 직접 호출하여 summary API가 frozen일 때도 step 변화 감지 +- **fixLSConnection() fallback**: `--workspace_id` 없는 LS 프로세스(AG 재시작 직후 주로 발생)도 fallback으로 매칭 + +## 검증 결과 + +- ✅ Observer v14 동작 중 — POST /pending 신호 정상 +- ✅ Generic button 필터 작동 — "Always run" desc="Always run" → 필터됨 +- ✅ Command enrichment 작동 — "Always run" → "git diff --stat" 등 정상 추출 +- ✅ 다수 명령어(git, cmd /c, Get-Content, code, Remove-Item 등) 정상 추출 확인 +- ❌→✅ 터미널 출력 텍스트 누출 버그 발견 → v16에서 수정 + +## 미완료 + +- AG 재시작 후 v0.5.50 실제 동작 확인 필요 +- v15 stale LS 자동복구 + heartbeat probe 실동작 확인 (장시간 세션 필요)