done 또는 error 터미널 SSE 이벤트를 보내지 않고 연결을 끊을 때 프록시 스트림이 조용히 영토큰 성공 응답을 반환하던 문제를 수정했습니다. 이제 스트림은 오류를 발생시키고 stopReason: "error"를 포함한 error 이벤트로 연결 해제를 표면화하며 finalResultPromise를 해결합니다. 이전에는 stopReason: "stop"으로 기본 설정되고 빈 콘텐츠를 반환하여 stream.result() 호출자를 무한정 대기 상태로 남겨두었습니다.impersonated_service_account Application Default Credentials(ADC)에 대한 지원을 추가하여 401 invalid_client 오류 없이 연쇄 가장을 가능하게 했습니다.AuthStorage.getCredentialOrigin(provider) (구조화된 CredentialOrigin / CredentialOriginKind 반환) 및 getEnvApiKeyName(provider)을 추가하여 호출자가 제공자의 인증 출처를 렌더링할 수 있게 했습니다 — 런타임 오버라이드, 구성, 저장된 OAuth/API 키, 환경 변수(지원 변수 이름 포함) 또는 폴백 리졸버 — describeCredentialSource의 산문을 파싱할 필요 없이.onSseEvent 기록을 변경하여 원본 fetch 응답을 래핑하는 대신 디코딩된 SDK 스트림 항목에서 재구성된 SSE 이벤트를 내보냅니다.onSseEvent 기록에 event: "chat.completion.chunk"를 포함시킵니다.DEFAULT_MODEL_PER_PROVIDER의 기본 Anthropic 모델을 claude-sonnet-4-6에서 claude-opus-4-6으로 변경했습니다. 이제 제공자 기본값으로 폴백되는 세션(구성된 default 역할 없음, --model 없음, 복원된 세션 없음)은 Claude Opus 4.6에서 시작합니다.tool_call_id 값이 개별 도구 호출을 축소하던 문제를 수정했습니다. 제공자 재생 전에 내보낸 도구 호출당 하나의 호출/결과 쌍을 유지하고 OpenAI/Mistral 와이어 길이 한계 후에 생성된 중복 ID를 구별되도록 유지합니다. (#2055)429 "This request would exceed your account's rate limit", usage_limit_reached)를 일시적인 것처럼 재시도하던 문제를 수정했습니다. 오류 텍스트에 "rate limit"이 포함되어 있으므로 isProviderRetryableError가 일치했고 스트림 재시도 루프는 2s/4s/8s 백오프를 반복했습니다(그 후 streamSimple a/b/c 정책이 자격 증명을 다시 만들고 전체 작업을 다시 실행했음). 실패가 표면화되기 전에 — 서버의 retry-after가 계정을 몇 분에서 몇 시간 동안 주차했음에도 불구하고. 이제 이러한 오류는 isUsageLimitError를 통해 인식되고 자격 증명 순환 계층으로 즉시 표면화되므로, 예를 들어 omp dry-balance --bench는 속도 제한된 계정을 즉시 실패한 것으로 보고하지 않고 행이 멈춘 것처럼 나타나지 않습니다.function.arguments가 둘 이상의 델타에 걸쳐 객체로 스트리밍될 때 MiniMax 호환 OpenAI 완성 호스트가 도구 호출 인수 콘텐츠를 손실하던 문제를 수정했습니다. #1776에서 추가된 누산기는 청크당 block.partialArgs = rawArgs를 작성했으므로 마지막을 제외한 모든 청크가 덮어씌워졌습니다 — edit 호출의 경우 이것은 패치 텍스트의 꼬리 조각이 적용되는 것으로 표면화되었습니다(예: 단일 라인 replace 91..91: 본문이 주변 행까지 삭제를 확장함). 청크가 이제 얕게 병합됩니다. 공유 문자열 키의 경우 startsWith는 누적 재진술(최신 사용)과 청크당 델타 조각(연결)을 구별합니다. 객체 분기에 대한 청크당 toolcall_delta 내보내기가 억제됩니다(이전 코드는 청크당 JSON.stringify(rawArgs)를 내보냈으며, 이는 다운스트림 연결 소비자 — packages/agent/src/proxy.ts, openai-chat-server, openai-responses-server, anthropic-messages-server — 에 {"input":"a"}{"input":"b"}와 같은 잘못된 시퀀스를 제공했습니다). 병합된 객체는 대신 finishToolCallBlock에서 toolcall_end 전에 단일 연결 안전 델타로 플러시되므로 누산기가 인수를 올바르게 재구성합니다. 기존 #1776 회귀 테스트로 다루어진 단일 청크 형태는 끝에서 끝까지 올바르게 유지됩니다. (#2080)toolcall_start 후에 이전 병렬 도구 호출에 대한 늦은 toolcall_delta 이벤트를 잘못 라우팅하던 문제를 수정했습니다. 인코더는 이제 콘텐츠 인덱스별로 OpenFunctionCall 상태를 유지하고 항목 시작 시 출력 인덱스를 할당하며 각 도구 항목을 자신의 toolcall_end로 닫아 일치하는 호출에 대한 지연된 MiniMax 객체 인수 플러시를 보존합니다. (#2080)raw-sse.txt를 추가하여 캡처된 최근 원본 제공자 SSE 진단을 내보냅니다./model 가시성을 추가했습니다. 추론된 pi/smol/pi/slow/디자이너 선택은 이제 간단한 [ROLE auto] 배지로 표시되며 명시적으로 구성된 역할은 기존 채워진 배지와 생각 레이블을 유지합니다./login 및 /logout 제공자 선택기에 자격 증명 출처를 추가했습니다. 이제 각 인증된 제공자는 자격 증명의 출처를 표시합니다 — (login), (api key), (env: VAR_NAME), (config), (--api-key) 또는 (custom provider) — 따라서 실제 OAuth 로그인을 제공자를 단순히 별칭하는 환경 변수와 구별할 수 있습니다(예: COPILOT_GITHUB_TOKEN). 출처는 선택기의 입력 검색 필터와도 일치합니다.updateSettings() 구성 변경 시 캐시합니다.CustomEditor 앱 바로 가기 디스패치를 변경하여 각 입력 패킷을 한 번 파싱하고 사전 계산된 정규 키 세트와 일치시키므로 기존 바로 가기 우선 순위를 보존하면서 반복된 키 재파싱을 방지합니다.lsp references를 변경하여 참조가 없거나 쿼리된 선언만 반환될 때만 재시도하며, 프로젝트 인식 서버에 대해 두 개의 고정된 250ms 재시도를 사용합니다.https://github.com/<owner>/<repo>:raw의 read 처리를 변경하여 원본 페이지 렌더링만 사용하고 GitHub API README 폴백을 제거합니다.modelProviderOrder 설정 및 기본 제공자 우선 순위를 사용하므로 자사 제공자는 릴레이에 우선합니다.display.shimmer = disabled일 때 작업 라인이 정적이므로 로더는 더 이상 이에 대해 30fps 재그리기를 예약하지 않고 스피너 전용 ~12.5fps 주기로 폴백합니다.workflow/workflows에서 workflowz로 변경했습니다.agent_end에서만 로더를 중지하며 executeToolCalls의 await Promise.allSettled(...)에서 모든 진행 중인 도구가 정착될 때까지 도달할 수 없습니다 — 프로세스/서브에이전트/커널 소유 도구는 우아하게 종료되므로(SIGTERM, 2~3초 유예, SIGKILL) 로더는 변경되지 않은 "Working…/" 라인을 계속 표시했고 드롭된 키프레스로 읽혔습니다. 이제 로더는 Esc가 중단을 요청하는 즉시 "Interrupting…"으로 전환하고 턴이 풀릴 때까지(EventController.notifyInterrupting) 의도 주도 레이블 업데이트를 동결하므로 테어다운이 완료되는 동안에도 중단이 즉시 승인됩니다.--isolate + 높은 동시성에서 느린 콜드 스타트는 초기화 중간에 중단되었습니다. 아직 초기화 중인 Bun 워커를 종료하는 것은 문서화된 SIGILL/SIGTRAP 충돌 트리거이며 전체 테스트 파일을 종료했습니다. 워커 초기화는 이제 (더 큰 셀당 timeout에 의해 지배되는 동안에도) 독립적인 고정 15초 인프라 예산을 하한으로 하며 JS eval 테스트 스위트는 콜드 스타트가 완료될 수 있도록 20초 파일 로컬 시간 초과를 설정합니다.findings 속성 없이 additionalProperties: false를 선언할 때 검토자 스타일 서브에이전트 산출이 호출 eval 셀을 충돌시키던 문제를 수정했습니다. normalizeCompleteData는 이제 수집된 report_finding 항목을 산출된 페이로드에 스플라이싱하기 전에 활성 유효성 검사기를 참조하므로 스키마가 거부할 때 주입이 억제됩니다 — 실행자의 사후 분석 검증을 이미 동일한 원본 페이로드를 허용한 도구 내 yield 검증과 잠금 단계로 유지합니다 (#2070)toolUse 중지가 도구 호출 없이 세션 기록을 손상시키던 문제를 수정했습니다. 재시도하고 재시도 한계에서도 고아 턴을 제거하도록 했습니다.MCPTool 및 DeferredMCPTool에서 approval = "write"를 선언하고 sdk.ts의 customToolToDefinition()을 통해 approval 속성을 전파하여 비-요로 모드에서 MCP 도구가 행이 멈추던 문제를 수정했습니다.git worktree move) 세션 재개를 수정했습니다. --continue는 이제 원본 디렉터리가 더 이상 존재하지 않을 때 터미널의 마지막 세션을 새 디렉터리로 재설정하며, 명시적 --resume <id> --session-dir <dir> 로컬 일치는 잘못된 cwd로 재개하는 대신 재설정하고 크로스 프로젝트 --resume <id>는 소스 디렉터리가 사라졌을 때 중복 복사본을 포크하는 대신 세션을 이동(재설정)할 것을 제안합니다.mime="." DATA 페이로드(공백으로 구분된 MIME 목록)를 해석 스펙에서 설명하는 유형별 DATA 패킷에 추가로 디코딩하고 유형별 스펙 목록은 Kitty의 점 페이로드 요청 형태 대신 type=read:mime=...로 선택된 페이로드를 요청합니다 (#2051)/goal set ...이 일반 텍스트로 큐에 넣는 대신 목표 모드를 적용합니다.TypeError: Unknown signal: SIGTSTP로 에이전트가 충돌하는 Ctrl+Z를 수정했습니다. InputController.handleCtrlZ는 process.kill(0, "SIGTSTP")를 무조건 호출했으나 SIGTSTP는 POSIX 작업 제어이고 Windows의 Bun/Node는 JS 측에서 신호 이름을 거부합니다. throw는 TUI 입력 디스패처를 통해 잡히지 않은 예외로 전파되었습니다. 이제 핸들러는 Windows에서 "Suspend (Ctrl+Z)는 이 플랫폼에서 지원되지 않습니다" 상태로 작동하지 않으며 POSIX에서는 process.kill을 try/catch로 래핑하여 등록된 SIGCONT 재개 훅을 분리하고 실패 시 TUI를 start()하므로 거부된 신호가 새로운 리스너로 UI가 고립된 상태로 남을 수 없습니다 (#2036).--cwd 대상(예: /tmp에서 시작된 omp --cwd repo)이 원본 상대 문자열을 세션 구성으로 누수하던 문제를 수정했습니다. applyStartupCwd는 setProjectDir을 통해 해결된 디렉터리로 chdired했으나 parsed.cwd를 "repo"로 남겨두었으므로 buildSessionOptions(parsed.cwd를 getProjectDir() 위에 선호함)은 다운스트림 설정/검색/세션 생성에 새 프로세스 cwd(/tmp/repo/repo) 또는 지속된 상대 세션 cwd에 대해 다시 해결되는 값을 전달했습니다. parsed.cwd는 이제 chdir 후 해결된 절대 프로젝트 디렉터리로 다시 동기화됩니다.--cwd 시작 플래그를 수정했습니다. 이제 파싱되고 현재 프로세스 디렉터리 또는 홈 자동 전환 대상으로 항상 폴백하는 대신 시작 디렉터리를 오버라이드할 수 있습니다.upstream_error: Upstream request failed 게이트웨이 실패에 대한 세션 자동 재시도를 수정했습니다.N:)를 제거했으므로 + 접두사 없이 3:text를 붙여넣기하면 더 이상 3:이 리터럴 콘텐츠로 주입되지 않습니다. 단일 패스 제거를 사용하여 고유 텍스트가 digits:로 시작하는 콘텐츠를 손상시키지 않습니다 (#1492).eval llm()이 system 프롬프트 없이 호출될 때 Responses 트랜스포머가 빈 시스템 프롬프트에서 instructions 필드를 삭제하는 제공자(openai-codex 주목)에 대해 HTTP 400 "Instructions are required"를 반환하던 문제를 수정했습니다. runEvalLlm은 이제 system이 제공되지 않을 때 최소 기본 시스템 프롬프트("You are a helpful assistant.")를 전송하므로 llm("question")이 모든 제공자에 대해 작동합니다. 명시적 system=은 여전히 우선합니다.read(path, offset, limit) 전주 도우미가 문서화된 위치 인수를 TypeError: read() takes 1 positional argument but 3 were given으로 거부하던 문제를 수정했습니다. 서명은 키워드 전용(def read(path, *, offset=1, limit=None))이었으나 eval 도우미 테이블은 위치 선택적 인수를 광고합니다. read("file.py", 10, 20)을 말 그대로 호출한 에이전트는 충돌했습니다. *이 제거되어 read("f", 10, 20) 및 read("f", offset=10, limit=20) 모두 작동합니다.eval 재설정 셀이 두 셀이 같은 세션(예: 빠른 재제출 또는 병렬 셀 경합)에 겹칠 때 "Python kernel reset already in progress" / "JS context reset already in progress"로 실패하던 문제를 수정했습니다. 실행자는 이제 동시 재설정을 병합합니다 — 추가 호출자는 진행 중인 재설정이 완료될 때까지 대기한 후 새로 재시작된 커널에서 실행합니다 — 순전히 내부 조율 상태에 대한 사용자 보기 오류를 throw하는 대신.eval 도구 설명이 부모가 생성을 금지하는 서브에이전트 세션에서도 agent() 도우미를 무조건 광고하던 문제를 수정했습니다. getSessionSpawns()가 ""를 반환할 때 agent()는 이제 프리루드에서 제외됩니다.