{"record":{"id":"db928454871e4238","repo":"conductor-oss/conductor","slug":"unsupported-agent-framework-framework-suppo","errorCode":null,"errorMessage":"Unsupported agent framework: '${framework}'. Supported frameworks: ${normalizers.keySet()}","messagePattern":"Unsupported agent framework: '(.+?)'\\. Supported frameworks: (.+?)","errorType":"validation","errorClass":"IllegalArgumentException","httpStatus":400,"severity":"error","filePath":"agentspan/src/main/java/org/conductoross/conductor/ai/agentspan/runtime/normalizer/NormalizerRegistry.java","lineNumber":51,"sourceCode":"\n    public NormalizerRegistry(List<AgentConfigNormalizer> allNormalizers) {\n        for (AgentConfigNormalizer n : allNormalizers) {\n            normalizers.put(n.frameworkId(), n);\n        }\n    }\n\n    /**\n     * Normalize a framework-specific raw config into the canonical AgentConfig.\n     *\n     * @param framework the framework identifier (e.g. \"openai\", \"google_adk\")\n     * @param rawConfig the raw agent config as deserialized JSON\n     * @return the normalized AgentConfig\n     * @throws IllegalArgumentException if the framework is not supported\n     */\n    public AgentConfig normalize(String framework, Map<String, Object> rawConfig) {\n        AgentConfigNormalizer normalizer = normalizers.get(framework);\n        if (normalizer == null) {\n            throw new IllegalArgumentException(\n                    \"Unsupported agent framework: '\"\n                            + framework\n                            + \"'. Supported frameworks: \"\n                            + normalizers.keySet());\n        }\n        return normalizer.normalize(rawConfig);\n    }\n\n    /** Check whether a given framework is supported. */\n    public boolean supports(String framework) {\n        return normalizers.containsKey(framework);\n    }\n}\n","sourceCodeStart":33,"sourceCodeEnd":65,"githubUrl":"https://github.com/conductor-oss/conductor/blob/cf7c3e4a8adfb158be778ab1ec525323c363cd3a/agentspan/src/main/java/org/conductoross/conductor/ai/agentspan/runtime/normalizer/NormalizerRegistry.java#L33-L65","documentation":"Thrown by NormalizerRegistry.normalize() when the 'framework' parameter does not match any registered AgentConfigNormalizer's frameworkId(). The registry is populated by Spring from all normalizer beans. Supported frameworks are: openai, google_adk, langchain, langgraph, vercel_ai, claude_agent_sdk, skill.","triggerScenarios":"Calling NormalizerRegistry.normalize(framework, rawConfig) with a framework string that is null, misspelled, or not one of the seven registered normalizer IDs. For example framework='open_ai' (with underscore) instead of 'openai', or framework='anthropic' instead of 'claude_agent_sdk'.","commonSituations":"Using the wrong framework identifier string (underscores vs camelCase, wrong casing), referencing a framework by its vendor name instead of its registered ID, or trying to use a framework whose normalizer is not on the classpath (e.g., a custom normalizer bean wasn't registered with Spring).","solutions":["Use one of the exact framework IDs: 'openai', 'google_adk', 'langchain', 'langgraph', 'vercel_ai', 'claude_agent_sdk', or 'skill'.","Check the error message — it prints the full set of supported framework IDs (normalizers.keySet()).","If you need a custom framework, implement AgentConfigNormalizer and register it as a Spring @Component."],"exampleFix":"// before\nregistry.normalize(\"anthropic\", rawConfig);\n// after\nregistry.normalize(\"claude_agent_sdk\", rawConfig);","handlingStrategy":"type-guard","validationCode":"// Use the registry's own supports() method before calling normalize()\nif (!registry.supports(framework)) {\n    throw new IllegalArgumentException(\n        \"Unsupported framework '\" + framework + \"'. Supported: \"\n        + \"openai, google_adk, langchain, langgraph, vercel_ai, claude_agent_sdk, skill\");\n}\nAgentConfig normalized = registry.normalize(framework, rawConfig);","typeGuard":"static boolean isSupportedFramework(NormalizerRegistry registry, String framework) {\n    return framework != null && registry.supports(framework);\n}\n\nstatic final Set<String> KNOWN_FRAMEWORKS = Set.of(\n    \"openai\", \"google_adk\", \"langchain\", \"langgraph\",\n    \"vercel_ai\", \"claude_agent_sdk\", \"skill\");","tryCatchPattern":"try {\n    AgentConfig config = registry.normalize(framework, rawConfig);\n} catch (IllegalArgumentException e) {\n    if (e.getMessage().contains(\"Unsupported agent framework\")) {\n        // pick the correct framework ID from the error's supported list\n    }\n    throw e;\n}","preventionTips":["Always call registry.supports(framework) before normalize() to get a clean error.","Framework IDs are lowercase with underscores — e.g., 'google_adk' not 'GoogleADK'.","The error message includes the full set of supported IDs — read it."],"tags":["normalizer","framework","config-validation","agentspan","spring"],"backgroundTag":null,"analyzedSha":"cf7c3e4a8adfb158be778ab1ec525323c363cd3a","analyzedAt":"2026-08-14T03:33:19.897Z","schemaVersion":2},"datasetVersion":"2026-08-14T05:17:29.042Z"}