AgentLoopConfig.onTurnEnd 및 Agent.setOnTurnEnd 콜백을 수정하여 루프가 다른 프로바이더 요청으로 계속될 예정인지 여부를 받도록 변경했습니다.compaction.strategy가 snapcompact에서 context-full로 전환된 후 만료된 snapcompact 아카이브 프레임이 컨텍스트 풀 컴팩션으로 누수되는 문제를 해결했습니다. 전략 전환 시 최신 컴팩션 항목의 preserveData.snapcompact가 그대로 남아있어, context-full이 구형 이미지 프레임이 첨부된 컨텍스트를 계속 재구성하고 있었습니다. 이로 인해 컨텍스트/토큰 사용량이 증가하고 세션이 조기에 컴팩트된 것처럼 나타났습니다(약 60% 정도의 명백한 윈도우 사용률). 전환 후 첫 번째 context-full 컴팩션이 이제 이전 아카이브의 평문을 LLM 요약 입력으로 통합하고 새 항목에서 preserveData.snapcompact를 제거합니다. 레거시 프레임 전용 아카이브(마이그레이션할 평문 없음)는 완전히 제거됩니다. (#3561 by @serverinspector)**Bold Title**, ## Heading)은 분석 전에 제거되므로 계속 변경되는 표현이 신규성을 과대 평가하여 정체를 가릴 수 없습니다. 537k개의 실제 비-Gemini 추론 블록을 기준으로 보정되었습니다(신규성 임계값 0.2/실행 길이 8에서 거짓 양성 없음; 실제 루프는 10+ 이상의 실행을 지속).COREWEAVE_API_KEY 및 WANDB_API_KEY 폴백을 통한 CoreWeave Serverless Inference 프로바이더 로그인 지원을 추가했습니다.oauth.html)를 oh-my-pi 웹 브랜드 언어에 맞도록 재설계했습니다: OKLCH 자주색 틴트 다크 중성, 워드마크의 자홍색→홍채→청록색 브랜드 그래디언트, ascii 그리드 배경 위의 프로스티드 글래스 카드, 성공/오류 아이콘 주변의 컬러 상태 후광. 모든 에셋이 인라인됩니다. __OAUTH_STATE__ 주입 계약과 성공/오류 JS 로직은 변경되지 않습니다.replayReasoningContent가 활성화된 경우에도 새로운 사용자 메시지마다 전체 프롬프트를 다시 처리하는 문제를 해결했습니다 (#3541 #3528의 후속). reasoning_content만 전송하는 것으로는 충분하지 않았습니다: Qwen3의 채팅 템플릿은 인덱스가 <= last_query_index인 어시스턴트 턴에서 <think>...</think>를 제거하므로, 새로운 사용자 메시지(사용자의 다음 프롬프트 또는 자동 학습 캡처-정지 넛지)가 도착하면, 모든 이전 어시스턴트 턴이 "더 이전"이 되고 <think> 블록 없이 다시 렌더링됩니다. 이는 슬롯의 KV 캐시에 남아있는 생성 토큰과 달라집니다. 채팅 완료 인코더는 이제 로컬 서버의 Qwen 사고 방언에 대해 preserve_thinking: true를 내보냅니다. 기존 enable_thinking 내보내기와 동일한 방식으로 경로를 분할합니다: qwen 방언은 최상위 필드에 표시됩니다(llama.cpp의 --jinja 훅 및 Alibaba Cloud Model Studio의 호환 모드), qwen-chat-template 방언(NVIDIA NIM, vLLM/SGLang의 채팅 템플릿 kwargs 경로)은 NIM의 요청 스키마가 additionalProperties: false이고 알려지지 않은 최상위 필드를 거부하므로 chat_template_kwargs.preserve_thinking에만 표시됩니다 (#2299). 내보내기는 reasoning.enabled 게이트 위로 올려지므로 원본 게이팅이 놓친 세 가지 경우에 작동합니다: (1) 업스트림 /v1/models이 기능을 광고하지 않아 reasoning: false로 배송되는 런타임 발견 로컬 Qwen 모델(#3532이 replayReasoningContent에 대해 해결한 것과 동일한 문제), (2) 호출자 비활성화 추론(/think off) — kwargs는 턴별 사고 스위치가 아닌 히스토리 렌더링 노브이며, 슬롯은 여전히 이전 턴에서 <think> 토큰을 보유하고 있음, (3) 강제 도구 선택/DeepSeek 스타일 자동 비활성화. Qwen3.6+은 위치와 관계없이 모든 어시스턴트 턴에 대해 <think>...</think>를 렌더링하고, 다음 턴 렌더링은 캐시된 생성 토큰과 일치합니다. (#3541)OpenAICompat.qwenPreserveThinking을 추가했습니다. 해결된 thinkingFormat이 "qwen" 또는 "qwen-chat-template"이고 replayReasoningContent가 켜져 있을 때 자동 활성화됩니다(즉, 4가지 기본 로컬 OpenAI 호환 프로바이더 또는 루프백/RFC1918/*.local baseUrl을 가리키는 사용자 정의 프로바이더). 채팅 완료 인코더 변경과 함께 작동하여 요청 본문에 preserve_thinking: true를 포함하고(쌍둥이 최상위 + chat_template_kwargs 내보내기), Qwen3.6+이 더 이상 어시스턴트 턴에서 <think>...</think>를 제거하고 로컬 슬롯의 KV 캐시를 사용자 메시지 간에 깨뜨리지 않도록 합니다. 비-Qwen 채팅 템플릿은 매개변수를 무시하므로 플래그는 Qwen 경로 외에서는 작동하지 않습니다. 클라우드 Qwen 호스트(Alibaba Dashscope/Qwen Portal)의 사용자는 compat.qwenPreserveThinking: true로 옵트인할 수 있습니다. (#3541)compaction.midTurnEnabled를 추가했습니다. (#3525)grep 내장에 grep -q/--quiet/--silent 및 -x/--line-regexp을 추가했습니다. -q는 모든 stdout을 억제하고 첫 번째 일치에서 종료합니다(단락, GNU에 따라 일치 상태가 읽기 오류보다 우선). -x는 각 패턴을 전체 라인에 고정합니다. grep -qx "$applet" <(strings bin)과 같은 셸 조건부를 해제합니다.SWAP.BLK/DEL.BLK/INS.BLK.POST를 사용하여 플랜 파일 섹션별로 수정하도록 유도합니다. 제목은 전체 섹션(더 깊은 중첩 제목까지)을 해결하므로 에이전트는 전체 파일을 다시 작성하지 않고 섹션을 다시 작성, 삭제 또는 추가할 수 있습니다.tui.renderMermaid를 추가했습니다. 비활성화하면 생성된 시스템 프롬프트에서 Mermaid 다이어그램 힌트도 제거되므로 Mermaid 블록이 일반 강조된 코드 펜스로 폴백됩니다./resume <session-id>를 추가했습니다. 기존 세션 id/프리픽스 리졸버를 재사용하면서 일반 /resume은 여전히 선택기를 엽니다.gc.* 기본값을 사용한 수동 omp gc 스토리지 유지 관리를 추가했습니다./resume <session-id>가 활성 cwd의 세션 디렉토리만 검색하는 문제를 해결했습니다. id 프리픽스 조회는 이제 CLI --resume <session-id>처럼 다른 cwd 버킷의 세션으로 폴백됩니다.StdioTransport.connect()는 이제 OMP가 이미 상속 가능한 콘솔을 보유하고 있는지 확인하고 resolveStdioSpawnCommand는 그 경우 windowsHide/CREATE_NO_WINDOW를 건너뜁니다. 따라서 cmd.exe/PowerShell 손주 프로세스는 MCP 시작 또는 재연결 중에 눈에 띄는 conhost를 할당하는 대신 터미널 콘솔을 재사용합니다. (#3567)edit.modelVariants, PI_EDIT_VARIANT 또는 PI_STRICT_EDIT_MODE가 명시적으로 해시라인으로 옵트인하지 않는 한 이제 replace로 폴백됩니다.default = sonnet:off 중 계획 모드는 사고를 high로 올림) applyRoleModel을 통과하여 자동으로 사전 플랜 수준을 복원하지 않습니다. (#3554)modelRoles.plan만 구성됨, 기본값 설정 안 됨, 따라서 getRoleModelCycle은 활성 계획 모델에서 단독 default 항목을 합성하고 슬라이더는 숨겨짐)은 더 이상 실행 티어로 고정되지 않습니다. 승인은 대신 자동으로 사전 플랜을 복원하는 것으로 폴백하여 자동으로 계획 모델로 전환되지 않습니다. (#3554)eval Julia 커널이 실행자 내부 백트레이스 프레임만 표시하는 문제를 해결했습니다(at top-level scope (./none:N), at main (…runner-…jl:635)) 예외 유형이나 메시지 없이, 셀 오류를 디버깅할 수 없게 만들었습니다. 호스트 렌더러(packages/coding-agent/src/eval/kernel-base.ts)는 비어있지 않은 traceback을 축자적으로 표시하고 비어있을 때만 ename: evalue로 폴백합니다. Python 및 Ruby 러너는 렌더링된 오류를 traceback에 포함하지만, Julia 러너(packages/coding-agent/src/eval/jl/runner.jl)는 스택 프레임에서만 traceback을 구축했으므로 메시지가 삭제되었습니다. emit_error는 이제 프레임 앞에 showerror 출력(REPL의 ERROR: 텍스트와 일치)으로 traceback을 시드합니다.cmd.exe 래퍼인 경우 Windows stdio MCP 서버가 타임아웃되고(눈에 띄는 터미널이 나타남) — node 래퍼, npx.cmd -y mcp-remote, 유사한 중첩 셸. StdioTransport.connect()는 무조건 detached: true를 Bun.spawn에 전달했지만, Windows에는 SIGTSTP/SIGTTIN이 없습니다. detached는 CreateProcess(DETACHED_PROCESS)에만 매핑되어, 부모의 상속된 콘솔을 제거합니다. 숨겨진 직접 cmd.exe는 콘솔을 잃었으므로 손주는 새로운 눈에 띄는 conhost를 할당했고, 더 이상 stdout이 OMP의 파이프를 통해 라우팅되지 않았습니다. 프록시는 브리지가 가동 중이라고 보고했지만 OMP는 MCP initialize 응답을 기다리다 타임아웃했습니다. resolveStdioSpawnCommand는 이제 모든 Windows 반환 형태(직접 .exe, cmd.exe 래핑 배치/해결할 수 없는 명령, npm cmd-shim이 node를 통해 시작)에 대해 detached: false를 반환하고 POSIX에서 detached: true를 유지합니다. 원본 SIGTSTP/SIGTTIN 이유가 여전히 유효합니다. connect()는 해결된 플래그를 사용합니다. (#3544)packages/coding-agent/src/lsp/index.ts의 getConfig)가 무효화되지 않아, .omp/lsp.json, 루트 마커, 첫 LSP 호출 후에 추가된 플러그인 LSP 설정이 프로세스의 나머지 기간 동안 보이지 않는 문제를 해결했습니다. 캐시된 관찰은 채팅 세션 전체에 걸쳐 지속됩니다. OMP는 단일 프로세스 바이너리이므로 사용자는 프로세스를 종료할 때까지 No language servers configured에 갇혀있었습니다. reload 핸들러는 이제 cwd의 캐시 항목을 삭제하고 서버를 반복하기 전에 loadConfig를 다시 실행하므로, 명시적 새로고침 요청이 프롬프트가 문서화한 대로 작동합니다. (#3546)preserveData.snapcompact는 이제 훅 및 결과 제공 보존 데이터가 병합된 후 제거되므로, 이전 snapcompact 전달이 나중의 context-full 컴팩션으로 프레임을 누수할 수 없습니다. (#3561 by @serverinspector)text/textHead/textTail 영역이 이제 이전 요약과 함께 난독화되는 반면 불투명한 공급자 재생 상태(OpenAI 원격 컴팩션 encrypted_content)는 바이트 동일로 유지됩니다. (#3561)modelRoles.default를 무시하는 문제를 해결했습니다(예: openai-compat 플러그인의 posthog/claude-opus-4-8). createAgentSession은 확장 팩토리가 프로바이더를 등록하기 전에 기본 역할을 해결했으므로, 역할을 가리킨 모델이 그곳에서 보이지 않았습니다. 새로운 시작(- c/--resume 없음)에서, 확장 후 폴백은 pickDefaultAvailableModel로 직접 이동하여 사용자의 구성된 기본값을 인증이 있는 첫 번째 번들 프로바이더 기본값으로 교체했습니다(일반적으로 OPENAI_API_KEY가 설정되었을 때 openai/gpt-5.5). 폴백은 이제 확장 후 허용 모델 세트(명시적 사고 선택기 포함)에 대해 기본 역할 조회를 다시 시도한 후 번들 프로바이더 기본값으로 폴백하기 전에 이를 수행합니다. (#3569)Nix.sublime-syntax 및 Mermaid.sublime-syntax 정의와 nix, mermaid, mmd 별칭을 통해 highlightCode/supportsLanguage에 Nix 및 Mermaid 구문 강조 지원을 추가했습니다.분량 관계로 이후 내용은 번역에서 제외했습니다. 전체 내용은 위 원문 링크에서 확인하세요.