AppendOnlyContextManager.syncMessages가 이미 동기화된 메시지의 제자리 재작성 시 전체 로그를 지우는 문제를 수정했습니다. 턴별 도구 출력 가지치기, 이미지 제거 또는 단일 메시지를 건드린 transformContext 재렌더링이 추가 전용 로그의 모든 이전 턴을 버리고 처음부터 대화를 다시 보내서 로컬 백엔드(llama.cpp / Ollama / LM Studio)가 몇 턴마다 수만 개의 토큰을 다시 채우도록 강제했습니다. 이제 syncMessages는 이전에 동기화된 메시지와 새 메시지 간의 가장 긴 바이트 안정적 접두사를 찾아 로그를 그 접두사로 자르고 분기된 부분만 다시 추가합니다. 따라서 공급자의 KV 캐시는 분기 지점까지 따뜻하게 유지됩니다. (#3406)listOAuthAccounts 추가getOAuthAccessAt 추가Invalid value: 'input_image'로 거부되는 문제를 수정했습니다. 이미지가 포함된 Codex 요청은 이제 전체 Responses 전송으로 폴백됩니다. (#3421)disableCredentialById)를 무조건 OAuth 자격증명을 비활성화하여 다른 프로세스나 새로 로그인한 계정이 새로고침 중에 회전했으나 저장된 행이 이미 유효한 토큰을 보유하고 있었을 때에도 자격증명이 해제되는 문제를 수정했습니다. 이제 definitive 실패 해제는 AuthStorage.refreshCredentialById 내에서 in-stream 및 usage-probe 경로가 사용하는 것과 동일한 compare-and-set을 통해 발생합니다. 지속된 행이 새로고침이 실제로 시도한 자격증명과 여전히 일치할 때만 비활성화되며, CAS 손실 시 다시 로드됩니다. 새로고침 프로그램은 이제 로그만 기록합니다.await 전에 캡처한 위치 인덱스로 회전된 토큰을 지속시키는 문제를 수정했습니다. 동시 비활성화는 새로고침이 진행 중일 때 공급자의 자격증명 배열을 재정렬하거나 축소하여 새 토큰이 잘못된 행에 배치되거나(또는 자동으로 삭제되어) 계정이 다음 사이클에서 실패한 후 비활성화된 stale 새로고침 토큰으로 남겨질 수 있습니다. 이제 새로고침 지속, 선택 인덱스 재동기화 및 CAS 비활성화가 forceRefreshCredentialById, 후보 사전점검 및 in-stream 선택(#replaceCredentialById / #disableCredentialByIdIfMatches)에서 ID로 행을 주소지정합니다.isDefinitiveOAuthFailure가 bare HTTP 403(및 generic unauthorized / access-token-expired 문구)을 definitive 자격증명 실패로 처리하여 WAF, 이그레스 속도 제한, 권한 및 계정 확인 응답에서 정상 OAuth 계정을 영구적으로 비활성화하는 문제를 수정했습니다. 이제 bare 403, 속도 제한(429), 게이트웨이/5xx 및 추가 네트워크 오류(ECONNRESET, ETIMEDOUT, EAI_AGAIN, …)는 일시적으로 분류됩니다. 명시적인 dead-grant 오류(invalid_grant, invalid_token, unauthorized_client, revoked, refresh token … expired) 또는 bare 401만 자격증명을 해제합니다./extensions(Extension Control Center)는 이제 /settings와 마찬가지로 터미널의 alternate screen에서 전체화면 창으로 열립니다. alt 버퍼를 수명 동안 사용하며(아래의 기록록은 건드리지 않음) 동일한 현대식 chrome을 사용합니다. 제목이 있는 둥근 프레임, 공급자 전환을 위한 공유 TabBar, 분할자/footer 레이아웃이 있습니다. 대시보드는 이제 마우스 인식입니다. 휠이 목록을 스크롤하고(자신의 스크롤 뷰포트를 얻은 세부 검사기도 마찬가지), 탭과 행에 마우스를 가져가면 강조되며, 클릭하면 행을 선택하거나 이미 선택된 경우 토글합니다. 공급자 탭을 클릭하면 해당 공급자로 전환됩니다. 빈 활성화된 공급자는 선택 불가능하지만 비활성화된 공급자는 마스터 스위치로 다시 활성화할 수 있도록 선택 가능하게 유지됩니다.omp-<platform>-<arch> 바이너리에서 Cannot find module '/$bunfs/root/packages/coding-agent/src/extensibility/typebox.js' 오류로 인한 레거시 pi 확장의 omp install 실패 문제를 수정했습니다. 커밋 dc5c93462f는 scripts/ci-release-build-binaries.ts에서 worker 진입점을 제거했습니다. 인라인 주석은 레거시 shim 및 package-barrel 진입점(typebox.ts, legacy-pi-{ai,coding-agent}-shim.ts, packages/{agent,natives,tui,utils}/...)이 여전히 bun build --compile에 전달된다고 주장했지만, 다시 추가된 적이 없었습니다. 릴리즈 바이너리는 bunfs에 해당 파일이 없어서 배송되었으므로 legacy-pi-compat.ts는 typebox 가져오기를 존재하지 않는 bunfs 경로로 리디렉션했습니다. __resolveTypeBoxShimPath는 이제 __validateLegacyPiPackageRootOverrides를 미러링하여(#2168) shim 파일이 누락되었을 때 재정의를 삭제하므로 누락된 shim은 dead bunfs URL을 내보내는 대신 네이티브 node_modules 해석으로 폴스루됩니다(#3414).omp-darwin-arm64 릴리즈 바이너리(및 Bun 1.3.14로 빌드된 다른 omp)에서 모든 레거시 @(scope)/pi-* 및 @sinclair/typebox 가져오기가 로드되지 않는 문제를 수정했습니다. __validateLegacyPiPackageRootOverrides 및 rewriteLegacyPiImports 내보내기 경로는 모두 --compile extras가 /$bunfs/root/... 파일시스템 항목으로 도달 가능해야 했지만, Bun 1.3.14는 모든 API(fs.existsSync, Bun.file().exists(), Bun.resolveSync, bunfs 경로 또는 그 file:// URL에 대한 await import() 모두 실패, 오직 /$bunfs/root/<binary-name> 자체만 응답)를 통해 노출을 중단했습니다. legacy-pi-compat.ts는 이제 lazy-로드된 sibling legacy-pi-bundled-registry.ts에서 번들된 모든 pi-* 표면에 대한 JS-heap 참조를 유지하고 omp-legacy-pi-bundled: 가상 네임스페이스를 통해 제공하며, 그 Bun.plugin().onLoad는 합성 재내보내기를 반환합니다. 컴파일된 모드에서는 bunfs 경로가 모듈을 떠나지 않으며, dev / source-link / installed-package 모드는 역사적 file:// 재작성을 유지합니다. scripts/build-binary.ts의 일치하는 --compile extras, 공유 scripts/binary-entrypoints.ts 목록 및 dead BUNFS_PACKAGE_ROOT / bunfsPath / __computeBunfsPackageRoot / __joinBunfsPath 헬퍼는 제거되었습니다. (#3423)Full Changelog: v16.1.17...v16.1.18