@oh-my-pi/pi-agent-core 패키지 진입점에서 harmony-leak 내보내기 제거promptToolCalls 에이전트/루프 옵션을 toolCallSyntax로 대체했습니다. 부울 GLM 전용 모드 대신 명시적 인밴드 도구 호출 문법 선택PI_OWNED_TOOLS=<syntax> (예: hermes 또는 qwen3)를 통해 소유한 인밴드 도구 호출 문법 선택 지원 추가, 레거시 PI_OWNED_TOOLS=1/true는 GLM 모드로 유지glm, hermes, kimi, xml, anthropic, deepseek, harmony, pi-native, qwen3). 소유 모드는 네이티브 제공자 도구를 전송하지 않으며, 문법별 프롬프트/카탈로그를 추가하고, 이전 도구 호출/결과를 문법 소유 텍스트로 재인코딩하며, 스트리밍된 모델 출력을 정규 도구 호출로 다시 구문 분석합니다.normalizeTools에 추가: 모델의 친화성 문법이 주어지면 (preferredToolSyntax를 통해 해결), 각 도구의 examples을 해당 네이티브 문법의 <examples> 블록으로 렌더링하고 와이어 설명에 추가합니다. 두 컨텍스트 경로를 통해 배선됨 (신규 빌드 및 새 exampleSyntax 빌드 옵션을 통한 추가 전용 takeSnapshot/build), 의도 추적이 주입될 때 _i 의도 필드 자리 표시자가 예제에 추가됨AgentOptions/AgentLoopConfig에 abortOnFabricatedToolResult 옵션 추가 (기본값 true): 소유 도구 호출이 활성화되어 있고 모델이 턴 중간에 도구 결과를 만들 때, true는 제공자 요청을 즉시 중단하고 false는 완료하도록 하고 만들어진 계속을 폐기합니다.toolCallSyntax 또는 PI_OWNED_TOOLS에서 문법을 선택하여 에이전트 루프 구성 해석에 소유 인밴드 문법 지원 추가exampleSyntax을 고려하도록 추가 전용 컨텍스트 캐시 지문 인식 수정, 도구 호출 문법 전환 시 올바른 주입된 도구 예제로 캐시된 프롬프트 재구축toolChoice 생략하도록 소유 인밴드 도구 호출 요청 수정, 잘못된 도구 선택 요청 방지jsonSchemaToTypeScript를 @oh-my-pi/pi-ai/utils/schema에 추가ToolExample 타입 (ToolCallExample/ToolCompareExample/ToolNoteExample, 도구의 인수 형태로 매개변수화)과 Tool 인터페이스의 examples 속성 추가로 도구 호출 예제를 데이터로 한 번 정의<examples> 블록으로 렌더링하는 renderToolExamples 추가 (@oh-my-pi/pi-ai/grammar를 통해), 의도 추적이 활성화될 때 선택적 _i 의도 필드 자리 표시자 주입renderToolCall) 추가 (병렬 호출 블록 엔벨로프 없이 내부 요소만), 하나 이상의 병렬 호출의 완전한 블록을 렌더링하는 renderAssistantToolCalls와 구별됨renderToolCall에 GrammarRenderOptions.example 플래그 추가: 설정되면 호출은 베어 페이로드로 렌더링됨 — Harmony는 장황한 <|start|>…<|message|>…<|call|> 엔벨로프를 삭제하고 JSON 인수만 방출 — renderToolExamples이 <examples> 블록을 가독성 있게 유지wrapInbandToolStream에 abortOnFabrication 매개변수 추가 (기본값 true): false일 때 위조된 인밴드 도구 결과 계속이 턴을 단축하는 대신 제공자 요청을 중단하지 않고 폐기됨@oh-my-pi/pi-ai/utils/harmony-leak 내보내기 추가@oh-my-pi/pi-ai/grammar 공개 진입점 추가commentary 채널 호출의 페이로드 이전에 <|constrain|>json 마커를 생략하도록 Harmony 인밴드 도구 호출 렌더링 변경Parameters 섹션을 와이어 스키마에서 파생된 단순화된 TypeScript 스타일 시그니처로 표현ToolCallSyntax 유니온을 @oh-my-pi/pi-catalog/identity로 이동하고 @oh-my-pi/pi-ai/grammar에서 재내보내기하여 카탈로그가 @oh-my-pi/pi-ai 런타임 임포트 없이 문법 어휘를 소유할 수 있도록; 기존의 모든 임포트 경로는 변경되지 않음renderToolInventory (상세한 시스템 프롬프트 인벤토리 및 /dump)를 <tool name="…">…</tool> 래퍼 대신 # Tool: <name> 마크다운 섹션으로 각 도구를 렌더링하도록 변경recoverHarmonyToolCall 추가 및 복구 가능한 도구 호출 인수를 안전하게 자르고 재시도할 수 있도록 오염된 어시스턴트 메시지에 대한 누수 감지 워크플로우 추가로 Harmony 누수 처리 지원 수정to=functions...를 포함하는 관련 없는 텍스트가 누수된 도구 호출 마크업으로 취급되지 않도록cursor-agent API) 스트리밍이 큰 MCP 도구 호출 인수 삭제 수정 — 특히 다중 서브에이전트 발송에서 기본 제공 task 도구의 tasks 배열이 tasks: Invalid input: expected array, received undefined로 다운스트림 스키마 검증에 실패. packages/ai/src/providers/cursor.ts의 스트림 핸들러에서 두 가지 업스트림 동작이 싸움: (1) args_text_delta는 agent.proto마다 지금까지의 누적 args 텍스트를 전달하지만 핸들러는 각 스냅샷을 버퍼에 연결하여 JSON을 손상시킴; (2) tool_call_completed는 과도하게 큰 매개변수를 완전히 생략하고 구문 분석할 수 없는 값을 원시 문자열 폴백으로 다운그레이드하는 McpArgs 맵을 전달하지만 핸들러는 무조건 스트리밍된 args를 해당 맵으로 덮어씀. 핸들러는 이제 각 args_text_delta 스냅샷에서 이미 버퍼된 접두사를 제거하고 (스냅샷이 버퍼를 확장하지 않을 때 추가로 폴백) 디코딩된 McpArgs 맵을 스트리밍된 args에 병합 — 완료 프레임이 생략하는 스트리밍된 키와 완료 프레임이 문자열로 다운그레이드할 때의 구조화된 값을 보존. (#2615)function_call_arguments.delta 이벤트를 잘못 라우팅하는 Codex Responses 스트림 수정. 런타임은 싱글톤 currentItem/currentBlock을 추적했으므로 모든 델타 — item_id와 관계없이 — 가장 최근에 추가된 항목에 추가되었고 이전 호출의 output_item.done은 형제의 저장된 인수를 덮어씀 (task 도구에서 tasks: Invalid input: expected array, received undefined로 표시). 열린 항목은 이제 item_id로 output_index 폴백으로 키지정됨; 델타/완료 이벤트는 일치하는 블록으로 라우팅됨, 항목이 이미 닫힌 늦은 델타는 형제를 손상시키는 대신 삭제되며 toolcall_* 스트림 이벤트는 호출당 올바른 contentIndex를 방출 (#2619).ToolCallSyntax 유니온 및 FALLBACK_TOOL_SYNTAX 상수를 @oh-my-pi/pi-catalog/identity에 추가 (@oh-my-pi/pi-ai/grammar에서 재내보내기)preferredToolSyntax(modelId) 추가 @oh-my-pi/pi-catalog/identity에, 모델 패밀리 토큰에서 모델의 네이티브 도구 호출 문법 친화성 해결 (Claude→anthropic, GLM→glm, Kimi→kimi, Qwen→qwen3, DeepSeek→deepseek, OpenAI/gpt-oss→harmony, 기타 xml 폴백)flux-1-schnell-fp8 추가gpt-oss-20b 추가qwen3-embedding-8b 추가qwen3-reranker-8b 추가Gemma 4 E2B IT 및 Gemma 4 E4B IT 추가qwen/qwen3-asr-flash 추가supportsTools 모델 메타데이터 추가supportsTools: false로 표시modelFamilyToken(modelId)을 확장하여 구조화된 파서가 놓치는 Claude/OpenAI id 분류 (claude-3-5-sonnet-20241022 및 gpt-4o와 같은 오래된 날짜 형식), 빈 토큰 대신 anthropic/openai 반환supportsTools 추가하여 사용자 정의 모델 구성이 모델이 네이티브 도구 호출을 지원하는지 선언할 수 있도록tools.format 추가 (glm, hermes, kimi, xml), auto는 네이티브 도구를 지원하지 않는 것으로 표시된 모델에만 GLM으로 폴백tools.abortOnFabricatedResult 설정 추가 (기본값 설정): 인밴드 도구 호출로 모델이 턴 중간에 도구 결과 환각을 시작하면 중단하거나, 비활성화하여 모델을 완료하도록 하고 위조된 계속을 폐기/dump 도구 카탈로그 출력을 변경하여 공유 인벤토리 렌더러를 통해 도구를 렌더링하고 가독성 있는 TypeScript 스타일 시그니처 및 네이티브 문법 <examples> 블록 포함tools.format을 확장하여 추가 인밴드 도구 호출 문법 지원, anthropic, deepseek, harmony, pi, qwen3 포함<examples> 블록을 문서화한 13가지 도구 (eval, browser, todo, irc, ssh, ast_edit, ast_grep, debug, find, inspect_image, ask, 및 patch/apply_patch 편집 모드)를 도구 (ToolExample<z.input<typeof schema>>)의 타입 examples 데이터로 예제를 정의하도록 변경; AI 계층은 이제 이를 모델의 네이티브 도구 호출 문법으로 렌더링하고 마크다운 <examples> 블록은 제거됨PI_OWNED_TOOLS=1은 여전히 GLM을 강제; PI_OWNED_TOOLS=<syntax>는 해당 문법을 강제<attachment>), 로컬 파일 첨부 또는 인라인 붙여넣기를 명시적 동작으로 제공# Inventory 블록을 TOOLS 섹션의 맨 아래로 이동하고, 네이티브 도구 호출이 활성화되고 도구 설명이 반복되지 않을 때만 간결한 도구 이름 목록을 렌더링; 그렇지 않으면 전체 # Tool: <name> 섹션을 방출eval JS 셀 수정 (예: bun test --parallel, 여기서 각 파일이 워커 서브프로세스에서 실행되고 eval 워커는 중첩). 호스트가 비동기 워커 생성/로드/충돌 실패를 삼킴 — new Worker는 동기 throw가 아닌 비동기 error 이벤트를 통해 모듈 로드 오류를 보고하므로 생성 try/catch (및 인라인 워커 폴백)는 발동하지 않았고 error/messageerror 리스너가 배선되지 않음 — 죽은 워커를 느린 워커와 구별할 수 없게 하고 전체 워커 초기화 타임아웃을 차단. 초기화 핸드셰이크는 이제 워커 error/messageerror 이벤트에서 즉시 거부하고 인라인 워커로 폴백하며, 빠른 워커의 ready가 더 이상 삭제될 수 없도록 new Worker 후 ready 리스너가 동기적으로 연결됨 (Bun은 리스너가 존재하기 전에 게시된 메시지를 버퍼링하지 않음).replace -> SWAPdelete -> DELinsert before/after/head/tail -> INS.PRE/POST/HEAD/TAILreplace_block -> SWAP.BLKdelete_block -> DEL.BLKinsert_after_block -> INS.BLK.POSTFull Changelog: v15.13.1...v15.13.2