{"record":{"id":"15a0408da83ac4c6","repo":"alibaba/nacos","slug":"agent-draft-must-contain-either-callinterfaces-or","errorCode":null,"errorMessage":"Agent draft must contain either callInterfaces or basedOnVersion","messagePattern":"Agent draft must contain either callInterfaces or basedOnVersion","errorType":"validation","errorClass":"IllegalArgumentException","httpStatus":400,"severity":"error","filePath":"ai/src/main/java/com/alibaba/nacos/ai/service/agent/AgentPersistenceService.java","lineNumber":796,"sourceCode":"            && !namespaceId.equals(draft.getNamespaceId())) {\n            throw new IllegalArgumentException(\"Agent draft namespaceId does not match request\");\n        }\n        if (draft.getAgentName() != null && !agentName.equals(draft.getAgentName())) {\n            throw new IllegalArgumentException(\"Agent draft agentName does not match request\");\n        }\n        if (draft.getStatus() != null\n            && !AiConstants.Agent.VERSION_STATUS_DRAFT.equals(draft.getStatus())) {\n            throw new IllegalArgumentException(\"Agent draft status must be draft\");\n        }\n        if (draft.getContentDigest() != null || draft.getCreateTime() != null\n            || draft.getUpdateTime() != null) {\n            throw new IllegalArgumentException(\n                \"Agent draft must not contain read-only projection fields\");\n        }\n        boolean directContent = draft.getCallInterfaces() != null;\n        boolean copiedContent = StringUtils.isNotBlank(basedOnVersion);\n        if (directContent == copiedContent) {\n            throw new IllegalArgumentException(\n                \"Agent draft must contain either callInterfaces or basedOnVersion\");\n        }\n        if (copiedContent) {\n            AgentValidationUtils.validateVersion(basedOnVersion);\n            if (draft.getVersion().equals(basedOnVersion)) {\n                throw new IllegalArgumentException(\n                    \"Agent draft Version must differ from basedOnVersion\");\n            }\n        }\n    }\n    \n    private AgentVersionDetail normalizeSubsequentDraft(String namespaceId, String agentName,\n        AgentVersionDetail source, List<AgentCallInterface> callInterfaces,\n        AgentVersionStorageDescriptor descriptor) {\n        AgentVersionDetail result = new AgentVersionDetail();\n        result.setNamespaceId(namespaceId);\n        result.setAgentName(agentName);\n        result.setVersion(source.getVersion());","sourceCodeStart":778,"sourceCodeEnd":814,"githubUrl":"https://github.com/alibaba/nacos/blob/9b989acdf181d00898f2e8839257bb2b2a3cefe3/ai/src/main/java/com/alibaba/nacos/ai/service/agent/AgentPersistenceService.java#L778-L814","documentation":"Error \"Agent draft must contain either callInterfaces or basedOnVersion\" thrown in alibaba/nacos.","triggerScenarios":"Thrown at ai/src/main/java/com/alibaba/nacos/ai/service/agent/AgentPersistenceService.java:796 when the library encounters an invalid state.","commonSituations":"Creating a draft with neither callInterfaces nor basedOnVersion set.","solutions":["Review the input and runtime state for agent draft content, correct the reported problem, and retry."],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"9b989acdf181d00898f2e8839257bb2b2a3cefe3","analyzedAt":"2026-08-14T07:17:31.569Z","schemaVersion":2},"datasetVersion":"2026-08-14T10:17:34.591Z"}