{"record":{"id":"b91643950b967baf","repo":"tinyhumansai/openhuman","slug":"missing-required-parameter-urls-a-non-empty-list","errorCode":null,"errorMessage":"Missing required parameter: urls (a non-empty list of page URLs)","messagePattern":"Missing required parameter: urls \\(a non-empty list of page URLs\\)","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/openhuman/search/tools/exa.rs","lineNumber":655,"sourceCode":"            client: ExaClient::new(api_key, api_url, max_results, timeout_secs),\n        }\n    }\n\n    /// Accept either a `urls` array or a single `url` string, so the agent can\n    /// call this the obvious way for the one-document case.\n    fn collect_urls(args: &Value) -> anyhow::Result<Vec<String>> {\n        let urls: Vec<String> = match args.get(\"urls\") {\n            Some(Value::Array(items)) => items\n                .iter()\n                .filter_map(|v| non_empty(v.as_str()))\n                .collect::<Vec<_>>(),\n            Some(Value::String(single)) => non_empty(Some(single)).into_iter().collect(),\n            _ => non_empty(args.get(\"url\").and_then(Value::as_str))\n                .into_iter()\n                .collect(),\n        };\n        if urls.is_empty() {\n            anyhow::bail!(\"Missing required parameter: urls (a non-empty list of page URLs)\");\n        }\n        Ok(urls)\n    }\n}\n\n#[async_trait]\nimpl Tool for ExaGetContentsTool {\n    fn name(&self) -> &str {\n        \"exa_get_contents\"\n    }\n\n    fn description(&self) -> &str {\n        \"Retrieve the full crawled contents of one or more URLs using Exa. Returns page text \\\n         and, on request, a summary or query-relevant highlights per URL.\"\n    }\n\n    fn parameters_schema(&self) -> Value {\n        json!({","sourceCodeStart":637,"sourceCodeEnd":673,"githubUrl":"https://github.com/tinyhumansai/openhuman/blob/749120085864ce16e0f273c7b86fac7740b39c5b/src/openhuman/search/tools/exa.rs#L637-L673","documentation":"collect_urls found neither a `urls` array with usable entries nor a `url` string after normalization — the argument accepted for the one-document case also came back empty. Pure argument-shape validation before any network call.","triggerScenarios":"Thrown at src/openhuman/search/tools/exa.rs:655 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Re-issue the call with a non-empty `urls` array or a single non-empty `url` string"],"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-14T00:17:10.932Z"}