beforeToolCall은 이제 사전 발송 준비 단계에서 아규먼트 준비 중에 실행됩니다 — 어시스턴트 메시지의 message_start/message_end가 방출되기 전의 스트리밍 경로에서, 그리고 항상 동시성 해결, tool_execution_start, 텔레메트리 스팬 시작, 그리고 tool.execute 보다 앞서 — 이미 스케줄된 실행 슬롯 내부 대신. 이는 해결된 tool을 컨텍스트에서 받으며 호출의 아규먼트를 대체할 args를 반환할 수 있습니다. 대체는 도구 스키마에 대해 재검증되고, 어시스턴트 메시지의 도구 호출 블록에 다시 쓰이며, 아규먼트 의존 중단 가능성을 다시 해결합니다. 이제 이것이 히스토리, 지속성, 제공자 재생, 스케줄링, 실행 이벤트, 그리고 tool.execute의 단일 신뢰 원본이 됩니다. 아규먼트 검증은 같은 준비 단계로 이동했으므로, 함수형 concurrency 해석기는 이제 원본 사전 검증 아규먼트 대신 검증된 (그리고 아마도 수정된) 아규먼트를 봅니다. 훅은 이제 도구당 신호 대신 실행의 요청 중단 신호를 받습니다.403 Forbidden 응답 (예: Anthropic permission_error 계획/모델 거부, Copilot 모델 정책 거부)은 이제 사용량 제한처럼 형제 자격증명을 통해 순환합니다. 첫 거부된 계정에서 세션이 실패하는 대신. 거부된 자격증명은 60초 동안 임시 차단되고 재검증됩니다 — 절대 제거되지 않습니다 — 그리고 원본 403은 모든 형제가 시도될 때까지 한 번만 나타납니다.Buffer.concat를 통해 모든 스트림 청크를 복사하지 않습니다.isRecord 함수 및 람다 정의를 감지하고 에이전트를 공유 가드 및 명시적 형태 검증으로 지시하는 번들된 ts-no-local-is-record TTSR 규칙 추가.tool_call 핸들러 (익스텐션 또는 훅)는 이제 block 대신 도구가 실행되는 아규먼트를 수정하기 위해 input을 반환할 수 있습니다. 반환된 객체는 도구에 전달되는 원본 실행 입력입니다 (block이 설정되면 무시되고 computer 도구 호출에 적용되지 않음). 이는 기본 도구를 재구현하지 않고도 내장 도구의 아규먼트를 정규화하거나 다시 쓰는 래퍼를 활성화합니다. 모델이 발급한 호출의 경우 이벤트는 에이전트 루프의 아규먼트 준비 시간에 발생하므로, 수정은 도구 스키마에 대해 재검증되며 이것이 동시성 스케줄링, tool_execution_start/기록, 지속된 어시스턴트 메시지, 그리고 승인 게이트가 모두 관찰하는 것입니다 — 사용자는 정확히 실행되는 것을 승인하며, 도구의 기능적 동시성을 변경하는 수정 (예: bash pty)은 올바르게 스케줄됩니다. 수정된 중첩 write xd:// 장치 발송은 외부 쓰기 게이트의 승인을 포기하고 전체 프롬프트에 직면합니다 (#6681 by @psyrendust).sample(1) 호출 트리 보고서에 대한 파서 추가: *.sample.txt 읽기는 이제 컴팩트 병목 요약을 반환합니다 — 스레드당 핫 경로 (CPU 상 샘플 수, 차단된 시스템 호출 시간 제외), 디맹글된 Rust v0/레거시 기호, 평탄화된 직접 재귀, 병합된 호출 사이트 형제, 유휴 스레드 분류, 그리고 프로세스 전체 자체 샘플별 상위 함수 테이블. :raw는 여전히 원본 보고서를 읽으며, 단지 확장명을 가진 파일은 일반 텍스트로 폴백됩니다..cpuprofile 지원 추가 (Node/Bun --cpu-prof, Chrome DevTools, CDP Profiler.stop 출력): 읽기는 이제 컴팩트 병목 요약을 반환합니다 — CPU 상 밀리초를 포함한 핫 경로 호출 트리 ((idle) 시간 제외), 축소된 통과 체인, 평탄화된 직접 재귀, 단축된 파일 URL, 그리고 자체 시간별 상위 함수 테이블. :raw는 여전히 원본 JSON을 읽으며, 단지 확장명을 가진 파일은 일반 텍스트로 폴백됩니다.xd:// 발송은 이제 하나의 표준 도구 맵을 공유합니다: write xd://<tool>은 활성화된 모든 최상위 또는 마운트된 도구를 실행하며, read xd://<tool>은 그 문서를 반환합니다. 이름이 다른 계층을 통해 노출되었을 때 실패하는 대신. 마운트된 이름은 프레젠테이션 메타데이터일 뿐이므로 도구 교체 및 연결 해제는 오래된 장치 인스턴스를 남길 수 없습니다. 비활성화된 도구는 접근 불가능하게 유지되며, xd:// 및 Cursor/최상위 폴백 실행 모두 도구의 승인 및 ACP 권한 게이트를 유지합니다.xd:// 장치 문서는 이제 매개변수 스키마를 원본 JSON Schema 덤프 대신 주석 주석이 있는 TypeScript 타입 (동일한 렌더러를 사용하는 jsonSchemaToTypeScript, in-band 도구 목록이 사용)으로 렌더링합니다. 이는 시스템 프롬프트 장치 섹션을 축소하면서 설명을 인라인으로 유지합니다./vision [on|off|auto|status] 슬래시 명령 추가 (inspect_image 비전 위임 도구의 경우). /computer를 모델로 한 것입니다: on/off는 현재 세션에만 도구를 강제하고, auto는 지속된 설정으로 돌아가며, status는 효과적 모드, 세션 오버라이드, 도구 상태, 그리고 활성 모델 이미지 기능을 보고합니다.inspect_image.enabled 불린을 3상태 inspect_image.mode (auto|on|off, 기본값 auto)로 대체했습니다. auto에서 도구는 활성 모델이 네이티브 이미지 입력을 부족할 때만 등록되므로, 비전 가능 모델 (예: kimi-code/k3)은 별도의 비전 모델에 위임하는 대신 자신의 기능으로 이미지를 인라인으로 읽습니다. 도구 세트는 모든 모델 전환 시 재평가되며 상태 공지를 포함할 때 뒤집습니다. read 도구는 이제 원본 설정 대신 효과적 상태를 동적으로 따르므로 inspect_image가 숨겨질 때마다 다시 디코딩된 이미지 블록을 반환합니다. 기존 inspect_image.enabled: true/false 구성은 inspect_image.mode: on/off로 마이그레이션됩니다./tree를 통해 이미지 첨부가 있는 프롬프트를 복원하면 이제 이미지가 작성기 초안에 재첨부됩니다: 이전에는 텍스트만 (그 [Image #N] 마커 포함) 복원되었으므로 재제출은 리터럴 마커를 이미지 없이 보냈습니다.Read artifact://N for full output라고 말했지만 바닥글은 Artifact: N+1이라고 말했습니다. 스트리밍 싱크의 헤드 및 테일 윈도우 각각은 전체 예산을 가졌으므로, 중간 생략 인라인 본문은 headBytes + spillThreshold에 도달할 수 있었고 항상 최종 방어 인라인 바이트 캡을 다시 트리거했습니다. 이는 두 번째 시간 자른 (두 개의 생략 마커), 이미 잘린 중복 아티팩트를 저장했으며, 공지의 라인 범위를 오래된 상태로 남겼습니다. 헤드 및 테일 윈도우는 이제 유출 임계값 예산을 공유합니다 (헤드는 절반으로 제한), 캡 예산은 구성된 임계값 더하기 공지 여유에서 유래하며, 캡이 싱크 유출 결과에서 발동할 때 사본을 저장하는 대신 기존 원본 아티팩트를 참조합니다.url 토크나이저 및 lheading 규칙은 이제 O(1)/O(n) charCode 사전 검사로 제어되며, 병리적 hr/lheading/table/html 블록 규칙은 소스를 재스캔하는 대신 오프셋 0에서 실패하는 스티키 클론을 사용하며, 인라인 수학/자동링크 start() 스캔은 정규식 대안을 제거했습니다.전체 변경 로그: v17.1.6...v17.1.7