previous_response_id를 델타 입력과 함께 전송하지 않으며 항상 전체 기록(transcript)을 전송합니다x-codex-turn-state 처리를 턴 내 연속(within-turn continuations)으로 한정하여 도구 루프 후속 작업만 turn-state 헤더를 포함하고 새 사용자 턴은 이 헤더 없이 시작합니다OpenAICodexResponsesOptions에서 statefulResponses 옵션을 제거했으며, SSE 상태 유지 모드는 더 이상 PI_CODEX_STATEFUL 스타일 플래그로 제어되지 않습니다detail 본문, error.code 없음)가 누락된 문제를 수정했으므로, 이제 연결된 턴은 400을 표시하는 대신 전체 기록 재생으로 폴백됩니다gemini-3.1-pro --thinking high가 Cloud Code Assist API error (400): Request contains an invalid argument.로 실패하던 문제를 수정했습니다 — 업스트림 gemini-3.1-pro-high 배포가 두 CCA 엔드포인트에서 모든 streamGenerateContent 요청을 거부하는 동안 discovery는 여전히 이를 광고했습니다. High effort는 이제 gemini-pro-agent(동일한 요청 본문을 수락하는 동일한 "Gemini 3.1 Pro (High)" 모델)로 라우팅되며, 모델 캐시 지문 버전이 업데이트되었으므로(merge-v2 → merge-v3) 기존 최신 캐시는 discovery를 다시 가져오고 수정된 라우팅을 즉시 적용합니다roomId#key 링크 및 스킴 없는 릴레이 호스트를 허용하도록 collab 링크 처리를 업데이트했습니다/collab stop 및 /collab status 옵션을 추가했습니다/collab, /join, /leave를 추가했습니다: 호스트가 종단간 암호화된 링크를 공유하고(AES-256-GCM 키는 링크 프래그먼트에만 있음; 릴레이는 불투명한 바이트를 봄) 게스트는 자신의 TUI에서 세션을 기본적으로 렌더링합니다 — 스트리밍 텍스트, 도구 카드, 푸터 상태, ctrl+o 확장, /dump — 그리고 호스트의 에이전트에 프롬프트하거나 중단할 수 있습니다. 게스트 프롬프트는 작성자 배지와 함께 표시되며, 세션 변경 명령은 호스트만 사용할 수 있습니다. 기본값은 공개 relay.omp.sh 릴레이(collab.relayUrl)이며, 자체 호스팅 가능한 Go 릴레이는 pi-www 저장소에 omp-collab-relay로 있습니다collab.relayUrl 및 collab.displayName 설정과 참여자 수(호스트) 또는 게스트 역할을 표시하는 collab 상태 라인 세그먼트를 추가했습니다. 게스트는 호스트의 실시간 모델/생각 상태를 자신의 복제 에이전트로 미러링하고 호스트의 서브에이전트 생태계를 종단간으로 미러링합니다: 라이브 서브에이전트 HUD, 라이브 진행률을 포함한 Agent Hub 표, hub chat/kill/revive(호스트로 라우팅됨), 그리고 주문형 서브에이전트 기록 보기/join <link>를 실행하는 omp join <link> 서브명령을 추가했습니다@oh-my-pi/pi-wire로 이동했으며 지원되지 않는 세션 이벤트나 항목을 collab 게스트로 더 이상 브로드캐스트하지 않습니다createAgentSession이 즉시 반환되고 구성된 MCP 서버에 백그라운드에서 연결합니다; 연결되면 기존 라이브 새로고침 채널을 통해 도구 및 슬래시 명령이 스트리밍됩니다. 명시적으로 요청된 MCP 도구의 서버가 아직 연결을 완료하지 않은 경우 "unknown tool" 오류 대신 결정론적 "still connecting" 자리 표시자로 해결되며, 각 서버의 지시사항은 백그라운드 연결이 완료되면 시스템 프롬프트에 추가됩니다 — 도구를 등록하는 동일한 라이브 새로고침에 의해 전달됨 — 따라서 서버 제공 지시사항은 유지되고 삭제되지 않습니다. tools.discoveryMode: "auto"는 백그라운드 연결이 실제 MCP 도구 수를 보고하면 다시 해결되므로, threshold를 넘기에 충분히 큰 도구 집합은 discovery를 켜고(search_tool_bm25 등록) 모든 도구를 강제 활성화하는 대신 서버가 아직 연결 중인 동안 세션이 삭제되면 죽은 세션에 도구를 부활시키는 대신 연결을 끊습니다. 비-UI 모드(print/rpc/acp)는 차단 discovery 경로를 유지합니다. MCP 서버가 구성된 경우 첫 번째 렌더 중요 경로에서 약 290ms(≈콜드 부팅의 24%)가 감소했습니다Markdown 부분트리를 재사용합니다 — 증가하는 블록만 다시 렌더링됩니다 — 그리고 표시 컨트롤러의 grapheme 계산은 메모화됩니다. 여전히 스트리밍되는 답변 앞에 있는 완료된 생각 블록은 더 이상 모든 프레임마다 다시 강조되지 않습니다(벤치마크에서 think-then-answer 스트림에 대해 ~66% 렌더링 작업 감소; single-block 스트림은 변경 없음)ModelRegistry 생성자가 전체 ~3,200개 모델 카탈로그에서 buildCanonicalModelIndex를 동기식으로 구축했습니다(~210ms); 이제 첫 읽기(렌더 전에 모델 선택기 및 enabledModels/기본 역할 패턴 해결에 도달)에 lazy하게 구축됩니다(getCanonicalModels/getCanonicalVariants/getCanonicalId). 첫 번째 렌더에서 약 244ms(≈콜드 부팅 벽의 16%)가 감소했습니다; 선택기는 첫 열기에서 일회 구축을 결제합니다read 요약이 더 이상 tree-sitter parse를 다시 실행하지 않습니다. 세션당 요약은 신선하게 읽은 바이트의 컨텐츠 해시에 메모화됩니다 — 파일은 여전히 모든 호출에서 신선하게 읽히므로 결과는 낙후성 윈도우 없이 정확하게 유지됩니다 — 반복된 동일 파일 요약 읽기를 ~17ms에서 ~2.5ms로 감소시킵니다PI_TIMING 시작 테이블에서 이전의 레이블이 없는 동기식 부팅 영역에 modelRegistry:init, buildCanonicalModelIndex, 및 initTelemetryExport spans를 정성했습니다ws:// 릴레이 URL 및 잘못된 룸 키를 거부했습니다#<roomId>#<key> URL에서 딥 링크 자동 연결 지원을 추가했습니다@oh-my-pi/pi-wire 프로토콜 계약으로 교체했습니다lex(prefix) ++ lex(tail)), 비-추가 편집, 참조 링크 정의, 및 CRLF 입력에 대한 전체 렉싱 폴백이 있습니다. 출력은 전체 렉싱과 바이트 동등입니다(계약 테스트로 적용됨), 긴 single-block 메시지 표시의 O(N²) 비용을 O(N)로 전환합니다: 6,000-grapheme 표시는 벤치마크에서 ~575ms에서 ~89ms의 CPU로 감소했습니다Full Changelog: v15.11.7...v15.11.8