resolveFallbackTool 옵션을 추가하여 공시되지 않은 도구 호출을 호스트 측 트랜스포트(예: 디바이스 마운트)로 라우팅할 수 있게 함GET /v1/usage/history를 추가(sinceMs/provider 필터가 있는 기록된 사용량 제한 스냅샷)하고 AuthBrokerClient.fetchUsageHistory를 추가 — 브로커 배포에서는 브로커 호스트가 모든 업스트림 사용량 조회를 수행하므로 그 영구 이력이 유일한 완전한 사용 기록POST /v1/usage/observed로 플러시(설치 ID를 클라이언트 키로, 호스트명을 표시 이름으로 사용); 브로커는 client_usage/clients에서 5분 단위 버킷을 저장하고 GET /v1/usage/clients에서 집계를 제공. 엔드포인트가 없는 브로커는 프로세스 생명주기 동안 보고를 비활성화ZAI Zread Quota로 변경(계층/ID 슬러그 zread)하여, omp usage 행을 줄바꿈시키던 74자 길이의 ZAI Web Search / Reader / Zread Quota (web-search-reader-zread) 제목 대체opencode-zen 제공자의 모든 Claude(anthropic-messages) 모델이 401 Missing API key로 실패하던 문제 수정: 게이트웨이가 x-api-key를 요구하므로 opencode-zen은 이제 bearer 전용 대신 opencode-go/umans처럼 X-Api-Key 인증을 사용하며, 사고 요청에서 Anthropic 프록시가 거부하는 context_management 필드를 더 이상 전송하지 않음(#6510).ts(타임스탬프 라인; -i/-s 경과 시간 모드, -m 단조 시계, -r RFC3339/syslog 타임스탬프의 상대 재작성, %.S/%.s/%.T 부초 확장), sponge(stdin을 완전히 흡수한 후 원자적으로 대상에 기록하여 foo file | ... | sponge file이 작동; -a 추가), ifne(stdin이 비어있지 않을 때만 명령 실행; -n 반전하고 비어있지 않은 stdin 통과), isutf8(줄/문자/바이트 진단과 함께 스트리밍 UTF-8 검증; -q, -l, -i), combine(두 파일의 라인에 대해 부울 and/not/or/xor; - stdin), errno(errno 이름/번호/설명 조회, -l 목록과 -s 검색; unix만 해당). uutils 기반 내장 함수처럼 명령의 자체 stdio에 대해 프로세스 내에서 실행되고, 셸 작업 디렉토리에 대해 경로를 확인하며, 취소를 지키고, PI_DISABLE_UUTILS_BUILTINS로 비활성화됨.mkdir부터 jq, rm/mv/ln, moreutils 집합)를 나열하여 모델이 존재 여부 확인 없이 이들을 사용; PI_DISABLE_UUTILS_BUILTINS가 내장 함수를 비활성화할 때와 Windows에서 unix 전용 errno을 생략할 때는 이 줄이 제거됨.task 도구에 spawn별 effort 파라미터 추가("lo" | "med" | "hi"): 각 선택자는 확인된 모델의 지원되는 사고 범위(최저, 중간, 최고 수준 — 모델이 지원하는 상한, 예: high, xhigh, 또는 max)에 매핑되고 에이전트의 기본 선택자(auto 포함)를 재정의. effort 생략 시 기존 자동 프롬프트별 사고 분류 유지.searxng.engines 설정 추가: 엔진 이름 또는 뱅 바로가기의 쉼표 구분 목록(예: ddg, br, startpage)으로 API의 engines= 파라미터로 전송. 바로가기는 인스턴스의 /config 엔드포인트를 통해 정규 엔진 이름으로 확인(엔드포인트별 캐시됨; /config에 도달할 수 없으면 항목은 그대로 통과). 쿼리의 뱅 문법(!ddg foo)은 계속 인스턴스에 통과되며, 외부 뱅(!!g)은 이제 SearXNG가 JSON 요청이어도 HTTP 리다이렉트로 응답하므로 클라이언트 측에서 제거됨.site:/-site: (더하기 domain:/host: 별칭), after:/before:/since:/until: 날짜 범위, inurl:/intitle:/intext:/allin*:, filetype:/ext:, lang:, 인용 구문(스마트 따옴표 포함), +term, -/NOT 제외, OR/| 그룹. 공유 파서(web/search/query.ts)는 요청당 한 번 쿼리를 구조화; 각 제공자는 제약을 업스트림이 지원하는 원시 API 필터에 매핑(Perplexity API 키 경로와 ask 경로 모두에서 도메인/날짜/언어 필터, Tavily include_domains/exclude_domains + start_date/end_date, Exa 도메인 목록 + API 및 MCP 경로의 발행 날짜 범위, Anthropic allowed_domains/blocked_domains, xAI filters.allowed_domains/excluded_domains, Parallel source_policy, Brave 절대 freshness 범위, Firecrawl tbs=cdr 날짜 범위, Jina X-Site, SearXNG language)하고 그렇지 않으면 엔진이 파싱하는 연산자 문법만 재발행(Gemini 그라운딩, OpenAI, Kagi 및 자격증 불필요 스크래퍼용 전체 Google 문법 — 스크래퍼 적대적 경로-site:/inurl: 연산자는 평문 키워드로 강등; DuckDuckGo, Mojeek, Kimi, Z.AI, TinyFish 및 Synthetic용 보수적 부분집합). 파이프라인은 모든 응답에 관대한 사후 필터를 적용: 엔진이 무시한 제약은 반환된 소스에 적용되고, 모든 결과를 제거할 제약 차원은 완화되어 모델에 보고됨(Note: no results matched \site:...`; the constraint was relaxed`) — 아무것도 반환하지 않는 대신. 지시문 없는 쿼리는 모든 곳에서 바이트 동일하게 통과됨.run 코드 미리보기는 이제 표시를 위해 예쁘게 표현됨: 축소된/컴팩트한 에이전트 작성 셀은 보수적 스트리밍 포매터(Python, JavaScript, Ruby, Julia)로 확장되어 블록 구조를 들여쓰기, 명령문 분할, 연산자 간격 정규화(JS), 100열보다 넓은 객체 리터럴을 한 줄에 하나의 속성으로 확장 — 순수하게 렌더링용이고, 실행된 소스는 건드리지 않음. 포매터는 진행 중인 접두사(종료되지 않은 문자열/주석/블록)를 closer를 발명하지 않고 처리하며, 레이아웃 결정은 접두사 안정적이므로 이미 렌더링된 라인은 호출이 스트리밍되는 동안 리플로우되지 않음.local://paste-N.md 참조를 삽입(이전 local://attachment-N), 따라서 저장된 붙여넣기는 마크다운 확장명과 더 명확한 이름을 가짐.data: 페이로드 내 도구 정의는 먼저 컴팩트됨(이름은 유지되고 스키마/설명은 생략 — 전체 페이로드를 유효한 JSON으로 유지할 만큼 충분함), 64k 상한을 초과하는 것은 머리와 꼬리를 유지하고 제거된 중간을 표시하는 : omp-debug-elided chars=N 주석으로 표시하여 usage 같은 후행 필드가 보임.web_search 도구 프롬프트는 이제 모델에게 프로그래밍 방식으로 접근 가능하거나 알려진 URL(GitHub, 알려진 arXiv 논문, Wikipedia 페이지, 공식 문서)을 가진 콘텐츠를 절대 검색하지 말고 대신 URL을 직접 read하도록 지시.op을 생략한 todo 호출이 하드 실패 검증("op must be operation to apply (was missing)")되던 문제 수정: 도구는 이제 관대하게 검증하고 명확하지 않은 페이로드의 op을 추론(list → init, phase+items → append, 빈 목록의 bare items → init); op은 스키마에서 필수로 유지되고, 모호한 op 없는 호출은 스키마 오류를 재시도 가능한 도구 오류로 표면화.site: 경로(예: site:github.com/owner/repo)나 inurl: 연산자가 있는 쿼리에 대해 0개 결과 반환하던 문제 수정: 스크래퍼 엔진은 site:를 bare 도메인에만 매칭하고 DuckDuckGo는 inurl:을 완전히 무시하므로, 그러한 쿼리는 결과 집합을 조용히 비워 체인의 다음 제공자로 통과되었음. 공유 formatScraperQuery 포매터는 이제 경로를 포함하는 site:과 모든 inurl: 값을 평문 검색어로 구조적으로 강등(OR 그룹과 인용 지시문 포함)하면서 bare 도메인 site: 필터, 부정 연산자, 각 엔진의 지원되는 문법 유지; 파이프라인 사후 필터는 여전히 강등된 제약을 반환된 소스에 적용.ast_edit 미리보기가 모델에 적용된 편집처럼 읽히던 문제 수정: ⟨proposed⟩ 배지는 TUI만, 모델 시각 결과(해시라인 헤더 + -/+ 행, 적용된 편집 출력과 동일)는 staged-proposal 신호가 없음. 미리보기 결과는 이제 "Staged as a proposal — files NOT modified yet" 고지로 시작하며 xd://resolve/xd://reject를 명명, 삽입된 resolve 상기는 소스 도구를 명명, ast_edit 도구 프롬프트는 두 단계 흐름을 문서화.hub 시작 ps/list 응답이 활성 프로세스를 모든 종료된 프로세스 뒤에 묻고 오래 존속하는 프로젝트에서 무한 증가하던 문제 수정: 브로커는 이제 비-말단 데몬을 먼저 나열(가장 오래된 것부터 가장 최근 것까지)하고 종료/실패 이력을 가장 최근 종료된 10개로 제한하여, 활성 시작이 즉시 보이고 응답이 제한됨. 브로커 복구는 또한 각 이미-말단 데몬의 실제 종료 시간을 유휴 브로커 재시작 후 이력 제한이 진정으로 가장 최근-종료된 프로세스를 유지하도록 재시작 타임스탬프로 덮어쓰지 않고 보존(#6517).rebuildChatFromMessages(/shake, 자동 컴팩션 또는 설정 토글에서)는 명확하고 재생 전체 live pendingTools 컴포넌트를 보존하지만, 보존은 모든 pending-tool 컴포넌트가 여전히 dangling인 것으로 가정. 도구의 결과가 세션 항목에 이미 도착했지만 그 컴포넌트가 여전히 pendingTools에 남아있을 때, 재생은 완료된 블록을 재구성했고 보존된 live 컴포넌트가 재부착되어 같은 블록이 두 번 나타났음; 해결된 컴포넌트는 이제 보존에서 삭제되고 재생이 소유(#6516).--model default(및 다른 bare 역할 이름)이 설정된 modelRoles.default 역할 대신 번들된 cursor/default 카탈로그 모델로 확인되던 문제 수정. resolveCliModel의 정확한 매치 단계는 역할 해결 전에 인증되지 않은 카탈로그 fallback을 실행했으므로, 번들된 ID가 예약된 역할 이름과 충돌하면 설정된, 실행 가능한 역할을 가림 — Cursor 자격증이 없는 머신에서 No API key found for cursor로 실패. 카탈로그 fallback은 이제 지연되므로 인증된 정확한 모델이 여전히 우선, 설정된 역할이 인증되지 않은 카탈로그 전용 ID를 이기며, 역할이 매칭되지 않을 때 카탈로그 ID가 복구됨(#6508).task 및 agent()에서 model 파라미터 제거: 명시적 spawn별 모델 선택자 및 fallback 체인은 더 이상 지원되지 않음; spawn은 항상 에이전트의 설정된 모델 사용- bullet 본문 행은 이제 hunk가 명확하게 마크다운 불릿 목록일 때 경고와 함께 리터럴 콘텐츠로 자동 수용(모든 - 행이 bullet 모양이고 평문 +new diff 대응물 없음); 모호한 - 행은 여전히 교육 오류로 실패.-C target-cpu=native 전달 중단하여 빌드 호스트 CPU 기능을 배송된 애드온에 베이킹하고 ring 컴파일을 깼던 것./v1/usage/history를 읽음(로컬 에이전트 DB로 fallback), 브로커 배포가 브로커 호스트에서 사용량 이력 기록 이후/settings, 모델 페이지)를 떠나거나 alternate 스크린 버퍼 토글할 때마다 크기를 다시 보고하는 터미널에서 크기를 변경할 때 터미널이 깜박이던 문제 수정: alt-toggle 크기 에코는 더 이상 파괴적 전체 화면(ED3) 재구성을 무장하지 않고, 제자리 재그리기 경로는 Warp만이 아닌 그러한 터미널에 대해 자동 감지됨(#6511).Full Changelog: v17.1.1...v17.1.2