{
  "parser": [
    {
      "name": "tagged-read-call",
      "input": "<pi_tool_call>\n{\"name\":\"read\",\"arguments\":{\"path\":\"package.json\"}}\n</pi_tool_call>",
      "expect": {
        "kind": "tool_call",
        "name": "read",
        "arguments": {
          "path": "package.json"
        }
      }
    },
    {
      "name": "attributed-tag-read-call",
      "input": "<pi_tool_call name=\"read\">\n{\"path\":\"package.json\"}\n</pi_tool_call>",
      "expect": {
        "kind": "tool_call",
        "name": "read",
        "arguments": {
          "path": "package.json"
        },
        "warningsContain": [
          "attributed pi_tool_call"
        ]
      }
    },
    {
      "name": "loose-name-arguments-windows-path-call",
      "input": "<pi_tool_call>\nname: \"read\"\narguments: {\"path\":\"D:\\codeproject\\data-etl\\main.py\", \"offset\":1, \"limit\":30}\n</pi_tool_call>",
      "expect": {
        "kind": "tool_call",
        "name": "read",
        "arguments": {
          "path": "D:\\codeproject\\data-etl\\main.py",
          "offset": 1,
          "limit": 30
        },
        "warningsContain": [
          "loose name/arguments",
          "Windows path backslashes"
        ]
      }
    },
    {
      "name": "legacy-id-name-arguments-json-call",
      "input": "<pi_tool_call>\nid=\"pi_tool_read_mr8x2ffi_xirqj9\"\nname=\"read\"\narguments_json: {\"path\":\"D:/codeproject/data-etl/douyin/compass/trade_sale_image.py\",\"offset\":155,\"limit\":110}\n</pi_tool_call>",
      "expect": {
        "kind": "tool_call",
        "name": "read",
        "arguments": {
          "path": "D:/codeproject/data-etl/douyin/compass/trade_sale_image.py",
          "offset": 155,
          "limit": 110
        },
        "warningsContain": [
          "loose name/arguments",
          "legacy arguments_json"
        ]
      }
    },
    {
      "name": "json-id-name-arguments-json-string-call",
      "input": "<pi_tool_call>\n{\"id\":\"pi_tool_read_1\",\"name\":\"read\",\"arguments_json\":\"{\\\"path\\\":\\\"package.json\\\"}\"}\n</pi_tool_call>",
      "expect": {
        "kind": "tool_call",
        "name": "read",
        "arguments": {
          "path": "package.json"
        },
        "warningsContain": [
          "arguments_json",
          "JSON-string tool arguments",
          "legacy tool-call metadata"
        ]
      }
    },
    {
      "name": "alias-tool-args-call",
      "input": "<pi_tool_call>\n{\"tool\":\"read\",\"args\":{\"path\":\"package.json\"}}\n</pi_tool_call>",
      "expect": {
        "kind": "tool_call",
        "name": "read",
        "arguments": {
          "path": "package.json"
        },
        "warningsContain": [
          "tool name alias",
          "tool arguments alias"
        ]
      }
    },
    {
      "name": "alias-tool-name-input-call",
      "input": "<pi_tool_call>\n{\"tool_name\":\"read\",\"input\":{\"path\":\"package.json\"}}\n</pi_tool_call>",
      "expect": {
        "kind": "tool_call",
        "name": "read",
        "arguments": {
          "path": "package.json"
        },
        "warningsContain": [
          "tool_name",
          "input"
        ]
      }
    },
    {
      "name": "text-native-openai-tool-calls-call",
      "input": "<pi_tool_call>\n{\"tool_calls\":[{\"id\":\"call_1\",\"type\":\"function\",\"function\":{\"name\":\"read\",\"arguments\":\"{\\\"path\\\":\\\"package.json\\\"}\"}}]}\n</pi_tool_call>",
      "expect": {
        "kind": "tool_call",
        "name": "read",
        "arguments": {
          "path": "package.json"
        },
        "warningsContain": [
          "OpenAI tool_calls",
          "JSON-string tool arguments"
        ]
      }
    },
    {
      "name": "text-native-function-call-call",
      "input": "<pi_tool_call>\n{\"function_call\":{\"name\":\"read\",\"arguments\":\"{\\\"path\\\":\\\"package.json\\\"}\"}}\n</pi_tool_call>",
      "expect": {
        "kind": "tool_call",
        "name": "read",
        "arguments": {
          "path": "package.json"
        },
        "warningsContain": [
          "function_call",
          "JSON-string tool arguments"
        ]
      }
    },
    {
      "name": "generic-tool-call-tag-read-call",
      "input": "<tool_call name=read>\n{\"path\":\"package.json\"}\n</tool_call>",
      "expect": {
        "kind": "tool_call",
        "name": "read",
        "arguments": {
          "path": "package.json"
        },
        "warningsContain": [
          "attributed pi_tool_call"
        ]
      }
    },
    {
      "name": "loose-tool-args-json-string-call",
      "input": "<pi_tool_call>\ntool: read\nargs: \"{\\\"path\\\":\\\"package.json\\\"}\"\n</pi_tool_call>",
      "expect": {
        "kind": "tool_call",
        "name": "read",
        "arguments": {
          "path": "package.json"
        },
        "warningsContain": [
          "loose name/arguments",
          "tool name alias",
          "tool arguments alias",
          "JSON-string tool arguments"
        ]
      }
    },
    {
      "name": "arguments-json-object-alias-call",
      "input": "<pi_tool_call>\n{\"name\":\"read\",\"arguments_json\":{\"path\":\"package.json\"}}\n</pi_tool_call>",
      "expect": {
        "kind": "tool_call",
        "name": "read",
        "arguments": {
          "path": "package.json"
        },
        "warningsContain": [
          "arguments_json"
        ]
      }
    },
    {
      "name": "text-native-function-envelope-call",
      "input": "<pi_tool_call>\n{\"function\":{\"name\":\"read\",\"arguments\":{\"path\":\"package.json\"}}}\n</pi_tool_call>",
      "expect": {
        "kind": "tool_call",
        "name": "read",
        "arguments": {
          "path": "package.json"
        },
        "warningsContain": [
          "function envelope"
        ]
      }
    },
    {
      "name": "text-native-openai-tool-calls-flat-call",
      "input": "<pi_tool_call>\n{\"tool_calls\":[{\"id\":\"call_1\",\"type\":\"function\",\"name\":\"read\",\"arguments\":{\"path\":\"package.json\"}}]}\n</pi_tool_call>",
      "expect": {
        "kind": "tool_call",
        "name": "read",
        "arguments": {
          "path": "package.json"
        },
        "warningsContain": [
          "OpenAI tool_calls",
          "legacy tool-call metadata"
        ]
      }
    },
    {
      "name": "uppercase-pi-tool-call",
      "input": "<PI_TOOL_CALL>\n{\"name\":\"read\",\"arguments\":{\"path\":\"package.json\"}}\n</PI_TOOL_CALL>",
      "expect": {
        "kind": "tool_call",
        "name": "read",
        "arguments": {
          "path": "package.json"
        }
      }
    },
    {
      "name": "nested-attributed-envelope-call",
      "input": "<pi_tool_call name=\"read\">\n{\"name\":\"read\",\"arguments\":{\"path\":\"package.json\"}}\n</pi_tool_call>",
      "expect": {
        "kind": "tool_call",
        "name": "read",
        "arguments": {
          "path": "package.json"
        },
        "warningsContain": [
          "nested envelope",
          "attributed pi_tool_call"
        ]
      }
    },
    {
      "name": "bare-json-call",
      "input": "{\"name\":\"bash\",\"arguments\":{\"command\":\"pwd\"}}",
      "expect": {
        "kind": "tool_call",
        "name": "bash",
        "arguments": {
          "command": "pwd"
        },
        "warningsContain": [
          "accepted bare JSON"
        ]
      }
    },
    {
      "name": "surrounding-prose",
      "input": "I need one tool.\n<pi_tool_call>\n{\"name\":\"read\",\"arguments\":{\"path\":\"README.md\"}}\n</pi_tool_call>\nThen I will answer.",
      "expect": {
        "kind": "tool_call",
        "name": "read",
        "arguments": {
          "path": "README.md"
        },
        "before": "I need one tool.",
        "after": "Then I will answer.",
        "warningsContain": [
          "surrounding text"
        ]
      }
    },
    {
      "name": "function-style-call",
      "input": "fetch_content({\"url\":\"https://example.invalid\"})",
      "expect": {
        "kind": "error",
        "code": "function_style_tool_call"
      }
    },
    {
      "name": "raw-tool-history-markup",
      "input": "<pi_tool_call_history>\nid: call_1\nname: read\narguments: {\"path\":\"package.json\"}\n</pi_tool_call_history>",
      "expect": {
        "kind": "error",
        "code": "raw_protocol_markup"
      }
    },
    {
      "name": "neutral-tool-history-record",
      "input": "[previous_pi_tool_call]\nid: call_1\nname: read\narguments_json: {\"path\":\"package.json\"}\n[/previous_pi_tool_call]",
      "expect": {
        "kind": "error",
        "code": "raw_protocol_markup"
      }
    },
    {
      "name": "angle-previous-tool-history-record",
      "input": "<previous_pi_tool_call>\nid: call_1\nname: read\narguments_json: {\"path\":\"package.json\"}\n</previous_pi_tool_call>\nPlan mode: planning\nTools: bash, find, grep, ls, read, plan_mode_question\nProduce a <proposed_plan> block.",
      "expect": {
        "kind": "none"
      }
    },
    {
      "name": "mixed-previous-tool-history-record-with-prose",
      "input": "收到，重新发起搜索。\n[previous_pi_tool_call]\nid: call_1\nname: web_search\narguments_json: {\"queries\":[\"2026 618 抖音 洗护\"]}\n</previous_pi_tool_call>",
      "expect": {
        "kind": "none"
      }
    },
    {
      "name": "malformed-incomplete-tool-call-markup",
      "input": "I leaked a partial protocol tag:\n<pi_tool_call name=\"read\"\n{\"path\":\"package.json\"}",
      "expect": {
        "kind": "error",
        "code": "raw_protocol_markup"
      }
    },
    {
      "name": "multiple-tool-calls",
      "input": "<pi_tool_call>{\"name\":\"read\",\"arguments\":{}}</pi_tool_call><pi_tool_call>{\"name\":\"bash\",\"arguments\":{}}</pi_tool_call>",
      "expect": {
        "kind": "error",
        "code": "multiple_tool_calls"
      }
    },
    {
      "name": "unknown-top-level-field",
      "input": "<pi_tool_call>{\"name\":\"read\",\"arguments\":{},\"extra\":1}</pi_tool_call>",
      "expect": {
        "kind": "error",
        "code": "unknown_top_level_field"
      }
    },
    {
      "name": "bare-invalid-tool-like-json",
      "input": "{\"name\":\"read\",\"arguments\":{},\"extra\":1}",
      "expect": {
        "kind": "error",
        "code": "unknown_top_level_field"
      }
    },
    {
      "name": "multiple-text-native-tool-calls",
      "input": "<pi_tool_call>{\"tool_calls\":[{\"function\":{\"name\":\"read\",\"arguments\":\"{}\"}},{\"function\":{\"name\":\"bash\",\"arguments\":\"{}\"}}]}</pi_tool_call>",
      "expect": {
        "kind": "error",
        "code": "multiple_tool_calls"
      }
    },
    {
      "name": "text-native-wrapper-extra-field",
      "input": "<pi_tool_call>{\"tool_calls\":[{\"function\":{\"name\":\"read\",\"arguments\":\"{}\"}}],\"extra\":1}</pi_tool_call>",
      "expect": {
        "kind": "error",
        "code": "unknown_top_level_field"
      }
    },
    {
      "name": "text-native-tool-call-item-extra-field",
      "input": "<pi_tool_call>{\"tool_calls\":[{\"function\":{\"name\":\"read\",\"arguments\":\"{}\"},\"extra\":1}]}</pi_tool_call>",
      "expect": {
        "kind": "error",
        "code": "unknown_top_level_field"
      }
    },
    {
      "name": "empty-arguments-string",
      "input": "<pi_tool_call>{\"name\":\"read\",\"arguments\":\"\"}</pi_tool_call>",
      "expect": {
        "kind": "error",
        "code": "invalid_arguments"
      }
    },
    {
      "name": "attributed-name-mismatch",
      "input": "<pi_tool_call name=\"read\">{\"name\":\"bash\",\"arguments\":{}}</pi_tool_call>",
      "expect": {
        "kind": "error",
        "code": "invalid_name"
      }
    }
  ],
  "providerReplay": [
    {
      "name": "bare-json-tool-call",
      "maxTools": 8,
      "context": {
        "systemPrompt": "system base",
        "tools": [
          {
            "name": "bash",
            "description": "Run a shell command",
            "parameters": {
              "type": "object",
              "properties": {
                "command": {
                  "type": "string"
                }
              }
            }
          }
        ],
        "messages": [
          {
            "role": "user",
            "content": "run pwd"
          }
        ]
      },
      "responses": [
        {
          "content": "{\"name\":\"bash\",\"arguments\":{\"command\":\"pwd\"}}"
        },
        {
          "content": "{\"kind\":\"tool_call\",\"name\":\"bash\",\"arguments\":{\"command\":\"pwd\"}}"
        }
      ],
      "expect": {
        "fetchCount": 2,
        "stopReason": "toolUse",
        "toolCalls": [
          {
            "name": "bash",
            "arguments": {
              "command": "pwd"
            }
          }
        ]
      }
    },
    {
      "name": "surrounding-prose-tool-call",
      "maxTools": 8,
      "context": {
        "systemPrompt": "system base",
        "tools": [
          {
            "name": "read",
            "description": "Read a file",
            "parameters": {
              "type": "object",
              "required": [
                "path"
              ],
              "properties": {
                "path": {
                  "type": "string"
                }
              }
            }
          }
        ],
        "messages": [
          {
            "role": "user",
            "content": "read README.md"
          }
        ]
      },
      "responses": [
        {
          "content": "I will inspect it first.\n<pi_tool_call>\n{\"name\":\"read\",\"arguments\":{\"path\":\"README.md\"}}\n</pi_tool_call>\nThen I will summarize."
        },
        {
          "content": "{\"kind\":\"tool_call\",\"name\":\"read\",\"arguments\":{\"path\":\"README.md\"}}"
        }
      ],
      "expect": {
        "fetchCount": 2,
        "stopReason": "toolUse",
        "toolCalls": [
          {
            "name": "read",
            "arguments": {
              "path": "README.md"
            }
          }
        ]
      }
    },
    {
      "name": "legacy-id-name-arguments-json-tool-call",
      "maxTools": 8,
      "context": {
        "systemPrompt": "system base",
        "tools": [
          {
            "name": "read",
            "description": "Read a file",
            "parameters": {
              "type": "object",
              "required": [
                "path"
              ],
              "properties": {
                "path": {
                  "type": "string"
                },
                "offset": {
                  "type": "number"
                },
                "limit": {
                  "type": "number"
                }
              }
            }
          }
        ],
        "messages": [
          {
            "role": "user",
            "content": "read the image parser window"
          }
        ]
      },
      "responses": [
        {
          "content": "<pi_tool_call>\nid=\"pi_tool_read_mr8x2ffi_xirqj9\"\nname=\"read\"\narguments_json: {\"path\":\"D:/codeproject/data-etl/douyin/compass/trade_sale_image.py\",\"offset\":155,\"limit\":110}\n</pi_tool_call>"
        },
        {
          "content": "{\"kind\":\"tool_call\",\"name\":\"read\",\"arguments\":{\"path\":\"D:/codeproject/data-etl/douyin/compass/trade_sale_image.py\",\"offset\":155,\"limit\":110}}"
        }
      ],
      "expect": {
        "fetchCount": 2,
        "stopReason": "toolUse",
        "toolCalls": [
          {
            "name": "read",
            "arguments": {
              "path": "D:/codeproject/data-etl/douyin/compass/trade_sale_image.py",
              "offset": 155,
              "limit": 110
            }
          }
        ]
      }
    },
    {
      "name": "text-native-openai-tool-calls-tool-call",
      "maxTools": 8,
      "context": {
        "systemPrompt": "system base",
        "tools": [
          {
            "name": "read",
            "description": "Read a file",
            "parameters": {
              "type": "object",
              "required": [
                "path"
              ],
              "properties": {
                "path": {
                  "type": "string"
                }
              }
            }
          }
        ],
        "messages": [
          {
            "role": "user",
            "content": "read package.json"
          }
        ]
      },
      "responses": [
        {
          "content": "<pi_tool_call>\n{\"tool_calls\":[{\"id\":\"call_1\",\"type\":\"function\",\"function\":{\"name\":\"read\",\"arguments\":\"{\\\"path\\\":\\\"package.json\\\"}\"}}]}\n</pi_tool_call>"
        },
        {
          "content": "{\"kind\":\"tool_call\",\"name\":\"read\",\"arguments\":{\"path\":\"package.json\"}}"
        }
      ],
      "expect": {
        "fetchCount": 2,
        "stopReason": "toolUse",
        "toolCalls": [
          {
            "name": "read",
            "arguments": {
              "path": "package.json"
            }
          }
        ]
      }
    },
    {
      "name": "generic-tool-call-tag-tool-call",
      "maxTools": 8,
      "context": {
        "systemPrompt": "system base",
        "tools": [
          {
            "name": "read",
            "description": "Read a file",
            "parameters": {
              "type": "object",
              "required": [
                "path"
              ],
              "properties": {
                "path": {
                  "type": "string"
                }
              }
            }
          }
        ],
        "messages": [
          {
            "role": "user",
            "content": "read package.json"
          }
        ]
      },
      "responses": [
        {
          "content": "<tool_call name=read>\n{\"path\":\"package.json\"}\n</tool_call>"
        },
        {
          "content": "{\"kind\":\"tool_call\",\"name\":\"read\",\"arguments\":{\"path\":\"package.json\"}}"
        }
      ],
      "expect": {
        "fetchCount": 2,
        "stopReason": "toolUse",
        "toolCalls": [
          {
            "name": "read",
            "arguments": {
              "path": "package.json"
            }
          }
        ]
      }
    },
    {
      "name": "attributed-tag-tool-call",
      "maxTools": 8,
      "context": {
        "systemPrompt": "system base",
        "tools": [
          {
            "name": "read",
            "description": "Read a file",
            "parameters": {
              "type": "object",
              "required": [
                "path"
              ],
              "properties": {
                "path": {
                  "type": "string"
                }
              }
            }
          }
        ],
        "messages": [
          {
            "role": "user",
            "content": "read package.json"
          }
        ]
      },
      "responses": [
        {
          "content": "<pi_tool_call name=\"read\">\n{\"path\":\"package.json\"}\n</pi_tool_call>"
        },
        {
          "content": "{\"kind\":\"tool_call\",\"name\":\"read\",\"arguments\":{\"path\":\"package.json\"}}"
        }
      ],
      "expect": {
        "fetchCount": 2,
        "stopReason": "toolUse",
        "toolCalls": [
          {
            "name": "read",
            "arguments": {
              "path": "package.json"
            }
          }
        ]
      }
    },
    {
      "name": "raw-tool-history-then-final",
      "maxTools": 8,
      "maxRepairRetries": 2,
      "maxTotalRecoveries": 4,
      "context": {
        "systemPrompt": "system base",
        "tools": [
          {
            "name": "read",
            "description": "Read a file",
            "parameters": {
              "type": "object",
              "required": [
                "path"
              ],
              "properties": {
                "path": {
                  "type": "string"
                }
              }
            }
          }
        ],
        "messages": [
          {
            "role": "user",
            "content": "read package.json"
          }
        ]
      },
      "responses": [
        {
          "content": "<pi_tool_call_history>\nid: call_1\nname: read\narguments: {\"path\":\"package.json\"}\n</pi_tool_call_history>"
        },
        {
          "content": "{\"kind\":\"final\",\"text\":\"Package summary is available without raw protocol markup.\"}"
        }
      ],
      "expect": {
        "fetchCount": 2,
        "stopReason": "stop",
        "leadingTextIncludes": "Package summary"
      }
    },
    {
      "name": "neutral-tool-history-then-final",
      "maxTools": 8,
      "maxRepairRetries": 2,
      "maxTotalRecoveries": 4,
      "context": {
        "systemPrompt": "system base",
        "tools": [
          {
            "name": "read",
            "description": "Read a file",
            "parameters": {
              "type": "object",
              "required": [
                "path"
              ],
              "properties": {
                "path": {
                  "type": "string"
                }
              }
            }
          }
        ],
        "messages": [
          {
            "role": "user",
            "content": "read package.json"
          }
        ]
      },
      "responses": [
        {
          "content": "[previous_pi_tool_call]\nid: call_1\nname: read\narguments_json: {\"path\":\"package.json\"}\n[/previous_pi_tool_call]"
        },
        {
          "content": "{\"kind\":\"final\",\"text\":\"Package summary is available without internal history records.\"}"
        }
      ],
      "expect": {
        "fetchCount": 2,
        "stopReason": "stop",
        "leadingTextIncludes": "Package summary"
      }
    },
    {
      "name": "malformed-protocol-markup-then-final",
      "maxTools": 8,
      "maxRepairRetries": 2,
      "maxTotalRecoveries": 4,
      "context": {
        "systemPrompt": "system base",
        "tools": [
          {
            "name": "read",
            "description": "Read a file",
            "parameters": {
              "type": "object",
              "required": [
                "path"
              ],
              "properties": {
                "path": {
                  "type": "string"
                }
              }
            }
          }
        ],
        "messages": [
          {
            "role": "user",
            "content": "read package.json"
          }
        ]
      },
      "responses": [
        {
          "content": "<pi_tool_call name=\"read\"\n{\"path\":\"package.json\"}"
        },
        {
          "content": "{\"kind\":\"final\",\"text\":\"Recovered from malformed protocol markup.\"}"
        }
      ],
      "expect": {
        "fetchCount": 2,
        "stopReason": "stop",
        "leadingTextIncludes": "Recovered from malformed"
      }
    },
    {
      "name": "plan-mode-contract-then-plan",
      "maxTools": 8,
      "maxRepairRetries": 2,
      "maxTotalRecoveries": 4,
      "context": {
        "systemPrompt": "Plan mode: planning\nProduce a <proposed_plan> block.",
        "tools": [
          {
            "name": "read",
            "description": "Read a file",
            "parameters": {
              "type": "object",
              "required": [
                "path"
              ],
              "properties": {
                "path": {
                  "type": "string"
                }
              }
            }
          }
        ],
        "messages": [
          {
            "role": "user",
            "content": "继续呀"
          }
        ]
      },
      "responses": [
        {
          "content": "Plan mode: planning\nTools: bash, find, grep, ls, read, plan_mode_question\nProduce a <proposed_plan> block."
        },
        {
          "content": "{\"kind\":\"final\",\"text\":\"<proposed_plan>\\n1. Inspect source discovery.\\n2. Verify actual directories.\\n</proposed_plan>\"}"
        }
      ],
      "expect": {
        "fetchCount": 2,
        "stopReason": "stop",
        "leadingTextIncludes": "<proposed_plan>"
      }
    },
    {
      "name": "plan-mode-contract-fallback-after-repair-budget",
      "maxTools": 8,
      "maxRepairRetries": 1,
      "maxTotalRecoveries": 2,
      "context": {
        "systemPrompt": "Plan mode: planning\nProduce a <proposed_plan> block.",
        "tools": [
          {
            "name": "read",
            "description": "Read a file",
            "parameters": {
              "type": "object",
              "required": [
                "path"
              ],
              "properties": {
                "path": {
                  "type": "string"
                }
              }
            }
          }
        ],
        "messages": [
          {
            "role": "user",
            "content": "今天飞书etl出现了抖音挂车短视频明细无法解析文件名，先给解决计划"
          }
        ]
      },
      "responses": [
        {
          "content": "I will inspect the ETL filename parser next."
        },
        {
          "content": "The parser should be checked, but I still did not produce the required plan block."
        }
      ],
      "expect": {
        "fetchCount": 2,
        "stopReason": "stop",
        "leadingTextIncludes": "Local fallback note"
      }
    },
    {
      "name": "continuation-no-progress-then-tool",
      "maxTools": 8,
      "maxRepairRetries": 2,
      "maxTotalRecoveries": 4,
      "context": {
        "systemPrompt": "system base",
        "tools": [
          {
            "name": "read",
            "description": "Read a file",
            "parameters": {
              "type": "object",
              "required": [
                "path"
              ],
              "properties": {
                "path": {
                  "type": "string"
                }
              }
            }
          }
        ],
        "messages": [
          {
            "role": "user",
            "content": "继续呀"
          }
        ]
      },
      "responses": [
        {
          "content": "I will inspect the file next."
        },
        {
          "content": "{\"kind\":\"tool_call\",\"name\":\"read\",\"arguments\":{\"path\":\"package.json\"}}"
        }
      ],
      "expect": {
        "fetchCount": 2,
        "stopReason": "toolUse",
        "toolCalls": [
          {
            "name": "read",
            "arguments": {
              "path": "package.json"
            }
          }
        ]
      }
    },
    {
      "name": "powershell-cmdlet-in-bash-then-fixed",
      "maxTools": 8,
      "maxRepairRetries": 2,
      "maxTotalRecoveries": 4,
      "context": {
        "systemPrompt": "system base",
        "tools": [
          {
            "name": "bash",
            "description": "Run a shell command",
            "parameters": {
              "type": "object",
              "required": [
                "command"
              ],
              "properties": {
                "command": {
                  "type": "string"
                },
                "timeout": {
                  "type": "number"
                }
              }
            }
          }
        ],
        "messages": [
          {
            "role": "user",
            "content": "find pi67-smoke.ps1 using the shell"
          }
        ]
      },
      "responses": [
        {
          "content": "{\"kind\":\"tool_call\",\"name\":\"bash\",\"arguments\":{\"command\":\"Get-ChildItem -Recurse -Filter \\\"pi67-smoke.ps1\\\" -ErrorAction SilentlyContinue | Select-Object -First 20 -ExpandProperty FullName\",\"timeout\":30}}"
        },
        {
          "content": "{\"kind\":\"tool_call\",\"name\":\"bash\",\"arguments\":{\"command\":\"find . -name \\\"pi67-smoke.ps1\\\" -print | head -20\",\"timeout\":30}}"
        }
      ],
      "expect": {
        "fetchCount": 2,
        "stopReason": "toolUse",
        "toolCalls": [
          {
            "name": "bash",
            "arguments": {
              "command": "find . -name \"pi67-smoke.ps1\" -print | head -20",
              "timeout": 30
            }
          }
        ]
      }
    },
    {
      "name": "bounded-schema-args-then-fixed",
      "maxTools": 8,
      "maxRepairRetries": 2,
      "maxTotalRecoveries": 4,
      "context": {
        "systemPrompt": "system base",
        "tools": [
          {
            "name": "bounded_read",
            "description": "Read one bounded file",
            "parameters": {
              "type": "object",
              "required": [
                "path",
                "limit"
              ],
              "properties": {
                "path": {
                  "type": "string",
                  "minLength": 3,
                  "maxLength": 16,
                  "pattern": "^package\\.json$"
                },
                "limit": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 5
                },
                "tags": {
                  "type": "array",
                  "minItems": 1,
                  "maxItems": 2,
                  "items": {
                    "type": "string",
                    "minLength": 1
                  }
                }
              },
              "additionalProperties": false
            }
          }
        ],
        "messages": [
          {
            "role": "user",
            "content": "bounded read package.json"
          }
        ]
      },
      "responses": [
        {
          "content": "{\"kind\":\"tool_call\",\"name\":\"bounded_read\",\"arguments\":{\"path\":\"\",\"limit\":9,\"tags\":[],\"extra\":true}}"
        },
        {
          "content": "{\"kind\":\"tool_call\",\"name\":\"bounded_read\",\"arguments\":{\"path\":\"package.json\",\"limit\":5,\"tags\":[\"pkg\"]}}"
        }
      ],
      "expect": {
        "fetchCount": 2,
        "stopReason": "toolUse",
        "toolCalls": [
          {
            "name": "bounded_read",
            "arguments": {
              "path": "package.json",
              "limit": 5,
              "tags": [
                "pkg"
              ]
            }
          }
        ]
      }
    },
    {
      "name": "unknown-hidden-tool-then-selected-tool",
      "maxTools": 1,
      "maxRepairRetries": 2,
      "maxTotalRecoveries": 4,
      "context": {
        "systemPrompt": "system base",
        "tools": [
          {
            "name": "read",
            "description": "Read a file",
            "parameters": {
              "type": "object",
              "properties": {
                "path": {
                  "type": "string"
                }
              }
            }
          },
          {
            "name": "hidden_admin",
            "description": "Hidden admin tool",
            "parameters": {
              "type": "object",
              "properties": {}
            }
          }
        ],
        "messages": [
          {
            "role": "user",
            "content": "read package.json"
          }
        ]
      },
      "responses": [
        {
          "content": "{\"kind\":\"tool_call\",\"name\":\"hidden_admin\",\"arguments\":{\"action\":\"dump\"}}"
        },
        {
          "content": "{\"kind\":\"tool_call\",\"name\":\"read\",\"arguments\":{\"path\":\"package.json\"}}"
        }
      ],
      "expect": {
        "fetchCount": 2,
        "stopReason": "toolUse",
        "toolCalls": [
          {
            "name": "read",
            "arguments": {
              "path": "package.json"
            }
          }
        ]
      }
    }
  ]
}
