메인 콘텐츠로 건너뛰기

통합 런타임 스트리밍 리팩터 계획

목표

main, subagent, acp 전반에 하나의 공통 스트리밍 파이프라인을 제공해 모든 런타임이 동일한 coalescing, chunking, 전달 순서, 크래시 복구 동작을 갖도록 한다.

왜 필요한가

  • 현재 behavior가 여러 runtime-specific shaping paths로 나뉘어 있다.
  • 한 경로에서 formatting/coalescing bugs를 고쳐도 다른 경로에는 그대로 남을 수 있다.
  • delivery consistency, duplicate suppression, recovery semantics를 추론하기가 더 어려워진다.

목표 아키텍처

단일 파이프라인, 런타임별 어댑터:
  1. 런타임 어댑터는 canonical 이벤트만 방출한다.
  2. 공용 stream assembler 가 text/tool/status 이벤트를 coalesce 하고 finalize 한다.
  3. 공용 channel projector 가 채널별 chunking/formatting 을 한 번만 적용한다.
  4. 공용 delivery ledger 가 idempotent send/replay 의미론을 강제한다.
  5. outbound channel adapter 가 실제 전송을 수행하고 delivery checkpoint 를 기록한다.
Canonical event contract:
  • turn_started
  • text_delta
  • block_final
  • tool_started
  • tool_finished
  • status
  • turn_completed
  • turn_failed
  • turn_cancelled

Workstreams

1) Canonical streaming contract

  • core에서 strict event schema + validation을 정의한다.
  • 각 runtime이 호환 이벤트를 방출하는지 보장하는 adapter contract tests를 추가한다.
  • malformed runtime events는 조기에 reject하고 structured diagnostics를 노출한다.

2) Shared stream processor

  • runtime-specific coalescer/projector logic을 하나의 processor로 대체한다.
  • processor가 text delta buffering, idle flush, max-chunk splitting, completion flush를 담당한다.
  • drift를 막기 위해 ACP/main/subagent config resolution을 하나의 helper로 옮긴다.

3) Shared channel projection

  • channel adapters는 단순하게 유지한다. finalized blocks만 받아 전송한다.
  • Discord-specific chunking quirks는 channel projector에만 둔다.
  • projection 이전의 pipeline은 channel-agnostic하게 유지한다.

4) Delivery ledger + replay

  • per-turn/per-chunk delivery IDs를 추가한다.
  • 실제 send 전후로 checkpoints를 기록한다.
  • restart 시 pending chunks를 idempotent하게 replay하고 duplicates를 피한다.

5) Migration and cutover

  • Phase 1: shadow mode (새 pipeline이 출력을 계산하지만 old path가 send하고, 결과를 비교)
  • Phase 2: runtime-by-runtime cutover (acp, 그다음 subagent, 그다음 main, 또는 위험도에 따라 역순)
  • Phase 3: legacy runtime-specific streaming code 삭제

비목표

  • 이번 refactor에서 ACP policy/permissions model은 변경하지 않는다.
  • projection compatibility fixes 외에는 channel-specific feature expansion을 하지 않는다.
  • transport/backend redesign은 하지 않는다 (acpx plugin contract는 event parity가 필요하지 않는 한 그대로 둔다).

Risks and mitigations

  • 위험: 기존 main/subagent paths에서 behavioral regressions 완화: shadow mode diffing + adapter contract tests + channel e2e tests
  • 위험: crash recovery 중 duplicate sends 완화: durable delivery IDs + delivery adapter의 idempotent replay
  • 위험: runtime adapters가 다시 분기됨 완화: 모든 adapters에 shared contract test suite를 필수화

수용 기준

  • 모든 runtimes이 shared streaming contract tests를 통과한다.
  • Discord ACP/main/subagent가 작은 delta에 대해서도 동등한 spacing/chunking behavior를 보인다.
  • crash/restart replay는 동일한 delivery ID에 대해 duplicate chunk를 보내지 않는다.
  • legacy ACP projector/coalescer path가 제거된다.
  • streaming config resolution이 shared되고 runtime-independent가 된다.