AgentTool 선언에 새로운 ToolTier 및 ToolApproval API를 통한 approval 지원 추가로, 도구가 능력 계층(read, write 또는 exec)과 승인 게이팅을 위한 선택적 오버라이드/사유 메타데이터를 선언할 수 있도록 함AgentTool에 formatApprovalDetails 추가로 승인 프롬프트에 사용자 정의 상세 텍스트 또는 라인을 추가할 수 있도록 함ToolTier 및 ToolApproval 타입 별칭 추가"priority") 대신 원본 범위의 serviceTier 값("openai-only"/"claude-only")을 OpenAIAttr.RequestServiceTier에 저장하는 문제를 수정했습니다. 구체적인 계층 이름(service_tier == "priority")을 필터링하는 대시보드와 알림이 범위 플레이스홀더로 인해 손상되었습니다. buildChatRequestAttributes는 이제 기록 전에 계층을 resolveServiceTier(serviceTier, provider)을 통해 실행하며, shouldSendServiceTier 게이트를 유지하여 OpenAI가 아닌 제공자는 속성을 완전히 생략합니다.zhipu-coding-plan 제공자 추가 (https://open.bigmodel.cn/api/coding/paas/v4 포함), 동적 모델 검색(ZHIPU_API_KEY), zai-format 사고, reasoning_content 필드 및 OAuth 로그인 플로우 지원 (#1340).pi-ai CLI 바이너리(packages/ai/src/cli.ts)와 그 bin 진입점을 제거했습니다. omp coding-agent CLI의 인프로세스 동등물을 사용하세요: omp auth-broker login [provider], omp auth-broker logout [provider], 및 omp auth-broker list. 라이브러리 API(AuthStorage.login(), getOAuthProviders() 등)는 변경되지 않았습니다.toolResult 방출을 수정하여 실제 도구 결과가 핸드오프/컴팩션 후 올바른 어시스턴트 toolCall 윈도우에서 방출되도록 하여 순서가 잘못되거나 고아 상태의 도구 결과를 방지했습니다.toolResult 처리를 수정하여 같은 toolCallId에 대해 종합적인 aborted 결과 대신 늦게 도착한 실제 결과를 방출하도록 함invalid_grant)할 때 자격 증명을 비활성화하고 캐시된 마지막 양호 사용 데이터를 지워 오래된 보고서가 더 이상 표시되지 않도록 사용 폴링을 수정했습니다.OMP_MCP_TIMEOUT_MS 환경 변수 추가; 클라이언트 측 타임아웃을 비활성화하려면 0으로 설정하세요. 잘못된(음수 또는 숫자가 아닌) 값은 경고와 함께 무시되고 서버별 타임아웃 또는 기본 30초로 폴백됩니다 (#1415).omp auth-broker list 추가 (--json은 기계 판독 가능한 출력용), bunx @oh-my-pi/pi-ai list 대체omp auth-broker login 및 omp auth-broker logout에 대화형 제공자 선택 추가 (동등한 bunx @oh-my-pi/pi-ai login/logout 플로우 대체). 로그아웃 선택기는 저장된 자격 증명에서 소싱되므로 사용자가 실제로 로그인한 제공자만 나열합니다.find 도구에 디렉터리 일치 추가: glob 검색은 이제 파일과 함께 디렉터리를 반환하며, 디렉터리 조회는 후행 / 마커로 방출됩니다. **/tests에 대한 find는 더 이상 디렉터리 조회를 표시하기 위해 후속 read를 필요로 하지 않습니다. 도구 프롬프트 및 출력 문서는 경로가 어느 종류든 될 수 있다는 것을 반영하도록 업데이트되었습니다./.well-known/oauth-authorization-server<issuer-path>)을 MCP OAuth 검색에서 출처-루트 및 경로 접두사 well-known URL 이후 세 번째 후보로 추가하여, 경로 풀 위치에서 authorization-server 메타데이터를 게시하는 배포가 올바르게 해석되도록 함. 단일 세그먼트 authorization URL(예: https://gateway/my-service)은 이제 출처 루트로 폴백되는 대신 게이트웨이 접두사로 처리됩니다.Approve/Deny 선택기를 사용하고 거부 사유를 상황별 도움말 텍스트로 표시하도록 변경하여 단순 확인/취소 토글 대신 사용하도록 함yolo / --auto-approve 세션에서도 프롬프트하도록 변경하여 도구 선언 중요 패턴이 무인으로 실행되지 않도록 함omp auth-broker login이 pi-ai CLI 서브프로세스를 생성하는 대신 AuthStorage.login()을 통해 인프로세스에서 제공자별 OAuth/API-key 플로우를 구동하도록 변경했습니다. pi-ai bin이 제거되고 있으며, 동일한 로그인 표면이 이제 완전히 omp 내부에 존재합니다.DEFAULT_MAX_COLUMN)를 1024에서 512 문자로 변경하여 넓은 축소된 단일 라인 번들이 모델의 컨텍스트를 초과하지 않도록 함edit.hashlineAutoDropPureInsertDuplicates를 변경하여 단일 비구조 경계 페이로드 라인이 삭제된 범위 바로 위(접두사) 또는 바로 아래(접미사)의 라인을 중복할 때도 A-B:payload 대체 작업에서 동작하도록 함. 사용자가 A-B!를 의도했지만 인접한 컨텍스트와 일치하는 페이로드를 입력한 A-B:foo의 일반적인 실수를 포착합니다. 기존 2+ 라인 블록 흡수 및 균형 검증 구조 단일 라인 흡수는 이미 다중 라인 및 구조 구분기 경우를 다루었으며, 이는 단일 라인 비구조 간격을 메웁니다.uv_async_send 콜백은 호출자가 더 긴 슬립을 요청했을 때도 ~1-2ms 후에만 이벤트 루프를 깨울 수 있으므로, yieldIfDue()는 이제 요청된 wall-clock 기간이 경과할 때까지 Bun.sleep()을 다시 시도하여 보상하며, bash 실행기는 runPromise/timeout/abort 경합을 ExponentialYield(20ms → 10s)로 감싸서 장시간 실행 명령이 경합에서 hot-looping을 중지하도록 함. 수익은 추가로 모듈 수준 50ms 게이트로 조절되며, 경합에서 패배한 타이머는 AbortSignal을 통해 중단되어 승자가 선택된 후 계속 동작하지 않습니다 (#1396 by @hezhiyang2000, closes #1384).LINE↓payload / A-B:payload는 유효한 단일 라인 쓰기이지만, 자연 순서 미리보기는 줄바꿈이 도착할 때까지 전체 작업 토큰을 건너뛰고 있었습니다. 따라서 모델이 sigil 이후 입력한 첫 문자는 다음 라인이 끝난 후에만 나타났고, 렌더러는 원본 A-B: bla bla bla 입력 렌더링으로 폴백됩니다. op-insert 및 op-replace 토큰의 인라인 본문 컨텐츠는 이제 같은 작업 틱에서 +payload 라인으로 방출됩니다./usage 및 상태 라인 리셋 카운트다운이 오래된 음수 델타를 렌더링하는 문제를 수정했습니다. Codex는 새 요청이 새 윈도우를 열 때까지 이전 윈도우의 reset_at을 계속 보고하며, 이는 resets in … 접미사를 의미 없는 음수 기간으로 변환했습니다. formatDuration은 이제 음수가 아닌, NaN 및 무한 입력을 0ms로 제한하며, 두 렌더러는 resetsAt <= now가 되면 resets in … 접미사를 완전히 억제합니다.compaction.strategy = handoff가 활성 체크포인트 또는 불완전한 todos가 있는 agent_end에서 동작할 때, 지연된 핸드오프 사후 프롬프트 작업과 되감기/todo 완료 경로가 모두 동시에 작업을 예약하여 새로운 agent.continue()가 핸드오프 LLM 호출과 함께 새 어시스턴트 차례를 스트리밍했습니다("자동 핸드오프" 로더와 여전히 스트리밍 중인 어시스턴트 메시지로 표시되며, 채팅 컨테이너가 스트림 중에 재구성됨). #checkCompaction은 이제 핸드오프를 지연했는지 보고하고 agent_end 핸들러는 되감기/todo 패스를 단락합니다. #scheduleAgentContinue는 isCompacting || isGeneratingHandoff일 때도 건너뜁니다. 사전 프롬프트 #checkCompaction 호출은 이제 인라인 실행(allowDefer = false)을 강제하여 유지 관리가 정착될 때까지 새 차례가 시작될 수 없습니다./exit 및 Ctrl+C 더블 탭이 행을 다는 문제를 수정했습니다. AgentSession.dispose()는 이제 #cancelPostPromptTasks 드레인 전에 재시도/컴팩션(자동 컴팩션 + 핸드오프) 및 에이전트 스트림을 중단하여, generateHandoff를 대기하는 사후 프롬프트 작업이 거부되고 Promise.allSettled가 해석될 수 있습니다. 도구 작업(bash/eval/python)은 의도적으로 여전히 기존 처리 경로를 위해 남겨져 있어 공유 커널이 세션 처리 전반에 계속 유지됩니다.<<) 및 here-strings(<<<)이 셸을 교착 상태에 빠뜨리는 문제를 수정했습니다. brush_core::interp::setup_open_file_with_contents는 전체 본문을 익명 파이프에 동기적으로 쓴 후 판독기를 다음 명령에 전달했습니다. 본문이 OS 파이프 버퍼를 초과하면 작성자는 영원히 블록되었고 bash 도구는 소비자를 시작하지 않은 채로 305초 하드 상한선에서 타임아웃되었습니다. Linux fast path는 여전히 F_SETPIPE_SZ를 사용하여 파이프를 제자리에서 증가시킵니다. 다른 모든 OS 스레드 플랫폼(및 pipe-max-size 이상의 Linux 본문)은 이제 쓰기를 드레인 또는 BrokenPipe에서 자연스럽게 종료되는 fire-and-forget 스레드로 분리합니다. 비스레드 대상은 업스트림 동기 경로를 유지하여 heredocs이 스레드 스폰에서 실패하지 않도록 합니다.@ 파일 언급 자동완성이 몇 초 동안 정지하는 문제를 수정했습니다(예: @../, @~/, @/abs/). CombinedAutocompleteProvider는 이제 관련 없는 프로젝트로 가득 찬 형제 디렉터리에 대해 재귀적 fuzzyFind 워크를 발송하는 대신 이러한 경우 plain immediate-directory 접두사 나열로 단락합니다. cwd 내부 쿼리는 기존 fuzzy-then-prefix 동작을 유지합니다. (#1395)process.platform === "darwin" 뒤에 그리고 pi-natives Rust 경로의 cfg!(target_os = "macos") 뒤에 게이트했습니다. macOS 터미널(Ghostty / Terminal.app / iTerm2)은 UAX#11에서 Wide로 분류하는 데도 불구하고 자모를 1 cell로 렌더링하지만, WezTerm과 대부분의 Linux 터미널은 UAX#11을 준수하고 2 cell로 렌더링합니다. 무조건 보정은 따라서 TUI의 열 부기를 off-darwin 터미널의 실제 렌더링에서 디싱크했으며, 손상된 레이아웃과 Linux에서 끊긴 한국어 입력을 생성했습니다. non-darwin에서 도우미는 이제 Bun.stringWidth / UnicodeWidthStr을 완전히 미루고 있습니다(또한 다중 문자 그래핌 경로에서 작은 성능 이득). (#1410)전체 변경 로그: v15.4.3...v15.5.0