# AG Native 릴레이 아키텍처 분석 > **이 문서는 AG Native ↔ Discord 릴레이의 데이터 흐름 SSOT입니다.** > 구현/디버깅 전 반드시 확인합니다. --- ## 1. 데이터 경로 요약 AG Native에서 Discord로 메시지를 전달하는 경로는 크게 2개: | # | 경로 | 소스 | 실시간? | 상태 | |---|------|------|---------|------| | 1 | **Observer DOM** | workbench.html 인라인 스크립트 → DOM 관찰 → HTTP POST → http-bridge | ✅ 실시간 | AI 응답: ✅ 작동 (v0.5.72+), 사용자 메시지: ✅ 작동 (v0.5.74+) | | 2 | **Step Probe (trajectory API)** | LS RPC `GetCascadeTrajectorySteps` → step 분석 | ❌ cascade 완료 후에만 | AI 응답: ❌ 실시간 불가, 사용자 메시지: ❌ 실시간 불가 | ### 1.1 핵심 API 제약 (2026-04-18 확인) > [!CAUTION] > **`GetCascadeTrajectorySteps`는 진행 중인 cascade의 step을 실시간으로 반환하지 않습니다.** > step count는 cascade가 **완전히 종료**(IDLE 전환)된 후에만 업데이트됩니다. > 따라서 Step Probe의 RT-CAPTURE, HB-CAPTURE 모두 **현재 진행 중인 대화에서는 작동하지 않습니다.** **검증 데이터**: - POLL에서 `status=CASCADE_RUN_STATUS_IDLE`, `steps=928`, `delta=0` 고정 - HEARTBEAT probe: `offset=927 got=1 real=928 known=928` → 변함 없음 - 실제로 수십 개의 tool call이 실행되었지만 step count 불변 - Cascade 종료 후 다음 poll에서 step count가 점프 (예: 733 → 865 → 928) ### 1.2 AG Native SDK EventMonitor SDK에 이벤트 시스템이 있으나 **모두 polling 기반**: - `EventMonitor.onStepCountChanged` — getDiagnostics 기반 polling - `EventMonitor.onActiveSessionChanged` — state.vscdb 기반 polling - **실시간 push (WebSocket/SSE)는 없음** - 현재 상태: ERR_CONNECTION_REFUSED 문제로 비활성화됨 --- ## 2. Observer DOM 경로 상세 ### 2.1 Observer 스크립트 삽입 체인 ``` extension.ts activate() → html-patcher.ts setupApprovalObserver() → observer-script.ts generateApprovalObserverScript(port) → workbench-jetski-agent.html에 인라인