detectHarmonyLeakInAssistantMessage는 이제 스트리밍된 done/error 결과와 후행 폴백에서 실행되므로, 누수된 최종 응답이 그대로 커밋되는 대신 기존 완화 메커니즘에 의해 중단되고 재시도됩니다. 도구 인자(tool_arg) 스캔은 후행 가비지 T 공신호에 의해 제한되며, 호출자가 detectHarmonyLeakInAssistantMessage의 새 선택적 toolArgParseEnd 리졸버를 통해 파싱 경계를 제공할 때만 작동합니다. 에이전트 루프는 아무것도 전달하지 않습니다 — 스트리밍된 도구 DSL을 제한할 수 없으므로 — 따라서 해당 표면은 비활성 상태로 유지되며, 내용이 합법적으로 채널 단어나 비라틴 문자(예: 하모니 픽스처 편집)와 함께 to=functions.*를 포함하는 합법적인 codex 도구 호출은 절대 하드 중단되지 않습니다.anthropic-client 내보내기를 통해 AnthropicMessagesClient 및 관련 Anthropic 와이어 타입/에러를 추가했으므로 호출자가 @anthropic-ai/sdk에 의존하지 않고도 독립형 Anthropic Messages 클라이언트를 구축할 수 있습니다.parseClaudeRateLimitHeaders 및 AuthStorage.ingestUsageHeaders를 추가했으므로 Anthropic 레이트 제한 응답 헤더가 정확한 데이터를 유지하면서 스로틀링으로 자격증명별 사용량 캐시를 워밍할 수 있습니다.@anthropic-ai/sdk 대신 패키지 로컬 AnthropicMessagesClient 구현을 기본 전송으로 사용합니다.AnthropicOptions.client 표면을 변경하여 messages.create를 사용하는 모든 AnthropicMessagesClientLike 구현을 수락하도록 하여 사용자 정의 호환 클라이언트를 활성화합니다.user_id를 임의의 값 대신 설치 ID에서 파생된 결정론적 device_id를 사용하도록 변경했습니다.claudeCodeVersion을 2.1.148로 범프하여 현재 Claude Code 릴리즈와 일치시켰습니다.X-Stainless-Package-Version을 0.94.0으로 업데이트했습니다 (번들된 @anthropic-ai/sdk 버전과 일치); X-Stainless-Runtime-Version을 v24.3.0으로 고정했습니다 (CC 2.1.148과 번들된 Bun 버전); X-Stainless-Os 헤더 키를 X-Stainless-OS로 수정했습니다.createClaudeBillingHeader는 이제 결정론적 청구 헤더(cc_version=<claudeCodeVersion>.<suffix>; cc_entrypoint=cli; cch=00000;)를 내보냅니다. 여기서 <suffix>는 임의의 바이트 대신 SHA-256(salt + msg[4] + msg[7] + msg[20] + version)의 첫 3개 16진수 문자입니다. 핑거프린트 시드는 첫 사용자 메시지(합성/개발자 삽입 스킵)에서 가져오며 Claude Code의 computeFingerprintFromMessages를 미러링합니다.cch 증명 구현됨: cch=00000은 OAuth 요청에 대해 wrapFetchForCch가 와이어에서 XXHash64(body, 0x4D659218E32A3268) & 0xFFFFF로 다시 쓰는 플레이스홀더이며, 5개의 소문자 16진수 문자로 형식화되고 Bun.hash.xxHash64를 통해 현재 위치에서 계산됩니다. 다시 쓰기는 system[0] 청구 헤더 접두사에 고정되므로 사용자 콘텐츠는 절대 변경되지 않으며, 청구 헤더 접두사가 있을 때(OAuth 차례)만 설치됩니다./usage 및 상태 라인 사용량 세그먼트에 대해 OAuth 모델 검색 및 Claude 사용량 API 요청을 확장한 anthropic-beta 헤더 집합에 context-1m-2025-08-07, redact-thinking-2026-02-12, mid-conversation-system-2026-04-07, advanced-tool-use-2025-11-20, effort-2025-11-24, extended-cache-ttl-2025-04-11을 추가합니다. 사용량 API user-agent는 claude-cli/2.1.158 (external, cli)로 범프됩니다.Anthropic-Beta 헤더에 effort-2025-11-24를 추가합니다 (Claude Code와 일치).buildAnthropicSystemBlocks (CC 명령 모드)는 이제 Claude Code와 동일한 3블록 레이아웃을 내보냅니다: 청구 헤더 (캐시 안 함), 시스템 명령 (캐시됨), 모든 사용자 콘텐츠를 \n\n으로 하나의 블록으로 병합 (캐시됨). 이전에는 항목당 하나의 블록을 내보냈으며 캐시는 마지막 블록에만 있었으므로 블록 수로 호출자를 핑거프린팅했습니다.applyPromptCaching은 이제 Claude Code의 중단점 레이아웃과 일치합니다: 2개 시스템 (명령 + 병합된 콘텐츠) + 2개 메시지, 도구 중단점 없음. 도구 중단점은 중복되었습니다 — 도구는 토큰 시퀀스에서 시스템 다음을 따르므로 시스템이 변경되면 도구 캐시 접두사도 변경됩니다. 명령 블록 (system[1])은 모든 요청에서 안정적이며 이제 자체 보장된 히트 중단점을 받습니다.applyPromptCaching은 이제 마지막 두 사용자 메시지가 아닌 역할에 관계없이 마지막 두 메시지를 캐시합니다. 마지막에서 두 번째 어시스턴트 메시지 (도구 호출 + 이전 차례의 응답)는 마지막에서 두 번째 사용자 메시지보다 크고 최근에 생성되었으므로 더 높은 가치의 캐시 대상입니다.user:sessions:claude_code, user:mcp_servers, user:file_upload를 추가했습니다. AUTHORIZE_URL은 claude.ai/oauth/authorize에 유지되고 TOKEN_URL은 api.anthropic.com/v1/oauth/token에 유지됩니다 — platform.claude.com 동등물은 CC의 콘솔 자격증명 플로우이며 OMP가 직접 OAuth 토큰 추론에 필요한 user:inference를 부여하지 않습니다.anthropic-beta: oauth-2025-04-20 및 User-Agent: anthropic-sdk-typescript/0.94.0 userOAuthProvider를 보냅니다 (CC는 초기 코드 교환이 아닌 새로고침에서 이를 보냅니다).eager_input_streaming 및 엄격한 플래그를 복원했습니다.beta 클라이언트로 인해 실패하는 OAuth 스트림 호출을 수정했으므로 client.beta.messages.create를 요구하는 대신 client.messages.create로 폴백합니다.Cannot send empty user message to Cursor API 실패하도록 수정했으므로 최종 컨텍스트 메시지가 활성 사용자 차례라고 가정하는 대신 최신 사용자/개발자 차례를 선택합니다.CLAUDE_CODE_USE_FOUNDRY가 설정되지 않았을 때 Anthropic 웹 검색이 ANTHROPIC_CUSTOM_HEADERS를 드롭하도록 수정했으므로 기업 API 게이트웨이에서 401이 발생합니다. resolveAnthropicCustomHeadersForBaseUrl은 이제 기본 URL이 비Anthropic인 경우(또는 Foundry가 활성화된 경우) 분석된 헤더를 항상 전달하며, buildAnthropicSearchHeaders는 이를 buildAnthropicHeaders를 통해 스레드하므로 검색 및 스트리밍 경로가 동일하게 작동합니다 (#1693).qwen3.7-max)이 OpenCode 베어러 토큰과 함께 Anthropic X-Api-Key 인증을 보내도록 수정하여 가짜 Alibaba 401 Invalid API-key provided 에러를 방지합니다. (#1661)accountId 및 email은 이제 사용 가능할 때 복구됩니다.redact-thinking-2026-02-12를 보내지 않으며, Opus 4.7+ 적응형 사고는 display: "summarized"에 옵트인하고, 최상위 사용자 대면 사고 계층은 이제 다음 낮은 "xhigh" 계층이 아닌 Anthropic의 output_config.effort = "max"를 보냅니다.@anthropic-ai/sdk 런타임 의존성을 제거했습니다. Anthropic 제공자는 이제 패키지 로컬 AnthropicMessagesClient 및 providers/anthropic-wire.ts의 수동 유지 관리 와이어 타입을 사용합니다. SDK는 URL 조립, 인증 헤더 삽입, 제한된 재시도, 사전 응답 타임아웃, HTTP 에러-상태 매핑에만 사용되었으며, 모두 동일한 관찰 가능한 동작으로 재현됩니다.pi --resume / /resume). Tab을 눌러 현재 폴더의 세션과 모든 프로젝트의 모든 세션 사이를 전환할 수 있습니다. 모든 프로젝트 목록은 지연 로드되며 각 세션의 디렉토리를 표시합니다. 현재 폴더에 세션이 없는 경우 선택기는 이제 "No sessions found" 인쇄 대신 모든 프로젝트 범위로 바로 열립니다.POST /api/v1/search)로 마이그레이션하여 sunset V0 엔드포인트를 대체하면서 kagi 제공자 id, KAGI_API_KEY 자격증명, /login kagi 플로우를 변경하지 않습니다 (#1272 @thismat님이 제공)/usage 및 상태 라인 사용량 세그먼트에 대해 Anthropic anthropic-ratelimit-unified-* 응답 헤더 워밍을 추가하여 활성 사용 중 직접 OAuth /usage 프로브를 줄이기 위해 스로틀링됩니다.user_id.device_id를 변경하여 동일한 설치에서 Anthropic 계정 변경에 걸쳐 안정적으로 유지되도록 지속적 설치 ID에서 파생되도록 합니다.parallel() / pipeline() 헬퍼를 변경하여 concurrency 인자를 드롭하고 task 도구 배치만큼 넓게 실행합니다. 워커 풀 천정은 이제 호스트를 통해 실시간으로 해결되는 __concurrency__ 브리지를 통해 새로운 task.maxConcurrency 설정(기본값 32; 0 = 모든 항목을 한 번에 실행)을 추적하는 대신 기본값이 4이고 16으로 제한되는 이전의 호출별 concurrency 옵션을 대체합니다. 이를 통해 eval 팬아웃이 세션이 구성된 병렬 처리를 과소 사용하지 않습니다.agent:// 출력 ids를 숫자 접두사 스킴(0-Anna, 1-Bob, 중첩된 0-Anna.1-Bob)에서 이름 우선 스킴으로 변경합니다: 요청된 이름이 그대로 사용되고 -2/-3/… 접미사는 동일한 이름이 세션 내에서 반복될 때만 추가됩니다 (Anna, Anna-2, Anna-3). 중첩된 ids는 부모에 따라 그룹화되며 (Anna.Bob) 실시간 작업 위젯은 이를 Anna>Bob으로 렌더링합니다. 주 에이전트의 IRC id는 이제 Main입니다 (이전에는 0-Main). AgentOutputManager는 여전히 재개 시 기존 .md 출력을 스캔하므로 이전 출력을 덮어쓸 이름을 재사용하지 않습니다.pi --resume 및 인 세션 /resume 선택기는 이제 재개된 세션의 cwd로 chdir하고 모든 cwd 파생 입력을 재범위합니다 — 프로젝트 디렉토리, 프로젝트 설정 (.claude/settings.yml, .omp/settings.json, 경로 범위 enabledModels/disabledProviders), 플러그인 루트, 능력, 슬래시 명령, ssh 도구 — 따라서 도구, 검색, 구성, 명령이 모두 재개된 프로젝트를 따릅니다. SessionManager는 로드 시 재개된 세션 자체의 cwd/세션 디렉토리를 채택합니다 (스위치 실패 시 롤백됨).ANTHROPIC_SEARCH_API_KEY 및 ANTHROPIC_SEARCH_BASE_URL을 docs/environment-variables.md에서 더 철저히 문서화하고, docs/tools/web_search.md의 Anthropic 제공자 섹션에서 표면화하고, ANTHROPIC_SEARCH_BASE_URL을 omp --help의 환경 변수 요약에 추가하여 검색 전용 오버라이드가 ANTHROPIC_SEARCH_API_KEY와 함께 발견 가능하도록 합니다 (#1694).POST /api/v1/search)로 마이그레이션하여 sunset V0 엔드포인트를 대체하면서 kagi 제공자 id, KAGI_API_KEY 자격증명, /login kagi 플로우를 변경하지 않습니다 (#1272 @thismat님이 제공)read, search, find, ast_grep, ast_edit를 수정하여 모델이 여러 기존 경로를 하나의 쉼표, 세미콜론 또는 공백 구분 문자열로 병합할 때 구분 기호를 포함하는 실제 경로를 유지하면서 복구합니다.searchExa()는 이제 표준 AuthStorage 캐스케이드(EXA_API_KEY env 또는 저장된 자격증명)를 통해 해결됩니다 (#1695).ANTHROPIC_SEARCH_BASE_URL을 무시하도록 수정했으므로 자격증명이 ANTHROPIC_SEARCH_API_KEY가 아닌 저장된 Anthropic 인증 또는 일반 Anthropic env 폴백에서 나왔을 때 (#1694).web_search가 기업 Anthropic API 게이트웨이에서 401을 반환하도록 수정했습니다. ANTHROPIC_CUSTOM_HEADERS는 이제 Foundry 모드가 아닌 ANTHROPIC_BASE_URL이 비Anthropic 호스트를 가리킬 때마다 웹 검색 요청으로 전달됩니다 (#1693).wslpath -w를 통해 기존 경로를 보내고 사용 가능할 때 wslview를 직접 실행하여 WSL에서 내보낸 로컬 파일을 열도록 수정하여 xdg-open의 깨진 파일 핸들러 경로 변환을 방지합니다 (#950 @rxreyn3님이 제공)./move (및 프로젝트 간 재개)가 실시간 프로젝트 설정을 목적지 디렉토리에 재범위하지 않도록 수정했습니다. 세션의 작업 디렉토리를 변경하면 이제 프로젝트 설정 레이어가 현재 위치에서 다시 로드되므로 (Settings.reloadForCwd를 통해) 프로젝트 범위 구성 및 경로 범위 enabledModels/disabledProviders가 이동을 따르는 대신 실행 디렉토리에 고정됩니다.read <db.sqlite>이 TUI를 동결하도록 수정했습니다. 테이블 나열은 테이블당 무제한 SELECT COUNT(*)를 실행했으며 bun:sqlite이 렌더링 및 입력을 구동하는 동일한 JS 스레드에서 동기적으로 실행되므로 다중 GB 데이터베이스의 전체 테이블 스캔이 몇 초 동안 UI를 차단했습니다. 나열은 이제 스캔 캐프 위의 테이블에 대해 플래너의 sqlite_stat1 추정을 읽고 (표시됨 ~N rows) 테이블이 증명 가능하게 작을 때만 정확히 계산하며 최대 cap + 1 행을 읽습니다 (상한 테이블은 N+ rows 표시). 8.4 GB 통계 데이터베이스에서 나열이 다중 초 전체 스캔에서 ~2 ms로 감소했습니다.tools/renderers보다 먼저 가져올 때 모듈 로드 충돌(ReferenceError: Cannot access 'evalToolRenderer' before initialization)을 수정했습니다. eval JS 백엔드는 정적으로 에이전트/작업/sdk/확장 체인을 당기며, 이는 eval.ts가 여전히 초기화 중인 동안 루트 배럴 → modes/components → tool-execution → renderers를 재입력하므로 renderers.ts는 evalToolRenderer를 TDZ에서 읽습니다. eval TUI 렌더러는 이제 의존성이 가벼운 tools/eval-render.ts로 분할되며 renderers.ts가 직접 가져옵니다 (순수 렌더링을 eval 런타임에서 분리); eval.ts는 호환성을 위해 evalToolRenderer/EVAL_DEFAULT_PREVIEW_LINES를 재내보냅니다./logout이 env/구성 폴백에 의해서만 인증된 제공자를 제공하도록 수정했으므로 OpenCode Go/Zen이 저장된 자격증명을 제거한 후 로그인된 상태로 유지되는 것으로 나타났습니다 (#1658).omp --resume <id>이 포착되지 않은 예외로 충돌하도록 수정했습니다. createSessionManager는 이제 해당 취소에 대해 undefined를 반환하는 반면 비대화형 모드는 실패합니다.