{"record":{"id":"e9c203745fcf5b21","repo":"tinyhumansai/openhuman","slug":"missing-required-parameter-urls","errorCode":null,"errorMessage":"Missing required parameter: urls","messagePattern":"Missing required parameter: urls","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/openhuman/search/tools/parallel.rs","lineNumber":342,"sourceCode":"                    \"type\": \"boolean\",\n                    \"description\": \"Include relevant excerpts (default true)\",\n                    \"default\": true\n                },\n                \"full_content\": {\n                    \"type\": \"boolean\",\n                    \"description\": \"Include full page content (default false)\",\n                    \"default\": false\n                }\n            },\n            \"required\": [\"urls\"]\n        })\n    }\n\n    async fn execute(&self, args: serde_json::Value) -> anyhow::Result<ToolResult> {\n        let urls = args\n            .get(\"urls\")\n            .and_then(|v| v.as_array())\n            .ok_or_else(|| anyhow::anyhow!(\"Missing required parameter: urls\"))?;\n\n        if urls.is_empty() {\n            return Ok(ToolResult::error(\"urls must contain at least one URL\"));\n        }\n\n        let mut url_strings: Vec<&str> = Vec::with_capacity(urls.len());\n        for (i, v) in urls.iter().enumerate() {\n            match v.as_str() {\n                Some(s) if !s.trim().is_empty() => url_strings.push(s),\n                Some(_) => {\n                    return Ok(ToolResult::error(format!(\"urls[{i}] is an empty string\")));\n                }\n                None => {\n                    return Ok(ToolResult::error(format!(\"urls[{i}] is not a string\")));\n                }\n            }\n        }\n","sourceCodeStart":324,"sourceCodeEnd":360,"githubUrl":"https://github.com/tinyhumansai/openhuman/blob/749120085864ce16e0f273c7b86fac7740b39c5b/src/openhuman/search/tools/parallel.rs#L324-L360","documentation":"Argument-validation guard in the Parallel extract/contents tool's execute: 'urls' is missing or not an array (args.get(\"urls\").and_then(as_array) fails). The tool's schema has only urls in its required list, so this indicates the model called the tool without the URL list or with a wrong-typed value.","triggerScenarios":"Thrown at src/openhuman/search/tools/parallel.rs:342 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Re-issue the call with 'urls' as a non-empty array of URL strings.","Validate each entry is a well-formed absolute URL before sending.","If the model intended a single page, pass it as a one-element array."],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"749120085864ce16e0f273c7b86fac7740b39c5b","analyzedAt":"2026-08-17T21:21:45.363Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}