통합 런타임 스트리밍 리팩토링 계획
목표
main, subagent, acp 모든 런타임이 동일한 결합, 청킹, 전달 순서, 충돌 복구 동작을 갖도록 하나의 공유 스트리밍 파이프라인을 제공합니다.
이 문서가 필요한 이유
- 현재 동작이 여러 런타임별 형성 경로로 분산되어 있음.
- 포맷팅/결합 버그가 한 경로에서 수정되어도 다른 경로에는 남아있을 수 있음.
- 전달 일관성, 중복 억제, 복구 의미론이 추론하기 어려움.
목표 아키텍처
단일 파이프라인, 런타임별 어댑터:
- 런타임 어댑터는 정규 이벤트만 발생.
- 공유 스트림 어셈블러가 텍스트/도구/상태 이벤트를 결합하고 확정.
- 공유 채널 프로젝터가 채널별 청킹/포맷팅을 한 번 적용.
- 공유 전달 원장이 멱등 전송/재생 의미론을 강제.
- 아웃바운드 채널 어댑터가 전송을 실행하고 전달 체크포인트를 기록.
정규 이벤트 계약:
turn_startedtext_deltablock_finaltool_startedtool_finishedstatusturn_completedturn_failedturn_cancelled
작업 흐름
1) 정규 스트리밍 계약
- 코어에 엄격한 이벤트 스키마 + 유효성 검증 정의.
- 각 런타임이 호환 이벤트를 발생시키도록 어댑터 계약 테스트 추가.
- 잘못된 형식의 런타임 이벤트를 조기에 거부하고 구조화된 진단 표시.
2) 공유 스트림 프로세서
- 런타임별 결합기/프로젝터 로직을 하나의 프로세서로 교체.
- 프로세서가 텍스트 델타 버퍼링, 유휴 플러시, 최대 청크 분할, 완료 플러시를 담당.
- ACP/main/subagent 설정 해석을 하나의 헬퍼로 이동하여 드리프트 방지.
3) 공유 채널 프로젝션
- 채널 어댑터를 단순하게 유지: 확정된 블록을 받아 전송.
- Discord 전용 청킹 특이사항을 채널 프로젝터에만 이동.
- 프로젝션 전 파이프라인은 채널 무관으로 유지.
4) 전달 원장 + 재생
- 턴/청크별 전달 ID 추가.
- 물리적 전송 전후에 체크포인트 기록.
- 재시작 시 대기 중인 청크를 멱등적으로 재생하고 중복 방지.
5) 마이그레이션 및 전환
- 1단계: 섀도우 모드 (새 파이프라인이 출력을 계산하지만 기존 경로가 전송; 비교).
- 2단계: 런타임별 전환 (
acp,subagent,main순 또는 위험도에 따라 역순). - 3단계: 레거시 런타임별 스트리밍 코드 삭제.
비목표
- 이 리팩토링에서 ACP 정책/권한 모델 변경 없음.
- 프로젝션 호환성 수정 외의 채널별 기능 확장 없음.
- 전송/백엔드 재설계 없음 (이벤트 동등성에 필요하지 않는 한 acpx 플러그인 계약 유지).
위험 및 완화
- 위험: 기존 main/subagent 경로에서 동작 회귀. 완화: 섀도우 모드 비교 + 어댑터 계약 테스트 + 채널 e2e 테스트.
- 위험: 충돌 복구 시 중복 전송. 완화: 내구성 있는 전달 ID + 전달 어댑터의 멱등 재생.
- 위험: 런타임 어댑터가 다시 분기됨. 완화: 모든 어댑터에 필수 공유 계약 테스트 스위트.
수락 기준
- 모든 런타임이 공유 스트리밍 계약 테스트를 통과.
- Discord ACP/main/subagent가 작은 델타에 대해 동일한 간격/청킹 동작을 생성.
- 충돌/재시작 재생이 동일 전달 ID에 대해 중복 청크를 전송하지 않음.
- 레거시 ACP 프로젝터/결합기 경로가 제거됨.
- 스트리밍 설정 해석이 공유되고 런타임 독립적.