AgentOptions 및 AgentLoopConfig에서 maxToolCallsPerTurn 옵션을 제거했으므로 어시스턴트 턴이 완료된 도구 호출 횟수로 제한되지 않습니다.afterToolCall 처리를 수정하여 실행이 중단된 후에도 완료된 도구 실행에 대해 실행되므로 도구 후처리가 계속 적용됩니다.agentLoopDetailed().detailed()를 수정하여 stream.result()가 해석되기 전에 실행 원격 측정 및 커버리지가 캡처됩니다.agentLoopContinue가 더 이상 호출자의 메시지 배열을 변경하지 않고, 방출된 어시스턴트 이벤트가 변경 가능한 프로바이더 콘텐츠의 스냅샷을 생성하며, 말단 프로바이더 이벤트가 늦은 중단 신호를 무시하고, 변환된 도구 인수가 훅/이벤트에서 일관되게 반영되고, 성공적인 실행 종료 원격 측정이 실패와 동일한 종료 경로에서 발생합니다.toolcall_end에 도달하지 않은 중간 스트림 도구 호출 블록이 중단된 어시스턴트 메시지에 유지되고 중단 이유로 표시된 자리표시자 결과와 쌍을 이루며, 대신 삭제되지 않습니다. 익명 중단(단순 abort())은 여전히 안전하게 재생할 수 없는 부분 인수를 가진 불완전한 도구 호출을 삭제합니다.length 이유로 중지된 실행을 수정하여 추가 도구 호출을 처리하도록 실행이 계속됩니다.@oh-my-pi/pi-ai/utils/oauth → @oh-my-pi/pi-ai/oauth로 이름을 변경했습니다(@oh-my-pi/pi-ai/utils/oauth/* → @oh-my-pi/pi-ai/oauth/*, 예: oauth/types, oauth/callback-server, oauth/openai-codex). OAuth 구현을 utils/oauth/에서 registry/oauth/로 재배치한 후 이름이 변경되었습니다. 높은 수준의 OAuth API(getOAuthProviders, refreshOAuthToken, getOAuthApiKey, registerOAuthProvider, unregisterOAuthProviders, getOAuthProvider)와 OAuth* 유형은 패키지 루트에서 내보내지며 변경되지 않습니다.cch 증명 패치를 최적화하여 수동으로 롤링된 바이트 루프 대신 기본 Buffer.indexOf(memmem)를 사용하여 청구 헤더 자리표시자를 찾습니다. 마커가 본문의 ~99% 지점에 위치합니다(system 전에 messages가 직렬화됨). 이전 스캔은 거의 전체 페이로드를 탐색했습니다. 출력 바이트는 변경되지 않았지만 패치는 ~7.5배 빠릅니다(1MB 본문에서 563µs → 75µs).provider-registry/에서 이름이 변경되고 providers/ 하위 디렉토리가 평탄화된 registry/)로 리팩토링했습니다. KnownProvider/OAuthProvider 유형 합집합, PROVIDER_DESCRIPTORS, DEFAULT_MODEL_PER_PROVIDER, serviceProviderMap 환경 키 폴백, /login 프로바이더 목록(builtInOAuthProviders) 및 refreshOAuthToken/AuthStorage.login 디스패치가 모두 이로부터 파생됩니다. 프로바이더 정의는 registry/ 바로 아래에 있습니다. 얇은 프로바이더별 로그인 흐름은 정의 파일에 인라인되며, 무거운 프로바이더 로컬 OAuth 흐름과 공유 OAuth 흐름 인프라(callback-server, pkce, google-oauth-shared, types, 런타임 index)는 이제 registry/oauth/ 아래에서 함께 있습니다(이전에는 provider-registry/providers/oauth/와 utils/oauth/에 분산되어 있었음). 비OAuth API 키 붙여넣기/검증 도우미(api-key-login, api-key-validation)는 registry/의 정의 옆에 있습니다. 기존 와이어 API를 재사용하는 프로바이더를 추가하는 것은 이제 일반적인 경우에 새로운 프로바이더 정의 하나와 공통 레지스트리 항목 하나입니다. PROVIDER_REGISTRY, getProviderDefinition, ProviderDefinition 및 PASTE_CODE_LOGIN_PROVIDERS를 노출합니다.stream_options.include_obfuscation=false를 전송하여 OpenAI Codex Responses 스트림 난독화를 비활성화하여 원시 WebSocket/SSE 디버그 노이즈 및 대역폭을 줄였습니다.content_block_start 인덱스 및 열리지 않은 블록의 블록 델타/중지를 거부하도록 Anthropic 스트림 엔벨로프 처리를 수정하여 형식이 잘못된 엔벨로프 상태가 부분 출력을 생성하지 않도록 했습니다.image/jpg를 image/jpeg로 정규화하고 지원되지 않는 이미지 MIME 유형에 대해 자리표시자를 방출하도록 Anthropic 이미지 변환을 수정했습니다.max_tokens를 프로바이더/모델 한계로 제한하고 사고 예산을 유효한 값으로 조정하도록 Anthropic 사고 요청 준비를 수정했습니다.tool_use 중간에 끊었을 때 투명한 재연결이 새로운 메시지 엔벨로프를 동일한 스트림에 연결하면 중복된 message_start가 중복 제거되었지만 content_block_stop을 받지 못한 고아 도구 블록은 어시스턴트 메시지에서 시드 {}(또는 부분적으로 파싱된) 인수와 함께 남아 있습니다. 재연결의 최종 중지 신호는 이것이 정상 도구 호출로 흐르도록 했으므로 예를 들어 {}로 디스패치된 read는 다운스트림 검증(path: expected string, received undefined)에 실패했습니다. 파서는 이제 스트림 종료 시 열린 도구 블록을 잘린 엔벨로프로 처리하고 부정확한 인수를 방출하는 대신 기존 재시도/오류 경로를 통해 라우팅합니다.sk-... 자리표시자를 광고하던 문제를 수정했습니다. Zhipu API 키는 <id>.<secret> 형식입니다(sk- 접두사 없음). 따라서 자리표시자가 잘못된 형태를 제안하는 대신 실제 형식과 일치합니다. (#2106)MOONSHOT_API_KEY를 통해 발견된 Moonshot kimi-k2.6(및 향후의 모든 kimi-k2.x)이 첫 번째 턴에서 출력 없이 멈추던 문제를 수정했습니다. moonshotModelManagerOptions 발견 매퍼는 "thinking"을 포함하는 ID만 reasoning: true로 표시했으므로 동적 kimi-k2.6 항목은 reasoning: false로 통과했습니다. openai-completions z.ai 분기는 건너뛰었고 요청은 thinking 매개변수 없이 Moonshot에 도달했습니다. Moonshot K2.6은 명시적인 thinking: {type} 필드가 필요합니다(동일한 기본 API 와이어 형태 #1838은 thinking.keep을 도입했음). 따라서 서버는 스트림을 자동으로 보유했습니다. 매퍼는 이제 모든 kimi-k2.x ID에 reasoning: true, 비전 입력 및 기본 thinking 메타데이터를 표시하여 Moonshot 엔드포인트가 예상하는 명시적인 thinking: {type: "disabled"|"enabled"} 와이어 본문을 복원합니다. (#2113)omp 바이너리가 패키지 관리자가 관리하는 경로에서 올 때 자동 업데이트가 관리자별 업데이터를 선택합니다.condition의 구문 인식 대안으로서 편집/쓰기 도구 스냅샷에 대한 AST 기반 일치를 활성화하는 TTSR 규칙 프론트매터에 astCondition을 추가했습니다.clearTimeout, clearInterval 및 clearImmediate 호출 주변의 중복 가드를 표시하는 기본 제공 ts-redundant-clear-guard 규칙을 추가했습니다.*.test.ts 파일에서 실제 타이머(Bun.sleep, setTimeout, setInterval)를 표시하여 가짜 타이머(vi.useFakeTimers() / vi.advanceTimersByTime())로 향하도록 하는 기본 제공 ts-no-test-timers 규칙을 추가했습니다.[Paste #N, +X lines]/[Paste #N, Y chars])로 붙여넣기 마커 강조를 지원했으며, 이미지 참조의 시각적 처리와 일치합니다.[Image #N, WxH]를 읽으며(헤더를 디코딩할 수 없을 때 [Image #N]로 돌아갑니다).nohup을 기본 제공으로 취급합니다: nohup … &는 SIGHUP을 마스킹하거나 분리하지 않고 명령을 실행하므로 에이전트가 시작한 데몬은 에이전트가 종료될 때 고아로 누수되지 않고 이 에이전트의 수명에 연결된 상태로 유지됩니다. bash 도구 프롬프트의 데몬 안내를 일치하도록 업데이트했습니다(분리 권장 사항인 nohup … & / setsid … & / disown을 삭제하고 대신 큰 timeout 및 지속적인 세션을 선호합니다).tool.* 테마 심볼 키(nerd/unicode/ascii 사전설정) 및 조용한 status.done 문자를 추가했으므로 각 도구의 결과 헤더는 일반 상태 마크 대신 서명 아이콘을 표시할 수 있습니다.@oh-my-pi/pi-ai/oauth 부분 경로(@oh-my-pi/pi-ai/utils/oauth였음)로 업데이트했습니다. 레거시 플러그인 지정자 시임은 pi-ai/oauth → pi-ai/utils/oauth 부분 경로 재작성을 삭제합니다. 표준 @oh-my-pi/pi-ai/oauth 내보내기가 이제 직접 해석되기 때문입니다.--force가 요청될 때 mise upgrade 후 brew reinstall을 실행하고 mise 설치에 대해 mise install --force를 실행하도록 강제 자동 업데이트를 변경했습니다.astCondition만 있는 규칙이 TTSR 규칙으로 처리되고 재구성된 편집/쓰기 소스 스냅샷을 사용하여 중단 흐름에서 평가됩니다.[Image #N, WxH]). 헤더를 디코딩할 수 없을 때 단순 [Image #N]로 돌아갑니다.[Paste #N, +X lines]/[Paste #N, Y chars])를 이미지 참조와 동일한 강조 스타일(굵게, 하이퍼링크 없음)로 강조했으며, 이미지/붙여넣기 마커를 원자적으로 삭제합니다: 단일 역삭제 또는 앞쪽 삭제는 전체 마커를 제거하고 대신 끊어진 [Paste #N, +X lines 뒤에 남기지 않습니다.tab.*)는 이제 개별적으로 추적되고 시간이 제한됩니다: run 셀이 예산에 도달할 때 시간 초과 오류는 여전히 실행 중인 도우미를 이름 지으며 각 도우미가 멈춘 기간을 표시합니다(예: ... (stalled on tab.screenshot({ selector: ".x" }) (29.9s))) 불명확한 Browser code execution timed out after 30000ms 대신. 빠르게 해석되어야 하는 페이지 결합 도우미(observe, screenshot, extract)는 min(cellBudget, 20s)에서 명명된 작업별 오류로 빨리 실패하여 셀의 나머지에 대한 예산을 남기며 전체 예산을 자동으로 소비하지 않습니다.CALLBACK_PORTS) 및 붙여넣기 코드 로그인 제공자 집합을 @oh-my-pi/pi-ai 프로바이더 레지스트리에서 파생했으며 모델 선택기 및 설정 마법사 로그인 장면에서 중복된 CALLBACK_SERVER_PROVIDERS 표를 제거했습니다.eval 도구의 셀당 timeout 상한을 600s에서 3600s(bash와 일치)로 올렸으며 Zod 스키마와 TOOL_TIMEOUTS.eval 런타임 제한에서 모두 올렸으므로 무거운 로컬 컴퓨팅 셀이 10분 이상의 예산을 요청할 수 있습니다.CALLBACK_PORTS) 및 붙여넣기 코드 로그인 제공자 집합을 @oh-my-pi/pi-ai 프로바이더 레지스트리에서 파생했으며 모델 선택기 및 설정 마법사 로그인 장면에서 중복된 CALLBACK_SERVER_PROVIDERS 표를 제거했습니다.status.done 점으로 돌아가고 오류/경고/대기 중 상태는 범용 교차/경고/스피너를 유지합니다.status.enabled 점으로 변경했으므로 모든 줄이 확인으로 읽히는 대신 실패가 두드러집니다.CALLBACK_PORTS) 및 붙여넣기 코드 로그인 제공자 집합을 @oh-my-pi/pi-ai 프로바이더 레지스트리에서 파생했으며 모델 선택기 및 설정 마법사 로그인 장면에서 중복된 CALLBACK_SERVER_PROVIDERS 표를 제거했습니다.@oh-my-pi/pi-coding-agent를 통해 해석됩니다.eval 도구의 read/write/append 도우미(Python 및 JS 백엔드 모두)가 local://(및 기타 내부 URL) 경로를 일반 파일 시스템 경로로 취급하던 문제를 수정했습니다. pathlib.Path/path.resolve는 local://x.md를 local:/x.md로 축약하므로 write("local://x.md", …)는 정크 local: 디렉터리를 생성했습니다.