system 턴으로 직렬화하는 문제 수정: 이제 user로 직렬화되므로 llama.cpp가 전체 재처리를 강제하지 않고 웜 프롬프트 접두사를 재사용할 수 있습니다. 에이전트 소유 개발자 알림(attribution: "agent" — 공백/예상치 못한 중지 재시도, 체크포인트 되돌리기 경고, 할 일 알림)은 system 우선순위를 유지합니다. (#3456)models.yaml 전환)로 이동했을 때, transformMessages의 크로스-API 경로가 모든 이전 thinking 블록을 텍스트로 강등했으므로 다음 요청은 추론 체인을 구조화된 reasoning_content 대신 일반 대화 content로 전송했고, 이로 인해 추론 컨텍스트로서의 기능을 잃고 재청구되었습니다. convertMessages는 이제 요청 시점에 해결된 호환성을 transformMessages로 스레딩하며, 해결된 대상이 reasoning_content를 계속 힌트로 수용할 때마다 이전 추론을 네이티브, 서명 제거된 thinking 블록으로 보존합니다(requiresReasoningContentForToolCalls — 추론 요청에 대해 OpenCode가 재활성화하는 whenThinking 정책 포함, #1071/#1484 — 또는 thinkingFormat: "zai"); openai-completions 인코더는 reasoningContentField를 통해 이러한 블록을 표시하며, Z.AI 형식 호스트(Z.AI, Zhipu, Moonshot Kimi, Xiaomi MiMo)를 위한 새로운 분기가 있어 필드를 수용하지만 필수로 하지 않습니다. 서명되지 않은 추론을 재생할 수 없는 대상(암호화된 추론 블롭, 서명된 생각 부분, 비추론 모델, 추론 비활성화 OpenCode)은 계속 텍스트로 강등되어 추론이 대화 컨텍스트로 유지됩니다. (#3437, #3439 by @roboomp; #3433, #3434)us-east-1로 라우팅되는 문제 수정: eu.anthropic.claude-…(또는 apac./au./jp.)와 같은 프로필이 하드코딩된 us-east-1 엔드포인트로 전송되면 HTTP 400 The provided model identifier is invalid를 반환했습니다. streamBedrock은 이제 프로필의 지역 접두사에서 런타임 리전을 도출하며, 해당 지역을 제공할 수 있을 때만 주변 AWS_REGION/AWS_DEFAULT_REGION을 준수하고 그렇지 않으면 지역의 기본 리전으로 폴백하며, 명시적 요청별 및 ARN 내장 리전은 계속 우선하고 지역-무관 global. 프로필은 변경되지 않습니다.name)이 전체 세션을 HTTP 400 루프에 빠뜨리는 문제 수정: 모델이 간헐적으로 { "name": "", "arguments": "{}" }를 생성할 때(관찰됨: GLM-5.2 + 긴 턴에서 생각), 에이전트는 실행 시간에 호출을 Tool not found로 거부했지만, 형식이 잘못된 블록과 그 오류 toolResult는 대화 기록에 남아 있었고 사용자가 /clear를 실행할 때까지 모든 후속 요청이 tool_use.name/tool_calls[i].function.name 검증에서 400 오류가 발생했습니다. 모든 공급자가 통과하는 정규 새니타이제이션 경계인 transformMessages는 이제 빈/공백 name이 있는 toolCall 블록을 삭제하고, 동일한 어시스턴트→도구 결과 윈도우 내에서만 해당 toolResult 메시지와 쌍을 이루며(결과 ID별 FIFO 큐는 비결과 경계에서 지워지므로 결과 없는 오래된 형식이 잘못된 호출이 나중에 유효한 중복 ID 출력을 사용할 수 없음), 재생 가능한 콘텐츠가 남아 있지 않으면 어시스턴트 턴을 삭제합니다. 방어적(공급자-무관, 모델에 관계없이 발동), 멱등성(깨끗한 기록에서 무작동), 자체 치유(수정이 적용된 후 한 왕복이 이미 중독된 세션을 새니타이제이션). (#3458)omp install <plugin>이 컴파일된 바이너리 모드에서 확장 검증 실패 문제 수정: Cannot find module '@(scope)/pi-ai/oauth' from '<plugin>/src/oauth.ts'(및 @oh-my-pi/pi-coding-agent/tools와 같은 기타 비와일드카드 pi-* 서브경로 임포트). __buildLegacyPiPackageRootOverrides로 시드된 번들 레지스트리 오버라이드 맵은 베어 패키지 루트만 커버했으므로 rewriteLegacyPiImports는 @(scope)/pi-ai/oauth를 @oh-my-pi/pi-ai/oauth로 다시 작성하고, Bun.resolveSync로 떨어졌으며(Bun 1.3.14+ 번프는 만족할 수 없음), 원본 지정자를 그대로 두었습니다. 대부분의 플러그인이 @(scope)/pi-ai를 peerDependency로만 선언하고 실제 설치를 구체화하지 않았기 때문에 Bun의 네이티브 리졸버가 실패했습니다. 새로운 scripts/generate-legacy-pi-bundled-registry.ts는 번들 pi-* 패키지 각각의 비와일드카드 exports 필드를 읽고 무거운 legacy-pi-bundled-registry.ts(정적 임포트 + 맵)와 가벼운 legacy-pi-bundled-keys.ts(오버라이드 맵을 시드하기 위해 legacy-pi-compat.ts로 정적 임포트됨, legacy-pi-coding-agent-shim → ../index → export/html/...을 통한 캐스케이드 없이) 모두를 생성합니다. scripts/build-binary.ts는 이제 bun build --compile 전에 생성기를 실행합니다. (#3442)skill:// 도구 해석이 로드된 세션 스킬을 잃는 문제 수정: 내부 URL 해석이 이제 프로세스 글로벌 스킬 목록으로 폴백하기 전에 호출자의 session.skills 스냅샷을 선호하므로 read skill://<name>이 도구 실행 경계 전반에 걸쳐 작동합니다. (#3436)gpt-5.5 및 유사 모델)에서 @image 언급이 Codex error event: [OneOfParam] [input[N].content[…]] [invalid_enum_value] Invalid value: 'input_image'. Supported values are: 'input_text'. 오류로 실패하는 문제 수정. fileMention에 대한 convertToLlm은 항상 developer 역할 메시지를 생성했으므로 자동 첨부 이미지는 Codex 백엔드(및 OpenAI Responses 일반적으로) input_text만 전송하도록 허용하는 Responses 콘텐츠 배열에 도달했습니다. #3421의 이전 수정은 이미지 보유 턴에서 Codex Responses Lite 헤더가 나가는 것을 중지했을 뿐, 전체 전송은 계속 동일한 페이로드를 거부했습니다. convertToLlm은 이제 혼합 콘텐츠 fileMention을 두 메시지로 분할합니다 — 텍스트 전용 파일은 developer에 유지되며(자동 읽기 컨텍스트가 지시 우선순위를 유지), 이미지 보유 파일은 user에 탑승합니다(input_image를 수용하는 유일한 Responses 콘텐츠 슬롯). (#3443)local:// 바이너리 첨부가 Bun.file().text()로 디코딩되는 문제 수정. read local://...은 이제 파일 백업 리소스를 정상 파일시스템 리더를 통해 라우팅하고, 프로토콜 핸들러는 바이트를 구체화하지 않고 알려진 바이너리/컨테이너 리소스를 거부하며, 스트리밍 리더의 NUL 바이트 거부는 이제 첫 줄 바꿈이 바이트 예산을 넘어가는 바이너리 블롭(비디오, 아카이브)도 포함합니다 — 이전에는 라인별 스캔을 우회하고 디코딩된 모지바케로 표시되었습니다. (#3448),, 이모지 등) 지나에 도달했을 때 테두리가 있는 Editor가 터미널 너비보다 1–2 셀 지나서 렌더링되어 하단 우측 모서리(╯)가 자신의 행으로 래핑되는 문제 수정. 우측 크롬(패딩 + ─ + 모서리)은 이제 1셀 불린값 대신 정확한 커서 오버플로우 셀 수로 축소되므로 모든 paddingX에 대해 상자가 width 내에 유지됩니다 (#3431).Full Changelog: v16.1.18...v16.1.19