{"record":{"id":"5b16cbc3428c90af","repo":"alibaba/nacos","slug":"invalid-agent-version-storage-provider","errorCode":null,"errorMessage":"Invalid Agent Version storage provider","messagePattern":"Invalid Agent Version storage provider","errorType":"validation","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"ai/src/main/java/com/alibaba/nacos/ai/service/agent/storage/AgentVersionStorageDescriptorSerializer.java","lineNumber":159,"sourceCode":"        validateJsonText(root, \"mediaType\", false);\n        validateJsonInteger(root, \"schemaVersion\");\n        validateJsonInteger(root, \"size\");\n    }\n    \n    /**\n     * Validate an Agent Version storage descriptor against the internal storage schema.\n     *\n     * @param descriptor storage descriptor\n     * @throws IllegalArgumentException when the descriptor is invalid\n     */\n    public static void validate(AgentVersionStorageDescriptor descriptor) {\n        if (descriptor == null) {\n            throw new IllegalArgumentException(\"Agent Version storage descriptor must not be null\");\n        }\n        String provider = descriptor.getProvider();\n        if (provider == null || provider.length() > MAX_PROVIDER_LENGTH\n            || !PROVIDER_PATTERN.matcher(provider).matches()) {\n            throw new IllegalArgumentException(\"Invalid Agent Version storage provider\");\n        }\n        validateRequiredText(\"key\", descriptor.getKey(), MAX_KEY_LENGTH);\n        validateOptionalText(\"keyFormat\", descriptor.getKeyFormat(), MAX_FORMAT_LENGTH);\n        validateOptionalText(\"agentNameCodec\", descriptor.getAgentNameCodec(), MAX_FORMAT_LENGTH);\n        if (descriptor.getContentDigest() == null\n            || !DIGEST_PATTERN.matcher(descriptor.getContentDigest()).matches()) {\n            throw new IllegalArgumentException(\"Invalid Agent Version contentDigest\");\n        }\n        if (!AGENT_VERSION_MEDIA_TYPE.equals(descriptor.getMediaType())) {\n            throw new IllegalArgumentException(\"Agent Version mediaType must be \"\n                + AGENT_VERSION_MEDIA_TYPE);\n        }\n        if (!Integer.valueOf(SCHEMA_VERSION).equals(descriptor.getSchemaVersion())) {\n            throw new IllegalArgumentException(\"Agent Version storage schemaVersion must be \"\n                + SCHEMA_VERSION);\n        }\n        Long size = descriptor.getSize();\n        if (size == null || size < 0 || size > MAX_CONTENT_SIZE) {","sourceCodeStart":141,"sourceCodeEnd":177,"githubUrl":"https://github.com/alibaba/nacos/blob/9b989acdf181d00898f2e8839257bb2b2a3cefe3/ai/src/main/java/com/alibaba/nacos/ai/service/agent/storage/AgentVersionStorageDescriptorSerializer.java#L141-L177","documentation":"The provider field is null, longer than 64 characters, or fails the pattern [A-Za-z0-9][A-Za-z0-9_-]{0,63}: it must start with an alphanumeric character and contain only letters, digits, underscore, or hyphen, total length 1-64.","triggerScenarios":"validate()/serialize() on a descriptor whose provider is null, empty, starts with a non-alphanumeric (\"-provider\"), contains a dot (\"a.b\"), or exceeds 64 chars. Also fires on a corrupted storage row.","commonSituations":"A custom storage-provider name containing a dot or space; provider left unset; a hand-edited column with an invalid identifier.","solutions":["Set provider to a valid identifier; the built-in default is 'nacos_config'","Ensure it starts with a letter or digit and uses only [A-Za-z0-9_-]","Keep the length between 1 and 64 characters"],"exampleFix":"// before\ndescriptor.setProvider(\"object.store\");\n// after\ndescriptor.setProvider(\"object_store\");","handlingStrategy":"validation","validationCode":"private static final Pattern PROVIDER = Pattern.compile(\"[A-Za-z0-9][A-Za-z0-9_-]{0,63}\");\nString provider = descriptor.getProvider();\nif (provider == null || !PROVIDER.matcher(provider).matches()) {\n    throw new IllegalArgumentException(\"provider must match [A-Za-z0-9][A-Za-z0-9_-]{0,63}\");\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Use the NACOS_CONFIG_PROVIDER constant for the built-in provider","For custom providers, validate the name against the pattern before constructing the descriptor"],"tags":["java","nacos","ai-agent","validation","storage-descriptor","provider"],"backgroundTag":null,"analyzedSha":"9b989acdf181d00898f2e8839257bb2b2a3cefe3","analyzedAt":"2026-08-14T07:17:31.569Z","schemaVersion":2},"datasetVersion":"2026-08-14T10:17:34.591Z"}