google-gemini-cli에 requestModelId 및 thinking.suppress 옵션을 추가하여 축소된 노력 계층 변형이 노력별 업스트림 와이어 ID를 직렬화하고, thinking.suppressWhenOff가 있는 모델에 대한 사고-오프 요청이 명시적 thinkingConfig(includeThoughts: false과 thinkingLevel: "MINIMAL" 또는 thinkingBudget: 0)를 전송하도록 함 — Cloud Code Assist는 구성이 생략되면 ID당 베이킹된 서버 기본값을 다시 적용하여 토큰을 자동으로 사고하고 청구함thinking.requiresEffort로 베이킹된 모델은 모든 API 매핑에서 생략되거나 비활성화된 추론을 지원되는 최저 노력으로 제한하고, disableReasoning은 더 이상 이들에 대해 OpenRouter reasoning: { enabled: false }를 내보내지 않음 — OpenRouter Gemini 3.x에서 omp bench 및 유틸리티 요청이 "Reasoning is mandatory for this endpoint and cannot be disabled"로 400이 되는 문제 해결google-gemini-cli 요청 매핑을 변경하여 resolveWireModelId를 통해 요청별 와이어 ID를 라우팅함: 세션 노력은 백업 변형 ID를 선택하고(축소된 gemini-3.5-flash at high → gemini-3.5-flash-low; claude 쌍은 벗겨진 ID로 라우팅, 노력 → -thinking), AssistantMessage.model과 사용 귀속은 논리적 ID에 유지됨. 0으로 제한된 사고 예산은 이제 사고 비활성화 경로(오프 라우팅 플러스 억제)로 통과하며 사고만 비활성화하는 대신openai-completions 및 anthropic-messages를 변경하여 resolveWireModelId를 통해 요청별 와이어 ID를 직렬화하므로, 집계자 및 사용자 정의 제공자의 축소된 X/X-thinking 쌍이 추론이 활성화되면 사고 SKU로 전환됨(이전에는 google-gemini-cli만 노력 계층 변형을 라우팅함)google-gemini-cli가 요청 모델 ID를 직렬화할 때 Model.requestModelId를 무시하는 문제 수정variant-collapse) 추가: 하나의 논리적 모델을 여러 노력/사고 접미사가 있는 업스트림 ID(Antigravity CCA gemini-3.5-flash-extra-low/-low/gemini-3-flash-agent, gemini-3[.1]-pro-low|high, claude-*[-thinking] 쌍, gpt-oss-120b-medium)로 노출하는 제공자는 thinking.effortRouting(Cloud Code Assist ID의 경우 thinking.suppressWhenOff 포함, thinkingConfig가 생략되면 베이킹된 서버 기본값이 다시 적용됨)에 노력별 업스트림 라우팅을 수행하는 하나의 논리적 항목으로 축소됨. 요청 시간 코드는 resolveWireModelId(model, effort)를 통해 아웃바운드 ID를 해결; 선택, 캐싱, 및 사용 귀속은 논리적 ID를 키로 사용X/X-thinking 쌍 규칙(deriveThinkingPairFamilies) 추가: 모든 제공자의 라이브 베어/사고 쌍은 베어 ID로 축소되고, 사고 활성화 요청은 -thinking 백업 ID로 라우팅됨(후행 또는 내부 토큰이므로 kimi-k2-thinking-turbo는 kimi-k2-turbo와 쌍을 이룸). 동일한 API 및 호환 가능한 가격으로 제한됨 — 모든 0 비용 행은 미지수로 계산되며, 실제 가격이 다른 쌍은 별도 SKU로 유지됨collapseBuiltModelVariants 추가 및 모든 구체화 지점에서 축소를 연결 — Antigravity 발견, 카탈로그 생성기, 및 모델 관리자 병합 — 따라서 오래된 소스(축소된 동적 결과 옆 이전 정적, 혼합 캐시 행)가 원본 계층 ID를 다시 카탈로그로 합치는 대신 논리적 항목으로 수렴thinking.requiresEffort 추가, 추론 전용 업스트림을 위해 베이킹됨 — Gemini 3.x(레벨 전용, 오프 없음), Gemini 2.5 Pro(thinkingBudget은 128에서 하한, 0 거부), OpenAI o-시리즈, MiniMax M2, 및 사고-변형 SKU(*-thinking/*-reasoner/*-reasoning, non-thinking ID가 절대 일치하지 않도록 부정 인식 토큰 문법 포함). ID 파생은 새 항목에 대해 베이킹하고 fillThinkingWireDefaults는 명시적/캐시된 메타데이터를 역채움; minimumSupportedEffort는 정규 하한을 노출. 쌍 축소된 쌍은 멤버 플래그를 드롭하고(오프는 베어 SKU로 라우팅), ID 재지정은 논리적 ID가 자체 필수인 쌍을 재플래그함OpenAI: …, Google: …), (latest) 별칭 마커, (Antigravity) 제공자 귀속, 가격 계층(($$$$)), 및 프로모/라이프사이클 태그((20% off), (retires …)). cleanModelName은 buildModel에서 적용되고(라이브 발견 및 오래된 캐시를 포함), 카탈로그 생성기 패스로 적용; Antigravity 발견은 더 이상 표시 이름에 (Antigravity)를 추가하지 않음. 명확한 와이어 ID에 매핑되는 변형 태그((Thinking), (free), (Fast), 날짜, 지역)는 유지됨google-antigravity 기본 모델을 gemini-3-pro-high에서 gemini-3.1-pro로 변경gemini-2.5-flash-thinking 처리를 발견-거부 목록에서 gemini-2.5-flash로 축소(사고 활성화 요청은 -thinking 백업 ID로 라우팅)로 변경-low/-high/-thinking 멤버 ID) 이전의 행을 무효화함kimi-k2.6 ID를 포함하여 긴 추론 시작이 일반 첫 번째 이벤트 타임아웃에 도달하지 않도록 함(#2366).bench CLI 명령 추가omp bench 옵션 --runs, --max-tokens, --prompt, 및 --json 추가snapcompact.shape 설정 추가 — auto(각 제공자의 평가 우승자) 또는 연구-평가 변형: 정사각형 그리드(8x8r/8x8u/6x6u/5x8 × 문장-색상/검은 잉크) 및 모델별 우승자(6x12-dim, 8x13-bw, 8on16-bw, doc-8on16-bw, doc-8on16-sent, doc-8on16-sent-dim); 압축 아카이브 및 인라인 시스템 프롬프트/도구 결과 이미징에 적용됨snapcompact.shape 옵션 도움말 텍스트를 업데이트하여 auto 모드 및 8on16-bw 설명이 OpenAI의 현재 기본값 및 GPT 우승 변형을 반영하도록 함gemini-3.5-flash-low, gemini-pro-agent, 재활용된 gemini-3-flash) 및 자동 축소된 쌍에 대한 X-thinking → X 문법을 참조하며, 정확한 일치가 항상 우선이고 원본 ID가 라이브인 동안; 명시적 :effort 접미사는 변경 없이 이전됨. models.yml modelOverrides 및 원본 멤버 ID로 키 지정된 속도 제한 선택기 억제는 축소된 모델로 다시 키 지정됨collapseBuiltModelVariants)에서 X/X-thinking 쌍을 축소하여, 구성 정의 쌍을 사고 토글이 -thinking 백업 ID로 라우팅되는 하나의 항목으로 폴드함.cmd shim에서 Windows CodeGraph MCP 실행이 shim의 Node 진입점을 해결하고 직접 생성하도록 수정, stdio를 일시적 cmd.exe 래퍼 대신 CodeGraph에 연결 유지(#2367).providerFrameBudget)을 전달하여 아카이브가 캡을 초과하지 않도록 함(미지수 제공자는 안전 하한 5 취득), 오버플로우는 게이트웨이가 드롭할 프레임 렌더링 대신 요약의 텍스트 테일로 유지; 인라인 시스템 프롬프트/도구 결과 이미징은 동일한 제공자별 예산(providerImageBudget)을 공유하므로 기존 이미지가 이를 소진하면(예: OpenRouter의 8개 아카이브 프레임) 도구 결과는 텍스트로 축약됨Z 문자열 대신 오프셋 인식 로컬 타임스탬프를 전송하는 문제 수정(#2363).ToolRenderer.provisionalPendingPreview): 결과 렌더가 다시 고정되는 테일-윈도우 미리 보기만(edit/apply_patch 스트리밍된-차이 테일, bash/ssh 명령 캡, interleaved 출력이 있는 eval 셀) 임시로 유지; 다른 모든 대기 미리 보기는 다시 실행 중간에 안정된 헤드를 커밋함omp bench가 "tokens 0, TPS 0.0" 성공을 보고하는 문제 수정: pi-ai는 모든 OpenRouter 요청을 응답 캐싱으로 옵트인하므로, bench의 바이트-동일 요청은 에지 속도로 0으로 된 사용량이 있는 캐시된 생성을 재생함. Bench는 이제 X-OpenRouter-Cache: false를 전송하여 모든 실행이 신규 생성을 측정함openai-codex 모델에 대해 HTTP 400 {"detail":"Instructions are required"}로 실패하는 omp bench 문제 수정: bench 요청은 이제 최소 기본 시스템 프롬프트(평가의 완료 브리지와 동일한 가드)를 수행함Ctrl+T(사고 블록 토글) — 또는 테마/프리셋 선택기와 같은 다른 재구축 경로 히팅 — 을 누르면 첫 어시스턴트 토큰이 도착할 때까지 방금 제출한 사용자 메시지가 지워지는 문제 수정: 사용자 메시지는 session.prompt(...)가 이를 세션 항목에 배치하기 전에 낙관적으로 렌더되므로, rebuildChatFromMessages()는 이의 기록이 없음; 이제 재구축 후 진행 중인 낙관적 제출을 재생하며, optimisticUserMessageSignature에서 제한됨(실제 message_start가 도착하면 EventController가 지움) 따라서 스트리밍 후 복제될 수 없음(#2372).6x12 및 8x13 BDF 폰트(crates/pi-natives/src/fonts/에 벤더링된 공개 도메인)를 renderSnapcompactPng에 추가, snapcompact 평가-우승 모양의 두 가지 새로운 옵션과 함께: stretch: false는 요청된 셀 박스에서 자연 크기로 글리프를 렌더하며 4비트 인덱스 인코더 유지(예: 8x16 피치의 8x13 글리프, "8on16" 모양), 및 columns: 2는 미리 줄 바꿈된 줄 바꿈 구분 선을 3셀 거터가 있는 2개의 신문 열로 흐름(정렬함)("doc" 모양); doc 모드에서 문장 색상은 종결자 뒤에 줄 바꿈을 가로지름renderSnapcompactPng에 줄 바꿈 마커 추가: U+2588(FULL BLOCK)은 격자 및 doc 레이아웃 모두에서 전체 셀 박스를 피치 검은 잉크로 채우고, 문장 색상 및 어두운 상태를 무시하고, ./!/? 종결자 뒤 문장 경계로 계산됨renderSnapcompactPng는 이제 프레임 높이를 텍스트로 클립: PNG는 size 픽셀 너비로 유지되지만 usedRows * lineRepeat * cellHeight 높이만 유지됨(어두운 토글은 0 너비; doc 레이아웃은 \n 구분 선을 계산), 따라서 부분 채워진 프레임은 더 이상 빈 행의 전체 정사각형으로 패딩하지 않음renderSnapcompactPng 인덱스 프레임은 이제 팔레트를 실제로 인쇄된 색상으로 좁히고 일치하는 비트 깊이를 선택(일반 bw 1비트, 어두운/밴드 2비트, 문장 색상 최대 4비트), 및 두 인코딩 경로는 Balanced에서 High deflate로 이동: 8on16-bw 프레임은 ~35% 축소, 6x12-dim ~10%, 문장-색상 doc 프레임 ~9% — 순수 PNG, 디코더 측 변경 없음(무손실 WebP는 이와 비교하여 ~8%만 측정되었고 제공자 호환성 위험으로 거부됨)SHAPE_VARIANTS 추가(8x8r/8x8u/6x6u/5x8 × sent/bw), ShapeVariantName, SHAPE_VARIANT_NAMES, 및 isShapeVariantName 가드 포함resolveShape(api, variant?)는 이제 명시적 변형 이름(또는 "auto")을 허용; 강제 변형은 기하학을 유지하지만 대상 제공자의 이미지 청구(토큰 추정 및 OpenAI original 상세 힌트)에 대해 다시 가격 책정됨SHAPE_VARIANTS에 추가: 6x12-dim(Claude 우화), 8x13-bw(Opus), 8on16-bw(GPT 그리드 2위), doc-8on16-bw(GPT), doc-8on16-sent(GLM), 및 doc-8on16-sent-dim(Gemini/Kimi), 새로운 Shape 필드 stretch(Lanczos 스트레치 비활성화: 더 큰 셀 피치의 자연 글리프), columns(2열 단어 래핑 신문 열), stopwordDim, 및 X.org 6x12/8x13 폰트로 지원됨dimStopwords() 추가, 영 너비 마커를 통해 어두운 잉크로 높은 빈도 함수 단어를 인쇄(이미 어두운 범위 건너뜀), 및 wrap(), doc 레이아웃 페이지 조판에 사용되는 탐욕 단어 래핑; geometry/render/renderMany/frames/compact는 doc 모양을 이해함(한 번 래핑, 2 * rows 줄 페이지로 페이지매김), 및 압축 프레임은 혼합 모양 감지를 위해 columns/stopwordDim을 지속함resolveShape는 이제 ShapeTarget({ api, id } — pi-ai Model은 그대로 작동)을 취하고 API 계열이 아닌 모델 ID에서 이상적 모양을 감지: Vertex를 통해 라우팅된 Claude 또는 OpenAI 호환 게이트웨이는 Claude 모양을 유지하며, 청구는 여전히 요청을 실제로 수행하는 API 계열에 의해 가격 책정됨. idealShapeVariant(modelId)는 모델 라인 테이블을 노출; 측정되지 않은 모델은 API 계열의 우승자로 폴백분량 관계로 이후 내용은 번역에서 제외했습니다. 전체 내용은 위 원문 링크에서 확인하세요.