Full Code of alibaba/nacos for AI

develop 5ac5c39971e7 cached
4319 files
30.4 MB
4.3M tokens
18017 symbols
1 requests
Copy disabled (too large) Download .txt
Showing preview only (17,293K chars total). Download the full file to get everything.
Repository: alibaba/nacos
Branch: develop
Commit: 5ac5c39971e7
Files: 4319
Total size: 30.4 MB

Directory structure:
gitextract_u6qmkl26/

├── .gitattributes
├── .github/
│   ├── ISSUE_TEMPLATE/
│   │   ├── bug-report.md
│   │   ├── config.yml
│   │   └── feature_request.md
│   ├── ISSUE_TEMPLATE.md
│   ├── PULL_REQUEST_TEMPLATE.md
│   └── workflows/
│       ├── anti-spam.yml
│       ├── ci.yml
│       ├── it.yml
│       ├── pr-ci.yml
│       ├── pr-comment.yml
│       ├── pr-e2e-test.yml
│       ├── push-ci.yaml
│       └── stale.yml
├── .gitignore
├── .mvn/
│   └── wrapper/
│       └── maven-wrapper.properties
├── .travis.yml
├── BUILDING
├── CHANGELOG.md
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── CONTRIBUTING_zh.md
├── LICENSE
├── NOTICE
├── README.md
├── REPORTING-BUGS.md
├── address/
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── alibaba/
│       │   │           └── nacos/
│       │   │               └── address/
│       │   │                   ├── AddressServer.java
│       │   │                   ├── component/
│       │   │                   │   ├── AddressServerGeneratorManager.java
│       │   │                   │   └── AddressServerManager.java
│       │   │                   ├── config/
│       │   │                   │   └── AddressServerSecurityConfiguration.java
│       │   │                   ├── constant/
│       │   │                   │   └── AddressServerConstants.java
│       │   │                   ├── controller/
│       │   │                   │   ├── AddressServerClusterController.java
│       │   │                   │   └── ServerListController.java
│       │   │                   └── misc/
│       │   │                       └── Loggers.java
│       │   └── resources/
│       │       ├── META-INF/
│       │       │   ├── logback/
│       │       │   │   └── nacos-included.xml
│       │       │   └── nacos-default.properties
│       │       └── application.properties
│       └── test/
│           └── java/
│               └── com/
│                   └── alibaba/
│                       └── nacos/
│                           └── address/
│                               ├── component/
│                               │   ├── AddressServerGeneratorManagerTest.java
│                               │   └── AddressServerManagerTests.java
│                               └── controller/
│                                   ├── AddressServerClusterControllerTest.java
│                                   └── ServerListControllerTest.java
├── ai/
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── alibaba/
│       │   │           └── nacos/
│       │   │               └── ai/
│       │   │                   ├── config/
│       │   │                   │   ├── AiEnabledFilter.java
│       │   │                   │   ├── McpCacheIndexProperties.java
│       │   │                   │   ├── McpConfiguration.java
│       │   │                   │   └── McpServerIndexConfiguration.java
│       │   │                   ├── constant/
│       │   │                   │   ├── Constants.java
│       │   │                   │   └── McpServerValidationConstants.java
│       │   │                   ├── controller/
│       │   │                   │   ├── A2aAdminController.java
│       │   │                   │   ├── McpAdminController.java
│       │   │                   │   ├── PromptAdminController.java
│       │   │                   │   ├── PromptClientController.java
│       │   │                   │   └── SkillAdminController.java
│       │   │                   ├── enums/
│       │   │                   │   ├── ExternalDataTypeEnum.java
│       │   │                   │   └── McpImportResultStatusEnum.java
│       │   │                   ├── form/
│       │   │                   │   ├── a2a/
│       │   │                   │   │   └── admin/
│       │   │                   │   │       ├── AgentCardForm.java
│       │   │                   │   │       ├── AgentCardUpdateForm.java
│       │   │                   │   │       ├── AgentForm.java
│       │   │                   │   │       └── AgentListForm.java
│       │   │                   │   ├── mcp/
│       │   │                   │   │   └── admin/
│       │   │                   │   │       ├── McpDetailForm.java
│       │   │                   │   │       ├── McpForm.java
│       │   │                   │   │       ├── McpImportForm.java
│       │   │                   │   │       ├── McpListForm.java
│       │   │                   │   │       └── McpUpdateForm.java
│       │   │                   │   ├── prompt/
│       │   │                   │   │   ├── PromptForm.java
│       │   │                   │   │   ├── PromptHistoryForm.java
│       │   │                   │   │   ├── PromptLabelBindForm.java
│       │   │                   │   │   ├── PromptLabelForm.java
│       │   │                   │   │   ├── PromptListForm.java
│       │   │                   │   │   ├── PromptMetadataForm.java
│       │   │                   │   │   ├── PromptPublishForm.java
│       │   │                   │   │   └── PromptQueryForm.java
│       │   │                   │   └── skills/
│       │   │                   │       └── admin/
│       │   │                   │           ├── SkillDetailForm.java
│       │   │                   │           ├── SkillForm.java
│       │   │                   │           ├── SkillListForm.java
│       │   │                   │           └── SkillUpdateForm.java
│       │   │                   ├── index/
│       │   │                   │   ├── AbstractMcpServerIndex.java
│       │   │                   │   ├── CachedMcpServerIndex.java
│       │   │                   │   ├── McpCacheIndex.java
│       │   │                   │   ├── McpServerIndex.java
│       │   │                   │   ├── MemoryMcpCacheIndex.java
│       │   │                   │   └── PlainMcpServerIndex.java
│       │   │                   ├── model/
│       │   │                   │   └── mcp/
│       │   │                   │       ├── McpServerIndexData.java
│       │   │                   │       ├── McpServerStorageInfo.java
│       │   │                   │       └── UrlPageResult.java
│       │   │                   ├── param/
│       │   │                   │   ├── AgentHttpParamExtractor.java
│       │   │                   │   ├── McpHttpParamExtractor.java
│       │   │                   │   ├── PromptHttpParamExtractor.java
│       │   │                   │   └── SkillHttpParamExtractor.java
│       │   │                   ├── remote/
│       │   │                   │   ├── handler/
│       │   │                   │   │   ├── McpServerEndpointRequestHandler.java
│       │   │                   │   │   ├── QueryMcpServerRequestHandler.java
│       │   │                   │   │   ├── QueryPromptRequestHandler.java
│       │   │                   │   │   ├── ReleaseMcpServerRequestHandler.java
│       │   │                   │   │   └── a2a/
│       │   │                   │   │       ├── AgentEndpointRequestHandler.java
│       │   │                   │   │       ├── BatchAgentEndpointRequestHandler.java
│       │   │                   │   │       ├── QueryAgentCardRequestHandler.java
│       │   │                   │   │       └── ReleaseAgentCardRequestHandler.java
│       │   │                   │   └── manager/
│       │   │                   │       └── AiConnectionBasedClientManager.java
│       │   │                   ├── service/
│       │   │                   │   ├── McpEndpointOperationService.java
│       │   │                   │   ├── McpExternalDataAdaptor.java
│       │   │                   │   ├── McpServerCacheInvalidateService.java
│       │   │                   │   ├── McpServerImportService.java
│       │   │                   │   ├── McpServerOperationService.java
│       │   │                   │   ├── McpServerValidationService.java
│       │   │                   │   ├── McpToolOperationService.java
│       │   │                   │   ├── SimpleSyncEffectService.java
│       │   │                   │   ├── SyncEffectService.java
│       │   │                   │   ├── a2a/
│       │   │                   │   │   ├── A2aServerOperationService.java
│       │   │                   │   │   └── identity/
│       │   │                   │   │       ├── AgentIdCodec.java
│       │   │                   │   │       ├── AgentIdCodecHolder.java
│       │   │                   │   │       └── AsciiAgentIdCodec.java
│       │   │                   │   ├── prompt/
│       │   │                   │   │   ├── PromptAdminOperationService.java
│       │   │                   │   │   ├── PromptAdminOperationServiceImpl.java
│       │   │                   │   │   ├── PromptClientOperationService.java
│       │   │                   │   │   ├── PromptClientOperationServiceImpl.java
│       │   │                   │   │   ├── PromptLabelVersionMappingSnapshot.java
│       │   │                   │   │   ├── PromptMetaCacheInvalidateService.java
│       │   │                   │   │   ├── PromptMetaSnapshot.java
│       │   │                   │   │   └── PromptMetaUtils.java
│       │   │                   │   └── skills/
│       │   │                   │       ├── SkillOperationService.java
│       │   │                   │       └── SkillOperationServiceImpl.java
│       │   │                   └── utils/
│       │   │                       ├── AgentCardUtil.java
│       │   │                       ├── AgentEndpointUtil.java
│       │   │                       ├── AgentRequestUtil.java
│       │   │                       ├── McpConfigUtils.java
│       │   │                       ├── McpRequestUtil.java
│       │   │                       ├── PromptDataIdUtils.java
│       │   │                       ├── PromptVersionUtils.java
│       │   │                       ├── SkillRequestUtil.java
│       │   │                       └── SkillZipParser.java
│       │   └── resources/
│       │       └── META-INF/
│       │           └── services/
│       │               ├── com.alibaba.nacos.ai.service.McpServerOperationService
│       │               ├── com.alibaba.nacos.core.paramcheck.AbstractHttpParamExtractor
│       │               └── com.alibaba.nacos.sys.filter.NacosPackageExcludeFilter
│       └── test/
│           └── java/
│               └── com/
│                   └── alibaba/
│                       └── nacos/
│                           └── ai/
│                               ├── config/
│                               │   ├── AiEnabledFilterTest.java
│                               │   ├── McpCacheIndexPropertiesTest.java
│                               │   ├── McpConfigurationTest.java
│                               │   └── McpServerIndexConfigurationTest.java
│                               ├── controller/
│                               │   ├── A2aAdminControllerTest.java
│                               │   ├── McpAdminControllerTest.java
│                               │   └── PromptClientControllerTest.java
│                               ├── form/
│                               │   ├── a2a/
│                               │   │   └── admin/
│                               │   │       ├── AgentCardFormTest.java
│                               │   │       ├── AgentFormTest.java
│                               │   │       └── AgentListFormTest.java
│                               │   ├── mcp/
│                               │   │   └── admin/
│                               │   │       └── McpImportFormTest.java
│                               │   └── prompt/
│                               │       ├── PromptFormTest.java
│                               │       ├── PromptHistoryFormTest.java
│                               │       ├── PromptLabelBindFormTest.java
│                               │       ├── PromptLabelFormTest.java
│                               │       ├── PromptListFormTest.java
│                               │       └── PromptPublishFormTest.java
│                               ├── index/
│                               │   ├── AbstractMcpServerIndexTest.java
│                               │   ├── CachedMcpServerIndexTest.java
│                               │   ├── McpCachePerformanceTest.java
│                               │   ├── MemoryMcpCacheIndexTest.java
│                               │   └── PlainMcpServerIndexTest.java
│                               ├── param/
│                               │   ├── AgentHttpParamExtractorTest.java
│                               │   └── McpHttpParamExtractorTest.java
│                               ├── remote/
│                               │   ├── handler/
│                               │   │   ├── McpServerEndpointRequestHandlerTest.java
│                               │   │   ├── QueryMcpServerRequestHandlerTest.java
│                               │   │   ├── QueryPromptRequestHandlerTest.java
│                               │   │   ├── ReleaseMcpServerRequestHandlerTest.java
│                               │   │   └── a2a/
│                               │   │       ├── AgentEndpointRequestHandlerTest.java
│                               │   │       ├── BatchAgentEndpointRequestHandlerTest.java
│                               │   │       ├── QueryAgentCardRequestHandlerTest.java
│                               │   │       └── ReleaseAgentCardRequestHandlerTest.java
│                               │   └── manager/
│                               │       └── AiConnectionBasedClientManagerTest.java
│                               ├── service/
│                               │   ├── McpEndpointOperationServiceTest.java
│                               │   ├── McpExternalDataAdaptorTest.java
│                               │   ├── McpServerCacheInvalidateServiceTest.java
│                               │   ├── McpServerImportServiceTest.java
│                               │   ├── McpServerOperationServiceTest.java
│                               │   ├── McpServerValidationServiceTest.java
│                               │   ├── McpToolOperationServiceTest.java
│                               │   ├── SimpleSyncEffectServiceTest.java
│                               │   ├── SyncEffectServiceTest.java
│                               │   ├── a2a/
│                               │   │   ├── A2aServerOperationServiceTest.java
│                               │   │   └── identity/
│                               │   │       ├── AgentIdCodecHolderTest.java
│                               │   │       └── AsciiAgentIdCodecTest.java
│                               │   ├── prompt/
│                               │   │   ├── PromptAdminOperationServiceImplTest.java
│                               │   │   ├── PromptClientOperationServiceImplTest.java
│                               │   │   ├── PromptMetaCacheInvalidateServiceTest.java
│                               │   │   └── PromptMetaUtilsTest.java
│                               │   └── skills/
│                               │       └── SkillOperationServiceImplTest.java
│                               └── utils/
│                                   ├── AgentCardUtilTest.java
│                                   ├── AgentEndpointUtilTest.java
│                                   ├── AgentRequestUtilTest.java
│                                   ├── McpConfigUtilsTest.java
│                                   ├── McpRequestUtilTest.java
│                                   ├── McpRequestUtilsTest.java
│                                   ├── PromptDataIdUtilsTest.java
│                                   └── SkillZipParserTest.java
├── api/
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── alibaba/
│       │   │           └── nacos/
│       │   │               └── api/
│       │   │                   ├── NacosFactory.java
│       │   │                   ├── PropertyKeyConst.java
│       │   │                   ├── SystemPropertyKeyConst.java
│       │   │                   ├── ability/
│       │   │                   │   ├── ClientAbilities.java
│       │   │                   │   ├── ServerAbilities.java
│       │   │                   │   ├── constant/
│       │   │                   │   │   ├── AbilityKey.java
│       │   │                   │   │   ├── AbilityMode.java
│       │   │                   │   │   └── AbilityStatus.java
│       │   │                   │   ├── initializer/
│       │   │                   │   │   ├── AbilityInitializer.java
│       │   │                   │   │   └── AbilityPostProcessor.java
│       │   │                   │   └── register/
│       │   │                   │       ├── AbstractAbilityRegistry.java
│       │   │                   │       └── impl/
│       │   │                   │           ├── ClusterClientAbilities.java
│       │   │                   │           ├── SdkClientAbilities.java
│       │   │                   │           └── ServerAbilities.java
│       │   │                   ├── ai/
│       │   │                   │   ├── A2aService.java
│       │   │                   │   ├── AiFactory.java
│       │   │                   │   ├── AiService.java
│       │   │                   │   ├── constant/
│       │   │                   │   │   └── AiConstants.java
│       │   │                   │   ├── listener/
│       │   │                   │   │   ├── AbstractNacosAgentCardListener.java
│       │   │                   │   │   ├── AbstractNacosMcpServerListener.java
│       │   │                   │   │   ├── AbstractNacosPromptListener.java
│       │   │                   │   │   ├── AbstractNacosSkillListener.java
│       │   │                   │   │   ├── NacosAgentCardEvent.java
│       │   │                   │   │   ├── NacosAiEvent.java
│       │   │                   │   │   ├── NacosAiListener.java
│       │   │                   │   │   ├── NacosMcpServerEvent.java
│       │   │                   │   │   ├── NacosPromptEvent.java
│       │   │                   │   │   └── NacosSkillEvent.java
│       │   │                   │   ├── model/
│       │   │                   │   │   ├── a2a/
│       │   │                   │   │   │   ├── AgentAuthentication.java
│       │   │                   │   │   │   ├── AgentCapabilities.java
│       │   │                   │   │   │   ├── AgentCard.java
│       │   │                   │   │   │   ├── AgentCardBasicInfo.java
│       │   │                   │   │   │   ├── AgentCardDetailInfo.java
│       │   │                   │   │   │   ├── AgentCardVersionInfo.java
│       │   │                   │   │   │   ├── AgentEndpoint.java
│       │   │                   │   │   │   ├── AgentExtension.java
│       │   │                   │   │   │   ├── AgentInterface.java
│       │   │                   │   │   │   ├── AgentProvider.java
│       │   │                   │   │   │   ├── AgentSkill.java
│       │   │                   │   │   │   ├── AgentVersionDetail.java
│       │   │                   │   │   │   └── SecurityScheme.java
│       │   │                   │   │   ├── mcp/
│       │   │                   │   │   │   ├── EncryptObject.java
│       │   │                   │   │   │   ├── FrontEndpointConfig.java
│       │   │                   │   │   │   ├── McpCapability.java
│       │   │                   │   │   │   ├── McpEndpointInfo.java
│       │   │                   │   │   │   ├── McpEndpointSpec.java
│       │   │                   │   │   │   ├── McpServerBasicInfo.java
│       │   │                   │   │   │   ├── McpServerDetailInfo.java
│       │   │                   │   │   │   ├── McpServerImportRequest.java
│       │   │                   │   │   │   ├── McpServerImportResponse.java
│       │   │                   │   │   │   ├── McpServerImportResult.java
│       │   │                   │   │   │   ├── McpServerImportValidationResult.java
│       │   │                   │   │   │   ├── McpServerRemoteServiceConfig.java
│       │   │                   │   │   │   ├── McpServerValidationItem.java
│       │   │                   │   │   │   ├── McpServerVersionInfo.java
│       │   │                   │   │   │   ├── McpServiceRef.java
│       │   │                   │   │   │   ├── McpTool.java
│       │   │                   │   │   │   ├── McpToolAnnotations.java
│       │   │                   │   │   │   ├── McpToolMeta.java
│       │   │                   │   │   │   ├── McpToolSpecification.java
│       │   │                   │   │   │   ├── SecurityScheme.java
│       │   │                   │   │   │   └── registry/
│       │   │                   │   │   │       ├── Argument.java
│       │   │                   │   │   │       ├── Icon.java
│       │   │                   │   │   │       ├── Input.java
│       │   │                   │   │   │       ├── InputWithVariables.java
│       │   │                   │   │   │       ├── KeyValueInput.java
│       │   │                   │   │   │       ├── McpErrorResponse.java
│       │   │                   │   │   │       ├── McpRegistryServerDetail.java
│       │   │                   │   │   │       ├── McpRegistryServerList.java
│       │   │                   │   │   │       ├── McpServerStatusEnum.java
│       │   │                   │   │   │       ├── NamedArgument.java
│       │   │                   │   │   │       ├── OfficialMeta.java
│       │   │                   │   │   │       ├── Package.java
│       │   │                   │   │   │       ├── PositionalArgument.java
│       │   │                   │   │   │       ├── Remote.java
│       │   │                   │   │   │       ├── Repository.java
│       │   │                   │   │   │       ├── ServerResponse.java
│       │   │                   │   │   │       ├── ServerVersionDetail.java
│       │   │                   │   │   │       ├── SseTransport.java
│       │   │                   │   │   │       ├── StdioTransport.java
│       │   │                   │   │   │       └── StreamableHttpTransport.java
│       │   │                   │   │   ├── prompt/
│       │   │                   │   │   │   ├── Prompt.java
│       │   │                   │   │   │   ├── PromptDescriptor.java
│       │   │                   │   │   │   ├── PromptLabelVersionMapping.java
│       │   │                   │   │   │   ├── PromptMetaInfo.java
│       │   │                   │   │   │   ├── PromptMetaSummary.java
│       │   │                   │   │   │   ├── PromptVariable.java
│       │   │                   │   │   │   ├── PromptVersionInfo.java
│       │   │                   │   │   │   └── PromptVersionSummary.java
│       │   │                   │   │   └── skills/
│       │   │                   │   │       ├── Skill.java
│       │   │                   │   │       ├── SkillBasicInfo.java
│       │   │                   │   │       ├── SkillResource.java
│       │   │                   │   │       └── SkillUtils.java
│       │   │                   │   └── remote/
│       │   │                   │       ├── AiRemoteConstants.java
│       │   │                   │       ├── request/
│       │   │                   │       │   ├── AbstractAgentRequest.java
│       │   │                   │       │   ├── AbstractMcpRequest.java
│       │   │                   │       │   ├── AbstractPromptRequest.java
│       │   │                   │       │   ├── AgentEndpointRequest.java
│       │   │                   │       │   ├── BatchAgentEndpointRequest.java
│       │   │                   │       │   ├── McpServerEndpointRequest.java
│       │   │                   │       │   ├── QueryAgentCardRequest.java
│       │   │                   │       │   ├── QueryMcpServerRequest.java
│       │   │                   │       │   ├── QueryPromptRequest.java
│       │   │                   │       │   ├── ReleaseAgentCardRequest.java
│       │   │                   │       │   └── ReleaseMcpServerRequest.java
│       │   │                   │       └── response/
│       │   │                   │           ├── AgentEndpointResponse.java
│       │   │                   │           ├── McpServerEndpointResponse.java
│       │   │                   │           ├── QueryAgentCardResponse.java
│       │   │                   │           ├── QueryMcpServerResponse.java
│       │   │                   │           ├── QueryPromptResponse.java
│       │   │                   │           ├── ReleaseAgentCardResponse.java
│       │   │                   │           └── ReleaseMcpServerResponse.java
│       │   │                   ├── annotation/
│       │   │                   │   ├── NacosApi.java
│       │   │                   │   ├── NacosInjected.java
│       │   │                   │   └── NacosProperties.java
│       │   │                   ├── cmdb/
│       │   │                   │   ├── pojo/
│       │   │                   │   │   ├── Entity.java
│       │   │                   │   │   ├── EntityEvent.java
│       │   │                   │   │   ├── EntityEventType.java
│       │   │                   │   │   ├── Label.java
│       │   │                   │   │   └── PreservedEntityTypes.java
│       │   │                   │   └── spi/
│       │   │                   │       └── CmdbService.java
│       │   │                   ├── common/
│       │   │                   │   ├── Constants.java
│       │   │                   │   ├── NodeState.java
│       │   │                   │   └── ResponseCode.java
│       │   │                   ├── config/
│       │   │                   │   ├── ConfigChangeEvent.java
│       │   │                   │   ├── ConfigChangeItem.java
│       │   │                   │   ├── ConfigFactory.java
│       │   │                   │   ├── ConfigQueryResult.java
│       │   │                   │   ├── ConfigService.java
│       │   │                   │   ├── ConfigType.java
│       │   │                   │   ├── PropertyChangeType.java
│       │   │                   │   ├── ability/
│       │   │                   │   │   ├── ClientConfigAbility.java
│       │   │                   │   │   └── ServerConfigAbility.java
│       │   │                   │   ├── annotation/
│       │   │                   │   │   ├── NacosConfigListener.java
│       │   │                   │   │   ├── NacosConfigurationProperties.java
│       │   │                   │   │   ├── NacosIgnore.java
│       │   │                   │   │   ├── NacosProperty.java
│       │   │                   │   │   └── NacosValue.java
│       │   │                   │   ├── convert/
│       │   │                   │   │   └── NacosConfigConverter.java
│       │   │                   │   ├── filter/
│       │   │                   │   │   ├── AbstractConfigFilter.java
│       │   │                   │   │   ├── IConfigContext.java
│       │   │                   │   │   ├── IConfigFilter.java
│       │   │                   │   │   ├── IConfigFilterChain.java
│       │   │                   │   │   ├── IConfigRequest.java
│       │   │                   │   │   └── IConfigResponse.java
│       │   │                   │   ├── listener/
│       │   │                   │   │   ├── AbstractFuzzyWatchEventWatcher.java
│       │   │                   │   │   ├── AbstractListener.java
│       │   │                   │   │   ├── AbstractSharedListener.java
│       │   │                   │   │   ├── ConfigChangeParser.java
│       │   │                   │   │   ├── ConfigFuzzyWatchChangeEvent.java
│       │   │                   │   │   ├── FuzzyWatchEventWatcher.java
│       │   │                   │   │   ├── FuzzyWatchLoadWatcher.java
│       │   │                   │   │   └── Listener.java
│       │   │                   │   ├── model/
│       │   │                   │   │   ├── ConfigBasicInfo.java
│       │   │                   │   │   ├── ConfigCloneInfo.java
│       │   │                   │   │   ├── ConfigDetailInfo.java
│       │   │                   │   │   ├── ConfigGrayInfo.java
│       │   │                   │   │   ├── ConfigHistoryBasicInfo.java
│       │   │                   │   │   ├── ConfigHistoryDetailInfo.java
│       │   │                   │   │   ├── ConfigListenerInfo.java
│       │   │                   │   │   └── SameConfigPolicy.java
│       │   │                   │   └── remote/
│       │   │                   │       ├── request/
│       │   │                   │       │   ├── AbstractConfigRequest.java
│       │   │                   │       │   ├── AbstractFuzzyWatchNotifyRequest.java
│       │   │                   │       │   ├── ClientConfigMetricRequest.java
│       │   │                   │       │   ├── ConfigBatchListenRequest.java
│       │   │                   │       │   ├── ConfigChangeNotifyRequest.java
│       │   │                   │       │   ├── ConfigFuzzyWatchChangeNotifyRequest.java
│       │   │                   │       │   ├── ConfigFuzzyWatchRequest.java
│       │   │                   │       │   ├── ConfigFuzzyWatchSyncRequest.java
│       │   │                   │       │   ├── ConfigPublishRequest.java
│       │   │                   │       │   ├── ConfigQueryRequest.java
│       │   │                   │       │   ├── ConfigRemoveRequest.java
│       │   │                   │       │   └── cluster/
│       │   │                   │       │       └── ConfigChangeClusterSyncRequest.java
│       │   │                   │       └── response/
│       │   │                   │           ├── ClientConfigMetricResponse.java
│       │   │                   │           ├── ConfigChangeBatchListenResponse.java
│       │   │                   │           ├── ConfigChangeNotifyResponse.java
│       │   │                   │           ├── ConfigFuzzyWatchChangeNotifyResponse.java
│       │   │                   │           ├── ConfigFuzzyWatchResponse.java
│       │   │                   │           ├── ConfigFuzzyWatchSyncResponse.java
│       │   │                   │           ├── ConfigPublishResponse.java
│       │   │                   │           ├── ConfigQueryResponse.java
│       │   │                   │           ├── ConfigRemoveResponse.java
│       │   │                   │           └── cluster/
│       │   │                   │               └── ConfigChangeClusterSyncResponse.java
│       │   │                   ├── exception/
│       │   │                   │   ├── NacosException.java
│       │   │                   │   ├── api/
│       │   │                   │   │   └── NacosApiException.java
│       │   │                   │   └── runtime/
│       │   │                   │       ├── NacosDeserializationException.java
│       │   │                   │       ├── NacosLoadException.java
│       │   │                   │       ├── NacosRuntimeException.java
│       │   │                   │       └── NacosSerializationException.java
│       │   │                   ├── grpc/
│       │   │                   │   └── auto/
│       │   │                   │       ├── BiRequestStreamGrpc.java
│       │   │                   │       ├── Metadata.java
│       │   │                   │       ├── MetadataOrBuilder.java
│       │   │                   │       ├── NacosGrpcService.java
│       │   │                   │       ├── Payload.java
│       │   │                   │       ├── PayloadOrBuilder.java
│       │   │                   │       └── RequestGrpc.java
│       │   │                   ├── lock/
│       │   │                   │   ├── LockService.java
│       │   │                   │   ├── NacosLockFactory.java
│       │   │                   │   ├── common/
│       │   │                   │   │   └── LockConstants.java
│       │   │                   │   ├── constant/
│       │   │                   │   │   └── PropertyConstants.java
│       │   │                   │   ├── model/
│       │   │                   │   │   └── LockInstance.java
│       │   │                   │   └── remote/
│       │   │                   │       ├── AbstractLockRequest.java
│       │   │                   │       ├── LockOperationEnum.java
│       │   │                   │       ├── request/
│       │   │                   │       │   └── LockOperationRequest.java
│       │   │                   │       └── response/
│       │   │                   │           └── LockOperationResponse.java
│       │   │                   ├── model/
│       │   │                   │   ├── NacosForm.java
│       │   │                   │   ├── Page.java
│       │   │                   │   ├── response/
│       │   │                   │   │   ├── ConnectionInfo.java
│       │   │                   │   │   ├── ConnectionMetaInfo.java
│       │   │                   │   │   ├── IdGeneratorInfo.java
│       │   │                   │   │   ├── NacosMember.java
│       │   │                   │   │   ├── Namespace.java
│       │   │                   │   │   ├── ServerLoaderMetric.java
│       │   │                   │   │   └── ServerLoaderMetrics.java
│       │   │                   │   └── v2/
│       │   │                   │       ├── ErrorCode.java
│       │   │                   │       ├── Result.java
│       │   │                   │       └── SupportedLanguage.java
│       │   │                   ├── naming/
│       │   │                   │   ├── CommonParams.java
│       │   │                   │   ├── NamingFactory.java
│       │   │                   │   ├── NamingMaintainFactory.java
│       │   │                   │   ├── NamingMaintainService.java
│       │   │                   │   ├── NamingResponseCode.java
│       │   │                   │   ├── NamingService.java
│       │   │                   │   ├── PreservedMetadataKeys.java
│       │   │                   │   ├── ability/
│       │   │                   │   │   ├── ClientNamingAbility.java
│       │   │                   │   │   └── ServerNamingAbility.java
│       │   │                   │   ├── listener/
│       │   │                   │   │   ├── AbstractEventListener.java
│       │   │                   │   │   ├── AbstractFuzzyWatchEventWatcher.java
│       │   │                   │   │   ├── Event.java
│       │   │                   │   │   ├── EventListener.java
│       │   │                   │   │   ├── FuzzyWatchChangeEvent.java
│       │   │                   │   │   ├── FuzzyWatchEventWatcher.java
│       │   │                   │   │   ├── FuzzyWatchLoadWatcher.java
│       │   │                   │   │   └── NamingEvent.java
│       │   │                   │   ├── pojo/
│       │   │                   │   │   ├── Cluster.java
│       │   │                   │   │   ├── Instance.java
│       │   │                   │   │   ├── ListView.java
│       │   │                   │   │   ├── Service.java
│       │   │                   │   │   ├── ServiceInfo.java
│       │   │                   │   │   ├── builder/
│       │   │                   │   │   │   └── InstanceBuilder.java
│       │   │                   │   │   ├── healthcheck/
│       │   │                   │   │   │   ├── AbstractHealthChecker.java
│       │   │                   │   │   │   ├── HealthCheckType.java
│       │   │                   │   │   │   ├── HealthCheckerFactory.java
│       │   │                   │   │   │   └── impl/
│       │   │                   │   │   │       ├── Http.java
│       │   │                   │   │   │       ├── Mysql.java
│       │   │                   │   │   │       └── Tcp.java
│       │   │                   │   │   └── maintainer/
│       │   │                   │   │       ├── ClientPublisherInfo.java
│       │   │                   │   │       ├── ClientServiceInfo.java
│       │   │                   │   │       ├── ClientSubscriberInfo.java
│       │   │                   │   │       ├── ClientSummaryInfo.java
│       │   │                   │   │       ├── ClusterInfo.java
│       │   │                   │   │       ├── InstanceMetadataBatchResult.java
│       │   │                   │   │       ├── MetricsInfo.java
│       │   │                   │   │       ├── ServiceDetailInfo.java
│       │   │                   │   │       ├── ServiceView.java
│       │   │                   │   │       └── SubscriberInfo.java
│       │   │                   │   ├── remote/
│       │   │                   │   │   ├── NamingRemoteConstants.java
│       │   │                   │   │   ├── request/
│       │   │                   │   │   │   ├── AbstractFuzzyWatchNotifyRequest.java
│       │   │                   │   │   │   ├── AbstractNamingRequest.java
│       │   │                   │   │   │   ├── BatchInstanceRequest.java
│       │   │                   │   │   │   ├── InstanceRequest.java
│       │   │                   │   │   │   ├── NamingFuzzyWatchChangeNotifyRequest.java
│       │   │                   │   │   │   ├── NamingFuzzyWatchRequest.java
│       │   │                   │   │   │   ├── NamingFuzzyWatchSyncRequest.java
│       │   │                   │   │   │   ├── NotifySubscriberRequest.java
│       │   │                   │   │   │   ├── PersistentInstanceRequest.java
│       │   │                   │   │   │   ├── ServiceListRequest.java
│       │   │                   │   │   │   ├── ServiceQueryRequest.java
│       │   │                   │   │   │   └── SubscribeServiceRequest.java
│       │   │                   │   │   └── response/
│       │   │                   │   │       ├── BatchInstanceResponse.java
│       │   │                   │   │       ├── InstanceResponse.java
│       │   │                   │   │       ├── NamingFuzzyWatchChangeNotifyResponse.java
│       │   │                   │   │       ├── NamingFuzzyWatchResponse.java
│       │   │                   │   │       ├── NamingFuzzyWatchSyncResponse.java
│       │   │                   │   │       ├── NotifySubscriberResponse.java
│       │   │                   │   │       ├── QueryServiceResponse.java
│       │   │                   │   │       ├── ServiceListResponse.java
│       │   │                   │   │       └── SubscribeServiceResponse.java
│       │   │                   │   ├── selector/
│       │   │                   │   │   ├── NamingContext.java
│       │   │                   │   │   ├── NamingResult.java
│       │   │                   │   │   └── NamingSelector.java
│       │   │                   │   ├── spi/
│       │   │                   │   │   └── generator/
│       │   │                   │   │       └── InstanceIdGenerator.java
│       │   │                   │   └── utils/
│       │   │                   │       └── NamingUtils.java
│       │   │                   ├── plugin/
│       │   │                   │   ├── ConfigItemDefinition.java
│       │   │                   │   ├── ConfigItemType.java
│       │   │                   │   ├── PluginConfigSpec.java
│       │   │                   │   ├── PluginProvider.java
│       │   │                   │   ├── PluginStateChecker.java
│       │   │                   │   ├── PluginStateCheckerHolder.java
│       │   │                   │   └── PluginType.java
│       │   │                   ├── remote/
│       │   │                   │   ├── AbstractPushCallBack.java
│       │   │                   │   ├── AbstractRequestCallBack.java
│       │   │                   │   ├── DefaultRequestFuture.java
│       │   │                   │   ├── Payload.java
│       │   │                   │   ├── PushCallBack.java
│       │   │                   │   ├── RemoteConstants.java
│       │   │                   │   ├── RequestCallBack.java
│       │   │                   │   ├── RequestFuture.java
│       │   │                   │   ├── Requester.java
│       │   │                   │   ├── RpcScheduledExecutor.java
│       │   │                   │   ├── ability/
│       │   │                   │   │   ├── ClientRemoteAbility.java
│       │   │                   │   │   └── ServerRemoteAbility.java
│       │   │                   │   ├── request/
│       │   │                   │   │   ├── ClientDetectionRequest.java
│       │   │                   │   │   ├── ConnectResetRequest.java
│       │   │                   │   │   ├── ConnectionSetupRequest.java
│       │   │                   │   │   ├── HealthCheckRequest.java
│       │   │                   │   │   ├── InternalRequest.java
│       │   │                   │   │   ├── PushAckRequest.java
│       │   │                   │   │   ├── Request.java
│       │   │                   │   │   ├── RequestMeta.java
│       │   │                   │   │   ├── ServerCheckRequest.java
│       │   │                   │   │   ├── ServerLoaderInfoRequest.java
│       │   │                   │   │   ├── ServerReloadRequest.java
│       │   │                   │   │   ├── ServerRequest.java
│       │   │                   │   │   └── SetupAckRequest.java
│       │   │                   │   └── response/
│       │   │                   │       ├── ClientDetectionResponse.java
│       │   │                   │       ├── ConnectResetResponse.java
│       │   │                   │       ├── ErrorResponse.java
│       │   │                   │       ├── HealthCheckResponse.java
│       │   │                   │       ├── Response.java
│       │   │                   │       ├── ResponseCode.java
│       │   │                   │       ├── ServerCheckResponse.java
│       │   │                   │       ├── ServerLoaderInfoResponse.java
│       │   │                   │       ├── ServerReloadResponse.java
│       │   │                   │       └── SetupAckResponse.java
│       │   │                   ├── selector/
│       │   │                   │   ├── AbstractCmdbSelector.java
│       │   │                   │   ├── AbstractSelector.java
│       │   │                   │   ├── ExpressionSelector.java
│       │   │                   │   ├── NoneSelector.java
│       │   │                   │   ├── Selector.java
│       │   │                   │   ├── SelectorType.java
│       │   │                   │   ├── client/
│       │   │                   │   │   ├── SelectResult.java
│       │   │                   │   │   └── Selector.java
│       │   │                   │   └── context/
│       │   │                   │       ├── CmdbContext.java
│       │   │                   │       └── SelectorContextBuilder.java
│       │   │                   └── utils/
│       │   │                       ├── NetUtils.java
│       │   │                       └── StringUtils.java
│       │   ├── proto/
│       │   │   └── nacos_grpc_service.proto
│       │   └── resources/
│       │       └── META-INF/
│       │           └── services/
│       │               └── com.alibaba.nacos.api.remote.Payload
│       └── test/
│           └── java/
│               └── com/
│                   └── alibaba/
│                       └── nacos/
│                           ├── api/
│                           │   ├── NacosFactoryTest.java
│                           │   ├── ability/
│                           │   │   ├── ClientAbilitiesTest.java
│                           │   │   ├── ServerAbilitiesTest.java
│                           │   │   └── register/
│                           │   │       └── impl/
│                           │   │           ├── ClusterClientAbilitiesTest.java
│                           │   │           ├── SdkClientAbilitiesTest.java
│                           │   │           └── ServerAbilitiesTest.java
│                           │   ├── ai/
│                           │   │   ├── A2aServiceDefaultMethodTest.java
│                           │   │   ├── AiFactoryTest.java
│                           │   │   ├── constant/
│                           │   │   │   └── AiConstantsStatusMappingTest.java
│                           │   │   ├── listener/
│                           │   │   │   ├── NacosAgentCardEventTest.java
│                           │   │   │   ├── NacosAiListenerDefaultMethodTest.java
│                           │   │   │   └── NacosMcpServerEventTest.java
│                           │   │   ├── model/
│                           │   │   │   ├── a2a/
│                           │   │   │   │   ├── AgentAuthenticationTest.java
│                           │   │   │   │   ├── AgentCapabilitiesTest.java
│                           │   │   │   │   ├── AgentCardBasicInfoTest.java
│                           │   │   │   │   ├── AgentCardDetailInfoTest.java
│                           │   │   │   │   ├── AgentCardTest.java
│                           │   │   │   │   ├── AgentCardVersionInfoTest.java
│                           │   │   │   │   ├── AgentEndpointTest.java
│                           │   │   │   │   ├── AgentExtensionTest.java
│                           │   │   │   │   ├── AgentInterfaceTest.java
│                           │   │   │   │   ├── AgentProviderTest.java
│                           │   │   │   │   ├── AgentSkillTest.java
│                           │   │   │   │   ├── AgentVersionDetailTest.java
│                           │   │   │   │   └── SecuritySchemeTest.java
│                           │   │   │   ├── mcp/
│                           │   │   │   │   ├── EncryptObjectTest.java
│                           │   │   │   │   ├── FrontEndpointConfigTest.java
│                           │   │   │   │   ├── McpCapabilityTest.java
│                           │   │   │   │   ├── McpEndpointInfoTest.java
│                           │   │   │   │   ├── McpEndpointSpecTest.java
│                           │   │   │   │   ├── McpServerBasicInfoEnhancedFieldsTest.java
│                           │   │   │   │   ├── McpServerBasicInfoTest.java
│                           │   │   │   │   ├── McpServerDetailInfoTest.java
│                           │   │   │   │   ├── McpServerImportRequestTest.java
│                           │   │   │   │   ├── McpServerImportResponseTest.java
│                           │   │   │   │   ├── McpServerImportResultTest.java
│                           │   │   │   │   ├── McpServerImportValidationResultTest.java
│                           │   │   │   │   ├── McpServerRemoteServiceConfigTest.java
│                           │   │   │   │   ├── McpServerValidationItemTest.java
│                           │   │   │   │   ├── McpServerVersionInfoTest.java
│                           │   │   │   │   ├── McpServiceRefTest.java
│                           │   │   │   │   ├── McpToolMetaTest.java
│                           │   │   │   │   ├── McpToolSpecificationTest.java
│                           │   │   │   │   ├── McpToolTest.java
│                           │   │   │   │   ├── SecuritySchemeTest.java
│                           │   │   │   │   └── registry/
│                           │   │   │   │       ├── IconTest.java
│                           │   │   │   │       ├── InputTest.java
│                           │   │   │   │       ├── InputWithVariablesTest.java
│                           │   │   │   │       ├── KeyValueInputTest.java
│                           │   │   │   │       ├── McpErrorResponseTest.java
│                           │   │   │   │       ├── McpRegistryServerListTest.java
│                           │   │   │   │       ├── McpServerStatusEnumTest.java
│                           │   │   │   │       ├── MetaTest.java
│                           │   │   │   │       ├── NacosMcpRegistryServerDetailTest.java
│                           │   │   │   │       ├── NamedArgumentTest.java
│                           │   │   │   │       ├── OfficialMetaTest.java
│                           │   │   │   │       ├── PackageTest.java
│                           │   │   │   │       ├── PackageTransportTest.java
│                           │   │   │   │       ├── PositionalArgumentTest.java
│                           │   │   │   │       ├── RemoteTest.java
│                           │   │   │   │       ├── RepositoryTest.java
│                           │   │   │   │       ├── ServerResponseTest.java
│                           │   │   │   │       ├── ServerVersionDetailTest.java
│                           │   │   │   │       └── TransportTest.java
│                           │   │   │   └── skills/
│                           │   │   │       └── SkillUtilsTest.java
│                           │   │   └── remote/
│                           │   │       ├── request/
│                           │   │       │   ├── AbstractAgentRequestTest.java
│                           │   │       │   ├── AgentEndpointRequestTest.java
│                           │   │       │   ├── BatchAgentEndpointRequestTest.java
│                           │   │       │   ├── McpServerEndpointRequestTest.java
│                           │   │       │   ├── QueryAgentCardRequestTest.java
│                           │   │       │   ├── QueryMcpServerRequestTest.java
│                           │   │       │   ├── ReleaseAgentCardRequestTest.java
│                           │   │       │   └── ReleaseMcpServerRequestTest.java
│                           │   │       └── response/
│                           │   │           ├── AgentEndpointResponseTest.java
│                           │   │           ├── McpServerEndpointResponseTest.java
│                           │   │           ├── QueryAgentCardResponseTest.java
│                           │   │           ├── QueryMcpServerResponseTest.java
│                           │   │           ├── ReleaseAgentCardResponseTest.java
│                           │   │           └── ReleaseMcpServerResponseTest.java
│                           │   ├── annotation/
│                           │   │   └── NacosPropertiesTest.java
│                           │   ├── cmdb/
│                           │   │   └── pojo/
│                           │   │       ├── EntityEventTest.java
│                           │   │       ├── EntityTest.java
│                           │   │       └── LabelTest.java
│                           │   ├── config/
│                           │   │   ├── ConfigChangeEventTest.java
│                           │   │   ├── ConfigChangeItemTest.java
│                           │   │   ├── ConfigFactoryTest.java
│                           │   │   ├── ConfigTypeTest.java
│                           │   │   ├── ability/
│                           │   │   │   ├── ClientRemoteAbilityTest.java
│                           │   │   │   ├── ServerConfigAbilityTest.java
│                           │   │   │   └── ServerRemoteAbilityTest.java
│                           │   │   ├── listener/
│                           │   │   │   ├── AbstractFuzzyWatchEventWatcherTest.java
│                           │   │   │   ├── AbstractListenerTest.java
│                           │   │   │   ├── AbstractSharedListenerTest.java
│                           │   │   │   └── ConfigFuzzyWatchChangeEventTest.java
│                           │   │   ├── model/
│                           │   │   │   ├── ConfigCloneInfoTest.java
│                           │   │   │   ├── ConfigHistoryInfoTest.java
│                           │   │   │   ├── ConfigInfoTest.java
│                           │   │   │   ├── ConfigListenerInfoTest.java
│                           │   │   │   └── SameConfigPolicyTest.java
│                           │   │   └── remote/
│                           │   │       ├── request/
│                           │   │       │   ├── BasedConfigRequestTest.java
│                           │   │       │   ├── ClientConfigMetricRequestTest.java
│                           │   │       │   ├── ConfigBatchListenRequestTest.java
│                           │   │       │   ├── ConfigChangeNotifyRequestTest.java
│                           │   │       │   ├── ConfigFuzzyWatchChangeNotifyRequestTest.java
│                           │   │       │   ├── ConfigFuzzyWatchRequestTest.java
│                           │   │       │   ├── ConfigFuzzyWatchSyncRequestTest.java
│                           │   │       │   ├── ConfigPublishRequestTest.java
│                           │   │       │   ├── ConfigQueryRequestTest.java
│                           │   │       │   ├── ConfigRemoveRequestTest.java
│                           │   │       │   └── cluster/
│                           │   │       │       └── ConfigChangeClusterSyncRequestTest.java
│                           │   │       └── response/
│                           │   │           ├── BasedConfigResponseTest.java
│                           │   │           ├── ClientConfigMetricResponseTest.java
│                           │   │           ├── ConfigChangeBatchListenResponseTest.java
│                           │   │           ├── ConfigChangeNotifyResponseTest.java
│                           │   │           ├── ConfigPublishResponseTest.java
│                           │   │           ├── ConfigQueryResponseTest.java
│                           │   │           ├── ConfigRemoveResponseTest.java
│                           │   │           └── cluster/
│                           │   │               └── ConfigChangeClusterSyncResponseTest.java
│                           │   ├── exception/
│                           │   │   ├── NacosExceptionTest.java
│                           │   │   ├── api/
│                           │   │   │   └── NacosApiExceptionTest.java
│                           │   │   └── runtime/
│                           │   │       ├── NacosDeserializationExceptionTest.java
│                           │   │       ├── NacosLoadExceptionTest.java
│                           │   │       ├── NacosRuntimeExceptionTest.java
│                           │   │       └── NacosSerializationExceptionTest.java
│                           │   ├── lock/
│                           │   │   ├── NacosLockFactoryTest.java
│                           │   │   ├── model/
│                           │   │   │   └── LockInstanceTest.java
│                           │   │   └── remote/
│                           │   │       ├── request/
│                           │   │       │   └── LockOperationRequestTest.java
│                           │   │       └── response/
│                           │   │           └── LockOperationResponseTest.java
│                           │   ├── model/
│                           │   │   ├── PageTest.java
│                           │   │   ├── response/
│                           │   │   │   ├── ConnectionInfoTest.java
│                           │   │   │   ├── InstanceIdGeneratorInfoTest.java
│                           │   │   │   ├── NacosMemberTest.java
│                           │   │   │   ├── NamespaceTest.java
│                           │   │   │   └── ServerLoaderMetricsTest.java
│                           │   │   └── v2/
│                           │   │       ├── ErrorCodeTest.java
│                           │   │       ├── ResultTest.java
│                           │   │       └── SupportedLanguageTest.java
│                           │   ├── naming/
│                           │   │   ├── NamingFactoryTest.java
│                           │   │   ├── ability/
│                           │   │   │   ├── ClientNamingAbilityTest.java
│                           │   │   │   └── ServerNamingAbilityTest.java
│                           │   │   ├── listener/
│                           │   │   │   ├── AbstractFuzzyWatchEventWatcherTest.java
│                           │   │   │   ├── FuzzyWatchChangeEventTest.java
│                           │   │   │   └── NamingEventTest.java
│                           │   │   ├── pojo/
│                           │   │   │   ├── ClusterTest.java
│                           │   │   │   ├── InstanceTest.java
│                           │   │   │   ├── ListViewTest.java
│                           │   │   │   ├── ServiceInfoTest.java
│                           │   │   │   ├── ServiceTest.java
│                           │   │   │   ├── builder/
│                           │   │   │   │   └── InstanceBuilderTest.java
│                           │   │   │   ├── healthcheck/
│                           │   │   │   │   ├── AbstractHealthCheckerTest.java
│                           │   │   │   │   ├── HealthCheckTypeTest.java
│                           │   │   │   │   ├── HealthCheckerFactoryTest.java
│                           │   │   │   │   ├── TestChecker.java
│                           │   │   │   │   └── impl/
│                           │   │   │   │       ├── HttpTest.java
│                           │   │   │   │       ├── MysqlTest.java
│                           │   │   │   │       └── TcpTest.java
│                           │   │   │   └── maintainer/
│                           │   │   │       ├── ClientPublisherInfoTest.java
│                           │   │   │       ├── ClientServiceInfoTest.java
│                           │   │   │       ├── ClientSubscriberInfoTest.java
│                           │   │   │       ├── ClientSummaryInfoTest.java
│                           │   │   │       ├── ClusterInfoTest.java
│                           │   │   │       ├── InstanceMetadataBatchResultTest.java
│                           │   │   │       ├── MetricsInfoTest.java
│                           │   │   │       ├── ServiceDetailInfoTest.java
│                           │   │   │       ├── ServiceViewTest.java
│                           │   │   │       └── SubscriberInfoTest.java
│                           │   │   ├── remote/
│                           │   │   │   ├── request/
│                           │   │   │   │   ├── BasedNamingRequestTest.java
│                           │   │   │   │   ├── BatchInstanceRequestTest.java
│                           │   │   │   │   ├── InstanceRequestTest.java
│                           │   │   │   │   ├── NamingFuzzyWatchChangeNotifyRequestTest.java
│                           │   │   │   │   ├── NamingFuzzyWatchRequestTest.java
│                           │   │   │   │   ├── NamingFuzzyWatchSyncRequestTest.java
│                           │   │   │   │   ├── NotifySubscriberRequestTest.java
│                           │   │   │   │   ├── PersistentInstanceRequestTest.java
│                           │   │   │   │   ├── ServiceListRequestTest.java
│                           │   │   │   │   ├── ServiceQueryRequestTest.java
│                           │   │   │   │   └── SubscribeServiceRequestTest.java
│                           │   │   │   └── response/
│                           │   │   │       ├── BatchInstanceResponseTest.java
│                           │   │   │       ├── InstanceResponseTest.java
│                           │   │   │       ├── NamingFuzzyWatchChangeNotifyResponseTest.java
│                           │   │   │       ├── NamingFuzzyWatchResponseTest.java
│                           │   │   │       ├── NamingFuzzyWatchSyncResponseTest.java
│                           │   │   │       ├── NotifySubscriberResponseTest.java
│                           │   │   │       ├── QueryServiceResponseTest.java
│                           │   │   │       ├── ServiceListResponseTest.java
│                           │   │   │       └── SubscribeServiceResponseTest.java
│                           │   │   └── utils/
│                           │   │       └── NamingUtilsTest.java
│                           │   ├── remote/
│                           │   │   ├── AbstractPushCallBackTest.java
│                           │   │   ├── AbstractRequestCallBackTest.java
│                           │   │   ├── DefaultRequestFutureTest.java
│                           │   │   ├── RpcScheduledExecutorTest.java
│                           │   │   ├── ability/
│                           │   │   │   ├── ClientRemoteAbilityTest.java
│                           │   │   │   └── ServerRemoteAbilityTest.java
│                           │   │   ├── request/
│                           │   │   │   ├── BasicRequestTest.java
│                           │   │   │   ├── ConnectResetRequestTest.java
│                           │   │   │   ├── ConnectionSetupRequestTest.java
│                           │   │   │   ├── EmptyContentRequestTest.java
│                           │   │   │   ├── PushAckRequestTest.java
│                           │   │   │   ├── RequestMetaTest.java
│                           │   │   │   ├── RequestTest.java
│                           │   │   │   ├── ServerReloadRequestTest.java
│                           │   │   │   └── SetupAckRequestTest.java
│                           │   │   └── response/
│                           │   │       ├── EmptyContentResponseTest.java
│                           │   │       ├── ErrorResponseTest.java
│                           │   │       ├── ServerCheckResponseTest.java
│                           │   │       └── ServerLoaderInfoResponseTest.java
│                           │   ├── selector/
│                           │   │   ├── AbstractCmdbSelectorTest.java
│                           │   │   ├── ExpressionSelectorTest.java
│                           │   │   ├── NoneSelectorTest.java
│                           │   │   └── context/
│                           │   │       └── CmdbContextTest.java
│                           │   └── utils/
│                           │       ├── AbilityKeyTest.java
│                           │       ├── NetUtilsTest.java
│                           │       └── StringUtilsTest.java
│                           └── client/
│                               ├── ai/
│                               │   └── NacosAiService.java
│                               ├── config/
│                               │   └── NacosConfigService.java
│                               ├── lock/
│                               │   └── NacosLockService.java
│                               └── naming/
│                                   └── NacosNamingService.java
├── auth/
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── alibaba/
│       │               └── nacos/
│       │                   └── auth/
│       │                       ├── AbstractProtocolAuthService.java
│       │                       ├── GrpcProtocolAuthService.java
│       │                       ├── HttpProtocolAuthService.java
│       │                       ├── ProtocolAuthService.java
│       │                       ├── annotation/
│       │                       │   └── Secured.java
│       │                       ├── config/
│       │                       │   ├── AuthErrorCode.java
│       │                       │   ├── NacosAuthConfig.java
│       │                       │   └── NacosAuthConfigHolder.java
│       │                       ├── context/
│       │                       │   ├── GrpcIdentityContextBuilder.java
│       │                       │   ├── HttpIdentityContextBuilder.java
│       │                       │   └── IdentityContextBuilder.java
│       │                       ├── parser/
│       │                       │   ├── AbstractResourceParser.java
│       │                       │   ├── DefaultResourceParser.java
│       │                       │   ├── ResourceParser.java
│       │                       │   ├── grpc/
│       │                       │   │   ├── AbstractGrpcResourceParser.java
│       │                       │   │   ├── AiGrpcResourceParser.java
│       │                       │   │   ├── ConfigGrpcResourceParser.java
│       │                       │   │   └── NamingGrpcResourceParser.java
│       │                       │   └── http/
│       │                       │       ├── AbstractHttpResourceParser.java
│       │                       │       ├── AiHttpResourceParser.java
│       │                       │       ├── ConfigHttpResourceParser.java
│       │                       │       └── NamingHttpResourceParser.java
│       │                       ├── serveridentity/
│       │                       │   ├── DefaultChecker.java
│       │                       │   ├── ServerIdentity.java
│       │                       │   ├── ServerIdentityChecker.java
│       │                       │   ├── ServerIdentityCheckerHolder.java
│       │                       │   └── ServerIdentityResult.java
│       │                       └── util/
│       │                           ├── AuthHeaderUtil.java
│       │                           └── Loggers.java
│       └── test/
│           ├── java/
│           │   └── com/
│           │       └── alibaba/
│           │           └── nacos/
│           │               └── auth/
│           │                   ├── GrpcProtocolAuthServiceTest.java
│           │                   ├── HttpProtocolAuthServiceTest.java
│           │                   ├── config/
│           │                   │   ├── AuthErrorCodeTest.java
│           │                   │   └── NacosAuthConfigHolderTest.java
│           │                   ├── context/
│           │                   │   ├── GrpcIdentityContextBuilderTest.java
│           │                   │   └── HtppIdentityContextBuilderTest.java
│           │                   ├── mock/
│           │                   │   ├── MockAuthPluginService.java
│           │                   │   └── MockResourceParser.java
│           │                   ├── parser/
│           │                   │   ├── grpc/
│           │                   │   │   ├── AiGrpcResourceParserTest.java
│           │                   │   │   ├── ConfigGrpcResourceParserTest.java
│           │                   │   │   └── NamingGrpcResourceParserTest.java
│           │                   │   └── http/
│           │                   │       ├── AiHttpResourceParserTest.java
│           │                   │       ├── ConfigHttpResourceParserTest.java
│           │                   │       └── NamingHttpResourceParserTest.java
│           │                   ├── serveridentity/
│           │                   │   ├── ServerIdentityCheckerHolderTest.java
│           │                   │   └── ServerIdentityTest.java
│           │                   └── util/
│           │                       ├── AuthHeaderUtilTest.java
│           │                       └── LoggersTest.java
│           └── resources/
│               └── META-INF/
│                   └── services/
│                       └── com.alibaba.nacos.plugin.auth.spi.server.AuthPluginService
├── bootstrap/
│   ├── pom.xml
│   └── src/
│       └── main/
│           ├── java/
│           │   └── com/
│           │       └── alibaba/
│           │           └── nacos/
│           │               └── bootstrap/
│           │                   └── NacosBootstrap.java
│           └── resources/
│               └── application.properties
├── client/
│   ├── filter-config.json
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── alibaba/
│       │   │           └── nacos/
│       │   │               └── client/
│       │   │                   ├── ability/
│       │   │                   │   └── ClientAbilityControlManager.java
│       │   │                   ├── ai/
│       │   │                   │   ├── NacosAiService.java
│       │   │                   │   ├── cache/
│       │   │                   │   │   ├── NacosAgentCardCacheHolder.java
│       │   │                   │   │   ├── NacosMcpServerCacheHolder.java
│       │   │                   │   │   ├── NacosPromptCacheHolder.java
│       │   │                   │   │   └── NacosSkillCacheHolder.java
│       │   │                   │   ├── event/
│       │   │                   │   │   ├── AbstractAiListenerInvoker.java
│       │   │                   │   │   ├── AgentCardChangedEvent.java
│       │   │                   │   │   ├── AgentCardListenerInvoker.java
│       │   │                   │   │   ├── AiChangeNotifier.java
│       │   │                   │   │   ├── McpServerChangedEvent.java
│       │   │                   │   │   ├── McpServerListenerInvoker.java
│       │   │                   │   │   ├── PromptChangedEvent.java
│       │   │                   │   │   ├── PromptListenerInvoker.java
│       │   │                   │   │   ├── SkillChangedEvent.java
│       │   │                   │   │   └── SkillListenerInvoker.java
│       │   │                   │   ├── remote/
│       │   │                   │   │   ├── AiClientProxy.java
│       │   │                   │   │   ├── AiGrpcClient.java
│       │   │                   │   │   ├── AiHttpClientProxy.java
│       │   │                   │   │   └── redo/
│       │   │                   │   │       ├── AgentEndpointRedoData.java
│       │   │                   │   │       ├── AgentEndpointWrapper.java
│       │   │                   │   │       ├── AiGrpcRedoService.java
│       │   │                   │   │       ├── AiRedoScheduledTask.java
│       │   │                   │   │       ├── McpServerEndpoint.java
│       │   │                   │   │       └── McpServerEndpointRedoData.java
│       │   │                   │   └── utils/
│       │   │                   │       └── CacheKeyUtils.java
│       │   │                   ├── config/
│       │   │                   │   ├── NacosConfigService.java
│       │   │                   │   ├── common/
│       │   │                   │   │   ├── ConfigConstants.java
│       │   │                   │   │   └── GroupKey.java
│       │   │                   │   ├── filter/
│       │   │                   │   │   └── impl/
│       │   │                   │   │       ├── ConfigContext.java
│       │   │                   │   │       ├── ConfigEncryptionFilter.java
│       │   │                   │   │       ├── ConfigFilterChainManager.java
│       │   │                   │   │       ├── ConfigRequest.java
│       │   │                   │   │       └── ConfigResponse.java
│       │   │                   │   ├── http/
│       │   │                   │   │   ├── HttpAgent.java
│       │   │                   │   │   ├── MetricsHttpAgent.java
│       │   │                   │   │   └── ServerHttpAgent.java
│       │   │                   │   ├── impl/
│       │   │                   │   │   ├── AbstractConfigChangeParser.java
│       │   │                   │   │   ├── CacheData.java
│       │   │                   │   │   ├── ChangeNotifyBlockEvent.java
│       │   │                   │   │   ├── ClientFuzzyWatchNotifyRequestHandler.java
│       │   │                   │   │   ├── ClientWorker.java
│       │   │                   │   │   ├── ConfigChangeHandler.java
│       │   │                   │   │   ├── ConfigFuzzyWatchContext.java
│       │   │                   │   │   ├── ConfigFuzzyWatchGroupKeyHolder.java
│       │   │                   │   │   ├── ConfigFuzzyWatchLoadEvent.java
│       │   │                   │   │   ├── ConfigFuzzyWatchNotifyEvent.java
│       │   │                   │   │   ├── ConfigFuzzyWatcherWrapper.java
│       │   │                   │   │   ├── ConfigHttpClientManager.java
│       │   │                   │   │   ├── ConfigServerListManager.java
│       │   │                   │   │   ├── ConfigTransportClient.java
│       │   │                   │   │   ├── Limiter.java
│       │   │                   │   │   ├── LocalConfigInfoProcessor.java
│       │   │                   │   │   ├── LocalEncryptedDataKeyProcessor.java
│       │   │                   │   │   ├── PropertiesChangeParser.java
│       │   │                   │   │   └── YmlChangeParser.java
│       │   │                   │   ├── listener/
│       │   │                   │   │   └── impl/
│       │   │                   │   │       ├── AbstractConfigChangeListener.java
│       │   │                   │   │       └── PropertiesListener.java
│       │   │                   │   └── utils/
│       │   │                   │       ├── ContentUtils.java
│       │   │                   │       ├── JvmUtil.java
│       │   │                   │       ├── ParamUtils.java
│       │   │                   │       └── SnapShotSwitch.java
│       │   │                   ├── lock/
│       │   │                   │   ├── NacosLockService.java
│       │   │                   │   ├── core/
│       │   │                   │   │   ├── NLock.java
│       │   │                   │   │   └── NLockFactory.java
│       │   │                   │   └── remote/
│       │   │                   │       ├── AbstractLockClient.java
│       │   │                   │       ├── LockClient.java
│       │   │                   │       └── grpc/
│       │   │                   │           └── LockGrpcClient.java
│       │   │                   ├── logging/
│       │   │                   │   └── NacosLogging.java
│       │   │                   ├── monitor/
│       │   │                   │   └── MetricsMonitor.java
│       │   │                   ├── naming/
│       │   │                   │   ├── NacosNamingMaintainService.java
│       │   │                   │   ├── NacosNamingService.java
│       │   │                   │   ├── backups/
│       │   │                   │   │   ├── FailoverData.java
│       │   │                   │   │   ├── FailoverDataSource.java
│       │   │                   │   │   ├── FailoverReactor.java
│       │   │                   │   │   ├── FailoverSwitch.java
│       │   │                   │   │   ├── NamingFailoverData.java
│       │   │                   │   │   └── datasource/
│       │   │                   │   │       └── DiskFailoverDataSource.java
│       │   │                   │   ├── cache/
│       │   │                   │   │   ├── DiskCache.java
│       │   │                   │   │   ├── FuzzyWatchEventWatcherWrapper.java
│       │   │                   │   │   ├── InstancesDiffer.java
│       │   │                   │   │   ├── NamingFuzzyWatchContext.java
│       │   │                   │   │   ├── NamingFuzzyWatchServiceListHolder.java
│       │   │                   │   │   └── ServiceInfoHolder.java
│       │   │                   │   ├── core/
│       │   │                   │   │   ├── Balancer.java
│       │   │                   │   │   ├── NamingServerListManager.java
│       │   │                   │   │   ├── ProtectMode.java
│       │   │                   │   │   └── ServiceInfoUpdateService.java
│       │   │                   │   ├── event/
│       │   │                   │   │   ├── InstancesChangeEvent.java
│       │   │                   │   │   ├── InstancesChangeNotifier.java
│       │   │                   │   │   ├── InstancesDiff.java
│       │   │                   │   │   ├── NamingFuzzyWatchLoadEvent.java
│       │   │                   │   │   └── NamingFuzzyWatchNotifyEvent.java
│       │   │                   │   ├── listener/
│       │   │                   │   │   ├── AbstractNamingChangeListener.java
│       │   │                   │   │   └── NamingChangeEvent.java
│       │   │                   │   ├── remote/
│       │   │                   │   │   ├── AbstractNamingClientProxy.java
│       │   │                   │   │   ├── NamingClientProxy.java
│       │   │                   │   │   ├── NamingClientProxyDelegate.java
│       │   │                   │   │   ├── gprc/
│       │   │                   │   │   │   ├── NamingFuzzyWatchNotifyRequestHandler.java
│       │   │                   │   │   │   ├── NamingGrpcClientProxy.java
│       │   │                   │   │   │   ├── NamingPushRequestHandler.java
│       │   │                   │   │   │   └── redo/
│       │   │                   │   │   │       ├── NamingGrpcRedoService.java
│       │   │                   │   │   │       ├── RedoScheduledTask.java
│       │   │                   │   │   │       └── data/
│       │   │                   │   │   │           ├── BatchInstanceRedoData.java
│       │   │                   │   │   │           ├── InstanceRedoData.java
│       │   │                   │   │   │           ├── NamingRedoData.java
│       │   │                   │   │   │           └── SubscriberRedoData.java
│       │   │                   │   │   └── http/
│       │   │                   │   │       ├── NamingHttpClientManager.java
│       │   │                   │   │       └── NamingHttpClientProxy.java
│       │   │                   │   ├── selector/
│       │   │                   │   │   ├── DefaultNamingSelector.java
│       │   │                   │   │   ├── NamingListenerInvoker.java
│       │   │                   │   │   ├── NamingSelectorFactory.java
│       │   │                   │   │   ├── NamingSelectorWrapper.java
│       │   │                   │   │   └── ServiceInfoContext.java
│       │   │                   │   └── utils/
│       │   │                   │       ├── CacheDirUtil.java
│       │   │                   │       ├── Chooser.java
│       │   │                   │       ├── GenericPoller.java
│       │   │                   │       ├── InitUtils.java
│       │   │                   │       ├── Pair.java
│       │   │                   │       ├── Poller.java
│       │   │                   │       └── UtilAndComs.java
│       │   │                   ├── redo/
│       │   │                   │   ├── data/
│       │   │                   │   │   └── RedoData.java
│       │   │                   │   └── service/
│       │   │                   │       ├── AbstractRedoService.java
│       │   │                   │       └── AbstractRedoTask.java
│       │   │                   ├── security/
│       │   │                   │   └── SecurityProxy.java
│       │   │                   ├── selector/
│       │   │                   │   ├── AbstractSelectorWrapper.java
│       │   │                   │   ├── ListenerInvoker.java
│       │   │                   │   └── SelectorManager.java
│       │   │                   └── utils/
│       │   │                       ├── ConcurrentDiskUtil.java
│       │   │                       ├── EnvUtil.java
│       │   │                       ├── LogUtils.java
│       │   │                       ├── ParamUtil.java
│       │   │                       ├── PreInitUtils.java
│       │   │                       └── ValidatorUtils.java
│       │   └── resources/
│       │       └── META-INF/
│       │           ├── native-image/
│       │           │   └── com.alibaba.nacos/
│       │           │       └── nacos-client/
│       │           │           ├── jni-config.json
│       │           │           ├── predefined-classes-config.json
│       │           │           ├── proxy-config.json
│       │           │           ├── reflect-config.json
│       │           │           ├── resource-config.json
│       │           │           └── serialization-config.json
│       │           └── services/
│       │               ├── com.alibaba.nacos.api.config.filter.IConfigFilter
│       │               ├── com.alibaba.nacos.client.naming.backups.FailoverDataSource
│       │               └── com.alibaba.nacos.common.ability.AbstractAbilityControlManager
│       └── test/
│           ├── java/
│           │   └── com/
│           │       └── alibaba/
│           │           └── nacos/
│           │               └── client/
│           │                   ├── ability/
│           │                   │   ├── AbilityTest.java
│           │                   │   └── ClientAbilityControlManagerTest.java
│           │                   ├── ai/
│           │                   │   ├── NacosAiServiceTest.java
│           │                   │   ├── cache/
│           │                   │   │   ├── NacosMcpServerCacheHolderTest.java
│           │                   │   │   └── NacosPromptCacheHolderTest.java
│           │                   │   ├── event/
│           │                   │   │   ├── AiChangeNotifierPromptTest.java
│           │                   │   │   ├── AiChangeNotifierTest.java
│           │                   │   │   └── McpServerListenerInvokerTest.java
│           │                   │   ├── remote/
│           │                   │   │   ├── AiGrpcClientTest.java
│           │                   │   │   ├── AiHttpClientProxyTest.java
│           │                   │   │   └── redo/
│           │                   │   │       ├── AiGrpcRedoServiceTest.java
│           │                   │   │       ├── AiRedoScheduledTaskTest.java
│           │                   │   │       ├── McpServerEndpointRedoDataTest.java
│           │                   │   │       └── McpServerEndpointTest.java
│           │                   │   └── utils/
│           │                   │       └── CacheKeyUtilsTest.java
│           │                   ├── config/
│           │                   │   ├── NacosConfigServiceTest.java
│           │                   │   ├── common/
│           │                   │   │   └── GroupKeyTest.java
│           │                   │   ├── filter/
│           │                   │   │   └── impl/
│           │                   │   │       ├── ConfigContextTest.java
│           │                   │   │       ├── ConfigEncryptionFilterTest.java
│           │                   │   │       ├── ConfigEncryptionFilterTest1.java
│           │                   │   │       ├── ConfigFilterChainManagerTest.java
│           │                   │   │       ├── ConfigFilterChainTest.java
│           │                   │   │       ├── ConfigRequestTest.java
│           │                   │   │       ├── ConfigResponseTest.java
│           │                   │   │       ├── DemoFilter1.java
│           │                   │   │       └── DemoFilter2.java
│           │                   │   ├── http/
│           │                   │   │   ├── MetricsHttpAgentTest.java
│           │                   │   │   └── ServerHttpAgentTest.java
│           │                   │   ├── impl/
│           │                   │   │   ├── CacheDataTest.java
│           │                   │   │   ├── ClientWorkerTest.java
│           │                   │   │   ├── ConfigChangeHandlerTest.java
│           │                   │   │   ├── ConfigFuzzyWatchGroupKeyHolderTest.java
│           │                   │   │   ├── ConfigHttpClientManagerTest.java
│           │                   │   │   ├── ConfigServerListManagerTest.java
│           │                   │   │   ├── LimiterTest.java
│           │                   │   │   ├── PropertiesChangeParserTest.java
│           │                   │   │   └── YmlChangeParserTest.java
│           │                   │   ├── listener/
│           │                   │   │   └── impl/
│           │                   │   │       ├── AbstractConfigChangeListenerTest.java
│           │                   │   │       └── PropertiesListenerTest.java
│           │                   │   └── utils/
│           │                   │       ├── ContentUtilsTest.java
│           │                   │       ├── JvmUtilTest.java
│           │                   │       ├── ParamUtilsTest.java
│           │                   │       └── SnapShotSwitchTest.java
│           │                   ├── lock/
│           │                   │   ├── NacosLockServiceTest.java
│           │                   │   └── remote/
│           │                   │       └── grpc/
│           │                   │           └── LockGrpcClientTest.java
│           │                   ├── logging/
│           │                   │   └── NacosLoggingTest.java
│           │                   ├── naming/
│           │                   │   ├── NacosNamingMaintainServiceTest.java
│           │                   │   ├── NacosNamingServiceTest.java
│           │                   │   ├── backups/
│           │                   │   │   ├── FailoverReactorTest.java
│           │                   │   │   └── datasource/
│           │                   │   │       └── DiskFailoverDataSourceTest.java
│           │                   │   ├── cache/
│           │                   │   │   ├── DiskCacheTest.java
│           │                   │   │   ├── NamingFuzzyWatchServiceListHolderTest.java
│           │                   │   │   └── ServiceInfoHolderTest.java
│           │                   │   ├── core/
│           │                   │   │   ├── BalancerTest.java
│           │                   │   │   ├── NamingServerListManagerTest.java
│           │                   │   │   ├── ProtectModeTest.java
│           │                   │   │   └── ServiceInfoUpdateServiceTest.java
│           │                   │   ├── event/
│           │                   │   │   ├── InstancesChangeEventTest.java
│           │                   │   │   ├── InstancesChangeNotifierTest.java
│           │                   │   │   └── InstancesDiffTest.java
│           │                   │   ├── listener/
│           │                   │   │   └── NamingChangeEventTest.java
│           │                   │   ├── remote/
│           │                   │   │   ├── AbstractNamingClientProxyTest.java
│           │                   │   │   ├── NamingClientProxyDelegateTest.java
│           │                   │   │   ├── TestConnection.java
│           │                   │   │   ├── gprc/
│           │                   │   │   │   ├── NamingGrpcClientProxyTest.java
│           │                   │   │   │   ├── NamingPushRequestHandlerTest.java
│           │                   │   │   │   └── redo/
│           │                   │   │   │       ├── NamingGrpcRedoServiceTest.java
│           │                   │   │   │       ├── RedoScheduledTaskTest.java
│           │                   │   │   │       └── data/
│           │                   │   │   │           ├── BatchInstanceRedoDataTest.java
│           │                   │   │   │           └── InstanceRedoDataTest.java
│           │                   │   │   └── http/
│           │                   │   │       ├── NamingHttpClientManagerTest.java
│           │                   │   │       └── NamingHttpClientProxyTest.java
│           │                   │   ├── selector/
│           │                   │   │   ├── DefaultNamingSelectorTest.java
│           │                   │   │   ├── NamingListenerInvokerTest.java
│           │                   │   │   ├── NamingSelectorFactoryTest.java
│           │                   │   │   ├── NamingSelectorWrapperTest.java
│           │                   │   │   └── ServiceInfoContextTest.java
│           │                   │   └── utils/
│           │                   │       ├── CacheDirUtilTest.java
│           │                   │       ├── ChooserTest.java
│           │                   │       ├── ConcurrentDiskUtilTest.java
│           │                   │       ├── GenericPollerTest.java
│           │                   │       ├── InitUtilsTest.java
│           │                   │       └── PairTest.java
│           │                   ├── redo/
│           │                   │   ├── data/
│           │                   │   │   └── RedoDataTest.java
│           │                   │   └── service/
│           │                   │       ├── AbstractRedoServiceTest.java
│           │                   │       └── AbstractRedoTaskTest.java
│           │                   ├── security/
│           │                   │   └── SecurityProxyTest.java
│           │                   ├── selector/
│           │                   │   ├── AbstractSelectorWrapperTest.java
│           │                   │   └── SelectorManagerTest.java
│           │                   └── utils/
│           │                       ├── EnvUtilTest.java
│           │                       ├── LogUtilsTest.java
│           │                       ├── ParamUtilTest.java
│           │                       ├── PreInitUtilsTest.java
│           │                       ├── StringUtilsTest.java
│           │                       └── ValidatorUtilsTest.java
│           └── resources/
│               ├── disk_cache_test/
│               │   ├── error%40%40json%40%40file
│               │   ├── ignored%40%40not_json%40%40file
│               │   ├── invalid_dir/
│               │   │   └── invalid_file
│               │   ├── legal%40%40no_name%40%40file
│               │   └── legal%40%40with_name%40%40file
│               └── failover_test/
│                   ├── disabled/
│                   │   └── 00-00---000-VIPSRV_FAILOVER_SWITCH-000---00-00
│                   └── enabled/
│                       ├── 00-00---000-VIPSRV_FAILOVER_SWITCH-000---00-00
│                       ├── invalid_dir/
│                       │   └── invalid_file
│                       └── legal%40%40with_name%40%40file
├── client-basic/
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── alibaba/
│       │   │           └── nacos/
│       │   │               └── client/
│       │   │                   ├── address/
│       │   │                   │   ├── AbstractServerListManager.java
│       │   │                   │   ├── AbstractServerListProvider.java
│       │   │                   │   ├── EndpointServerListProvider.java
│       │   │                   │   ├── PropertiesListProvider.java
│       │   │                   │   ├── ServerListChangeEvent.java
│       │   │                   │   └── ServerListProvider.java
│       │   │                   ├── auth/
│       │   │                   │   ├── impl/
│       │   │                   │   │   ├── NacosAuthLoginConstant.java
│       │   │                   │   │   ├── NacosClientAuthServiceImpl.java
│       │   │                   │   │   └── process/
│       │   │                   │   │       ├── HttpLoginProcessor.java
│       │   │                   │   │       └── LoginProcessor.java
│       │   │                   │   └── ram/
│       │   │                   │       ├── RamClientAuthServiceImpl.java
│       │   │                   │       ├── RamConstants.java
│       │   │                   │       ├── RamContext.java
│       │   │                   │       ├── identify/
│       │   │                   │       │   ├── CredentialListener.java
│       │   │                   │       │   ├── CredentialService.java
│       │   │                   │       │   ├── CredentialWatcher.java
│       │   │                   │       │   ├── Credentials.java
│       │   │                   │       │   ├── IdentifyConstants.java
│       │   │                   │       │   ├── SpasCredential.java
│       │   │                   │       │   ├── SpasCredentialLoader.java
│       │   │                   │       │   ├── StsConfig.java
│       │   │                   │       │   ├── StsCredential.java
│       │   │                   │       │   └── StsCredentialHolder.java
│       │   │                   │       ├── injector/
│       │   │                   │       │   ├── AbstractResourceInjector.java
│       │   │                   │       │   ├── AiResourceInjector.java
│       │   │                   │       │   ├── ConfigResourceInjector.java
│       │   │                   │       │   ├── LockResourceInjector.java
│       │   │                   │       │   └── NamingResourceInjector.java
│       │   │                   │       └── utils/
│       │   │                   │           ├── CalculateV4SigningKeyUtil.java
│       │   │                   │           ├── RamUtil.java
│       │   │                   │           ├── SignUtil.java
│       │   │                   │           └── SpasAdapter.java
│       │   │                   ├── constant/
│       │   │                   │   └── Constants.java
│       │   │                   ├── env/
│       │   │                   │   ├── AbstractPropertySource.java
│       │   │                   │   ├── JvmArgsPropertySource.java
│       │   │                   │   ├── NacosClientProperties.java
│       │   │                   │   ├── PropertiesPropertySource.java
│       │   │                   │   ├── SearchableProperties.java
│       │   │                   │   ├── SourceType.java
│       │   │                   │   ├── SystemEnvPropertySource.java
│       │   │                   │   └── convert/
│       │   │                   │       ├── AbstractPropertyConverter.java
│       │   │                   │       ├── BooleanConverter.java
│       │   │                   │       ├── CompositeConverter.java
│       │   │                   │       ├── IntegerConverter.java
│       │   │                   │       └── LongConverter.java
│       │   │                   ├── remote/
│       │   │                   │   └── HttpClientManager.java
│       │   │                   └── utils/
│       │   │                       ├── AppNameUtils.java
│       │   │                       ├── ClientBasicParamUtil.java
│       │   │                       ├── ContextPathUtil.java
│       │   │                       ├── TemplateUtils.java
│       │   │                       └── TenantUtil.java
│       │   └── resources/
│       │       └── META-INF/
│       │           └── services/
│       │               ├── com.alibaba.nacos.client.address.ServerListProvider
│       │               └── com.alibaba.nacos.plugin.auth.spi.client.AbstractClientAuthService
│       └── test/
│           ├── java/
│           │   └── com/
│           │       └── alibaba/
│           │           └── nacos/
│           │               └── client/
│           │                   ├── address/
│           │                   │   ├── AbstractServerListManagerTest.java
│           │                   │   ├── EndpointServerListProviderTest.java
│           │                   │   ├── PropertiesListProviderTest.java
│           │                   │   └── mock/
│           │                   │       └── MockServerListProvider.java
│           │                   ├── auth/
│           │                   │   ├── impl/
│           │                   │   │   ├── NacosClientAuthServiceImplTest.java
│           │                   │   │   └── process/
│           │                   │   │       └── HttpLoginProcessorTest.java
│           │                   │   └── ram/
│           │                   │       ├── RamClientAuthServiceImplTest.java
│           │                   │       ├── identify/
│           │                   │       │   ├── CredentialServiceTest.java
│           │                   │       │   ├── CredentialWatcherTest.java
│           │                   │       │   ├── CredentialsTest.java
│           │                   │       │   ├── StsConfigTest.java
│           │                   │       │   └── StsCredentialHolderTest.java
│           │                   │       ├── injector/
│           │                   │       │   ├── AbstractResourceInjectorTest.java
│           │                   │       │   ├── ConfigResourceInjectorTest.java
│           │                   │       │   └── NamingResourceInjectorTest.java
│           │                   │       └── utils/
│           │                   │           ├── CalculateV4SigningKeyUtilTest.java
│           │                   │           ├── RamUtilTest.java
│           │                   │           ├── SignUtilTest.java
│           │                   │           └── SpasAdapterTest.java
│           │                   ├── env/
│           │                   │   ├── NacosClientPropertiesTest.java
│           │                   │   ├── SearchablePropertiesTest.java
│           │                   │   ├── SystemEnvPropertySourceTest.java
│           │                   │   └── convert/
│           │                   │       └── CompositeConverterTest.java
│           │                   └── utils/
│           │                       ├── AppNameUtilsTest.java
│           │                       ├── ClientBasicParamUtilTest.java
│           │                       ├── ContextPathUtilTest.java
│           │                       ├── TemplateUtilsTest.java
│           │                       └── TenantUtilTest.java
│           └── resources/
│               ├── META-INF/
│               │   └── services/
│               │       └── com.alibaba.nacos.client.address.ServerListProvider
│               ├── spas.identity
│               ├── spas_docker.identity
│               ├── spas_invalid.identity
│               └── spas_modified.identity
├── cmdb/
│   ├── pom.xml
│   └── src/
│       └── main/
│           └── java/
│               └── com/
│                   └── alibaba/
│                       └── nacos/
│                           └── cmdb/
│                               ├── CmdbApp.java
│                               ├── controllers/
│                               │   └── OperationController.java
│                               ├── core/
│                               │   └── SwitchAndOptions.java
│                               ├── memory/
│                               │   └── CmdbProvider.java
│                               ├── service/
│                               │   ├── CmdbReader.java
│                               │   └── CmdbWriter.java
│                               └── utils/
│                                   ├── CmdbExecutor.java
│                                   ├── Loggers.java
│                                   └── UtilsAndCommons.java
├── codecov.yml
├── common/
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── alibaba/
│       │   │           └── nacos/
│       │   │               └── common/
│       │   │                   ├── Beta.java
│       │   │                   ├── JustForTest.java
│       │   │                   ├── NotThreadSafe.java
│       │   │                   ├── ability/
│       │   │                   │   ├── AbstractAbilityControlManager.java
│       │   │                   │   └── discover/
│       │   │                   │       └── NacosAbilityManagerHolder.java
│       │   │                   ├── codec/
│       │   │                   │   └── Base64.java
│       │   │                   ├── constant/
│       │   │                   │   ├── HttpHeaderConsts.java
│       │   │                   │   ├── RequestUrlConstants.java
│       │   │                   │   ├── ResponseHandlerType.java
│       │   │                   │   └── Symbols.java
│       │   │                   ├── event/
│       │   │                   │   └── ServerConfigChangeEvent.java
│       │   │                   ├── executor/
│       │   │                   │   ├── ExecutorFactory.java
│       │   │                   │   ├── NameThreadFactory.java
│       │   │                   │   └── ThreadPoolManager.java
│       │   │                   ├── http/
│       │   │                   │   ├── AbstractApacheHttpClientFactory.java
│       │   │                   │   ├── AbstractHttpClientFactory.java
│       │   │                   │   ├── BaseHttpMethod.java
│       │   │                   │   ├── Callback.java
│       │   │                   │   ├── DefaultHttpClientFactory.java
│       │   │                   │   ├── HttpClientBeanHolder.java
│       │   │                   │   ├── HttpClientConfig.java
│       │   │                   │   ├── HttpClientFactory.java
│       │   │                   │   ├── HttpRestResult.java
│       │   │                   │   ├── HttpUtils.java
│       │   │                   │   ├── client/
│       │   │                   │   │   ├── AbstractNacosRestTemplate.java
│       │   │                   │   │   ├── HttpClientRequestInterceptor.java
│       │   │                   │   │   ├── InterceptingHttpClientRequest.java
│       │   │                   │   │   ├── NacosAsyncRestTemplate.java
│       │   │                   │   │   ├── NacosRestTemplate.java
│       │   │                   │   │   ├── handler/
│       │   │                   │   │   │   ├── AbstractResponseHandler.java
│       │   │                   │   │   │   ├── BeanResponseHandler.java
│       │   │                   │   │   │   ├── ResponseHandler.java
│       │   │                   │   │   │   ├── RestResultResponseHandler.java
│       │   │                   │   │   │   └── StringResponseHandler.java
│       │   │                   │   │   ├── request/
│       │   │                   │   │   │   ├── AsyncHttpClientRequest.java
│       │   │                   │   │   │   ├── DefaultAsyncHttpClientRequest.java
│       │   │                   │   │   │   ├── DefaultHttpClientRequest.java
│       │   │                   │   │   │   ├── HttpClientRequest.java
│       │   │                   │   │   │   └── JdkHttpClientRequest.java
│       │   │                   │   │   └── response/
│       │   │                   │   │       ├── DefaultClientHttpResponse.java
│       │   │                   │   │       ├── HttpClientResponse.java
│       │   │                   │   │       └── JdkHttpClientResponse.java
│       │   │                   │   └── param/
│       │   │                   │       ├── Header.java
│       │   │                   │       ├── MediaType.java
│       │   │                   │       └── Query.java
│       │   │                   ├── labels/
│       │   │                   │   ├── LabelsCollector.java
│       │   │                   │   ├── LabelsCollectorManager.java
│       │   │                   │   └── impl/
│       │   │                   │       ├── DefaultLabelsCollector.java
│       │   │                   │       └── DefaultLabelsCollectorManager.java
│       │   │                   ├── lifecycle/
│       │   │                   │   └── Closeable.java
│       │   │                   ├── logging/
│       │   │                   │   ├── NacosLoggingAdapter.java
│       │   │                   │   ├── NacosLoggingAdapterBuilder.java
│       │   │                   │   └── NacosLoggingProperties.java
│       │   │                   ├── model/
│       │   │                   │   ├── RequestHttpEntity.java
│       │   │                   │   ├── RestResult.java
│       │   │                   │   ├── RestResultUtils.java
│       │   │                   │   └── core/
│       │   │                   │       └── IResultCode.java
│       │   │                   ├── notify/
│       │   │                   │   ├── DefaultPublisher.java
│       │   │                   │   ├── DefaultSharePublisher.java
│       │   │                   │   ├── Event.java
│       │   │                   │   ├── EventPublisher.java
│       │   │                   │   ├── EventPublisherFactory.java
│       │   │                   │   ├── NotifyCenter.java
│       │   │                   │   ├── ShardedEventPublisher.java
│       │   │                   │   ├── SlowEvent.java
│       │   │                   │   └── listener/
│       │   │                   │       ├── SmartSubscriber.java
│       │   │                   │       └── Subscriber.java
│       │   │                   ├── package-info.java
│       │   │                   ├── packagescan/
│       │   │                   │   ├── DefaultPackageScan.java
│       │   │                   │   ├── PackageScan.java
│       │   │                   │   ├── classreading/
│       │   │                   │   │   ├── ClassReader.java
│       │   │                   │   │   └── Symbol.java
│       │   │                   │   ├── resource/
│       │   │                   │   │   ├── AbstractFileResolvingResource.java
│       │   │                   │   │   ├── AbstractResource.java
│       │   │                   │   │   ├── AntPathMatcher.java
│       │   │                   │   │   ├── ByteArrayResource.java
│       │   │                   │   │   ├── ClassPathResource.java
│       │   │                   │   │   ├── ContextResource.java
│       │   │                   │   │   ├── DefaultResourceLoader.java
│       │   │                   │   │   ├── FileSystemResource.java
│       │   │                   │   │   ├── FileUrlResource.java
│       │   │                   │   │   ├── InputStreamResource.java
│       │   │                   │   │   ├── InputStreamSource.java
│       │   │                   │   │   ├── PathMatchingResourcePatternResolver.java
│       │   │                   │   │   ├── PathResource.java
│       │   │                   │   │   ├── ProtocolResolver.java
│       │   │                   │   │   ├── Resource.java
│       │   │                   │   │   ├── ResourceLoader.java
│       │   │                   │   │   ├── ResourcePatternResolver.java
│       │   │                   │   │   ├── UrlResource.java
│       │   │                   │   │   ├── VfsPatternUtils.java
│       │   │                   │   │   ├── VfsResource.java
│       │   │                   │   │   ├── VfsUtils.java
│       │   │                   │   │   └── WritableResource.java
│       │   │                   │   └── util/
│       │   │                   │       ├── AbstractAssert.java
│       │   │                   │       ├── AbstractObjectUtils.java
│       │   │                   │       ├── NestedExceptionUtils.java
│       │   │                   │       ├── NestedIoException.java
│       │   │                   │       ├── PathMatcher.java
│       │   │                   │       └── ResourceUtils.java
│       │   │                   ├── paramcheck/
│       │   │                   │   ├── AbstractParamChecker.java
│       │   │                   │   ├── DefaultParamChecker.java
│       │   │                   │   ├── ParamCheckResponse.java
│       │   │                   │   ├── ParamCheckRule.java
│       │   │                   │   ├── ParamCheckerManager.java
│       │   │                   │   └── ParamInfo.java
│       │   │                   ├── pathencoder/
│       │   │                   │   ├── PathEncoder.java
│       │   │                   │   ├── PathEncoderManager.java
│       │   │                   │   └── impl/
│       │   │                   │       └── WindowsEncoder.java
│       │   │                   ├── remote/
│       │   │                   │   ├── ConnectionType.java
│       │   │                   │   ├── PayloadRegistry.java
│       │   │                   │   ├── TlsConfig.java
│       │   │                   │   ├── client/
│       │   │                   │   │   ├── Connection.java
│       │   │                   │   │   ├── ConnectionEventListener.java
│       │   │                   │   │   ├── RpcClient.java
│       │   │                   │   │   ├── RpcClientConfig.java
│       │   │                   │   │   ├── RpcClientConfigFactory.java
│       │   │                   │   │   ├── RpcClientFactory.java
│       │   │                   │   │   ├── RpcClientStatus.java
│       │   │                   │   │   ├── RpcClientTlsConfig.java
│       │   │                   │   │   ├── RpcClientTlsConfigFactory.java
│       │   │                   │   │   ├── RpcConfigFactory.java
│       │   │                   │   │   ├── RpcConstants.java
│       │   │                   │   │   ├── RpcTlsConfigFactory.java
│       │   │                   │   │   ├── ServerListFactory.java
│       │   │                   │   │   ├── ServerRequestHandler.java
│       │   │                   │   │   └── grpc/
│       │   │                   │   │       ├── DefaultGrpcClientConfig.java
│       │   │                   │   │       ├── GrpcClient.java
│       │   │                   │   │       ├── GrpcClientConfig.java
│       │   │                   │   │       ├── GrpcClusterClient.java
│       │   │                   │   │       ├── GrpcConnection.java
│       │   │                   │   │       ├── GrpcConstants.java
│       │   │                   │   │       ├── GrpcSdkClient.java
│       │   │                   │   │       └── GrpcUtils.java
│       │   │                   │   └── exception/
│       │   │                   │       ├── ConnectionAlreadyClosedException.java
│       │   │                   │       ├── ConnectionBusyException.java
│       │   │                   │       └── RemoteException.java
│       │   │                   ├── spi/
│       │   │                   │   ├── NacosServiceLoader.java
│       │   │                   │   └── ServiceLoaderException.java
│       │   │                   ├── task/
│       │   │                   │   ├── AbstractDelayTask.java
│       │   │                   │   ├── AbstractExecuteTask.java
│       │   │                   │   ├── BatchTaskCounter.java
│       │   │                   │   ├── NacosTask.java
│       │   │                   │   ├── NacosTaskProcessor.java
│       │   │                   │   └── engine/
│       │   │                   │       ├── AbstractNacosTaskExecuteEngine.java
│       │   │                   │       ├── NacosDelayTaskExecuteEngine.java
│       │   │                   │       ├── NacosExecuteTaskExecuteEngine.java
│       │   │                   │       ├── NacosTaskExecuteEngine.java
│       │   │                   │       └── TaskExecuteWorker.java
│       │   │                   ├── tls/
│       │   │                   │   ├── SelfHostnameVerifier.java
│       │   │                   │   ├── SelfTrustManager.java
│       │   │                   │   ├── TlsFileWatcher.java
│       │   │                   │   ├── TlsHelper.java
│       │   │                   │   └── TlsSystemConfig.java
│       │   │                   ├── trace/
│       │   │                   │   ├── DeregisterInstanceReason.java
│       │   │                   │   ├── HealthCheckType.java
│       │   │                   │   ├── event/
│       │   │                   │   │   ├── TraceEvent.java
│       │   │                   │   │   └── naming/
│       │   │                   │   │       ├── BatchRegisterInstanceTraceEvent.java
│       │   │                   │   │       ├── DeregisterInstanceTraceEvent.java
│       │   │                   │   │       ├── DeregisterServiceTraceEvent.java
│       │   │                   │   │       ├── HealthStateChangeTraceEvent.java
│       │   │                   │   │       ├── NamingTraceEvent.java
│       │   │                   │   │       ├── PushServiceTraceEvent.java
│       │   │                   │   │       ├── RegisterInstanceTraceEvent.java
│       │   │                   │   │       ├── RegisterServiceTraceEvent.java
│       │   │                   │   │       ├── SubscribeServiceTraceEvent.java
│       │   │                   │   │       ├── UnsubscribeServiceTraceEvent.java
│       │   │                   │   │       ├── UpdateInstanceTraceEvent.java
│       │   │                   │   │       └── UpdateServiceTraceEvent.java
│       │   │                   │   └── publisher/
│       │   │                   │       ├── TraceEventPublisher.java
│       │   │                   │       └── TraceEventPublisherFactory.java
│       │   │                   └── utils/
│       │   │                       ├── ArrayUtils.java
│       │   │                       ├── ByteUtils.java
│       │   │                       ├── ClassUtils.java
│       │   │                       ├── CollectionUtils.java
│       │   │                       ├── ConcurrentHashSet.java
│       │   │                       ├── ConnLabelsUtils.java
│       │   │                       ├── ConvertUtils.java
│       │   │                       ├── DateFormatUtils.java
│       │   │                       ├── ExceptionUtil.java
│       │   │                       ├── FuzzyGroupKeyPattern.java
│       │   │                       ├── HttpMethod.java
│       │   │                       ├── InetAddressValidator.java
│       │   │                       ├── InternetAddressUtil.java
│       │   │                       ├── IoUtils.java
│       │   │                       ├── JacksonUtils.java
│       │   │                       ├── LoggerUtils.java
│       │   │                       ├── MD5Utils.java
│       │   │                       ├── MapUtil.java
│       │   │                       ├── NamespaceUtil.java
│       │   │                       ├── NumberUtils.java
│       │   │                       ├── Observable.java
│       │   │                       ├── Observer.java
│       │   │                       ├── Pair.java
│       │   │                       ├── Preconditions.java
│       │   │                       ├── PropertyUtils.java
│       │   │                       ├── RandomUtils.java
│       │   │                       ├── ReflectUtils.java
│       │   │                       ├── ResourceUtils.java
│       │   │                       ├── StringUtils.java
│       │   │                       ├── ThreadFactoryBuilder.java
│       │   │                       ├── ThreadUtils.java
│       │   │                       ├── TlsTypeResolve.java
│       │   │                       ├── TypeUtils.java
│       │   │                       ├── UuidUtils.java
│       │   │                       └── VersionUtils.java
│       │   └── resources/
│       │       ├── META-INF/
│       │       │   └── services/
│       │       │       ├── com.alibaba.nacos.common.labels.LabelsCollector
│       │       │       ├── com.alibaba.nacos.common.paramcheck.AbstractParamChecker
│       │       │       └── com.alibaba.nacos.common.pathencoder.PathEncoder
│       │       └── nacos-version.txt
│       └── test/
│           ├── java/
│           │   ├── ClassUtilsTestMockClass.java
│           │   └── com/
│           │       └── alibaba/
│           │           └── nacos/
│           │               └── common/
│           │                   ├── AppTest.java
│           │                   ├── ability/
│           │                   │   ├── AbstractAbilityControlManagerTest.java
│           │                   │   ├── MockAbilityPostProcessor.java
│           │                   │   └── discover/
│           │                   │       ├── HigherMockAbilityManager.java
│           │                   │       ├── LowerMockAbilityManager.java
│           │                   │       └── NacosAbilityManagerHolderTest.java
│           │                   ├── codec/
│           │                   │   └── Base64Test.java
│           │                   ├── event/
│           │                   │   └── ServerConfigChangeEventTest.java
│           │                   ├── executor/
│           │                   │   ├── ExecutorFactoryTest.java
│           │                   │   ├── NameThreadFactoryTest.java
│           │                   │   └── ThreadPoolManagerTest.java
│           │                   ├── http/
│           │                   │   ├── AbstractApacheHttpClientFactoryTest.java
│           │                   │   ├── AbstractHttpClientFactoryTest.java
│           │                   │   ├── BaseHttpMethodTest.java
│           │                   │   ├── HttpClientBeanHolderTest.java
│           │                   │   ├── HttpClientConfigTest.java
│           │                   │   ├── HttpRestResultTest.java
│           │                   │   ├── HttpUtilsTest.java
│           │                   │   ├── client/
│           │                   │   │   ├── AbstractNacosRestTemplateTest.java
│           │                   │   │   ├── InterceptingHttpClientRequestTest.java
│           │                   │   │   ├── NacosAsyncRestTemplateTest.java
│           │                   │   │   ├── NacosRestTemplateTest.java
│           │                   │   │   ├── handler/
│           │                   │   │   │   ├── BeanResponseHandlerTest.java
│           │                   │   │   │   └── RestResultResponseHandlerTest.java
│           │                   │   │   ├── request/
│           │                   │   │   │   ├── DefaultAsyncHttpClientRequestTest.java
│           │                   │   │   │   ├── DefaultHttpClientRequestTest.java
│           │                   │   │   │   └── JdkHttpClientRequestTest.java
│           │                   │   │   └── response/
│           │                   │   │       ├── DefaultClientHttpResponseTest.java
│           │                   │   │       └── JdkClientHttpResponseTest.java
│           │                   │   └── param/
│           │                   │       ├── HeaderTest.java
│           │                   │       ├── MediaTypeTest.java
│           │                   │       └── QueryTest.java
│           │                   ├── labels/
│           │                   │   └── impl/
│           │                   │       ├── DefaultLabelsCollectorManagerTest.java
│           │                   │       ├── Test1LabelsCollector.java
│           │                   │       └── Test2LabelsCollector.java
│           │                   ├── logging/
│           │                   │   └── NacosLoggingPropertiesTest.java
│           │                   ├── model/
│           │                   │   ├── RequestHttpEntityTest.java
│           │                   │   ├── RestResultTest.java
│           │                   │   └── RestResultUtilsTest.java
│           │                   ├── notify/
│           │                   │   ├── DefaultPublisherTest.java
│           │                   │   ├── DefaultSharePublisherTest.java
│           │                   │   └── NotifyCenterTest.java
│           │                   ├── packagescan/
│           │                   │   ├── DefaultPackageScanTest.java
│           │                   │   └── mock/
│           │                   │       ├── AnnotationClass.java
│           │                   │       ├── MockClass.java
│           │                   │       ├── NoAnnotationClass.java
│           │                   │       └── TestScan.java
│           │                   ├── paramcheck/
│           │                   │   ├── DefaultParamCheckerTest.java
│           │                   │   ├── MockParamChecker.java
│           │                   │   └── ParamCheckerManagerTest.java
│           │                   ├── pathencoder/
│           │                   │   ├── PathEncoderManagerTest.java
│           │                   │   └── WindowsEncoderTest.java
│           │                   ├── remote/
│           │                   │   ├── ConnectionTypeTest.java
│           │                   │   ├── PayloadRegistryTest.java
│           │                   │   ├── TlsConfigTest.java
│           │                   │   ├── client/
│           │                   │   │   ├── ConnectionTest.java
│           │                   │   │   ├── RpcClientConfigFactoryTest.java
│           │                   │   │   ├── RpcClientFactoryTest.java
│           │                   │   │   ├── RpcClientTest.java
│           │                   │   │   ├── RpcClientTlsConfigTest.java
│           │                   │   │   ├── RpcClusterClientTlsConfigTest.java
│           │                   │   │   ├── RpcConstantsTest.java
│           │                   │   │   └── grpc/
│           │                   │   │       ├── DefaultGrpcClientConfigTest.java
│           │                   │   │       ├── GrpcClientTest.java
│           │                   │   │       ├── GrpcClientTlsTest.java
│           │                   │   │       ├── GrpcClusterClientTest.java
│           │                   │   │       ├── GrpcConnectionTest.java
│           │                   │   │       ├── GrpcConstantsTest.java
│           │                   │   │       ├── GrpcSdkClientTest.java
│           │                   │   │       └── GrpcUtilsTest.java
│           │                   │   └── exception/
│           │                   │       └── RemoteExceptionTest.java
│           │                   ├── spi/
│           │                   │   ├── NacosServiceLoaderTest.java
│           │                   │   ├── SpiTestImpl.java
│           │                   │   └── SpiTestInterface.java
│           │                   ├── task/
│           │                   │   └── engine/
│           │                   │       ├── NacosDelayTaskExecuteEngineTest.java
│           │                   │       └── NacosExecuteTaskExecuteEngineTest.java
│           │                   ├── tls/
│           │                   │   ├── SelfHostnameVerifierTest.java
│           │                   │   ├── SelfTrustManagerTest.java
│           │                   │   ├── TlsFileWatcherTest.java
│           │                   │   └── TlsHelperTest.java
│           │                   ├── trace/
│           │                   │   ├── event/
│           │                   │   │   └── naming/
│           │                   │   │       ├── HealthStateChangeTraceEventTest.java
│           │                   │   │       ├── InstanceTraceEventTest.java
│           │                   │   │       ├── NamingTraceEventTest.java
│           │                   │   │       ├── ServiceTraceEventTest.java
│           │                   │   │       └── SubscribeTraceEventTest.java
│           │                   │   └── publisher/
│           │                   │       ├── TraceEventPublisherFactoryTest.java
│           │                   │       ├── TraceEventPublisherTest.java
│           │                   │       └── TraceTestEvent.java
│           │                   └── utils/
│           │                       ├── ArrayUtilsTest.java
│           │                       ├── ByteUtilsTest.java
│           │                       ├── ClassUtilsTest.java
│           │                       ├── CollectionUtilsTest.java
│           │                       ├── ConcurrentHashSetTest.java
│           │                       ├── ConnLabelsUtilsTest.java
│           │                       ├── ConvertUtilsTest.java
│           │                       ├── DateFormatUtilsTest.java
│           │                       ├── ExceptionUtilTest.java
│           │                       ├── FuzzyGroupKeyPatternTest.java
│           │                       ├── InetAddressValidatorTest.java
│           │                       ├── InternetAddressUtilTest.java
│           │                       ├── IoUtilsTest.java
│           │                       ├── JacksonUtilsTest.java
│           │                       ├── LoggerUtilsTest.java
│           │                       ├── MD5UtilsTest.java
│           │                       ├── MapUtilTest.java
│           │                       ├── NamespaceUtilTest.java
│           │                       ├── NumberUtilsTest.java
│           │                       ├── ObservableTest.java
│           │                       ├── PairTest.java
│           │                       ├── PreconditionsTest.java
│           │                       ├── PropertyUtilsTest.java
│           │                       ├── RandomUtilsTest.java
│           │                       ├── ReflectUtilsTest.java
│           │                       ├── ResourceUtilsTest.java
│           │                       ├── StringUtilsTest.java
│           │                       ├── ThreadFactoryBuilderTest.java
│           │                       ├── ThreadUtilsTest.java
│           │                       ├── TlsTypeResolveTest.java
│           │                       ├── TypeUtilsTest.java
│           │                       ├── UuidUtilsTest.java
│           │                       ├── VersionUtilsTest.java
│           │                       └── to/
│           │                           └── User.java
│           └── resources/
│               ├── META-INF/
│               │   └── services/
│               │       ├── com.alibaba.nacos.api.ability.initializer.AbilityPostProcessor
│               │       ├── com.alibaba.nacos.common.ability.AbstractAbilityControlManager
│               │       ├── com.alibaba.nacos.common.labels.LabelsCollector
│               │       ├── com.alibaba.nacos.common.paramcheck.AbstractParamChecker
│               │       └── com.alibaba.nacos.common.spi.SpiTestInterface
│               ├── resource_utils_test.properties
│               └── test-tls-cert.pem
├── config/
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── alibaba/
│       │   │           └── nacos/
│       │   │               └── config/
│       │   │                   └── server/
│       │   │                       ├── Config.java
│       │   │                       ├── aspect/
│       │   │                       │   ├── CapacityManagementAspect.java
│       │   │                       │   ├── ConfigChangeAspect.java
│       │   │                       │   ├── ConfigOpFailureAspect.java
│       │   │                       │   └── RequestLogAspect.java
│       │   │                       ├── configuration/
│       │   │                       │   ├── ConfigChangeConfigs.java
│       │   │                       │   ├── ConfigCommonConfig.java
│       │   │                       │   ├── ConfigCompatibleConfig.java
│       │   │                       │   └── NacosConfigConfiguration.java
│       │   │                       ├── constant/
│       │   │                       │   ├── ConfigModuleStateBuilder.java
│       │   │                       │   ├── Constants.java
│       │   │                       │   ├── CounterMode.java
│       │   │                       │   ├── ParametersField.java
│       │   │                       │   └── PropertiesConstant.java
│       │   │                       ├── controller/
│       │   │                       │   ├── ConfigServletInner.java
│       │   │                       │   ├── parameters/
│       │   │                       │   │   └── SameNamespaceCloneConfigBean.java
│       │   │                       │   └── v3/
│       │   │                       │       ├── CapacityControllerV3.java
│       │   │                       │       ├── ConfigControllerV3.java
│       │   │                       │       ├── ConfigOpenApiController.java
│       │   │                       │       ├── ConfigOpsControllerV3.java
│       │   │                       │       ├── HistoryControllerV3.java
│       │   │                       │       ├── ListenerControllerV3.java
│       │   │                       │       └── MetricsControllerV3.java
│       │   │                       ├── enums/
│       │   │                       │   ├── ApiVersionEnum.java
│       │   │                       │   ├── FileTypeEnum.java
│       │   │                       │   └── OperationType.java
│       │   │                       ├── exception/
│       │   │                       │   ├── ConfigAlreadyExistsException.java
│       │   │                       │   ├── GlobalExceptionHandler.java
│       │   │                       │   └── NacosConfigException.java
│       │   │                       ├── filter/
│       │   │                       │   ├── CircuitFilter.java
│       │   │                       │   ├── ConfigEnabledFilter.java
│       │   │                       │   └── NacosWebFilter.java
│       │   │                       ├── manager/
│       │   │                       │   ├── TaskManager.java
│       │   │                       │   └── TaskManagerMBean.java
│       │   │                       ├── model/
│       │   │                       │   ├── AclInfo.java
│       │   │                       │   ├── CacheItem.java
│       │   │                       │   ├── ConfigAdvanceInfo.java
│       │   │                       │   ├── ConfigAllInfo.java
│       │   │                       │   ├── ConfigCache.java
│       │   │                       │   ├── ConfigCacheFactory.java
│       │   │                       │   ├── ConfigCacheFactoryDelegate.java
│       │   │                       │   ├── ConfigCacheGray.java
│       │   │                       │   ├── ConfigCachePostProcessor.java
│       │   │                       │   ├── ConfigCachePostProcessorDelegate.java
│       │   │                       │   ├── ConfigHistoryInfo.java
│       │   │                       │   ├── ConfigHistoryInfoDetail.java
│       │   │                       │   ├── ConfigInfo.java
│       │   │                       │   ├── ConfigInfo4Beta.java
│       │   │                       │   ├── ConfigInfo4Tag.java
│       │   │                       │   ├── ConfigInfoBase.java
│       │   │                       │   ├── ConfigInfoBaseEx.java
│       │   │                       │   ├── ConfigInfoBetaWrapper.java
│       │   │                       │   ├── ConfigInfoChanged.java
│       │   │                       │   ├── ConfigInfoEx.java
│       │   │                       │   ├── ConfigInfoGrayWrapper.java
│       │   │                       │   ├── ConfigInfoStateWrapper.java
│       │   │                       │   ├── ConfigInfoTagWrapper.java
│       │   │                       │   ├── ConfigInfoWrapper.java
│       │   │                       │   ├── ConfigKey.java
│       │   │                       │   ├── ConfigListenState.java
│       │   │                       │   ├── ConfigMetadata.java
│       │   │                       │   ├── ConfigOperateResult.java
│       │   │                       │   ├── ConfigRequestInfo.java
│       │   │                       │   ├── GroupkeyListenserStatus.java
│       │   │                       │   ├── ListenerCheckResult.java
│       │   │                       │   ├── NacosConfigCacheFactory.java
│       │   │                       │   ├── NacosConfigCachePostProcessor.java
│       │   │                       │   ├── SampleResult.java
│       │   │                       │   ├── SubscriberStatus.java
│       │   │                       │   ├── capacity/
│       │   │                       │   │   ├── Capacity.java
│       │   │                       │   │   ├── GroupCapacity.java
│       │   │                       │   │   └── NamespaceCapacity.java
│       │   │                       │   ├── event/
│       │   │                       │   │   ├── ConfigDataChangeEvent.java
│       │   │                       │   │   ├── ConfigDumpEvent.java
│       │   │                       │   │   ├── ConfigFuzzyWatchEvent.java
│       │   │                       │   │   ├── IstioConfigChangeEvent.java
│       │   │                       │   │   ├── LocalDataChangeEvent.java
│       │   │                       │   │   └── RaftDbErrorRecoverEvent.java
│       │   │                       │   ├── form/
│       │   │                       │   │   ├── ConfigForm.java
│       │   │                       │   │   ├── ConfigFormV3.java
│       │   │                       │   │   └── UpdateCapacityForm.java
│       │   │                       │   └── gray/
│       │   │                       │       ├── AbstractGrayRule.java
│       │   │                       │       ├── BetaGrayRule.java
│       │   │                       │       ├── ConfigGrayPersistInfo.java
│       │   │                       │       ├── GrayRule.java
│       │   │                       │       ├── GrayRuleManager.java
│       │   │                       │       └── TagGrayRule.java
│       │   │                       ├── monitor/
│       │   │                       │   ├── ConfigDynamicMeterRefreshService.java
│       │   │                       │   ├── MemoryMonitor.java
│       │   │                       │   ├── MetricsMonitor.java
│       │   │                       │   ├── PrintGetConfigResponeTask.java
│       │   │                       │   ├── PrintMemoryTask.java
│       │   │                       │   ├── ResponseMonitor.java
│       │   │                       │   ├── ThreadTaskQueueMonitorTask.java
│       │   │                       │   └── collector/
│       │   │                       │       └── ConfigSubscriberMetricsCollector.java
│       │   │                       ├── paramcheck/
│       │   │                       │   ├── ConfigBlurSearchHttpParamExtractor.java
│       │   │                       │   ├── ConfigDefaultHttpParamExtractor.java
│       │   │                       │   └── ConfigListenerHttpParamExtractor.java
│       │   │                       ├── remote/
│       │   │                       │   ├── ConfigChangeBatchListenRequestHandler.java
│       │   │                       │   ├── ConfigChangeClusterSyncRequestHandler.java
│       │   │                       │   ├── ConfigChangeListenContext.java
│       │   │                       │   ├── ConfigClusterRpcClientProxy.java
│       │   │                       │   ├── ConfigConnectionEventListener.java
│       │   │                       │   ├── ConfigFuzzyWatchChangeNotifier.java
│       │   │                       │   ├── ConfigFuzzyWatchRequestHandler.java
│       │   │                       │   ├── ConfigFuzzyWatchSyncNotifier.java
│       │   │                       │   ├── ConfigPublishRequestHandler.java
│       │   │                       │   ├── ConfigQueryRequestHandler.java
│       │   │                       │   ├── ConfigRemoveRequestHandler.java
│       │   │                       │   ├── FuzzyWatchChangeNotifyTask.java
│       │   │                       │   ├── FuzzyWatchSyncNotifyCallback.java
│       │   │                       │   ├── FuzzyWatchSyncNotifyTask.java
│       │   │                       │   └── RpcConfigChangeNotifier.java
│       │   │                       ├── result/
│       │   │                       │   └── code/
│       │   │                       │       └── ResultCodeEnum.java
│       │   │                       ├── service/
│       │   │                       │   ├── ClientIpWhiteList.java
│       │   │                       │   ├── ClientRecord.java
│       │   │                       │   ├── ClientTrackService.java
│       │   │                       │   ├── ConfigCacheService.java
│       │   │                       │   ├── ConfigChangePublisher.java
│       │   │                       │   ├── ConfigDetailService.java
│       │   │                       │   ├── ConfigFuzzyWatchContextService.java
│       │   │                       │   ├── ConfigMigrateService.java
│       │   │                       │   ├── ConfigOperationService.java
│       │   │                       │   ├── ConfigReadinessCheckService.java
│       │   │                       │   ├── ConfigSubService.java
│       │   │                       │   ├── HistoryService.java
│       │   │                       │   ├── LongPollingConnectionMetricsCollector.java
│       │   │                       │   ├── LongPollingService.java
│       │   │                       │   ├── NamespaceConfigInfoService.java
│       │   │                       │   ├── SwitchService.java
│       │   │                       │   ├── capacity/
│       │   │                       │   │   ├── CapacityService.java
│       │   │                       │   │   ├── GroupCapacityPersistService.java
│       │   │                       │   │   └── TenantCapacityPersistService.java
│       │   │                       │   ├── dump/
│       │   │                       │   │   ├── DefaultHistoryConfigCleaner.java
│       │   │                       │   │   ├── DumpChangeConfigWorker.java
│       │   │                       │   │   ├── DumpChangeGrayConfigWorker.java
│       │   │                       │   │   ├── DumpConfigHandler.java
│       │   │                       │   │   ├── DumpRequest.java
│       │   │                       │   │   ├── DumpService.java
│       │   │                       │   │   ├── EmbeddedDumpService.java
│       │   │                       │   │   ├── ExternalDumpService.java
│       │   │                       │   │   ├── HistoryConfigCleaner.java
│       │   │                       │   │   ├── HistoryConfigCleanerConfig.java
│       │   │                       │   │   ├── HistoryConfigCleanerManager.java
│       │   │                       │   │   ├── disk/
│       │   │                       │   │   │   ├── ConfigDiskService.java
│       │   │                       │   │   │   ├── ConfigDiskServiceFactory.java
│       │   │                       │   │   │   ├── ConfigRawDiskService.java
│       │   │                       │   │   │   └── ConfigRocksDbDiskService.java
│       │   │                       │   │   ├── processor/
│       │   │                       │   │   │   ├── DumpAllGrayProcessor.java
│       │   │                       │   │   │   ├── DumpAllProcessor.java
│       │   │                       │   │   │   └── DumpProcessor.java
│       │   │                       │   │   └── task/
│       │   │                       │   │       ├── DumpAllBetaTask.java
│       │   │                       │   │       ├── DumpAllGrayTask.java
│       │   │                       │   │       ├── DumpAllTagTask.java
│       │   │                       │   │       ├── DumpAllTask.java
│       │   │                       │   │       └── DumpTask.java
│       │   │                       │   ├── listener/
│       │   │                       │   │   ├── ConfigListenerStateDelegate.java
│       │   │                       │   │   ├── ConfigListenerStateService.java
│       │   │                       │   │   ├── LocalConfigListenerStateServiceImpl.java
│       │   │                       │   │   └── RemoteConfigListenerStateServiceImpl.java
│       │   │                       │   ├── notify/
│       │   │                       │   │   ├── AsyncNotifyService.java
│       │   │                       │   │   └── HttpClientManager.java
│       │   │                       │   ├── query/
│       │   │                       │   │   ├── ConfigChainRequestExtractorService.java
│       │   │                       │   │   ├── ConfigQueryChainRequestExtractor.java
│       │   │                       │   │   ├── ConfigQueryChainService.java
│       │   │                       │   │   ├── ConfigQueryHandlerChain.java
│       │   │                       │   │   ├── ConfigQueryHandlerChainBuilder.java
│       │   │                       │   │   ├── DefaultChainRequestExtractor.java
│       │   │                       │   │   ├── DefaultConfigQueryHandlerChainBuilder.java
│       │   │                       │   │   ├── enums/
│       │   │                       │   │   │   └── ResponseCode.java
│       │   │                       │   │   ├── handler/
│       │   │                       │   │   │   ├── AbstractConfigQueryHandler.java
│       │   │                       │   │   │   ├── ConfigChainEntryHandler.java
│       │   │                       │   │   │   ├── ConfigContentTypeHandler.java
│       │   │                       │   │   │   ├── ConfigQueryHandler.java
│       │   │                       │   │   │   ├── FormalHandler.java
│       │   │                       │   │   │   ├── GrayRuleMatchHandler.java
│       │   │                       │   │   │   └── SpecialTagNotFoundHandler.java
│       │   │                       │   │   └── model/
│       │   │                       │   │       ├── ConfigQueryChainRequest.java
│       │   │                       │   │       └── ConfigQueryChainResponse.java
│       │   │                       │   ├── repository/
│       │   │                       │   │   ├── ConfigInfoBetaPersistService.java
│       │   │                       │   │   ├── ConfigInfoGrayPersistService.java
│       │   │                       │   │   ├── ConfigInfoPersistService.java
│       │   │                       │   │   ├── ConfigInfoTagPersistService.java
│       │   │                       │   │   ├── ConfigMigratePersistService.java
│       │   │                       │   │   ├── ConfigRowMapperInjector.java
│       │   │                       │   │   ├── HistoryConfigInfoPersistService.java
│       │   │                       │   │   ├── embedded/
│       │   │                       │   │   │   ├── EmbeddedConfigDumpApplyHook.java
│       │   │                       │   │   │   ├── EmbeddedConfigInfoBetaPersistServiceImpl.java
│       │   │                       │   │   │   ├── EmbeddedConfigInfoGrayPersistServiceImpl.java
│       │   │                       │   │   │   ├── EmbeddedConfigInfoPersistServiceImpl.java
│       │   │                       │   │   │   ├── EmbeddedConfigInfoTagPersistServiceImpl.java
│       │   │                       │   │   │   ├── EmbeddedConfigMigratePersistServiceImpl.java
│       │   │                       │   │   │   └── EmbeddedHistoryConfigInfoPersistServiceImpl.java
│       │   │                       │   │   └── extrnal/
│       │   │                       │   │       ├── ExternalConfigInfoBetaPersistServiceImpl.java
│       │   │                       │   │       ├── ExternalConfigInfoGrayPersistServiceImpl.java
│       │   │                       │   │       ├── ExternalConfigInfoPersistServiceImpl.java
│       │   │                       │   │       ├── ExternalConfigInfoTagPersistServiceImpl.java
│       │   │                       │   │       ├── ExternalConfigMigratePersistServiceImpl.java
│       │   │                       │   │       └── ExternalHistoryConfigInfoPersistServiceImpl.java
│       │   │                       │   ├── sql/
│       │   │                       │   │   ├── EmbeddedStorageContextUtils.java
│       │   │                       │   │   └── ExternalStorageUtils.java
│       │   │                       │   └── trace/
│       │   │                       │       └── ConfigTraceService.java
│       │   │                       └── utils/
│       │   │                           ├── AccumulateStatCount.java
│       │   │                           ├── AppNameUtils.java
│       │   │                           ├── ConfigExecutor.java
│       │   │                           ├── ConfigExtInfoUtil.java
│       │   │                           ├── ConfigTagUtil.java
│       │   │                           ├── ContentUtils.java
│       │   │                           ├── GroupKey.java
│       │   │                           ├── GroupKey2.java
│       │   │                           ├── LogUtil.java
│       │   │                           ├── MD5Util.java
│       │   │                           ├── Md5Comparator.java
│       │   │                           ├── Md5ComparatorDelegate.java
│       │   │                           ├── NacosMd5Comparator.java
│       │   │                           ├── ParamUtils.java
│       │   │                           ├── PropertyUtil.java
│       │   │                           ├── Protocol.java
│       │   │                           ├── RegexParser.java
│       │   │                           ├── RequestUtil.java
│       │   │                           ├── ResponseUtil.java
│       │   │                           ├── SimpleCache.java
│       │   │                           ├── SimpleFlowData.java
│       │   │                           ├── SimpleIpFlowData.java
│       │   │                           ├── SimpleReadWriteLock.java
│       │   │                           ├── StatConstants.java
│       │   │                           ├── SystemConfig.java
│       │   │                           ├── TimeUtils.java
│       │   │                           ├── TimeoutUtils.java
│       │   │                           ├── TraceLogUtil.java
│       │   │                           ├── UrlAnalysisUtils.java
│       │   │                           ├── YamlParserUtil.java
│       │   │                           └── ZipUtils.java
│       │   └── resources/
│       │       ├── META-INF/
│       │       │   ├── logback/
│       │       │   │   └── config-included.xml
│       │       │   ├── services/
│       │       │   │   ├── com.alibaba.nacos.config.server.model.gray.GrayRule
│       │       │   │   ├── com.alibaba.nacos.config.server.service.query.ConfigQueryChainRequestExtractor
│       │       │   │   ├── com.alibaba.nacos.config.server.service.query.ConfigQueryHandlerChainBuilder
│       │       │   │   ├── com.alibaba.nacos.core.paramcheck.AbstractHttpParamExtractor
│       │       │   │   ├── com.alibaba.nacos.plugin.control.connection.ConnectionMetricsCollector
│       │       │   │   ├── com.alibaba.nacos.sys.filter.NacosPackageExcludeFilter
│       │       │   │   └── com.alibaba.nacos.sys.module.ModuleStateBuilder
│       │       │   └── spring.factories
│       │       └── version/
│       │           └── version.txt
│       └── test/
│           ├── java/
│           │   └── com/
│           │       └── alibaba/
│           │           └── nacos/
│           │               └── config/
│           │                   └── server/
│           │                       ├── aspect/
│           │                       │   ├── CapacityManagementAspectTest.java
│           │                       │   ├── ConfigChangeAspectTest.java
│           │                       │   └── RequestLogAspectTest.java
│           │                       ├── configuration/
│           │                       │   ├── ConfigChangeConfigsTest.java
│           │                       │   └── ConfigCommonConfigTest.java
│           │                       ├── constant/
│           │                       │   ├── ConfigModuleStateBuilderTest.java
│           │                       │   ├── ConstantsTest.java
│           │                       │   └── CounterModeTest.java
│           │                       ├── controller/
│           │                       │   ├── ConfigServletInnerTest.java
│           │                       │   └── v3/
│           │                       │       ├── CapacityControllerV3Test.java
│           │                       │       ├── ConfigControllerV3Test.java
│           │                       │       ├── ConfigOpenApiControllerTest.java
│           │                       │       ├── ConfigOpsControllerV3Test.java
│           │                       │       ├── HistoryControllerV3Test.java
│           │                       │       ├── ListenerControllerV3Test.java
│           │                       │       └── MetricControllerV3Test.java
│           │                       ├── exception/
│           │                       │   └── GlobalExceptionHandlerTest.java
│           │                       ├── manager/
│           │                       │   └── TaskManagerTest.java
│           │                       ├── model/
│           │                       │   ├── ConfigCacheFactoryDelegateTest.java
│           │                       │   ├── ConfigCachePostProcessorDelegateTest.java
│           │                       │   ├── ConfigInfoTest.java
│           │                       │   ├── NacosConfigCacheFactoryTest.java
│           │                       │   ├── NacosConfigCachePostProcessorTest.java
│           │                       │   └── form/
│           │                       │       └── ConfigFormTest.java
│           │                       ├── paramcheck/
│           │                       │   └── ConfigListenerHttpParamExtractorTest.java
│           │                       ├── remote/
│           │                       │   ├── ConfigChangeBatchListenRequestHandlerTest.java
│           │                       │   ├── ConfigChangeClusterSyncRequestHandlerTest.java
│           │                       │   ├── ConfigChangeListenContextTest.java
│           │                       │   ├── ConfigFuzzyWatchChangeNotifierTest.java
│           │                       │   ├── ConfigFuzzyWatchSyncNotifierTest.java
│           │                       │   ├── ConfigPublishRequestHandlerTest.java
│           │                       │   ├── ConfigQueryRequestHandlerTest.java
│           │                       │   ├── ConfigRemoveRequestHandlerTest.java
│           │                       │   ├── FuzzyWatchSyncNotifyCallbackTest.java
│           │                       │   └── RpcConfigChangeNotifierTest.java
│           │                       ├── service/
│           │                       │   ├── ClientTrackServiceTest.java
│           │                       │   ├── ConfigCacheServiceTest.java
│           │                       │   ├── ConfigChangePublisherTest.java
│           │                       │   ├── ConfigFuzzyWatchContextServiceTest.java
│           │                       │   ├── ConfigOperationServiceTest.java
│           │                       │   ├── ConfigSubServiceTest.java
│           │                       │   ├── HistoryServiceTest.java
│           │                       │   ├── LongPollingServiceTest.java
│           │                       │   ├── NamespaceConfigInfoServiceTest.java
│           │                       │   ├── capacity/
│           │                       │   │   ├── CapacityServiceTest.java
│           │                       │   │   ├── GroupCapacityPersistServiceTest.java
│           │                       │   │   └── TenantCapacityPersistServiceTest.java
│           │                       │   ├── dump/
│           │                       │   │   ├── DefaultHistoryConfigCleanerTest.java
│           │                       │   │   ├── DumpChangeConfigWorkerTest.java
│           │                       │   │   ├── DumpChangeGrayConfigWorkerTest.java
│           │                       │   │   ├── DumpProcessorTest.java
│           │                       │   │   ├── DumpProcessorUserRwaDiskTest.java
│           │                       │   │   ├── DumpServiceTest.java
│           │                       │   │   ├── HistoryConfigCleanerConfigTest.java
│           │                       │   │   ├── HistoryConfigCleanerManagerTest.java
│           │                       │   │   ├── disk/
│           │                       │   │   │   ├── ConfigDiskServiceFactoryTest.java
│           │                       │   │   │   └── ConfigRawDiskServiceTest.java
│           │                       │   │   └── processor/
│           │                       │   │       ├── DumpAllGrayProcessorTest.java
│           │                       │   │       └── DumpAllProcessorTest.java
│           │                       │   ├── notify/
│           │                       │   │   └── AsyncNotifyServiceTest.java
│           │                       │   ├── query/
│           │                       │   │   ├── DefaultChainRequestExtractorTest.java
│           │                       │   │   └── handler/
│           │                       │   │       ├── ConfigChainEntryHandlerTest.java
│           │                       │   │       ├── ConfigContentTypeHandlerTest.java
│           │                       │   │       ├── FormalHandlerTest.java
│           │                       │   │       ├── GrayRuleMatchHandlerTest.java
│           │                       │   │       └── SpecialTagNotFoundHandlerTest.java
│           │                       │   └── repository/
│           │                       │       ├── ConfigRowMapperInjectorTest.java
│           │                       │       ├── embedded/
│           │                       │       │   ├── EmbeddedConfigInfoBetaPersistServiceImplTest.java
│           │                       │       │   ├── EmbeddedConfigInfoGrayPersistServiceImplTest.java
│           │                       │       │   ├── EmbeddedConfigInfoPersistServiceImplTest.java
│           │                       │       │   ├── EmbeddedConfigInfoTagPersistServiceImplTest.java
│           │                       │       │   └── EmbeddedHistoryConfigInfoPersistServiceImplTest.java
│           │                       │       └── extrnal/
│           │                       │           ├── ExternalConfigInfoBetaPersistServiceImplTest.java
│           │                       │           ├── ExternalConfigInfoGrayPersistServiceImplTest.java
│           │                       │           ├── ExternalConfigInfoPersistServiceImplTest.java
│           │                       │           ├── ExternalConfigInfoTagPersistServiceImplTest.java
│           │                       │           └── ExternalHistoryConfigInfoPersistServiceImplTest.java
│           │                       └── utils/
│           │                           ├── AccumulateStatCountTest.java
│           │                           ├── AppNameUtilsTest.java
│           │                           ├── ConfigExecutorTest.java
│           │                           ├── ConfigExtInfoUtilTest.java
│           │                           ├── ContentUtilsTest.java
│           │                           ├── GroupKey2Test.java
│           │                           ├── GroupKeyTest.java
│           │                           ├── LogUtilTest.java
│           │                           ├── MD5UtilTest.java
│           │                           ├── Md5ComparatorDelegateTest.java
│           │                           ├── NacosMd5ComparatorTest.java
│           │                           ├── ParamUtilsTest.java
│           │                           ├── PropertyUtilTest.java
│           │                           ├── ProtocolTest.java
│           │                           ├── RegexParserTest.java
│           │                           ├── RequestUtilTest.java
│           │                           ├── ResponseUtilTest.java
│           │                           ├── SimpleCacheTest.java
│           │                           ├── SimpleFlowDataTest.java
│           │                           ├── SimpleIpFlowDataTest.java
│           │                           ├── SimpleReadWriteLockTest.java
│           │                           ├── SystemConfigTest.java
│           │                           ├── TestCaseUtils.java
│           │                           ├── TimeUtilsTest.java
│           │                           ├── TimeoutUtilsTest.java
│           │                           ├── TraceLogUtilTest.java
│           │                           ├── UrlAnalysisUtilsTest.java
│           │                           ├── YamlParserUtilTest.java
│           │                           └── ZipUtilsTest.java
│           └── resources/
│               ├── application.properties
│               ├── log4j.properties
│               ├── logback-test.xml
│               └── user.properties
├── consistency/
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── alibaba/
│       │   │           └── nacos/
│       │   │               └── consistency/
│       │   │                   ├── CommandOperations.java
│       │   │                   ├── Config.java
│       │   │                   ├── ConsistencyProtocol.java
│       │   │                   ├── DataOperation.java
│       │   │                   ├── IdGenerator.java
│       │   │                   ├── ProtoMessageUtil.java
│       │   │                   ├── ProtocolMetaData.java
│       │   │                   ├── RequestProcessor.java
│       │   │                   ├── SerializeFactory.java
│       │   │                   ├── Serializer.java
│       │   │                   ├── ap/
│       │   │                   │   ├── APProtocol.java
│       │   │                   │   └── RequestProcessor4AP.java
│       │   │                   ├── cp/
│       │   │                   │   ├── CPProtocol.java
│       │   │                   │   ├── MetadataKey.java
│       │   │                   │   └── RequestProcessor4CP.java
│       │   │                   ├── exception/
│       │   │                   │   └── ConsistencyException.java
│       │   │                   ├── serialize/
│       │   │                   │   ├── HessianSerializer.java
│       │   │                   │   ├── JacksonSerializer.java
│       │   │                   │   └── NacosHessianSerializerFactory.java
│       │   │                   └── snapshot/
│       │   │                       ├── LocalFileMeta.java
│       │   │                       ├── Reader.java
│       │   │                       ├── SnapshotOperation.java
│       │   │                       └── Writer.java
│       │   ├── proto/
│       │   │   ├── Data.proto
│       │   │   └── consistency.proto
│       │   └── resources/
│       │       └── META-INF/
│       │           └── services/
│       │               └── com.alibaba.nacos.consistency.Serializer
│       └── test/
│           └── java/
│               └── com/
│                   └── alibaba/
│                       └── nacos/
│                           └── consistency/
│                               ├── CommandOperationsTest.java
│                               ├── DataOperationTest.java
│                               ├── ProtoMessageUtilTest.java
│                               ├── ProtocolMetaDataTest.java
│                               ├── RequestProcessorTest.java
│                               ├── SerializeFactoryTest.java
│                               ├── ap/
│                               │   └── RequestProcessor4APTest.java
│                               ├── cp/
│                               │   ├── MetadataKeyTest.java
│                               │   └── RequestProcessor4CPTest.java
│                               ├── exception/
│                               │   └── ConsistencyExceptionTest.java
│                               ├── serialize/
│                               │   ├── HessianSerializerTest.java
│                               │   └── JacksonSerializerTest.java
│                               └── snapshot/
│                                   ├── LocalFileMetaTest.java
│                                   ├── ReaderTest.java
│                                   └── WriterTest.java
├── console/
│   ├── README.md
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── alibaba/
│       │   │           └── nacos/
│       │   │               ├── Nacos.java
│       │   │               └── console/
│       │   │                   ├── NacosConsole.java
│       │   │                   ├── NacosConsoleStartUp.java
│       │   │                   ├── aot/
│       │   │                   │   ├── AotConfiguration.java
│       │   │                   │   └── NacosRuntimeHints.java
│       │   │                   ├── cluster/
│       │   │                   │   └── RemoteServerMemberManager.java
│       │   │                   ├── config/
│       │   │                   │   ├── ConsoleAuthModuleStateBuilder.java
│       │   │                   │   ├── ConsoleCorsConfig.java
│       │   │                   │   ├── ConsoleDeploymentConfig.java
│       │   │                   │   ├── ConsoleFunctionEnabledConfig.java
│       │   │                   │   ├── ConsoleModuleStateBuilder.java
│       │   │                   │   ├── ConsolePackageExcludeFilter.java
│       │   │                   │   ├── ConsoleWebConfig.java
│       │   │                   │   ├── NacosConsoleAuthConfig.java
│       │   │                   │   └── NacosConsoleBeanPostProcessorConfiguration.java
│       │   │                   ├── controller/
│       │   │                   │   └── v3/
│       │   │                   │       ├── ConsoleHealthController.java
│       │   │                   │       ├── ConsoleServerStateController.java
│       │   │                   │       ├── ai/
│       │   │                   │       │   ├── ConsoleA2aController.java
│       │   │                   │       │   ├── ConsoleCopilotConfigController.java
│       │   │                   │       │   ├── ConsoleCopilotController.java
│       │   │                   │       │   ├── ConsoleMcpController.java
│       │   │                   │       │   ├── ConsolePromptController.java
│       │   │                   │       │   ├── ConsoleSkillController.java
│       │   │                   │       │   ├── CopilotHttpParamExtractor.java
│       │   │                   │       │   └── CopilotSseExceptionHandler.java
│       │   │                   │       ├── config/
│       │   │                   │       │   ├── ConsoleConfigController.java
│       │   │                   │       │   └── ConsoleHistoryController.java
│       │   │                   │       ├── core/
│       │   │                   │       │   ├── ConsoleClusterController.java
│       │   │                   │       │   ├── ConsoleNamespaceController.java
│       │   │                   │       │   └── ConsolePluginController.java
│       │   │                   │       └── naming/
│       │   │                   │           ├── ConsoleInstanceController.java
│       │   │                   │           └── ConsoleServiceController.java
│       │   │                   ├── exception/
│       │   │                   │   └── ConsoleExceptionHandler.java
│       │   │                   ├── filter/
│       │   │                   │   ├── NacosConsoleAuthFilter.java
│       │   │                   │   └── XssFilter.java
│       │   │                   ├── handler/
│       │   │                   │   ├── HealthHandler.java
│       │   │                   │   ├── ServerStateHandler.java
│       │   │                   │   ├── ai/
│       │   │                   │   │   ├── A2aHandler.java
│       │   │                   │   │   ├── EnabledAiHandler.java
│       │   │                   │   │   ├── McpHandler.java
│       │   │                   │   │   ├── PromptHandler.java
│       │   │                   │   │   └── SkillHandler.java
│       │   │                   │   ├── config/
│       │   │                   │   │   ├── ConfigHandler.java
│       │   │                   │   │   └── HistoryHandler.java
│       │   │                   │   ├── core/
│       │   │                   │   │   ├── ClusterHandler.java
│       │   │                   │   │   ├── NamespaceHandler.java
│       │   │                   │   │   └── PluginHandler.java
│       │   │                   │   ├── impl/
│       │   │                   │   │   ├── AbstractServerStateHandler.java
│       │   │                   │   │   ├── ConditionFunctionEnabled.java
│       │   │                   │   │   ├── inner/
│       │   │                   │   │   │   ├── EnabledInnerHandler.java
│       │   │                   │   │   │   ├── HealthInnerHandler.java
│       │   │                   │   │   │   ├── ServerStateInnerHandler.java
│       │   │                   │   │   │   ├── ai/
│       │   │                   │   │   │   │   ├── A2aInnerHandler.java
│       │   │                   │   │   │   │   ├── McpInnerHandler.java
│       │   │                   │   │   │   │   ├── PromptInnerHandler.java
│       │   │                   │   │   │   │   └── SkillInnerHandler.java
│       │   │                   │   │   │   ├── config/
│       │   │                   │   │   │   │   ├── ConfigInnerHandler.java
│       │   │                   │   │   │   │   └── HistoryInnerHandler.java
│       │   │                   │   │   │   ├── core/
│       │   │                   │   │   │   │   ├── ClusterInnerHandler.java
│       │   │                   │   │   │   │   ├── NamespaceInnerHandler.java
│       │   │                   │   │   │   │   └── PluginInnerHandler.java
│       │   │                   │   │   │   └── naming/
│       │   │                   │   │   │       ├── InstanceInnerHandler.java
│       │   │                   │   │   │       └── ServiceInnerHandler.java
│       │   │                   │   │   ├── noop/
│       │   │                   │   │   │   ├── ai/
│       │   │                   │   │   │   │   ├── A2aNoopHandler.java
│       │   │                   │   │   │   │   ├── McpNoopHandler.java
│       │   │                   │   │   │   │   ├── PromptNoopHandler.java
│       │   │                   │   │   │   │   └── SkillNoopHandler.java
│       │   │                   │   │   │   ├── config/
│       │   │                   │   │   │   │   ├── ConfigNoopHandler.java
│       │   │                   │   │   │   │   └── HistoryNoopHandler.java
│       │   │                   │   │   │   └── naming/
│       │   │                   │   │   │       ├── InstanceNoopHandler.java
│       │   │                   │   │   │       └── ServiceNoopHandler.java
│       │   │                   │   │   └── remote/
│       │   │                   │   │       ├── ConsoleMaintainerClientAuthPlugin.java
│       │   │                   │   │       ├── EnabledRemoteHandler.java
│       │   │                   │   │       ├── HealthRemoteHandler.java
│       │   │                   │   │       ├── NacosMaintainerClientHolder.java
│       │   │                   │   │       ├── RemoteServerConnector.java
│       │   │                   │   │       ├── ServerStateRemoteHandler.java
│       │   │                   │   │       ├── ai/
│       │   │                   │   │       │   ├── A2aRemoteHandler.java
│       │   │                   │   │       │   ├── McpRemoteHandler.java
│       │   │                   │   │       │   ├── PromptRemoteHandler.java
│       │   │                   │   │       │   └── SkillRemoteHandler.java
│       │   │                   │   │       ├── config/
│       │   │                   │   │       │   ├── ConfigImportAndExportService.java
│       │   │                   │   │       │   ├── ConfigRemoteHandler.java
│       │   │                   │   │       │   └── HistoryRemoteHandler.java
│       │   │                   │   │       ├── core/
│       │   │                   │   │       │   ├── ClusterRemoteHandler.java
│       │   │                   │   │       │   ├── NamespaceRemoteHandler.java
│       │   │                   │   │       │   └── PluginRemoteHandler.java
│       │   │                   │   │       └── naming/
│       │   │                   │   │           ├── InstanceRemoteHandler.java
│       │   │                   │   │           └── ServiceRemoteHandler.java
│       │   │                   │   └── naming/
│       │   │                   │       ├── InstanceHandler.java
│       │   │                   │       └── ServiceHandler.java
│       │   │                   ├── paramcheck/
│       │   │                   │   └── ConsoleDefaultHttpParamExtractor.java
│       │   │                   └── proxy/
│       │   │                       ├── HealthProxy.java
│       │   │                       ├── ServerStateProxy.java
│       │   │                       ├── ai/
│       │   │                       │   ├── A2aProxy.java
│       │   │                       │   ├── McpProxy.java
│       │   │                       │   ├── PromptProxy.java
│       │   │                       │   └── SkillProxy.java
│       │   │                       ├── config/
│       │   │                       │   ├── ConfigProxy.java
│       │   │                       │   └── HistoryProxy.java
│       │   │                       ├── core/
│       │   │                       │   ├── ClusterProxy.java
│       │   │                       │   ├── NamespaceProxy.java
│       │   │                       │   └── PluginProxy.java
│       │   │                       └── naming/
│       │   │                           ├── InstanceProxy.java
│       │   │                           └── ServiceProxy.java
│       │   └── resources/
│       │       ├── META-INF/
│       │       │   ├── nacos-default.properties
│       │       │   ├── native-image/
│       │       │   │   └── com.alibaba.nacos/
│       │       │   │       └── nacos-console/
│       │       │   │           ├── jni-config.json
│       │       │   │           ├── predefined-classes-config.json
│       │       │   │           ├── proxy-config.json
│       │       │   │           ├── reflect-config.json
│       │       │   │           ├── resource-config.json
│       │       │   │           └── serialization-config.json
│       │       │   └── services/
│       │       │       ├── com.alibaba.nacos.auth.config.NacosAuthConfig
│       │       │       ├── com.alibaba.nacos.core.listener.startup.NacosStartUp
│       │       │       ├── com.alibaba.nacos.core.paramcheck.AbstractHttpParamExtractor
│       │       │       ├── com.alibaba.nacos.plugin.auth.spi.client.AbstractClientAuthService
│       │       │       ├── com.alibaba.nacos.sys.filter.NacosPackageExcludeFilter
│       │       │       └── com.alibaba.nacos.sys.module.ModuleStateBuilder
│       │       ├── nacos-console-banner.txt
│       │       ├── nacos-console.properties
│       │       └── static/
│       │           ├── console-ui/
│       │           │   └── public/
│       │           │       ├── css/
│       │           │       │   ├── bootstrap.css
│       │           │       │   ├── codemirror.css
│       │           │       │   ├── console1412.css
│       │           │       │   ├── font-awesome.css
│       │           │       │   ├── icon.css
│       │           │       │   └── merge.css
│       │           │       └── js/
│       │           │           ├── codemirror.addone.fullscreen.js
│       │           │           ├── codemirror.addone.json-lint.js
│       │           │           ├── codemirror.addone.lint.js
│       │           │           ├── codemirror.js
│       │           │           ├── codemirror.lib.clike-lint.js
│       │           │           ├── codemirror.lib.json-lint.js
│       │           │           ├── diff_match_patch.js
│       │           │           ├── javascript.js
│       │           │           ├── jquery.js
│       │           │           ├── loader.js
│       │           │           ├── merge.js
│       │           │           ├── vs/
│       │           │           │   ├── base/
│       │           │           │   │   └── worker/
│       │           │           │   │       └── workerMain.js
│       │           │           │   ├── basic-languages/
│       │           │           │   │   └── src/
│       │           │           │   │       ├── bat.js
│       │           │           │   │       ├── coffee.js
│       │           │           │   │       ├── cpp.js
│       │           │           │   │       ├── csharp.js
│       │           │           │   │       ├── css.js
│       │           │           │   │       ├── dockerfile.js
│       │           │           │   │       ├── fsharp.js
│       │           │           │   │       ├── go.js
│       │           │           │   │       ├── handlebars.js
│       │           │           │   │       ├── html.js
│       │           │           │   │       ├── ini.js
│       │           │           │   │       ├── java.js
│       │           │           │   │       ├── less.js
│       │           │           │   │       ├── lua.js
│       │           │           │   │       ├── markdown.js
│       │           │           │   │       ├── msdax.js
│       │           │           │   │       ├── objective-c.js
│       │           │           │   │       ├── php.js
│       │           │           │   │       ├── postiats.js
│       │           │           │   │       ├── powershell.js
│       │           │           │   │       ├── pug.js
│       │           │           │   │       ├── python.js
│       │           │           │   │       ├── r.js
│       │           │           │   │       ├── razor.js
│       │           │           │   │       ├── ruby.js
│       │           │           │   │       ├── sb.js
│       │           │           │   │       ├── scss.js
│       │           │           │   │       ├── solidity.js
│       │           │           │   │       ├── sql.js
│       │           │           │   │       ├── swift.js
│       │           │           │   │       ├── vb.js
│       │           │           │   │       ├── xml.js
│       │           │           │   │       └── yaml.js
│       │           │           │   ├── editor/
│       │           │           │   │   ├── editor.main.css
│       │           │           │   │   ├── editor.main.js
│       │           │           │   │   ├── editor.main.nls.de.js
│       │           │           │   │   ├── editor.main.nls.es.js
│       │           │           │   │   ├── editor.main.nls.fr.js
│       │           │           │   │   ├── editor.main.nls.hu.js
│       │           │           │   │   ├── editor.main.nls.it.js
│       │           │           │   │   ├── editor.main.nls.ja.js
│       │           │           │   │   ├── editor.main.nls.js
│       │           │           │   │   ├── editor.main.nls.ko.js
│       │           │           │   │   ├── editor.main.nls.pt-br.js
│       │           │           │   │   ├── editor.main.nls.ru.js
│       │           │           │   │   ├── editor.main.nls.tr.js
│       │           │           │   │   ├── editor.main.nls.zh-cn.js
│       │           │           │   │   └── editor.main.nls.zh-tw.js
│       │           │           │   ├── language/
│       │           │           │   │   ├── css/
│       │           │           │   │   │   ├── cssMode.js
│       │           │           │   │   │   └── cssWorker.js
│       │           │           │   │   ├── html/
│       │           │           │   │   │   ├── htmlMode.js
│       │           │           │   │   │   └── htmlWorker.js
│       │           │           │   │   ├── json/
│       │           │           │   │   │   ├── jsonMode.js
│       │           │           │   │   │   └── jsonWorker.js
│       │           │           │   │   └── typescript/
│       │           │           │   │       ├── lib/
│       │           │           │   │       │   └── typescriptServices.js
│       │           │           │   │       └── src/
│       │           │           │   │           ├── mode.js
│       │           │           │   │           └── worker.js
│       │           │           │   └── loader.js
│       │           │           └── xml.js
│       │           ├── css/
│       │           │   └── main.css
│       │           ├── index.html
│       │           ├── js/
│       │           │   └── main.js
│       │           └── login.html
│       └── test/
│           ├── java/
│           │   └── com/
│           │       └── alibaba/
│           │           └── nacos/
│           │               └── console/
│           │                   ├── NacosConsoleStartUpTest.java
│           │                   ├── aot/
│           │                   │   └── NacosRuntimeHintsTest.java
│           │                   ├── cluster/
│           │                   │   └── RemoteServerMemberManagerTest.java
│           │                   ├── config/
│           │                   │   ├── ConsoleAuthModuleStateBuilderTest.java
│           │                   │   ├── ConsoleCorsConfigTest.java
│           │                   │   ├── ConsoleDeploymentConfigTest.java
│           │                   │   ├── ConsoleFunctionEnabledConfigTest.java
│           │                   │   ├── ConsoleModuleStateBuilderTest.java
│           │                   │   ├── ConsoleWebConfigTest.java
│           │                   │   ├── NacosConsoleAuthConfigTest.java
│           │                   │   └── NacosConsoleBeanPostProcessorConfigurationTest.java
│           │                   ├── controller/
│           │                   │   └── v3/
│           │                   │       ├── ConsoleHealthControllerTest.java
│           │                   │       ├── ConsoleServerStateControllerTest.java
│           │                   │       ├── ai/
│           │                   │       │   ├── ConsoleA2aControllerTest.java
│           │                   │       │   └── ConsoleMcpControllerTest.java
│           │                   │       ├── config/
│           │                   │       │   ├── ConsoleConfigControllerTest.java
│           │                   │       │   └── ConsoleHistoryControllerTest.java
│           │                   │       ├── core/
│           │                   │       │   ├── ConsoleClusterControllerTest.java
│           │                   │       │   └── ConsoleNamespaceControllerTest.java
│           │                   │       └── naming/
│           │                   │           ├── ConsoleInstanceControllerTest.java
│           │                   │           └── ConsoleServiceControllerTest.java
│           │                   ├── exception/
│           │                   │   └── ConsoleExceptionHandlerTest.java
│           │                   ├── filter/
│           │                   │   ├── NacosConsoleAuthFilterTest.java
│           │                   │   └── XssFilterTest.java
│           │                   ├── handler/
│           │                   │   └── impl/
│           │                   │       ├── AbstractServerStateHandlerTest.java
│           │                   │       ├── ConditionFunctionEnabledTest.java
│           │                   │       ├── inner/
│           │                   │       │   ├── HealthInnerHandlerTest.java
│           │                   │       │   ├── ServerStateInnerHandlerTest.java
│           │                   │       │   ├── ai/
│           │                   │       │   │   ├── A2aInnerHandlerTest.java
│           │                   │       │   │   └── McpInnerHandlerTest.java
│           │                   │       │   ├── config/
│           │                   │       │   │   ├── ConfigInnerHandlerTest.java
│           │                   │       │   │   └── HistoryInnerHandlerTest.java
│           │                   │       │   ├── core/
│           │                   │       │   │   ├── ClusterInnerHandlerTest.java
│           │                   │       │   │   ├── NamespaceInnerHandlerTest.java
│           │                   │       │   │   └── PluginInnerHandlerTest.java
│           │                   │       │   └── naming/
│           │                   │       │       ├── InstanceInnerHandlerTest.java
│           │                   │       │       └── ServiceInnerHandlerTest.java
│           │                   │       ├── noop/
│           │                   │       │   ├── ai/
│           │                   │       │   │   ├── A2aNoopHandlerTest.java
│           │                   │       │   │   └── McpNoopHandlerTest.java
│           │                   │       │   ├── config/
│           │                   │       │   │   ├── ConfigNoopHandlerTest.java
│           │                   │       │   │   └── HistoryNoopHandlerTest.java
│           │                   │       │   └── naming/
│           │                   │       │       ├── InstanceNoopHandlerTest.java
│           │                   │       │       └── ServiceNoopHandlerTest.java
│           │                   │       └── remote/
│           │                   │           ├── AbstractRemoteHandlerTest.java
│           │                   │           ├── ConsoleMaintainerClientAuthPluginTest.java
│           │                   │           ├── HealthRemoteHandlerTest.java
│           │                   │           ├── NacosMaintainerClientHolderTest.java
│           │                   │           ├── RemoteServerConnectorTest.java
│           │                   │           ├── ServerStateRemoteHandlerTest.java
│           │                   │           ├── ai/
│           │                   │           │   ├── A2aRemoteHandlerTest.java
│           │                   │           │   └── McpRemoteHandlerTest.java
│           │                   │           ├── config/
│           │                   │           │   ├── ConfigImportAndExportServiceTest.java
│           │                   │           │   ├── ConfigRemoteHandlerTest.java
│           │                   │           │   └── HistoryRemoteHandlerTest.java
│           │                   │           ├── core/
│           │                   │           │   ├── ClusterRemoteHandlerTest.java
│           │                   │           │   ├── NamespaceRemoteHandlerTest.java
│           │                   │           │   └── PluginRemoteHandlerTest.java
│           │                   │           └── naming/
│           │                   │               ├── InstanceRemoteHandlerTest.java
│           │                   │               └── ServiceRemoteHandlerTest.java
│           │                   ├── paramcheck/
│           │                   │   └── ConsoleDefaultHttpParamExtractorTest.java
│           │                   └── proxy/
│           │                       ├── HealthProxyTest.java
│           │                       ├── ServerStateProxyTest.java
│           │                       ├── ai/
│           │                       │   ├── A2aProxyTest.java
│           │                       │   └── McpProxyTest.java
│           │                       ├── config/
│           │                       │   ├── ConfigProxyTest.java
│           │                       │   └── HistoryProxyTest.java
│           │                       ├── core/
│           │                       │   ├── ClusterProxyTest.java
│           │                       │   └── NamespaceProxyTest.java
│           │                       └── naming/
│           │                           ├── InstanceProxyTest.java
│           │                           └── ServiceProxyTest.java
│           └── resources/
│               ├── mock/
│               │   ├── application.properties
│               │   └── existconf/
│               │       ├── announcement_zh_CN.conf
│               │       └── console-guide.conf
│               └── nacos-console.properties
├── console-ui/
│   ├── .babelrc
│   ├── .editorconfig
│   ├── .eslintignore
│   ├── .eslintrc
│   ├── .gitignore
│   ├── .prettierignore
│   ├── .prettierrc
│   ├── README.md
│   ├── build/
│   │   ├── copy-dist.js
│   │   ├── copyFile.js
│   │   ├── webpack.base.conf.js
│   │   ├── webpack.dev.conf.js
│   │   └── webpack.prod.conf.js
│   ├── package.json
│   ├── public/
│   │   └── index.ejs
│   ├── src/
│   │   ├── components/
│   │   │   ├── BatchHandle/
│   │   │   │   ├── BatchHandle.js
│   │   │   │   ├── index.js
│   │   │   │   └── index.scss
│   │   │   ├── CloneDialog/
│   │   │   │   ├── CloneDialog.js
│   │   │   │   ├── index.js
│   │   │   │   └── index.scss
│   │   │   ├── Copy/
│   │   │   │   └── index.jsx
│   │   │   ├── DeleteDialog/
│   │   │   │   ├── DeleteDialog.js
│   │   │   │   ├── index.js
│   │   │   │   └── index.scss
│   │   │   ├── DiffEditorDialog/
│   │   │   │   ├── DiffEditorDialog.js
│   │   │   │   ├── index.js
│   │   │   │   └── index.scss
│   │   │   ├── EditorNameSpace/
│   │   │   │   ├── EditorNameSpace.js
│   │   │   │   ├── index.js
│   │   │   │   └── index.scss
│   │   │   ├── ExportDialog/
│   │   │   │   ├── ExportDialog.js
│   │   │   │   ├── index.js
│   │   │   │   └── index.scss
│   │   │   ├── ImportDialog/
│   │   │   │   ├── ImportDialog.js
│   │   │   │   ├── index.js
│   │   │   │   └── index.scss
│   │   │   ├── MagicWandIcon/
│   │   │   │   └── MagicWandIcon.js
│   │   │   ├── MarkdownRenderer/
│   │   │   │   └── MarkdownRenderer.js
│   │   │   ├── MonacoEditor/
│   │   │   │   ├── MonacoEditor.tsx
│   │   │   │   ├── constant.ts
│   │   │   │   ├── index.scss
│   │   │   │   └── index.tsx
│   │   │   ├── NameSpaceList/
│   │   │   │   ├── NameSpaceList.js
│   │   │   │   ├── index.js
│   │   │   │   ├── index.scss
│   │   │   │   └── show.js
│   │   │   ├── NewNameSpace/
│   │   │   │   ├── NewNameSpace.js
│   │   │   │   ├── index.js
│   │   │   │   └── index.scss
│   │   │   ├── Page/
│   │   │   │   └── TotalRender.js
│   │   │   ├── PageTitle/
│   │   │   │   └── index.js
│   │   │   ├── QueryResult/
│   │   │   │   ├── index.js
│   │   │   │   └── index.scss
│   │   │   ├── RegionGroup/
│   │   │   │   ├── RegionGroup.js
│   │   │   │   ├── index.js
│   │   │   │   └── index.scss
│   │   │   ├── ShowCodeing/
│   │   │   │   ├── ShowCodeing.js
│   │   │   │   ├── ShowServiceCodeing.js
│   │   │   │   ├── index.js
│   │   │   │   └── index.scss
│   │   │   └── SuccessDialog/
│   │   │       ├── SuccessDialog.js
│   │   │       ├── index.js
│   │   │       └── index.scss
│   │   ├── config.js
│   │   ├── constants.js
│   │   ├── globalLib.js
│   │   ├── index.js
│   │   ├── index.scss
│   │   ├── layouts/
│   │   │   ├── Header.js
│   │   │   ├── MainLayout.js
│   │   │   ├── index.scss
│   │   │   └── menu.js
│   │   ├── lib.js
│   │   ├── locales/
│   │   │   ├── en-US.js
│   │   │   ├── index.js
│   │   │   └── zh-CN.js
│   │   ├── pages/
│   │   │   ├── AI/
│   │   │   │   ├── AgentDetail/
│   │   │   │   │   ├── AgentDetail.js
│   │   │   │   │   └── index.js
│   │   │   │   ├── AgentManagement/
│   │   │   │   │   ├── AgentManagement.js
│   │   │   │   │   ├── AgentManagement.scss
│   │   │   │   │   └── index.js
│   │   │   │   ├── McpDetail/
│   │   │   │   │   ├── CreateTools/
│   │   │   │   │   │   ├── AdvancedConfig.js
│   │   │   │   │   │   ├── AnnotationsEditor.js
│   │   │   │   │   │   ├── BasicInfo.js
│   │   │   │   │   │   ├── CreateTools.css
│   │   │   │   │   │   ├── DeleteTool.js
│   │   │   │   │   │   ├── InputSchema.js
│   │   │   │   │   │   ├── MetaEditor.js
│   │   │   │   │   │   ├── OutputSchema.js
│   │   │   │   │   │   ├── SchemaEditor.js
│   │   │   │   │   │   ├── components.js
│   │   │   │   │   │   ├── index.js
│   │   │   │   │   │   └── utils.js
│   │   │   │   │   ├── McpDetail.css
│   │   │   │   │   ├── McpDetail.js
│   │   │   │   │   ├── ShowTools.css
│   │   │   │   │   ├── ShowTools.css.bak
│   │   │   │   │   ├── ShowTools.js
│   │   │   │   │   ├── Swagger2Tools.js
│   │   │   │   │   └── index.js
│   │   │   │   ├── McpManagement/
│   │   │   │   │   ├── DashboardCard.js
│   │   │   │   │   ├── ImportMcpDialog.jsx
│   │   │   │   │   ├── McpManagement.js
│   │   │   │   │   └── index.js
│   │   │   │   ├── NewAgent/
│   │   │   │   │   ├── NewAgent.js
│   │   │   │   │   ├── NewAgent.scss
│   │   │   │   │   └── index.js
│   │   │   │   ├── NewMcpServer/
│   │   │   │   │   ├── NewMcpServer.css
│   │   │   │   │   ├── NewMcpServer.js
│   │   │   │   │   └── index.js
│   │   │   │   ├── NewPrompt/
│   │   │   │   │   ├── NewPrompt.js
│   │   │   │   │   ├── NewPrompt.scss
│   │   │   │   │   └── index.js
│   │   │   │   ├── NewSkill/
│   │   │   │   │   ├── NewSkill.js
│   │   │   │   │   ├── NewSkill.scss
│   │   │   │   │   └── index.js
│   │   │   │   ├── PromptDetail/
│   │   │   │   │   ├── PromptDetail.js
│   │   │   │   │   ├── PromptDetail.scss
│   │   │   │   │   └── index.js
│   │   │   │   ├── PromptManagement/
│   │   │   │   │   ├── PromptManagement.js
│   │   │   │   │   ├── PromptManagement.scss
│   │   │   │   │   └── index.js
│   │   │   │   ├── PromptOptimizeDialog/
│   │   │   │   │   ├── PromptOptimizeDialog.js
│   │   │   │   │   ├── PromptOptimizeDialog.scss
│   │   │   │   │   └── index.js
│   │   │   │   ├── PublishPromptVersion/
│   │   │   │   │   ├── PublishPromptVersion.js
│   │   │   │   │   ├── PublishPromptVersion.scss
│   │   │   │   │   └── index.js
│   │   │   │   ├── README.md
│   │   │   │   ├── SkillDetail/
│   │   │   │   │   ├── SkillDetail.js
│   │   │   │   │   ├── SkillDetail.scss
│   │   │   │   │   └── index.js
│   │   │   │   ├── SkillManagement/
│   │   │   │   │   ├── SkillManagement.js
│   │   │   │   │   ├── SkillManagement.scss
│   │   │   │   │   ├── SkillOptimizeDialog.js
│   │   │   │   │   ├── SkillOptimizeDialog.scss
│   │   │   │   │   └── index.js
│   │   │   │   └── services/
│   │   │   │       └── OpenApiService.js
│   │   │   ├── AuthorityControl/
│   │   │   │   ├── PermissionsManagement/
│   │   │   │   │   ├── NewPermissions.js
│   │   │   │   │   ├── PermissionsManagement.js
│   │   │   │   │   ├── PermissionsManagement.scss
│   │   │   │   │   └── index.js
│   │   │   │   ├── README.md
│   │   │   │   ├── RolesManagement/
│   │   │   │   │   ├── NewRole.js
│   │   │   │   │   ├── RolesManagement.js
│   │   │   │   │   ├── RolesManagement.scss
│   │   │   │   │   └── index.js
│   │   │   │   ├── UserManagement/
│   │   │   │   │   ├── NewUser.js
│   │   │   │   │   ├── PasswordReset.js
│   │   │   │   │   ├── UserManagement.js
│   │   │   │   │   ├── UserManagement.scss
│   │   │   │   │   └── index.js
│   │   │   │   └── authority.scss
│   │   │   ├── ClusterManagement/
│   │   │   │   └── ClusterNodeList/
│   │   │   │       ├── ClusterNodeList.js
│   │   │   │       ├── ClusterNodeList.scss
│   │   │   │       └── index.js
│   │   │   ├── ConfigurationManagement/
│   │   │   │   ├── ConfigDetail/
│   │   │   │   │   ├── ConfigCompared.js
│   │   │   │   │   ├── ConfigDetail.js
│   │   │   │   │   ├── index.js
│   │   │   │   │   └── index.scss
│   │   │   │   ├── ConfigEditor/
│   │   │   │   │   ├── ConfigEditor.js
│   │   │   │   │   ├── NewConfigEditor.js
│   │   │   │   │   ├── index.js
│   │   │   │   │   └── index.scss
│   │   │   │   ├── ConfigRollback/
│   │   │   │   │   ├── ConfigRollback.js
│   │   │   │   │   ├── index.js
│   │   │   │   │   └── index.scss
│   │   │   │   ├── ConfigSync/
│   │   │   │   │   ├── ConfigSync.js
│   │   │   │   │   ├── index.js
│   │   │   │   │   └── index.scss
│   │   │   │   ├── ConfigurationManagement/
│   │   │   │   │   ├── ConfigurationManagement.js
│   │   │   │   │   ├── DashboardCard.js
│   │   │   │   │   ├── index.js
│   │   │   │   │   └── index.scss
│   │   │   │   ├── HistoryDetail/
│   │   │   │   │   ├── HistoryDetail.js
│   │   │   │   │   ├── index.js
│   │   │   │   │   └── index.scss
│   │   │   │   ├── HistoryRollback/
│   │   │   │   │   ├── HistoryRollback.js
│   │   │   │   │   ├── index.js
│   │   │   │   │   └── index.scss
│   │   │   │   ├── ListeningToQuery/
│   │   │   │   │   ├── ListeningToQuery.js
│   │   │   │   │   ├── index.js
│   │   │   │   │   └── index.scss
│   │   │   │   └── NewConfig/
│   │   │   │       ├── NewConfig.js
│   │   │   │       ├── index.js
│   │   │   │       └── index.scss
│   │   │   ├── Login/
│   │   │   │   ├── Login.jsx
│   │   │   │   ├── index.jsx
│   │   │   │   └── index.scss
│   │   │   ├── NameSpace/
│   │   │   │   ├── NameSpace.js
│   │   │   │   ├── index.js
│   │   │   │   └── index.scss
│   │   │   ├── PluginManagement/
│   │   │   │   └── PluginList/
│   │   │   │       ├── PluginDetail.js
│   │   │   │       ├── PluginList.js
│   │   │   │       ├── PluginList.scss
│   │   │   │       └── index.js
│   │   │   ├── Register/
│   │   │   │   ├── Register.jsx
│   │   │   │   ├── index.jsx
│   │   │   │   └── index.scss
│   │   │   ├── ServiceManagement/
│   │   │   │   ├── ServiceDetail/
│   │   │   │   │   ├── EditClusterDialog.js
│   │   │   │   │   ├── EditInstanceDialog.js
│   │   │   │   │   ├── EditServiceDialog.js
│   │   │   │   │   ├── InstanceFilter.js
│   │   │   │   │   ├── InstanceTable.js
│   │   │   │   │   ├── ServiceDetail.js
│   │   │   │   │   ├── ServiceDetail.scss
│   │   │   │   │   ├── constant.js
│   │   │   │   │   ├── index.js
│   │   │   │   │   └── util.js
│   │   │   │   ├── ServiceList/
│   │   │   │   │   ├── ServiceList.js
│   │   │   │   │   ├── ServiceList.scss
│   │   │   │   │   └── index.js
│   │   │   │   └── SubscriberList/
│   │   │   │       ├── SubscriberList.js
│   │   │   │       ├── SubscriberList.scss
│   │   │   │       └── index.js
│   │   │   ├── SettingCenter/
│   │   │   │   ├── CopilotConfig.js
│   │   │   │   ├── SettingCenter.js
│   │   │   │   ├── index.js
│   │   │   │   └── index.scss
│   │   │   └── Welcome/
│   │   │       ├── Welcome.js
│   │   │       └── index.js
│   │   ├── reducers/
│   │   │   ├── authority.js
│   │   │   ├── base.js
│   │   │   ├── configuration.js
│   │   │   ├── index.js
│   │   │   ├── locale.js
│   │   │   ├── namespace.js
│   │   │   └── subscribers.js
│   │   ├── theme/
│   │   │   ├── index.js
│   │   │   └── index.scss
│   │   └── utils/
│   │       ├── languageDetector.js
│   │       ├── message.js
│   │       ├── nacosutil.js
│   │       ├── request.js
│   │       └── validateContent.js
│   ├── test/
│   │   ├── .editorconfig
│   │   ├── .gitignore
│   │   ├── README.md
│   │   ├── commons/
│   │   │   └── commons.md
│   │   ├── config.json
│   │   ├── hosts
│   │   ├── install.sh
│   │   ├── package.json
│   │   ├── run.bat
│   │   ├── run.sh
│   │   ├── sample/
│   │   │   ├── configDetail.spec.js
│   │   │   ├── configurationManagement.spec.js
│   │   │   └── instanceFilter.spec.js
│   │   └── uploadfiles/
│   │       └── uploadfiles.md
│   └── tsconfig.json
├── copilot/
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── alibaba/
│       │   │           └── nacos/
│       │   │               └── copilot/
│       │   │                   ├── adapter/
│       │   │                   │   └── StreamResponseCallback.java
│       │   │                   ├── capability/
│       │   │                   │   └── prompt/
│       │   │                   │       ├── PromptOptimizationPrompt.java
│       │   │                   │       ├── SkillGenerationPrompt.java
│       │   │                   │       └── SkillOptimizationPrompt.java
│       │   │                   ├── config/
│       │   │                   │   ├── CopilotAgentManager.java
│       │   │                   │   ├── CopilotConfigStorage.java
│       │   │                   │   ├── CopilotConfiguration.java
│       │   │                   │   └── CopilotProperties.java
│       │   │                   ├── constant/
│       │   │                   │   └── CopilotConstants.java
│       │   │                   ├── form/
│       │   │                   │   ├── PromptDebugForm.java
│       │   │                   │   ├── PromptOptimizationForm.java
│       │   │                   │   ├── SkillGenerationForm.java
│       │   │                   │   └── SkillOptimizationForm.java
│       │   │                   ├── model/
│       │   │                   │   ├── ChatMessage.java
│       │   │                   │   ├── ChatRequest.java
│       │   │                   │   ├── ChatResponse.java
│       │   │                   │   ├── ConversationHistory.java
│       │   │                   │   ├── ConversationMessage.java
│       │   │                   │   ├── OptimizationChange.java
│       │   │                   │   ├── PromptDebugRequest.java
│       │   │                   │   ├── PromptDebugResponse.java
│       │   │                   │   ├── PromptOptimizationRequest.java
│       │   │                   │   ├── PromptOptimizationResponse.java
│       │   │                   │   ├── SkillGenerationRequest.java
│       │   │                   │   ├── SkillGenerationResponse.java
│       │   │                   │   ├── SkillOptimizationRequest.java
│       │   │                   │   ├── SkillOptimizationResponse.java
│       │   │                   │   └── StreamResponseType.java
│       │   │                   └── service/
│       │   │                       ├── PromptDebugService.java
│       │   │                       ├── PromptDebugServiceImpl.java
│       │   │                       ├── PromptOptimizationService.java
│       │   │                       ├── PromptOptimizationServiceImpl.java
│       │   │                       ├── SkillGenerationService.java
│       │   │                       ├── SkillGenerationServiceImpl.java
│       │   │                       ├── SkillOptimizationService.java
│       │   │                       ├── SkillOptimizationServiceImpl.java
│       │   │                       └── StreamEventProcessor.java
│       │   └── resources/
│       │       └── META-INF/
│       │           └── spring/
│       │               └── org.springframework.boot.autoconfigure.AutoConfiguration.imports
│       └── test/
│           └── java/
│               └── com/
│                   └── alibaba/
│                       └── nacos/
│                           └── copilot/
│                               ├── config/
│                               │   ├── CopilotAgentManagerTest.java
│                               │   └── CopilotPropertiesTest.java
│                               ├── form/
│                               │   ├── SkillGenerationFormTest.java
│                               │   └── SkillOptimizationFormTest.java
│                               ├── model/
│                               │   ├── ChatMessageTest.java
│                               │   ├── ChatRequestTest.java
│                               │   ├── ChatResponseTest.java
│                               │   ├── OptimizationChangeTest.java
│                               │   ├── SkillOptimizationResponseTest.java
│                               │   └── StreamResponseTypeTest.java
│                               └── service/
│                                   ├── SkillGenerationServiceImplTest.java
│                                   ├── SkillOptimizationServiceImplTest.java
│                                   └── StreamEventProcessorTest.java
├── core/
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   ├── com/
│       │   │   │   └── alibaba/
│       │   │   │       └── nacos/
│       │   │   │           └── core/
│       │   │   │               ├── ability/
│       │   │   │               │   ├── RemoteAbilityInitializer.java
│       │   │   │               │   ├── ServerAbilityInitializer.java
│       │   │   │               │   ├── ServerAbilityInitializerHolder.java
│       │   │   │               │   ├── config/
│       │   │   │               │   │   └── AbilityConfigs.java
│       │   │   │               │   └── control/
│       │   │   │               │       └── ServerAbilityControlManager.java
│       │   │   │               ├── auth/
│       │   │   │               │   ├── AbstractWebAuthFilter.java
│       │   │   │               │   ├── AuthAdminFilter.java
│       │   │   │               │   ├── AuthConfig.java
│       │   │   │               │   ├── AuthFilter.java
│       │   │   │               │   ├── AuthModuleStateBuilder.java
│       │   │   │               │   ├── InnerApiAuthEnabled.java
│       │   │   │               │   ├── NacosServerAdminAuthConfig.java
│       │   │   │               │   ├── NacosServerAuthConfig.java
│       │   │   │               │   └── RemoteRequestAuthFilter.java
│       │   │   │               ├── cluster/
│       │   │   │               │   ├── Member.java
│       │   │   │               │   ├── MemberChangeListener.java
│       │   │   │               │   ├── MemberLookup.java
│       │   │   │               │   ├── MemberMetaDataConstants.java
│       │   │   │               │   ├── MemberUtil.java
│       │   │   │               │   ├── MembersChangeEvent.java
│       │   │   │               │   ├── NacosMemberManager.java
│       │   │   │               │   ├── ServerMemberManager.java
│       │   │   │               │   ├── Task.java
│       │   │   │               │   ├── health/
│       │   │   │               │   │   ├── AbstractModuleHealthChecker.java
│       │   │   │               │   │   ├── ModuleHealthCheckerHolder.java
│       │   │   │               │   │   └── ReadinessResult.java
│       │   │   │               │   ├── lookup/
│       │   │   │               │   │   ├── AbstractMemberLookup.java
│       │   │   │               │   │   ├── AddressServerMemberLookup.java
│       │   │   │               │   │   ├── FileConfigMemberLookup.java
│       │   │   │               │   │   ├── LookupFactory.java
│       │   │   │               │   │   └── StandaloneMemberLookup.java
│       │   │   │               │   └── remote/
│       │   │   │               │       ├── ClusterRpcClientProxy.java
│       │   │   │               │       ├── MemberReportHandler.java
│       │   │   │               │       ├── request/
│       │   │   │               │       │   ├── AbstractClusterRequest.java
│       │   │   │               │       │   ├── MemberReportRequest.java
│       │   │   │               │       │   ├── PluginAvailabilityRequest.java
│       │   │   │               │       │   └── PluginAvailabilityRequestHandler.java
│       │   │   │               │       └── response/
│       │   │   │               │           ├── MemberReportResponse.java
│       │   │   │               │           └── PluginAvailabilityResponse.java
│       │   │   │               ├── code/
│       │   │   │               │   ├── ControllerMethodsCache.java
│       │   │   │               │   ├── RequestMappingInfo.java
│       │   │   │               │   ├── SpringApplicationRunListener.java
│       │   │   │               │   ├── StandaloneProfileApplica

================================================
FILE CONTENTS
================================================

================================================
FILE: .gitattributes
================================================
*.js linguist-language=java
*.css linguist-language=java
*.html linguist-language=java


================================================
FILE: .github/ISSUE_TEMPLATE/bug-report.md
================================================
---
name: Bug report
about: Create a report to help us improve
title: ''
labels: ''
assignees: ''

---

<!-- Here is for bug reports and feature requests ONLY! 

If you're looking for help, please check our mail list、WeChat group and the Gitter room.

Please try to use English to describe your issue, or at least provide a snippet of English translation.
我们鼓励使用英文,如果不能直接使用,可以使用翻译软件,您仍旧可以保留中文原文。
-->

**Describe the bug**
A clear and concise description of what the bug is.

**Expected behavior**
A clear and concise description of what you expected to happen.

**Actually behavior**
A clear and concise description of what you actually to happen.

**How to Reproduce**
Steps to reproduce the behavior:
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. See errors

**Desktop (please complete the following information):**
 - OS: [e.g. Centos]
 - Version [e.g. nacos-server 1.3.1, nacos-client 1.3.1]
 - Module [e.g. naming/config]
 - SDK [e.g. original, spring-cloud-alibaba-nacos, dubbo]

**Additional context**
Add any other context about the problem here.


================================================
FILE: .github/ISSUE_TEMPLATE/config.yml
================================================
blank_issues_enabled: false
contact_links:
  - name: Questions
    url: https://github.com/alibaba/nacos/discussions
    about: For questions and discussions. Bug reports and feature requests should use the templates above.
  - name: Security Vulnerabilities
    url: https://security.alibaba.com
    about: Report security vulnerabilities to ASRC (Alibaba Security Response Center).


================================================
FILE: .github/ISSUE_TEMPLATE/feature_request.md
================================================
---
name: Feature request
about: Suggest an idea for this project
title: ''
labels: ''
assignees: ''

---

<!-- Here is for bug reports and feature requests ONLY! 

If you're looking for help, please check our mail list、WeChat group and the Gitter room.

Please try to use English to describe your issue, or at least provide a snippet of English translation.
我们鼓励使用英文,如果不能直接使用,可以使用翻译软件,您仍旧可以保留中文原文。
-->

**Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]

**Describe the solution you'd like**
A clear and concise description of what you want to happen.

**Describe alternatives you've considered**
A clear and concise description of any alternative solutions or features you've considered.

**Additional context**
Add any other context or screenshots about the feature request here.


================================================
FILE: .github/ISSUE_TEMPLATE.md
================================================
<!-- Here is for bug reports and feature requests ONLY! 

If you're looking for help, please check our mail list、WeChat group and the Gitter room.

Please try to use English to describe your issue, or at least provide a snippet of English translation.
我们鼓励使用英文,如果不能直接使用,可以使用翻译软件,您仍旧可以保留中文原文。
-->

## Issue Description

Type: *bug report* or *feature request*

### Describe what happened (or what feature you want)


### Describe what you expected to happen


### How to reproduce it (as minimally and precisely as possible)

1. 
2. 
3. 

### Tell us your environment


### Anything else we need to know?


================================================
FILE: .github/PULL_REQUEST_TEMPLATE.md
================================================
Please do not create a Pull Request without creating an issue first.

## What is the purpose of the change

XXXXX

## Brief changelog

XX

## Verifying this change

XXXX

Follow this checklist to help us incorporate your contribution quickly and easily:

* [ ] Make sure there is a Github issue filed for the change (usually before you start working on it). Trivial changes like typos do not require a Github issue. Your pull request should address just this issue, without pulling in other changes - one PR resolves one issue.
* [ ] Format the pull request title like `[ISSUE #123] Fix UnknownException when host config not exist`. Each commit in the pull request should have a meaningful subject line and body.
* [ ] Write a pull request description that is detailed enough to understand what the pull request does, how, and why.
* [ ] Write necessary unit-test to verify your logic correction, more mock a little better when cross module dependency exist. If the new feature or significant change is committed, please remember to add integration-test in [test module](https://github.com/alibaba/nacos/tree/master/test).
* [ ] Run `mvn -B clean package apache-rat:check spotbugs:check -DskipTests` to make sure basic checks pass. Run `mvn clean install -DskipITs` to make sure unit-test pass. Run `mvn clean test-compile failsafe:integration-test`  to make sure integration-test pass.



================================================
FILE: .github/workflows/anti-spam.yml
================================================
name: Anti-Spam Protection

on:
  issues:
    types: [opened, edited]

permissions:
  issues: write

jobs:
  spam-detection:
    runs-on: ubuntu-latest
    steps:
      - name: Check for spam
        uses: actions/github-script@v7
        with:
          script: |
            const issue = context.payload.issue;
            const title = issue.title.toLowerCase();
            const body = (issue.body || '').toLowerCase();
            const author = issue.user.login;
            const authorAssociation = issue.author_association;

            // Skip if author is a member, collaborator, or owner
            if (['MEMBER', 'COLLABORATOR', 'OWNER'].includes(authorAssociation)) {
              console.log(`Skipping spam check for ${authorAssociation}: ${author}`);
              return;
            }

            // Get user details via API to calculate account age
            let accountAgeDays = 365; // Default to old account if API fails
            try {
              const { data: userData } = await github.rest.users.getByUsername({
                username: author
              });
              const authorCreatedAt = new Date(userData.created_at);
              const now = new Date();
              accountAgeDays = (now - authorCreatedAt) / (1000 * 60 * 60 * 24);
              console.log(`Account ${author} created at ${userData.created_at}, age: ${accountAgeDays.toFixed(1)} days`);
            } catch (error) {
              console.log(`Failed to get user info for ${author}: ${error.message}`);
            }

            // Spam keywords - airlines and travel-related spam
            const spamKeywords = [
              // Airlines
              'lufthansa', 'emirates', 'klm', 'turkish airlines', 'singapore airlines',
              'aer lingus', 'sas airlines', 'qatar airways', 'british airways',
              'american airlines', 'united airlines', 'delta airlines', 'air france',
              'swiss air', 'austrian airlines', 'tap portugal', 'air canada',
              'air europa', 'ita airways',
              // Italian terms
              'telefono', 'rimborso', 'volo', 'biglietto', 'prenotazione',
              'annullare', 'cancellare', 'modifica', 'gestire', 'chiamare',
              'numero di telefono', 'contattare', 'assistenza clienti',
              // German terms
              'kontakt', 'buchen', 'kundenservice', 'hotline', 'kundendienst',
              'buchung', 'stornieren', 'umbuchung', 'erreichen', 'telefonnummer',
              // French terms
              'billet', 'réservation', 'annuler', 'rembours', 'vol',
              'contacter', 'numéro', 'téléphone', 'modifier', 'payer',
              // Common spam patterns
              'customer service number', 'booking number', 'flight cancel',
              'refund process', 'how to contact', 'toll free', 'helpline',
              '1-800', '1-888', '1-877', '1-866'
            ];

            // Check content for spam keywords
            const contentToCheck = title + ' ' + body;
            const matchedKeywords = spamKeywords.filter(kw => contentToCheck.includes(kw));

            // Check for phone number patterns (3+ phone numbers is suspicious)
            const phonePatterns = [
              /\+\d{1,3}[\s-]?\d{2,4}[\s-]?\d{3,4}[\s-]?\d{3,4}/g,  // International format
              /\d{3}[\s.-]?\d{3}[\s.-]?\d{4}/g                       // US/common format
            ];
            let phoneCount = 0;
            for (const pattern of phonePatterns) {
              const matches = contentToCheck.match(pattern) || [];
              phoneCount += matches.length;
            }
            const hasExcessivePhones = phoneCount >= 2;

            // Spam detection rules:
            // 1. Match 2+ spam keywords
            // 2. New account (< 7 days) + 1 spam keyword
            // 3. 2+ phone numbers in content
            const isSpam = matchedKeywords.length >= 2 ||
                          (accountAgeDays < 7 && matchedKeywords.length >= 1) ||
                          hasExcessivePhones;

            if (isSpam) {
              console.log(`Spam detected in issue #${issue.number}`);
              console.log(`Author: ${author}, Account age: ${accountAgeDays.toFixed(1)} days`);
              console.log(`Matched keywords: ${matchedKeywords.join(', ')}`);
              console.log(`Phone numbers found: ${phoneCount}`);

              // Add spam label
              await github.rest.issues.addLabels({
                owner: context.repo.owner,
                repo: context.repo.repo,
                issue_number: issue.number,
                labels: ['spam']
              });

              // Add comment
              await github.rest.issues.createComment({
                owner: context.repo.owner,
                repo: context.repo.repo,
                issue_number: issue.number,
                body: `This issue has been automatically detected as spam and will be closed.\n\n` +
                      `If this is a legitimate issue, please create a new issue using the [issue template](https://github.com/${context.repo.owner}/${context.repo.repo}/issues/new/choose).\n\n` +
                      `---\n` +
                      `此 Issue 被自动检测为垃圾信息,将被关闭。如果这是一个合法的问题,请使用 [Issue 模板](https://github.com/${context.repo.owner}/${context.repo.repo}/issues/new/choose) 重新创建。`
              });

              // Close issue
              await github.rest.issues.update({
                owner: context.repo.owner,
                repo: context.repo.repo,
                issue_number: issue.number,
                state: 'closed',
                state_reason: 'not_planned'
              });

              // Lock issue
              await github.rest.issues.lock({
                owner: context.repo.owner,
                repo: context.repo.repo,
                issue_number: issue.number,
                lock_reason: 'spam'
              });

              console.log(`Issue #${issue.number} closed and locked as spam`);
            } else {
              console.log(`No spam detected in issue #${issue.number}`);
              console.log(`Matched keywords: ${matchedKeywords.length}, Phone numbers: ${phoneCount}, Account age: ${accountAgeDays.toFixed(1)} days`);
            }


================================================
FILE: .github/workflows/ci.yml
================================================
# This workflow will build a Java project with Maven
# For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-maven

name: "Continuous Integration"

on:
  push:
    branches: [ develop, v2.x-develop ]
  pull_request:
    branches: [ develop, v2.x-develop ]

permissions: read-all

jobs:
  ci:
    runs-on: ubuntu-latest
    timeout-minutes: 60
    steps:
      - name: "Cache Maven Repos"
        uses: actions/cache@v4
        with:
          path: ~/.m2/repository
          key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
          restore-keys: |
            ${{ runner.os }}-maven-
      - name: "Checkout"
        uses: actions/checkout@v4
      - name: "Set up JDK 17"
        uses: actions/setup-java@v4
        with:
          java-version: 17
          distribution: 'zulu'
      - name: "Print maven version"
        run: mvn -version
      - name: "Check with Maven"
        run: mvn -B clean compile apache-rat:check spotbugs:check -e -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn
      - name: "Build and Test with Maven"
        run: mvn -B '-Prelease-nacos,!dev' clean install -Drat.skip=true -Dspotbugs.skip=true -DtrimStackTrace=false -U -e -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn
      - name: "Upload coverage to Codecov"
        uses: codecov/codecov-action@v5
        with:
          token: ${{ secrets.CODECOV_TOKEN }}
          fail_ci_if_error: false
          verbose: true
          files: ./core/target/site/jacoco/jacoco.xml,./plugin-default-impl/nacos-default-auth-plugin/target/site/jacoco/jacoco.xml,./plugin-default-impl/nacos-default-control-plugin/target/site/jacoco/jacoco.xml,./plugin-default-impl/nacos-default-datasource-plugin/nacos-datasource-plugin-base/target/site/jacoco/jacoco.xml,./plugin-default-impl/nacos-default-datasource-plugin/nacos-datasource-plugin-mysql/target/site/jacoco/jacoco.xml,./plugin-default-impl/nacos-default-datasource-plugin/nacos-datasource-plugin-derby/target/site/jacoco/jacoco.xml,./plugin-default-impl/nacos-default-datasource-plugin/nacos-datasource-plugin-postgresql/target/site/jacoco/jacoco.xml,./plugin-default-impl/nacos-default-datasource-plugin/nacos-datasource-plugin-oracle/target/site/jacoco/jacoco.xml,./config/target/site/jacoco/jacoco.xml,./auth/target/site/jacoco/jacoco.xml,./plugin/encryption/target/site/jacoco/jacoco.xml,./plugin/datasource/target/site/jacoco/jacoco.xml,./plugin/trace/target/site/jacoco/jacoco.xml,./plugin/config/target/site/jacoco/jacoco.xml,./plugin/auth/target/site/jacoco/jacoco.xml,./plugin/environment/target/site/jacoco/jacoco.xml,./plugin/control/target/site/jacoco/jacoco.xml,./lock/target/site/jacoco/jacoco.xml,./logger-adapter-impl/log4j2-adapter/target/site/jacoco/jacoco.xml,./logger-adapter-impl/logback-adapter-12/target/site/jacoco/jacoco.xml,./consistency/target/site/jacoco/jacoco.xml,./common/target/site/jacoco/jacoco.xml,./sys/target/site/jacoco/jacoco.xml,./ai/target/site/jacoco/jacoco.xml,./naming/target/site/jacoco/jacoco.xml,./client-basic/target/site/jacoco/jacoco.xml,./address/target/site/jacoco/jacoco.xml,./persistence/target/site/jacoco/jacoco.xml,./api/target/site/jacoco/jacoco.xml,./maintainer-client/target/site/jacoco/jacoco.xml,./prometheus/target/site/jacoco/jacoco.xml,./client/target/site/jacoco/jacoco.xml,./console/target/site/jacoco/jacoco.xml

================================================
FILE: .github/workflows/it.yml
================================================
# This workflow will build a Java project with Maven
# For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-maven

name: "Integration Test For 2.X"

on:
  push:
    branches: [ v2.x-develop ]
  pull_request:
    branches: [ v2.x-develop ]

permissions:
  contents: read # to fetch code (actions/checkout)

jobs:
  test:
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        os: [ubuntu-latest]
        java: [8, 8.0.192, 11, 11.0.3]
    steps:
      - name: "Cache Maven Repos"
        uses: actions/cache@v3
        with:
          path: ~/.m2/repository
          key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
          restore-keys: |
            ${{ runner.os }}-maven-
      - name: "Checkout"
        uses: actions/checkout@v3
      - name: "Set up JDK ${{ matrix.java }}"
        uses: actions/setup-java@v3
        with:
          java-version: ${{ matrix.java }}
          distribution: 'zulu'
          architecture: x64
      - name: "Print maven version"
        run: mvn -version
      - name: "Test Config"
        run: mvn clean package -Pcit-test -e -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn
      - name: "Clean Env"
        run: mvn clean -Premove-test-data -e -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn
      - name: "Test Naming"
        run: mvn clean package -Pnit-test -e -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn
      - name: "Clean Env"
        run: mvn clean -Premove-test-data -e -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn



================================================
FILE: .github/workflows/pr-ci.yml
================================================
name: PR-CI

on:
  pull_request:
    branches: [ develop, v2.x-develop ]

jobs:
  dist-tar:
    name: Build distribution tar
    runs-on: ubuntu-latest
    timeout-minutes: 120
    steps:
      - uses: actions/checkout@v3
        with:
          submodules: true
      - uses: actions/setup-java@v3
        with:
          distribution: "temurin"
          java-version: "17"
          cache: "maven"
      - name: Build distribution tar
        run: |
          mvn '-Prelease-nacos,!dev' -DskipTests clean install -U -e -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn
      - uses: actions/upload-artifact@v4
        name: Upload distribution tar
        with:
          name: nacos
          path: distribution/target/nacos-server-*.tar.gz
      - name: Save PR number
        run: |
          mkdir -p ./pr
          echo ${{ github.event.pull_request.number }} > ./pr/pr.txt
      - uses: actions/upload-artifact@v4
        name: Upload PR number
        with:
          name: pr
          path: pr/pr.txt


================================================
FILE: .github/workflows/pr-comment.yml
================================================
name: "Comment on PR"

on:
  pull_request_target:
    types: [opened, reopened]

jobs:
  thanks-and-hint-to-document:
    runs-on: ubuntu-latest
    permissions:
      pull-requests: write
    name: Say thanks for the PR and hint to document
    steps:
      - name: comment on the pull request
        uses: hasura/comment-progress@v2.3.0
        with:
          github-token: ${{ secrets.GITHUB_TOKEN }}
          repository: ${{ github.repository }}
          number: ${{ github.event.number }}
          id: thanks-and-hint-to-document
          recreate: true
          message: |
            Thanks for your this PR.  :pray: 
            Please check again for your PR changes whether contains any usage/api/configuration change such as `Add new API `, `Add new configuration`, `Change default value of configuration`.
            If so, please add or update documents(markdown type) in `docs/next/` for repository [nacos-group/nacos-group.github.io](https://github.com/nacos-group/nacos-group.github.io/tree/develop-astro-nacos/src/content/docs/next)
            
            ---
            
            感谢您提交的PR。 :pray: 
            请再次查看您的PR内容,确认是否包含任何使用方式/API/配置参数的变更,如:`新增API`、`新增配置参数`、`修改默认配置`等操作。
            如果是,请确保在提交之前,在仓库[nacos-group/nacos-group.github.io](https://github.com/nacos-group/nacos-group.github.io/tree/develop-astro-nacos/src/content/docs/next)中的`docs/next/`目录下添加或更新文档(markdown格式)。


================================================
FILE: .github/workflows/pr-e2e-test.yml
================================================
name: E2E test for pull request


on:
  workflow_run:
    workflows: ["PR-CI"]
    types:
      - completed

env:
  DOCKER_REPO: wuyfeedocker/nacos-ci
  DOCKER_REPO_B: wuyfeehub/nacos-ci
  TEST_REPO_NAME: nacos-group/nacos-e2e
  HEADER_PARAMS: "-H \"Accept: application/vnd.github+json\" -H \"Authorization: Bearer ${{ secrets.ACTION_TOKEN }}\" -H \"X-GitHub-Api-Version: 2022-11-28\""
  HEADER_PARAMS_WRITE_COMMENT: "-H \"Accept: application/vnd.github+json\" -H \"Authorization: Bearer ${{ secrets.ACTION_TOKEN }}\" -H \"X-GitHub-Api-Version: 2022-11-28\""
  BASE_URL_NACOS: https://api.github.com/repos/${GITHUB_REPOSITORY}
  BASE_URL_ROBOT: https://api.github.com/repos/wuyfee/nacos

jobs:
  docker:
    runs-on: ubuntu-latest
    if: >
      github.event.workflow_run.event == 'pull_request' &&
      github.event.workflow_run.conclusion == 'success'
    timeout-minutes: 30
    strategy:
      matrix:
        base-image: ["ubuntu"]
        java-version: ["17"]
    outputs:
      version-json: ${{ steps.show_versions.outputs.version-json }}
    steps:
      - name: 'Download artifact'
        uses: actions/github-script@v6
        with:
          script: |
            let artifacts = await github.rest.actions.listWorkflowRunArtifacts({
               owner: context.repo.owner,
               repo: context.repo.repo,
               run_id: ${{ github.event.workflow_run.id }},
            });
            let matchArtifactNacos = artifacts.data.artifacts.filter((artifact) => {
               return artifact.name == "nacos"
            })[0];
            let download = await github.rest.actions.downloadArtifact({
               owner: context.repo.owner,
               repo: context.repo.repo,
               artifact_id: matchArtifactNacos.id,
               archive_format: 'zip',
            });
            var fs = require('fs');
            fs.writeFileSync('${{github.workspace}}/nacos.zip', Buffer.from(download.data));
      - run: |
          unzip nacos.zip
          mkdir nacos
          cp -r nacos-* nacos/
      - uses: actions/checkout@v3
        with:
          repository: nacos-group/nacos-e2e.git
          ref: main
          path: nacos-e2e
      - name: Generate image tag
        id: build-images
        run: |
          mv nacos-server-*.tar.gz nacos-e2e/cicd/build
          cd nacos-e2e/cicd/build
          version=${{ github.event.pull_request.number || github.ref_name }}-$(uuidgen)
          mkdir versionlist
          touch versionlist/"${version}-`echo ${{ matrix.java-version }} | sed -e "s/:/-/g"`"
          ls versionlist/
          echo TAG=${version}-$(echo ${{ matrix.java-version }} | sed -e "s/:/-/g") >> $GITHUB_ENV
      - name: docker-login-1
        uses: docker/login-action@v2
        with:
          registry: ${{ env.REGISTRY }}
          username: ${{ secrets.DOCKERHUB_USER }}
          password: ${{ secrets.DOCKERHUB_TOKEN }}
      - name: save docker_1 images
        run: |
          mkdir build_backup
          cp -rf nacos-e2e/cicd/build/* ./build_backup/
          cd nacos-e2e/cicd/build
          docker build --no-cache -f Dockerfile -t ${DOCKER_REPO}:${{ env.TAG }} .
          docker push ${DOCKER_REPO}:${{ env.TAG }}
      - name: docker-login-2
        uses: docker/login-action@v2
        with:
          registry: ${{ env.REGISTRY }}
          username: ${{ secrets.DOCKERHUB_USER_B }}
          password: ${{ secrets.DOCKERHUB_TOKEN_B }}
      - name: save docker_2 images
        run: |
          rm -rf nacos-e2e/cicd/build/*
          mv ./build_backup/* nacos-e2e/cicd/build/
          cd nacos-e2e/cicd/build
          docker build --no-cache -f Dockerfile -t ${DOCKER_REPO_B}:${{ env.TAG }} .
          docker push ${DOCKER_REPO_B}:${{ env.TAG }}
      - name: Show versions
        id: show_versions
        run: |
          a=(`ls nacos-e2e/cicd/build/versionlist`)
          printf '%s\n' "${a[@]}" | jq -R . | jq -s .
          echo version-json=`printf '%s\n' "${a[@]}" | jq -R . | jq -s .` >> $GITHUB_OUTPUT

  deploy:
    if: ${{ success() }}
    name: Deploy nacos
    needs: [docker]
    runs-on: ubuntu-latest
    timeout-minutes: 60
    env:
      REPLICA_COUNT: 3
      DATABASE: mysql
      NODE_PORT: 30000
      AUTH_ENABLED: false
      ACTUAL_MODE: cluster
    strategy:
      fail-fast: false
      matrix:
        mode: ["cluster","standalone","standalone_auth"]
        version: ${{ fromJSON(needs.docker.outputs.version-json) }}
    steps:
      - name: set nodeport
        run: |
          echo "NODE_PORT=$(expr $(expr $(expr $(expr ${{ strategy.job-index }} + 1) * ${{ github.run_number }}) % 30000) + 30000)" >> $GITHUB_ENV
      - name: set params values
        run: |
          if [[ ${{ matrix.mode }} == "standalone"* ]];then
            if [[ ${{ matrix.mode }} = "standalone_auth" ]]; then
              echo "AUTH_ENABLED=true" >> $GITHUB_ENV
            fi
            echo "ACTUAL_MODE=standalone" >> $GITHUB_ENV
            echo "REPLICA_COUNT=1" >> $GITHUB_ENV
            echo "DATABASE=embedded" >> $GITHUB_ENV
            echo ${{ matrix.mode }}-nacos-${{ github.run_id }}-${{ strategy.job-index }}
          fi
      - name: allocate docker repo
        run: |
          if [[ $(expr $(expr ${{ github.run_id }} + ${{ strategy.job-index }} ) % 2 ) -eq 1 ]]; then
            echo "DOCKER_REPO_ACTUAL=${{ env.DOCKER_REPO }}" >> $GITHUB_ENV
          else
            echo "DOCKER_REPO_ACTUAL=${{ env.DOCKER_REPO_B }}" >> $GITHUB_ENV
          fi
      - uses: apache/rocketmq-test-tool@java-dev
        name: Deploy nacos
        with:
          yamlString: |
            action: deploy
            namespace: nacos-${{ github.run_id }}-${{ strategy.job-index }}
            askConfig: ${{ secrets.ASK_CONFIG_VIRGINA }}
            waitTimes: 2000
            velaAppDescription: nacos-${{ env.GITHUB_WORKFLOW }}-${{ github.run_id }}@${{ matrix.version }}
            repoName: nacos
            helm:
              chart: ./cicd/helm
              git:
                branch: main
              repoType: git
              retries: 3
              url: https://github.com/nacos-group/nacos-e2e.git
              values:
                namespace: nacos-${{ github.run_id }}-${{ strategy.job-index }}
                global:
                  mode: ${{ env.ACTUAL_MODE }}
                nacos:
                  replicaCount: ${{ env.REPLICA_COUNT }}
                  image:
                    repository: ${{ env.DOCKER_REPO_ACTUAL }}
                    tag: ${{ matrix.version }}
                  auth:
                    enabled: ${{ env.AUTH_ENABLED }}
                  storage:
                    type: ${{ env.DATABASE }}
                    db:
                      port: 3306
                      username: nacos
                      password: nacos
                      param: characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false
                service:
                  nodePort: ${{ env.NODE_PORT }}
                  type: ClusterIP

  e2e-java-test:
    if: ${{ success() }}
    name: Java e2e Test
    needs: [docker, deploy]
    runs-on: ubuntu-latest
    timeout-minutes: 60
    env:
      CODE_PATH: java/nacos-2X
    strategy:
      fail-fast: false
      matrix:
        mode: ["cluster","standalone","standalone_auth"]
        version: ${{ fromJSON(needs.docker.outputs.version-json) }}
    steps:
      - name: set code path
        run: |
          if [[ ${{ matrix.mode }} = "standalone_auth" ]]; then
            echo "CODE_PATH=java/auth" >> $GITHUB_ENV
            echo ${{ matrix.mode }}-nacos-${{ github.run_id }}-${{ strategy.job-index }}
          fi
      - uses: apache/rocketmq-test-tool@java-dev
        name: java e2e test
        with:
          yamlString: |
            action: test
            namespace: nacos-${{ github.run_id }}-${{ strategy.job-index }}
            askConfig: ${{ secrets.ASK_CONFIG_VIRGINA }}
            API_VERSION: v1
            KIND: Pod
            RESTART_POLICY: Never
            ENV:
              WAIT_TIME: 900
              REPO_NAME: ${{ env.TEST_REPO_NAME }}
              CODE: https://github.com/${{ env.TEST_REPO_NAME }}
              BRANCH: main
              CODE_PATH: ${{ env.CODE_PATH }}
              CMD: mvn clean test -B
              ALL_IP: null
            CONTAINER:
              IMAGE: cloudnativeofalibabacloud/test-runner:v0.0.4
              RESOURCE_LIMITS:
                cpu: 2
                memory: 2Gi
              RESOURCE_REQUIRE:
                cpu: 2
                memory: 2Gi
      - uses: actions/upload-artifact@v4
        if: always()
        name: Upload test log
        with:
          name: testlog-${{ matrix.mode }}-java.txt
          path: testlog.txt
      - name: add markdown
        if: always()
        run: |
          cat result.md >> $GITHUB_STEP_SUMMARY


  e2e-go-test:
    if: ${{ success() }}
    name: GO E2E Test
    needs: [docker, deploy]
    runs-on: ubuntu-latest
    timeout-minutes: 60
    strategy:
      fail-fast: false
      matrix:
        mode: ["cluster","standalone"]
        version: ${{ fromJSON(needs.docker.outputs.version-json) }}
    steps:
      - uses: apache/rocketmq-test-tool@java-dev
        name: go e2e test
        with:
          yamlString: |
            action: test
            namespace: nacos-${{ github.run_id }}-${{ strategy.job-index }}
            askConfig: ${{ secrets.ASK_CONFIG_VIRGINA }}
            API_VERSION: v1
            KIND: Pod
            RESTART_POLICY: Never
            ENV:
              WAIT_TIME: 900
              REPO_NAME: ${{ env.TEST_REPO_NAME }}
              CODE: https://github.com/${{ env.TEST_REPO_NAME }}
              BRANCH: main
              CODE_PATH: golang
              CMD: |
                cd /root/code/golang && go mod init nacos_go_test && go mod tidy
                gotestsum --junitfile ./target/surefire-reports/TEST-report.xml ./nacosgotest
              ALL_IP: null
            CONTAINER:
              IMAGE: cloudnativeofalibabacloud/test-runner:v0.0.4
              RESOURCE_LIMITS:
                cpu: 2
                memory: 2Gi
              RESOURCE_REQUIRE:
                cpu: 2
                memory: 2Gi
      - uses: actions/upload-artifact@v4
        if: always()
        name: Upload test log
        with:
          name: testlog-${{ matrix.mode }}-go.txt
          path: testlog.txt
      - name: add markdown
        if: always()
        run: |
          cat result.md >> $GITHUB_STEP_SUMMARY

  e2e-cpp-test:
    if: ${{ success() }}
    name: Cpp E2E Test
    needs: [docker, deploy]
    runs-on: ubuntu-latest
    timeout-minutes: 60
    strategy:
      fail-fast: false
      matrix:
        mode: ["cluster","standalone"]
        version: ${{ fromJSON(needs.docker.outputs.version-json) }}
    steps:
      - uses: apache/rocketmq-test-tool@java-dev
        name: cpp e2e test
        with:
          yamlString: |
            action: test
            namespace: nacos-${{ github.run_id }}-${{ strategy.job-index }}
            askConfig: ${{ secrets.ASK_CONFIG_VIRGINA }}
            API_VERSION: v1
            KIND: Pod
            RESTART_POLICY: Never
            ENV:
              WAIT_TIME: 900
              REPO_NAME: ${{ env.TEST_REPO_NAME }}
              CODE: https://github.com/${{ env.TEST_REPO_NAME }}
              BRANCH: main
              CODE_PATH: cpp
              CMD: |
                yum-config-manager remove centos-sclo-rh
                cd /root/code/cpp && make install
                echo "export LD_LIBRARY_PATH=/usr/local/lib" >> ~/.bashrc  && source ~/.bashrc
                cd /root/code/cpp/nacoscpptest
                g++ nacos_test.cpp -o nacos_test -lgtest -lpthread -I/usr/local/include/nacos/ -L/usr/local/lib/  -lnacos-cli
                chmod 777 nacos_test && ./nacos_test --gtest_output="xml:../target/surefire-reports/TEST-gtestresults.xml"
              ALL_IP: null
            CONTAINER:
              IMAGE: cloudnativeofalibabacloud/test-runner:v0.0.4
              RESOURCE_LIMITS:
                cpu: 2
                memory: 2Gi
              RESOURCE_REQUIRE:
                cpu: 2
                memory: 2Gi
      - uses: actions/upload-artifact@v4
        if: always()
        name: Upload test log
        with:
          name: testlog-${{ matrix.mode }}-cpp.txt
          path: testlog.txt
      - name: add markdown
        if: always()
        run: |
          cat result.md >> $GITHUB_STEP_SUMMARY

  e2e-csharp-test:
    if: ${{ success() }}
    name: Csharp E2E Test
    needs: [docker, deploy]
    runs-on: ubuntu-latest
    timeout-minutes: 60
    strategy:
      fail-fast: false
      matrix:
        mode: ["cluster","standalone"]
        version: ${{ fromJSON(needs.docker.outputs.version-json) }}
    steps:
      - uses: apache/rocketmq-test-tool@java-dev
        name: csharp e2e test
        with:
          yamlString: |
            action: test
            namespace: nacos-${{ github.run_id }}-${{ strategy.job-index }}
            askConfig: ${{ secrets.ASK_CONFIG_VIRGINA }}
            API_VERSION: v1
            KIND: Pod
            RESTART_POLICY: Never
            ENV:
              WAIT_TIME: 900
              REPO_NAME: ${{ env.TEST_REPO_NAME }}
              CODE: https://github.com/${{ env.TEST_REPO_NAME }}
              BRANCH: main
              CODE_PATH: csharp
              CMD: |
                rpm -Uvh https://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpm
                yum -y install dotnet-sdk-3.1 && yum -y install aspnetcore-runtime-7.0
                cd /root/code/csharp/nacos-csharp-sdk-test && dotnet restore
                dotnet test --logger:"junit;LogFilePath=../target/surefire-reports/TEST-result.xml"
              ALL_IP: null
            CONTAINER:
              IMAGE: cloudnativeofalibabacloud/test-runner:v0.0.4
              RESOURCE_LIMITS:
                cpu: 2
                memory: 2Gi
              RESOURCE_REQUIRE:
                cpu: 2
                memory: 2Gi
      - uses: actions/upload-artifact@v4
        if: always()
        name: Upload test log
        with:
          name: testlog-${{ matrix.mode }}-csharp.txt
          path: testlog.txt
      - name: add markdown
        if: always()
        run: |
          cat result.md >> $GITHUB_STEP_SUMMARY

  e2e-nodejs-test:
    if: ${{ success() }}
    name: Nodejs E2E Test
    needs: [docker, deploy]
    runs-on: ubuntu-latest
    timeout-minutes: 60
    strategy:
      fail-fast: false
      matrix:
        mode: ["cluster","standalone"]
        version: ${{ fromJSON(needs.docker.outputs.version-json) }}
    steps:
      - uses: apache/rocketmq-test-tool@java-dev
        name: nodejs e2e test
        with:
          yamlString: |
            action: test
            namespace: nacos-${{ github.run_id }}-${{ strategy.job-index }}
            askConfig: ${{ secrets.ASK_CONFIG_VIRGINA }}
            API_VERSION: v1
            KIND: Pod
            RESTART_POLICY: Never
            ENV:
              WAIT_TIME: 900
              REPO_NAME: ${{ env.TEST_REPO_NAME }}
              CODE: https://github.com/${{ env.TEST_REPO_NAME }}
              BRANCH: main
              CODE_PATH: nodejs
              CMD: |
                cd /root/code/nodejs/nacosnodejstest && npm install
                mocha test --reporter mocha-junit-reporter --reporter-options mochaFile=../target/surefire-reports/TEST-report.xml
              ALL_IP: null
            CONTAINER:
              IMAGE: cloudnativeofalibabacloud/test-runner:v0.0.4
              RESOURCE_LIMITS:
                cpu: 2
                memory: 2Gi
              RESOURCE_REQUIRE:
                cpu: 2
                memory: 2Gi
      - uses: actions/upload-artifact@v4
        if: always()
        name: Upload test log
        with:
          name: testlog-${{ matrix.mode }}-nodejs.txt
          path: testlog.txt
      - name: add markdown
        if: always()
        run: |
          cat result.md >> $GITHUB_STEP_SUMMARY

  e2e-python-test:
    if: ${{ success() }}
    name: Python E2E Test
    needs: [docker, deploy]
    runs-on: ubuntu-latest
    timeout-minutes: 60
    strategy:
      fail-fast: false
      matrix:
        mode: ["cluster","standalone"]
        version: ${{ fromJSON(needs.docker.outputs.version-json) }}
    steps:
      - uses: apache/rocketmq-test-tool@java-dev
        name: python e2e test
        with:
          yamlString: |
            action: test
            namespace: nacos-${{ github.run_id }}-${{ strategy.job-index }}
            askConfig: ${{ secrets.ASK_CONFIG_VIRGINA }}
            API_VERSION: v1
            KIND: Pod
            RESTART_POLICY: Never
            ENV:
              WAIT_TIME: 900
              REPO_NAME: ${{ env.TEST_REPO_NAME }}
              CODE: https://github.com/${{ env.TEST_REPO_NAME }}
              BRANCH: main
              CODE_PATH: python
              CMD: |
                cd /root/code/python
                pip3 install -r requirements.txt
                source ~/.bashrc
                cd nacospythontest && pytest --junitxml ../target/surefire-reports/TEST-report.xml test/*_test.py --log-cli-level=DEBUG
              ALL_IP: null
            CONTAINER:
              IMAGE: cloudnativeofalibabacloud/test-runner:v0.0.4
              RESOURCE_LIMITS:
                cpu: 2
                memory: 2Gi
              RESOURCE_REQUIRE:
                cpu: 2
                memory: 2Gi
      - uses: actions/upload-artifact@v4
        if: always()
        name: Upload test log
        with:
          name: testlog-${{ matrix.mode }}-python.txt
          path: testlog.txt
      - name: add markdown
        if: always()
        run: |
          cat result.md >> $GITHUB_STEP_SUMMARY


  clean:
    if: ${{ always() }}
    name: Clean
    needs: [docker, e2e-java-test, e2e-go-test, e2e-cpp-test, e2e-csharp-test, e2e-nodejs-test, e2e-python-test]
    runs-on: ubuntu-latest
    timeout-minutes: 5
    strategy:
      fail-fast: false
      matrix:
        mode: ["cluster","standalone","standalone_auth"]
        version: ${{ fromJSON(needs.docker.outputs.version-json) }}
    steps:
      - uses: apache/rocketmq-test-tool@java-dev
        name: clean
        with:
          yamlString: |
            action: clean
            namespace: nacos-${{ github.run_id }}-${{ strategy.job-index }}
            askConfig: ${{ secrets.ASK_CONFIG_VIRGINA }}
  write-comment:
    if: ${{ always() }}
    name: write comment to pr
    needs: [docker, deploy, e2e-java-test, e2e-go-test, e2e-cpp-test, e2e-csharp-test, e2e-nodejs-test, e2e-python-test, clean]
    runs-on: ubuntu-latest
    timeout-minutes: 5
    steps:
      - name: 'Download artifact'
        uses: actions/github-script@v6
        with:
          script: |
            let artifacts = await github.rest.actions.listWorkflowRunArtifacts({
               owner: context.repo.owner,
               repo: context.repo.repo,
               run_id: ${{ github.event.workflow_run.id }},
            });
            
            let matchArtifactPR = artifacts.data.artifacts.filter((artifact) => {
               return artifact.name == "pr"
            })[0];
            let download = await github.rest.actions.downloadArtifact({
               owner: context.repo.owner,
               repo: context.repo.repo,
               artifact_id: matchArtifactPR.id,
               archive_format: 'zip',
            });
            var fs = require('fs');
            fs.writeFileSync('${{github.workspace}}/pr.zip', Buffer.from(download.data));
      - name: unzip pr
        run: |
          unzip pr.zip
          cat pr.txt
          pr_number=`cat pr.txt`
          echo "PR_NUMBER=${pr_number}" >> $GITHUB_ENV
      - name: write issue comment
        run: |
          echo ${{ env.PR_NUMBER }}
          job_status=""
          if [ ${{ needs.docker.result }} = 'success' ]  && [ ${{ needs.deploy.result }} = 'success' ] && [ ${{ needs.e2e-java-test.result }} = 'success' ] && [ ${{ needs.e2e-go-test.result }} = 'success' ] && [ ${{ needs.e2e-cpp-test.result }} = 'success' ] && [ ${{ needs.e2e-csharp-test.result }} = 'success' ] && [ ${{ needs.e2e-nodejs-test.result }} = 'success' ] && [ ${{ needs.e2e-python-test.result }} = 'success' ]; then
            jobs_status='$\\color{green}{SUCCESS}$'
            jobs_status+="\n[DETAILS](https://github.com/${GITHUB_REPOSITORY}/actions/runs/${{ github.run_id }})"
          else
            jobs_status='$\\color{red}{FAILURE}$'
            jobs_status+="\n[DETAILS](https://github.com/${GITHUB_REPOSITORY}/actions/runs/${{ github.run_id }})"
          fi
          echo ${jobs_status}
          markdown_content="${jobs_status}"
          generate_content() {
             if [ $1 = "success" ];then
               echo "\n ✅ $2  $1 "
             else
               echo "\n ❌ $2  $1 "
             fi
          }
          markdown_content+=$(generate_content ${{ needs.docker.result }} "- docker: ")
          markdown_content+=$(generate_content ${{ needs.deploy.result }} "- deploy (standalone & cluster & standalone_auth): ")
          markdown_content+=$(generate_content ${{ needs.e2e-java-test.result }} "- e2e-java-test (standalone & cluster & standalone_auth): ")
          markdown_content+=$(generate_content ${{ needs.e2e-go-test.result }} "- e2e-go-test (standalone & cluster): ")
          markdown_content+=$(generate_content ${{ needs.e2e-cpp-test.result }} "- e2e-cpp-test (standalone & cluster): ")
          markdown_content+=$(generate_content ${{ needs.e2e-csharp-test.result }} "- e2e-csharp-test (standalone & cluster): ")
          markdown_content+=$(generate_content ${{ needs.e2e-nodejs-test.result }} "- e2e-nodejs-test (standalone & cluster): ")
          markdown_content+=$(generate_content ${{ needs.e2e-python-test.result }} "- e2e-python-test (standalone & cluster): ")
          markdown_content+=$(generate_content ${{ needs.clean.result }} "- clean (standalone & cluster & standalone_auth): ")
          echo "markdown_content: \n ${markdown_content}"
          payload=`echo "{\"body\": \"${markdown_content}\"}" | jq .`
          curl -L -X POST ${{ env.HEADER_PARAMS_WRITE_COMMENT }} ${{ env.BASE_URL_NACOS }}/issues/${{ env.PR_NUMBER }}/comments -d "${payload}"


================================================
FILE: .github/workflows/push-ci.yaml
================================================
name: PUSH-CI

on:
  push:
    branches: [master, develop, v2.x-develop]

permissions:
  contents: read

concurrency:
  group: nacos-${{ github.ref }}

env:
  DOCKER_REPO: wuyfeedocker/nacos-ci
  DOCKER_REPO_B: wuyfeehub/nacos-ci
  TEST_REPO_NAME: nacos-group/nacos-e2e

jobs:
  dist-tar:
    name: Build dist tar
    runs-on: ubuntu-latest
    timeout-minutes: 30
    steps:
      - uses: actions/cache@v3
        with:
          path: ~/.m2/repository
          key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
          restore-keys: |
            ${{ runner.os }}-maven-
      - uses: actions/checkout@v3
        with:
          submodules: true
      - uses: actions/setup-java@v3
        with:
          distribution: "temurin"
          java-version: "17"
          cache: "maven"
      - name: Build distribution tar
        run: |
          mvn '-Prelease-nacos,!dev' -DskipTests clean install -U -e -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn
      - uses: actions/upload-artifact@v4
        name: Upload distribution tar
        with:
          name: nacos
          path: distribution/target/nacos-server-*.tar.gz

  docker:
    if: ${{ success() }}
    name: Docker images
    needs: [dist-tar]
    runs-on: ubuntu-latest
    timeout-minutes: 30
    env:
      DOCKERHUB_USER_ACTUAL: ${{ secrets.DOCKERHUB_USER }}
      DOCKERHUB_TOKEN_ACTUAL: ${{ secrets.DOCKERHUB_TOKEN }}
    strategy:
      matrix:
        base-image: ["centos"]
        java-version: ["17"]
    outputs:
      version-json: ${{ steps.show_versions.outputs.version-json }}
    steps:
      - uses: actions/checkout@v3
        with:
          repository: nacos-group/nacos-e2e.git
          ref: main
          path: nacos-e2e
      - uses: actions/download-artifact@v4.1.7
        name: Download distribution tar
        with:
          name: nacos
          path: ./
      - name: Generate image tag
        id: build-images
        run: |
          mv nacos-server-*.tar.gz nacos-e2e/cicd/build/
          cd nacos-e2e/cicd/build
          version=${{ github.event.pull_request.number || github.ref_name }}-$(uuidgen)
          mkdir versionlist
          touch versionlist/"${version}-`echo ${{ matrix.java-version }} | sed -e "s/:/-/g"`"
          ls versionlist/
          echo TAG=${version}-$(echo ${{ matrix.java-version }} | sed -e "s/:/-/g") >> $GITHUB_ENV
      - name: docker-login-1
        uses: docker/login-action@v2
        with:
          registry: ${{ env.REGISTRY }}
          username: ${{ secrets.DOCKERHUB_USER }}
          password: ${{ secrets.DOCKERHUB_TOKEN }}
      - name: save docker_1 images
        run: |
          mkdir build_backup
          cp -rf nacos-e2e/cicd/build/* ./build_backup/
          cd nacos-e2e/cicd/build
          docker build --no-cache -f Dockerfile -t ${DOCKER_REPO}:${{ env.TAG }} .
          docker push ${DOCKER_REPO}:${{ env.TAG }}
      - name: docker-login-2
        uses: docker/login-action@v2
        with:
          registry: ${{ env.REGISTRY }}
          username: ${{ secrets.DOCKERHUB_USER_B }}
          password: ${{ secrets.DOCKERHUB_TOKEN_B }}
      - name: save docker_2 images
        run: |
          rm -rf nacos-e2e/cicd/build/*
          mv ./build_backup/*  nacos-e2e/cicd/build/
          cd nacos-e2e/cicd/build
          docker build --no-cache -f Dockerfile -t ${DOCKER_REPO_B}:${{ env.TAG }} .
          docker push ${DOCKER_REPO_B}:${{ env.TAG }}
      - name: Show versions
        id: show_versions
        run: | 
          a=(`ls nacos-e2e/cicd/build/versionlist`)
          printf '%s\n' "${a[@]}" | jq -R . | jq -s .
          echo version-json=`printf '%s\n' "${a[@]}" | jq -R . | jq -s .` >> $GITHUB_OUTPUT

  deploy:
    if: ${{ success() }}
    name: Deploy nacos
    needs: [docker]
    runs-on: ubuntu-latest
    timeout-minutes: 60
    env:
      REPLICA_COUNT: 3
      DATABASE: mysql
      NODE_PORT: 30000
      AUTH_ENABLED: false
      ACTUAL_MODE: cluster
    strategy:
      fail-fast: false
      matrix:
        mode: ["cluster","standalone","standalone_auth"]
        version: ${{ fromJSON(needs.docker.outputs.version-json) }}
    steps:
      - name: set nodeport
        run: |
          echo "NODE_PORT=$(expr $(expr $(expr $(expr ${{ strategy.job-index }} + 1) * ${{ github.run_number }}) % 30000) + 30000)" >> $GITHUB_ENV
      - name: set params values
        run: |
          if [[ ${{ matrix.mode }} == "standalone"* ]];then
            if [[ ${{ matrix.mode }} = "standalone_auth" ]]; then
              echo "AUTH_ENABLED=true" >> $GITHUB_ENV
            fi
            echo "ACTUAL_MODE=standalone" >> $GITHUB_ENV
            echo "REPLICA_COUNT=1" >> $GITHUB_ENV
            echo "DATABASE=embedded" >> $GITHUB_ENV
            echo ${{ matrix.mode }}-nacos-${{ github.run_id }}-${{ strategy.job-index }}
          fi
      - name: allocate docker repo
        run: |
          if [[ $(expr $(expr ${{ github.run_id }} + ${{ strategy.job-index }} ) % 2 ) -eq 1 ]]; then
            echo "DOCKER_REPO_ACTUAL=${{ env.DOCKER_REPO }}" >> $GITHUB_ENV
          else
            echo "DOCKER_REPO_ACTUAL=${{ env.DOCKER_REPO_B }}" >> $GITHUB_ENV
          fi
      - uses: apache/rocketmq-test-tool@java-dev
        name: Deploy nacos
        with:
          yamlString: |
            action: deploy
            namespace: nacos-${{ github.run_id }}-${{ strategy.job-index }}
            askConfig: ${{ secrets.ASK_CONFIG_VIRGINA }}
            waitTimes: 2000
            velaAppDescription: nacos-${{ env.GITHUB_WORKFLOW }}-${{ github.run_id }}@${{ matrix.version }}
            repoName: nacos
            helm:
              chart: ./cicd/helm
              git:
                branch: main
              repoType: git
              retries: 3
              url: https://github.com/nacos-group/nacos-e2e.git
              values:
                namespace: nacos-${{ github.run_id }}-${{ strategy.job-index }}
                global:
                  mode: ${{ env.ACTUAL_MODE }}
                nacos:
                  replicaCount: ${{ env.REPLICA_COUNT }}
                  image:
                    repository: ${{ env.DOCKER_REPO_ACTUAL }}
                    tag: ${{ matrix.version }}
                  auth:
                    enabled: ${{ env.AUTH_ENABLED }}
                  storage:
                    type: ${{ env.DATABASE }}
                    db:
                      port: 3306
                      username: nacos
                      password: nacos
                      param: characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false
                service:
                  nodePort: ${{ env.NODE_PORT }}
                  type: ClusterIP

  e2e-java-test:
    if: ${{ success() }}
    name: Java e2e Test
    needs: [docker, deploy]
    runs-on: ubuntu-latest
    timeout-minutes: 60
    env:
      CODE_PATH: java/nacos-2X
    strategy:
      fail-fast: false
      matrix:
        mode: ["cluster","standalone","standalone_auth"]
        version: ${{ fromJSON(needs.docker.outputs.version-json) }}
    steps:
      - name: set code path
        run: |
          if [[ ${{ matrix.mode }} = "standalone_auth" ]]; then
            echo "CODE_PATH=java/auth" >> $GITHUB_ENV
            echo ${{ matrix.mode }}-nacos-${{ github.run_id }}-${{ strategy.job-index }}
          fi
      - uses: apache/rocketmq-test-tool@java-dev
        name: java e2e test
        with:
          yamlString: |
            action: test
            namespace: nacos-${{ github.run_id }}-${{ strategy.job-index }}
            askConfig: ${{ secrets.ASK_CONFIG_VIRGINA }}
            API_VERSION: v1
            KIND: Pod
            RESTART_POLICY: Never
            ENV:
              WAIT_TIME: 900
              REPO_NAME: ${{ env.TEST_REPO_NAME }}
              CODE: https://github.com/${{ env.TEST_REPO_NAME }}
              BRANCH: main
              CODE_PATH: ${{ env.CODE_PATH }}
              CMD: mvn clean test -B
              ALL_IP: null
            CONTAINER:
              IMAGE: cloudnativeofalibabacloud/test-runner:v0.0.4
              RESOURCE_LIMITS:
                cpu: 2
                memory: 2Gi
              RESOURCE_REQUIRE:
                cpu: 2
                memory: 2Gi

      - uses: actions/upload-artifact@v4
        if: always()
        name: Upload test log
        with:
          name: testlog-${{ matrix.mode }}-java.txt
          path: testlog.txt
      - name: add markdown
        if: always()
        run: |
          cat result.md >> $GITHUB_STEP_SUMMARY


  e2e-go-test:
    if: ${{ success() }}
    name: GO E2E Test
    needs: [docker, deploy]
    runs-on: ubuntu-latest
    timeout-minutes: 60
    strategy:
      fail-fast: false
      matrix:
        mode: ["cluster","standalone"]
        version: ${{ fromJSON(needs.docker.outputs.version-json) }}
    steps:
      - uses: apache/rocketmq-test-tool@java-dev
        name: go e2e test
        with:
          yamlString: |
            action: test
            namespace: nacos-${{ github.run_id }}-${{ strategy.job-index }}
            askConfig: ${{ secrets.ASK_CONFIG_VIRGINA }}
            API_VERSION: v1
            KIND: Pod
            RESTART_POLICY: Never
            ENV:
              WAIT_TIME: 900
              REPO_NAME: ${{ env.TEST_REPO_NAME }}
              CODE: https://github.com/${{ env.TEST_REPO_NAME }}
              BRANCH: main
              CODE_PATH: golang
              CMD: |
                cd /root/code/golang && go mod init nacos_go_test && go mod tidy
                gotestsum --junitfile ./target/surefire-reports/TEST-report.xml ./nacosgotest
              ALL_IP: null
            CONTAINER:
              IMAGE: cloudnativeofalibabacloud/test-runner:v0.0.4
              RESOURCE_LIMITS:
                cpu: 2
                memory: 2Gi
              RESOURCE_REQUIRE:
                cpu: 2
                memory: 2Gi
      - uses: actions/upload-artifact@v4
        if: always()
        name: Upload test log
        with:
          name: testlog-${{ matrix.mode }}-go.txt
          path: testlog.txt
      - name: add markdown
        if: always()
        run: |
          cat result.md >> $GITHUB_STEP_SUMMARY

  e2e-cpp-test:
    if: ${{ success() }}
    name: Cpp E2E Test
    needs: [docker, deploy]
    runs-on: ubuntu-latest
    timeout-minutes: 60
    strategy:
      fail-fast: false
      matrix:
        mode: ["cluster","standalone"]
        version: ${{ fromJSON(needs.docker.outputs.version-json) }}
    steps:
      - uses: apache/rocketmq-test-tool@java-dev
        name: cpp e2e test
        with:
          yamlString: |
            action: test
            namespace: nacos-${{ github.run_id }}-${{ strategy.job-index }}
            askConfig: ${{ secrets.ASK_CONFIG_VIRGINA }}
            API_VERSION: v1
            KIND: Pod
            RESTART_POLICY: Never
            ENV:
              WAIT_TIME: 900
              REPO_NAME: ${{ env.TEST_REPO_NAME }}
              CODE: https://github.com/${{ env.TEST_REPO_NAME }}
              BRANCH: main
              CODE_PATH: cpp
              CMD: |
                yum-config-manager remove centos-sclo-rh
                cd /root/code/cpp && make install
                echo "export LD_LIBRARY_PATH=/usr/local/lib" >> ~/.bashrc  && source ~/.bashrc
                cd /root/code/cpp/nacoscpptest
                g++ nacos_test.cpp -o nacos_test -lgtest -lpthread -I/usr/local/include/nacos/ -L/usr/local/lib/  -lnacos-cli
                chmod 777 nacos_test && ./nacos_test --gtest_output="xml:../target/surefire-reports/TEST-gtestresults.xml"
              ALL_IP: null
            CONTAINER:
              IMAGE: cloudnativeofalibabacloud/test-runner:v0.0.4
              RESOURCE_LIMITS:
                cpu: 2
                memory: 2Gi
              RESOURCE_REQUIRE:
                cpu: 2
                memory: 2Gi
      - uses: actions/upload-artifact@v4
        if: always()
        name: Upload test log
        with:
          name: testlog-${{ matrix.mode }}-cpp.txt
          path: testlog.txt
      - name: add markdown
        if: always()
        run: |
          cat result.md >> $GITHUB_STEP_SUMMARY

  e2e-csharp-test:
    if: ${{ success() }}
    name: Csharp E2E Test
    needs: [docker, deploy]
    runs-on: ubuntu-latest
    timeout-minutes: 60
    strategy:
      fail-fast: false
      matrix:
        mode: ["cluster","standalone"]
        version: ${{ fromJSON(needs.docker.outputs.version-json) }}
    steps:
      - uses: apache/rocketmq-test-tool@java-dev
        name: csharp e2e test
        with:
          yamlString: |
            action: test
            namespace: nacos-${{ github.run_id }}-${{ strategy.job-index }}
            askConfig: ${{ secrets.ASK_CONFIG_VIRGINA }}
            API_VERSION: v1
            KIND: Pod
            RESTART_POLICY: Never
            ENV:
              WAIT_TIME: 900
              REPO_NAME: ${{ env.TEST_REPO_NAME }}
              CODE: https://github.com/${{ env.TEST_REPO_NAME }}
              BRANCH: main
              CODE_PATH: csharp
              CMD: |
                rpm -Uvh https://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpm
                yum -y install dotnet-sdk-3.1 && yum -y install aspnetcore-runtime-7.0
                cd /root/code/csharp/nacos-csharp-sdk-test && dotnet restore
                dotnet test --logger:"junit;LogFilePath=../target/surefire-reports/TEST-result.xml"
              ALL_IP: null
            CONTAINER:
              IMAGE: cloudnativeofalibabacloud/test-runner:v0.0.4
              RESOURCE_LIMITS:
                cpu: 2
                memory: 2Gi
              RESOURCE_REQUIRE:
                cpu: 2
                memory: 2Gi
      - uses: actions/upload-artifact@v4
        if: always()
        name: Upload test log
        with:
          name: testlog-${{ matrix.mode }}-csharp.txt
          path: testlog.txt
      - name: add markdown
        if: always()
        run: |
          cat result.md >> $GITHUB_STEP_SUMMARY

  e2e-nodejs-test:
    if: ${{ success() }}
    name: Nodejs E2E Test
    needs: [docker, deploy]
    runs-on: ubuntu-latest
    timeout-minutes: 60
    strategy:
      fail-fast: false
      matrix:
        mode: ["cluster","standalone"]
        version: ${{ fromJSON(needs.docker.outputs.version-json) }}
    steps:
      - uses: apache/rocketmq-test-tool@java-dev
        name: nodejs e2e test
        with:
          yamlString: |
            action: test
            namespace: nacos-${{ github.run_id }}-${{ strategy.job-index }}
            askConfig: ${{ secrets.ASK_CONFIG_VIRGINA }}
            API_VERSION: v1
            KIND: Pod
            RESTART_POLICY: Never
            ENV:
              WAIT_TIME: 900
              REPO_NAME: ${{ env.TEST_REPO_NAME }}
              CODE: https://github.com/${{ env.TEST_REPO_NAME }}
              BRANCH: main
              CODE_PATH: nodejs
              CMD: |
                cd /root/code/nodejs/nacosnodejstest && npm install
                mocha test --reporter mocha-junit-reporter --reporter-options mochaFile=../target/surefire-reports/TEST-report.xml
              ALL_IP: null
            CONTAINER:
              IMAGE: cloudnativeofalibabacloud/test-runner:v0.0.4
              RESOURCE_LIMITS:
                cpu: 2
                memory: 2Gi
              RESOURCE_REQUIRE:
                cpu: 2
                memory: 2Gi
      - uses: actions/upload-artifact@v4
        if: always()
        name: Upload test log
        with:
          name: testlog-${{ matrix.mode }}-nodejs.txt
          path: testlog.txt
      - name: add markdown
        if: always()
        run: |
          cat result.md >> $GITHUB_STEP_SUMMARY

  e2e-python-test:
    if: ${{ success() }}
    name: Python E2E Test
    needs: [docker, deploy]
    runs-on: ubuntu-latest
    timeout-minutes: 60
    strategy:
      fail-fast: false
      matrix:
        mode: ["cluster","standalone"]
        version: ${{ fromJSON(needs.docker.outputs.version-json) }}
    steps:
      - uses: apache/rocketmq-test-tool@java-dev
        name: python e2e test
        with:
          yamlString: |
            action: test
            namespace: nacos-${{ github.run_id }}-${{ strategy.job-index }}
            askConfig: ${{ secrets.ASK_CONFIG_VIRGINA }}
            API_VERSION: v1
            KIND: Pod
            RESTART_POLICY: Never
            ENV:
              WAIT_TIME: 900
              REPO_NAME: ${{ env.TEST_REPO_NAME }}
              CODE: https://github.com/${{ env.TEST_REPO_NAME }}
              BRANCH: main
              CODE_PATH: python
              CMD: |
                cd /root/code/python && pip3 install -r requirements.txt && source ~/.bashrc
                cd nacospythontest && pytest --junitxml ../target/surefire-reports/TEST-report.xml test/*_test.py --log-cli-level=DEBUG
              ALL_IP: null
            CONTAINER:
              IMAGE: cloudnativeofalibabacloud/test-runner:v0.0.4
              RESOURCE_LIMITS:
                cpu: 2
                memory: 2Gi
              RESOURCE_REQUIRE:
                cpu: 2
                memory: 2Gi
      - uses: actions/upload-artifact@v4
        if: always()
        name: Upload test log
        with:
          name: testlog-${{ matrix.mode }}-python.txt
          path: testlog.txt
      - name: add markdown
        if: always()
        run: |
          cat result.md >> $GITHUB_STEP_SUMMARY


  clean:
    if: always()
    name: Clean
    needs: [docker, e2e-java-test, e2e-go-test, e2e-cpp-test, e2e-csharp-test, e2e-nodejs-test, e2e-python-test]
    runs-on: ubuntu-latest
    timeout-minutes: 60
    strategy:
      fail-fast: false
      matrix:
        mode: ["cluster","standalone","standalone_auth"]
        version: ${{ fromJSON(needs.docker.outputs.version-json) }}
    steps:
      - uses: apache/rocketmq-test-tool@java-dev
        name: clean
        with:
          yamlString: |
            action: clean
            namespace: nacos-${{ github.run_id }}-${{ strategy.job-index }}
            askConfig: ${{ secrets.ASK_CONFIG_VIRGINA }}


================================================
FILE: .github/workflows/stale.yml
================================================
name: Close inactive issues
on:
  schedule:
    - cron: "0 17 * * *"   # UTC+8 01:00(UTC 17:00)

jobs:
  close-issues:
    runs-on: ubuntu-latest
    permissions:
      issues: write
      pull-requests: write
    steps:
      - uses: actions/stale@v10
        with:
          operations-per-run: 50
          days-before-issue-stale: 7
          days-before-issue-close: 7
          stale-issue-label: "expired"
          stale-issue-message: "This issue has been open 7 days with no activity. This will be closed in 7 days."
          close-issue-message: "This issue was closed because it has been inactive for 7 days since being marked as expired."
          days-before-pr-stale: -1
          days-before-pr-close: -1
          exempt-all-milestones: true
          exempt-issue-labels: "kind/bug,kind/code quality,kind/discussion,kind/enhancement,kind/feature,kind/notice,kind/performance,kind/proposal,kind/question,kind/refactor,kind/user experience,good first issue,contribution welcome,dependencies"
          repo-token: ${{ secrets.GITHUB_TOKEN }}

================================================
FILE: .gitignore
================================================
# Except this file !.gitignore
.classpath
.project
.settings
target
.idea
.vscode
.DS_Store
.factorypath
/logs
*.iml
*.log
node_modules
test/derby.log
derby.log
work
test/logs
derby.log
yarn.lock
.flattened-pom.xml
lefthook.yml
distribution/conf/*.sql
distribution/plugins/*.jar


================================================
FILE: .mvn/wrapper/maven-wrapper.properties
================================================
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#   http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.
wrapperVersion=3.3.2
distributionType=only-script
distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.9/apache-maven-3.9.9-bin.zip


================================================
FILE: .travis.yml
================================================
notifications:
  email:
    recipients:
      - dev-nacos@googlegroups.com
      - mw_configcenter@list.alibaba-inc.com
  on_success: change
  on_failure: always

language: java

matrix:
  include:
    # On OSX, run with default JDK only.
    # - os: osx
    # On Linux, run with specific JDKs only.
    - os: linux
      env: CUSTOM_JDK="oraclejdk8"
    - name: Linux aarch64
      dist: focal
      arch: arm64-graviton2
      group: edge
      virt: vm


jdk:
  - openjdk11
  - openjdk8

before_install:
  - echo 'MAVEN_OPTS="$MAVEN_OPTS -Xmx1024m -XX:MaxPermSize=512m -XX:+BytecodeVerificationLocal"' >> ~/.mavenrc
  - cat ~/.mavenrc
#  - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then export JAVA_HOME=$(/usr/libexec/java_home); fi
#  - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then jdk_switcher use "$CUSTOM_JDK"; fi

script:
  - mvn -B clean package apache-rat:check findbugs:findbugs -Dmaven.test.skip=true
  - mvn clean -Premove-test-data
  - mvn -Prelease-nacos -Dmaven.test.skip=true clean install -U
  - mvn clean -Premove-test-data
  - mvn clean package -Pcit-test
  - mvn clean -Premove-test-data
  - mvn clean package -Pnit-test
  - mvn clean -Premove-test-data
after_success:
  - mvn clean package -Pit-test
  - mvn sonar:sonar -Psonar-apache


================================================
FILE: BUILDING
================================================
Build Instructions for NACOS

====================================================

(1) Prerequisites

    JDK 17+ is required in order to compile and run Nacos.

    nacos utilizes Maven as a distribution management and packaging tool. Version 3.6.3 or later is required.
    The plugin org.apache.maven.plugins:maven-enforcer-plugin:3.5.0 requires Maven version 3.6.3 .
    Maven installation and configuration instructions can be found here:

    http://maven.apache.org/run-maven/index.html


(2) Run test cases

    Execute the following command in order to compile and run test cases of each components:

    $ mvn test


(3) Import projects to Eclipse IDE

    First, generate eclipse project files:

    $ mvn -U eclipse:eclipse

    Then, import to eclipse by specifying the root directory of the project via:

    [File] > [Import] > [Existing Projects into Workspace].


(4) Build distribution packages

    Execute the following command in order to build the tar.gz packages and install JAR into local repository:

    #build nacos
    $ mvn -Prelease-nacos -Dmaven.test.skip=true clean install -U
    $ ./mvnw -Prelease-nacos -Dmaven.test.skip=true clean install -U


================================================
FILE: CHANGELOG.md
================================================
## 1.0.0-RC4(Mar 22, 2019)
* [#923] Nacos 1.0.0 compatible with nacos-client 0.6.2
* [#938] Client beat processor task lost
* [#946] Change default server mode to AP



## 1.0.0-RC1(Mar 15, 2019)

* [#870] About Nacos's namespace and tenant design
* [#869] Client exception message is confusing
* [#866] BeatInfo scheduled property may have the memory visibility issue
* [#865] checksum value is not correct
* [#839] Refactor API URLs 
* [#811] ApiCommands.updateIpPublish countDownLatch timeout issue
* [#809] Instance field 'valid' should be deprecated and replaced by 'healthy'
* [#803] Nacos front-end function regression plan and landing
* [#801] Nacos uses nignx as a best practice article for current limiting.
* [#757] The word 'domain' should be replaced by 'service'
* [#745] Support server running mode in CP, AP or mixed
* [#744] The exact status of server should be stored and controlled
* [#725] Will the nacos registry be how to do multi-environment deployment?
* [#677] Support ephemeral instances and persistent instances
* [#651] Remove old API entry 'APICommands'
* [#650] Refactor server list management to make it irrelevant to consistency protocol
* [#634] Add global push enable switch and data query enable switch
* [#629] Server data needs warm up before open traffic
* [#502] Registering ephemeral instance as well as persistent instances
* [#501] Health check mode confict when building muilt clusters whit nacos sync + nacos
* [#479] Metadata should be displayed and edited using standard property syntax
* [#327] Inform the ACM SDK of the RAM role name and access the configuration ? ?
* [#269] need to support service group in naming module

## 0.9.0(Feb 28, 2019)

* [#840] Nacos server adds startup mode to distinguish between config and naming.
* [#762] Register instance returns failed when the health check mode is 'server' in standalone mode.
* [#473] Nacos Cluster Mode kubernate Startup nacos.log error Log.
* [#240] Log strong dependence problem.
* [#824] getServicesOfServer throws exception if service list is empty.
* [#802] Nacos server multi-boot mode support.
* [#800] Nacos's client-to-server addressing mode document introduction.
* [#768] The interval at which the heartbeat is sent in BeatReactor is not controlled by the server return value.
* [#759] why instance can't auto-delete.
* [#756] Format of instance and service should be validated.
* [#720] Memory leak in PushService.
* [#653] IoUtils under nacos-common-0.2.1-RC1.jar lacks "" judgment on encoding.
* [#588] Client compatible to jdk1.6.

## 0.8.0(Jan 22, 2019) PRE-GA

* [#162] Support open metrics and prometheus
* [#268] Health check is performed in the Nacos startup script
* [#320] Nacos supports multiple configuration files, configuration template abstraction and inheritance
* [#333] Use nacos in k8s to get hostname exception
* [#335] update nacos.io docker img priority/low
* [#339] Project language problem identified in github
* [#381] Discuss:How to support Login
* [#397] Some questions for Nacos
* [#402] When the configuration is added or edited, the edit box will not come out 
* [#462] Nacos monitor discuss (0.8 version)
* [#496] Warning log printing when quering a nonexistent service
* [#497] Make subscription of service triggered by getInstance method optional
* [#498] Support namespace for service discovery
* [#499] When the configuration is newly created (if data-id and group already exist), the original configuration will be overwritten
* [#512] nacos-logs start.out always print 8848 (but port can be changed)
* [#514] Nacos 0.7 not support namespace
* [#523] Add a switch to control server detection and client reporting heartbeat switching
* [#526] Possible data loss in server side health check mode
* [#527] Many repeat client beat tasks can be generated
* [#558] Enable access log recording by default 
* [#560] Nacos server startup issues
* [#579] New API support - “update health in none health check mode through api”
* [#587] Client sends request concurrently
* [#592] Service restful interface put/post is reversed
* [#599] getSubscribeServices method gets services that were deregistered
* [#603] Format log of naming module 
* [#609] Always print a NPE log at start
* [#663] Nacos update instance info NPE
* [#668] 0.8.0-SNAPSHOT naming heartbeat not compatible with lower version client
* [#672] Startup.cmd bug

## 0.7.0(Dec, 2018)

* [ #461 ] Registration failed when instance port is set to 0
* [ #455 ] The console can't change the change code
* [ #447 ] 集群模式server挂掉一台后,提供方注册失败
* [ #445 ] 0.6.1控制台创建配置发布提交时,提示信息有问题
* [ #442 ] Typos in class names and variables.
* [ #413 ] The console has some uncaught exceptions
* [ #395 ] nacos surport mysql in the case of stand-alone mode
* [ #393 ] Support operation of selector on console
* [ #365 ] NodeJs SDK support
* [ #362 ] The metadata will lost when online or offline instance through web ui
* [ #187 ] Provide Label ability for Naming Service into NACOS for complex multi-DC scenario.

## 0.6.1(Dec, 2018)

* [#421] NamingService's serivce name can't use colon(:) in Windows
* [#432] When packing nacos-core, ${user.home} is replaced in the logback configuration file (nacos.xml)

## 0.6.0(Dec, 2018)

* [#388] Cluster name should be provided in the Instance
* [#377] Clean up messy code in Naming module
* [#369] Support instance list persisted on disk
* [#366] findbugs-maven-plugin version
* [#362] The metadata will lost when online or offline instance through web ui
* [#352] Refactoring internationalization Nacos console
* [#278] Nacos docker img
* [#243] optimize the efficiency of integration testing, it’s taking too long now

## 0.5.0(Nov, 2018)

* [#148] Naming write performace.
* [#175] Support deregistering instance automatically.
* [#176] Naming client query instance method should bypass local cache at client start.
* [#177] Console supports registering new empty service and delete empty service.
* [#181] NPE when adding an instance if no leader in the raft cluster.
* [#193] Configure host domain name cause nacos server cluster is unavailable.
* [#209] Disable service and cluster level customization in client registerInstance method.
* [#214] Please support Java 11.
* [#222] print more nacos server start status info in start.log.
* [#231] Refactoring: Parsing the Nacos home directory and the cluster.conf file.
* [#246] "mvn -B clean apache-rat:check findbugs:findbugs" did not work as expected.
* [#251] Console Editor Optimization.
* [#254] DataId and group are required in historical version and listener query.
* [#256] Whether the service discovery data needs to add a newline link symbol.
* [#257] Listening query switching query dimension data is not refreshed.
* [#258] Remove the Balloon of DataId/Group.
* [#259] Listening query paging size problem.
* [#272] "#it is ip" is also parsed into an instance IP.
* [#275] nacos coredns plugin to support DNS.
* [#281] We should lint the console code.
* [#302] Maven build project supports java 11.
* [#316] In stand alone mode, Nacos still checks the cluster.conf.

## 0.4.0(Nov 7, 2018)

* [#216] Fix tenant dir problem
* [#197] Service update ignored some properties
* [#190] Client beat lose weight info and metadata info
* [#188] Console delete data cannot be updated in time
* [#179] Listening query fail when namespace is not blank
* [#157] Lack information in readme.md to describe the related project repositories for Nacos echosystem
* [#144] There have a error and something are not clear
* [#106] Snapshot file create error
* [#92] Eliminate warnings, refactor code, show start.log detail


## 0.3.0(Oct 26, 2018)

* [#171] UI debug errors
* [#156] Web UI 404 problem
* [#155] use local resource
* [#145] nacos-example not found :org.apache.logging.log4j.core.Logger
* [#142] UI console show Group
* [#149] Fix naming client beat process failed bug.
* [#150] Fix naming service registration hangs bug.

## 0.3.0-RC1(Oct 19, 2018)

* [#33] Support console for config management.
* [#51] Support console for naming service.
* [#121] Fix get instance method hanging bug.
* [#138] Add a flag to indicate if instance is offline.
* [#130] Fix health check disabled if machine has one CPU core bug.
* [#139] Fix still get instance with zero weight bug.
* [#128] Fix console layout bug.



## 0.2.1-release(Sept 28, 2018)

* Fix deregister last instance failed error.
* Fix url pattern error.
* Fully integrate with and seamlessly support Spring framework, Spring Boot and Spring Cloud
* Separate nacos-api from nacos client implementation
* Support high available cluster mode
* Fix cluster node health check abnormality
* Fix stand-alone mode gets the change history list exception
* Fix Pulling does not exist configuration print io exception
* Optimized log framework
* Service Discovery: Client support getting server status.
* Service Discovery: Client support get all service names of server.
* Service Discovery: Client support get all subscribed services.

## 0.2.0 (Sept 17, 2018)

#### FEATURES:

* separate nacos-api from nacos client implementation
* Cluster node health check abnormality
* Stand-alone mode gets the change history list exception
* Pulling does not exist configuration print io exception
* Optimized log framework
* Service Discovery: Client support getting server status.
* Service Discovery: Client support get all service names of server.
* Service Discovery: Client support get all subscribed services.


#### IMPROVEMENTS:

#### BUG FIXES:

#### BREAKING CHANGES:



## 0.1.0 (July 18, 2018)

#### FEATURES:

* Creating, deleting, modifying, and querying configurations: the core functionalities.
* Multiple languages support: supports Java/Shell/HTTP OpenAPI.
* Service Discovery: Basic service registry and discovery.
* Service Discovery: Service load balancing using instance weights, protect threshold and instance health statuses.
* Service Discovery: Supports four ways for health check: http, tcp, mysql and client heartbeat.
* Service Discovery: CRUD operations on service instances through Java client and open API.
* Service Discovery: Service subscribtion and push through Java client.
* Nacos official website is coming. https://nacos.io/



#### IMPROVEMENTS:

#### BUG FIXES:

#### BREAKING CHANGES:


================================================
FILE: CODE_OF_CONDUCT.md
================================================
# Contributor Covenant Code of Conduct

## Our Pledge

In the interest of fostering an open and welcoming environment, we as
contributors and maintainers pledge to making participation in our project and
our community a harassment-free experience for everyone, regardless of age, body
size, disability, ethnicity, gender identity and expression, level of experience,
education, socio-economic status, nationality, personal appearance, race,
religion, or sexual identity and orientation.

## Our Standards

Examples of behavior that contributes to creating a positive environment
include:

* Using welcoming and inclusive language
* Being respectful of differing viewpoints and experiences
* Gracefully accepting constructive criticism
* Focusing on what is best for the community
* Showing empathy towards other community members

Examples of unacceptable behavior by participants include:

* The use of sexualized language or imagery and unwelcome sexual attention or
  advances
* Trolling, insulting/derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or electronic
  address, without explicit permission
* Other conduct which could reasonably be considered inappropriate in a
  professional setting

## Our Responsibilities

Project maintainers are responsible for clarifying the standards of acceptable
behavior and are expected to take appropriate and fair corrective action in
response to any instances of unacceptable behavior.

Project maintainers have the right and responsibility to remove, edit, or
reject comments, commits, code, wiki edits, issues, and other contributions
that are not aligned to this Code of Conduct, or to ban temporarily or
permanently any contributor for other behaviors that they deem inappropriate,
threatening, offensive, or harmful.

## Scope

This Code of Conduct applies both within project spaces and in public spaces
when an individual is representing the project or its community. Examples of
representing a project or community include using an official project e-mail
address, posting via an official social media account, or acting as an appointed
representative at an online or offline event. Representation of a project may be
further defined and clarified by project maintainers.

## Enforcement

Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported by contacting the project team at users-nacos@googlegroups.com. All
complaints will be reviewed and investigated and will result in a response that
is deemed necessary and appropriate to the circumstances. The project team is
obligated to maintain confidentiality with regard to the reporter of an incident.
Further details of specific enforcement policies may be posted separately.

Project maintainers who do not follow or enforce the Code of Conduct in good
faith may face temporary or permanent repercussions as determined by other
members of the project's leadership.

## Attribution

This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html

[homepage]: https://www.contributor-covenant.org


================================================
FILE: CONTRIBUTING.md
================================================
# Contributing to Nacos

[中文版](./CONTRIBUTING_zh.md)

Welcome to Nacos! This document is a guideline about how to contribute to Nacos.

If you find something incorrect or missing, please leave comments / suggestions.

## Before you get started

### Code of Conduct

Please make sure to read and observe our [Code of Conduct](./CODE_OF_CONDUCT.md).

## Contributing

Nacos welcome new participants of any role, including user, contributor, committer and PMC.

![](http://acm-public.oss-cn-hangzhou.aliyuncs.com/contributor_definition.png)


We encourage newcomers actively joining in Nacos projects and involving from user roles to committer roles, and even PMC roles. In order to accomplish this, new comers needs to actively contribute in Nacos project. The following paragraph introduce how to contribute in Nacos way.

#### Open / pickup an issue for preparation

If you find a typo in a document, find a bug in code or want new features, or want to give suggestions, you can [open an issue on GitHub](https://github.com/alibaba/Nacos/issues/new) to report it.

If you just want to contribute directly you can choose the issue below.

-   [Contribution Welcome](https://github.com/alibaba/nacos/labels/contribution%20welcome): Heavily needed issue, but currently short of hand.
    
-   [good first issue](https://github.com/alibaba/nacos/labels/good%20first%20issue): Good for newcomers, newcomers can pick up one for warm-up.
    

We strongly value documentation and integration with other projects such as Spring Cloud, Kubernetes, Dubbo, etc. We are very glad to work on any issue for these aspects.

Please note that any PR must be associated with a valid issue. Otherwise, the PR will be rejected.

#### Begin your contribution

Now if you want to contribute, please create a new pull request.

We use the `develop` branch as the development branch, which indicates that this is an unstable branch.

Furthermore, our branching model complies with [https://nvie.com/posts/a-successful-git-branching-model/](https://nvie.com/posts/a-successful-git-branching-model/). We strongly suggest new comers walk through the above article before creating PR.

Now, if you are ready to create PR, here is the workflow for contributors:

1.  Fork to your own
    
2.  Clone fork to a local repository
    
3.  Create a new branch and work on it
    
4.  Keep your branch in sync
    
5.  Commit your changes (make sure your commit message is concise)

6.  Run pre-submission checks locally (see [Pre-submission Checks](#pre-submission-checks) below)

7.  Push your commits to your forked repository

8.  Create a pull request to **develop** branch.
    

When creating pull request:

1.  Please follow [the pull request template](./.github/PULL_REQUEST_TEMPLATE.md).
    
2.  Please create the request to **develop** branch.
    
3.  Please make sure the PR has a corresponding issue.
    
4.  If your PR contains large changes, e.g. component refactor or new components, please write detailed documents about its design and usage.
    
5.  Note that a single PR should not be too large. If heavy changes are required, it's better to separate the changes to a few individual PRs.
    
6.  After creating a PR, one or more reviewers will be assigned to the pull request.
    
7.  Before merging a PR, squash any fix review feedback, typo, merged and rebased sorts of commits. The final commit message should be clear and concise.
    

If your PR contains large changes, e.g. component refactor or new components, please write detailed documents about its design and usage.

### License header

Every new source file (`.java`, `.xml`, etc.) **must** include the Apache License 2.0 header. CI enforces this via `apache-rat:check` and your PR will fail without it.

Copy the header below into every new file (adjust the comment style for non-Java files):

```java
/*
 * Copyright 1999-2026 Alibaba Group Holding Ltd.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
```

### Pre-submission checks

Before pushing your commits, run the following command locally to catch issues early:

```bash
mvn -B clean compile apache-rat:check checkstyle:check spotbugs:check -DskipTests
```

| Check | What it verifies |
|-------|-----------------|
| `compile` | Code compiles without errors |
| `apache-rat:check` | All source files have the required Apache License header |
| `checkstyle:check` | Code style complies with [Alibaba Java Coding Guidelines](style/NacosCheckStyle.xml) |
| `spotbugs:check` | No high-priority bug patterns detected by [SpotBugs](https://spotbugs.github.io/) |

To run unit tests:

```bash
mvn clean test
```

### Code review guidance

Committers will rotate reviewing the code to make sure all the PR will be reviewed timely and by at least one committer before merge. If we aren't doing our job (sometimes we drop things). And as always, we welcome volunteers for code review.

Some principles:

-   Readability - Important code should be well-documented. API should have Javadoc. Code style should be complied with the existing one.
    
-   Elegance: New functions, classes or components should be well-designed.
    
-   Testability - 80% of the new code should be covered by unit test cases.
    
-   Maintainability - Comply with our [PMD spec](style/codeStyle.md), and 3-month-frequency update should be maintained at least.
    

### Now how about try become a committer?

Generally speaking, contribute 8 non-trivial patches and get at least three different people to review them (you'll need three people to support you). Then ask someone to nominate you. You're demonstrating your:

-   at least 8 PR and the associated issues to the project,
    
-   ability to collaborate with the team,
    
-   understanding of the projects' code base and coding style, and
    
-   ability to write good code (last but certainly not least)
    

A current committer nominates you by slacking the team on the Nacos issue with the label "nomination"

-   your first and last name
    
-   a link to your Git profile
    
-   an explanation of why you should be a committer,
    
-   Elaborate on the top 3 PR and the associated issues the nominator has worked with you that can demonstrate your ability.
    

Two other committers need to second your nomination. If no one objects in 5 working days (China), you're a committer. If anyone objects or wants more information, the committers discuss and usually come to a consensus (within the 5 working days). If issues cannot be resolved, there's a vote among current committers.

![](http://acm-public.oss-cn-hangzhou.aliyuncs.com/nomination_process.png)

In the worst case, this can drag out for two weeks. Keep contributing! Even in the rare cases where a nomination fails, the objection is usually something easy to address like "more patches" or "not enough people are familiar with this person's work."


================================================
FILE: CONTRIBUTING_zh.md
================================================
# 贡献指南

[English](./CONTRIBUTING.md)

欢迎来到 Nacos!本文档是关于如何为 Nacos 做贡献的指南。

如果您发现任何不正确或遗漏的内容,请留下意见或建议。

## 开始之前

### 行为准则

请务必阅读并遵守我们的[行为准则](./CODE_OF_CONDUCT.md)。

## 参与贡献

Nacos 欢迎任何角色的新参与者,包括用户、贡献者、Committer 和 PMC。

![](http://acm-public.oss-cn-hangzhou.aliyuncs.com/contributor_definition.png)

我们鼓励新人积极参与 Nacos 项目,从用户角色发展到贡献者、Committer,甚至 PMC。为了实现这一目标,新人需要积极地为 Nacos 项目做贡献。以下内容介绍了如何以 Nacos 的方式进行贡献。

#### 创建或认领 Issue

如果您发现文档中的拼写错误、代码中的 bug,或者想要新功能、提出建议,可以在 [GitHub 上创建 Issue](https://github.com/alibaba/Nacos/issues/new) 进行反馈。

如果您想直接参与贡献,可以选择以下标签的 Issue:

-   [Contribution Welcome](https://github.com/alibaba/nacos/labels/contribution%20welcome):急需解决但人手不足的 Issue。

-   [good first issue](https://github.com/alibaba/nacos/labels/good%20first%20issue):适合新手的 Issue,可以作为入门热身。

我们非常重视文档编写以及与其他项目(如 Spring Cloud、Kubernetes、Dubbo 等)的集成。我们很乐意处理这些方面的任何 Issue。

请注意,每个 PR 必须关联一个有效的 Issue,否则 PR 将被拒绝。

#### 开始贡献

如果您准备开始贡献,请创建一个新的 Pull Request。

我们使用 `develop` 分支作为开发分支,这是一个不稳定的分支。

此外,我们的分支模型遵循 [Git Flow](https://nvie.com/posts/a-successful-git-branching-model/)。我们强烈建议新人在创建 PR 之前先阅读上述文章。

以下是贡献者的工作流程:

1.  Fork 仓库到自己的账号下

2.  将 Fork 克隆到本地

3.  创建新分支并在上面开发

4.  保持分支与上游同步

5.  提交更改(确保 commit message 简洁明了)

6.  在本地运行提交前检查(参见下方[提交前检查](#提交前检查))

7.  将提交推送到您的 Fork 仓库

8.  向 **develop** 分支创建 Pull Request

创建 Pull Request 时:

1.  请遵循 [PR 模板](./.github/PULL_REQUEST_TEMPLATE.md)。

2.  请将 PR 提交到 **develop** 分支。

3.  请确保 PR 关联了对应的 Issue。

4.  如果 PR 包含较大的改动(如组件重构或新组件),请编写详细的设计和使用文档。

5.  注意单个 PR 不要过大。如果需要大量改动,最好将其拆分为多个独立的 PR。

6.  创建 PR 后,一名或多名审核者会被分配到该 PR。

7.  合并前,请将修复审查意见、拼写错误、合并和变基等提交压缩为有意义的提交。最终的 commit message 应当清晰简洁。

如果 PR 包含较大的改动(如组件重构或新组件),请编写详细的设计和使用文档。

### License 头

每个新的源文件(`.java`、`.xml` 等)**必须**包含 Apache License 2.0 头。CI 会通过 `apache-rat:check` 自动检查,缺少 License 头的 PR 将无法通过。

请将以下头信息复制到每个新文件中(非 Java 文件请调整注释风格):

```java
/*
 * Copyright 1999-2026 Alibaba Group Holding Ltd.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
```

### 提交前检查

在推送代码之前,请在本地运行以下命令以尽早发现问题:

```bash
mvn -B clean compile apache-rat:check checkstyle:check spotbugs:check -DskipTests
```

| 检查项 | 说明 |
|-------|------|
| `compile` | 代码是否能正常编译 |
| `apache-rat:check` | 所有源文件是否包含 Apache License 头 |
| `checkstyle:check` | 代码风格是否符合[阿里巴巴 Java 开发规约](style/NacosCheckStyle.xml) |
| `spotbugs:check` | 是否存在 [SpotBugs](https://spotbugs.github.io/) 检测到的高优先级 bug |

运行单元测试:

```bash
mvn clean test
```

### 代码审查指南

Committer 会轮流审查代码,确保所有 PR 在合并前至少经过一名 Committer 的及时审核。如果我们有所疏漏,欢迎随时提醒。同时,我们也欢迎志愿者参与代码审查。

一些原则:

-   可读性 - 重要的代码应有完善的文档。API 应有 Javadoc。代码风格应与现有代码保持一致。

-   优雅性 - 新的函数、类或组件应当设计良好。

-   可测试性 - 新代码应有 80% 的单元测试覆盖率。

-   可维护性 - 遵守我们的[代码规范](style/codeStyle.md)。

### 如何成为 Committer?

一般来说,需要贡献 8 个非琐碎的补丁,并获得至少三个不同的人来审核(您需要三个人的支持)。然后请人提名您。您需要展示:

-   至少为项目贡献了 8 个 PR 和对应的 Issue

-   能够与团队协作

-   了解项目代码库和编码风格

-   能够编写高质量的代码

Committer 通过在带有 "nomination" 标签的 Nacos Issue 中通知团队来提名您,需要包含:

-   您的姓名

-   您的 Git 主页链接

-   解释您为何应该成为 Committer

-   详细说明提名者与您合作过的前 3 个 PR 和对应 Issue,以证明您的能力

需要另外两名 Committer 附议您的提名。如果 5 个工作日(中国时间)内没有人反对,您就是 Committer 了。如果有人反对或需要更多信息,Committer 们会进行讨论并通常在 5 个工作日内达成共识。如果问题无法解决,将在现有 Committer 中进行投票。

![](http://acm-public.oss-cn-hangzhou.aliyuncs.com/nomination_process.png)

在最坏的情况下,这个过程可能会持续两周。请继续贡献!即使在提名失败的罕见情况下,反对意见通常也是容易解决的,比如"需要更多补丁"或"没有足够的人熟悉此人的工作"。


================================================
FILE: LICENSE
================================================
                                 Apache License
                           Version 2.0, January 2004
                        http://www.apache.org/licenses/

   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

   1. Definitions.

      "License" shall mean the terms and conditions for use, reproduction,
      and distribution as defined by Sections 1 through 9 of this document.

      "Licensor" shall mean the copyright owner or entity authorized by
      the copyright owner that is granting the License.

      "Legal Entity" shall mean the union of the acting entity and all
      other entities that control, are controlled by, or are under common
      control with that entity. For the purposes of this definition,
      "control" means (i) the power, direct or indirect, to cause the
      direction or management of such entity, whether by contract or
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
      outstanding shares, or (iii) beneficial ownership of such entity.

      "You" (or "Your") shall mean an individual or Legal Entity
      exercising permissions granted by this License.

      "Source" form shall mean the preferred form for making modifications,
      including but not limited to software source code, documentation
      source, and configuration files.

      "Object" form shall mean any form resulting from mechanical
      transformation or translation of a Source form, including but
      not limited to compiled object code, generated documentation,
      and conversions to other media types.

      "Work" shall mean the work of authorship, whether in Source or
      Object form, made available under the License, as indicated by a
      copyright notice that is included in or attached to the work
      (an example is provided in the Appendix below).

      "Derivative Works" shall mean any work, whether in Source or Object
      form, that is based on (or derived from) the Work and for which the
      editorial revisions, annotations, elaborations, or other modifications
      represent, as a whole, an original work of authorship. For the purposes
      of this License, Derivative Works shall not include works that remain
      separable from, or merely link (or bind by name) to the interfaces of,
      the Work and Derivative Works thereof.

      "Contribution" shall mean any work of authorship, including
      the original version of the Work and any modifications or additions
      to that Work or Derivative Works thereof, that is intentionally
      submitted to Licensor for inclusion in the Work by the copyright owner
      or by an individual or Legal Entity authorized to submit on behalf of
      the copyright owner. For the purposes of this definition, "submitted"
      means any form of electronic, verbal, or written communication sent
      to the Licensor or its representatives, including but not limited to
      communication on electronic mailing lists, source code control systems,
      and issue tracking systems that are managed by, or on behalf of, the
      Licensor for the purpose of discussing and improving the Work, but
      excluding communication that is conspicuously marked or otherwise
      designated in writing by the copyright owner as "Not a Contribution."

      "Contributor" shall mean Licensor and any individual or Legal Entity
      on behalf of whom a Contribution has been received by Licensor and
      subsequently incorporated within the Work.

   2. Grant of Copyright License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      copyright license to reproduce, prepare Derivative Works of,
      publicly display, publicly perform, sublicense, and distribute the
      Work and such Derivative Works in Source or Object form.

   3. Grant of Patent License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      (except as stated in this section) patent license to make, have made,
      use, offer to sell, sell, import, and otherwise transfer the Work,
      where such license applies only to those patent claims licensable
      by such Contributor that are necessarily infringed by their
      Contribution(s) alone or by combination of their Contribution(s)
      with the Work to which such Contribution(s) was submitted. If You
      institute patent litigation against any entity (including a
      cross-claim or counterclaim in a lawsuit) alleging that the Work
      or a Contribution incorporated within the Work constitutes direct
      or contributory patent infringement, then any patent licenses
      granted to You under this License for that Work shall terminate
      as of the date such litigation is filed.

   4. Redistribution. You may reproduce and distribute copies of the
      Work or Derivative Works thereof in any medium, with or without
      modifications, and in Source or Object form, provided that You
      meet the following conditions:

      (a) You must give any other recipients of the Work or
          Derivative Works a copy of this License; and

      (b) You must cause any modified files to carry prominent notices
          stating that You changed the files; and

      (c) You must retain, in the Source form of any Derivative Works
          that You distribute, all copyright, patent, trademark, and
          attribution notices from the Source form of the Work,
          excluding those notices that do not pertain to any part of
          the Derivative Works; and

      (d) If the Work includes a "NOTICE" text file as part of its
          distribution, then any Derivative Works that You distribute must
          include a readable copy of the attribution notices contained
          within such NOTICE file, excluding those notices that do not
          pertain to any part of the Derivative Works, in at least one
          of the following places: within a NOTICE text file distributed
          as part of the Derivative Works; within the Source form or
          documentation, if provided along with the Derivative Works; or,
          within a display generated by the Derivative Works, if and
          wherever such third-party notices normally appear. The contents
          of the NOTICE file are for informational purposes only and
          do not modify the License. You may add Your own attribution
          notices within Derivative Works that You distribute, alongside
          or as an addendum to the NOTICE text from the Work, provided
          that such additional attribution notices cannot be construed
          as modifying the License.

      You may add Your own copyright statement to Your modifications and
      may provide additional or different license terms and conditions
      for use, reproduction, or distribution of Your modifications, or
      for any such Derivative Works as a whole, provided Your use,
      reproduction, and distribution of the Work otherwise complies with
      the conditions stated in this License.

   5. Submission of Contributions. Unless You explicitly state otherwise,
      any Contribution intentionally submitted for inclusion in the Work
      by You to the Licensor shall be under the terms and conditions of
      this License, without any additional terms or conditions.
      Notwithstanding the above, nothing herein shall supersede or modify
      the terms of any separate license agreement you may have executed
      with Licensor regarding such Contributions.

   6. Trademarks. This License does not grant permission to use the trade
      names, trademarks, service marks, or product names of the Licensor,
      except as required for reasonable and customary use in describing the
      origin of the Work and reproducing the content of the NOTICE file.

   7. Disclaimer of Warranty. Unless required by applicable law or
      agreed to in writing, Licensor provides the Work (and each
      Contributor provides its Contributions) on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
      implied, including, without limitation, any warranties or conditions
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
      PARTICULAR PURPOSE. You are solely responsible for determining the
      appropriateness of using or redistributing the Work and assume any
      risks associated with Your exercise of permissions under this License.

   8. Limitation of Liability. In no event and under no legal theory,
      whether in tort (including negligence), contract, or otherwise,
      unless required by applicable law (such as deliberate and grossly
      negligent acts) or agreed to in writing, shall any Contributor be
      liable to You for damages, including any direct, indirect, special,
      incidental, or consequential damages of any character arising as a
      result of this License or out of the use or inability to use the
      Work (including but not limited to damages for loss of goodwill,
      work stoppage, computer failure or malfunction, or any and all
      other commercial damages or losses), even if such Contributor
      has been advised of the possibility of such damages.

   9. Accepting Warranty or Additional Liability. While redistributing
      the Work or Derivative Works thereof, You may choose to offer,
      and charge a fee for, acceptance of support, warranty, indemnity,
      or other liability obligations and/or rights consistent with this
      License. However, in accepting such obligations, You may act only
      on Your own behalf and on Your sole responsibility, not on behalf
      of any other Contributor, and only if You agree to indemnify,
      defend, and hold each Contributor harmless for any liability
      incurred by, or claims asserted against, such Contributor by reason
      of your accepting any such warranty or additional liability.

   END OF TERMS AND CONDITIONS

   APPENDIX: How to apply the Apache License to your work.

      To apply the Apache License to your work, attach the following
      boilerplate notice, with the fields enclosed by brackets "[]"
      replaced with your own identifying information. (Don't include
      the brackets!)  The text should be enclosed in the appropriate
      comment syntax for the file format. We also recommend that a
      file or class name and description of purpose be included on the
      same "printed page" as the copyright notice for easier
      identification within third-party archives.

   Copyright [yyyy] [name of copyright owner]

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.


================================================
FILE: NOTICE
================================================
Nacos
Copyright 2018-2020

This product includes software developed at
The Alibaba MiddleWare Group.

------
This product has a bundle Spring Boot:
                            The Spring Boot Project
                            =================

Please visit the Spring Boot web site for more information:

  * https://spring.io/projects/spring-boot

Copyright 2014 The Spring Boot Project

The Spring Boot Project licenses this file to you under the Apache License,
version 2.0 (the "License"); you may not use this file except in compliance
with the License. You may obtain a copy of the License at:

  http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
License for the specific language governing permissions and limitations
under the License.

Also, please refer to each LICENSE.<component>.txt file, which is located in
the 'license' directory of the distribution file, for the license terms of the
components that this product depends on.

------
This product has a bundle Spring Framework:
                            Spring Framework
                            =================

Please visit the git for more information:

  * https://github.com/spring-projects/spring-framework.git

Copyright 2002-2020 the original author or authors.

The Spring Framework licenses this file to you under the Apache License,
version 2.0 (the "License"); you may not use this file except in compliance
with the License. You may obtain a copy of the License at:

  http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
License for the specific language governing permissions and limitations
under the License.

Also, please refer to each LICENSE.<component>.txt file, which is located in
the 'license' directory of the distribution file, for the license terms of the
components that this product depends on.

------
com.alibaba.nacos.common.utils.InetAddressValidator.java in this product is
copied from com.dynatrace.openkit.core.util.InetAddressValidator.java  of openkit-java project.
https://github.com/Dynatrace/openkit-java
                          openkit-java
                    ======================

     Copyright 2018-2021 Dynatrace LLC

     Licensed under the Apache License, Version 2.0 (the "License");
     you may not use this file except in compliance with the License.
     You may obtain a copy of the License at

         http://www.apache.org/licenses/LICENSE-2.0

     Unless required by applicable law or agreed to in writing, software
     distributed under the License is distributed on an "AS IS" BASIS,
     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     See the License for the specific language governing permissions and
     limitations under the License.

------
This product has a bundle Protocol Buffers��
                      Protocol Buffers
                   =======================
Protocol Buffers for Go with Gadgets

Copyright (c) 2013, The GoGo Authors. All rights reserved.
http://github.com/gogo/protobuf

------
This product has a bundle Istio��
                          Istio
                   =======================

   Copyright 2018 Istio Authors

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.


================================================
FILE: README.md
================================================

<img src="doc/Nacos_Logo.png" width="50%" syt height="50%" />

# Nacos: Dynamic  *Na*ming and *Co*nfiguration *S*ervice

[![Gitter](https://badges.gitter.im/alibaba/nacos.svg)](https://gitter.im/alibaba/nacos?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge)   [![License](https://img.shields.io/badge/license-Apache%202-4EB1BA.svg)](https://www.apache.org/licenses/LICENSE-2.0.html)
[![Gitter](https://travis-ci.org/alibaba/nacos.svg?branch=master)](https://travis-ci.org/alibaba/nacos)
[![](https://img.shields.io/badge/Nacos-Check%20Your%20Contribution-orange)](https://opensource.alibaba.com/contribution_leaderboard/details?projectValue=nacos)
[![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/alibaba/nacos)

-------

## What does it do

Nacos (official site: [nacos.io](https://nacos.io)) is an easy-to-use platform designed for dynamic service discovery and configuration and service management. It helps you to build cloud native applications and microservices platform easily.

Service is a first-class citizen in Nacos. Nacos supports almost all type of services,for example,[Dubbo/gRPC service](https://nacos.io/docs/latest/ecology/use-nacos-with-dubbo/), [Spring Cloud RESTFul service](https://nacos.io/docs/latest/ecology/use-nacos-with-spring-cloud/) or [Kubernetes service](https://nacos.io/docs/latest/quickstart/quick-start-kubernetes/).

Nacos provides four major functions.

* **Service Discovery and Service Health Check** 
    
    Nacos makes it simple for services to register themselves and to discover other services via a DNS or HTTP interface. Nacos also provides real-time health checks of services to prevent sending requests to unhealthy hosts or service instances.

* **Dynamic Configuration Management**
  
    Dynamic Configuration Service allows you to manage configurations of all services in a centralized and dynamic manner across all environments. Nacos eliminates the need to redeploy applications and services when configurations are updated, which makes configuration changes more efficient and agile.

* **Dynamic DNS Service**
    
    Nacos supports weighted routing, making it easier for you to implement mid-tier load balancing, flexible routing policies, flow control, and simple DNS resolution services in the production environment within your data center. It helps you to implement DNS-based service discovery easily and prevent applications from coupling to vendor-specific service discovery APIs.

* **Service and MetaData Management**
	
    Nacos provides an easy-to-use service dashboard to help you manage your services metadata, configuration, kubernetes DNS, service health and metrics statistics.
 

## Quick Start
It is super easy to get started with your first project.

### Deploying Nacos on cloud

You can deploy Nacos on cloud, which is the easiest and most convenient way to start Nacos. 

Use the following [Nacos deployment guide](https://cn.aliyun.com/product/aliware/mse?spm=nacos-website.topbar.0.0.0) to see more information and deploy a stable and out-of-the-box Nacos server.


### Start by the provided startup package

#### Step 1: Download the binary package 

You can download the package from the [latest stable release](https://github.com/alibaba/nacos/releases).  

Take release `nacos-server-1.0.0.zip` for example:
```sh
unzip nacos-server-1.0.0.zip
cd nacos/bin 
``` 

#### Step 2: Start Server

On the **Linux/Unix/Mac** platform, run the following command to start server with standalone mode: 
```sh
sh startup.sh -m standalone
```

On the **Windows** platform, run the following command to start server with standalone mode.  Alternatively, you can also double-click the `startup.cmd` to run NacosServer.
```
startup.cmd -m standalone
```

For more details, see [quick-start.](https://nacos.io/docs/latest/quickstart/quick-start/)

## Quick start for other open-source projects:
* [Quick start with Nacos command and console](https://nacos.io/docs/latest/quickstart/quick-start/)

* [Quick start with dubbo](https://nacos.io/docs/latest/ecology/use-nacos-with-dubbo/)

* [Quick start with spring cloud](https://nacos.io/docs/latest/ecology/use-nacos-with-spring-cloud/)

* [Quick start with kubernetes](https://nacos.io/docs/latest/quickstart/quick-start-kubernetes/)


## Documentation

You can view the full documentation from the [Nacos website](https://nacos.io/docs/latest/overview/).

You can also read this online eBook from the [NACOS ARCHITECTURE & PRINCIPLES](https://nacos.io/docs/ebook/kbyo6n/).

All the latest and long-term notice can also be found here from [GitHub notice issue](https://github.com/alibaba/nacos/labels/notice).

## Contributing

Contributors are welcomed to join Nacos project. Please check [CONTRIBUTING](./CONTRIBUTING.md) about how to contribute to this project.

### How can I contribute?

* Take a look at issues with tags marked [`good first issue`](https://github.com/alibaba/nacos/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22) or [`contribution welcome`](https://github.com/alibaba/nacos/issues?q=is%3Aopen+is%3Aissue+label%3A%22contribution+welcome%22).
* Answer questions on [issues](https://github.com/alibaba/nacos/issues).
* Fix bugs reported on [issues](https://github.com/alibaba/nacos/issues), and send us a pull request.
* Review the existing [pull request](https://github.com/alibaba/nacos/pulls).
* Improve the [website](https://github.com/nacos-group/nacos-group.github.io), typically we need
  * blog post
  * translation on documentation
  * use cases around the integration of Nacos in enterprise systems.

## Other Related Project Repositories

* [nacos-spring-project](https://github.com/nacos-group/nacos-spring-project) provides the integration functionality for Spring.
* [nacos-group](https://github.com/nacos-group) is the repository that hosts the eco tools for Nacos, such as SDK, synchronization tool, etc.
* [spring-cloud-alibaba](https://github.com/spring-cloud-incubator/spring-cloud-alibaba) provides the one-stop solution for application development over Alibaba middleware which includes Nacos.

## Contact

* [Gitter](https://gitter.im/alibaba/nacos): Nacos's IM tool for community messaging, collaboration and discovery.
* [Twitter](https://twitter.com/nacos2): Follow along for latest nacos news on Twitter.
* [Weibo](https://weibo.com/u/6574374908): Follow along for latest nacos news on Weibo (Twitter of China version).
* [Nacos Segmentfault](https://segmentfault.com/t/nacos): Get latest notice and prompt help from Segmentfault.
* Email Group:
     * users-nacos@googlegroups.com: Nacos usage general discussion.
     * dev-nacos@googlegroups.com: Nacos developer discussion (APIs, feature design, etc).
     * commits-nacos@googlegroups.com: Commits notice, very high frequency.
* Join us from DingDing(Group 1: 21708933(full), Group 2: 30438813(full), Group 3: 31222241(full), Group 4: 12810027056). 

### DingDing Group QR Code

![](https://cdn.nlark.com/yuque/0/2025/png/1577777/1750054497446-f834cba6-fa83-4421-b202-a0dc1d5cc28b.png)

### DingDing MCP Group QR Code

![](https://cdn.nlark.com/yuque/0/2025/png/1577777/1750054500395-e271cbe4-2dd8-4723-8cd0-bd8a731b812a.png)

### WeChat Group QR Code

![](https://cdn.nlark.com/yuque/0/2025/png/1577777/1750054421702-a7d1421a-ab8e-42da-bc59-01b5d287b290.png)

## Enterprise Service
If you need Nacos enterprise service support, or purchase cloud product services, you can join the discussion by scanning the following DingTalk group. It can also be directly activated and used through the microservice engine (MSE) provided by Alibaba Cloud.
https://cn.aliyun.com/product/aliware/mse?spm=nacos-website.topbar.0.0.0

<img src="https://img.alicdn.com/imgextra/i3/O1CN01RTfN7q1KUzX4TcH08_!!6000000001168-2-tps-864-814.png" width="500">


## Download

- [Nacos Official Website](https://nacos.io/download/nacos-server)
- [GitHub Release](https://github.com/alibaba/nacos/releases)
  
## Who is using

These are only part of the companies using Nacos, for reference only. If you are using Nacos, please [add your company here](https://github.com/alibaba/nacos/issues/273) to tell us your scenario to make Nacos better.

<table>
  <tr>
    <td><img src="https://data.alibabagroup.com/ecms-files/886024452/296d05a1-c52a-4f5e-abf2-0d49d4c0d6b3.png"  alt="Alibaba Group" width="180" height="120"></td>
    <td><img src="https://a.msstatic.com/huya/main/img/logo.png"  alt="虎牙直播" width="180" height="120"></td>
    <td><img src="https://v.icbc.com.cn/userfiles/Resources/ICBC/shouye/images/2017/logo.png"  alt="ICBC" width="180" height="120"></td>
    <td><img src="https://pic2.iqiyipic.com/lequ/20220422/e7fe69c75e2541f2a931c9e538e2ab9d.jpg"  alt="爱奇艺" width="180" height="120"></td>
  </tr>
  <tr>
    <td><img src="https://img.alicdn.com/tfs/TB1pwi9EwHqK1RjSZJnXXbNLpXa-479-59.png"  alt="平安科技" width="180" height="120"></td>
    <td><img src="https://img.alicdn.com/tfs/TB1MZWSEzDpK1RjSZFrXXa78VXa-269-69.png"  alt="华夏信财" width="180" height="120"></td>
    <td><img src="https://www.urwork.cn/public/images/ui/logo.png"  alt="优客工场" width="180" height="120"></td>
    <td><img src="https://img.alicdn.com/tfs/TB1ebu.EAvoK1RjSZFwXXciCFXa-224-80.png"  alt="贝壳找房" width="180" height="120"></td>
  </tr>
  <tr>
    <td><img src="https://img.alicdn.com/tfs/TB1lxu7EBLoK1RjSZFuXXXn0XXa-409-74.png"  alt="瑞安农村商业银行" width="180" height="120"></td>
    <td><img src="https://img.alicdn.com/tfs/TB1L16eEzTpK1RjSZKPXXa3UpXa-302-50.png"  alt="司法大数据" width="180" height="120"></td>
    <td><img src="https://www.souyidai.com/www-style/images/logo.gif"  alt="搜易贷" width="180" height="120"></td>
    <td><img src="https://img.alicdn.com/tfs/TB1OigyDyLaK1RjSZFxXXamPFXa-168-70.png"  alt="平行云" width="180" height="120"></td>
  </tr>
  <tr>
    <td><img src="https://img.alicdn.com/tfs/TB1gJ4vIhTpK1RjSZR0XXbEwXXa-462-60.jpg"  alt="甘肃紫光" width="180" height="120"></td>
    <td><img src="http://www.seaskylight.com/cn/uploadfiles/image/logo.png"  alt="海云天" width="180" height="120"></td>
    <td><img src="https://img.alicdn.com/tfs/TB1DZWSEzDpK1RjSZFrXXa78VXa-240-62.png"  alt="Acmedcare+" width="180" height="120"></td>
    <td><img src="https://14605854.s21i.faiusr.com/4/ABUIABAEGAAg4OvkzwUo8b-qlwUwxQ449gM!300x300.png"  alt="北京天合互联信息有限公司" width="180" height="120"></td>
  </tr>
  <tr>
    <td><img src="http://www.mwclg.com/static-resource/front/images/home/img_logo_nav.png"  alt="上海密尔克卫化工" width="180" height="120"></td>
    <td><img src="https://www.synwe.com/logo-full.png"  alt="大连新唯" width="180" height="120"></td>
    <td><img src="https://user-images.githubusercontent.com/10215557/51593180-7563af00-1f2c-11e9-95b1-ec2c645d6a0b.png"  alt="立思辰" width="180" height="120"></td>
    <td><img src="https://img.alicdn.com/tfs/TB1zWW2EpYqK1RjSZLeXXbXppXa-262-81.png"  alt="东家" width="180" height="120"></td>
  </tr>
  <tr>
    <td><img src="http://www.sh-guiyao.com/images/logo.jpg"  alt="上海克垚" width="180" height="120"></td>
    <td><img src="http://www.lckjep.com:80//theme/img/logoTop.png"  alt="联采科技" width="180" height="120"></td>
    <td><img src="https://img.alicdn.com/tfs/TB1G216EsbpK1RjSZFyXXX_qFXa-325-53.jpg"  alt="南京28研究所" width="180" height="120"></td>
    <td><img src="https://p1.ifengimg.com/auto/image/2017/0922/auto_logo.png"  alt="凤凰网-汽车" width="180" height="120"></td>
  </tr>
  <tr>
    <td><img src="http://www.sinochemitech.com/zhxx/lib/images/-logo.png"  alt="中化信息" width="180" height="120"></td>
    <td><img src="https://img.alicdn.com/tfs/TB1DXerNgDqK1RjSZSyXXaxEVXa-333-103.png"  alt="一点车" width="180" height="120"></td>
    <td><img src="https://img.alicdn.com/tfs/TB1VfOANgHqK1RjSZFPXXcwapXa-313-40.png"  alt="明传无线" width="180" height="120"></td>
    <td><img src="https://img.alicdn.com/tfs/TB1lvCyNhTpK1RjSZFMXXbG_VXa-130-60.png"  alt="妙优车" width="180" height="120"></td>
  </tr>
  <tr>
    <td><img src="https://img.alicdn.com/tfs/TB1kY9qNgTqK1RjSZPhXXXfOFXa-120-50.png"  alt="蜂巢" width="180" height="120"></td>
    <td><img src="https://img.alicdn.com/tfs/TB1G.GBNbrpK1RjSZTEXXcWAVXa-234-65.png"  alt="华存数据" width="180" height="120"></td>
    <td><img src="https://img.alicdn.com/tfs/TB1qsurNgDqK1RjSZSyXXaxEVXa-300-90.png"  alt="数云" width="180" height="120"></td>
    <td><img src="https://img.alicdn.com/tfs/TB13aywNhTpK1RjSZR0XXbEwXXa-98-38.png"  alt="广通软件" width="180" height="120"></td>
  </tr>
  <tr>
    <td><img src="https://img.alicdn.com/tfs/TB1xqmBNjTpK1RjSZKPXXa3UpXa-162-70.png"  alt="菜菜" width="180" height="120"></td>
    <td><img src="https://img.alicdn.com/tfs/TB18DmINcfpK1RjSZFOXXa6nFXa-200-200.png"  alt="科蓝公司" width="180" height="120"></td>
    <td><img src="https://img.alicdn.com/tfs/TB15uqANXzqK1RjSZFoXXbfcXXa-188-86.png"  alt="浩鲸" width="180" height="120"></td>
    <td><img src="https://img.alicdn.com/tfs/TB1mvmyNkvoK1RjSZPfXXXPKFXa-238-46.png"  alt="未名天日语" width="180" height="120"></td>
  </tr>
  <tr>
    <td><img src="https://img.alicdn.com/tfs/TB1PSWsNmrqK1RjSZK9XXXyypXa-195-130.jpg"  alt="金联创" width="180" height="120"></td>
    <td><img src="https://img.alicdn.com/tfs/TB1k1qzNbvpK1RjSZFqXXcXUVXa-160-69.png"  alt="同窗链" width="180" height="120"></td>
    <td><img src="https://img.alicdn.com/tfs/TB1HdyvNmzqK1RjSZFLXXcn2XXa-143-143.jpg"  alt="顺能" width="180" height="120"></td>
    <td><img src="https://img.alicdn.com/tfs/TB1UdaGNgHqK1RjSZJnXXbNLpXa-277-62.png"  alt="百世快递" width="180" height="120"></td>
  </tr>
  <tr>
    <td><img src="https://img.alicdn.com/tfs/TB17OqENbrpK1RjSZTEXXcWAVXa-240-113.jpg"  alt="汽车之家" width="180" height="120"></td>
    <td><img src="https://img.alicdn.com/tfs/TB1q71ANkvoK1RjSZPfXXXPKFXa-257-104.png"  alt="鲸打卡" width="180" height="120"></td>
    <td><img src="https://img.alicdn.com/tfs/TB1UzuyNhTpK1RjSZR0XXbEwXXa-201-86.jpg"  alt="时代光华" width="180" height="120"></td>
    <td><img src="https://img.alicdn.com/tfs/TB19RCANgHqK1RjSZFPXXcwapXa-180-180.jpg"  alt="康美" width="180" height="120"></td>
  </tr>
  <tr>
    <td><img src="https://img.alicdn.com/tfs/TB1iCGyNb2pK1RjSZFsXXaNlXXa-143-143.jpg"  alt="环球易购" width="180" height="120"></td>
    <td><img src="https://avatars0.githubusercontent.com/u/16344119?s=200&v=4"  alt="Nepxion" width="180" height="120"></td>
    <td><img src="https://img.alicdn.com/tfs/TB1aUe5EpzqK1RjSZSgXXcpAVXa-248-124.png"  alt="chigua" width="180" height="120"></td>
    <td><img src="https://img.alicdn.com/tfs/TB1H9O5EAvoK1RjSZFNXXcxMVXa-221-221.jpg"  alt="宅无限" width="180" height="120"></td>
  </tr>
  <tr>
    <td><img src="https://img.alicdn.com/tfs/TB1rNq4EwHqK1RjSZFgXXa7JXXa-200-200.jpg"  alt="天阙" width="180" height="120"></td>
    <td><img src="https://img.alicdn.com/tfs/TB1CRAxDxYaK1RjSZFnXXa80pXa-190-190.jpg"  alt="联合永道" width="180" height="120"></td>
    <td><img src="https://img.alicdn.com/tfs/TB1.q14ErrpK1RjSZTEXXcWAVXa-219-219.jpg"  alt="明源云" width="180" height="120"></td>
    <td><img src="https://www.daocloud.io/static/Logo-Light.png"  alt="DaoCloud" width="180" height="120"></td>
  </tr>
  <tr>
    <td><img src="https://www.meicai.cn/img/logo.9210b6eb.jpg"  alt="美菜" width="180" height="120"></td>
    <td><img src="https://img5.tianyancha.com/logo/lll/3aad34039972b57e70874df8c919ae8b.png@!f_200x200"  alt="松格科技" width="180" height="120"></td>
    <td><img src="https://www.jsic-tech.com/Public/uploads/20191206/5de9b9baac696.jpg"  alt="集萃智能" width="180" height="120"></td>
    <td><img src="https://www.wuuxiang.com/theme/images/common/logo1.png"  alt="吾享" width="180" height="120"></td>
  </tr>
  <tr>
    <td><img src="http://www.tpson.cn/static/upload/image/20230111/1673427385140440.png"  alt="拓深科技" width="180" height="120"></td>
    <td><img src="https://www.sunline.cn/u_file/fileUpload/2021-06/25/2021062586431.png"  alt="长亮科技" width="180" height="120"></td>
    <td><img src="http://pmt2f499f.pic44.websiteonline.cn/upload/wv0c.png"  alt="深圳易停车库" width="180" height="120"></td>
    <td><img src="http://www.dragonwake.cn/static/css/default/img/logo.png"  alt="武汉日创科技" width="180" height="120"></td>
  </tr>
  <tr>
    <td><img src="https://i4im-web.oss-cn-shanghai.aliyuncs.com/images/logo.png"  alt="易管智能" width="180" height="120"></td>
    <td><img src="https://www.yunzhangfang.com/assets/img/logo.4096cf52.png"  alt="云帐房" width="180" height="120"></td>
    <td><img src="https://www.sinocare.com/sannuo/templates/web/img/bocweb-logo.svg"  alt="三诺生物" width="180" height="120"></td>
    <td></td>
  </tr>
  <tr>
    <td>郑州山水</td>
    <td>知氏教育</td>
    <td></td>
    <td></td>
  </tr>
</table>


================================================
FILE: REPORTING-BUGS.md
================================================
# How to report bugs

If any part of the Nacos project has bugs or documentation mistakes, please let us know by [opening an issue][Nacos-issue]. We treat bugs and mistakes very seriously and believe no issue is too small, anyone is implement. Before creating a bug report, please check that an issue reporting the same problem does not already exist.

To make the bug report accurate and easy to understand, please try to create bug reports that are:

- Specific. Include as many details as possible: which version, what environment, what configuration, etc. If the bug is related to running the Nacos server, please attach the Nacos log (the starting log with Nacos configuration is especially important).

- Reproducible. Include the steps to reproduce the problem. We understand some issues might be hard to reproduce, please includes the steps that might lead to the problem. If possible, please attach the affected Nacos data dir and stack strace to the bug report.

- Unique. Do not duplicate the existing bug report.


It may be worthwhile to read [Elika Etemad’s article on filing good bug reports][filing-good-bugs] before creating a bug report.

We might ask for further information to locate a bug. A duplicated bug report will be closed.

[etcd-issue]: https://github.com/etcd-io/etcd/issues/new
[filing-good-bugs]: http://fantasai.inkedblade.net/style/talks/filing-good-bugs/


# 如何提交错误报告

如果Nacos项目的任何部分存在问题或文档问题,请通过[opening an issue][Nacos-issue]告诉我们。我们非常认真地对待错误和缺陷,在产品面前没有不重要的问题。不过在创建错误报告之前,请检查是否存在报告相同问题的issues。

为了使错误报告准确且易于理解,请尝试创建以下错误报告:

- 具体到细节。包括尽可能多的细节:哪个版本,什么环境,什么配置等。如果错误与运行Nacos服务器有关,请附加Nacos日志(具有Nacos配置的起始日志尤为重要)。

- 可复现。包括重现问题的步骤。我们理解某些问题可能难以重现,请包括可能导致问题的步骤。如果可能,请将受影响的Nacos数据目录和堆栈strace附加到错误报告中。

- 不重复。不要复制现有的错误报告。

在创建错误报告之前,最好阅读下[Elika Etemad关于提交好错误报告的文章] [归档好错误],相信 会给你启发。

我们可能会要求您提供更多信息以查找错误。将关闭重复的错误报告。

[etcd-issue]:https://github.com/etcd-io/etcd/issues/new
[filing-good-bugs]:http://fantasai.inkedblade.net/style/talks/filing-good-bugs/


================================================
FILE: address/pom.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!--
  ~ Copyright 1999-2018 Alibaba Group Holding Ltd.
  ~
  ~ Licensed under the Apache License, Version 2.0 (the "License");
  ~ you may not use this file except in compliance with the License.
  ~ You may obtain a copy of the License at
  ~
  ~      http://www.apache.org/licenses/LICENSE-2.0
  ~
  ~ Unless required by applicable law or agreed to in writing, software
  ~ distributed under the License is distributed on an "AS IS" BASIS,
  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  ~ See the License for the specific language governing permissions and
  ~ limitations under the License.
  -->
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>nacos-all</artifactId>
        <groupId>com.alibaba.nacos</groupId>
        <version>${revision}</version>
    </parent>
    
    <modelVersion>4.0.0</modelVersion>
    <artifactId>nacos-address</artifactId>
    <packaging>jar</packaging>
    
    <name>nacos-address ${project.version}</name>
    <url>https://nacos.io</url>
    
    <dependencies>
        <dependency>
            <groupId>${project.groupId}</groupId>
            <artifactId>nacos-naming</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>${project.groupId}</groupId>
                    <artifactId>nacos-cmdb</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
    
    <build>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
            </resource>
        </resources>
    </build>
    
    <reporting>
        <plugins>
            <plugin>
                <groupId>com.github.spotbugs</groupId>
                <artifactId>spotbugs-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </reporting>
    
    <profiles>
        <profile>
            <id>release-address</id>
            <build>
                <finalName>nacos-address</finalName>
                <plugins>
                    <plugin>
                        <artifactId>maven-jar-plugin</artifactId>
                        <configuration>
                            <archive>
                                <manifest>
                                    <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
                                    <addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
                                </manifest>
                            </archive>
                        </configuration>
                    </plugin>
                    <plugin>
                        <groupId>org.springframework.boot</groupId>
                        <artifactId>spring-boot-maven-plugin</artifactId>
                        <configuration>
                            <mainClass>com.alibaba.nacos.address.AddressServer</mainClass>
                        </configuration>
                        <executions>
                            <execution>
                                <goals>
                                    <goal>repackage</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>
    </profiles>
</project>


================================================
FILE: address/src/main/java/com/alibaba/nacos/address/AddressServer.java
================================================
/*
 * Copyright 1999-2018 Alibaba Group Holding Ltd.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.alibaba.nacos.address;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

/**
 * support address server.
 *
 * @author nacos
 * @since 1.1.0
 */
@SpringBootApplication(scanBasePackages = "com.alibaba.nacos")
public class AddressServer {
    
    public static void main(String[] args) {
        
        SpringApplication.run(AddressServer.class, args);
    }
}


================================================
FILE: address/src/main/java/com/alibaba/nacos/address/component/AddressServerGeneratorManager.java
================================================
/*
 * Copyright 1999-2018 Alibaba Group Holding Ltd.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.alibaba.nacos.address.component;

import com.alibaba.nacos.address.constant.AddressServerConstants;
import com.alibaba.nacos.api.common.Constants;
import com.alibaba.nacos.api.naming.pojo.Instance;
import com.alibaba.nacos.common.utils.InternetAddressUtil;
import com.alibaba.nacos.common.utils.StringUtils;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
 * will generator some result by the input parameter.
 *
 * @author pbting
 * @date 2019-07-01 8:53 PM
 * @since 1.1.0
 */
@Component
public class AddressServerGeneratorManager {
    
    /**
     * Generate product name.
     *
     * @param name name
     * @return product
     */
    public String generateProductName(String name) {
        
        if (StringUtils.isBlank(name) || AddressServerConstants.DEFAULT_PRODUCT.equals(name)) {
            
            return AddressServerConstants.ALIWARE_NACOS_DEFAULT_PRODUCT_NAME;
        }
        
        return String.format(AddressServerConstants.ALIWARE_NACOS_PRODUCT_DOM_TEMPLATE, name);
    }
    
    /**
     * Note: if the parameter inputted is empty then will return the empty list.
     *
     * @param serviceName service name
     * @param clusterName cluster name
     * @param ipArray array of ips
     * @return instance list
     */
    public List<Instance> generateInstancesByIps(String serviceName, String rawProductName, String clusterName,
            String[] ipArray) {
        if (StringUtils.isEmpty(serviceName) || StringUtils.isEmpty(clusterName) || ipArray == null
                || ipArray.length == 0) {
            return Collections.emptyList();
        }
        
        List<Instance> instanceList = new ArrayList<>(ipArray.length);
        for (String ip : ipArray) {
            String[] ipAndPort = generateIpAndPort(ip);
            Instance instance = new Instance();
            instance.setIp(ipAndPort[0]);
            instance.setPort(Integer.parseInt(ipAndPort[1]));
            instance.setClusterName(clusterName);
            instance.setServiceName(serviceName);
            instance.setEphemeral(false);
            instance.getMetadata().put("app", rawProductName);
            instance.getMetadata().put("tenant", Constants.DEFAULT_NAMESPACE_ID);
            instanceList.add(instance);
        }
        
        return instanceList;
    }
    
    private String[] generateIpAndPort(String ip) {
        String[] result = InternetAddressUtil.splitIpPortStr(ip);
        if (result.length != InternetAddressUtil.SPLIT_IP_PORT_RESULT_LENGTH) {
            return new String[] {result[0], String.valueOf(AddressServerConstants.DEFAULT_SERVER_PORT)};
        }
        return result;
    }
    
    /**
     * Generate response ips.
     *
     * @param instanceList an instance set will generate string response to client.
     * @return the result of response to client
     */
    public String generateResponseIps(List<com.alibaba.nacos.api.naming.pojo.Instance> instanceList) {
        
        StringBuilder ips = new StringBuilder();
        instanceList.forEach(instance -> {
            ips.append(instance.getIp()).append(':').append(instance.getPort());
            ips.append('\n');
        });
        
        return ips.toString();
    }
    
    /**
     * Generate nacos service name.
     *
     * @param rawServiceName the raw service name will not contain the {@link Constants#DEFAULT_GROUP}.
     * @return the nacos service name
     */
    public String generateNacosServiceName(String rawServiceName) {
        
        if (rawServiceName.contains(Constants.DEFAULT_GROUP)) {
            return rawServiceName;
        }
        
        return Constants.DEFAULT_GROUP + AddressServerConstants.GROUP_SERVICE_NAME_SEP + rawServiceName;
    }
}


================================================
FILE: address/src/main/java/com/alibaba/nacos/address/component/AddressServerManager.java
================================================
/*
 * Copyright 1999-2018 Alibaba Group Holding Ltd.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.alibaba.nacos.address.component;

import com.alibaba.nacos.address.constant.AddressServerConstants;
import com.alibaba.nacos.naming.misc.UtilsAndCommons;
import com.alibaba.nacos.common.utils.StringUtils;
import org.springframework.stereotype.Component;

/**
 * This class holds the IP list of the CAI's address service.
 *
 * @author deshao
 * @date 2016/4/28 20:58
 * @since 1.1.0
 */
@Component
public class AddressServerManager {
    
    public String getRawProductName(String name) {
        
        if (StringUtils.isBlank(name)) {
            
            return AddressServerConstants.DEFAULT_PRODUCT;
        }
        
        return name;
    }
    
    /**
     * If the name is empty then return the default {@link UtilsAndCommons#DEFAULT_CLUSTER_NAME}, or return the source
     * name by input.
     *
     * @param name name
     * @return default cluster name
     */
    public String getDefaultClusterNameIfEmpty(String name) {
        
        if (StringUtils.isEmpty(name)) {
            return AddressServerConstants.DEFAULT_GET_CLUSTER;
        }
        
        return name;
    }
    
    public String getRawClusterName(String name) {
        
        return getDefaultClusterNameIfEmpty(name);
    }
    
    /**
     * Split ips.
     *
     * @param ips multi ip will separator by the ','
     * @return array of ip
     */
    public String[] splitIps(String ips) {
        
        if (StringUtils.isBlank(ips)) {
            
            return new String[0];
        }
        
        return ips.split(AddressServerConstants.MULTI_IPS_SEPARATOR);
    }
}


================================================
FILE: address/src/main/java/com/alibaba/nacos/address/config/AddressServerSecurityConfiguration.java
================================================
/*
 * Copyright 1999-2022 Alibaba Group Holding Ltd.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.alibaba.nacos.address.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.annotation.Order;
import org.springframework.security.config.Customizer;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configurers.AbstractHttpConfigurer;
import org.springframework.security.web.SecurityFilterChain;

/**
 * nacos web security configuration.
 *
 * @author onewe
 */
@Configuration
public class AddressServerSecurityConfiguration {
    
    @Bean
    @Order(99)
    public SecurityFilterChain addressServerSecurityFilterChain(HttpSecurity http) throws Exception {
        http.authorizeHttpRequests(
                requestMatcherRegistry -> requestMatcherRegistry
                        .requestMatchers("/nacos/v1/as/**").authenticated())
                .csrf(AbstractHttpConfigurer::disable)
                .httpBasic(Customizer.withDefaults());
        return http.build();
    }
}


================================================
FILE: address/src/main/java/com/alibaba/nacos/address/constant/AddressServerConstants.java
================================================
/*
 * Copyright 1999-2018 Alibaba Group Holding Ltd.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.alibaba.nacos.address.constant;

import com.alibaba.nacos.naming.misc.UtilsAndCommons;

/**
 * Uniform constant parameter naming for address servers and default values ​​for related parameters.
 *
 * @author pbting
 * @date 2019-06-17 7:23 PM
 * @since 1.1.0
 */
public interface AddressServerConstants {
    
    
    /**
     * the default server port when create the Instance object.
     */
    int DEFAULT_SERVER_PORT = 8848;
    
    /**
     * when post ips is not given the product,then use the default.
     */
    String DEFAULT_PRODUCT = "nacos";
    
    /**
     * the separator for service name between raw service name and group.
     */
    String GROUP_SERVICE_NAME_SEP = "@@";
    
    /**
     * when post ips is not given the cluster,then use the default.
     */
    String DEFAULT_GET_CLUSTER = "serverlist";
    
    /**
     * post multi ip will use the "," to separator.
     */
    String MULTI_IPS_SEPARATOR = ",";
    
    /**
     * the default product name when deploy nacos with naming and config.
     */
    String ALIWARE_NACOS_DEFAULT_PRODUCT_NAME = "nacos.as.default";
    
    /**
     * when the config and naming will separate deploy,then must specify product name by the client.
     */
    String ALIWARE_NACOS_PRODUCT_DOM_TEMPLATE = "nacos.as.%s";
    
    /**
     * the url for address server prefix.
     */
    String ADDRESS_SERVER_REQUEST_URL =
            UtilsAndCommons.NACOS_SERVER_CONTEXT + UtilsAndCommons.NACOS_SERVER_VERSION + "/as";
    
}


================================================
FILE: address/src/main/java/com/alibaba/nacos/address/controller/AddressServerClusterController.java
================================================
/*
 * Copyright 1999-2018 Alibaba Group Holding Ltd.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.alibaba.nacos.address.controller;

import com.alibaba.nacos.address.component.AddressServerGeneratorManager;
import com.alibaba.nacos.address.component.AddressServerManager;
import com.alibaba.nacos.address.constant.AddressServerConstants;
import com.alibaba.nacos.address.misc.Loggers;
import com.alibaba.nacos.api.common.Constants;
import com.alibaba.nacos.api.exception.NacosException;
import com.alibaba.nacos.api.naming.pojo.Instance;
import com.alibaba.nacos.api.naming.pojo.healthcheck.AbstractHealthChecker;
import com.alibaba.nacos.api.naming.utils.NamingUtils;
import com.alibaba.nacos.common.utils.InternetAddressUtil;
import com.alibaba.nacos.common.utils.StringUtils;
import com.alibaba.nacos.naming.core.ClusterOperator;
import com.alibaba.nacos.naming.core.InstanceOperator;
import com.alibaba.nacos.naming.core.v2.ServiceManager;
import com.alibaba.nacos.naming.core.v2.metadata.ClusterMetadata;
import com.alibaba.nacos.naming.core.v2.metadata.NamingMetadataManager;
import com.alibaba.nacos.naming.core.v2.metadata.ServiceMetadata;
import com.alibaba.nacos.naming.core.v2.pojo.Service;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;
import java.util.Optional;

/**
 * Address server cluster controller.
 *
 * @author pbting
 * @since 1.1.0
 */
@RestController
@RequestMapping({AddressServerConstants.ADDRESS_SERVER_REQUEST_URL + "/nodes"})
public class AddressServerClusterController {
    
    private final InstanceOperator instanceOperator;
    
    private final NamingMetadataManager metadataManager;
    
    private final ClusterOperator clusterOperator;
    
    private final AddressServerManager addressServerManager;
    
    private final AddressServerGeneratorManager addressServerGeneratorManager;
    
    public AddressServerClusterController(InstanceOperator instanceOperator, NamingMetadataManager metadataManager,
            ClusterOperator clusterOperator, AddressServerManager addressServerManager,
            AddressServerGeneratorManager addressServerGeneratorManager) {
        this.instanceOperator = instanceOperator;
        this.metadataManager = metadataManager;
        this.clusterOperator = clusterOperator;
        this.addressServerManager = addressServerManager;
        this.addressServerGeneratorManager = addressServerGeneratorManager;
    }
    
    
    /**
     * Create new cluster.
     *
     * @param product Ip list of products to be associated
     * @param cluster Ip list of product cluster to be associated
     * @param ips     will post ip list.
     * @return result of create new cluster
     */
    @RequestMapping(value = "", method = RequestMethod.POST)
    public ResponseEntity<String> postCluster(@RequestParam(required = false) String product,
            @RequestParam(required = false) String cluster, @RequestParam(name = "ips") String ips) {
        
        //1. prepare the storage name for product and cluster
        String productName = addressServerGeneratorManager.generateProductName(product);
        String clusterName = addressServerManager.getDefaultClusterNameIfEmpty(cluster);
        
        //2. prepare the response name for product and cluster to client
        String rawProductName = addressServerManager.getRawProductName(product);
        String rawClusterName = addressServerManager.getRawClusterName(cluster);
        Loggers.ADDRESS_LOGGER.info("put cluster node,the cluster name is " + cluster + "; the product name=" + product
                + "; the ip list=" + ips);
        ResponseEntity<String> responseEntity;
        try {
            String serviceName = addressServerGeneratorManager.generateNacosServiceName(productName);
            
            Result result = registerCluster(serviceName, rawProductName, clusterName, ips);
            if (InternetAddressUtil.checkOk(result.getCheckResult())) {
                responseEntity = ResponseEntity
                        .ok("product=" + rawProductName + ",cluster=" + rawClusterName + "; put success with size="
                                + result.getSize());
            } else {
                responseEntity = ResponseEntity.status(HttpStatus.BAD_REQUEST).body(result.getCheckResult());
            }
        } catch (Exception e) {
            responseEntity = ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(e.getMessage());
        }
        
        return responseEntity;
    }
    
    private Result registerCluster(String serviceName, String productName, String clusterName, String ips)
            throws NacosException {
        String serviceWithoutGroup = NamingUtils.getServiceName(serviceName);
        String groupName = NamingUtils.getGroupName(serviceName);
        Service service = Service.newService(Constants.DEFAULT_NAMESPACE_ID, groupName, serviceWithoutGroup, false);
        service = ServiceManager.getInstance().getSingleton(service);
        if (service.isEphemeral()) {
            return new Result(
                    String.format("Service %s is ephemeral service, can't use as address server", serviceName), 0);
        }
        ServiceMetadata serviceMetadata = metadataManager.getServiceMetadata(service).orElse(new ServiceMetadata());
        if (!serviceMetadata.getClusters().containsKey(clusterName)) {
            ClusterMetadata metadata = new ClusterMetadata();
            metadata.setHealthyCheckType(AbstractHealthChecker.None.TYPE);
            metadata.setHealthChecker(new AbstractHealthChecker.None());
            clusterOperator.updateClusterMetadata(Constants.DEFAULT_NAMESPACE_ID, serviceName, clusterName, metadata);
        }
        String[] ipArray = addressServerManager.splitIps(ips);
        String checkResult = InternetAddressUtil.checkIps(ipArray);
        if (InternetAddressUtil.checkOk(checkResult)) {
            List<Instance> instanceList = addressServerGeneratorManager
                    .generateInstancesByIps(serviceName, productName, clusterName, ipArray);
            for (Instance instance : instanceList) {
                instanceOperator.registerInstance(Constants.DEFAULT_NAMESPACE_ID, serviceName, instance);
            }
        }
        return new Result(checkResult, ipArray.length);
    }
    
    /**
     * Delete cluster.
     *
     * @param product Ip list of products to be associated
     * @param cluster Ip list of product cluster to be associated
     * @param ips     will delete ips.
     * @return delete result (the cluster information is return if success, exception information is return if  fail)
     */
    @RequestMapping(value = "", method = RequestMethod.DELETE)
    public ResponseEntity<String> deleteCluster(@RequestParam(required = false) String product,
            @RequestParam(required = false) String cluster, @RequestParam String ips) {
        //1. prepare the storage name for product and cluster
        String productName = addressServerGeneratorManager.generateProductName(product);
        String clusterName = addressServerManager.getDefaultClusterNameIfEmpty(cluster);
        
        //2. prepare the response name for product and cluster to client
        String rawProductName = addressServerManager.getRawProductName(product);
        String rawClusterName = addressServerManager.getRawClusterName(cluster);
        ResponseEntity responseEntity = ResponseEntity.status(HttpStatus.OK)
                .body("product=" + rawProductName + ", cluster=" + rawClusterName + " delete success.");
        try {
            
            String serviceName = addressServerGeneratorManager.generateNacosServiceName(productName);
            String serviceWithoutGroup = NamingUtils.getServiceName(serviceName);
            String groupName = NamingUtils.getGroupName(serviceName);
            Optional<com.alibaba.nacos.naming.core.v2.pojo.Service> service = com.alibaba.nacos.naming.core.v2.ServiceManager
                    .getInstance().getSingletonIfExist(Constants.DEFAULT_NAMESPACE_ID, groupName, serviceWithoutGroup);
            
            if (!service.isPresent()) {
                return ResponseEntity.status(HttpStatus.NOT_FOUND).body("product=" + rawProductName + " not found.");
            }
            if (StringUtils.isBlank(ips)) {
                // delete all ips from the cluster
                return ResponseEntity.status(HttpStatus.BAD_REQUEST).body("ips must not be empty.");
            }
            // delete specified ip list
            String[] ipArray = addressServerManager.splitIps(ips);
            String checkResult = InternetAddressUtil.checkIps(ipArray);
            if (InternetAddressUtil.checkOk(checkResult)) {
                List<Instance> instanceList = addressServerGeneratorManager
                        .generateInstancesByIps(serviceName, rawProductName, clusterName, ipArray);
                for (Instance each : instanceList) {
                    instanceOperator.removeInstance(Constants.DEFAULT_NAMESPACE_ID, serviceName, each);
                }
            } else {
                responseEntity = ResponseEntity.status(HttpStatus.BAD_REQUEST).body(checkResult);
            }
        } catch (Exception e) {
            
            responseEntity = ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(e.getCause());
        }
        
        return responseEntity;
    }
    
    private class Result {
        
        private final String checkResult;
        
        private final int size;
        
        public Result(String checkResult, int size) {
            this.checkResult = checkResult;
            this.size = size;
        }
        
        public String getCheckResult() {
            return checkResult;
        }
        
        public int getSize() {
            return size;
        }
    }
}


================================================
FILE: address/src/main/java/com/alibaba/nacos/address/controller/ServerListController.java
================================================
/*
 * Copyright 1999-2018 Alibaba Group Holding Ltd.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.alibaba.nacos.address.controller;

import com.alibaba.nacos.address.component.AddressServerGeneratorManager;
import com.alibaba.nacos.api.common.Constants;
import com.alibaba.nacos.api.naming.pojo.ServiceInfo;
import com.alibaba.nacos.api.naming.utils.NamingUtils;
import com.alibaba.nacos.naming.core.v2.ServiceManager;
import com.alibaba.nacos.naming.core.v2.index.ServiceStorage;
import com.alibaba.nacos.naming.core.v2.metadata.ClusterMetadata;
import com.alibaba.nacos.naming.core.v2.metadata.NamingMetadataManager;
import com.alibaba.nacos.naming.core.v2.metadata.ServiceMetadata;
import com.alibaba.nacos.naming.core.v2.pojo.Service;
import com.alibaba.nacos.naming.utils.ServiceUtil;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

import java.util.Optional;

/**
 * Server list controller.
 *
 * @author pbting
 * @since 1.1.0
 */
@RestController
public class ServerListController {
    
    private final AddressServerGeneratorManager addressServerBuilderManager;
    
    private final NamingMetadataManager metadataManager;
    
    private final ServiceStorage serviceStorage;
    
    public ServerListController(AddressServerGeneratorManager addressServerBuilderManager,
            NamingMetadataManager metadataManager, ServiceStorage serviceStorage) {
        this.addressServerBuilderManager = addressServerBuilderManager;
        this.metadataManager = metadataManager;
        this.serviceStorage = serviceStorage;
    }
    
    /**
     * Get cluster.
     *
     * @param product will get Ip list of that products to be associated
     * @param cluster will get Ip list of that product cluster to be associated
     * @return result of get
     */
    @RequestMapping(value = "/{product}/{cluster}", method = RequestMethod.GET)
    public ResponseEntity<String> getCluster(@PathVariable String product, @PathVariable String cluster) {
        
        String productName = addressServerBuilderManager.generateProductName(product);
        String serviceName = addressServerBuilderManager.generateNacosServiceName(productName);
        String serviceWithoutGroup = NamingUtils.getServiceName(serviceName);
        String groupName = NamingUtils.getGroupName(serviceName);
        Optional<Service> service = ServiceManager.getInstance()
                .getSingletonIfExist(Constants.DEFAULT_NAMESPACE_ID, groupName, serviceWithoutGroup);
        if (!service.isPresent()) {
            return ResponseEntity.status(HttpStatus.NOT_FOUND).body("product=" + product + " not found.");
        }
        ClusterMetadata metadata = metadataManager.getServiceMetadata(service.get()).orElse(new ServiceMetadata())
                .getClusters().get(cluster);
        if (null == metadata) {
            return ResponseEntity.status(HttpStatus.NOT_FOUND)
                    .body("product=" + product + ",cluster=" + cluster + " not found.");
        }
        ServiceInfo serviceInfo = serviceStorage.getData(service.get());
        serviceInfo = ServiceUtil.selectInstances(serviceInfo, cluster, false);
        return ResponseEntity.status(HttpStatus.OK)
                .body(addressServerBuilderManager.generateResponseIps(serviceInfo.getHosts()));
    }
}


================================================
FILE: address/src/main/java/com/alibaba/nacos/address/misc/Loggers.java
================================================
/*
 * Copyright 1999-2018 Alibaba Group Holding Ltd.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.alibaba.nacos.address.misc;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * Loggers holder.
 *
 * @author pbting
 * @date 2019-07-04 4:34 PM
 */
public class Loggers {
    
    public static final Logger ADDRESS_LOGGER = LoggerFactory.getLogger("com.alibaba.nacos.address.main");
}


================================================
FILE: address/src/main/resources/META-INF/logback/nacos-included.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!--
  ~ Copyright 1999-2018 Alibaba Group Holding Ltd.
  ~
  ~ Licensed under the Apache License, Version 2.0 (the "License");
  ~ you may not use this file except in compliance with the License.
  ~ You may obtain a copy of the License at
  ~
  ~      http://www.apache.org/licenses/LICENSE-2.0
  ~
  ~ Unless required by applicable law or agreed to in writing, software
  ~ distributed under the License is distributed on an "AS IS" BASIS,
  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  ~ See the License for the specific language governing permissions and
  ~ limitations under the License.
  -->

<included>
    
    <springProperty scope="context" name="logPath" source="nacos.logs.path" defaultValue="${user.home}/nacos/logs"/>
    <property name="LOG_HOME" value="${logPath}"/>
    
    <appender name="nacos-address"
        class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_HOME}/nacos-address.log</file>
        <append>true</append>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${LOG_HOME}/nacos-address.log.%d{yyyy-MM-dd}.%i</fileNamePattern>
            <maxFileSize>2GB</maxFileSize>
            <maxHistory>15</maxHistory>
            <totalSizeCap>7GB</totalSizeCap>
            <cleanHistoryOnStart>true</cleanHistoryOnStart>
        </rollingPolicy>
        <encoder>
            <Pattern>%date %level %msg%n%n</Pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>
    
    <logger name="com.alibaba.nacos.address.main" additivity="false" level="INFO">
        <appender-ref ref="nacos-address"/>
    </logger>
</included>



================================================
FILE: address/src/main/resources/META-INF/nacos-default.properties
================================================
#
# Copyright 1999-2018 Alibaba Group Holding Ltd.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#



================================================
FILE: address/src/main/resources/application.properties
================================================
#
# Copyright 1999-2018 Alibaba Group Holding Ltd.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
server.port=8080
server.servlet.context-path=/


================================================
FILE: address/src/test/java/com/alibaba/nacos/address/component/AddressServerGeneratorManagerTest.java
================================================
/*
 * Copyright 1999-2018 Alibaba Group Holding Ltd.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.alibaba.nacos.address.component;

import com.alibaba.nacos.address.constant.AddressServerConstants;
import com.alibaba.nacos.api.naming.pojo.Instance;
import org.junit.jupiter.api.Test;

import java.util.ArrayList;
import java.util.List;

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertTrue;

class AddressServerGeneratorManagerTest {

    @Test
    void testGenerateProductName() {
        AddressServerGeneratorManager manager = new AddressServerGeneratorManager();
        final String blankName = manager.generateProductName("");
        assertEquals(AddressServerConstants.ALIWARE_NACOS_DEFAULT_PRODUCT_NAME, blankName);
    
        final String defaultName = manager.generateProductName(AddressServerConstants.DEFAULT_PRODUCT);
        assertEquals(AddressServerConstants.ALIWARE_NACOS_DEFAULT_PRODUCT_NAME, defaultName);
    
        final String testName = manager.generateProductName("test");
        assertEquals("nacos.as.test", testName);
    
    }

    @Test
    void testGenerateInstancesByIps() {
        AddressServerGeneratorManager manager = new AddressServerGeneratorManager();
        final List<Instance> empty = manager.generateInstancesByIps(null, null, null, null);
        assertNotNull(empty);
        assertTrue(empty.isEmpty());
    
        String[] ipArray = new String[]{"192.168.3.1:8848", "192.168.3.2:8848", "192.168.3.3:8848"};
        final List<Instance> instanceList = manager.generateInstancesByIps("DEFAULT_GROUP@@nacos.as.test", "test", "test",
                ipArray);
        assertNotNull(instanceList);
        assertFalse(instanceList.isEmpty());
        assertEquals(3, instanceList.size());
    
        final Instance instance1 = instanceList.get(0);
        assertEquals("192.168.3.1", instance1.getIp());
    
        final Instance instance2 = instanceList.get(1);
        assertEquals("192.168.3.2", instance2.getIp());
    
        final Instance instance3 = instanceList.get(2);
        assertEquals("192.168.3.3", instance3.getIp());
    
    }

    @Test
    void testGenerateResponseIps() {
        final List<com.alibaba.nacos.api.naming.pojo.Instance> instanceList = new ArrayList<>();
        Instance instance1 = new Instance();
        instance1.setIp("192.168.3.1");
        instance1.setPort(8848);
    
        Instance instance2 = new Instance();
        instance2.setIp("192.168.3.2");
        instance2.setPort(8848);
        
        Instance instance3 = new Instance();
        instance3.setIp("192.168.3.3");
        instance3.setPort(8848);
    
        instanceList.add(instance1);
        instanceList.add(instance2);
        instanceList.add(instance3);
        
        AddressServerGeneratorManager manager = new AddressServerGeneratorManager();
        final String ipListStr = manager.generateResponseIps(instanceList);
        
        StringBuilder expectStr = new StringBuilder();
        final StringBuilder ret = expectStr
                .append("192.168.3.1:8848").append('\n')
                .append("192.168.3.2:8848").append('\n')
                .append("192.168.3.3:8848").append('\n');
        assertEquals(ret.toString(), ipListStr);
    
    }

    @Test
    void testGenerateNacosServiceName() {
        AddressServerGeneratorManager manager = new AddressServerGeneratorManager();
    
        final String containDefault = manager.generateNacosServiceName("DEFAULT_GROUP@@test");
        assertEquals("DEFAULT_GROUP@@test", containDefault);
    
        final String product = manager.generateNacosServiceName("product");
        assertEquals("DEFAULT_GROUP@@product", product);
    }
    
}


================================================
FILE: address/src/test/java/com/alibaba/nacos/address/component/AddressServerManagerTests.java
================================================
/*
 * Copyright 1999-2018 Alibaba Group Holding Ltd.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.alibaba.nacos.address.component;

import com.alibaba.nacos.address.constant.AddressServerConstants;
import org.junit.jupiter.api.Test;

import static org.junit.jupiter.api.Assertions.assertEquals;

class AddressServerManagerTests {
    
    private static final AddressServerManager ADDRESS_SERVER_MANAGER = new AddressServerManager();

    @Test
    void getRawProductName() {
        assertEquals(AddressServerConstants.DEFAULT_PRODUCT, ADDRESS_SERVER_MANAGER.getRawProductName(""));
        assertEquals(AddressServerConstants.DEFAULT_PRODUCT,
                ADDRESS_SERVER_MANAGER.getRawProductName(AddressServerConstants.DEFAULT_PRODUCT));
        assertEquals("otherProduct", ADDRESS_SERVER_MANAGER.getRawProductName("otherProduct"));
    }

    @Test
    void getDefaultClusterNameIfEmpty() {
        assertEquals(AddressServerConstants.DEFAULT_GET_CLUSTER, ADDRESS_SERVER_MANAGER.getDefaultClusterNameIfEmpty(""));
        assertEquals(AddressServerConstants.DEFAULT_GET_CLUSTER,
                ADDRESS_SERVER_MANAGER.getDefaultClusterNameIfEmpty(AddressServerConstants.DEFAULT_GET_CLUSTER));
        assertEquals("otherServerList", ADDRESS_SERVER_MANAGER.getDefaultClusterNameIfEmpty("otherServerList"));
    }

    @Test
    void testGetRawClusterName() {
        assertEquals("serverList", ADDRESS_SERVER_MANAGER.getRawClusterName("serverList"));
        assertEquals(AddressServerConstants.DEFAULT_GET_CLUSTER, ADDRESS_SERVER_MANAGER.getRawClusterName(""));
    }

    @Test
    void testSplitIps() {
        final String[] emptyArr = ADDRESS_SERVER_MANAGER.splitIps("");
        assertEquals(0, emptyArr.length);
        final String[] one = ADDRESS_SERVER_MANAGER.splitIps("192.168.1.12:8848");
        assertEquals(1, one.length);
        assertEquals("192.168.1.12:8848", one[0]);
        final String[] two = ADDRESS_SERVER_MANAGER.splitIps("192.168.1.12:8848,192.268.3.33:8848");
        assertEquals(2, two.length);
        assertEquals("192.168.1.12:8848", two[0]);
        assertEquals("192.268.3.33:8848", two[1]);
    }
    
}


================================================
FILE: address/src/test/java/com/alibaba/nacos/address/controller/AddressServerClusterControllerTest.java
================================================
/*
 * Copyright 1999-2018 Alibaba Group Holding Ltd.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.alibaba.nacos.address.controller;

import com.alibaba.nacos.address.component.AddressServerGeneratorManager;
import com.alibaba.nacos.address.component.AddressServerManager;
import com.alibaba.nacos.address.constant.AddressServerConstants;
import com.alibaba.nacos.api.common.Constants;
import com.alibaba.nacos.api.exception.NacosException;
import com.alibaba.nacos.naming.core.ClusterOperator;
import com.alibaba.nacos.naming.core.InstanceOperator;
import com.alibaba.nacos.naming.core.v2.ServiceManager;
import com.alibaba.nacos.naming.core.v2.metadata.NamingMetadataManager;
import com.alibaba.nacos.naming.core.v2.pojo.Service;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.junit.jupiter.MockitoExtension;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;

import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.delete;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;

@ExtendWith(MockitoExtension.class)
class AddressServerClusterControllerTest {
    
    @Mock
    private InstanceOperator instanceOperator;
    
    @Mock
    private NamingMetadataManager metadataManager;
    
    @Mock
    private ClusterOperator clusterOperator;
    
    private MockMvc mockMvc;

    @BeforeEach
    void before() {
        mockMvc = MockMvcBuilders.standaloneSetup(
                new AddressServerClusterController(instanceOperator, metadataManager, clusterOperator,
                        new AddressServerManager(), new AddressServerGeneratorManager())).build();
        Service service = Service
                .newService(Constants.DEFAULT_NAMESPACE_ID, Constants.DEFAULT_GROUP, "nacos.as.default", false);
        ServiceManager.getInstance().getSingleton(service);
    }

    @AfterEach
    void tearDown() {
        Service service = Service
                .newService(Constants.DEFAULT_NAMESPACE_ID, Constants.DEFAULT_GROUP, "nacos.as.default", false);
        ServiceManager.getInstance().removeSingleton(service);
    }

    @Test
    void testPostCluster() throws Exception {
        
        mockMvc.perform(post("/nacos/v1/as/nodes").param("product", "default").param("cluster", "serverList")
                .param("ips", "192.168.3.1,192.168.3.2")).andExpect(status().isOk());
        
    }

    @Test
    void testPostClusterWithErrorIps() throws Exception {
        mockMvc.perform(post("/nacos/v1/as/nodes").param("product", "default").param("cluster", "serverList")
                .param("ips", "192.168.1")).andExpect(status().isBadRequest());
    }

    @Test
    void testPostClusterThrowException() throws Exception {
        
        Mockito.doThrow(new NacosException(500, "create service error")).when(clusterOperator)
                .updateClusterMetadata(Mockito.eq(Constants.DEFAULT_NAMESPACE_ID), Mockito.eq(
                        Constants.DEFAULT_GROUP + AddressServerConstants.GROUP_SERVICE_NAME_SEP + "nacos.as.default"),
                        Mockito.eq("serverList"), Mockito.any());
        
        mockMvc.perform(post("/nacos/v1/as/nodes").param("product", "default").param("cluster", "serverList")
                .param("ips", "192.168.1")).andExpect(status().isInternalServerError());
        
    }

    @Test
    void testDeleteCluster() throws Exception {
        mockMvc.perform(delete("/nacos/v1/as/nodes").param("product", "default").param("cluster", "serverList")
                .param("ips", "192.168.3.1,192.168.3.2")).andExpect(status().isOk());
    }

    @Test
    void testDeleteClusterCannotFindService() throws Exception {
        tearDown();
        mockMvc.perform(delete("/nacos/v1/as/nodes").param("product", "default").param("cluster", "serverList")
                .param("ips", "192.168.3.1,192.168.3.2")).andExpect(status().isNotFound());
    }

    @Test
    void testDeleteClusterEmptyIps() throws Exception {
        mockMvc.perform(delete("/nacos/v1/as/nodes").param("product", "default").param("cluster", "serverList")
                .param("ips", "")).andExpect(status().isBadRequest());
    }

    @Test
    void testDeleteClusterErrorIps() throws Exception {
        mockMvc.perform(delete("/nacos/v1/as/nodes").param("product", "default").param("cluster", "serverList")
                .param("ips", "192.168.1")).andExpect(status().isBadRequest());
    }

    @Test
    void testDeleteClusterThrowException() throws Exception {
        Mockito.doThrow(new NacosException(500, "remove service error")).when(instanceOperator)
                .removeInstance(Mockito.eq(Constants.DEFAULT_NAMESPACE_ID), Mockito.eq(
                        Constants.DEFAULT_GROUP + AddressServerConstants.GROUP_SERVICE_NAME_SEP + "nacos.as.default"),
                        Mockito.any());
        
        mockMvc.perform(delete("/nacos/v1/as/nodes").param("product", "default").param("cluster", "serverList")
                .param("ips", "192.168.3.1,192.168.3.2")).andExpect(status().isInternalServerError());
    }
    
}


================================================
FILE: address/src/test/java/com/alibaba/nacos/address/controller/ServerListControllerTest.java
================================================
/*
 * Copyright 1999-2018 Alibaba Group Holding Ltd.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.alibaba.nacos.address.controller;

import com.alibaba.nacos.address.component.AddressServerGeneratorManager;
import com.alibaba.nacos.api.common.Constants;
import com.alibaba.nacos.api.naming.pojo.Instance;
import com.alibaba.nacos.api.naming.pojo.ServiceInfo;
import com.alibaba.nacos.naming.core.v2.ServiceManager;
import com.alibaba.nacos.naming.core.v2.index.ServiceStorage;
import com.alibaba.nacos.naming.core.v2.metadata.ClusterMetadata;
import com.alibaba.nacos.naming.core.v2.metadata.NamingMetadataManager;
import com.alibaba.nacos.naming.core.v2.metadata.ServiceMetadata;
import com.alibaba.nacos.naming.core.v2.pojo.Service;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;

import java.util.ArrayList;
import java.util.List;
import java.util.Optional;

import static org.mockito.Mockito.when;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;

@ExtendWith(MockitoExtension.class)
class ServerListControllerTest {
    
    @Mock
    private NamingMetadataManager metadataManager;
    
    @Mock
    private ServiceStorage serviceStorage;
    
    private Service service;
    
    private MockMvc mockMvc;

    @BeforeEach
    void before() {
        this.mockMvc = MockMvcBuilders.standaloneSetup(
                new ServerListController(new AddressServerGeneratorManager(), metadataManager, serviceStorage)).build();
        service = Service
                .newService(Constants.DEFAULT_NAMESPACE_ID, Constants.DEFAULT_GROUP, "nacos.as.default", false);
        ServiceManager.getInstance().getSingleton(service);
    }

    @AfterEach
    void tearDown() {
        ServiceManager.getInstance().removeSingleton(service);
    }

    @Test
    void testGetCluster() throws Exception {
        
        final Service service = Service
                .newService(Constants.DEFAULT_NAMESPACE_ID, Constants.DEFAULT_GROUP, "nacos.as.default", false);
        ServiceMetadata serviceMetadata = new ServiceMetadata();
        serviceMetadata.getClusters().put("serverList", new ClusterMetadata());
        when(metadataManager.getServiceMetadata(service)).thenReturn(Optional.of(serviceMetadata));
        List<Instance> list = new ArrayList<>(2);
        list.add(new Instance());
        list.add(new Instance());
        ServiceInfo serviceInfo = new ServiceInfo();
        serviceInfo.setHosts(list);
        when(serviceStorage.getData(service)).thenReturn(serviceInfo);
        mockMvc.perform(get("/nacos/serverList")).andExpect(status().isOk());
    }

    @Test
    void testGetClusterCannotFindService() throws Exception {
        tearDown();
        mockMvc.perform(get("/default/serverList")).andExpect(status().isNotFound());
        
    }

    @Test
    void testGetClusterCannotFindCluster() throws Exception {
        mockMvc.perform(get("/nacos/serverList")).andExpect(status().isNotFound());
        
    }
}


================================================
FILE: ai/pom.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!--
  ~ Copyright 1999-2025 Alibaba Group Holding Ltd.
  ~
  ~ Licensed under the Apache License, Version 2.0 (the "License");
  ~ you may not use this file except in compliance with the License.
  ~ You may obtain a copy of the License at
  ~
  ~      http://www.apache.org/licenses/LICENSE-2.0
  ~
  ~ Unless required by applicable law or agreed to in writing, software
  ~ distributed under the License is distributed on an "AS IS" BASIS,
  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  ~ See the License for the specific language governing permissions and
  ~ limitations under the License.
  -->

<project xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.alibaba.nacos</groupId>
        <artifactId>nacos-all</artifactId>
        <version>${revision}</version>
    </parent>
    
    <artifactId>nacos-ai</artifactId>
    <name>nacos-ai ${project.version}</name>
    <url>https://nacos.io</url>
    
    <dependencies>
        <dependency>
            <groupId>com.alibaba.nacos</groupId>
            <artifactId>nacos-common</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.nacos</groupId>
            <artifactId>nacos-naming</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.nacos</groupId>
            <artifactId>nacos-config</artifactId>
        </dependency>
        
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-compress</artifactId>
            <version>1.26.0</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-test-autoconfigure</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

</project>

================================================
FILE: ai/src/main/java/com/alibaba/nacos/ai/config/AiEnabledFilter.java
================================================
/*
 * Copyright 1999-2025 Alibaba Group Holding Ltd.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.alibaba.nacos.ai.config;

import com.alibaba.nacos.common.utils.StringUtils;
import com.alibaba.nacos.sys.env.EnvUtil;
import com.alibaba.nacos.sys.filter.NacosPackageExcludeFilter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.Set;

/**
 * Nacos AI Component enabled filter.
 *
 * @author xiweng.yy
 */
public class AiEnabledFilter implements NacosPackageExcludeFilter {
    
    private static final Logger LOGGER = LoggerFactory.getLogger(AiEnabledFilter.class);
    
    public static final String AI_ENABLED_KEY = "nacos.extension.ai.enabled";
    
    @Override
    public String getResponsiblePackagePrefix() {
        return "com.alibaba.nacos.ai";
    }
    
    @Override
    public boolean isExcluded(String className, Set<String> annotationNames) {
        String functionMode = EnvUtil.getFunctionMode();
        // When not specified naming mode or config mode,
        if (StringUtils.isNotEmpty(functionMode)) {
            LOGGER.warn("AI module disabled because function mode is {}, and AI depend naming module and config module both",
                    functionMode);
            return true;
        }
        boolean aiDisabled = !EnvUtil.getProperty(AI_ENABLED_KEY, Boolean.class, true);
        if (aiDisabled) {
            LOGGER.warn("AI module disabled because set {} as false", AI_ENABLED_KEY);
        }
        return aiDisabled;
    }
}


================================================
FILE: ai/src/main/java/com/alibaba/nacos/ai/config/McpCacheIndexProperties.java
================================================
/*
 * Copyright 1999-2025 Alibaba Group Holding Ltd.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.alibaba.nacos.ai.config;

import org.springframework.boot.context.properties.ConfigurationProperties;

/**
 * MCP Cache Index configuration properties. Centralized configuration management for MCP cache index related settings.
 *
 * @author misselvexu
 */
@ConfigurationProperties(prefix = "nacos.mcp.cache")
public class McpCacheIndexProperties {
    
    /**
     * Whether MCP cache is enabled.
     */
    private boolean enabled = true;
    
    /**
     * Maximum size of the cache.
     */
    private int maxSize = 10000;
    
    /**
     * Cache entry expiration time in seconds.
     */
    private long expireTimeSeconds = 3600;
    
    /**
     * Cache cleanup interval in seconds.
     */
    private long cleanupIntervalSeconds = 300;
    
    /**
     * Cache synchronization interval in seconds.
     */
    private long syncIntervalSeconds = 300;
    
    public boolean isEnabled() {
        return enabled;
    }
    
    public void setEnabled(boolean enabled) {
        this.enabled = enabled;
    }
    
    public int getMaxSize() {
        return maxSize;
    }
    
    public void setMaxSize(int maxSize) {
        this.maxSize = maxSize;
    }
    
    public long getExpireTimeSeconds() {
        return expireTimeSeconds;
    }
    
    public void setExpireTimeSeconds(long expireTimeSeconds) {
        this.expireTimeSeconds = expireTimeSeconds;
    }
    
    public long getCleanupIntervalSeconds() {
        return cleanupIntervalSeconds;
    }
    
    public void setCleanupIntervalSeconds(long cleanupIntervalSeconds) {
        this.cleanupIntervalSeconds = cleanupIntervalSeconds;
    }
    
    public long getSyncIntervalSeconds() {
        return syncIntervalSeconds;
    }
    
    public void setSyncIntervalSeconds(long syncIntervalSeconds) {
        this.syncIntervalSeconds = syncIntervalSeconds;
    }
    
    @Override
    public String toString() {
        return "McpCacheIndexProperties{" + "enabled=" + enabled + ", maxSize=" + maxSize + ", expireTimeSeconds="
                + expireTimeSeconds + ", cleanupIntervalSeconds=" + cleanupIntervalSeconds + ", syncIntervalSeconds="
                + syncIntervalSeconds + '}';
    }
} 

================================================
FILE: ai/src/main/java/com/alibaba/nacos/ai/config/McpConfiguration.java
================================================
/*
 * Copyright 1999-2025 Alibaba Group Holding Ltd.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.alibaba.nacos.ai.config;

import com.alibaba.nacos.core.code.ControllerMethodsCache;
import org.springframework.context.annotation.Configuration;

import javax.annotation.PostConstruct;

/**
 * AI MCP spring configuration.
 *
 * @author xiweng.yy
 */
@Configuration
public class McpConfiguration {
    
    private final ControllerMethodsCache methodsCache;
    
    public McpConfiguration(ControllerMethodsCache methodsCache) {
        this.methodsCache = methodsCache;
    }
    
    @PostConstruct
    public void init() {
        methodsCache.initClassMethod("com.alibaba.nacos.ai.controller");
    }
}


================================================
FILE: ai/src/main/java/com/alibaba/nacos/ai/config/McpServerIndexConfiguration.java
================================================
/*
 * Copyright 1999-2025 Alibaba Group Holding Ltd.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.alibaba.nacos.ai.config;

import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.ThreadPoolExecutor;

import com.alibaba.nacos.ai.index.CachedMcpServerIndex;
import com.alibaba.nacos.ai.index.McpCacheIndex;
import com.alibaba.nacos.ai.index.McpServerIndex;
import com.alibaba.nacos.ai.index.MemoryMcpCacheIndex;
import com.alibaba.nacos.ai.index.PlainMcpServerIndex;
import com.alibaba.nacos.config.server.service.ConfigDetailService;
import com.alibaba.nacos.config.server.service.query.ConfigQueryChainService;
import com.alibaba.nacos.core.service.NamespaceOperationService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;

/**
 * MCP server index configuration class.
 *
 * @author misselvexu
 */
@Configuration
@EnableConfigurationProperties(McpCacheIndexProperties.class)
public class McpServerIndexConfiguration {
    
    private static final Logger LOGGER = LoggerFactory.getLogger(McpServerIndexConfiguration.class);
    
    private final McpCacheIndexProperties cacheProperties;
    
    public McpServerIndexConfiguration(McpCacheIndexProperties cacheProperties) {
        this.cacheProperties = cacheProperties;
    }
    
    /**
     * Create memory cache index Bean.
     */
    @Bean
    @ConditionalOnProperty(name = "nacos.mcp.cache.enabled", havingValue = "true", matchIfMissing = true)
    public McpCacheIndex mcpCacheIndex() {
        LOGGER.info("Creating McpCacheIndex bean with maxSize={}, expireTime={}s, cleanupInterval={}s",
                cacheProperties.getMaxSize(), cacheProperties.getExpireTimeSeconds(),
                cacheProperties.getCleanupIntervalSeconds());
        return new MemoryMcpCacheIndex(cacheProperties);
    }
    
    /**
     * Create scheduled task executor Bean.
     */
    @Bean
    @ConditionalOnProperty(name = "nacos.mcp.cache.enabled", havingValue = "true", matchIfMissing = true)
    public ScheduledExecutorService mcpCacheScheduledExecutor() {
        LOGGER.info("Creating ScheduledExecutorService for MCP cache with syncInterval={}s",
                cacheProperties.getSyncIntervalSeconds());
        // Manually create thread pool, following Alibaba coding standards
        return new ScheduledThreadPoolExecutor(1, r -> {
            Thread t = new Thread(r, "mcp-cache-sync");
            t.setDaemon(true);
            return t;
        }, new ThreadPoolExecutor.CallerRunsPolicy());
    }
    
    /**
     * Create the primary MCP server index Bean when cache is enabled.
     */
    @Bean
    @Primary
    @ConditionalOnProperty(name = "nacos.mcp.cache.enabled", havingValue = "true", matchIfMissing = true)
    public McpServerIndex cachedMcpServerIndex(ConfigDetailService configDetailService,
            NamespaceOperationService namespaceOperationService, ConfigQueryChainService configQueryChainService,
            McpCacheIndex mcpCacheIndex, ScheduledExecutorService mcpCacheScheduledExecutor) {
        LOGGER.info("Creating CachedMcpServerIndex bean with cache enabled");
        return new CachedMcpServerIndex(configDetailService, namespaceOperationService, configQueryChainService,
                mcpCacheIndex, mcpCacheScheduledExecutor, cacheProperties.isEnabled(),
                cacheProperties.getSyncIntervalSeconds());
    }
    
    /**
     * Create the primary MCP server index Bean when cache is disabled.
     */
    @Bean
    @Primary
    @ConditionalOnProperty(name = "nacos.mcp.cache.enabled", havingValue = "false")
    public McpServerIndex plainMcpServerIndex(ConfigDetailService configDetailService,
            NamespaceOperationService namespaceOperationService, ConfigQueryChainService configQueryChainService) {
        LOGGER.info("Creating PlainMcpServerIndex bean as cache is disabled");
        return new PlainMcpServerIndex(namespaceOperationService, configDetailService, configQueryChainService);
    }
} 

================================================
FILE: ai/src/main/java/com/alibaba/nacos/ai/constant/Constants.java
================================================
/*
 * Copyright 1999-2025 Alibaba Group Holding Ltd.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.alibaba.nacos.ai.constant;

/**
 * Nacos AI Server Constants.
 *
 * @author xiweng.yy
 */
public class Constants {
    
    public static final String MCP_PATH = "/ai/mcp";
    
    public static final String MCP_ADMIN_PATH = "/v3/admin" + MCP_PATH;
    
    public static final String MCP_CONSOLE_PATH = "/v3/console" + MCP_PATH;
    
    public static final String MCP_LIST_SEARCH_ACCURATE = "accurate";
    
    public static final String MCP_LIST_SEARCH_BLUR = "blur";
    
    public static final String ALL_PATTERN = com.alibaba.nacos.api.common.Constants.ALL_PATTERN;
    
    public static final String MCP_SERVER_VERSIONS_GROUP = "mcp-server-versions";
    
    public static final String MCP_SERVER_GROUP = "mcp-server";
    
    public static final String MCP_SERVER_TOOL_GROUP = "mcp-tools";
    
    public static final String MCP_SERVER_SPEC_DATA_ID_SUFFIX = "-mcp-server.json";
    
    public static final String MCP_SERVER_VERSION_DATA_ID_SUFFIX = "-mcp-versions.json";
    
    public static final String MCP_SERVER_TOOL_DATA_ID_SUFFIX = "-mcp-tools.json";
    
    public static final String MCP_SERVER_ENDPOINT_GROUP = "mcp-endpoints";
    
    public static final String MCP_SERVER_ENDPOINT_CLUSTER = com.alibaba.nacos.api.common.Constants.DEFAULT_CLUSTER_NAME;
    
    public static final String MCP_BACKEND_INSTANCE_PROTOCOL_KEY = "transportProtocol";

    public static final String MCP_SERVER_ENDPOINT_ADDRESS = "address";
    
    public static final String MCP_SERVER_ENDPOINT_PORT = "port";
    
    public static final String MCP_SERVER_ENDPOINT_METADATA_MARK = "__nacos.ai.mcp.service__";
    
    public static final String MCP_SERVER_CONFIG_MARK = "nacos.internal.config=mcp";
    
    public static final String PROTOCOL_TYPE_HTTP = "http";
    
    public static final String PROTOCOL_TYPE_HTTPS = "https";
    
    public static final String SERVER_EXPORT_PATH_KEY = "exportPath";
    
    public static final String MCP_SERVER_NAME_TAG_KEY_PREFIX = "mcpServerName=";
    
    public static final int MAX_LIST_SIZE = 100;
    
    public static final String RELEASE_DATE_FORMAT = "yyyy-MM-dd'T'HH:mm:ss'Z'";
    
    public static final String CONFIG_TAGS_NAME = "config_tags";
    
    public static final String META_PATH = "path";
    
    public static final String SERVER_VERSION_CONFIG_DATA_ID_TEMPLATE = "%s" + MCP_SERVER_VERSION_DATA_ID_SUFFIX;
    
    public static final String SERVER_SPECIFICATION_CONFIG_DATA_ID_TEMPLATE = "%s-%s" + MCP_SERVER_SPEC_DATA_ID_SUFFIX;
    
    public static final String SERVER_TOOLS_SPEC_CONFIG_DATA_ID_TEMPLATE = "%s-%s" + MCP_SERVER_TOOL_DATA_ID_SUFFIX;
    
    public static class A2A {
        
        public static final String CONSOLE_PATH = "/v3/console/ai/a2a";
        
        public static final String ADMIN_PATH = "/v3/admin/ai/a2a";
        
        public static final String AGENT_GROUP = "agent";
        
        public static final String AGENT_VERSION_GROUP = "agent-version";
        
        public static final String SEARCH_BLUR = "blur";
        
        public static final String SEARCH_ACCURATE = "accurate";
        
        public static final String AGENT_ENDPOINT_GROUP = "agent-endpoints";
        
        public static final String AGENT_ENDPOINT_PATH_KEY = "__nacos.agent.endpoint.path__";
        
        public static final String AGENT_ENDPOINT_TRANSPORT_KEY = "__nacos.agent.endpoint.transport__";
        
        public static final String NACOS_AGENT_ENDPOINT_SUPPORT_TLS = "__nacos.agent.endpoint.supportTls__";
        
        public static final String NACOS_AGENT_ENDPOINT_PROTOCOL_KEY = "__nacos.agent.endpoint.protocol__";
        
        public static final String NACOS_AGENT_ENDPOINT_QUERY_KEY = "__nacos.agent.endpoint.query__";
    }
    
    public static class Skills {
        
        public static final String CONSOLE_PATH = "/v3/console/ai/skills";
        
        public static final String ADMIN_PATH = "/v3/admin/ai/skills";
        
        public static final String SKILL_GROUP = "skill";
        
        public static final String SKILL_VERSION_GROUP = "skill-version";
        
        public static final String SEARCH_BLUR = "blur";
        
        public static final String SEARCH_ACCURATE = "accurate";
        
        public static final String SKILL_DEFAULT_NAMESPACE = "public";

        /**
         * Max allowed size for skill zip upload (10MB). Exceeding this will result in a clear error.
         */
        public static final long MAX_UPLOAD_ZIP_BYTES = 10L * 1024 * 1024;
    }
    
    public static class Prompt {
        
        public static final String CONSOLE_PATH = "/v3/console/ai/prompt";
        
        public static final String ADMIN_PATH = "/v3/admin/ai/prompt";
        
        public static final String CLIENT_PATH = "/v3/client/ai/prompt";
        
        /**
         * Fixed group for all prompt configurations.
         */
        public static final String PROMPT_GROUP = "nacos-ai-prompt";
        
        /**
         * DataId suffix for prompt configurations.
         */
        public static final String PROMPT_DATA_ID_SUFFIX = ".json";
        
        /**
         * DataId suffix for descriptor side prompt metadata.
         */
        public static final String DESCRIPTOR_DATA_ID_SUFFIX = ".descriptor" + PROMPT_DATA_ID_SUFFIX;
        
        /**
         * DataId suffix for runtime label/version mapping.
         */
        public static final String LABEL_VERSION_MAPPING_DATA_ID_SUFFIX = ".label-version-mapping" + PROMPT_DATA_ID_SUFFIX;
        
        /**
         * Key for prompt version in extInfo.
         */
        public static final String EXT_PROMPT_VERSION = "prompt_version";
        
        /**
         * Key for prompt commit message in extInfo.
         */
        public static final String EXT_PROMPT_COMMIT_
Download .txt
Showing preview only (375K chars total). Download the full file or copy to clipboard to get everything.
gitextract_u6qmkl26/

├── .gitattributes
├── .github/
│   ├── ISSUE_TEMPLATE/
│   │   ├── bug-report.md
│   │   ├── config.yml
│   │   └── feature_request.md
│   ├── ISSUE_TEMPLATE.md
│   ├── PULL_REQUEST_TEMPLATE.md
│   └── workflows/
│       ├── anti-spam.yml
│       ├── ci.yml
│       ├── it.yml
│       ├── pr-ci.yml
│       ├── pr-comment.yml
│       ├── pr-e2e-test.yml
│       ├── push-ci.yaml
│       └── stale.yml
├── .gitignore
├── .mvn/
│   └── wrapper/
│       └── maven-wrapper.properties
├── .travis.yml
├── BUILDING
├── CHANGELOG.md
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── CONTRIBUTING_zh.md
├── LICENSE
├── NOTICE
├── README.md
├── REPORTING-BUGS.md
├── address/
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── alibaba/
│       │   │           └── nacos/
│       │   │               └── address/
│       │   │                   ├── AddressServer.java
│       │   │                   ├── component/
│       │   │                   │   ├── AddressServerGeneratorManager.java
│       │   │                   │   └── AddressServerManager.java
│       │   │                   ├── config/
│       │   │                   │   └── AddressServerSecurityConfiguration.java
│       │   │                   ├── constant/
│       │   │                   │   └── AddressServerConstants.java
│       │   │                   ├── controller/
│       │   │                   │   ├── AddressServerClusterController.java
│       │   │                   │   └── ServerListController.java
│       │   │                   └── misc/
│       │   │                       └── Loggers.java
│       │   └── resources/
│       │       ├── META-INF/
│       │       │   ├── logback/
│       │       │   │   └── nacos-included.xml
│       │       │   └── nacos-default.properties
│       │       └── application.properties
│       └── test/
│           └── java/
│               └── com/
│                   └── alibaba/
│                       └── nacos/
│                           └── address/
│                               ├── component/
│                               │   ├── AddressServerGeneratorManagerTest.java
│                               │   └── AddressServerManagerTests.java
│                               └── controller/
│                                   ├── AddressServerClusterControllerTest.java
│                                   └── ServerListControllerTest.java
├── ai/
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── alibaba/
│       │   │           └── nacos/
│       │   │               └── ai/
│       │   │                   ├── config/
│       │   │                   │   ├── AiEnabledFilter.java
│       │   │                   │   ├── McpCacheIndexProperties.java
│       │   │                   │   ├── McpConfiguration.java
│       │   │                   │   └── McpServerIndexConfiguration.java
│       │   │                   ├── constant/
│       │   │                   │   ├── Constants.java
│       │   │                   │   └── McpServerValidationConstants.java
│       │   │                   ├── controller/
│       │   │                   │   ├── A2aAdminController.java
│       │   │                   │   ├── McpAdminController.java
│       │   │                   │   ├── PromptAdminController.java
│       │   │                   │   ├── PromptClientController.java
│       │   │                   │   └── SkillAdminController.java
│       │   │                   ├── enums/
│       │   │                   │   ├── ExternalDataTypeEnum.java
│       │   │                   │   └── McpImportResultStatusEnum.java
│       │   │                   ├── form/
│       │   │                   │   ├── a2a/
│       │   │                   │   │   └── admin/
│       │   │                   │   │       ├── AgentCardForm.java
│       │   │                   │   │       ├── AgentCardUpdateForm.java
│       │   │                   │   │       ├── AgentForm.java
│       │   │                   │   │       └── AgentListForm.java
│       │   │                   │   ├── mcp/
│       │   │                   │   │   └── admin/
│       │   │                   │   │       ├── McpDetailForm.java
│       │   │                   │   │       ├── McpForm.java
│       │   │                   │   │       ├── McpImportForm.java
│       │   │                   │   │       ├── McpListForm.java
│       │   │                   │   │       └── McpUpdateForm.java
│       │   │                   │   ├── prompt/
│       │   │                   │   │   ├── PromptForm.java
│       │   │                   │   │   ├── PromptHistoryForm.java
│       │   │                   │   │   ├── PromptLabelBindForm.java
│       │   │                   │   │   ├── PromptLabelForm.java
│       │   │                   │   │   ├── PromptListForm.java
│       │   │                   │   │   ├── PromptMetadataForm.java
│       │   │                   │   │   ├── PromptPublishForm.java
│       │   │                   │   │   └── PromptQueryForm.java
│       │   │                   │   └── skills/
│       │   │                   │       └── admin/
│       │   │                   │           ├── SkillDetailForm.java
│       │   │                   │           ├── SkillForm.java
│       │   │                   │           ├── SkillListForm.java
│       │   │                   │           └── SkillUpdateForm.java
│       │   │                   ├── index/
│       │   │                   │   ├── AbstractMcpServerIndex.java
│       │   │                   │   ├── CachedMcpServerIndex.java
│       │   │                   │   ├── McpCacheIndex.java
│       │   │                   │   ├── McpServerIndex.java
│       │   │                   │   ├── MemoryMcpCacheIndex.java
│       │   │                   │   └── PlainMcpServerIndex.java
│       │   │                   ├── model/
│       │   │                   │   └── mcp/
│       │   │                   │       ├── McpServerIndexData.java
│       │   │                   │       ├── McpServerStorageInfo.java
│       │   │                   │       └── UrlPageResult.java
│       │   │                   ├── param/
│       │   │                   │   ├── AgentHttpParamExtractor.java
│       │   │                   │   ├── McpHttpParamExtractor.java
│       │   │                   │   ├── PromptHttpParamExtractor.java
│       │   │                   │   └── SkillHttpParamExtractor.java
│       │   │                   ├── remote/
│       │   │                   │   ├── handler/
│       │   │                   │   │   ├── McpServerEndpointRequestHandler.java
│       │   │                   │   │   ├── QueryMcpServerRequestHandler.java
│       │   │                   │   │   ├── QueryPromptRequestHandler.java
│       │   │                   │   │   ├── ReleaseMcpServerRequestHandler.java
│       │   │                   │   │   └── a2a/
│       │   │                   │   │       ├── AgentEndpointRequestHandler.java
│       │   │                   │   │       ├── BatchAgentEndpointRequestHandler.java
│       │   │                   │   │       ├── QueryAgentCardRequestHandler.java
│       │   │                   │   │       └── ReleaseAgentCardRequestHandler.java
│       │   │                   │   └── manager/
│       │   │                   │       └── AiConnectionBasedClientManager.java
│       │   │                   ├── service/
│       │   │                   │   ├── McpEndpointOperationService.java
│       │   │                   │   ├── McpExternalDataAdaptor.java
│       │   │                   │   ├── McpServerCacheInvalidateService.java
│       │   │                   │   ├── McpServerImportService.java
│       │   │                   │   ├── McpServerOperationService.java
│       │   │                   │   ├── McpServerValidationService.java
│       │   │                   │   ├── McpToolOperationService.java
│       │   │                   │   ├── SimpleSyncEffectService.java
│       │   │                   │   ├── SyncEffectService.java
│       │   │                   │   ├── a2a/
│       │   │                   │   │   ├── A2aServerOperationService.java
│       │   │                   │   │   └── identity/
│       │   │                   │   │       ├── AgentIdCodec.java
│       │   │                   │   │       ├── AgentIdCodecHolder.java
│       │   │                   │   │       └── AsciiAgentIdCodec.java
│       │   │                   │   ├── prompt/
│       │   │                   │   │   ├── PromptAdminOperationService.java
│       │   │                   │   │   ├── PromptAdminOperationServiceImpl.java
│       │   │                   │   │   ├── PromptClientOperationService.java
│       │   │                   │   │   ├── PromptClientOperationServiceImpl.java
│       │   │                   │   │   ├── PromptLabelVersionMappingSnapshot.java
│       │   │                   │   │   ├── PromptMetaCacheInvalidateService.java
│       │   │                   │   │   ├── PromptMetaSnapshot.java
│       │   │                   │   │   └── PromptMetaUtils.java
│       │   │                   │   └── skills/
│       │   │                   │       ├── SkillOperationService.java
│       │   │                   │       └── SkillOperationServiceImpl.java
│       │   │                   └── utils/
│       │   │                       ├── AgentCardUtil.java
│       │   │                       ├── AgentEndpointUtil.java
│       │   │                       ├── AgentRequestUtil.java
│       │   │                       ├── McpConfigUtils.java
│       │   │                       ├── McpRequestUtil.java
│       │   │                       ├── PromptDataIdUtils.java
│       │   │                       ├── PromptVersionUtils.java
│       │   │                       ├── SkillRequestUtil.java
│       │   │                       └── SkillZipParser.java
│       │   └── resources/
│       │       └── META-INF/
│       │           └── services/
│       │               ├── com.alibaba.nacos.ai.service.McpServerOperationService
│       │               ├── com.alibaba.nacos.core.paramcheck.AbstractHttpParamExtractor
│       │               └── com.alibaba.nacos.sys.filter.NacosPackageExcludeFilter
│       └── test/
│           └── java/
│               └── com/
│                   └── alibaba/
│                       └── nacos/
│                           └── ai/
│                               ├── config/
│                               │   ├── AiEnabledFilterTest.java
│                               │   ├── McpCacheIndexPropertiesTest.java
│                               │   ├── McpConfigurationTest.java
│                               │   └── McpServerIndexConfigurationTest.java
│                               ├── controller/
│                               │   ├── A2aAdminControllerTest.java
│                               │   ├── McpAdminControllerTest.java
│                               │   └── PromptClientControllerTest.java
│                               ├── form/
│                               │   ├── a2a/
│                               │   │   └── admin/
│                               │   │       ├── AgentCardFormTest.java
│                               │   │       ├── AgentFormTest.java
│                               │   │       └── AgentListFormTest.java
│                               │   ├── mcp/
│                               │   │   └── admin/
│                               │   │       └── McpImportFormTest.java
│                               │   └── prompt/
│                               │       ├── PromptFormTest.java
│                               │       ├── PromptHistoryFormTest.java
│                               │       ├── PromptLabelBindFormTest.java
│                               │       ├── PromptLabelFormTest.java
│                               │       ├── PromptListFormTest.java
│                               │       └── PromptPublishFormTest.java
│                               ├── index/
│                               │   ├── AbstractMcpServerIndexTest.java
│                               │   ├── CachedMcpServerIndexTest.java
│                               │   ├── McpCachePerformanceTest.java
│                               │   ├── MemoryMcpCacheIndexTest.java
│                               │   └── PlainMcpServerIndexTest.java
│                               ├── param/
│                               │   ├── AgentHttpParamExtractorTest.java
│                               │   └── McpHttpParamExtractorTest.java
│                               ├── remote/
│                               │   ├── handler/
│                               │   │   ├── McpServerEndpointRequestHandlerTest.java
│                               │   │   ├── QueryMcpServerRequestHandlerTest.java
│                               │   │   ├── QueryPromptRequestHandlerTest.java
│                               │   │   ├── ReleaseMcpServerRequestHandlerTest.java
│                               │   │   └── a2a/
│                               │   │       ├── AgentEndpointRequestHandlerTest.java
│                               │   │       ├── BatchAgentEndpointRequestHandlerTest.java
│                               │   │       ├── QueryAgentCardRequestHandlerTest.java
│                               │   │       └── ReleaseAgentCardRequestHandlerTest.java
│                               │   └── manager/
│                               │       └── AiConnectionBasedClientManagerTest.java
│                               ├── service/
│                               │   ├── McpEndpointOperationServiceTest.java
│                               │   ├── McpExternalDataAdaptorTest.java
│                               │   ├── McpServerCacheInvalidateServiceTest.java
│                               │   ├── McpServerImportServiceTest.java
│                               │   ├── McpServerOperationServiceTest.java
│                               │   ├── McpServerValidationServiceTest.java
│                               │   ├── McpToolOperationServiceTest.java
│                               │   ├── SimpleSyncEffectServiceTest.java
│                               │   ├── SyncEffectServiceTest.java
│                               │   ├── a2a/
│                               │   │   ├── A2aServerOperationServiceTest.java
│                               │   │   └── identity/
│                               │   │       ├── AgentIdCodecHolderTest.java
│                               │   │       └── AsciiAgentIdCodecTest.java
│                               │   ├── prompt/
│                               │   │   ├── PromptAdminOperationServiceImplTest.java
│                               │   │   ├── PromptClientOperationServiceImplTest.java
│                               │   │   ├── PromptMetaCacheInvalidateServiceTest.java
│                               │   │   └── PromptMetaUtilsTest.java
│                               │   └── skills/
│                               │       └── SkillOperationServiceImplTest.java
│                               └── utils/
│                                   ├── AgentCardUtilTest.java
│                                   ├── AgentEndpointUtilTest.java
│                                   ├── AgentRequestUtilTest.java
│                                   ├── McpConfigUtilsTest.java
│                                   ├── McpRequestUtilTest.java
│                                   ├── McpRequestUtilsTest.java
│                                   ├── PromptDataIdUtilsTest.java
│                                   └── SkillZipParserTest.java
├── api/
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── alibaba/
│       │   │           └── nacos/
│       │   │               └── api/
│       │   │                   ├── NacosFactory.java
│       │   │                   ├── PropertyKeyConst.java
│       │   │                   ├── SystemPropertyKeyConst.java
│       │   │                   ├── ability/
│       │   │                   │   ├── ClientAbilities.java
│       │   │                   │   ├── ServerAbilities.java
│       │   │                   │   ├── constant/
│       │   │                   │   │   ├── AbilityKey.java
│       │   │                   │   │   ├── AbilityMode.java
│       │   │                   │   │   └── AbilityStatus.java
│       │   │                   │   ├── initializer/
│       │   │                   │   │   ├── AbilityInitializer.java
│       │   │                   │   │   └── AbilityPostProcessor.java
│       │   │                   │   └── register/
│       │   │                   │       ├── AbstractAbilityRegistry.java
│       │   │                   │       └── impl/
│       │   │                   │           ├── ClusterClientAbilities.java
│       │   │                   │           ├── SdkClientAbilities.java
│       │   │                   │           └── ServerAbilities.java
│       │   │                   ├── ai/
│       │   │                   │   ├── A2aService.java
│       │   │                   │   ├── AiFactory.java
│       │   │                   │   ├── AiService.java
│       │   │                   │   ├── constant/
│       │   │                   │   │   └── AiConstants.java
│       │   │                   │   ├── listener/
│       │   │                   │   │   ├── AbstractNacosAgentCardListener.java
│       │   │                   │   │   ├── AbstractNacosMcpServerListener.java
│       │   │                   │   │   ├── AbstractNacosPromptListener.java
│       │   │                   │   │   ├── AbstractNacosSkillListener.java
│       │   │                   │   │   ├── NacosAgentCardEvent.java
│       │   │                   │   │   ├── NacosAiEvent.java
│       │   │                   │   │   ├── NacosAiListener.java
│       │   │                   │   │   ├── NacosMcpServerEvent.java
│       │   │                   │   │   ├── NacosPromptEvent.java
│       │   │                   │   │   └── NacosSkillEvent.java
│       │   │                   │   ├── model/
│       │   │                   │   │   ├── a2a/
│       │   │                   │   │   │   ├── AgentAuthentication.java
│       │   │                   │   │   │   ├── AgentCapabilities.java
│       │   │                   │   │   │   ├── AgentCard.java
│       │   │                   │   │   │   ├── AgentCardBasicInfo.java
│       │   │                   │   │   │   ├── AgentCardDetailInfo.java
│       │   │                   │   │   │   ├── AgentCardVersionInfo.java
│       │   │                   │   │   │   ├── AgentEndpoint.java
│       │   │                   │   │   │   ├── AgentExtension.java
│       │   │                   │   │   │   ├── AgentInterface.java
│       │   │                   │   │   │   ├── AgentProvider.java
│       │   │                   │   │   │   ├── AgentSkill.java
│       │   │                   │   │   │   ├── AgentVersionDetail.java
│       │   │                   │   │   │   └── SecurityScheme.java
│       │   │                   │   │   ├── mcp/
│       │   │                   │   │   │   ├── EncryptObject.java
│       │   │                   │   │   │   ├── FrontEndpointConfig.java
│       │   │                   │   │   │   ├── McpCapability.java
│       │   │                   │   │   │   ├── McpEndpointInfo.java
│       │   │                   │   │   │   ├── McpEndpointSpec.java
│       │   │                   │   │   │   ├── McpServerBasicInfo.java
│       │   │                   │   │   │   ├── McpServerDetailInfo.java
│       │   │                   │   │   │   ├── McpServerImportRequest.java
│       │   │                   │   │   │   ├── McpServerImportResponse.java
│       │   │                   │   │   │   ├── McpServerImportResult.java
│       │   │                   │   │   │   ├── McpServerImportValidationResult.java
│       │   │                   │   │   │   ├── McpServerRemoteServiceConfig.java
│       │   │                   │   │   │   ├── McpServerValidationItem.java
│       │   │                   │   │   │   ├── McpServerVersionInfo.java
│       │   │                   │   │   │   ├── McpServiceRef.java
│       │   │                   │   │   │   ├── McpTool.java
│       │   │                   │   │   │   ├── McpToolAnnotations.java
│       │   │                   │   │   │   ├── McpToolMeta.java
│       │   │                   │   │   │   ├── McpToolSpecification.java
│       │   │                   │   │   │   ├── SecurityScheme.java
│       │   │                   │   │   │   └── registry/
│       │   │                   │   │   │       ├── Argument.java
│       │   │                   │   │   │       ├── Icon.java
│       │   │                   │   │   │       ├── Input.java
│       │   │                   │   │   │       ├── InputWithVariables.java
│       │   │                   │   │   │       ├── KeyValueInput.java
│       │   │                   │   │   │       ├── McpErrorResponse.java
│       │   │                   │   │   │       ├── McpRegistryServerDetail.java
│       │   │                   │   │   │       ├── McpRegistryServerList.java
│       │   │                   │   │   │       ├── McpServerStatusEnum.java
│       │   │                   │   │   │       ├── NamedArgument.java
│       │   │                   │   │   │       ├── OfficialMeta.java
│       │   │                   │   │   │       ├── Package.java
│       │   │                   │   │   │       ├── PositionalArgument.java
│       │   │                   │   │   │       ├── Remote.java
│       │   │                   │   │   │       ├── Repository.java
│       │   │                   │   │   │       ├── ServerResponse.java
│       │   │                   │   │   │       ├── ServerVersionDetail.java
│       │   │                   │   │   │       ├── SseTransport.java
│       │   │                   │   │   │       ├── StdioTransport.java
│       │   │                   │   │   │       └── StreamableHttpTransport.java
│       │   │                   │   │   ├── prompt/
│       │   │                   │   │   │   ├── Prompt.java
│       │   │                   │   │   │   ├── PromptDescriptor.java
│       │   │                   │   │   │   ├── PromptLabelVersionMapping.java
│       │   │                   │   │   │   ├── PromptMetaInfo.java
│       │   │                   │   │   │   ├── PromptMetaSummary.java
│       │   │                   │   │   │   ├── PromptVariable.java
│       │   │                   │   │   │   ├── PromptVersionInfo.java
│       │   │                   │   │   │   └── PromptVersionSummary.java
│       │   │                   │   │   └── skills/
│       │   │                   │   │       ├── Skill.java
│       │   │                   │   │       ├── SkillBasicInfo.java
│       │   │                   │   │       ├── SkillResource.java
│       │   │                   │   │       └── SkillUtils.java
│       │   │                   │   └── remote/
│       │   │                   │       ├── AiRemoteConstants.java
│       │   │                   │       ├── request/
│       │   │                   │       │   ├── AbstractAgentRequest.java
│       │   │                   │       │   ├── AbstractMcpRequest.java
│       │   │                   │       │   ├── AbstractPromptRequest.java
│       │   │                   │       │   ├── AgentEndpointRequest.java
│       │   │                   │       │   ├── BatchAgentEndpointRequest.java
│       │   │                   │       │   ├── McpServerEndpointRequest.java
│       │   │                   │       │   ├── QueryAgentCardRequest.java
│       │   │                   │       │   ├── QueryMcpServerRequest.java
│       │   │                   │       │   ├── QueryPromptRequest.java
│       │   │                   │       │   ├── ReleaseAgentCardRequest.java
│       │   │                   │       │   └── ReleaseMcpServerRequest.java
│       │   │                   │       └── response/
│       │   │                   │           ├── AgentEndpointResponse.java
│       │   │                   │           ├── McpServerEndpointResponse.java
│       │   │                   │           ├── QueryAgentCardResponse.java
│       │   │                   │           ├── QueryMcpServerResponse.java
│       │   │                   │           ├── QueryPromptResponse.java
│       │   │                   │           ├── ReleaseAgentCardResponse.java
│       │   │                   │           └── ReleaseMcpServerResponse.java
│       │   │                   ├── annotation/
│       │   │                   │   ├── NacosApi.java
│       │   │                   │   ├── NacosInjected.java
│       │   │                   │   └── NacosProperties.java
│       │   │                   ├── cmdb/
│       │   │                   │   ├── pojo/
│       │   │                   │   │   ├── Entity.java
│       │   │                   │   │   ├── EntityEvent.java
│       │   │                   │   │   ├── EntityEventType.java
│       │   │                   │   │   ├── Label.java
│       │   │                   │   │   └── PreservedEntityTypes.java
│       │   │                   │   └── spi/
│       │   │                   │       └── CmdbService.java
│       │   │                   ├── common/
│       │   │                   │   ├── Constants.java
│       │   │                   │   ├── NodeState.java
│       │   │                   │   └── ResponseCode.java
│       │   │                   ├── config/
│       │   │                   │   ├── ConfigChangeEvent.java
│       │   │                   │   ├── ConfigChangeItem.java
│       │   │                   │   ├── ConfigFactory.java
│       │   │                   │   ├── ConfigQueryResult.java
│       │   │                   │   ├── ConfigService.java
│       │   │                   │   ├── ConfigType.java
│       │   │                   │   ├── PropertyChangeType.java
│       │   │                   │   ├── ability/
│       │   │                   │   │   ├── ClientConfigAbility.java
│       │   │                   │   │   └── ServerConfigAbility.java
│       │   │                   │   ├── annotation/
│       │   │                   │   │   ├── NacosConfigListener.java
│       │   │                   │   │   ├── NacosConfigurationProperties.java
│       │   │                   │   │   ├── NacosIgnore.java
│       │   │                   │   │   ├── NacosProperty.java
│       │   │                   │   │   └── NacosValue.java
│       │   │                   │   ├── convert/
│       │   │                   │   │   └── NacosConfigConverter.java
│       │   │                   │   ├── filter/
│       │   │                   │   │   ├── AbstractConfigFilter.java
│       │   │                   │   │   ├── IConfigContext.java
│       │   │                   │   │   ├── IConfigFilter.java
│       │   │                   │   │   ├── IConfigFilterChain.java
│       │   │                   │   │   ├── IConfigRequest.java
│       │   │                   │   │   └── IConfigResponse.java
│       │   │                   │   ├── listener/
│       │   │                   │   │   ├── AbstractFuzzyWatchEventWatcher.java
│       │   │                   │   │   ├── AbstractListener.java
│       │   │                   │   │   ├── AbstractSharedListener.java
│       │   │                   │   │   ├── ConfigChangeParser.java
│       │   │                   │   │   ├── ConfigFuzzyWatchChangeEvent.java
│       │   │                   │   │   ├── FuzzyWatchEventWatcher.java
│       │   │                   │   │   ├── FuzzyWatchLoadWatcher.java
│       │   │                   │   │   └── Listener.java
│       │   │                   │   ├── model/
│       │   │                   │   │   ├── ConfigBasicInfo.java
│       │   │                   │   │   ├── ConfigCloneInfo.java
│       │   │                   │   │   ├── ConfigDetailInfo.java
│       │   │                   │   │   ├── ConfigGrayInfo.java
│       │   │                   │   │   ├── ConfigHistoryBasicInfo.java
│       │   │                   │   │   ├── ConfigHistoryDetailInfo.java
│       │   │                   │   │   ├── ConfigListenerInfo.java
│       │   │                   │   │   └── SameConfigPolicy.java
│       │   │                   │   └── remote/
│       │   │                   │       ├── request/
│       │   │                   │       │   ├── AbstractConfigRequest.java
│       │   │                   │       │   ├── AbstractFuzzyWatchNotifyRequest.java
│       │   │                   │       │   ├── ClientConfigMetricRequest.java
│       │   │                   │       │   ├── ConfigBatchListenRequest.java
│       │   │                   │       │   ├── ConfigChangeNotifyRequest.java
│       │   │                   │       │   ├── ConfigFuzzyWatchChangeNotifyRequest.java
│       │   │                   │       │   ├── ConfigFuzzyWatchRequest.java
│       │   │                   │       │   ├── ConfigFuzzyWatchSyncRequest.java
│       │   │                   │       │   ├── ConfigPublishRequest.java
│       │   │                   │       │   ├── ConfigQueryRequest.java
│       │   │                   │       │   ├── ConfigRemoveRequest.java
│       │   │                   │       │   └── cluster/
│       │   │                   │       │       └── ConfigChangeClusterSyncRequest.java
│       │   │                   │       └── response/
│       │   │                   │           ├── ClientConfigMetricResponse.java
│       │   │                   │           ├── ConfigChangeBatchListenResponse.java
│       │   │                   │           ├── ConfigChangeNotifyResponse.java
│       │   │                   │           ├── ConfigFuzzyWatchChangeNotifyResponse.java
│       │   │                   │           ├── ConfigFuzzyWatchResponse.java
│       │   │                   │           ├── ConfigFuzzyWatchSyncResponse.java
│       │   │                   │           ├── ConfigPublishResponse.java
│       │   │                   │           ├── ConfigQueryResponse.java
│       │   │                   │           ├── ConfigRemoveResponse.java
│       │   │                   │           └── cluster/
│       │   │                   │               └── ConfigChangeClusterSyncResponse.java
│       │   │                   ├── exception/
│       │   │                   │   ├── NacosException.java
│       │   │                   │   ├── api/
│       │   │                   │   │   └── NacosApiException.java
│       │   │                   │   └── runtime/
│       │   │                   │       ├── NacosDeserializationException.java
│       │   │                   │       ├── NacosLoadException.java
│       │   │                   │       ├── NacosRuntimeException.java
│       │   │                   │       └── NacosSerializationException.java
│       │   │                   ├── grpc/
│       │   │                   │   └── auto/
│       │   │                   │       ├── BiRequestStreamGrpc.java
│       │   │                   │       ├── Metadata.java
│       │   │                   │       ├── MetadataOrBuilder.java
│       │   │                   │       ├── NacosGrpcService.java
│       │   │                   │       ├── Payload.java
│       │   │                   │       ├── PayloadOrBuilder.java
│       │   │                   │       └── RequestGrpc.java
│       │   │                   ├── lock/
│       │   │                   │   ├── LockService.java
│       │   │                   │   ├── NacosLockFactory.java
│       │   │                   │   ├── common/
│       │   │                   │   │   └── LockConstants.java
│       │   │                   │   ├── constant/
│       │   │                   │   │   └── PropertyConstants.java
│       │   │                   │   ├── model/
│       │   │                   │   │   └── LockInstance.java
│       │   │                   │   └── remote/
│       │   │                   │       ├── AbstractLockRequest.java
│       │   │                   │       ├── LockOperationEnum.java
│       │   │                   │       ├── request/
│       │   │                   │       │   └── LockOperationRequest.java
│       │   │                   │       └── response/
│       │   │                   │           └── LockOperationResponse.java
│       │   │                   ├── model/
│       │   │                   │   ├── NacosForm.java
│       │   │                   │   ├── Page.java
│       │   │                   │   ├── response/
│       │   │                   │   │   ├── ConnectionInfo.java
│       │   │                   │   │   ├── ConnectionMetaInfo.java
│       │   │                   │   │   ├── IdGeneratorInfo.java
│       │   │                   │   │   ├── NacosMember.java
│       │   │                   │   │   ├── Namespace.java
│       │   │                   │   │   ├── ServerLoaderMetric.java
│       │   │                   │   │   └── ServerLoaderMetrics.java
│       │   │                   │   └── v2/
│       │   │                   │       ├── ErrorCode.java
│       │   │                   │       ├── Result.java
│       │   │                   │       └── SupportedLanguage.java
│       │   │                   ├── naming/
│       │   │                   │   ├── CommonParams.java
│       │   │                   │   ├── NamingFactory.java
│       │   │                   │   ├── NamingMaintainFactory.java
│       │   │                   │   ├── NamingMaintainService.java
│       │   │                   │   ├── NamingResponseCode.java
│       │   │                   │   ├── NamingService.java
│       │   │                   │   ├── PreservedMetadataKeys.java
│       │   │                   │   ├── ability/
│       │   │                   │   │   ├── ClientNamingAbility.java
│       │   │                   │   │   └── ServerNamingAbility.java
│       │   │                   │   ├── listener/
│       │   │                   │   │   ├── AbstractEventListener.java
│       │   │                   │   │   ├── AbstractFuzzyWatchEventWatcher.java
│       │   │                   │   │   ├── Event.java
│       │   │                   │   │   ├── EventListener.java
│       │   │                   │   │   ├── FuzzyWatchChangeEvent.java
│       │   │                   │   │   ├── FuzzyWatchEventWatcher.java
│       │   │                   │   │   ├── FuzzyWatchLoadWatcher.java
│       │   │                   │   │   └── NamingEvent.java
│       │   │                   │   ├── pojo/
│       │   │                   │   │   ├── Cluster.java
│       │   │                   │   │   ├── Instance.java
│       │   │                   │   │   ├── ListView.java
│       │   │                   │   │   ├── Service.java
│       │   │                   │   │   ├── ServiceInfo.java
│       │   │                   │   │   ├── builder/
│       │   │                   │   │   │   └── InstanceBuilder.java
│       │   │                   │   │   ├── healthcheck/
│       │   │                   │   │   │   ├── AbstractHealthChecker.java
│       │   │                   │   │   │   ├── HealthCheckType.java
│       │   │                   │   │   │   ├── HealthCheckerFactory.java
│       │   │                   │   │   │   └── impl/
│       │   │                   │   │   │       ├── Http.java
│       │   │                   │   │   │       ├── Mysql.java
│       │   │                   │   │   │       └── Tcp.java
│       │   │                   │   │   └── maintainer/
│       │   │                   │   │       ├── ClientPublisherInfo.java
│       │   │                   │   │       ├── ClientServiceInfo.java
│       │   │                   │   │       ├── ClientSubscriberInfo.java
│       │   │                   │   │       ├── ClientSummaryInfo.java
│       │   │                   │   │       ├── ClusterInfo.java
│       │   │                   │   │       ├── InstanceMetadataBatchResult.java
│       │   │                   │   │       ├── MetricsInfo.java
│       │   │                   │   │       ├── ServiceDetailInfo.java
│       │   │                   │   │       ├── ServiceView.java
│       │   │                   │   │       └── SubscriberInfo.java
│       │   │                   │   ├── remote/
│       │   │                   │   │   ├── NamingRemoteConstants.java
│       │   │                   │   │   ├── request/
│       │   │                   │   │   │   ├── AbstractFuzzyWatchNotifyRequest.java
│       │   │                   │   │   │   ├── AbstractNamingRequest.java
│       │   │                   │   │   │   ├── BatchInstanceRequest.java
│       │   │                   │   │   │   ├── InstanceRequest.java
│       │   │                   │   │   │   ├── NamingFuzzyWatchChangeNotifyRequest.java
│       │   │                   │   │   │   ├── NamingFuzzyWatchRequest.java
│       │   │                   │   │   │   ├── NamingFuzzyWatchSyncRequest.java
│       │   │                   │   │   │   ├── NotifySubscriberRequest.java
│       │   │                   │   │   │   ├── PersistentInstanceRequest.java
│       │   │                   │   │   │   ├── ServiceListRequest.java
│       │   │                   │   │   │   ├── ServiceQueryRequest.java
│       │   │                   │   │   │   └── SubscribeServiceRequest.java
│       │   │                   │   │   └── response/
│       │   │                   │   │       ├── BatchInstanceResponse.java
│       │   │                   │   │       ├── InstanceResponse.java
│       │   │                   │   │       ├── NamingFuzzyWatchChangeNotifyResponse.java
│       │   │                   │   │       ├── NamingFuzzyWatchResponse.java
│       │   │                   │   │       ├── NamingFuzzyWatchSyncResponse.java
│       │   │                   │   │       ├── NotifySubscriberResponse.java
│       │   │                   │   │       ├── QueryServiceResponse.java
│       │   │                   │   │       ├── ServiceListResponse.java
│       │   │                   │   │       └── SubscribeServiceResponse.java
│       │   │                   │   ├── selector/
│       │   │                   │   │   ├── NamingContext.java
│       │   │                   │   │   ├── NamingResult.java
│       │   │                   │   │   └── NamingSelector.java
│       │   │                   │   ├── spi/
│       │   │                   │   │   └── generator/
│       │   │                   │   │       └── InstanceIdGenerator.java
│       │   │                   │   └── utils/
│       │   │                   │       └── NamingUtils.java
│       │   │                   ├── plugin/
│       │   │                   │   ├── ConfigItemDefinition.java
│       │   │                   │   ├── ConfigItemType.java
│       │   │                   │   ├── PluginConfigSpec.java
│       │   │                   │   ├── PluginProvider.java
│       │   │                   │   ├── PluginStateChecker.java
│       │   │                   │   ├── PluginStateCheckerHolder.java
│       │   │                   │   └── PluginType.java
│       │   │                   ├── remote/
│       │   │                   │   ├── AbstractPushCallBack.java
│       │   │                   │   ├── AbstractRequestCallBack.java
│       │   │                   │   ├── DefaultRequestFuture.java
│       │   │                   │   ├── Payload.java
│       │   │                   │   ├── PushCallBack.java
│       │   │                   │   ├── RemoteConstants.java
│       │   │                   │   ├── RequestCallBack.java
│       │   │                   │   ├── RequestFuture.java
│       │   │                   │   ├── Requester.java
│       │   │                   │   ├── RpcScheduledExecutor.java
│       │   │                   │   ├── ability/
│       │   │                   │   │   ├── ClientRemoteAbility.java
│       │   │                   │   │   └── ServerRemoteAbility.java
│       │   │                   │   ├── request/
│       │   │                   │   │   ├── ClientDetectionRequest.java
│       │   │                   │   │   ├── ConnectResetRequest.java
│       │   │                   │   │   ├── ConnectionSetupRequest.java
│       │   │                   │   │   ├── HealthCheckRequest.java
│       │   │                   │   │   ├── InternalRequest.java
│       │   │                   │   │   ├── PushAckRequest.java
│       │   │                   │   │   ├── Request.java
│       │   │                   │   │   ├── RequestMeta.java
│       │   │                   │   │   ├── ServerCheckRequest.java
│       │   │                   │   │   ├── ServerLoaderInfoRequest.java
│       │   │                   │   │   ├── ServerReloadRequest.java
│       │   │                   │   │   ├── ServerRequest.java
│       │   │                   │   │   └── SetupAckRequest.java
│       │   │                   │   └── response/
│       │   │                   │       ├── ClientDetectionResponse.java
│       │   │                   │       ├── ConnectResetResponse.java
│       │   │                   │       ├── ErrorResponse.java
│       │   │                   │       ├── HealthCheckResponse.java
│       │   │                   │       ├── Response.java
│       │   │                   │       ├── ResponseCode.java
│       │   │                   │       ├── ServerCheckResponse.java
│       │   │                   │       ├── ServerLoaderInfoResponse.java
│       │   │                   │       ├── ServerReloadResponse.java
│       │   │                   │       └── SetupAckResponse.java
│       │   │                   ├── selector/
│       │   │                   │   ├── AbstractCmdbSelector.java
│       │   │                   │   ├── AbstractSelector.java
│       │   │                   │   ├── ExpressionSelector.java
│       │   │                   │   ├── NoneSelector.java
│       │   │                   │   ├── Selector.java
│       │   │                   │   ├── SelectorType.java
│       │   │                   │   ├── client/
│       │   │                   │   │   ├── SelectResult.java
│       │   │                   │   │   └── Selector.java
│       │   │                   │   └── context/
│       │   │                   │       ├── CmdbContext.java
│       │   │                   │       └── SelectorContextBuilder.java
│       │   │                   └── utils/
│       │   │                       ├── NetUtils.java
│       │   │                       └── StringUtils.java
│       │   ├── proto/
│       │   │   └── nacos_grpc_service.proto
│       │   └── resources/
│       │       └── META-INF/
│       │           └── services/
│       │               └── com.alibaba.nacos.api.remote.Payload
│       └── test/
│           └── java/
│               └── com/
│                   └── alibaba/
│                       └── nacos/
│                           ├── api/
│                           │   ├── NacosFactoryTest.java
│                           │   ├── ability/
│                           │   │   ├── ClientAbilitiesTest.java
│                           │   │   ├── ServerAbilitiesTest.java
│                           │   │   └── register/
│                           │   │       └── impl/
│                           │   │           ├── ClusterClientAbilitiesTest.java
│                           │   │           ├── SdkClientAbilitiesTest.java
│                           │   │           └── ServerAbilitiesTest.java
│                           │   ├── ai/
│                           │   │   ├── A2aServiceDefaultMethodTest.java
│                           │   │   ├── AiFactoryTest.java
│                           │   │   ├── constant/
│                           │   │   │   └── AiConstantsStatusMappingTest.java
│                           │   │   ├── listener/
│                           │   │   │   ├── NacosAgentCardEventTest.java
│                           │   │   │   ├── NacosAiListenerDefaultMethodTest.java
│                           │   │   │   └── NacosMcpServerEventTest.java
│                           │   │   ├── model/
│                           │   │   │   ├── a2a/
│                           │   │   │   │   ├── AgentAuthenticationTest.java
│                           │   │   │   │   ├── AgentCapabilitiesTest.java
│                           │   │   │   │   ├── AgentCardBasicInfoTest.java
│                           │   │   │   │   ├── AgentCardDetailInfoTest.java
│                           │   │   │   │   ├── AgentCardTest.java
│                           │   │   │   │   ├── AgentCardVersionInfoTest.java
│                           │   │   │   │   ├── AgentEndpointTest.java
│                           │   │   │   │   ├── AgentExtensionTest.java
│                           │   │   │   │   ├── AgentInterfaceTest.java
│                           │   │   │   │   ├── AgentProviderTest.java
│                           │   │   │   │   ├── AgentSkillTest.java
│                           │   │   │   │   ├── AgentVersionDetailTest.java
│                           │   │   │   │   └── SecuritySchemeTest.java
│                           │   │   │   ├── mcp/
│                           │   │   │   │   ├── EncryptObjectTest.java
│                           │   │   │   │   ├── FrontEndpointConfigTest.java
│                           │   │   │   │   ├── McpCapabilityTest.java
│                           │   │   │   │   ├── McpEndpointInfoTest.java
│                           │   │   │   │   ├── McpEndpointSpecTest.java
│                           │   │   │   │   ├── McpServerBasicInfoEnhancedFieldsTest.java
│                           │   │   │   │   ├── McpServerBasicInfoTest.java
│                           │   │   │   │   ├── McpServerDetailInfoTest.java
│                           │   │   │   │   ├── McpServerImportRequestTest.java
│                           │   │   │   │   ├── McpServerImportResponseTest.java
│                           │   │   │   │   ├── McpServerImportResultTest.java
│                           │   │   │   │   ├── McpServerImportValidationResultTest.java
│                           │   │   │   │   ├── McpServerRemoteServiceConfigTest.java
│                           │   │   │   │   ├── McpServerValidationItemTest.java
│                           │   │   │   │   ├── McpServerVersionInfoTest.java
│                           │   │   │   │   ├── McpServiceRefTest.java
│                           │   │   │   │   ├── McpToolMetaTest.java
│                           │   │   │   │   ├── McpToolSpecificationTest.java
│                           │   │   │   │   ├── McpToolTest.java
│                           │   │   │   │   ├── SecuritySchemeTest.java
│                           │   │   │   │   └── registry/
│                           │   │   │   │       ├── IconTest.java
│                           │   │   │   │       ├── InputTest.java
│                           │   │   │   │       ├── InputWithVariablesTest.java
│                           │   │   │   │       ├── KeyValueInputTest.java
│                           │   │   │   │       ├── McpErrorResponseTest.java
│                           │   │   │   │       ├── McpRegistryServerListTest.java
│                           │   │   │   │       ├── McpServerStatusEnumTest.java
│                           │   │   │   │       ├── MetaTest.java
│                           │   │   │   │       ├── NacosMcpRegistryServerDetailTest.java
│                           │   │   │   │       ├── NamedArgumentTest.java
│                           │   │   │   │       ├── OfficialMetaTest.java
│                           │   │   │   │       ├── PackageTest.java
│                           │   │   │   │       ├── PackageTransportTest.java
│                           │   │   │   │       ├── PositionalArgumentTest.java
│                           │   │   │   │       ├── RemoteTest.java
│                           │   │   │   │       ├── RepositoryTest.java
│                           │   │   │   │       ├── ServerResponseTest.java
│                           │   │   │   │       ├── ServerVersionDetailTest.java
│                           │   │   │   │       └── TransportTest.java
│                           │   │   │   └── skills/
│                           │   │   │       └── SkillUtilsTest.java
│                           │   │   └── remote/
│                           │   │       ├── request/
│                           │   │       │   ├── AbstractAgentRequestTest.java
│                           │   │       │   ├── AgentEndpointRequestTest.java
│                           │   │       │   ├── BatchAgentEndpointRequestTest.java
│                           │   │       │   ├── McpServerEndpointRequestTest.java
│                           │   │       │   ├── QueryAgentCardRequestTest.java
│                           │   │       │   ├── QueryMcpServerRequestTest.java
│                           │   │       │   ├── ReleaseAgentCardRequestTest.java
│                           │   │       │   └── ReleaseMcpServerRequestTest.java
│                           │   │       └── response/
│                           │   │           ├── AgentEndpointResponseTest.java
│                           │   │           ├── McpServerEndpointResponseTest.java
│                           │   │           ├── QueryAgentCardResponseTest.java
│                           │   │           ├── QueryMcpServerResponseTest.java
│                           │   │           ├── ReleaseAgentCardResponseTest.java
│                           │   │           └── ReleaseMcpServerResponseTest.java
│                           │   ├── annotation/
│                           │   │   └── NacosPropertiesTest.java
│                           │   ├── cmdb/
│                           │   │   └── pojo/
│                           │   │       ├── EntityEventTest.java
│                           │   │       ├── EntityTest.java
│                           │   │       └── LabelTest.java
│                           │   ├── config/
│                           │   │   ├── ConfigChangeEventTest.java
│                           │   │   ├── ConfigChangeItemTest.java
│                           │   │   ├── ConfigFactoryTest.java
│                           │   │   ├── ConfigTypeTest.java
│                           │   │   ├── ability/
│                           │   │   │   ├── ClientRemoteAbilityTest.java
│                           │   │   │   ├── ServerConfigAbilityTest.java
│                           │   │   │   └── ServerRemoteAbilityTest.java
│                           │   │   ├── listener/
│                           │   │   │   ├── AbstractFuzzyWatchEventWatcherTest.java
│                           │   │   │   ├── AbstractListenerTest.java
│                           │   │   │   ├── AbstractSharedListenerTest.java
│                           │   │   │   └── ConfigFuzzyWatchChangeEventTest.java
│                           │   │   ├── model/
│                           │   │   │   ├── ConfigCloneInfoTest.java
│                           │   │   │   ├── ConfigHistoryInfoTest.java
│                           │   │   │   ├── ConfigInfoTest.java
│                           │   │   │   ├── ConfigListenerInfoTest.java
│                           │   │   │   └── SameConfigPolicyTest.java
│                           │   │   └── remote/
│                           │   │       ├── request/
│                           │   │       │   ├── BasedConfigRequestTest.java
│                           │   │       │   ├── ClientConfigMetricRequestTest.java
│                           │   │       │   ├── ConfigBatchListenRequestTest.java
│                           │   │       │   ├── ConfigChangeNotifyRequestTest.java
│                           │   │       │   ├── ConfigFuzzyWatchChangeNotifyRequestTest.java
│                           │   │       │   ├── ConfigFuzzyWatchRequestTest.java
│                           │   │       │   ├── ConfigFuzzyWatchSyncRequestTest.java
│                           │   │       │   ├── ConfigPublishRequestTest.java
│                           │   │       │   ├── ConfigQueryRequestTest.java
│                           │   │       │   ├── ConfigRemoveRequestTest.java
│                           │   │       │   └── cluster/
│                           │   │       │       └── ConfigChangeClusterSyncRequestTest.java
│                           │   │       └── response/
│                           │   │           ├── BasedConfigResponseTest.java
│                           │   │           ├── ClientConfigMetricResponseTest.java
│                           │   │           ├── ConfigChangeBatchListenResponseTest.java
│                           │   │           ├── ConfigChangeNotifyResponseTest.java
│                           │   │           ├── ConfigPublishResponseTest.java
│                           │   │           ├── ConfigQueryResponseTest.java
│                           │   │           ├── ConfigRemoveResponseTest.java
│                           │   │           └── cluster/
│                           │   │               └── ConfigChangeClusterSyncResponseTest.java
│                           │   ├── exception/
│                           │   │   ├── NacosExceptionTest.java
│                           │   │   ├── api/
│                           │   │   │   └── NacosApiExceptionTest.java
│                           │   │   └── runtime/
│                           │   │       ├── NacosDeserializationExceptionTest.java
│                           │   │       ├── NacosLoadExceptionTest.java
│                           │   │       ├── NacosRuntimeExceptionTest.java
│                           │   │       └── NacosSerializationExceptionTest.java
│                           │   ├── lock/
│                           │   │   ├── NacosLockFactoryTest.java
│                           │   │   ├── model/
│                           │   │   │   └── LockInstanceTest.java
│                           │   │   └── remote/
│                           │   │       ├── request/
│                           │   │       │   └── LockOperationRequestTest.java
│                           │   │       └── response/
│                           │   │           └── LockOperationResponseTest.java
│                           │   ├── model/
│                           │   │   ├── PageTest.java
│                           │   │   ├── response/
│                           │   │   │   ├── ConnectionInfoTest.java
│                           │   │   │   ├── InstanceIdGeneratorInfoTest.java
│                           │   │   │   ├── NacosMemberTest.java
│                           │   │   │   ├── NamespaceTest.java
│                           │   │   │   └── ServerLoaderMetricsTest.java
│                           │   │   └── v2/
│                           │   │       ├── ErrorCodeTest.java
│                           │   │       ├── ResultTest.java
│                           │   │       └── SupportedLanguageTest.java
│                           │   ├── naming/
│                           │   │   ├── NamingFactoryTest.java
│                           │   │   ├── ability/
│                           │   │   │   ├── ClientNamingAbilityTest.java
│                           │   │   │   └── ServerNamingAbilityTest.java
│                           │   │   ├── listener/
│                           │   │   │   ├── AbstractFuzzyWatchEventWatcherTest.java
│                           │   │   │   ├── FuzzyWatchChangeEventTest.java
│                           │   │   │   └── NamingEventTest.java
│                           │   │   ├── pojo/
│                           │   │   │   ├── ClusterTest.java
│                           │   │   │   ├── InstanceTest.java
│                           │   │   │   ├── ListViewTest.java
│                           │   │   │   ├── ServiceInfoTest.java
│                           │   │   │   ├── ServiceTest.java
│                           │   │   │   ├── builder/
│                           │   │   │   │   └── InstanceBuilderTest.java
│                           │   │   │   ├── healthcheck/
│                           │   │   │   │   ├── AbstractHealthCheckerTest.java
│                           │   │   │   │   ├── HealthCheckTypeTest.java
│                           │   │   │   │   ├── HealthCheckerFactoryTest.java
│                           │   │   │   │   ├── TestChecker.java
│                           │   │   │   │   └── impl/
│                           │   │   │   │       ├── HttpTest.java
│                           │   │   │   │       ├── MysqlTest.java
│                           │   │   │   │       └── TcpTest.java
│                           │   │   │   └── maintainer/
│                           │   │   │       ├── ClientPublisherInfoTest.java
│                           │   │   │       ├── ClientServiceInfoTest.java
│                           │   │   │       ├── ClientSubscriberInfoTest.java
│                           │   │   │       ├── ClientSummaryInfoTest.java
│                           │   │   │       ├── ClusterInfoTest.java
│                           │   │   │       ├── InstanceMetadataBatchResultTest.java
│                           │   │   │       ├── MetricsInfoTest.java
│                           │   │   │       ├── ServiceDetailInfoTest.java
│                           │   │   │       ├── ServiceViewTest.java
│                           │   │   │       └── SubscriberInfoTest.java
│                           │   │   ├── remote/
│                           │   │   │   ├── request/
│                           │   │   │   │   ├── BasedNamingRequestTest.java
│                           │   │   │   │   ├── BatchInstanceRequestTest.java
│                           │   │   │   │   ├── InstanceRequestTest.java
│                           │   │   │   │   ├── NamingFuzzyWatchChangeNotifyRequestTest.java
│                           │   │   │   │   ├── NamingFuzzyWatchRequestTest.java
│                           │   │   │   │   ├── NamingFuzzyWatchSyncRequestTest.java
│                           │   │   │   │   ├── NotifySubscriberRequestTest.java
│                           │   │   │   │   ├── PersistentInstanceRequestTest.java
│                           │   │   │   │   ├── ServiceListRequestTest.java
│                           │   │   │   │   ├── ServiceQueryRequestTest.java
│                           │   │   │   │   └── SubscribeServiceRequestTest.java
│                           │   │   │   └── response/
│                           │   │   │       ├── BatchInstanceResponseTest.java
│                           │   │   │       ├── InstanceResponseTest.java
│                           │   │   │       ├── NamingFuzzyWatchChangeNotifyResponseTest.java
│                           │   │   │       ├── NamingFuzzyWatchResponseTest.java
│                           │   │   │       ├── NamingFuzzyWatchSyncResponseTest.java
│                           │   │   │       ├── NotifySubscriberResponseTest.java
│                           │   │   │       ├── QueryServiceResponseTest.java
│                           │   │   │       ├── ServiceListResponseTest.java
│                           │   │   │       └── SubscribeServiceResponseTest.java
│                           │   │   └── utils/
│                           │   │       └── NamingUtilsTest.java
│                           │   ├── remote/
│                           │   │   ├── AbstractPushCallBackTest.java
│                           │   │   ├── AbstractRequestCallBackTest.java
│                           │   │   ├── DefaultRequestFutureTest.java
│                           │   │   ├── RpcScheduledExecutorTest.java
│                           │   │   ├── ability/
│                           │   │   │   ├── ClientRemoteAbilityTest.java
│                           │   │   │   └── ServerRemoteAbilityTest.java
│                           │   │   ├── request/
│                           │   │   │   ├── BasicRequestTest.java
│                           │   │   │   ├── ConnectResetRequestTest.java
│                           │   │   │   ├── ConnectionSetupRequestTest.java
│                           │   │   │   ├── EmptyContentRequestTest.java
│                           │   │   │   ├── PushAckRequestTest.java
│                           │   │   │   ├── RequestMetaTest.java
│                           │   │   │   ├── RequestTest.java
│                           │   │   │   ├── ServerReloadRequestTest.java
│                           │   │   │   └── SetupAckRequestTest.java
│                           │   │   └── response/
│                           │   │       ├── EmptyContentResponseTest.java
│                           │   │       ├── ErrorResponseTest.java
│                           │   │       ├── ServerCheckResponseTest.java
│                           │   │       └── ServerLoaderInfoResponseTest.java
│                           │   ├── selector/
│                           │   │   ├── AbstractCmdbSelectorTest.java
│                           │   │   ├── ExpressionSelectorTest.java
│                           │   │   ├── NoneSelectorTest.java
│                           │   │   └── context/
│                           │   │       └── CmdbContextTest.java
│                           │   └── utils/
│                           │       ├── AbilityKeyTest.java
│                           │       ├── NetUtilsTest.java
│                           │       └── StringUtilsTest.java
│                           └── client/
│                               ├── ai/
│                               │   └── NacosAiService.java
│                               ├── config/
│                               │   └── NacosConfigService.java
│                               ├── lock/
│                               │   └── NacosLockService.java
│                               └── naming/
│                                   └── NacosNamingService.java
├── auth/
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── alibaba/
│       │               └── nacos/
│       │                   └── auth/
│       │                       ├── AbstractProtocolAuthService.java
│       │                       ├── GrpcProtocolAuthService.java
│       │                       ├── HttpProtocolAuthService.java
│       │                       ├── ProtocolAuthService.java
│       │                       ├── annotation/
│       │                       │   └── Secured.java
│       │                       ├── config/
│       │                       │   ├── AuthErrorCode.java
│       │                       │   ├── NacosAuthConfig.java
│       │                       │   └── NacosAuthConfigHolder.java
│       │                       ├── context/
│       │                       │   ├── GrpcIdentityContextBuilder.java
│       │                       │   ├── HttpIdentityContextBuilder.java
│       │                       │   └── IdentityContextBuilder.java
│       │                       ├── parser/
│       │                       │   ├── AbstractResourceParser.java
│       │                       │   ├── DefaultResourceParser.java
│       │                       │   ├── ResourceParser.java
│       │                       │   ├── grpc/
│       │                       │   │   ├── AbstractGrpcResourceParser.java
│       │                       │   │   ├── AiGrpcResourceParser.java
│       │                       │   │   ├── ConfigGrpcResourceParser.java
│       │                       │   │   └── NamingGrpcResourceParser.java
│       │                       │   └── http/
│       │                       │       ├── AbstractHttpResourceParser.java
│       │                       │       ├── AiHttpResourceParser.java
│       │                       │       ├── ConfigHttpResourceParser.java
│       │                       │       └── NamingHttpResourceParser.java
│       │                       ├── serveridentity/
│       │                       │   ├── DefaultChecker.java
│       │                       │   ├── ServerIdentity.java
│       │                       │   ├── ServerIdentityChecker.java
│       │                       │   ├── ServerIdentityCheckerHolder.java
│       │                       │   └── ServerIdentityResult.java
│       │                       └── util/
│       │                           ├── AuthHeaderUtil.java
│       │                           └── Loggers.java
│       └── test/
│           ├── java/
│           │   └── com/
│           │       └── alibaba/
│           │           └── nacos/
│           │               └── auth/
│           │                   ├── GrpcProtocolAuthServiceTest.java
│           │                   ├── HttpProtocolAuthServiceTest.java
│           │                   ├── config/
│           │                   │   ├── AuthErrorCodeTest.java
│           │                   │   └── NacosAuthConfigHolderTest.java
│           │                   ├── context/
│           │                   │   ├── GrpcIdentityContextBuilderTest.java
│           │                   │   └── HtppIdentityContextBuilderTest.java
│           │                   ├── mock/
│           │                   │   ├── MockAuthPluginService.java
│           │                   │   └── MockResourceParser.java
│           │                   ├── parser/
│           │                   │   ├── grpc/
│           │                   │   │   ├── AiGrpcResourceParserTest.java
│           │                   │   │   ├── ConfigGrpcResourceParserTest.java
│           │                   │   │   └── NamingGrpcResourceParserTest.java
│           │                   │   └── http/
│           │                   │       ├── AiHttpResourceParserTest.java
│           │                   │       ├── ConfigHttpResourceParserTest.java
│           │                   │       └── NamingHttpResourceParserTest.java
│           │                   ├── serveridentity/
│           │                   │   ├── ServerIdentityCheckerHolderTest.java
│           │                   │   └── ServerIdentityTest.java
│           │                   └── util/
│           │                       ├── AuthHeaderUtilTest.java
│           │                       └── LoggersTest.java
│           └── resources/
│               └── META-INF/
│                   └── services/
│                       └── com.alibaba.nacos.plugin.auth.spi.server.AuthPluginService
├── bootstrap/
│   ├── pom.xml
│   └── src/
│       └── main/
│           ├── java/
│           │   └── com/
│           │       └── alibaba/
│           │           └── nacos/
│           │               └── bootstrap/
│           │                   └── NacosBootstrap.java
│           └── resources/
│               └── application.properties
├── client/
│   ├── filter-config.json
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── alibaba/
│       │   │           └── nacos/
│       │   │               └── client/
│       │   │                   ├── ability/
│       │   │                   │   └── ClientAbilityControlManager.java
│       │   │                   ├── ai/
│       │   │                   │   ├── NacosAiService.java
│       │   │                   │   ├── cache/
│       │   │                   │   │   ├── NacosAgentCardCacheHolder.java
│       │   │                   │   │   ├── NacosMcpServerCacheHolder.java
│       │   │                   │   │   ├── NacosPromptCacheHolder.java
│       │   │                   │   │   └── NacosSkillCacheHolder.java
│       │   │                   │   ├── event/
│       │   │                   │   │   ├── AbstractAiListenerInvoker.java
│       │   │                   │   │   ├── AgentCardChangedEvent.java
│       │   │                   │   │   ├── AgentCardListenerInvoker.java
│       │   │                   │   │   ├── AiChangeNotifier.java
│       │   │                   │   │   ├── McpServerChangedEvent.java
│       │   │                   │   │   ├── McpServerListenerInvoker.java
│       │   │                   │   │   ├── PromptChangedEvent.java
│       │   │                   │   │   ├── PromptListenerInvoker.java
│       │   │                   │   │   ├── SkillChangedEvent.java
│       │   │                   │   │   └── SkillListenerInvoker.java
│       │   │                   │   ├── remote/
│       │   │                   │   │   ├── AiClientProxy.java
│       │   │                   │   │   ├── AiGrpcClient.java
│       │   │                   │   │   ├── AiHttpClientProxy.java
│       │   │                   │   │   └── redo/
│       │   │                   │   │       ├── AgentEndpointRedoData.java
│       │   │                   │   │       ├── AgentEndpointWrapper.java
│       │   │                   │   │       ├── AiGrpcRedoService.java
│       │   │                   │   │       ├── AiRedoScheduledTask.java
│       │   │                   │   │       ├── McpServerEndpoint.java
│       │   │                   │   │       └── McpServerEndpointRedoData.java
│       │   │                   │   └── utils/
│       │   │                   │       └── CacheKeyUtils.java
│       │   │                   ├── config/
│       │   │                   │   ├── NacosConfigService.java
│       │   │                   │   ├── common/
│       │   │                   │   │   ├── ConfigConstants.java
│       │   │                   │   │   └── GroupKey.java
│       │   │                   │   ├── filter/
│       │   │                   │   │   └── impl/
│       │   │                   │   │       ├── ConfigContext.java
│       │   │                   │   │       ├── ConfigEncryptionFilter.java
│       │   │                   │   │       ├── ConfigFilterChainManager.java
│       │   │                   │   │       ├── ConfigRequest.java
│       │   │                   │   │       └── ConfigResponse.java
│       │   │                   │   ├── http/
│       │   │                   │   │   ├── HttpAgent.java
│       │   │                   │   │   ├── MetricsHttpAgent.java
│       │   │                   │   │   └── ServerHttpAgent.java
│       │   │                   │   ├── impl/
│       │   │                   │   │   ├── AbstractConfigChangeParser.java
│       │   │                   │   │   ├── CacheData.java
│       │   │                   │   │   ├── ChangeNotifyBlockEvent.java
│       │   │                   │   │   ├── ClientFuzzyWatchNotifyRequestHandler.java
│       │   │                   │   │   ├── ClientWorker.java
│       │   │                   │   │   ├── ConfigChangeHandler.java
│       │   │                   │   │   ├── ConfigFuzzyWatchContext.java
│       │   │                   │   │   ├── ConfigFuzzyWatchGroupKeyHolder.java
│       │   │                   │   │   ├── ConfigFuzzyWatchLoadEvent.java
│       │   │                   │   │   ├── ConfigFuzzyWatchNotifyEvent.java
│       │   │                   │   │   ├── ConfigFuzzyWatcherWrapper.java
│       │   │                   │   │   ├── ConfigHttpClientManager.java
│       │   │                   │   │   ├── ConfigServerListManager.java
│       │   │                   │   │   ├── ConfigTransportClient.java
│       │   │                   │   │   ├── Limiter.java
│       │   │                   │   │   ├── LocalConfigInfoProcessor.java
│       │   │                   │   │   ├── LocalEncryptedDataKeyProcessor.java
│       │   │                   │   │   ├── PropertiesChangeParser.java
│       │   │                   │   │   └── YmlChangeParser.java
│       │   │                   │   ├── listener/
│       │   │                   │   │   └── impl/
│       │   │                   │   │       ├── AbstractConfigChangeListener.java
│       │   │                   │   │       └── PropertiesListener.java
│       │   │                   │   └── utils/
│       │   │                   │       ├── ContentUtils.java
│       │   │                   │       ├── JvmUtil.java
│       │   │                   │       ├── ParamUtils.java
│       │   │                   │       └── SnapShotSwitch.java
│       │   │                   ├── lock/
│       │   │                   │   ├── NacosLockService.java
│       │   │                   │   ├── core/
│       │   │                   │   │   ├── NLock.java
│       │   │                   │   │   └── NLockFactory.java
│       │   │                   │   └── remote/
│       │   │                   │       ├── AbstractLockClient.java
│       │   │                   │       ├── LockClient.java
│       │   │                   │       └── grpc/
│       │   │                   │           └── LockGrpcClient.java
│       │   │                   ├── logging/
│       │   │                   │   └── NacosLogging.java
│       │   │                   ├── monitor/
│       │   │                   │   └── MetricsMonitor.java
│       │   │                   ├── naming/
│       │   │                   │   ├── NacosNamingMaintainService.java
│       │   │                   │   ├── NacosNamingService.java
│       │   │                   │   ├── backups/
│       │   │                   │   │   ├── FailoverData.java
│       │   │                   │   │   ├── FailoverDataSource.java
│       │   │                   │   │   ├── FailoverReactor.java
│       │   │                   │   │   ├── FailoverSwitch.java
│       │   │                   │   │   ├── NamingFailoverData.java
│       │   │                   │   │   └── datasource/
│       │   │                   │   │       └── DiskFailoverDataSource.java
│       │   │                   │   ├── cache/
│       │   │                   │   │   ├── DiskCache.java
│       │   │                   │   │   ├── FuzzyWatchEventWatcherWrapper.java
│       │   │                   │   │   ├── InstancesDiffer.java
│       │   │                   │   │   ├── NamingFuzzyWatchContext.java
│       │   │                   │   │   ├── NamingFuzzyWatchServiceListHolder.java
│       │   │                   │   │   └── ServiceInfoHolder.java
│       │   │                   │   ├── core/
│       │   │                   │   │   ├── Balancer.java
│       │   │                   │   │   ├── NamingServerListManager.java
│       │   │                   │   │   ├── ProtectMode.java
│       │   │                   │   │   └── ServiceInfoUpdateService.java
│       │   │                   │   ├── event/
│       │   │                   │   │   ├── InstancesChangeEvent.java
│       │   │                   │   │   ├── InstancesChangeNotifier.java
│       │   │                   │   │   ├── InstancesDiff.java
│       │   │                   │   │   ├── NamingFuzzyWatchLoadEvent.java
│       │   │                   │   │   └── NamingFuzzyWatchNotifyEvent.java
│       │   │                   │   ├── listener/
│       │   │                   │   │   ├── AbstractNamingChangeListener.java
│       │   │                   │   │   └── NamingChangeEvent.java
│       │   │                   │   ├── remote/
│       │   │                   │   │   ├── AbstractNamingClientProxy.java
│       │   │                   │   │   ├── NamingClientProxy.java
│       │   │                   │   │   ├── NamingClientProxyDelegate.java
│       │   │                   │   │   ├── gprc/
│       │   │                   │   │   │   ├── NamingFuzzyWatchNotifyRequestHandler.java
│       │   │                   │   │   │   ├── NamingGrpcClientProxy.java
│       │   │                   │   │   │   ├── NamingPushRequestHandler.java
│       │   │                   │   │   │   └── redo/
│       │   │                   │   │   │       ├── NamingGrpcRedoService.java
│       │   │                   │   │   │       ├── RedoScheduledTask.java
│       │   │                   │   │   │       └── data/
│       │   │                   │   │   │           ├── BatchInstanceRedoData.java
│       │   │                   │   │   │           ├── InstanceRedoData.java
│       │   │                   │   │   │           ├── NamingRedoData.java
│       │   │                   │   │   │           └── SubscriberRedoData.java
│       │   │                   │   │   └── http/
│       │   │                   │   │       ├── NamingHttpClientManager.java
│       │   │                   │   │       └── NamingHttpClientProxy.java
│       │   │                   │   ├── selector/
│       │   │                   │   │   ├── DefaultNamingSelector.java
│       │   │                   │   │   ├── NamingListenerInvoker.java
│       │   │                   │   │   ├── NamingSelectorFactory.java
│       │   │                   │   │   ├── NamingSelectorWrapper.java
│       │   │                   │   │   └── ServiceInfoContext.java
│       │   │                   │   └── utils/
│       │   │                   │       ├── CacheDirUtil.java
│       │   │                   │       ├── Chooser.java
│       │   │                   │       ├── GenericPoller.java
│       │   │                   │       ├── InitUtils.java
│       │   │                   │       ├── Pair.java
│       │   │                   │       ├── Poller.java
│       │   │                   │       └── UtilAndComs.java
│       │   │                   ├── redo/
│       │   │                   │   ├── data/
│       │   │                   │   │   └── RedoData.java
│       │   │                   │   └── service/
│       │   │                   │       ├── AbstractRedoService.java
│       │   │                   │       └── AbstractRedoTask.java
│       │   │                   ├── security/
│       │   │                   │   └── SecurityProxy.java
│       │   │                   ├── selector/
│       │   │                   │   ├── AbstractSelectorWrapper.java
│       │   │                   │   ├── ListenerInvoker.java
│       │   │                   │   └── SelectorManager.java
│       │   │                   └── utils/
│       │   │                       ├── ConcurrentDiskUtil.java
│       │   │                       ├── EnvUtil.java
│       │   │                       ├── LogUtils.java
│       │   │                       ├── ParamUtil.java
│       │   │                       ├── PreInitUtils.java
│       │   │                       └── ValidatorUtils.java
│       │   └── resources/
│       │       └── META-INF/
│       │           ├── native-image/
│       │           │   └── com.alibaba.nacos/
│       │           │       └── nacos-client/
│       │           │           ├── jni-config.json
│       │           │           ├── predefined-classes-config.json
│       │           │           ├── proxy-config.json
│       │           │           ├── reflect-config.json
│       │           │           ├── resource-config.json
│       │           │           └── serialization-config.json
│       │           └── services/
│       │               ├── com.alibaba.nacos.api.config.filter.IConfigFilter
│       │               ├── com.alibaba.nacos.client.naming.backups.FailoverDataSource
│       │               └── com.alibaba.nacos.common.ability.AbstractAbilityControlManager
│       └── test/
│           ├── java/
│           │   └── com/
│           │       └── alibaba/
│           │           └── nacos/
│           │               └── client/
│           │                   ├── ability/
│           │                   │   ├── AbilityTest.java
│           │                   │   └── ClientAbilityControlManagerTest.java
│           │                   ├── ai/
│           │                   │   ├── NacosAiServiceTest.java
│           │                   │   ├── cache/
│           │                   │   │   ├── NacosMcpServerCacheHolderTest.java
│           │                   │   │   └── NacosPromptCacheHolderTest.java
│           │                   │   ├── event/
│           │                   │   │   ├── AiChangeNotifierPromptTest.java
│           │                   │   │   ├── AiChangeNotifierTest.java
│           │                   │   │   └── McpServerListenerInvokerTest.java
│           │                   │   ├── remote/
│           │                   │   │   ├── AiGrpcClientTest.java
│           │                   │   │   ├── AiHttpClientProxyTest.java
│           │                   │   │   └── redo/
│           │                   │   │       ├── AiGrpcRedoServiceTest.java
│           │                   │   │       ├── AiRedoScheduledTaskTest.java
│           │                   │   │       ├── McpServerEndpointRedoDataTest.java
│           │                   │   │       └── McpServerEndpointTest.java
│           │                   │   └── utils/
│           │                   │       └── CacheKeyUtilsTest.java
│           │                   ├── config/
│           │                   │   ├── NacosConfigServiceTest.java
│           │                   │   ├── common/
│           │                   │   │   └── GroupKeyTest.java
│           │                   │   ├── filter/
│           │                   │   │   └── impl/
│           │                   │   │       ├── ConfigContextTest.java
│           │                   │   │       ├── ConfigEncryptionFilterTest.java
│           │                   │   │       ├── ConfigEncryptionFilterTest1.java
│           │                   │   │       ├── ConfigFilterChainManagerTest.java
│           │                   │   │       ├── ConfigFilterChainTest.java
│           │                   │   │       ├── ConfigRequestTest.java
│           │                   │   │       ├── ConfigResponseTest.java
│           │                   │   │       ├── DemoFilter1.java
│           │                   │   │       └── DemoFilter2.java
│           │                   │   ├── http/
│           │                   │   │   ├── MetricsHttpAgentTest.java
│           │                   │   │   └── ServerHttpAgentTest.java
│           │                   │   ├── impl/
│           │                   │   │   ├── CacheDataTest.java
│           │                   │   │   ├── ClientWorkerTest.java
│           │                   │   │   ├── ConfigChangeHandlerTest.java
│           │                   │   │   ├── ConfigFuzzyWatchGroupKeyHolderTest.java
│           │                   │   │   ├── ConfigHttpClientManagerTest.java
│           │                   │   │   ├── ConfigServerListManagerTest.java
│           │                   │   │   ├── LimiterTest.java
│           │                   │   │   ├── PropertiesChangeParserTest.java
│           │                   │   │   └── YmlChangeParserTest.java
│           │                   │   ├── listener/
│           │                   │   │   └── impl/
│           │                   │   │       ├── AbstractConfigChangeListenerTest.java
│           │                   │   │       └── PropertiesListenerTest.java
│           │                   │   └── utils/
│           │                   │       ├── ContentUtilsTest.java
│           │                   │       ├── JvmUtilTest.java
│           │                   │       ├── ParamUtilsTest.java
│           │                   │       └── SnapShotSwitchTest.java
│           │                   ├── lock/
│           │                   │   ├── NacosLockServiceTest.java
│           │                   │   └── remote/
│           │                   │       └── grpc/
│           │                   │           └── LockGrpcClientTest.java
│           │                   ├── logging/
│           │                   │   └── NacosLoggingTest.java
│           │                   ├── naming/
│           │                   │   ├── NacosNamingMaintainServiceTest.java
│           │                   │   ├── NacosNamingServiceTest.java
│           │                   │   ├── backups/
│           │                   │   │   ├── FailoverReactorTest.java
│           │                   │   │   └── datasource/
│           │                   │   │       └── DiskFailoverDataSourceTest.java
│           │                   │   ├── cache/
│           │                   │   │   ├── DiskCacheTest.java
│           │                   │   │   ├── NamingFuzzyWatchServiceListHolderTest.java
│           │                   │   │   └── ServiceInfoHolderTest.java
│           │                   │   ├── core/
│           │                   │   │   ├── BalancerTest.java
│           │                   │   │   ├── NamingServerListManagerTest.java
│           │                   │   │   ├── ProtectModeTest.java
│           │                   │   │   └── ServiceInfoUpdateServiceTest.java
│           │                   │   ├── event/
│           │                   │   │   ├── InstancesChangeEventTest.java
│           │                   │   │   ├── InstancesChangeNotifierTest.java
│           │                   │   │   └── InstancesDiffTest.java
│           │                   │   ├── listener/
│           │                   │   │   └── NamingChangeEventTest.java
│           │                   │   ├── remote/
│           │                   │   │   ├── AbstractNamingClientProxyTest.java
│           │                   │   │   ├── NamingClientProxyDelegateTest.java
│           │                   │   │   ├── TestConnection.java
│           │                   │   │   ├── gprc/
│           │                   │   │   │   ├── NamingGrpcClientProxyTest.java
│           │                   │   │   │   ├── NamingPushRequestHandlerTest.java
│           │                   │   │   │   └── redo/
│           │                   │   │   │       ├── NamingGrpcRedoServiceTest.java
│           │                   │   │   │       ├── RedoScheduledTaskTest.java
│           │                   │   │   │       └── data/
│           │                   │   │   │           ├── BatchInstanceRedoDataTest.java
│           │                   │   │   │           └── InstanceRedoDataTest.java
│           │                   │   │   └── http/
│           │                   │   │       ├── NamingHttpClientManagerTest.java
│           │                   │   │       └── NamingHttpClientProxyTest.java
│           │                   │   ├── selector/
│           │                   │   │   ├── DefaultNamingSelectorTest.java
│           │                   │   │   ├── NamingListenerInvokerTest.java
│           │                   │   │   ├── NamingSelectorFactoryTest.java
│           │                   │   │   ├── NamingSelectorWrapperTest.java
│           │                   │   │   └── ServiceInfoContextTest.java
│           │                   │   └── utils/
│           │                   │       ├── CacheDirUtilTest.java
│           │                   │       ├── ChooserTest.java
│           │                   │       ├── ConcurrentDiskUtilTest.java
│           │                   │       ├── GenericPollerTest.java
│           │                   │       ├── InitUtilsTest.java
│           │                   │       └── PairTest.java
│           │                   ├── redo/
│           │                   │   ├── data/
│           │                   │   │   └── RedoDataTest.java
│           │                   │   └── service/
│           │                   │       ├── AbstractRedoServiceTest.java
│           │                   │       └── AbstractRedoTaskTest.java
│           │                   ├── security/
│           │                   │   └── SecurityProxyTest.java
│           │                   ├── selector/
│           │                   │   ├── AbstractSelectorWrapperTest.java
│           │                   │   └── SelectorManagerTest.java
│           │                   └── utils/
│           │                       ├── EnvUtilTest.java
│           │                       ├── LogUtilsTest.java
│           │                       ├── ParamUtilTest.java
│           │                       ├── PreInitUtilsTest.java
│           │                       ├── StringUtilsTest.java
│           │                       └── ValidatorUtilsTest.java
│           └── resources/
│               ├── disk_cache_test/
│               │   ├── error%40%40json%40%40file
│               │   ├── ignored%40%40not_json%40%40file
│               │   ├── invalid_dir/
│               │   │   └── invalid_file
│               │   ├── legal%40%40no_name%40%40file
│               │   └── legal%40%40with_name%40%40file
│               └── failover_test/
│                   ├── disabled/
│                   │   └── 00-00---000-VIPSRV_FAILOVER_SWITCH-000---00-00
│                   └── enabled/
│                       ├── 00-00---000-VIPSRV_FAILOVER_SWITCH-000---00-00
│                       ├── invalid_dir/
│                       │   └── invalid_file
│                       └── legal%40%40with_name%40%40file
├── client-basic/
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── alibaba/
│       │   │           └── nacos/
│       │   │               └── client/
│       │   │                   ├── address/
│       │   │                   │   ├── AbstractServerListManager.java
│       │   │                   │   ├── AbstractServerListProvider.java
│       │   │                   │   ├── EndpointServerListProvider.java
│       │   │                   │   ├── PropertiesListProvider.java
│       │   │                   │   ├── ServerListChangeEvent.java
│       │   │                   │   └── ServerListProvider.java
│       │   │                   ├── auth/
│       │   │                   │   ├── impl/
│       │   │                   │   │   ├── NacosAuthLoginConstant.java
│       │   │                   │   │   ├── NacosClientAuthServiceImpl.java
│       │   │                   │   │   └── process/
│       │   │                   │   │       ├── HttpLoginProcessor.java
│       │   │                   │   │       └── LoginProcessor.java
│       │   │                   │   └── ram/
│       │   │                   │       ├── RamClientAuthServiceImpl.java
│       │   │                   │       ├── RamConstants.java
│       │   │                   │       ├── RamContext.java
│       │   │                   │       ├── identify/
│       │   │                   │       │   ├── CredentialListener.java
│       │   │                   │       │   ├── CredentialService.java
│       │   │                   │       │   ├── CredentialWatcher.java
│       │   │                   │       │   ├── Credentials.java
│       │   │                   │       │   ├── IdentifyConstants.java
│       │   │                   │       │   ├── SpasCredential.java
│       │   │                   │       │   ├── SpasCredentialLoader.java
│       │   │                   │       │   ├── StsConfig.java
│       │   │                   │       │   ├── StsCredential.java
│       │   │                   │       │   └── StsCredentialHolder.java
│       │   │                   │       ├── injector/
│       │   │                   │       │   ├── AbstractResourceInjector.java
│       │   │                   │       │   ├── AiResourceInjector.java
│       │   │                   │       │   ├── ConfigResourceInjector.java
│       │   │                   │       │   ├── LockResourceInjector.java
│       │   │                   │       │   └── NamingResourceInjector.java
│       │   │                   │       └── utils/
│       │   │                   │           ├── CalculateV4SigningKeyUtil.java
│       │   │                   │           ├── RamUtil.java
│       │   │                   │           ├── SignUtil.java
│       │   │                   │           └── SpasAdapter.java
│       │   │                   ├── constant/
│       │   │                   │   └── Constants.java
│       │   │                   ├── env/
│       │   │                   │   ├── AbstractPropertySource.java
│       │   │                   │   ├── JvmArgsPropertySource.java
│       │   │                   │   ├── NacosClientProperties.java
│       │   │                   │   ├── PropertiesPropertySource.java
│       │   │                   │   ├── SearchableProperties.java
│       │   │                   │   ├── SourceType.java
│       │   │                   │   ├── SystemEnvPropertySource.java
│       │   │                   │   └── convert/
│       │   │                   │       ├── AbstractPropertyConverter.java
│       │   │                   │       ├── BooleanConverter.java
│       │   │                   │       ├── CompositeConverter.java
│       │   │                   │       ├── IntegerConverter.java
│       │   │                   │       └── LongConverter.java
│       │   │                   ├── remote/
│       │   │                   │   └── HttpClientManager.java
│       │   │                   └── utils/
│       │   │                       ├── AppNameUtils.java
│       │   │                       ├── ClientBasicParamUtil.java
│       │   │                       ├── ContextPathUtil.java
│       │   │                       ├── TemplateUtils.java
│       │   │                       └── TenantUtil.java
│       │   └── resources/
│       │       └── META-INF/
│       │           └── services/
│       │               ├── com.alibaba.nacos.client.address.ServerListProvider
│       │               └── com.alibaba.nacos.plugin.auth.spi.client.AbstractClientAuthService
│       └── test/
│           ├── java/
│           │   └── com/
│           │       └── alibaba/
│           │           └── nacos/
│           │               └── client/
│           │                   ├── address/
│           │                   │   ├── AbstractServerListManagerTest.java
│           │                   │   ├── EndpointServerListProviderTest.java
│           │                   │   ├── PropertiesListProviderTest.java
│           │                   │   └── mock/
│           │                   │       └── MockServerListProvider.java
│           │                   ├── auth/
│           │                   │   ├── impl/
│           │                   │   │   ├── NacosClientAuthServiceImplTest.java
│           │                   │   │   └── process/
│           │                   │   │       └── HttpLoginProcessorTest.java
│           │                   │   └── ram/
│           │                   │       ├── RamClientAuthServiceImplTest.java
│           │                   │       ├── identify/
│           │                   │       │   ├── CredentialServiceTest.java
│           │                   │       │   ├── CredentialWatcherTest.java
│           │                   │       │   ├── CredentialsTest.java
│           │                   │       │   ├── StsConfigTest.java
│           │                   │       │   └── StsCredentialHolderTest.java
│           │                   │       ├── injector/
│           │                   │       │   ├── AbstractResourceInjectorTest.java
│           │                   │       │   ├── ConfigResourceInjectorTest.java
│           │                   │       │   └── NamingResourceInjectorTest.java
│           │                   │       └── utils/
│           │                   │           ├── CalculateV4SigningKeyUtilTest.java
│           │                   │           ├── RamUtilTest.java
│           │                   │           ├── SignUtilTest.java
│           │                   │           └── SpasAdapterTest.java
│           │                   ├── env/
│           │                   │   ├── NacosClientPropertiesTest.java
│           │                   │   ├── SearchablePropertiesTest.java
│           │                   │   ├── SystemEnvPropertySourceTest.java
│           │                   │   └── convert/
│           │                   │       └── CompositeConverterTest.java
│           │                   └── utils/
│           │                       ├── AppNameUtilsTest.java
│           │                       ├── ClientBasicParamUtilTest.java
│           │                       ├── ContextPathUtilTest.java
│           │                       ├── TemplateUtilsTest.java
│           │                       └── TenantUtilTest.java
│           └── resources/
│               ├── META-INF/
│               │   └── services/
│               │       └── com.alibaba.nacos.client.address.ServerListProvider
│               ├── spas.identity
│               ├── spas_docker.identity
│               ├── spas_invalid.identity
│               └── spas_modified.identity
├── cmdb/
│   ├── pom.xml
│   └── src/
│       └── main/
│           └── java/
│               └── com/
│                   └── alibaba/
│                       └── nacos/
│                           └── cmdb/
│                               ├── CmdbApp.java
│                               ├── controllers/
│                               │   └── OperationController.java
│                               ├── core/
│                               │   └── SwitchAndOptions.java
│                               ├── memory/
│                               │   └── CmdbProvider.java
│                               ├── service/
│                               │   ├── CmdbReader.java
│                               │   └── CmdbWriter.java
│                               └── utils/
│                                   ├── CmdbExecutor.java
│                                   ├── Loggers.java
│                                   └── UtilsAndCommons.java
├── codecov.yml
├── common/
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── alibaba/
│       │   │           └── nacos/
│       │   │               └── common/
│       │   │                   ├── Beta.java
│       │   │                   ├── JustForTest.java
│       │   │                   ├── NotThreadSafe.java
│       │   │                   ├── ability/
│       │   │                   │   ├── AbstractAbilityControlManager.java
│       │   │                   │   └── discover/
│       │   │                   │       └── NacosAbilityManagerHolder.java
│       │   │                   ├── codec/
│       │   │                   │   └── Base64.java
│       │   │                   ├── constant/
│       │   │                   │   ├── HttpHeaderConsts.java
│       │   │                   │   ├── RequestUrlConstants.java
│       │   │                   │   ├── ResponseHandlerType.java
│       │   │                   │   └── Symbols.java
│       │   │                   ├── event/
│       │   │                   │   └── ServerConfigChangeEvent.java
│       │   │                   ├── executor/
│       │   │                   │   ├── ExecutorFactory.java
│       │   │                   │   ├── NameThreadFactory.java
│       │   │                   │   └── ThreadPoolManager.java
│       │   │                   ├── http/
│       │   │                   │   ├── AbstractApacheHttpClientFactory.java
│       │   │                   │   ├── AbstractHttpClientFactory.java
│       │   │                   │   ├── BaseHttpMethod.java
│       │   │                   │   ├── Callback.java
│       │   │                   │   ├── DefaultHttpClientFactory.java
│       │   │                   │   ├── HttpClientBeanHolder.java
│       │   │                   │   ├── HttpClientConfig.java
│       │   │                   │   ├── HttpClientFactory.java
│       │   │                   │   ├── HttpRestResult.java
│       │   │                   │   ├── HttpUtils.java
│       │   │                   │   ├── client/
│       │   │                   │   │   ├── AbstractNacosRestTemplate.java
│       │   │                   │   │   ├── HttpClientRequestInterceptor.java
│       │   │                   │   │   ├── InterceptingHttpClientRequest.java
│       │   │                   │   │   ├── NacosAsyncRestTemplate.java
│       │   │                   │   │   ├── NacosRestTemplate.java
│       │   │                   │   │   ├── handler/
│       │   │                   │   │   │   ├── AbstractResponseHandler.java
│       │   │                   │   │   │   ├── BeanResponseHandler.java
│       │   │                   │   │   │   ├── ResponseHandler.java
│       │   │                   │   │   │   ├── RestResultResponseHandler.java
│       │   │                   │   │   │   └── StringResponseHandler.java
│       │   │                   │   │   ├── request/
│       │   │                   │   │   │   ├── AsyncHttpClientRequest.java
│       │   │                   │   │   │   ├── DefaultAsyncHttpClientRequest.java
│       │   │                   │   │   │   ├── DefaultHttpClientRequest.java
│       │   │                   │   │   │   ├── HttpClientRequest.java
│       │   │                   │   │   │   └── JdkHttpClientRequest.java
│       │   │                   │   │   └── response/
│       │   │                   │   │       ├── DefaultClientHttpResponse.java
│       │   │                   │   │       ├── HttpClientResponse.java
│       │   │                   │   │       └── JdkHttpClientResponse.java
│       │   │                   │   └── param/
│       │   │                   │       ├── Header.java
│       │   │                   │       ├── MediaType.java
│       │   │                   │       └── Query.java
│       │   │                   ├── labels/
│       │   │                   │   ├── LabelsCollector.java
│       │   │                   │   ├── LabelsCollectorManager.java
│       │   │                   │   └── impl/
│       │   │                   │       ├── DefaultLabelsCollector.java
│       │   │                   │       └── DefaultLabelsCollectorManager.java
│       │   │                   ├── lifecycle/
│       │   │                   │   └── Closeable.java
│       │   │                   ├── logging/
│       │   │                   │   ├── NacosLoggingAdapter.java
│       │   │                   │   ├── NacosLoggingAdapterBuilder.java
│       │   │                   │   └── NacosLoggingProperties.java
│       │   │                   ├── model/
│       │   │                   │   ├── RequestHttpEntity.java
│       │   │                   │   ├── RestResult.java
│       │   │                   │   ├── RestResultUtils.java
│       │   │                   │   └── core/
│       │   │                   │       └── IResultCode.java
│       │   │                   ├── notify/
│       │   │                   │   ├── DefaultPublisher.java
│       │   │                   │   ├── DefaultSharePublisher.java
│       │   │                   │   ├── Event.java
│       │   │                   │   ├── EventPublisher.java
│       │   │                   │   ├── EventPublisherFactory.java
│       │   │                   │   ├── NotifyCenter.java
│       │   │                   │   ├── ShardedEventPublisher.java
│       │   │                   │   ├── SlowEvent.java
│       │   │                   │   └── listener/
│       │   │                   │       ├── SmartSubscriber.java
│       │   │                   │       └── Subscriber.java
│       │   │                   ├── package-info.java
│       │   │                   ├── packagescan/
│       │   │                   │   ├── DefaultPackageScan.java
│       │   │                   │   ├── PackageScan.java
│       │   │                   │   ├── classreading/
│       │   │                   │   │   ├── ClassReader.java
│       │   │                   │   │   └── Symbol.java
│       │   │                   │   ├── resource/
│       │   │                   │   │   ├── AbstractFileResolvingResource.java
│       │   │                   │   │   ├── AbstractResource.java
│       │   │                   │   │   ├── AntPathMatcher.java
│       │   │                   │   │   ├── ByteArrayResource.java
│       │   │                   │   │   ├── ClassPathResource.java
│       │   │                   │   │   ├── ContextResource.java
│       │   │                   │   │   ├── DefaultResourceLoader.java
│       │   │                   │   │   ├── FileSystemResource.java
│       │   │                   │   │   ├── FileUrlResource.java
│       │   │                   │   │   ├── InputStreamResource.java
│       │   │                   │   │   ├── InputStreamSource.java
│       │   │                   │   │   ├── PathMatchingResourcePatternResolver.java
│       │   │                   │   │   ├── PathResource.java
│       │   │                   │   │   ├── ProtocolResolver.java
│       │   │                   │   │   ├── Resource.java
│       │   │                   │   │   ├── ResourceLoader.java
│       │   │                   │   │   ├── ResourcePatternResolver.java
│       │   │                   │   │   ├── UrlResource.java
│       │   │                   │   │   ├── VfsPatternUtils.java
│       │   │                   │   │   ├── VfsResource.java
│       │   │                   │   │   ├── VfsUtils.java
│       │   │                   │   │   └── WritableResource.java
│       │   │                   │   └── util/
│       │   │                   │       ├── AbstractAssert.java
│       │   │                   │       ├── AbstractObjectUtils.java
│       │   │                   │       ├── NestedExceptionUtils.java
│       │   │                   │       ├── NestedIoException.java
│       │   │                   │       ├── PathMatcher.java
│       │   │                   │       └── ResourceUtils.java
│       │   │                   ├── paramcheck/
│       │   │                   │   ├── AbstractParamChecker.java
│       │   │                   │   ├── DefaultParamChecker.java
│       │   │                   │   ├── ParamCheckResponse.java
│       │   │                   │   ├── ParamCheckRule.java
│       │   │                   │   ├── ParamCheckerManager.java
│       │   │                   │   └── ParamInfo.java
│       │   │                   ├── pathencoder/
│       │   │                   │   ├── PathEncoder.java
│       │   │                   │   ├── PathEncoderManager.java
│       │   │                   │   └── impl/
│       │   │                   │       └── WindowsEncoder.java
│       │   │                   ├── remote/
│       │   │                   │   ├── ConnectionType.java
│       │   │                   │   ├── PayloadRegistry.java
│       │   │                   │   ├── TlsConfig.java
│       │   │                   │   ├── client/
│       │   │                   │   │   ├── Connection.java
│       │   │                   │   │   ├── ConnectionEventListener.java
│       │   │                   │   │   ├── RpcClient.java
│       │   │                   │   │   ├── RpcClientConfig.java
│       │   │                   │   │   ├── RpcClientConfigFactory.java
│       │   │                   │   │   ├── RpcClientFactory.java
│       │   │                   │   │   ├── RpcClientStatus.java
│       │   │                   │   │   ├── RpcClientTlsConfig.java
│       │   │                   │   │   ├── RpcClientTlsConfigFactory.java
│       │   │                   │   │   ├── RpcConfigFactory.java
│       │   │                   │   │   ├── RpcConstants.java
│       │   │                   │   │   ├── RpcTlsConfigFactory.java
│       │   │                   │   │   ├── ServerListFactory.java
│       │   │                   │   │   ├── ServerRequestHandler.java
│       │   │                   │   │   └── grpc/
│       │   │                   │   │       ├── DefaultGrpcClientConfig.java
│       │   │                   │   │       ├── GrpcClient.java
│       │   │                   │   │       ├── GrpcClientConfig.java
│       │   │                   │   │       ├── GrpcClusterClient.java
│       │   │                   │   │       ├── GrpcConnection.java
│       │   │                   │   │       ├── GrpcConstants.java
│       │   │                   │   │       ├── GrpcSdkClient.java
│       │   │                   │   │       └── GrpcUtils.java
│       │   │                   │   └── exception/
│       │   │                   │       ├── ConnectionAlreadyClosedException.java
│       │   │                   │       ├── ConnectionBusyException.java
│       │   │                   │       └── RemoteException.java
│       │   │                   ├── spi/
│       │   │                   │   ├── NacosServiceLoader.java
│       │   │                   │   └── ServiceLoaderException.java
│       │   │                   ├── task/
│       │   │                   │   ├── AbstractDelayTask.java
│       │   │                   │   ├── AbstractExecuteTask.java
│       │   │                   │   ├── BatchTaskCounter.java
│       │   │                   │   ├── NacosTask.java
│       │   │                   │   ├── NacosTaskProcessor.java
│       │   │                   │   └── engine/
│       │   │                   │       ├── AbstractNacosTaskExecuteEngine.java
│       │   │                   │       ├── NacosDelayTaskExecuteEngine.java
│       │   │                   │       ├── NacosExecuteTaskExecuteEngine.java
│       │   │                   │       ├── NacosTaskExecuteEngine.java
│       │   │                   │       └── TaskExecuteWorker.java
│       │   │                   ├── tls/
│       │   │                   │   ├── SelfHostnameVerifier.java
│       │   │                   │   ├── SelfTrustManager.java
│       │   │                   │   ├── TlsFileWatcher.java
│       │   │                   │   ├── TlsHelper.java
│       │   │                   │   └── TlsSystemConfig.java
│       │   │                   ├── trace/
│       │   │                   │   ├── DeregisterInstanceReason.java
│       │   │                   │   ├── HealthCheckType.java
│       │   │                   │   ├── event/
│       │   │                   │   │   ├── TraceEvent.java
│       │   │                   │   │   └── naming/
│       │   │                   │   │       ├── BatchRegisterInstanceTraceEvent.java
│       │   │                   │   │       ├── DeregisterInstanceTraceEvent.java
│       │   │                   │   │       ├── DeregisterServiceTraceEvent.java
│       │   │                   │   │       ├── HealthStateChangeTraceEvent.java
│       │   │                   │   │       ├── NamingTraceEvent.java
│       │   │                   │   │       ├── PushServiceTraceEvent.java
│       │   │                   │   │       ├── RegisterInstanceTraceEvent.java
│       │   │                   │   │       ├── RegisterServiceTraceEvent.java
│       │   │                   │   │       ├── SubscribeServiceTraceEvent.java
│       │   │                   │   │       ├── UnsubscribeServiceTraceEvent.java
│       │   │                   │   │       ├── UpdateInstanceTraceEvent.java
│       │   │                   │   │       └── UpdateServiceTraceEvent.java
│       │   │                   │   └── publisher/
│       │   │                   │       ├── TraceEventPublisher.java
│       │   │                   │       └── TraceEventPublisherFactory.java
│       │   │                   └── utils/
│       │   │                       ├── ArrayUtils.java
│       │   │                       ├── ByteUtils.java
│       │   │                       ├── ClassUtils.java
│       │   │                       ├── CollectionUtils.java
│       │   │                       ├── ConcurrentHashSet.java
│       │   │                       ├── ConnLabelsUtils.java
│       │   │                       ├── ConvertUtils.java
│       │   │                       ├── DateFormatUtils.java
│       │   │                       ├── ExceptionUtil.java
│       │   │                       ├── FuzzyGroupKeyPattern.java
│       │   │                       ├── HttpMethod.java
│       │   │                       ├── InetAddressValidator.java
│       │   │                       ├── InternetAddressUtil.java
│       │   │                       ├── IoUtils.java
│       │   │                       ├── JacksonUtils.java
│       │   │                       ├── LoggerUtils.java
│       │   │                       ├── MD5Utils.java
│       │   │                       ├── MapUtil.java
│       │   │                       ├── NamespaceUtil.java
│       │   │                       ├── NumberUtils.java
│       │   │                       ├── Observable.java
│       │   │                       ├── Observer.java
│       │   │                       ├── Pair.java
│       │   │                       ├── Preconditions.java
│       │   │                       ├── PropertyUtils.java
│       │   │                       ├── RandomUtils.java
│       │   │                       ├── ReflectUtils.java
│       │   │                       ├── ResourceUtils.java
│       │   │                       ├── StringUtils.java
│       │   │                       ├── ThreadFactoryBuilder.java
│       │   │                       ├── ThreadUtils.java
│       │   │                       ├── TlsTypeResolve.java
│       │   │                       ├── TypeUtils.java
│       │   │                       ├── UuidUtils.java
│       │   │                       └── VersionUtils.java
│       │   └── resources/
│       │       ├── META-INF/
│       │       │   └── services/
│       │       │       ├── com.alibaba.nacos.common.labels.LabelsCollector
│       │       │       ├── com.alibaba.nacos.common.paramcheck.AbstractParamChecker
│       │       │       └── com.alibaba.nacos.common.pathencoder.PathEncoder
│       │       └── nacos-version.txt
│       └── test/
│           ├── java/
│           │   ├── ClassUtilsTestMockClass.java
│           │   └── com/
│           │       └── alibaba/
│           │           └── nacos/
│           │               └── common/
│           │                   ├── AppTest.java
│           │                   ├── ability/
│           │                   │   ├── AbstractAbilityControlManagerTest.java
│           │                   │   ├── MockAbilityPostProcessor.java
│           │                   │   └── discover/
│           │                   │       ├── HigherMockAbilityManager.java
│           │                   │       ├── LowerMockAbilityManager.java
│           │                   │       └── NacosAbilityManagerHolderTest.java
│           │                   ├── codec/
│           │                   │   └── Base64Test.java
│           │                   ├── event/
│           │                   │   └── ServerConfigChangeEventTest.java
│           │                   ├── executor/
│           │                   │   ├── ExecutorFactoryTest.java
│           │                   │   ├── NameThreadFactoryTest.java
│           │                   │   └── ThreadPoolManagerTest.java
│           │                   ├── http/
│           │                   │   ├── AbstractApacheHttpClientFactoryTest.java
│           │                   │   ├── AbstractHttpClientFactoryTest.java
│           │                   │   ├── BaseHttpMethodTest.java
│           │                   │   ├── HttpClientBeanHolderTest.java
│           │                   │   ├── HttpClientConfigTest.java
│           │                   │   ├── HttpRestResultTest.java
│           │                   │   ├── HttpUtilsTest.java
│           │                   │   ├── client/
│           │                   │   │   ├── AbstractNacosRestTemplateTest.java
│           │                   │   │   ├── InterceptingHttpClientRequestTest.java
│           │                   │   │   ├── NacosAsyncRestTemplateTest.java
│           │                   │   │   ├── NacosRestTemplateTest.java
│           │                   │   │   ├── handler/
│           │                   │   │   │   ├── BeanResponseHandlerTest.java
│           │                   │   │   │   └── RestResultResponseHandlerTest.java
│           │                   │   │   ├── request/
│           │                   │   │   │   ├── DefaultAsyncHttpClientRequestTest.java
│           │                   │   │   │   ├── DefaultHttpClientRequestTest.java
│           │                   │   │   │   └── JdkHttpClientRequestTest.java
│           │                   │   │   └── response/
│           │                   │   │       ├── DefaultClientHttpResponseTest.java
│           │                   │   │       └── JdkClientHttpResponseTest.java
│           │                   │   └── param/
│           │                   │       ├── HeaderTest.java
│           │                   │       ├── MediaTypeTest.java
│           │                   │       └── QueryTest.java
│           │                   ├── labels/
│           │                   │   └── impl/
│           │                   │       ├── DefaultLabelsCollectorManagerTest.java
│           │                   │       ├── Test1LabelsCollector.java
│           │                   │       └── Test2LabelsCollector.java
│           │                   ├── logging/
│           │                   │   └── NacosLoggingPropertiesTest.java
│           │                   ├── model/
│           │                   │   ├── RequestHttpEntityTest.java
│           │                   │   ├── RestResultTest.java
│           │                   │   └── RestResultUtilsTest.java
│           │                   ├── notify/
│           │                   │   ├── DefaultPublisherTest.java
│           │                   │   ├── DefaultSharePublisherTest.java
│           │                   │   └── NotifyCenterTest.java
│           │                   ├── packagescan/
│           │                   │   ├── DefaultPackageScanTest.java
│           │                   │   └── mock/
│           │                   │       ├── AnnotationClass.java
│           │                   │       ├── MockClass.java
│           │                   │       ├── NoAnnotationClass.java
│           │                   │       └── TestScan.java
│           │                   ├── paramcheck/
│           │                   │   ├── DefaultParamCheckerTest.java
│           │                   │   ├── MockParamChecker.java
│           │                   │   └── ParamCheckerManagerTest.java
│           │                   ├── pathencoder/
│           │                   │   ├── PathEncoderManagerTest.java
│           │                   │   └── WindowsEncoderTest.java
│           │                   ├── remote/
│           │                   │   ├── ConnectionTypeTest.java
│           │                   │   ├── PayloadRegistryTest.java
│           │                   │   ├── TlsConfigTest.java
│           │                   │   ├── client/
│           │                   │   │   ├── ConnectionTest.java
│           │                   │   │   ├── RpcClientConfigFactoryTest.java
│           │                   │   │   ├── RpcClientFactoryTest.java
│           │                   │   │   ├── RpcClientTest.java
│           │                   │   │   ├── RpcClientTlsConfigTest.java
│           │                   │   │   ├── RpcClusterClientTlsConfigTest.java
│           │                   │   │   ├── RpcConstantsTest.java
│           │                   │   │   └── grpc/
│           │                   │   │       ├── DefaultGrpcClientConfigTest.java
│           │                   │   │       ├── GrpcClientTest.java
│           │                   │   │       ├── GrpcClientTlsTest.java
│           │                   │   │       ├── GrpcClusterClientTest.java
│           │                   │   │       ├── GrpcConnectionTest.java
│           │                   │   │       ├── GrpcConstantsTest.java
│           │                   │   │       ├── GrpcSdkClientTest.java
│           │                   │   │       └── GrpcUtilsTest.java
│           │                   │   └── exception/
│           │                   │       └── RemoteExceptionTest.java
│           │                   ├── spi/
│           │                   │   ├── NacosServiceLoaderTest.java
│           │                   │   ├── SpiTestImpl.java
│           │                   │   └── SpiTestInterface.java
│           │                   ├── task/
│           │                   │   └── engine/
│           │                   │       ├── NacosDelayTaskExecuteEngineTest.java
│           │                   │       └── NacosExecuteTaskExecuteEngineTest.java
│           │                   ├── tls/
│           │                   │   ├── SelfHostnameVerifierTest.java
│           │                   │   ├── SelfTrustManagerTest.java
│           │                   │   ├── TlsFileWatcherTest.java
│           │                   │   └── TlsHelperTest.java
│           │                   ├── trace/
│           │                   │   ├── event/
│           │                   │   │   └── naming/
│           │                   │   │       ├── HealthStateChangeTraceEventTest.java
│           │                   │   │       ├── InstanceTraceEventTest.java
│           │                   │   │       ├── NamingTraceEventTest.java
│           │                   │   │       ├── ServiceTraceEventTest.java
│           │                   │   │       └── SubscribeTraceEventTest.java
│           │                   │   └── publisher/
│           │                   │       ├── TraceEventPublisherFactoryTest.java
│           │                   │       ├── TraceEventPublisherTest.java
│           │                   │       └── TraceTestEvent.java
│           │                   └── utils/
│           │                       ├── ArrayUtilsTest.java
│           │                       ├── ByteUtilsTest.java
│           │                       ├── ClassUtilsTest.java
│           │                       ├── CollectionUtilsTest.java
│           │                       ├── ConcurrentHashSetTest.java
│           │                       ├── ConnLabelsUtilsTest.java
│           │                       ├── ConvertUtilsTest.java
│           │                       ├── DateFormatUtilsTest.java
│           │                       ├── ExceptionUtilTest.java
│           │                       ├── FuzzyGroupKeyPatternTest.java
│           │                       ├── InetAddressValidatorTest.java
│           │                       ├── InternetAddressUtilTest.java
│           │                       ├── IoUtilsTest.java
│           │                       ├── JacksonUtilsTest.java
│           │                       ├── LoggerUtilsTest.java
│           │                       ├── MD5UtilsTest.java
│           │                       ├── MapUtilTest.java
│           │                       ├── NamespaceUtilTest.java
│           │                       ├── NumberUtilsTest.java
│           │                       ├── ObservableTest.java
│           │                       ├── PairTest.java
│           │                       ├── PreconditionsTest.java
│           │                       ├── PropertyUtilsTest.java
│           │                       ├── RandomUtilsTest.java
│           │                       ├── ReflectUtilsTest.java
│           │                       ├── ResourceUtilsTest.java
│           │                       ├── StringUtilsTest.java
│           │                       ├── ThreadFactoryBuilderTest.java
│           │                       ├── ThreadUtilsTest.java
│           │                       ├── TlsTypeResolveTest.java
│           │                       ├── TypeUtilsTest.java
│           │                       ├── UuidUtilsTest.java
│           │                       ├── VersionUtilsTest.java
│           │                       └── to/
│           │                           └── User.java
│           └── resources/
│               ├── META-INF/
│               │   └── services/
│               │       ├── com.alibaba.nacos.api.ability.initializer.AbilityPostProcessor
│               │       ├── com.alibaba.nacos.common.ability.AbstractAbilityControlManager
│               │       ├── com.alibaba.nacos.common.labels.LabelsCollector
│               │       ├── com.alibaba.nacos.common.paramcheck.AbstractParamChecker
│               │       └── com.alibaba.nacos.common.spi.SpiTestInterface
│               ├── resource_utils_test.properties
│               └── test-tls-cert.pem
├── config/
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── alibaba/
│       │   │           └── nacos/
│       │   │               └── config/
│       │   │                   └── server/
│       │   │                       ├── Config.java
│       │   │                       ├── aspect/
│       │   │                       │   ├── CapacityManagementAspect.java
│       │   │                       │   ├── ConfigChangeAspect.java
│       │   │                       │   ├── ConfigOpFailureAspect.java
│       │   │                       │   └── RequestLogAspect.java
│       │   │                       ├── configuration/
│       │   │                       │   ├── ConfigChangeConfigs.java
│       │   │                       │   ├── ConfigCommonConfig.java
│       │   │                       │   ├── ConfigCompatibleConfig.java
│       │   │                       │   └── NacosConfigConfiguration.java
│       │   │                       ├── constant/
│       │   │                       │   ├── ConfigModuleStateBuilder.java
│       │   │                       │   ├── Constants.java
│       │   │                       │   ├── CounterMode.java
│       │   │                       │   ├── ParametersField.java
│       │   │                       │   └── PropertiesConstant.java
│       │   │                       ├── controller/
│       │   │                       │   ├── ConfigServletInner.java
│       │   │                       │   ├── parameters/
│       │   │                       │   │   └── SameNamespaceCloneConfigBean.java
│       │   │                       │   └── v3/
│       │   │                       │       ├── CapacityControllerV3.java
│       │   │                       │       ├── ConfigControllerV3.java
│       │   │                       │       ├── ConfigOpenApiController.java
│       │   │                       │       ├── ConfigOpsControllerV3.java
│       │   │                       │       ├── HistoryControllerV3.java
│       │   │                       │       ├── ListenerControllerV3.java
│       │   │                       │       └── MetricsControllerV3.java
│       │   │                       ├── enums/
│       │   │                       │   ├── ApiVersionEnum.java
│       │   │                       │   ├── FileTypeEnum.java
│       │   │                       │   └── OperationType.java
│       │   │                       ├── exception/
│       │   │                       │   ├── ConfigAlreadyExistsException.java
│       │   │                       │   ├── GlobalExceptionHandler.java
│       │   │                       │   └── NacosConfigException.java
│       │   │                       ├── filter/
│       │   │                       │   ├── CircuitFilter.java
│       │   │                       │   ├── ConfigEnabledFilter.java
│       │   │                       │   └── NacosWebFilter.java
│       │   │                       ├── manager/
│       │   │                       │   ├── TaskManager.java
│       │   │                       │   └── TaskManagerMBean.java
│       │   │                       ├── model/
│       │   │                       │   ├── AclInfo.java
│       │   │                       │   ├── CacheItem.java
│       │   │                       │   ├── ConfigAdvanceInfo.java
│       │   │                       │   ├── ConfigAllInfo.java
│       │   │                       │   ├── ConfigCache.java
│       │   │                       │   ├── ConfigCacheFactory.java
│       │   │                       │   ├── ConfigCacheFactoryDelegate.java
│       │   │                       │   ├── ConfigCacheGray.java
│       │   │                       │   ├── ConfigCachePostProcessor.java
│       │   │                       │   ├── ConfigCachePostProcessorDelegate.java
│       │   │                       │   ├── ConfigHistoryInfo.java
│       │   │                       │   ├── ConfigHistoryInfoDetail.java
│       │   │                       │   ├── ConfigInfo.java
│       │   │                       │   ├── ConfigInfo4Beta.java
│       │   │                       │   ├── ConfigInfo4Tag.java
│       │   │                       │   ├── ConfigInfoBase.java
│       │   │                       │   ├── ConfigInfoBaseEx.java
│       │   │                       │   ├── ConfigInfoBetaWrapper.java
│       │   │                       │   ├── ConfigInfoChanged.java
│       │   │                       │   ├── ConfigInfoEx.java
│       │   │                       │   ├── ConfigInfoGrayWrapper.java
│       │   │                       │   ├── ConfigInfoStateWrapper.java
│       │   │                       │   ├── ConfigInfoTagWrapper.java
│       │   │                       │   ├── ConfigInfoWrapper.java
│       │   │                       │   ├── ConfigKey.java
│       │   │                       │   ├── ConfigListenState.java
│       │   │                       │   ├── ConfigMetadata.java
│       │   │                       │   ├── ConfigOperateResult.java
│       │   │                       │   ├── ConfigRequestInfo.java
│       │   │                       │   ├── GroupkeyListenserStatus.java
│       │   │                       │   ├── ListenerCheckResult.java
│       │   │                       │   ├── NacosConfigCacheFactory.java
│       │   │                       │   ├── NacosConfigCachePostProcessor.java
│       │   │                       │   ├── SampleResult.java
│       │   │                       │   ├── SubscriberStatus.java
│       │   │                       │   ├── capacity/
│       │   │                       │   │   ├── Capacity.java
│       │   │                       │   │   ├── GroupCapacity.java
│       │   │                       │   │   └── NamespaceCapacity.java
│       │   │                       │   ├── event/
│       │   │                       │   │   ├── ConfigDataChangeEvent.java
│       │   │                       │   │   ├── ConfigDumpEvent.java
│       │   │                       │   │   ├── ConfigFuzzyWatchEvent.java
│       │   │                       │   │   ├── IstioConfigChangeEvent.java
│       │   │                       │   │   ├── LocalDataChangeEvent.java
│       │   │                       │   │   └── RaftDbErrorRecoverEvent.java
│       │   │                       │   ├── form/
│       │   │                       │   │   ├── ConfigForm.java
│       │   │                       │   │   ├── ConfigFormV3.java
│       │   │                       │   │   └── UpdateCapacityForm.java
│       │   │                       │   └── gray/
│       │   │                       │       ├── AbstractGrayRule.java
│       │   │                       │       ├── BetaGrayRule.java
│       │   │                       │       ├── ConfigGrayPersistInfo.java
│       │   │                       │       ├── GrayRule.java
│       │   │                       │       ├── GrayRuleManager.java
│       │   │                       │       └── TagGrayRule.java
│       │   │                       ├── monitor/
│       │   │                       │   ├── ConfigDynamicMeterRefreshService.java
│       │   │                       │   ├── MemoryMonitor.java
│       │   │                       │   ├── MetricsMonitor.java
│       │   │                       │   ├── PrintGetConfigResponeTask.java
│       │   │                       │   ├── PrintMemoryTask.java
│       │   │                       │   ├── ResponseMonitor.java
│       │   │                       │   ├── ThreadTaskQueueMonitorTask.java
│       │   │                       │   └── collector/
│       │   │                       │       └── ConfigSubscriberMetricsCollector.java
│       │   │                       ├── paramcheck/
│       │   │                       │   ├── ConfigBlurSearchHttpParamExtractor.java
│       │   │                       │   ├── ConfigDefaultHttpParamExtractor.java
│       │   │                       │   └── ConfigListenerHttpParamExtractor.java
│       │   │                       ├── remote/
│       │   │                       │   ├── ConfigChangeBatchListenRequestHandler.java
│       │   │                       │   ├── ConfigChangeClusterSyncRequestHandler.java
│       │   │                       │   ├── ConfigChangeListenContext.java
│       │   │                       │   ├── ConfigClusterRpcClientProxy.java
│       │   │                       │   ├── ConfigConnectionEventListener.java
│       │   │                       │   ├── ConfigFuzzyWatchChangeNotifier.java
│       │   │                       │   ├── ConfigFuzzyWatchRequestHandler.java
│       │   │                       │   ├── ConfigFuzzyWatchSyncNotifier.java
│       │   │                       │   ├── ConfigPublishRequestHandler.java
│       │   │                       │   ├── ConfigQueryRequestHandler.java
│       │   │                       │   ├── ConfigRemoveRequestHandler.java
│       │   │                       │   ├── FuzzyWatchChangeNotifyTask.java
│       │   │                       │   ├── FuzzyWatchSyncNotifyCallback.java
│       │   │                       │   ├── FuzzyWatchSyncNotifyTask.java
│       │   │                       │   └── RpcConfigChangeNotifier.java
│       │   │                       ├── result/
│       │   │                       │   └── code/
│       │   │                       │       └── ResultCodeEnum.java
│       │   │                       ├── service/
│       │   │                       │   ├── ClientIpWhiteList.java
│       │   │                       │   ├── ClientRecord.java
│       │   │                       │   ├── ClientTrackService.java
│       │   │                       │   ├── ConfigCacheService.java
│       │   │                       │   ├── ConfigChangePublisher.java
│       │   │                       │   ├── ConfigDetailService.java
│       │   │                       │   ├── ConfigFuzzyWatchContextService.java
│       │   │                       │   ├── ConfigMigrateService.java
│       │   │                       │   ├── ConfigOperationService.java
│       │   │                       │   ├── ConfigReadinessCheckService.java
│       │   │                       │   ├── ConfigSubService.java
│       │   │                       │   ├── HistoryService.java
│       │   │                       │   ├── LongPollingConnectionMetricsCollector.java
│       │   │                       │   ├── LongPollingService.java
│       │   │                       │   ├── NamespaceConfigInfoService.java
│       │   │                       │   ├── SwitchService.java
│       │   │                       │   ├── capacity/
│       │   │                       │   │   ├── CapacityService.java
│       │   │                       │   │   ├── GroupCapacityPersistService.java
│       │   │                       │   │   └── TenantCapacityPersistService.java
│       │   │                       │   ├── dump/
│       │   │                       │   │   ├── DefaultHistoryConfigCleaner.java
│       │   │                       │   │   ├── DumpChangeConfigWorker.java
│       │   │                       │   │   ├── DumpChangeGrayConfigWorker.java
│       │   │                       │   │   ├── DumpConfigHandler.java
│       │   │                       │   │   ├── DumpRequest.java
│       │   │                       │   │   ├── DumpService.java
│       │   │                       │   │   ├── EmbeddedDumpService.java
│       │   │                       │   │   ├── ExternalDumpService.java
│       │   │                       │   │   ├── HistoryConfigCleaner.java
│       │   │                       │   │   ├── HistoryConfigCleanerConfig.java
│       │   │                       │   │   ├── HistoryConfigCleanerManager.java
│       │   │                       │   │   ├── disk/
│       │   │                       │   │   │   ├── ConfigDiskService.java
│       │   │                       │   │   │   ├── ConfigDiskServiceFactory.java
│       │   │                       │   │   │   ├── ConfigRawDiskService.java
│       │   │                       │   │   │   └── ConfigRocksDbDiskService.java
│       │   │                       │   │   ├── processor/
│       │   │                       │   │   │   ├── DumpAllGrayProcessor.java
│       │   │                       │   │   │   ├── DumpAllProcessor.java
│       │   │                       │   │   │   └── DumpProcessor.java
│       │   │                       │   │   └── task/
│       │   │                       │   │       ├── DumpAllBetaTask.java
│       │   │                       │   │       ├── DumpAllGrayTask.java
│       │   │                       │   │       ├── DumpAllTagTask.java
│       │   │                       │   │       ├── DumpAllTask.java
│       │   │                       │   │       └── DumpTask.java
│       │   │                       │   ├── listener/
│       │   │                       │   │   ├── ConfigListenerStateDelegate.java
│       │   │                       │   │   ├── ConfigListenerStateService.java
│       │   │                       │   │   ├── LocalConfigListenerStateServiceImpl.java
│       │   │                       │   │   └── RemoteConfigListenerStateServiceImpl.java
│       │   │                       │   ├── notify/
│       │   │                       │   │   ├── AsyncNotifyService.java
│       │   │                       │   │   └── HttpClientManager.java
│       │   │                       │   ├── query/
│       │   │                       │   │   ├── ConfigChainRequestExtractorService.java
│       │   │                       │   │   ├── ConfigQueryChainRequestExtractor.java
│       │   │                       │   │   ├── ConfigQueryChainService.java
│       │   │                       │   │   ├── ConfigQueryHandlerChain.java
│       │   │                       │   │   ├── ConfigQueryHandlerChainBuilder.java
│       │   │                       │   │   ├── DefaultChainRequestExtractor.java
│       │   │                       │   │   ├── DefaultConfigQueryHandlerChainBuilder.java
│       │   │                       │   │   ├── enums/
│       │   │                       │   │   │   └── ResponseCode.java
│       │   │                       │   │   ├── handler/
│       │   │                       │   │   │   ├── AbstractConfigQueryHandler.java
│       │   │                       │   │   │   ├── ConfigChainEntryHandler.java
│       │   │                       │   │   │   ├── ConfigContentTypeHandler.java
│       │   │                       │   │   │   ├── ConfigQueryHandler.java
│       │   │                       │   │   │   ├── FormalHandler.java
│       │   │                       │   │   │   ├── GrayRuleMatchHandler.java
│       │   │                       │   │   │   └── SpecialTagNotFoundHandler.java
│       │   │                       │   │   └── model/
│       │   │                       │   │       ├── ConfigQueryChainRequest.java
│       │   │                       │   │       └── ConfigQueryChainResponse.java
│       │   │                       │   ├── repository/
│       │   │                       │   │   ├── ConfigInfoBetaPersistService.java
│       │   │                       │   │   ├── ConfigInfoGrayPersistService.java
│       │   │                       │   │   ├── ConfigInfoPersistService.java
│       │   │                       │   │   ├── ConfigInfoTagPersistService.java
│       │   │                       │   │   ├── ConfigMigratePersistService.java
│       │   │                       │   │   ├── ConfigRowMapperInjector.java
│       │   │                       │   │   ├── HistoryConfigInfoPersistService.java
│       │   │                       │   │   ├── embedded/
│       │   │                       │   │   │   ├── EmbeddedConfigDumpApplyHook.java
│       │   │                       │   │   │   ├── EmbeddedConfigInfoBetaPersistServiceImpl.java
│       │   │                       │   │   │   ├── EmbeddedConfigInfoGrayPersistServiceImpl.java
│       │   │                       │   │   │   ├── EmbeddedConfigInfoPersistServiceImpl.java
│       │   │                       │   │   │   ├── EmbeddedConfigInfoTagPersistServiceImpl.java
│       │   │                       │   │   │   ├── EmbeddedConfigMigratePersistServiceImpl.java
│       │   │                       │   │   │   └── EmbeddedHistoryConfigInfoPersistServiceImpl.java
│       │   │                       │   │   └── extrnal/
│       │   │                       │   │       ├── ExternalConfigInfoBetaPersistServiceImpl.java
│       │   │                       │   │       ├── ExternalConfigInfoGrayPersistServiceImpl.java
│       │   │                       │   │       ├── ExternalConfigInfoPersistServiceImpl.java
│       │   │                       │   │       ├── ExternalConfigInfoTagPersistServiceImpl.java
│       │   │                       │   │       ├── ExternalConfigMigratePersistServiceImpl.java
│       │   │                       │   │       └── ExternalHistoryConfigInfoPersistServiceImpl.java
│       │   │                       │   ├── sql/
│       │   │                       │   │   ├── EmbeddedStorageContextUtils.java
│       │   │                       │   │   └── ExternalStorageUtils.java
│       │   │                       │   └── trace/
│       │   │                       │       └── ConfigTraceService.java
│       │   │                       └── utils/
│       │   │                           ├── AccumulateStatCount.java
│       │   │                           ├── AppNameUtils.java
│       │   │                           ├── ConfigExecutor.java
│       │   │                           ├── ConfigExtInfoUtil.java
│       │   │                           ├── ConfigTagUtil.java
│       │   │                           ├── ContentUtils.java
│       │   │                           ├── GroupKey.java
│       │   │                           ├── GroupKey2.java
│       │   │                           ├── LogUtil.java
│       │   │                           ├── MD5Util.java
│       │   │                           ├── Md5Comparator.java
│       │   │                           ├── Md5ComparatorDelegate.java
│       │   │                           ├── NacosMd5Comparator.java
│       │   │                           ├── ParamUtils.java
│       │   │                           ├── PropertyUtil.java
│       │   │                           ├── Protocol.java
│       │   │                           ├── RegexParser.java
│       │   │                           ├── RequestUtil.java
│       │   │                           ├── ResponseUtil.java
│       │   │                           ├── SimpleCache.java
│       │   │                           ├── SimpleFlowData.java
│       │   │                           ├── SimpleIpFlowData.java
│       │   │                           ├── SimpleReadWriteLock.java
│       │   │                           ├── StatConstants.java
│       │   │                           ├── SystemConfig.java
│       │   │                           ├── TimeUtils.java
│       │   │                           ├── TimeoutUtils.java
│       │   │                           ├── TraceLogUtil.java
│       │   │                           ├── UrlAnalysisUtils.java
│       │   │                           ├── YamlParserUtil.java
│       │   │                           └── ZipUtils.java
│       │   └── resources/
│       │       ├── META-INF/
│       │       │   ├── logback/
│       │       │   │   └── config-included.xml
│       │       │   ├── services/
│       │       │   │   ├── com.alibaba.nacos.config.server.model.gray.GrayRule
│       │       │   │   ├── com.alibaba.nacos.config.server.service.query.ConfigQueryChainRequestExtractor
│       │       │   │   ├── com.alibaba.nacos.config.server.service.query.ConfigQueryHandlerChainBuilder
│       │       │   │   ├── com.alibaba.nacos.core.paramcheck.AbstractHttpParamExtractor
│       │       │   │   ├── com.alibaba.nacos.plugin.control.connection.ConnectionMetricsCollector
│       │       │   │   ├── com.alibaba.nacos.sys.filter.NacosPackageExcludeFilter
│       │       │   │   └── com.alibaba.nacos.sys.module.ModuleStateBuilder
│       │       │   └── spring.factories
│       │       └── version/
│       │           └── version.txt
│       └── test/
│           ├── java/
│           │   └── com/
│           │       └── alibaba/
│           │           └── nacos/
│           │               └── config/
│           │                   └── server/
│           │                       ├── aspect/
│           │                       │   ├── CapacityManagementAspectTest.java
│           │                       │   ├── ConfigChangeAspectTest.java
│           │                       │   └── RequestLogAspectTest.java
│           │                       ├── configuration/
│           │                       │   ├── ConfigChangeConfigsTest.java
│           │                       │   └── ConfigCommonConfigTest.java
│           │                       ├── constant/
│           │                       │   ├── ConfigModuleStateBuilderTest.java
│           │                       │   ├── ConstantsTest.java
│           │                       │   └── CounterModeTest.java
│           │                       ├── controller/
│           │                       │   ├── ConfigServletInnerTest.java
│           │                       │   └── v3/
│           │                       │       ├── CapacityControllerV3Test.java
│           │                       │       ├── ConfigControllerV3Test.java
│           │                       │       ├── ConfigOpenApiControllerTest.java
│           │                       │       ├── ConfigOpsControllerV3Test.java
│           │                       │       ├── HistoryControllerV3Test.java
│           │                       │       ├── ListenerControllerV3Test.java
│           │                       │       └── MetricControllerV3Test.java
│           │                       ├── exception/
│           │                       │   └── GlobalExceptionHandlerTest.java
│           │                       ├── manager/
│           │                       │   └── TaskManagerTest.java
│           │                       ├── model/
│           │                       │   ├── ConfigCacheFactoryDelegateTest.java
│           │                       │   ├── ConfigCachePostProcessorDelegateTest.java
│           │                       │   ├── ConfigInfoTest.java
│           │                       │   ├── NacosConfigCacheFactoryTest.java
│           │                       │   ├── NacosConfigCachePostProcessorTest.java
│           │                       │   └── form/
│           │                       │       └── ConfigFormTest.java
│           │                       ├── paramcheck/
│           │                       │   └── ConfigListenerHttpParamExtractorTest.java
│           │                       ├── remote/
│           │                       │   ├── ConfigChangeBatchListenRequestHandlerTest.java
│           │                       │   ├── ConfigChangeClusterSyncRequestHandlerTest.java
│           │                       │   ├── ConfigChangeListenContextTest.java
│           │                       │   ├── ConfigFuzzyWatchChangeNotifierTest.java
│           │                       │   ├── ConfigFuzzyWatchSyncNotifierTest.java
│           │                       │   ├── ConfigPublishRequestHandlerTest.java
│           │                       │   ├── ConfigQueryRequestHandlerTest.java
│           │                       │   ├── ConfigRemoveRequestHandlerTest.java
│           │                       │   ├── FuzzyWatchSyncNotifyCallbackTest.java
│           │                       │   └── RpcConfigChangeNotifierTest.java
│           │                       ├── service/
│           │                       │   ├── ClientTrackServiceTest.java
│           │                       │   ├── ConfigCacheServiceTest.java
│           │                       │   ├── ConfigChangePublisherTest.java
│           │                       │   ├── ConfigFuzzyWatchContextServiceTest.java
│           │                       │   ├── ConfigOperationServiceTest.java
│           │                       │   ├── ConfigSubServiceTest.java
│           │                       │   ├── HistoryServiceTest.java
│           │                       │   ├── LongPollingServiceTest.java
│           │                       │   ├── NamespaceConfigInfoServiceTest.java
│           │                       │   ├── capacity/
│           │                       │   │   ├── CapacityServiceTest.java
│           │                       │   │   ├── GroupCapacityPersistServiceTest.java
│           │                       │   │   └── TenantCapacityPersistServiceTest.java
│           │                       │   ├── dump/
│           │                       │   │   ├── DefaultHistoryConfigCleanerTest.java
│           │                       │   │   ├── DumpChangeConfigWorkerTest.java
│           │                       │   │   ├── DumpChangeGrayConfigWorkerTest.java
│           │                       │   │   ├── DumpProcessorTest.java
│           │                       │   │   ├── DumpProcessorUserRwaDiskTest.java
│           │                       │   │   ├── DumpServiceTest.java
│           │                       │   │   ├── HistoryConfigCleanerConfigTest.java
│           │                       │   │   ├── HistoryConfigCleanerManagerTest.java
│           │                       │   │   ├── disk/
│           │                       │   │   │   ├── ConfigDiskServiceFactoryTest.java
│           │                       │   │   │   └── ConfigRawDiskServiceTest.java
│           │                       │   │   └── processor/
│           │                       │   │       ├── DumpAllGrayProcessorTest.java
│           │                       │   │       └── DumpAllProcessorTest.java
│           │                       │   ├── notify/
│           │                       │   │   └── AsyncNotifyServiceTest.java
│           │                       │   ├── query/
│           │                       │   │   ├── DefaultChainRequestExtractorTest.java
│           │                       │   │   └── handler/
│           │                       │   │       ├── ConfigChainEntryHandlerTest.java
│           │                       │   │       ├── ConfigContentTypeHandlerTest.java
│           │                       │   │       ├── FormalHandlerTest.java
│           │                       │   │       ├── GrayRuleMatchHandlerTest.java
│           │                       │   │       └── SpecialTagNotFoundHandlerTest.java
│           │                       │   └── repository/
│           │                       │       ├── ConfigRowMapperInjectorTest.java
│           │                       │       ├── embedded/
│           │                       │       │   ├── EmbeddedConfigInfoBetaPersistServiceImplTest.java
│           │                       │       │   ├── EmbeddedConfigInfoGrayPersistServiceImplTest.java
│           │                       │       │   ├── EmbeddedConfigInfoPersistServiceImplTest.java
│           │                       │       │   ├── EmbeddedConfigInfoTagPersistServiceImplTest.java
│           │                       │       │   └── EmbeddedHistoryConfigInfoPersistServiceImplTest.java
│           │                       │       └── extrnal/
│           │                       │           ├── ExternalConfigInfoBetaPersistServiceImplTest.java
│           │                       │           ├── ExternalConfigInfoGrayPersistServiceImplTest.java
│           │                       │           ├── ExternalConfigInfoPersistServiceImplTest.java
│           │                       │           ├── ExternalConfigInfoTagPersistServiceImplTest.java
│           │                       │           └── ExternalHistoryConfigInfoPersistServiceImplTest.java
│           │                       └── utils/
│           │                           ├── AccumulateStatCountTest.java
│           │                           ├── AppNameUtilsTest.java
│           │                           ├── ConfigExecutorTest.java
│           │                           ├── ConfigExtInfoUtilTest.java
│           │                           ├── ContentUtilsTest.java
│           │                           ├── GroupKey2Test.java
│           │                           ├── GroupKeyTest.java
│           │                           ├── LogUtilTest.java
│           │                           ├── MD5UtilTest.java
│           │                           ├── Md5ComparatorDelegateTest.java
│           │                           ├── NacosMd5ComparatorTest.java
│           │                           ├── ParamUtilsTest.java
│           │                           ├── PropertyUtilTest.java
│           │                           ├── ProtocolTest.java
│           │                           ├── RegexParserTest.java
│           │                           ├── RequestUtilTest.java
│           │                           ├── ResponseUtilTest.java
│           │                           ├── SimpleCacheTest.java
│           │                           ├── SimpleFlowDataTest.java
│           │                           ├── SimpleIpFlowDataTest.java
│           │                           ├── SimpleReadWriteLockTest.java
│           │                           ├── SystemConfigTest.java
│           │                           ├── TestCaseUtils.java
│           │                           ├── TimeUtilsTest.java
│           │                           ├── TimeoutUtilsTest.java
│           │                           ├── TraceLogUtilTest.java
│           │                           ├── UrlAnalysisUtilsTest.java
│           │                           ├── YamlParserUtilTest.java
│           │                           └── ZipUtilsTest.java
│           └── resources/
│               ├── application.properties
│               ├── log4j.properties
│               ├── logback-test.xml
│               └── user.properties
├── consistency/
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── alibaba/
│       │   │           └── nacos/
│       │   │               └── consistency/
│       │   │                   ├── CommandOperations.java
│       │   │                   ├── Config.java
│       │   │                   ├── ConsistencyProtocol.java
│       │   │                   ├── DataOperation.java
│       │   │                   ├── IdGenerator.java
│       │   │                   ├── ProtoMessageUtil.java
│       │   │                   ├── ProtocolMetaData.java
│       │   │                   ├── RequestProcessor.java
│       │   │                   ├── SerializeFactory.java
│       │   │                   ├── Serializer.java
│       │   │                   ├── ap/
│       │   │                   │   ├── APProtocol.java
│       │   │                   │   └── RequestProcessor4AP.java
│       │   │                   ├── cp/
│       │   │                   │   ├── CPProtocol.java
│       │   │                   │   ├── MetadataKey.java
│       │   │                   │   └── RequestProcessor4CP.java
│       │   │                   ├── exception/
│       │   │                   │   └── ConsistencyException.java
│       │   │                   ├── serialize/
│       │   │                   │   ├── HessianSerializer.java
│       │   │                   │   ├── JacksonSerializer.java
│       │   │                   │   └── NacosHessianSerializerFactory.java
│       │   │                   └── snapshot/
│       │   │                       ├── LocalFileMeta.java
│       │   │                       ├── Reader.java
│       │   │                       ├── SnapshotOperation.java
│       │   │                       └── Writer.java
│       │   ├── proto/
│       │   │   ├── Data.proto
│       │   │   └── consistency.proto
│       │   └── resources/
│       │       └── META-INF/
│       │           └── services/
│       │               └── com.alibaba.nacos.consistency.Serializer
│       └── test/
│           └── java/
│               └── com/
│                   └── alibaba/
│                       └── nacos/
│                           └── consistency/
│                               ├── CommandOperationsTest.java
│                               ├── DataOperationTest.java
│                               ├── ProtoMessageUtilTest.java
│                               ├── ProtocolMetaDataTest.java
│                               ├── RequestProcessorTest.java
│                               ├── SerializeFactoryTest.java
│                               ├── ap/
│                               │   └── RequestProcessor4APTest.java
│                               ├── cp/
│                               │   ├── MetadataKeyTest.java
│                               │   └── RequestProcessor4CPTest.java
│                               ├── exception/
│                               │   └── ConsistencyExceptionTest.java
│                               ├── serialize/
│                               │   ├── HessianSerializerTest.java
│                               │   └── JacksonSerializerTest.java
│                               └── snapshot/
│                                   ├── LocalFileMetaTest.java
│                                   ├── ReaderTest.java
│                                   └── WriterTest.java
├── console/
│   ├── README.md
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── alibaba/
│       │   │           └── nacos/
│       │   │               ├── Nacos.java
│       │   │               └── console/
│       │   │                   ├── NacosConsole.java
│       │   │                   ├── NacosConsoleStartUp.java
│       │   │                   ├── aot/
│       │   │                   │   ├── AotConfiguration.java
│       │   │                   │   └── NacosRuntimeHints.java
│       │   │                   ├── cluster/
│       │   │                   │   └── RemoteServerMemberManager.java
│       │   │                   ├── config/
│       │   │                   │   ├── ConsoleAuthModuleStateBuilder.java
│       │   │                   │   ├── ConsoleCorsConfig.java
│       │   │                   │   ├── ConsoleDeploymentConfig.java
│       │   │                   │   ├── ConsoleFunctionEnabledConfig.java
│       │   │                   │   ├── ConsoleModuleStateBuilder.java
│       │   │                   │   ├── ConsolePackageExcludeFilter.java
│       │   │                   │   ├── ConsoleWebConfig.java
│       │   │                   │   ├── NacosConsoleAuthConfig.java
│       │   │                   │   └── NacosConsoleBeanPostProcessorConfiguration.java
│       │   │                   ├── controller/
│       │   │                   │   └── v3/
│       │   │                   │       ├── ConsoleHealthController.java
│       │   │                   │       ├── ConsoleServerStateController.java
│       │   │                   │       ├── ai/
│       │   │                   │       │   ├── ConsoleA2aController.java
│       │   │                   │       │   ├── ConsoleCopilotConfigController.java
│       │   │                   │       │   ├── ConsoleCopilotController.java
│       │   │                   │       │   ├── ConsoleMcpController.java
│       │   │                   │       │   ├── ConsolePromptController.java
│       │   │                   │       │   ├── ConsoleSkillController.java
│       │   │                   │       │   ├── CopilotHttpParamExtractor.java
│       │   │                   │       │   └── CopilotSseExceptionHandler.java
│       │   │                   │       ├── config/
│       │   │                   │       │   ├── ConsoleConfigController.java
│       │   │                   │       │   └── ConsoleHistoryController.java
│       │   │                   │       ├── core/
│       │   │                   │       │   ├── ConsoleClusterController.java
│       │   │                   │       │   ├── ConsoleNamespaceController.java
│       │   │                   │       │   └── ConsolePluginController.java
│       │   │                   │       └── naming/
│       │   │                   │           ├── ConsoleInstanceController.java
│       │   │                   │           └── ConsoleServiceController.java
│       │   │                   ├── exception/
│       │   │                   │   └── ConsoleExceptionHandler.java
│       │   │                   ├── filter/
│       │   │                   │   ├── NacosConsoleAuthFilter.java
│       │   │                   │   └── XssFilter.java
│       │   │                   ├── handler/
│       │   │                   │   ├── HealthHandler.java
│       │   │                   │   ├── ServerStateHandler.java
│       │   │                   │   ├── ai/
│       │   │                   │   │   ├── A2aHandler.java
│       │   │                   │   │   ├── EnabledAiHandler.java
│       │   │                   │   │   ├── McpHandler.java
│       │   │                   │   │   ├── PromptHandler.java
│       │   │                   │   │   └── SkillHandler.java
│       │   │                   │   ├── config/
│       │   │                   │   │   ├── ConfigHandler.java
│       │   │                   │   │   └── HistoryHandler.java
│       │   │                   │   ├── core/
│       │   │                   │   │   ├── ClusterHandler.java
│       │   │                   │   │   ├── NamespaceHandler.java
│       │   │                   │   │   └── PluginHandler.java
│       │   │                   │   ├── impl/
│       │   │                   │   │   ├── AbstractServerStateHandler.java
│       │   │                   │   │   ├── ConditionFunctionEnabled.java
│       │   │                   │   │   ├── inner/
│       │   │                   │   │   │   ├── EnabledInnerHandler.java
│       │   │                   │   │   │   ├── HealthInnerHandler.java
│       │   │                   │   │   │   ├── ServerStateInnerHandler.java
│       │   │                   │   │   │   ├── ai/
│       │   │                   │   │   │   │   ├── A2aInnerHandler.java
│       │   │                   │   │   │   │   ├── McpInnerHandler.java
│       │   │                   │   │   │   │   ├── PromptInnerHandler.java
│       │   │                   │   │   │   │   └── SkillInnerHandler.java
│       │   │                   │   │   │   ├── config/
│       │   │                   │   │   │   │   ├── ConfigInnerHandler.java
│       │   │                   │   │   │   │   └── HistoryInnerHandler.java
│       │   │                   │   │   │   ├── core/
│       │   │                   │   │   │   │   ├── ClusterInnerHandler.java
│       │   │                   │   │   │   │   ├── NamespaceInnerHandler.java
│       │   │                   │   │   │   │   └── PluginInnerHandler.java
│       │   │                   │   │   │   └── naming/
│       │   │                   │   │   │       ├── InstanceInnerHandler.java
│       │   │                   │   │   │       └── ServiceInnerHandler.java
│       │   │                   │   │   ├── noop/
│       │   │                   │   │   │   ├── ai/
│       │   │                   │   │   │   │   ├── A2aNoopHandler.java
│       │   │                   │   │   │   │   ├── McpNoopHandler.java
│       │   │                   │   │   │   │   ├── PromptNoopHandler.java
│       │   │                   │   │   │   │   └── SkillNoopHandler.java
│       │   │                   │   │   │   ├── config/
│       │   │                   │   │   │   │   ├── ConfigNoopHandler.java
│       │   │                   │   │   │   │   └── HistoryNoopHandler.java
│       │   │                   │   │   │   └── naming/
│       │   │                   │   │   │       ├── InstanceNoopHandler.java
│       │   │                   │   │   │       └── ServiceNoopHandler.java
│       │   │                   │   │   └── remote/
│       │   │                   │   │       ├── ConsoleMaintainerClientAuthPlugin.java
│       │   │                   │   │       ├── EnabledRemoteHandler.java
│       │   │                   │   │       ├── HealthRemoteHandler.java
│       │   │                   │   │       ├── NacosMaintainerClientHolder.java
│       │   │                   │   │       ├── RemoteServerConnector.java
│       │   │                   │   │       ├── ServerStateRemoteHandler.java
│       │   │                   │   │       ├── ai/
│       │   │                   │   │       │   ├── A2aRemoteHandler.java
│       │   │                   │   │       │   ├── McpRemoteHandler.java
│       │   │                   │   │       │   ├── PromptRemoteHandler.java
│       │   │                   │   │       │   └── SkillRemoteHandler.java
│       │   │                   │   │       ├── config/
│       │   │                   │   │       │   ├── ConfigImportAndExportService.java
│       │   │                   │   │       │   ├── ConfigRemoteHandler.java
│       │   │                   │   │       │   └── HistoryRemoteHandler.java
│       │   │                   │   │       ├── core/
│       │   │                   │   │       │   ├── ClusterRemoteHandler.java
│       │   │                   │   │       │   ├── NamespaceRemoteHandler.java
│       │   │                   │   │       │   └── PluginRemoteHandler.java
│       │   │                   │   │       └── naming/
│       │   │                   │   │           ├── InstanceRemoteHandler.java
│       │   │                   │   │           └── ServiceRemoteHandler.java
│       │   │                   │   └── naming/
│       │   │                   │       ├── InstanceHandler.java
│       │   │                   │       └── ServiceHandler.java
│       │   │                   ├── paramcheck/
│       │   │                   │   └── ConsoleDefaultHttpParamExtractor.java
│       │   │                   └── proxy/
│       │   │                       ├── HealthProxy.java
│       │   │                       ├── ServerStateProxy.java
│       │   │                       ├── ai/
│       │   │                       │   ├── A2aProxy.java
│       │   │                       │   ├── McpProxy.java
│       │   │                       │   ├── PromptProxy.java
│       │   │                       │   └── SkillProxy.java
│       │   │                       ├── config/
│       │   │                       │   ├── ConfigProxy.java
│       │   │                       │   └── HistoryProxy.java
│       │   │                       ├── core/
│       │   │                       │   ├── ClusterProxy.java
│       │   │                       │   ├── NamespaceProxy.java
│       │   │                       │   └── PluginProxy.java
│       │   │                       └── naming/
│       │   │                           ├── InstanceProxy.java
│       │   │                           └── ServiceProxy.java
│       │   └── resources/
│       │       ├── META-INF/
│       │       │   ├── nacos-default.properties
│       │       │   ├── native-image/
│       │       │   │   └── com.alibaba.nacos/
│       │       │   │       └── nacos-console/
│       │       │   │           ├── jni-config.json
│       │       │   │           ├── predefined-classes-config.json
│       │       │   │           ├── proxy-config.json
│       │       │   │           ├── reflect-config.json
│       │       │   │           ├── resource-config.json
│       │       │   │           └── serialization-config.json
│       │       │   └── services/
│       │       │       ├── com.alibaba.nacos.auth.config.NacosAuthConfig
│       │       │       ├── com.alibaba.nacos.core.listener.startup.NacosStartUp
│       │       │       ├── com.alibaba.nacos.core.paramcheck.AbstractHttpParamExtractor
│       │       │       ├── com.alibaba.nacos.plugin.auth.spi.client.AbstractClientAuthService
│       │       │       ├── com.alibaba.nacos.sys.filter.NacosPackageExcludeFilter
│       │       │       └── com.alibaba.nacos.sys.module.ModuleStateBuilder
│       │       ├── nacos-console-banner.txt
│       │       ├── nacos-console.properties
│       │       └── static/
│       │           ├── console-ui/
│       │           │   └── public/
│       │           │       ├── css/
│       │           │       │   ├── bootstrap.css
│       │           │       │   ├── codemirror.css
│       │           │       │   ├── console1412.css
│       │           │       │   ├── font-awesome.css
│       │           │       │   ├── icon.css
│       │           │       │   └── merge.css
│       │           │       └── js/
│       │           │           ├── codemirror.addone.fullscreen.js
│       │           │           ├── codemirror.addone.json-lint.js
│       │           │           ├── codemirror.addone.lint.js
│       │           │           ├── codemirror.js
│       │           │           ├── codemirror.lib.clike-lint.js
│       │           │           ├── codemirror.lib.json-lint.js
│       │           │           ├── diff_match_patch.js
│       │           │           ├── javascript.js
│       │           │           ├── jquery.js
│       │           │           ├── loader.js
│       │           │           ├── merge.js
│       │           │           ├── vs/
│       │           │           │   ├── base/
│       │           │           │   │   └── worker/
│       │           │           │   │       └── workerMain.js
│       │           │           │   ├── basic-languages/
│       │           │           │   │   └── src/
│       │           │           │   │       ├── bat.js
│       │           │           │   │       ├── coffee.js
│       │           │           │   │       ├── cpp.js
│       │           │           │   │       ├── csharp.js
│       │           │           │   │       ├── css.js
│       │           │           │   │       ├── dockerfile.js
│       │           │           │   │       ├── fsharp.js
│       │           │           │   │       ├── go.js
│       │           │           │   │       ├── handlebars.js
│       │           │           │   │       ├── html.js
│       │           │           │   │       ├── ini.js
│       │           │           │   │       ├── java.js
│       │           │           │   │       ├── less.js
│       │           │           │   │       ├── lua.js
│       │           │           │   │       ├── markdown.js
│       │           │           │   │       ├── msdax.js
│       │           │           │   │       ├── objective-c.js
│       │           │           │   │       ├── php.js
│       │           │           │   │       ├── postiats.js
│       │           │           │   │       ├── powershell.js
│       │           │           │   │       ├── pug.js
│       │           │           │   │       ├── python.js
│       │           │           │   │       ├── r.js
│       │           │           │   │       ├── razor.js
│       │           │           │   │       ├── ruby.js
│       │           │           │   │       ├── sb.js
│       │           │           │   │       ├── scss.js
│       │           │           │   │       ├── solidity.js
│       │           │           │   │       ├── sql.js
│       │           │           │   │       ├── swift.js
│       │           │           │   │       ├── vb.js
│       │           │           │   │       ├── xml.js
│       │           │           │   │       └── yaml.js
│       │           │           │   ├── editor/
│       │           │           │   │   ├── editor.main.css
│       │           │           │   │   ├── editor.main.js
│       │           │           │   │   ├── editor.main.nls.de.js
│       │           │           │   │   ├── editor.main.nls.es.js
│       │           │           │   │   ├── editor.main.nls.fr.js
│       │           │           │   │   ├── editor.main.nls.hu.js
│       │           │           │   │   ├── editor.main.nls.it.js
│       │           │           │   │   ├── editor.main.nls.ja.js
│       │           │           │   │   ├── editor.main.nls.js
│       │           │           │   │   ├── editor.main.nls.ko.js
│       │           │           │   │   ├── editor.main.nls.pt-br.js
│       │           │           │   │   ├── editor.main.nls.ru.js
│       │           │           │   │   ├── editor.main.nls.tr.js
│       │           │           │   │   ├── editor.main.nls.zh-cn.js
│       │           │           │   │   └── editor.main.nls.zh-tw.js
│       │           │           │   ├── language/
│       │           │           │   │   ├── css/
│       │           │           │   │   │   ├── cssMode.js
│       │           │           │   │   │   └── cssWorker.js
│       │           │           │   │   ├── html/
│       │           │           │   │   │   ├── htmlMode.js
│       │           │           │   │   │   └── htmlWorker.js
│       │           │           │   │   ├── json/
│       │           │           │   │   │   ├── jsonMode.js
│       │           │           │   │   │   └── jsonWorker.js
│       │           │           │   │   └── typescript/
│       │           │           │   │       ├── lib/
│       │           │           │   │       │   └── typescriptServices.js
│       │           │           │   │       └── src/
│       │           │           │   │           ├── mode.js
│       │           │           │   │           └── worker.js
│       │           │           │   └── loader.js
│       │           │           └── xml.js
│       │           ├── css/
│       │           │   └── main.css
│       │           ├── index.html
│       │           ├── js/
│       │           │   └── main.js
│       │           └── login.html
│       └── test/
│           ├── java/
│           │   └── com/
│           │       └── alibaba/
│           │           └── nacos/
│           │               └── console/
│           │                   ├── NacosConsoleStartUpTest.java
│           │                   ├── aot/
│           │                   │   └── NacosRuntimeHintsTest.java
│           │                   ├── cluster/
│           │                   │   └── RemoteServerMemberManagerTest.java
│           │                   ├── config/
│           │                   │   ├── ConsoleAuthModuleStateBuilderTest.java
│           │                   │   ├── ConsoleCorsConfigTest.java
│           │                   │   ├── ConsoleDeploymentConfigTest.java
│           │                   │   ├── ConsoleFunctionEnabledConfigTest.java
│           │                   │   ├── ConsoleModuleStateBuilderTest.java
│           │                   │   ├── ConsoleWebConfigTest.java
│           │                   │   ├── NacosConsoleAuthConfigTest.java
│           │                   │   └── NacosConsoleBeanPostProcessorConfigurationTest.java
│           │                   ├── controller/
│           │                   │   └── v3/
│           │                   │       ├── ConsoleHealthControllerTest.java
│           │                   │       ├── ConsoleServerStateControllerTest.java
│           │                   │       ├── ai/
│           │                   │       │   ├── ConsoleA2aControllerTest.java
│           │                   │       │   └── ConsoleMcpControllerTest.java
│           │                   │       ├── config/
│           │                   │       │   ├── ConsoleConfigControllerTest.java
│           │                   │       │   └── ConsoleHistoryControllerTest.java
│           │                   │       ├── core/
│           │                   │       │   ├── ConsoleClusterControllerTest.java
│           │                   │       │   └── ConsoleNamespaceControllerTest.java
│           │                   │       └── naming/
│           │                   │           ├── ConsoleInstanceControllerTest.java
│           │                   │           └── ConsoleServiceControllerTest.java
│           │                   ├── exception/
│           │                   │   └── ConsoleExceptionHandlerTest.java
│           │                   ├── filter/
│           │                   │   ├── NacosConsoleAuthFilterTest.java
│           │                   │   └── XssFilterTest.java
│           │                   ├── handler/
│           │                   │   └── impl/
│           │                   │       ├── AbstractServerStateHandlerTest.java
│           │                   │       ├── ConditionFunctionEnabledTest.java
│           │                   │       ├── inner/
│           │                   │       │   ├── HealthInnerHandlerTest.java
│           │                   │       │   ├── ServerStateInnerHandlerTest.java
│           │                   │       │   ├── ai/
│           │                   │       │   │   ├── A2aInnerHandlerTest.java
│           │                   │       │   │   └── McpInnerHandlerTest.java
│           │                   │       │   ├── config/
│           │                   │       │   │   ├── ConfigInnerHandlerTest.java
│           │                   │       │   │   └── HistoryInnerHandlerTest.java
│           │                   │       │   ├── core/
│           │                   │       │   │   ├── ClusterInnerHandlerTest.java
│           │                   │       │   │   ├── NamespaceInnerHandlerTest.java
│           │                   │       │   │   └── PluginInnerHandlerTest.java
│           │                   │       │   └── naming/
│           │                   │       │       ├── InstanceInnerHandlerTest.java
│           │                   │       │       └── ServiceInnerHandlerTest.java
│           │                   │       ├── noop/
│           │                   │       │   ├── ai/
│           │                   │       │   │   ├── A2aNoopHandlerTest.java
│           │                   │       │   │   └── McpNoopHandlerTest.java
│           │                   │       │   ├── config/
│           │                   │       │   │   ├── ConfigNoopHandlerTest.java
│           │                   │       │   │   └── HistoryNoopHandlerTest.java
│           │                   │       │   └── naming/
│           │                   │       │       ├── InstanceNoopHandlerTest.java
│           │                   │       │       └── ServiceNoopHandlerTest.java
│           │                   │       └── remote/
│           │                   │           ├── AbstractRemoteHandlerTest.java
│           │                   │           ├── ConsoleMaintainerClientAuthPluginTest.java
│           │                   │           ├── HealthRemoteHandlerTest.java
│           │                   │           ├── NacosMaintainerClientHolderTest.java
│           │                   │           ├── RemoteServerConnectorTest.java
│           │                   │           ├── ServerStateRemoteHandlerTest.java
│           │                   │           ├── ai/
│           │                   │           │   ├── A2aRemoteHandlerTest.java
│           │                   │           │   └── McpRemoteHandlerTest.java
│           │                   │           ├── config/
│           │                   │           │   ├── ConfigImportAndExportServiceTest.java
│           │                   │           │   ├── ConfigRemoteHandlerTest.java
│           │                   │           │   └── HistoryRemoteHandlerTest.java
│           │                   │           ├── core/
│           │                   │           │   ├── ClusterRemoteHandlerTest.java
│           │                   │           │   ├── NamespaceRemoteHandlerTest.java
│           │                   │           │   └── PluginRemoteHandlerTest.java
│           │                   │           └── naming/
│           │                   │               ├── InstanceRemoteHandlerTest.java
│           │                   │               └── ServiceRemoteHandlerTest.java
│           │                   ├── paramcheck/
│           │                   │   └── ConsoleDefaultHttpParamExtractorTest.java
│           │                   └── proxy/
│           │                       ├── HealthProxyTest.java
│           │                       ├── ServerStateProxyTest.java
│           │                       ├── ai/
│           │                       │   ├── A2aProxyTest.java
│           │                       │   └── McpProxyTest.java
│           │                       ├── config/
│           │                       │   ├── ConfigProxyTest.java
│           │                       │   └── HistoryProxyTest.java
│           │                       ├── core/
│           │                       │   ├── ClusterProxyTest.java
│           │                       │   └── NamespaceProxyTest.java
│           │                       └── naming/
│           │                           ├── InstanceProxyTest.java
│           │                           └── ServiceProxyTest.java
│           └── resources/
│               ├── mock/
│               │   ├── application.properties
│               │   └── existconf/
│               │       ├── announcement_zh_CN.conf
│               │       └── console-guide.conf
│               └── nacos-console.properties
├── console-ui/
│   ├── .babelrc
│   ├── .editorconfig
│   ├── .eslintignore
│   ├── .eslintrc
│   ├── .gitignore
│   ├── .prettierignore
│   ├── .prettierrc
│   ├── README.md
│   ├── build/
│   │   ├── copy-dist.js
│   │   ├── copyFile.js
│   │   ├── webpack.base.conf.js
│   │   ├── webpack.dev.conf.js
│   │   └── webpack.prod.conf.js
│   ├── package.json
│   ├── public/
│   │   └── index.ejs
│   ├── src/
│   │   ├── components/
│   │   │   ├── BatchHandle/
│   │   │   │   ├── BatchHandle.js
│   │   │   │   ├── index.js
│   │   │   │   └── index.scss
│   │   │   ├── CloneDialog/
│   │   │   │   ├── CloneDialog.js
│   │   │   │   ├── index.js
│   │   │   │   └── index.scss
│   │   │   ├── Copy/
│   │   │   │   └── index.jsx
│   │   │   ├── DeleteDialog/
│   │   │   │   ├── DeleteDialog.js
│   │   │   │   ├── index.js
│   │   │   │   └── index.scss
│   │   │   ├── DiffEditorDialog/
│   │   │   │   ├── DiffEditorDialog.js
│   │   │   │   ├── index.js
│   │   │   │   └── index.scss
│   │   │   ├── EditorNameSpace/
│   │   │   │   ├── EditorNameSpace.js
│   │   │   │   ├── index.js
│   │   │   │   └── index.scss
│   │   │   ├── ExportDialog/
│   │   │   │   ├── ExportDialog.js
│   │   │   │   ├── index.js
│   │   │   │   └── index.scss
│   │   │   ├── ImportDialog/
│   │   │   │   ├── ImportDialog.js
│   │   │   │   ├── index.js
│   │   │   │   └── index.scss
│   │   │   ├── MagicWandIcon/
│   │   │   │   └── MagicWandIcon.js
│   │   │   ├── MarkdownRenderer/
│   │   │   │   └── MarkdownRenderer.js
│   │   │   ├── MonacoEditor/
│   │   │   │   ├── MonacoEditor.tsx
│   │   │   │   ├── constant.ts
│   │   │   │   ├── index.scss
│   │   │   │   └── index.tsx
│   │   │   ├── NameSpaceList/
│   │   │   │   ├── NameSpaceList.js
│   │   │   │   ├── index.js
│   │   │   │   ├── index.scss
│   │   │   │   └── show.js
│   │   │   ├── NewNameSpace/
│   │   │   │   ├── NewNameSpace.js
│   │   │   │   ├── index.js
│   │   │   │   └── index.scss
│   │   │   ├── Page/
│   │   │   │   └── TotalRender.js
│   │   │   ├── PageTitle/
│   │   │   │   └── index.js
│   │   │   ├── QueryResult/
│   │   │   │   ├── index.js
│   │   │   │   └── index.scss
│   │   │   ├── RegionGroup/
│   │   │   │   ├── RegionGroup.js
│   │   │   │   ├── index.js
│   │   │   │   └── index.scss
│   │   │   ├── ShowCodeing/
│   │   │   │   ├── ShowCodeing.js
│   │   │   │   ├── ShowServiceCodeing.js
│   │   │   │   ├── index.js
│   │   │   │   └── index.scss
│   │   │   └── SuccessDialog/
│   │   │       ├── SuccessDialog.js
│   │   │       ├── index.js
│   │   │       └── index.scss
│   │   ├── config.js
│   │   ├── constants.js
│   │   ├── globalLib.js
│   │   ├── index.js
│   │   ├── index.scss
│   │   ├── layouts/
│   │   │   ├── Header.js
│   │   │   ├── MainLayout.js
│   │   │   ├── index.scss
│   │   │   └── menu.js
│   │   ├── lib.js
│   │   ├── locales/
│   │   │   ├── en-US.js
│   │   │   ├── index.js
│   │   │   └── zh-CN.js
│   │   ├── pages/
│   │   │   ├── AI/
│   │   │   │   ├── AgentDetail/
│   │   │   │   │   ├── AgentDetail.js
│   │   │   │   │   └── index.js
│   │   │   │   ├── AgentManagement/
│   │   │   │   │   ├── AgentManagement.js
│   │   │   │   │   ├── AgentManagement.scss
│   │   │   │   │   └── index.js
│   │   │   │   ├── McpDetail/
│   │   │   │   │   ├── CreateTools/
│   │   │   │   │   │   ├── AdvancedConfig.js
│   │   │   │   │   │   ├── AnnotationsEditor.js
│   │   │   │   │   │   ├── BasicInfo.js
│   │   │   │   │   │   ├── CreateTools.css
│   │   │   │   │   │   ├── DeleteTool.js
│   │   │   │   │   │   ├── InputSchema.js
│   │   │   │   │   │   ├── MetaEditor.js
│   │   │   │   │   │   ├── OutputSchema.js
│   │   │   │   │   │   ├── SchemaEditor.js
│   │   │   │   │   │   ├── components.js
│   │   │   │   │   │   ├── index.js
│   │   │   │   │   │   └── utils.js
│   │   │   │   │   ├── McpDetail.css
│   │   │   │   │   ├── McpDetail.js
│   │   │   │   │   ├── ShowTools.css
│   │   │   │   │   ├── ShowTools.css.bak
│   │   │   │   │   ├── ShowTools.js
│   │   │   │   │   ├── Swagger2Tools.js
│   │   │   │   │   └── index.js
│   │   │   │   ├── McpManagement/
│   │   │   │   │   ├── DashboardCard.js
│   │   │   │   │   ├── ImportMcpDialog.jsx
│   │   │   │   │   ├── McpManagement.js
│   │   │   │   │   └── index.js
│   │   │   │   ├── NewAgent/
│   │   │   │   │   ├── NewAgent.js
│   │   │   │   │   ├── NewAgent.scss
│   │   │   │   │   └── index.js
│   │   │   │   ├── NewMcpServer/
│   │   │   │   │   ├── NewMcpServer.css
│   │   │   │   │   ├── NewMcpServer.js
│   │   │   │   │   └── index.js
│   │   │   │   ├── NewPrompt/
│   │   │   │   │   ├── NewPrompt.js
│   │   │   │   │   ├── NewPrompt.scss
│   │   │   │   │   └── index.js
│   │   │   │   ├── NewSkill/
│   │   │   │   │   ├── NewSkill.js
│   │   │   │   │   ├── NewSkill.scss
│   │   │   │   │   └── index.js
│   │   │   │   ├── PromptDetail/
│   │   │   │   │   ├── PromptDetail.js
│   │   │   │   │   ├── PromptDetail.scss
│   │   │   │   │   └── index.js
│   │   │   │   ├── PromptManagement/
│   │   │   │   │   ├── PromptManagement.js
│   │   │   │   │   ├── PromptManagement.scss
│   │   │   │   │   └── index.js
│   │   │   │   ├── PromptOptimizeDialog/
│   │   │   │   │   ├── PromptOptimizeDialog.js
│   │   │   │   │   ├── PromptOptimizeDialog.scss
│   │   │   │   │   └── index.js
│   │   │   │   ├── PublishPromptVersion/
│   │   │   │   │   ├── PublishPromptVersion.js
│   │   │   │   │   ├── PublishPromptVersion.scss
│   │   │   │   │   └── index.js
│   │   │   │   ├── README.md
│   │   │   │   ├── SkillDetail/
│   │   │   │   │   ├── SkillDetail.js
│   │   │   │   │   ├── SkillDetail.scss
│   │   │   │   │   └── index.js
│   │   │   │   ├── SkillManagement/
│   │   │   │   │   ├── SkillManagement.js
│   │   │   │   │   ├── SkillManagement.scss
│   │   │   │   │   ├── SkillOptimizeDialog.js
│   │   │   │   │   ├── SkillOptimizeDialog.scss
│   │   │   │   │   └── index.js
│   │   │   │   └── services/
│   │   │   │       └── OpenApiService.js
│   │   │   ├── AuthorityControl/
│   │   │   │   ├── PermissionsManagement/
│   │   │   │   │   ├── NewPermissions.js
│   │   │   │   │   ├── PermissionsManagement.js
│   │   │   │   │   ├── PermissionsManagement.scss
│   │   │   │   │   └── index.js
│   │   │   │   ├── README.md
│   │   │   │   ├── RolesManagement/
│   │   │   │   │   ├── NewRole.js
│   │   │   │   │   ├── RolesManagement.js
│   │   │   │   │   ├── RolesManagement.scss
│   │   │   │   │   └── index.js
│   │   │   │   ├── UserManagement/
│   │   │   │   │   ├── NewUser.js
│   │   │   │   │   ├── PasswordReset.js
│   │   │   │   │   ├── UserManagement.js
│   │   │   │   │   ├── UserManagement.scss
│   │   │   │   │   └── index.js
│   │   │   │   └── authority.scss
│   │   │   ├── ClusterManagement/
│   │   │   │   └── ClusterNodeList/
│   │   │   │       ├── ClusterNodeList.js
│   │   │   │       ├── ClusterNodeList.scss
│   │   │   │       └── index.js
│   │   │   ├── ConfigurationManagement/
│   │   │   │   ├── ConfigDetail/
│   │   │   │   │   ├── ConfigCompared.js
│   │   │   │   │   ├── ConfigDetail.js
│   │   │   │   │   ├── index.js
│   │   │   │   │   └── index.scss
│   │   │   │   ├── ConfigEditor/
│   │   │   │   │   ├── ConfigEditor.js
│   │   │   │   │   ├── NewConfigEditor.js
│   │   │   │   │   ├── index.js
│   │   │   │   │   └── index.scss
│   │   │   │   ├── ConfigRollback/
│   │   │   │   │   ├── ConfigRollback.js
│   │   │   │   │   ├── index.js
│   │   │   │   │   └── index.scss
│   │   │   │   ├── ConfigSync/
│   │   │   │   │   ├── ConfigSync.js
│   │   │   │   │   ├── index.js
│   │   │   │   │   └── index.scss
│   │   │   │   ├── ConfigurationManagement/
│   │   │   │   │   ├── ConfigurationManagement.js
│   │   │   │   │   ├── DashboardCard.js
│   │   │   │   │   ├── index.js
│   │   │   │   │   └── index.scss
│   │   │   │   ├── HistoryDetail/
│   │   │   │   │   ├── HistoryDetail.js
│   │   │   │   │   ├── index.js
│   │   │   │   │   └── index.scss
│   │   │   │   ├── HistoryRollback/
│   │   │   │   │   ├── HistoryRollback.js
│   │   │   │   │   ├── index.js
│   │   │   │   │   └── index.scss
│   │   │   │   ├── ListeningToQuery/
│   │   │   │   │   ├── ListeningToQuery.js
│   │   │   │   │   ├── index.js
│   │   │   │   │   └── index.scss
│   │   │   │   └── NewConfig/
│   │   │   │       ├── NewConfig.js
│   │   │   │       ├── index.js
│   │   │   │       └── index.scss
│   │   │   ├── Login/
│   │   │   │   ├── Login.jsx
│   │   │   │   ├── index.jsx
│   │   │   │   └── index.scss
│   │   │   ├── NameSpace/
│   │   │   │   ├── NameSpace.js
│   │   │   │   ├── index.js
│   │   │   │   └── index.scss
│   │   │   ├── PluginManagement/
│   │   │   │   └── PluginList/
│   │   │   │       ├── PluginDetail.js
│   │   │   │       ├── PluginList.js
│   │   │   │       ├── PluginList.scss
│   │   │   │       └── index.js
│   │   │   ├── Register/
│   │   │   │   ├── Register.jsx
│   │   │   │   ├── index.jsx
│   │   │   │   └── index.scss
│   │   │   ├── ServiceManagement/
│   │   │   │   ├── ServiceDetail/
│   │   │   │   │   ├── EditClusterDialog.js
│   │   │   │   │   ├── EditInstanceDialog.js
│   │   │   │   │   ├── EditServiceDialog.js
│   │   │   │   │   ├── InstanceFilter.js
│   │   │   │   │   ├── InstanceTable.js
│   │   │   │   │   ├── ServiceDetail.js
│   │   │   │   │   ├── ServiceDetail.scss
│   │   │   │   │   ├── constant.js
│   │   │   │   │   ├── index.js
│   │   │   │   │   └── util.js
│   │   │   │   ├── ServiceList/
│   │   │   │   │   ├── ServiceList.js
│   │   │   │   │   ├── ServiceList.scss
│   │   │   │   │   └── index.js
│   │   │   │   └── SubscriberList/
│   │   │   │       ├── SubscriberList.js
│   │   │   │       ├── SubscriberList.scss
│   │   │   │       └── index.js
│   │   │   ├── SettingCenter/
│   │   │   │   ├── CopilotConfig.js
│   │   │   │   ├── SettingCenter.js
│   │   │   │   ├── index.js
│   │   │   │   └── index.scss
│   │   │   └── Welcome/
│   │   │       ├── Welcome.js
│   │   │       └── index.js
│   │   ├── reducers/
│   │   │   ├── authority.js
│   │   │   ├── base.js
│   │   │   ├── configuration.js
│   │   │   ├── index.js
│   │   │   ├── locale.js
│   │   │   ├── namespace.js
│   │   │   └── subscribers.js
│   │   ├── theme/
│   │   │   ├── index.js
│   │   │   └── index.scss
│   │   └── utils/
│   │       ├── languageDetector.js
│   │       ├── message.js
│   │       ├── nacosutil.js
│   │       ├── request.js
│   │       └── validateContent.js
│   ├── test/
│   │   ├── .editorconfig
│   │   ├── .gitignore
│   │   ├── README.md
│   │   ├── commons/
│   │   │   └── commons.md
│   │   ├── config.json
│   │   ├── hosts
│   │   ├── install.sh
│   │   ├── package.json
│   │   ├── run.bat
│   │   ├── run.sh
│   │   ├── sample/
│   │   │   ├── configDetail.spec.js
│   │   │   ├── configurationManagement.spec.js
│   │   │   └── instanceFilter.spec.js
│   │   └── uploadfiles/
│   │       └── uploadfiles.md
│   └── tsconfig.json
├── copilot/
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── alibaba/
│       │   │           └── nacos/
│       │   │               └── copilot/
│       │   │                   ├── adapter/
│       │   │                   │   └── StreamResponseCallback.java
│       │   │                   ├── capability/
│       │   │                   │   └── prompt/
│       │   │                   │       ├── PromptOptimizationPrompt.java
│       │   │                   │       ├── SkillGenerationPrompt.java
│       │   │                   │       └── SkillOptimizationPrompt.java
│       │   │                   ├── config/
│       │   │                   │   ├── CopilotAgentManager.java
│       │   │                   │   ├── CopilotConfigStorage.java
│       │   │                   │   ├── CopilotConfiguration.java
│       │   │                   │   └── CopilotProperties.java
│       │   │                   ├── constant/
│       │   │                   │   └── CopilotConstants.java
│       │   │                   ├── form/
│       │   │                   │   ├── PromptDebugForm.java
│       │   │                   │   ├── PromptOptimizationForm.java
│       │   │                   │   ├── SkillGenerationForm.java
│       │   │                   │   └── SkillOptimizationForm.java
│       │   │                   ├── model/
│       │   │                   │   ├── ChatMessage.java
│       │   │                   │   ├── ChatRequest.java
│       │   │                   │   ├── ChatResponse.java
│       │   │                   │   ├── ConversationHistory.java
│       │   │                   │   ├── ConversationMessage.java
│       │   │                   │   ├── OptimizationChange.java
│       │   │                   │   ├── PromptDebugRequest.java
│       │   │                   │   ├── PromptDebugResponse.java
│       │   │                   │   ├── PromptOptimizationRequest.java
│       │   │                   │   ├── PromptOptimizationResponse.java
│       │   │                   │   ├── SkillGenerationRequest.java
│       │   │                   │   ├── SkillGenerationResponse.java
│       │   │                   │   ├── SkillOptimizationRequest.java
│       │   │                   │   ├── SkillOptimizationResponse.java
│       │   │                   │   └── StreamResponseType.java
│       │   │                   └── service/
│       │   │                       ├── PromptDebugService.java
│       │   │                       ├── PromptDebugServiceImpl.java
│       │   │                       ├── PromptOptimizationService.java
│       │   │                       ├── PromptOptimizationServiceImpl.java
│       │   │                       ├── SkillGenerationService.java
│       │   │                       ├── SkillGenerationServiceImpl.java
│       │   │                       ├── SkillOptimizationService.java
│       │   │                       ├── SkillOptimizationServiceImpl.java
│       │   │                       └── StreamEventProcessor.java
│       │   └── resources/
│       │       └── META-INF/
│       │           └── spring/
│       │               └── org.springframework.boot.autoconfigure.AutoConfiguration.imports
│       └── test/
│           └── java/
│               └── com/
│                   └── alibaba/
│                       └── nacos/
│                           └── copilot/
│                               ├── config/
│                               │   ├── CopilotAgentManagerTest.java
│                               │   └── CopilotPropertiesTest.java
│                               ├── form/
│                               │   ├── SkillGenerationFormTest.java
│                               │   └── SkillOptimizationFormTest.java
│                               ├── model/
│                               │   ├── ChatMessageTest.java
│                               │   ├── ChatRequestTest.java
│                               │   ├── ChatResponseTest.java
│                               │   ├── OptimizationChangeTest.java
│                               │   ├── SkillOptimizationResponseTest.java
│                               │   └── StreamResponseTypeTest.java
│                               └── service/
│                                   ├── SkillGenerationServiceImplTest.java
│                                   ├── SkillOptimizationServiceImplTest.java
│                                   └── StreamEventProcessorTest.java
├── core/
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   ├── com/
│       │   │   │   └── alibaba/
│       │   │   │       └── nacos/
│       │   │   │           └── core/
│       │   │   │               ├── ability/
│       │   │   │               │   ├── RemoteAbilityInitializer.java
│       │   │   │               │   ├── ServerAbilityInitializer.java
│       │   │   │               │   ├── ServerAbilityInitializerHolder.java
│       │   │   │               │   ├── config/
│       │   │   │               │   │   └── AbilityConfigs.java
│       │   │   │               │   └── control/
│       │   │   │               │       └── ServerAbilityControlManager.java
│       │   │   │               ├── auth/
│       │   │   │               │   ├── AbstractWebAuthFilter.java
│       │   │   │               │   ├── AuthAdminFilter.java
│       │   │   │               │   ├── AuthConfig.java
│       │   │   │               │   ├── AuthFilter.java
│       │   │   │               │   ├── AuthModuleStateBuilder.java
│       │   │   │               │   ├── InnerApiAuthEnabled.java
│       │   │   │               │   ├── NacosServerAdminAuthConfig.java
│       │   │   │               │   ├── NacosServerAuthConfig.java
│       │   │   │               │   └── RemoteRequestAuthFilter.java
│       │   │   │               ├── cluster/
│       │   │   │               │   ├── Member.java
│       │   │   │               │   ├── MemberChangeListener.java
│       │   │   │               │   ├── MemberLookup.java
│       │   │   │               │   ├── MemberMetaDataConstants.java
│       │   │   │               │   ├── MemberUtil.java
│       │   │   │               │   ├── MembersChangeEvent.java
│       │   │   │               │   ├── NacosMemberManager.java
│       │   │   │               │   ├── ServerMemberManager.java
│       │   │   │               │   ├── Task.java
│       │   │   │               │   ├── health/
│       │   │   │               │   │   ├── AbstractModuleHealthChecker.java
│       │   │   │               │   │   ├── ModuleHealthCheckerHolder.java
│       │   │   │               │   │   └── ReadinessResult.java
│       │   │   │               │   ├── lookup/
│       │   │   │               │   │   ├── AbstractMemberLookup.java
│       │   │   │               │   │   ├── AddressServerMemberLookup.java
│       │   │   │               │   │   ├── FileConfigMemberLookup.java
│       │   │   │               │   │   ├── LookupFactory.java
│       │   │   │               │   │   └── StandaloneMemberLookup.java
│       │   │   │               │   └── remote/
│       │   │   │               │       ├── ClusterRpcClientProxy.java
│       │   │   │               │       ├── MemberReportHandler.java
│       │   │   │               │       ├── request/
│       │   │   │               │       │   ├── AbstractClusterRequest.java
│       │   │   │               │       │   ├── MemberReportRequest.java
│       │   │   │               │       │   ├── PluginAvailabilityRequest.java
│       │   │   │               │       │   └── PluginAvailabilityRequestHandler.java
│       │   │   │               │       └── response/
│       │   │   │               │           ├── MemberReportResponse.java
│       │   │   │               │           └── PluginAvailabilityResponse.java
│       │   │   │               ├── code/
│       │   │   │               │   ├── ControllerMethodsCache.java
│       │   │   │               │   ├── RequestMappingInfo.java
│       │   │   │               │   ├── SpringApplicationRunListener.java
│       │   │   │               │   ├── StandaloneProfileApplicationListener.java
│       │   │   │               │   └── condition/
│       │   │   │               │       ├── Para
Download .txt
Showing preview only (1,536K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (18017 symbols across 1890 files)

FILE: address/src/main/java/com/alibaba/nacos/address/AddressServer.java
  class AddressServer (line 28) | @SpringBootApplication(scanBasePackages = "com.alibaba.nacos")
    method main (line 31) | public static void main(String[] args) {

FILE: address/src/main/java/com/alibaba/nacos/address/component/AddressServerGeneratorManager.java
  class AddressServerGeneratorManager (line 37) | @Component
    method generateProductName (line 46) | public String generateProductName(String name) {
    method generateInstancesByIps (line 64) | public List<Instance> generateInstancesByIps(String serviceName, Strin...
    method generateIpAndPort (line 88) | private String[] generateIpAndPort(String ip) {
    method generateResponseIps (line 102) | public String generateResponseIps(List<com.alibaba.nacos.api.naming.po...
    method generateNacosServiceName (line 119) | public String generateNacosServiceName(String rawServiceName) {

FILE: address/src/main/java/com/alibaba/nacos/address/component/AddressServerManager.java
  class AddressServerManager (line 31) | @Component
    method getRawProductName (line 34) | public String getRawProductName(String name) {
    method getDefaultClusterNameIfEmpty (line 51) | public String getDefaultClusterNameIfEmpty(String name) {
    method getRawClusterName (line 60) | public String getRawClusterName(String name) {
    method splitIps (line 71) | public String[] splitIps(String ips) {

FILE: address/src/main/java/com/alibaba/nacos/address/config/AddressServerSecurityConfiguration.java
  class AddressServerSecurityConfiguration (line 32) | @Configuration
    method addressServerSecurityFilterChain (line 35) | @Bean

FILE: address/src/main/java/com/alibaba/nacos/address/constant/AddressServerConstants.java
  type AddressServerConstants (line 28) | public interface AddressServerConstants {

FILE: address/src/main/java/com/alibaba/nacos/address/controller/AddressServerClusterController.java
  class AddressServerClusterController (line 53) | @RestController
    method AddressServerClusterController (line 67) | public AddressServerClusterController(InstanceOperator instanceOperato...
    method postCluster (line 86) | @RequestMapping(value = "", method = RequestMethod.POST)
    method registerCluster (line 118) | private Result registerCluster(String serviceName, String productName,...
    method deleteCluster (line 155) | @RequestMapping(value = "", method = RequestMethod.DELETE)
    class Result (line 202) | private class Result {
      method Result (line 208) | public Result(String checkResult, int size) {
      method getCheckResult (line 213) | public String getCheckResult() {
      method getSize (line 217) | public int getSize() {

FILE: address/src/main/java/com/alibaba/nacos/address/controller/ServerListController.java
  class ServerListController (line 45) | @RestController
    method ServerListController (line 54) | public ServerListController(AddressServerGeneratorManager addressServe...
    method getCluster (line 68) | @RequestMapping(value = "/{product}/{cluster}", method = RequestMethod...

FILE: address/src/main/java/com/alibaba/nacos/address/misc/Loggers.java
  class Loggers (line 28) | public class Loggers {

FILE: address/src/test/java/com/alibaba/nacos/address/component/AddressServerGeneratorManagerTest.java
  class AddressServerGeneratorManagerTest (line 31) | class AddressServerGeneratorManagerTest {
    method testGenerateProductName (line 33) | @Test
    method testGenerateInstancesByIps (line 47) | @Test
    method testGenerateResponseIps (line 72) | @Test
    method testGenerateNacosServiceName (line 103) | @Test

FILE: address/src/test/java/com/alibaba/nacos/address/component/AddressServerManagerTests.java
  class AddressServerManagerTests (line 24) | class AddressServerManagerTests {
    method getRawProductName (line 28) | @Test
    method getDefaultClusterNameIfEmpty (line 36) | @Test
    method testGetRawClusterName (line 44) | @Test
    method testSplitIps (line 50) | @Test

FILE: address/src/test/java/com/alibaba/nacos/address/controller/AddressServerClusterControllerTest.java
  class AddressServerClusterControllerTest (line 43) | @ExtendWith(MockitoExtension.class)
    method before (line 57) | @BeforeEach
    method tearDown (line 67) | @AfterEach
    method testPostCluster (line 74) | @Test
    method testPostClusterWithErrorIps (line 82) | @Test
    method testPostClusterThrowException (line 88) | @Test
    method testDeleteCluster (line 101) | @Test
    method testDeleteClusterCannotFindService (line 107) | @Test
    method testDeleteClusterEmptyIps (line 114) | @Test
    method testDeleteClusterErrorIps (line 120) | @Test
    method testDeleteClusterThrowException (line 126) | @Test

FILE: address/src/test/java/com/alibaba/nacos/address/controller/ServerListControllerTest.java
  class ServerListControllerTest (line 46) | @ExtendWith(MockitoExtension.class)
    method before (line 59) | @BeforeEach
    method tearDown (line 68) | @AfterEach
    method testGetCluster (line 73) | @Test
    method testGetClusterCannotFindService (line 90) | @Test
    method testGetClusterCannotFindCluster (line 97) | @Test

FILE: ai/src/main/java/com/alibaba/nacos/ai/config/AiEnabledFilter.java
  class AiEnabledFilter (line 32) | public class AiEnabledFilter implements NacosPackageExcludeFilter {
    method getResponsiblePackagePrefix (line 38) | @Override
    method isExcluded (line 43) | @Override

FILE: ai/src/main/java/com/alibaba/nacos/ai/config/McpCacheIndexProperties.java
  class McpCacheIndexProperties (line 26) | @ConfigurationProperties(prefix = "nacos.mcp.cache")
    method isEnabled (line 54) | public boolean isEnabled() {
    method setEnabled (line 58) | public void setEnabled(boolean enabled) {
    method getMaxSize (line 62) | public int getMaxSize() {
    method setMaxSize (line 66) | public void setMaxSize(int maxSize) {
    method getExpireTimeSeconds (line 70) | public long getExpireTimeSeconds() {
    method setExpireTimeSeconds (line 74) | public void setExpireTimeSeconds(long expireTimeSeconds) {
    method getCleanupIntervalSeconds (line 78) | public long getCleanupIntervalSeconds() {
    method setCleanupIntervalSeconds (line 82) | public void setCleanupIntervalSeconds(long cleanupIntervalSeconds) {
    method getSyncIntervalSeconds (line 86) | public long getSyncIntervalSeconds() {
    method setSyncIntervalSeconds (line 90) | public void setSyncIntervalSeconds(long syncIntervalSeconds) {
    method toString (line 94) | @Override

FILE: ai/src/main/java/com/alibaba/nacos/ai/config/McpConfiguration.java
  class McpConfiguration (line 29) | @Configuration
    method McpConfiguration (line 34) | public McpConfiguration(ControllerMethodsCache methodsCache) {
    method init (line 38) | @PostConstruct

FILE: ai/src/main/java/com/alibaba/nacos/ai/config/McpServerIndexConfiguration.java
  class McpServerIndexConfiguration (line 44) | @Configuration
    method McpServerIndexConfiguration (line 52) | public McpServerIndexConfiguration(McpCacheIndexProperties cacheProper...
    method mcpCacheIndex (line 59) | @Bean
    method mcpCacheScheduledExecutor (line 71) | @Bean
    method cachedMcpServerIndex (line 87) | @Bean
    method plainMcpServerIndex (line 102) | @Bean

FILE: ai/src/main/java/com/alibaba/nacos/ai/constant/Constants.java
  class Constants (line 24) | public class Constants {
    class A2A (line 86) | public static class A2A {
    class Skills (line 113) | public static class Skills {
    class Prompt (line 135) | public static class Prompt {

FILE: ai/src/main/java/com/alibaba/nacos/ai/constant/McpServerValidationConstants.java
  class McpServerValidationConstants (line 24) | public final class McpServerValidationConstants {
    method McpServerValidationConstants (line 41) | private McpServerValidationConstants() {

FILE: ai/src/main/java/com/alibaba/nacos/ai/controller/A2aAdminController.java
  class A2aAdminController (line 56) | @NacosApi
    method A2aAdminController (line 64) | public A2aAdminController(A2aServerOperationService a2aServerOperation...
    method registerAgent (line 75) | @PostMapping
    method getAgentCard (line 91) | @GetMapping
    method updateAgentCard (line 107) | @PutMapping
    method deleteAgent (line 124) | @DeleteMapping
    method listAgents (line 140) | @GetMapping("/list")
    method listAgentVersions (line 158) | @GetMapping("/version/list")

FILE: ai/src/main/java/com/alibaba/nacos/ai/controller/McpAdminController.java
  class McpAdminController (line 54) | @NacosApi
    method McpAdminController (line 62) | public McpAdminController(McpServerOperationService mcpServerOperation...
    method listMcpServers (line 74) | @GetMapping(value = "/list")
    method getMcpServer (line 92) | @GetMapping
    method createMcpServer (line 106) | @PostMapping
    method updateMcpServer (line 128) | @PutMapping
    method deleteMcpServer (line 146) | @DeleteMapping

FILE: ai/src/main/java/com/alibaba/nacos/ai/controller/PromptAdminController.java
  class PromptAdminController (line 65) | @NacosApi
    method PromptAdminController (line 73) | public PromptAdminController(PromptAdminOperationService promptOperati...
    method publishPrompt (line 85) | @PostMapping
    method getPromptMetadata (line 109) | @GetMapping("/metadata")
    method deletePrompt (line 125) | @DeleteMapping
    method listPrompts (line 147) | @GetMapping("/list")
    method listPromptVersions (line 165) | @GetMapping("/versions")
    method queryPromptDetail (line 181) | @GetMapping("/detail")
    method bindLabel (line 197) | @PutMapping("/label")
    method unbindLabel (line 217) | @DeleteMapping("/label")
    method updatePromptMetadata (line 241) | @PutMapping("/metadata")
    method parseBizTags (line 259) | private List<String> parseBizTags(String bizTags) {
    method parseVariables (line 276) | private List<PromptVariable> parseVariables(String variables) {

FILE: ai/src/main/java/com/alibaba/nacos/ai/controller/PromptClientController.java
  class PromptClientController (line 43) | @NacosApi
    method PromptClientController (line 51) | public PromptClientController(PromptClientOperationService promptOpera...
    method queryPrompt (line 58) | @GetMapping
    method convertToClientPrompt (line 75) | private Prompt convertToClientPrompt(PromptVersionInfo versionInfo) {

FILE: ai/src/main/java/com/alibaba/nacos/ai/controller/SkillAdminController.java
  class SkillAdminController (line 55) | @NacosApi
    method SkillAdminController (line 63) | public SkillAdminController(SkillOperationService skillOperationServic...
    method registerSkill (line 74) | @PostMapping
    method getSkill (line 90) | @GetMapping
    method updateSkill (line 105) | @PutMapping
    method deleteSkill (line 121) | @DeleteMapping
    method listSkills (line 137) | @GetMapping("/list")
    method uploadSkill (line 157) | @PostMapping(value = "/upload", consumes = "multipart/form-data")

FILE: ai/src/main/java/com/alibaba/nacos/ai/enums/ExternalDataTypeEnum.java
  type ExternalDataTypeEnum (line 27) | public enum ExternalDataTypeEnum {
    method ExternalDataTypeEnum (line 57) | ExternalDataTypeEnum(String name) {
    method getName (line 61) | public String getName() {
    method parseType (line 70) | public static ExternalDataTypeEnum parseType(String value) {

FILE: ai/src/main/java/com/alibaba/nacos/ai/enums/McpImportResultStatusEnum.java
  type McpImportResultStatusEnum (line 23) | public enum McpImportResultStatusEnum {
    method McpImportResultStatusEnum (line 42) | McpImportResultStatusEnum(String name) {
    method getName (line 46) | public String getName() {

FILE: ai/src/main/java/com/alibaba/nacos/ai/form/a2a/admin/AgentCardForm.java
  class AgentCardForm (line 34) | public class AgentCardForm extends AgentForm {
    method validate (line 41) | @Override
    method validateRegistrationType (line 53) | protected void validateRegistrationType() throws NacosApiException {
    method fillDefaultRegistrationType (line 62) | protected void fillDefaultRegistrationType() {
    method getAgentCard (line 68) | public String getAgentCard() {
    method setAgentCard (line 72) | public void setAgentCard(String agentCard) {

FILE: ai/src/main/java/com/alibaba/nacos/ai/form/a2a/admin/AgentCardUpdateForm.java
  class AgentCardUpdateForm (line 29) | public class AgentCardUpdateForm extends AgentCardForm {
    method getSetAsLatest (line 36) | public boolean getSetAsLatest() {
    method setSetAsLatest (line 40) | public void setSetAsLatest(boolean setAsLatest) {
    method fillDefaultRegistrationType (line 44) | @Override
    method validateRegistrationType (line 49) | @Override

FILE: ai/src/main/java/com/alibaba/nacos/ai/form/a2a/admin/AgentForm.java
  class AgentForm (line 35) | public class AgentForm implements NacosForm {
    method validate (line 48) | @Override
    method fillDefaultNamespaceId (line 57) | protected void fillDefaultNamespaceId() {
    method getNamespaceId (line 63) | public String getNamespaceId() {
    method setNamespaceId (line 67) | public void setNamespaceId(String namespaceId) {
    method getAgentName (line 71) | public String getAgentName() {
    method setAgentName (line 75) | public void setAgentName(String agentName) {
    method getVersion (line 79) | public String getVersion() {
    method setVersion (line 83) | public void setVersion(String version) {
    method getRegistrationType (line 87) | public String getRegistrationType() {
    method setRegistrationType (line 91) | public void setRegistrationType(String registrationType) {

FILE: ai/src/main/java/com/alibaba/nacos/ai/form/a2a/admin/AgentListForm.java
  class AgentListForm (line 31) | public class AgentListForm extends AgentForm {
    method validate (line 38) | @Override
    method getSearch (line 48) | public String getSearch() {
    method setSearch (line 52) | public void setSearch(String search) {

FILE: ai/src/main/java/com/alibaba/nacos/ai/form/mcp/admin/McpDetailForm.java
  class McpDetailForm (line 31) | public class McpDetailForm extends McpForm {
    method validate (line 42) | @Override
    method getServerSpecification (line 51) | public String getServerSpecification() {
    method setServerSpecification (line 55) | public void setServerSpecification(String serverSpecification) {
    method getToolSpecification (line 59) | public String getToolSpecification() {
    method setToolSpecification (line 63) | public void setToolSpecification(String toolSpecification) {
    method getEndpointSpecification (line 67) | public String getEndpointSpecification() {
    method setEndpointSpecification (line 71) | public void setEndpointSpecification(String endpointSpecification) {

FILE: ai/src/main/java/com/alibaba/nacos/ai/form/mcp/admin/McpForm.java
  class McpForm (line 33) | public class McpForm implements NacosForm {
    method validate (line 46) | @Override
    method fillDefaultValue (line 55) | protected void fillDefaultValue() {
    method getNamespaceId (line 61) | public String getNamespaceId() {
    method setNamespaceId (line 65) | public void setNamespaceId(String namespaceId) {
    method getVersion (line 69) | public String getVersion() {
    method setVersion (line 73) | public void setVersion(String version) {
    method getMcpId (line 77) | public String getMcpId() {
    method setMcpId (line 81) | public void setMcpId(String id) {
    method getMcpName (line 85) | public String getMcpName() {
    method setMcpName (line 89) | public void setMcpName(String name) {

FILE: ai/src/main/java/com/alibaba/nacos/ai/form/mcp/admin/McpImportForm.java
  class McpImportForm (line 32) | public class McpImportForm extends McpForm {
    method validate (line 68) | @Override
    method getImportType (line 85) | public String getImportType() {
    method setImportType (line 89) | public void setImportType(String importType) {
    method getData (line 93) | public String getData() {
    method setData (line 97) | public void setData(String data) {
    method isOverrideExisting (line 101) | public boolean isOverrideExisting() {
    method setOverrideExisting (line 105) | public void setOverrideExisting(boolean overrideExisting) {
    method isValidateOnly (line 109) | public boolean isValidateOnly() {
    method setValidateOnly (line 113) | public void setValidateOnly(boolean validateOnly) {
    method isSkipInvalid (line 117) | public boolean isSkipInvalid() {
    method setSkipInvalid (line 121) | public void setSkipInvalid(boolean skipInvalid) {
    method getSelectedServers (line 125) | public String[] getSelectedServers() {
    method setSelectedServers (line 129) | public void setSelectedServers(String[] selectedServers) {
    method getCursor (line 133) | public String getCursor() {
    method setCursor (line 137) | public void setCursor(String cursor) {
    method getLimit (line 141) | public Integer getLimit() {
    method setLimit (line 145) | public void setLimit(Integer limit) {
    method getSearch (line 149) | public String getSearch() {
    method setSearch (line 153) | public void setSearch(String search) {

FILE: ai/src/main/java/com/alibaba/nacos/ai/form/mcp/admin/McpListForm.java
  class McpListForm (line 31) | public class McpListForm extends McpForm {
    method validate (line 41) | @Override
    method fillDefaultValue (line 51) | @Override
    method getSearch (line 59) | public String getSearch() {
    method setSearch (line 63) | public void setSearch(String search) {

FILE: ai/src/main/java/com/alibaba/nacos/ai/form/mcp/admin/McpUpdateForm.java
  class McpUpdateForm (line 26) | public class McpUpdateForm extends McpDetailForm {
    method getLatest (line 35) | public Boolean getLatest() {
    method setLatest (line 39) | public void setLatest(Boolean publish) {
    method isOverrideExisting (line 43) | public boolean isOverrideExisting() {
    method setOverrideExisting (line 47) | public void setOverrideExisting(boolean overrideExisting) {

FILE: ai/src/main/java/com/alibaba/nacos/ai/form/prompt/PromptForm.java
  class PromptForm (line 33) | public class PromptForm implements NacosForm {
    method validate (line 42) | @Override
    method fillDefaultNamespaceId (line 51) | protected void fillDefaultNamespaceId() {
    method getNamespaceId (line 55) | public String getNamespaceId() {
    method setNamespaceId (line 59) | public void setNamespaceId(String namespaceId) {
    method getPromptKey (line 63) | public String getPromptKey() {
    method setPromptKey (line 67) | public void setPromptKey(String promptKey) {

FILE: ai/src/main/java/com/alibaba/nacos/ai/form/prompt/PromptHistoryForm.java
  class PromptHistoryForm (line 28) | public class PromptHistoryForm extends PromptForm {
    method validate (line 45) | @Override
    method getPageNo (line 60) | public int getPageNo() {
    method setPageNo (line 64) | public void setPageNo(int pageNo) {
    method getPageSize (line 68) | public int getPageSize() {
    method setPageSize (line 72) | public void setPageSize(int pageSize) {

FILE: ai/src/main/java/com/alibaba/nacos/ai/form/prompt/PromptLabelBindForm.java
  class PromptLabelBindForm (line 29) | public class PromptLabelBindForm extends PromptForm {
    method validate (line 35) | @Override
    method getLabel (line 48) | public String getLabel() {
    method setLabel (line 52) | public void setLabel(String label) {
    method getVersion (line 56) | public String getVersion() {
    method setVersion (line 60) | public void setVersion(String version) {

FILE: ai/src/main/java/com/alibaba/nacos/ai/form/prompt/PromptLabelForm.java
  class PromptLabelForm (line 29) | public class PromptLabelForm extends PromptForm {
    method validate (line 33) | @Override
    method getLabel (line 42) | public String getLabel() {
    method setLabel (line 46) | public void setLabel(String label) {

FILE: ai/src/main/java/com/alibaba/nacos/ai/form/prompt/PromptListForm.java
  class PromptListForm (line 32) | public class PromptListForm implements NacosForm {
    method validate (line 66) | @Override
    method fillDefaultNamespaceId (line 88) | private void fillDefaultNamespaceId() {
    method getNamespaceId (line 94) | public String getNamespaceId() {
    method setNamespaceId (line 98) | public void setNamespaceId(String namespaceId) {
    method getPromptKey (line 102) | public String getPromptKey() {
    method setPromptKey (line 106) | public void setPromptKey(String promptKey) {
    method getSearch (line 110) | public String getSearch() {
    method setSearch (line 114) | public void setSearch(String search) {
    method getBizTags (line 118) | public String getBizTags() {
    method setBizTags (line 122) | public void setBizTags(String bizTags) {
    method getPageNo (line 126) | public int getPageNo() {
    method setPageNo (line 130) | public void setPageNo(int pageNo) {
    method getPageSize (line 134) | public int getPageSize() {
    method setPageSize (line 138) | public void setPageSize(int pageSize) {

FILE: ai/src/main/java/com/alibaba/nacos/ai/form/prompt/PromptMetadataForm.java
  class PromptMetadataForm (line 28) | public class PromptMetadataForm extends PromptForm {
    method getDescription (line 43) | public String getDescription() {
    method setDescription (line 47) | public void setDescription(String description) {
    method getBizTags (line 51) | public String getBizTags() {
    method setBizTags (line 55) | public void setBizTags(String bizTags) {

FILE: ai/src/main/java/com/alibaba/nacos/ai/form/prompt/PromptPublishForm.java
  class PromptPublishForm (line 32) | public class PromptPublishForm extends PromptForm {
    method validate (line 69) | @Override
    method getVersion (line 84) | public String getVersion() {
    method setVersion (line 88) | public void setVersion(String version) {
    method getTemplate (line 92) | public String getTemplate() {
    method setTemplate (line 96) | public void setTemplate(String template) {
    method getCommitMsg (line 100) | public String getCommitMsg() {
    method setCommitMsg (line 104) | public void setCommitMsg(String commitMsg) {
    method getDescription (line 108) | public String getDescription() {
    method setDescription (line 112) | public void setDescription(String description) {
    method getBizTags (line 116) | public String getBizTags() {
    method setBizTags (line 120) | public void setBizTags(String bizTags) {
    method getVariables (line 124) | public String getVariables() {
    method setVariables (line 128) | public void setVariables(String variables) {

FILE: ai/src/main/java/com/alibaba/nacos/ai/form/prompt/PromptQueryForm.java
  class PromptQueryForm (line 24) | public class PromptQueryForm extends PromptForm {
    method getVersion (line 32) | public String getVersion() {
    method setVersion (line 36) | public void setVersion(String version) {
    method getLabel (line 40) | public String getLabel() {
    method setLabel (line 44) | public void setLabel(String label) {
    method getMd5 (line 48) | public String getMd5() {
    method setMd5 (line 52) | public void setMd5(String md5) {

FILE: ai/src/main/java/com/alibaba/nacos/ai/form/skills/admin/SkillDetailForm.java
  class SkillDetailForm (line 31) | public class SkillDetailForm extends SkillForm {
    method validate (line 41) | @Override
    method getSkillCard (line 52) | public String getSkillCard() {
    method setSkillCard (line 56) | public void setSkillCard(String skillCard) {

FILE: ai/src/main/java/com/alibaba/nacos/ai/form/skills/admin/SkillForm.java
  class SkillForm (line 33) | public class SkillForm implements NacosForm {
    method validate (line 44) | @Override
    method fillDefaultNamespaceId (line 53) | protected void fillDefaultNamespaceId() {
    method getNamespaceId (line 59) | public String getNamespaceId() {
    method setNamespaceId (line 63) | public void setNamespaceId(String namespaceId) {
    method getSkillName (line 67) | public String getSkillName() {
    method setSkillName (line 71) | public void setSkillName(String skillName) {
    method getVersion (line 75) | public String getVersion() {
    method setVersion (line 79) | public void setVersion(String version) {

FILE: ai/src/main/java/com/alibaba/nacos/ai/form/skills/admin/SkillListForm.java
  class SkillListForm (line 31) | public class SkillListForm extends SkillForm {
    method validate (line 38) | @Override
    method getSearch (line 50) | public String getSearch() {
    method setSearch (line 54) | public void setSearch(String search) {

FILE: ai/src/main/java/com/alibaba/nacos/ai/form/skills/admin/SkillUpdateForm.java
  class SkillUpdateForm (line 26) | public class SkillUpdateForm extends SkillDetailForm {
    method getSetAsLatest (line 36) | public Boolean getSetAsLatest() {
    method setSetAsLatest (line 40) | public void setSetAsLatest(Boolean setAsLatest) {

FILE: ai/src/main/java/com/alibaba/nacos/ai/index/AbstractMcpServerIndex.java
  class AbstractMcpServerIndex (line 41) | public abstract class AbstractMcpServerIndex implements McpServerIndex {
    method AbstractMcpServerIndex (line 47) | public AbstractMcpServerIndex(NamespaceOperationService namespaceOpera...
    method fetchOrderedNamespaceList (line 52) | protected List<String> fetchOrderedNamespaceList() {
    method getFirstMcpServerByName (line 57) | protected McpServerIndexData getFirstMcpServerByName(String name) {
    method searchMcpServerByNameWithPage (line 67) | @Override
    method afterSearch (line 93) | protected abstract void afterSearch(McpServerIndexData searchResult, S...
    method searchMcpServers (line 98) | protected Page<ConfigInfo> searchMcpServers(String namespace, String s...
    method mapToMcpServerVersionInfo (line 118) | protected McpServerVersionInfo mapToMcpServerVersionInfo(ConfigInfo co...
    method mcpToIndexAndUpdateToCache (line 124) | protected McpServerIndexData mcpToIndexAndUpdateToCache(McpServerVersi...

FILE: ai/src/main/java/com/alibaba/nacos/ai/index/CachedMcpServerIndex.java
  class CachedMcpServerIndex (line 45) | public class CachedMcpServerIndex extends AbstractMcpServerIndex {
    method CachedMcpServerIndex (line 64) | public CachedMcpServerIndex(ConfigDetailService configDetailService,
    method getMcpServerById (line 84) | @Override
    method getMcpServerByName (line 109) | @Override
    method afterSearch (line 140) | @Override
    method getMcpServerByIdFromDatabase (line 151) | private McpServerIndexData getMcpServerByIdFromDatabase(String id) {
    method getMcpServerByNameFromDatabase (line 174) | private McpServerIndexData getMcpServerByNameFromDatabase(String names...
    method startSyncTask (line 192) | private void startSyncTask() {
    method destroy (line 208) | @PreDestroy
    method syncCacheFromDatabase (line 223) | private void syncCacheFromDatabase() {
    method getCacheStats (line 239) | public McpCacheIndex.CacheStats getCacheStats() {
    method clearCache (line 250) | public void clearCache() {
    method triggerCacheSync (line 258) | public void triggerCacheSync() {
    method removeMcpServerByName (line 273) | @Override
    method removeMcpServerById (line 289) | @Override

FILE: ai/src/main/java/com/alibaba/nacos/ai/index/McpCacheIndex.java
  type McpCacheIndex (line 26) | public interface McpCacheIndex {
    method getMcpId (line 35) | String getMcpId(String namespaceId, String mcpName);
    method getMcpServerByName (line 44) | McpServerIndexData getMcpServerByName(String namespaceId, String mcpNa...
    method getMcpServerById (line 52) | McpServerIndexData getMcpServerById(String mcpId);
    method updateIndex (line 61) | void updateIndex(String namespaceId, String mcpName, String mcpId);
    method removeIndex (line 69) | void removeIndex(String namespaceId, String mcpName);
    method removeIndex (line 76) | void removeIndex(String mcpId);
    method clear (line 81) | void clear();
    method getSize (line 88) | int getSize();
    method getStats (line 95) | CacheStats getStats();
    class CacheStats (line 100) | class CacheStats {
      method CacheStats (line 110) | public CacheStats(long hitCount, long missCount, long evictionCount,...
      method getHitCount (line 117) | public long getHitCount() {
      method getMissCount (line 121) | public long getMissCount() {
      method getEvictionCount (line 125) | public long getEvictionCount() {
      method getSize (line 129) | public long getSize() {
      method getHitRate (line 133) | public double getHitRate() {

FILE: ai/src/main/java/com/alibaba/nacos/ai/index/McpServerIndex.java
  type McpServerIndex (line 27) | public interface McpServerIndex {
    method searchMcpServerByNameWithPage (line 39) | Page<McpServerIndexData> searchMcpServerByNameWithPage(String namespac...
    method getMcpServerById (line 47) | McpServerIndexData getMcpServerById(String id);
    method getMcpServerByName (line 56) | McpServerIndexData getMcpServerByName(String namespaceId, String name);
    method removeMcpServerByName (line 64) | void removeMcpServerByName(String namespaceId, String mcpName);
    method removeMcpServerById (line 71) | void removeMcpServerById(String mcpId);

FILE: ai/src/main/java/com/alibaba/nacos/ai/index/MemoryMcpCacheIndex.java
  class MemoryMcpCacheIndex (line 58) | public class MemoryMcpCacheIndex implements McpCacheIndex {
    method MemoryMcpCacheIndex (line 90) | public MemoryMcpCacheIndex(McpCacheIndexProperties properties) {
    method getMcpId (line 125) | @Override
    method getMcpServerByName (line 161) | @Override
    method getMcpServerById (line 170) | @Override
    method updateIndex (line 198) | @Override
    method removeIndex (line 231) | @Override
    method removeIndex (line 247) | @Override
    method clear (line 260) | @Override
    method getSize (line 277) | @Override
    method getStats (line 282) | @Override
    method shutdown (line 290) | public void shutdown() {
    method buildNameKey (line 306) | private String buildNameKey(String namespaceId, String mcpName) {
    method cleanupInvalidMappings (line 310) | private void cleanupInvalidMappings(String mcpId) {
    method cleanupExpiredEntries (line 314) | private void cleanupExpiredEntries() {
    method evictLeastRecentlyUsed (line 338) | private void evictLeastRecentlyUsed() {
    method addToHead (line 350) | private void addToHead(CacheNode node) {
    method removeFromLru (line 357) | private synchronized void removeFromLru(CacheNode node) {
    method moveToHead (line 364) | private synchronized void moveToHead(CacheNode node) {
    class CacheNode (line 379) | private static class CacheNode {
      method CacheNode (line 391) | CacheNode(String key, McpServerIndexData data, long createTimeSecond...
      method isExpired (line 397) | boolean isExpired(long expireTimeSeconds) {

FILE: ai/src/main/java/com/alibaba/nacos/ai/index/PlainMcpServerIndex.java
  class PlainMcpServerIndex (line 39) | public class PlainMcpServerIndex extends AbstractMcpServerIndex {
    method PlainMcpServerIndex (line 43) | public PlainMcpServerIndex(NamespaceOperationService namespaceOperatio...
    method getMcpServerById (line 55) | @Override
    method getMcpServerById (line 71) | public McpServerIndexData getMcpServerById(String namespaceId, String ...
    method buildConfigQueryChainRequest (line 80) | private ConfigQueryChainRequest buildConfigQueryChainRequest(String na...
    method getMcpServerByName (line 95) | @Override
    method removeMcpServerByName (line 116) | @Override
    method removeMcpServerById (line 126) | @Override
    method afterSearch (line 131) | @Override

FILE: ai/src/main/java/com/alibaba/nacos/ai/model/mcp/McpServerIndexData.java
  class McpServerIndexData (line 24) | public class McpServerIndexData {
    method newIndexData (line 36) | public static McpServerIndexData newIndexData(String id, String namesp...
    method getId (line 43) | public String getId() {
    method setId (line 47) | public void setId(String id) {
    method getNamespaceId (line 51) | public String getNamespaceId() {
    method setNamespaceId (line 55) | public void setNamespaceId(String namespaceId) {

FILE: ai/src/main/java/com/alibaba/nacos/ai/model/mcp/McpServerStorageInfo.java
  class McpServerStorageInfo (line 26) | public class McpServerStorageInfo extends McpServerBasicInfo {
    method getToolsDescriptionRef (line 34) | public String getToolsDescriptionRef() {
    method setToolsDescriptionRef (line 38) | public void setToolsDescriptionRef(String toolsDescriptionRef) {
    method getPromptDescriptionRef (line 42) | public String getPromptDescriptionRef() {
    method setPromptDescriptionRef (line 46) | public void setPromptDescriptionRef(String promptDescriptionRef) {
    method getResourceDescriptionRef (line 50) | public String getResourceDescriptionRef() {
    method setResourceDescriptionRef (line 54) | public void setResourceDescriptionRef(String resourceDescriptionRef) {

FILE: ai/src/main/java/com/alibaba/nacos/ai/model/mcp/UrlPageResult.java
  class UrlPageResult (line 27) | public class UrlPageResult {
    method UrlPageResult (line 33) | public UrlPageResult(List<McpServerDetailInfo> servers, String nextCur...
    method getServers (line 38) | public List<McpServerDetailInfo> getServers() {
    method getNextCursor (line 42) | public String getNextCursor() {
    method setNextCursor (line 46) | public void setNextCursor(String nextCursor) {
    method setServers (line 50) | public void setServers(List<McpServerDetailInfo> servers) {

FILE: ai/src/main/java/com/alibaba/nacos/ai/param/AgentHttpParamExtractor.java
  class AgentHttpParamExtractor (line 35) | public class AgentHttpParamExtractor extends AbstractHttpParamExtractor {
    method extractParam (line 39) | @Override
    method deserializeAndGetAgentName (line 50) | private String deserializeAndGetAgentName(String agentCardJson) {

FILE: ai/src/main/java/com/alibaba/nacos/ai/param/McpHttpParamExtractor.java
  class McpHttpParamExtractor (line 32) | public class McpHttpParamExtractor extends AbstractHttpParamExtractor {
    method extractParam (line 34) | @Override

FILE: ai/src/main/java/com/alibaba/nacos/ai/param/PromptHttpParamExtractor.java
  class PromptHttpParamExtractor (line 33) | public class PromptHttpParamExtractor extends AbstractHttpParamExtractor {
    method extractParam (line 37) | @Override

FILE: ai/src/main/java/com/alibaba/nacos/ai/param/SkillHttpParamExtractor.java
  class SkillHttpParamExtractor (line 35) | public class SkillHttpParamExtractor extends AbstractHttpParamExtractor {
    method extractParam (line 39) | @Override
    method deserializeAndGetSkillName (line 50) | private String deserializeAndGetSkillName(String skillCardJson) {

FILE: ai/src/main/java/com/alibaba/nacos/ai/remote/handler/McpServerEndpointRequestHandler.java
  class McpServerEndpointRequestHandler (line 59) | @Component
    method McpServerEndpointRequestHandler (line 73) | public McpServerEndpointRequestHandler(EphemeralClientOperationService...
    method handle (line 80) | @Override
    method checkParameters (line 97) | private void checkParameters(McpServerEndpointRequest request) throws ...
    method doHandler (line 104) | private McpServerEndpointResponse doHandler(McpServerEndpointRequest r...
    method buildInstance (line 144) | private Instance buildInstance(McpServerEndpointRequest request) throw...
    method buildServiceRef (line 155) | private McpServiceRef buildServiceRef(McpServerDetailInfo mcpServer) {
    method doRegister (line 171) | private void doRegister(Service service, Instance instance, RequestMet...
    method doDeregister (line 178) | private void doDeregister(Service service, Instance instance, RequestM...

FILE: ai/src/main/java/com/alibaba/nacos/ai/remote/handler/QueryMcpServerRequestHandler.java
  class QueryMcpServerRequestHandler (line 43) | @Component
    method QueryMcpServerRequestHandler (line 50) | public QueryMcpServerRequestHandler(McpServerOperationService mcpServe...
    method handle (line 56) | @Override
    method doHandler (line 70) | private QueryMcpServerResponse doHandler(QueryMcpServerRequest request...

FILE: ai/src/main/java/com/alibaba/nacos/ai/remote/handler/QueryPromptRequestHandler.java
  class QueryPromptRequestHandler (line 44) | @Component
    method QueryPromptRequestHandler (line 51) | public QueryPromptRequestHandler(PromptClientOperationService promptOp...
    method handle (line 55) | @Override
    method convertToClientPrompt (line 82) | private Prompt convertToClientPrompt(PromptVersionInfo versionInfo) {

FILE: ai/src/main/java/com/alibaba/nacos/ai/remote/handler/ReleaseMcpServerRequestHandler.java
  class ReleaseMcpServerRequestHandler (line 53) | @Component
    method ReleaseMcpServerRequestHandler (line 64) | public ReleaseMcpServerRequestHandler(McpServerOperationService mcpSer...
    method handle (line 71) | @Override
    method checkParameters (line 87) | private void checkParameters(ReleaseMcpServerRequest request) throws N...
    method doHandler (line 105) | private ReleaseMcpServerResponse doHandler(ReleaseMcpServerRequest req...
    method createNewMcpServer (line 145) | private String createNewMcpServer(String namespaceId, ReleaseMcpServer...
    method createNewVersionMcpServer (line 155) | private void createNewVersionMcpServer(String namespaceId, ReleaseMcpS...
    method autoBuildMcpEndpointSpecification (line 168) | private McpEndpointSpec autoBuildMcpEndpointSpecification(String names...
    method autoBuildMcpEndpointSpecification (line 178) | private McpEndpointSpec autoBuildMcpEndpointSpecification(String names...

FILE: ai/src/main/java/com/alibaba/nacos/ai/remote/handler/a2a/AgentEndpointRequestHandler.java
  class AgentEndpointRequestHandler (line 55) | @Component
    method AgentEndpointRequestHandler (line 64) | public AgentEndpointRequestHandler(EphemeralClientOperationServiceImpl...
    method handle (line 70) | @Override
    method transferInstance (line 106) | private Instance transferInstance(AgentEndpointRequest request) throws...
    method validateRequest (line 110) | private void validateRequest(AgentEndpointRequest request) throws Naco...
    method doRegisterEndpoint (line 125) | private void doRegisterEndpoint(Service service, Instance instance, Re...
    method doDeregisterEndpoint (line 133) | private void doDeregisterEndpoint(Service service, Instance instance, ...

FILE: ai/src/main/java/com/alibaba/nacos/ai/remote/handler/a2a/BatchAgentEndpointRequestHandler.java
  class BatchAgentEndpointRequestHandler (line 59) | @Component
    method BatchAgentEndpointRequestHandler (line 68) | public BatchAgentEndpointRequestHandler(EphemeralClientOperationServic...
    method handle (line 74) | @Override
    method validateRequest (line 99) | private void validateRequest(BatchAgentEndpointRequest request) throws...
    method publishBatchRegisterInstanceTraceEvent (line 124) | private void publishBatchRegisterInstanceTraceEvent(Service service, L...

FILE: ai/src/main/java/com/alibaba/nacos/ai/remote/handler/a2a/QueryAgentCardRequestHandler.java
  class QueryAgentCardRequestHandler (line 43) | @Component
    method QueryAgentCardRequestHandler (line 50) | public QueryAgentCardRequestHandler(A2aServerOperationService a2aServe...
    method handle (line 54) | @Override
    method doHandler (line 68) | private QueryAgentCardResponse doHandler(QueryAgentCardRequest request) {

FILE: ai/src/main/java/com/alibaba/nacos/ai/remote/handler/a2a/ReleaseAgentCardRequestHandler.java
  class ReleaseAgentCardRequestHandler (line 47) | @Component
    method ReleaseAgentCardRequestHandler (line 54) | public ReleaseAgentCardRequestHandler(A2aServerOperationService a2aSer...
    method handle (line 58) | @Override
    method validateRequest (line 77) | private void validateRequest(ReleaseAgentCardRequest request) throws N...
    method doHandler (line 85) | private void doHandler(ReleaseAgentCardRequest request, RequestMeta me...
    method createAgentCard (line 111) | private void createAgentCard(String namespaceId, AgentCard agentCard, ...
    method createNewVersionAgentCard (line 116) | private void createNewVersionAgentCard(String namespaceId, AgentCard a...

FILE: ai/src/main/java/com/alibaba/nacos/ai/remote/manager/AiConnectionBasedClientManager.java
  class AiConnectionBasedClientManager (line 42) | @Service
    method AiConnectionBasedClientManager (line 47) | public AiConnectionBasedClientManager(ConnectionBasedClientManager con...
    method clientConnected (line 51) | @Override
    method clientConnected (line 63) | @Override
    method clientConnected (line 68) | @Override
    method syncClientConnected (line 73) | @Override
    method clientDisConnected (line 78) | @Override
    method clientDisconnected (line 87) | @Override
    method getClient (line 92) | @Override
    method contains (line 97) | @Override
    method allClientId (line 102) | @Override
    method isResponsibleClient (line 107) | @Override
    method verifyClient (line 112) | @Override

FILE: ai/src/main/java/com/alibaba/nacos/ai/service/McpEndpointOperationService.java
  class McpEndpointOperationService (line 45) | @org.springframework.stereotype.Service
    method McpEndpointOperationService (line 54) | public McpEndpointOperationService(ServiceOperator serviceOperator, In...
    method createMcpServerEndpointServiceIfNecessary (line 75) | public Service createMcpServerEndpointServiceIfNecessary(String namesp...
    method generateService (line 99) | public Service generateService(String namespaceId, String mcpName) {
    method getMcpServerEndpointInstances (line 103) | public List<Instance> getMcpServerEndpointInstances(McpServiceRef serv...
    method deleteMcpServerEndpointService (line 119) | public void deleteMcpServerEndpointService(String namespaceId, String ...
    method isNotExist (line 132) | private boolean isNotExist(Service service) throws NacosException {
    method isMcpDirectService (line 136) | private boolean isMcpDirectService(Service service) {
    method doCreateNewService (line 141) | private void doCreateNewService(Service service) throws NacosException {
    method doUpdateInstanceInfo (line 153) | private void doUpdateInstanceInfo(Service service, McpEndpointSpec end...

FILE: ai/src/main/java/com/alibaba/nacos/ai/service/McpExternalDataAdaptor.java
  class McpExternalDataAdaptor (line 66) | @Service
    method adaptExternalDataToNacosMcpServerFormat (line 108) | public List<McpServerDetailInfo> adaptExternalDataToNacosMcpServerForm...
    method fetchUrlPage (line 122) | private UrlPageResult fetchUrlPage(String urlData, String cursor, Inte...
    method fetchUrlServersAll (line 150) | private List<McpServerDetailInfo> fetchUrlServersAll(String urlData, S...
    method adaptOfficialMcpServer (line 169) | private McpServerDetailInfo adaptOfficialMcpServer(McpRegistryServerDe...
    method adaptOfficialMcpServerFromResponse (line 188) | private McpServerDetailInfo adaptOfficialMcpServerFromResponse(ServerR...
    method applyBasicInfo (line 203) | private void applyBasicInfo(McpRegistryServerDetail registryServer, Mc...
    method applyVersionInfo (line 211) | private void applyVersionInfo(McpRegistryServerDetail registryServer, ...
    method applyProtocolInfo (line 220) | private void applyProtocolInfo(McpRegistryServerDetail registryServer,...
    method applyLocalAndRemoteConfig (line 228) | private void applyLocalAndRemoteConfig(McpRegistryServerDetail registr...
    method resolveServerProtocol (line 235) | private String resolveServerProtocol(McpRegistryServerDetail detail) {
    method generateRemoteServiceConfig (line 256) | private McpServerRemoteServiceConfig generateRemoteServiceConfig(List<...
    method parseUrlComponents (line 300) | private UrlComponents parseUrlComponents(String url) {
    class UrlComponents (line 345) | private static class UrlComponents {
      method UrlComponents (line 351) | public UrlComponents(String scheme, String host, int port, String pa...
      method getScheme (line 358) | public String getScheme() {
      method getHost (line 362) | public String getHost() {
      method getPort (line 366) | public int getPort() {
      method getPath (line 370) | public String getPath() {
    method adaptOfficialRegistryUrl (line 386) | private List<McpServerDetailInfo> adaptOfficialRegistryUrl(String urlD...
    method adaptOfficialSeedFile (line 406) | private List<McpServerDetailInfo> adaptOfficialSeedFile(String data) {
    method adaptOfficialMcpServerJsonText (line 413) | private List<McpServerDetailInfo> adaptOfficialMcpServerJsonText(Strin...
    method unmarshaledSeedToServerList (line 418) | private List<McpRegistryServerDetail> unmarshaledSeedToServerList(Stri...
    method getHttpClient (line 422) | private HttpClient getHttpClient() {
    method setHttpClient (line 432) | public void setHttpClient(HttpClient client) {
    method buildPageUrl (line 436) | private String buildPageUrl(String base, String cursor, Integer limit,...
    method buildGetRequest (line 455) | private HttpRequest buildGetRequest(String url) {
    method isSuccessStatus (line 462) | private boolean isSuccessStatus(int code) {
    method generateMcpServerId (line 466) | private String generateMcpServerId(String name) {

FILE: ai/src/main/java/com/alibaba/nacos/ai/service/McpServerCacheInvalidateService.java
  class McpServerCacheInvalidateService (line 41) | @Service
    method McpServerCacheInvalidateService (line 48) | @Autowired
    method handleConfigDataChangeEvent (line 59) | void handleConfigDataChangeEvent(LocalDataChangeEvent event) {
    method isMcpServerConfig (line 91) | private boolean isMcpServerConfig(String group) {
    method extractServerIdFromDataId (line 109) | private String extractServerIdFromDataId(String group, String dataId) {
    method invalidateCache (line 128) | private void invalidateCache(String namespaceId, String serverId) {
    method onEvent (line 142) | @Override
    method subscribeType (line 147) | @Override

FILE: ai/src/main/java/com/alibaba/nacos/ai/service/McpServerImportService.java
  class McpServerImportService (line 56) | @Service
    method McpServerImportService (line 69) | public McpServerImportService(McpExternalDataAdaptor transformService,
    method validateImport (line 87) | public McpServerImportValidationResult validateImport(String namespace...
    method executeImport (line 116) | public McpServerImportResponse executeImport(String namespaceId, McpSe...
    method responseError (line 135) | private static McpServerImportResponse responseError(String msg) {
    method applyResultOnRequestPolicy (line 142) | private McpServerImportResponse applyResultOnRequestPolicy(String name...
    method filterValidSelectedServers (line 177) | private List<McpServerValidationItem> filterValidSelectedServers(List<...
    method importSingleServer (line 202) | private McpServerImportResult importSingleServer(String namespaceId, M...
    method generateMcpBasicInfo (line 232) | private static McpServerBasicInfo generateMcpBasicInfo(McpServerDetail...
    method generateEndpointSpec (line 254) | private McpEndpointSpec generateEndpointSpec(McpServerDetailInfo serve...

FILE: ai/src/main/java/com/alibaba/nacos/ai/service/McpServerOperationService.java
  class McpServerOperationService (line 83) | @org.springframework.stereotype.Service
    method McpServerOperationService (line 100) | public McpServerOperationService(ConfigQueryChainService configQueryCh...
    method listMcpServerWithPage (line 123) | public Page<McpServerBasicInfo> listMcpServerWithPage(String namespace...
    method mapIndexListToServerList (line 130) | private List<McpServerBasicInfo> mapIndexListToServerList(List<McpServ...
    method mapIndexPageToBasicServerPage (line 146) | private Page<McpServerBasicInfo> mapIndexPageToBasicServerPage(Page<Mc...
    method getMcpServerDetail (line 163) | public McpServerDetailInfo getMcpServerDetail(String namespaceId, Stri...
    method getMcpServerVersionInfo (line 212) | private McpServerVersionInfo getMcpServerVersionInfo(String namespaceI...
    method injectEndpoint (line 225) | private void injectEndpoint(McpServerDetailInfo detailInfo) throws Nac...
    method injectBackendEndpointRef (line 230) | private void injectBackendEndpointRef(McpServerDetailInfo detailInfo) ...
    method transferToMcpEndpointInfoWithHeaders (line 247) | private List<McpEndpointInfo> transferToMcpEndpointInfoWithHeaders(Lis...
    method transferToMcpEndpointInfo (line 262) | private List<McpEndpointInfo> transferToMcpEndpointInfo(List<Instance>...
    method injectFrontendEndpointRef (line 267) | private void injectFrontendEndpointRef(McpServerDetailInfo detailInfo)...
    method createMcpServer (line 323) | public String createMcpServer(String namespaceId, McpServerBasicInfo s...
    method buildServerVersionInfo (line 391) | private static McpServerVersionInfo buildServerVersionInfo(McpServerBa...
    method updateMcpServer (line 420) | public void updateMcpServer(String namespaceId, boolean isPublish, Mcp...
    method deleteMcpServer (line 501) | public void deleteMcpServer(String namespaceId, String mcpName, String...
    method injectToolAndEndpoint (line 528) | private void injectToolAndEndpoint(String namespaceId, String mcpServe...
    method buildMcpServerVersionForm (line 556) | private ConfigFormV3 buildMcpServerVersionForm(String namespaceId, Mcp...
    method buildMcpConfigForm (line 571) | private ConfigFormV3 buildMcpConfigForm(String namespaceId, String mcp...
    method buildQueryMcpServerRequest (line 586) | private ConfigQueryChainRequest buildQueryMcpServerRequest(String name...
    method buildQueryMcpServerVersionInfoRequest (line 594) | private ConfigQueryChainRequest buildQueryMcpServerVersionInfoRequest(...
    method transferToMcpServerVersionInfo (line 602) | private McpServerVersionInfo transferToMcpServerVersionInfo(String con...
    method resolveMcpServerId (line 618) | private String resolveMcpServerId(String namespaceId, String serverNam...
    method invalidateCacheAfterDbUpdateOperation (line 639) | private void invalidateCacheAfterDbUpdateOperation(String namespaceId,...
    method invalidateCacheAfterDbOperation (line 667) | private void invalidateCacheAfterDbOperation(String namespaceId, Strin...

FILE: ai/src/main/java/com/alibaba/nacos/ai/service/McpServerValidationService.java
  class McpServerValidationService (line 42) | @Service
    method validateServers (line 56) | public McpServerImportValidationResult validateServers(String namespac...
    method validateSingleServer (line 113) | private McpServerValidationItem validateSingleServer(String namespaceI...
    method isVersionedServerExist (line 172) | private boolean isVersionedServerExist(String namespaceId, String serv...
    method isValidProtocol (line 190) | private boolean isValidProtocol(String protocol) {
    method validateProtocolSpecificConfig (line 204) | private void validateProtocolSpecificConfig(McpServerDetailInfo server...

FILE: ai/src/main/java/com/alibaba/nacos/ai/service/McpToolOperationService.java
  class McpToolOperationService (line 41) | @Service
    method McpToolOperationService (line 48) | public McpToolOperationService(ConfigQueryChainService configQueryChai...
    method refreshMcpTool (line 61) | public void refreshMcpTool(String namespaceId, McpServerBasicInfo serv...
    method getMcpTool (line 69) | public McpToolSpecification getMcpTool(String namespaceId, String tool...
    method deleteMcpTool (line 78) | public void deleteMcpTool(String namespaceId, String mcpServerId, Stri...
    method buildMcpToolConfigForm (line 83) | private ConfigFormV3 buildMcpToolConfigForm(String namespaceId, McpSer...
    method buildQueryMcpToolRequest (line 102) | private ConfigQueryChainRequest buildQueryMcpToolRequest(String namesp...
    method transferToMcpServerTool (line 110) | private McpToolSpecification transferToMcpServerTool(ConfigQueryChainR...

FILE: ai/src/main/java/com/alibaba/nacos/ai/service/SimpleSyncEffectService.java
  class SimpleSyncEffectService (line 35) | @Service
    method toSync (line 38) | @Override

FILE: ai/src/main/java/com/alibaba/nacos/ai/service/SyncEffectService.java
  type SyncEffectService (line 33) | public interface SyncEffectService {
    method toSync (line 41) | default void toSync(ConfigForm configForm, long startTimeStamp) {
    method toSync (line 53) | void toSync(ConfigForm configForm, long startTimeStamp, long timeout, ...

FILE: ai/src/main/java/com/alibaba/nacos/ai/service/a2a/A2aServerOperationService.java
  class A2aServerOperationService (line 61) | @org.springframework.stereotype.Service
    method A2aServerOperationService (line 76) | public A2aServerOperationService(ConfigQueryChainService configQueryCh...
    method registerAgent (line 94) | public void registerAgent(AgentCard agentCard, String namespaceId, Str...
    method deleteAgent (line 128) | public void deleteAgent(String namespaceId, String agentName, String v...
    method updateAgentCard (line 191) | public void updateAgentCard(AgentCard agentCard, String namespaceId, S...
    method listAgents (line 252) | public Page<AgentCardVersionInfo> listAgents(String namespaceId, Strin...
    method listAgentVersions (line 285) | public List<AgentVersionDetail> listAgentVersions(String namespaceId, ...
    method getAgentCard (line 300) | public AgentCardDetailInfo getAgentCard(String namespaceId, String age...
    method queryLatestVersion (line 307) | private AgentCardDetailInfo queryLatestVersion(AgentCardVersionInfo ag...
    method queryTargetVersion (line 317) | private AgentCardDetailInfo queryTargetVersion(AgentCardVersionInfo ag...
    method injectEndpoint (line 340) | private void injectEndpoint(AgentCardDetailInfo agentCard, String name...
    method randomOne (line 362) | private AgentInterface randomOne(List<AgentInterface> agentInterfaces) {
    method transferVersionInfoToConfigForm (line 366) | private ConfigForm transferVersionInfoToConfigForm(AgentCardVersionInf...
    method transferAgentInfoToConfigForm (line 381) | private ConfigForm transferAgentInfoToConfigForm(AgentCardDetailInfo s...
    method queryAgentCardVersionInfo (line 396) | private AgentCardVersionInfo queryAgentCardVersionInfo(String namespac...

FILE: ai/src/main/java/com/alibaba/nacos/ai/service/a2a/identity/AgentIdCodec.java
  type AgentIdCodec (line 30) | public interface AgentIdCodec {
    method encode (line 38) | String encode(String agentName);
    method encodeForSearch (line 46) | String encodeForSearch(String agentName);
    method decode (line 54) | String decode(String agentId);

FILE: ai/src/main/java/com/alibaba/nacos/ai/service/a2a/identity/AgentIdCodecHolder.java
  class AgentIdCodecHolder (line 27) | @Component
    method AgentIdCodecHolder (line 32) | public AgentIdCodecHolder(ObjectProvider<AgentIdCodec> agentIdCodecsPr...
    method encode (line 42) | public String encode(String agentName) {
    method encodeForSearch (line 52) | public String encodeForSearch(String agentName) {
    method decode (line 62) | public String decode(String agentId) {

FILE: ai/src/main/java/com/alibaba/nacos/ai/service/a2a/identity/AsciiAgentIdCodec.java
  class AsciiAgentIdCodec (line 33) | public class AsciiAgentIdCodec implements AgentIdCodec {
    method encode (line 44) | @Override
    method encodeForSearch (line 64) | @Override
    method decode (line 70) | @Override
    method isDigit (line 96) | private boolean isDigit(String s) {
    method isEncoded (line 105) | private boolean isEncoded(String name) {
    method isNeedEncoded (line 109) | private boolean isNeedEncoded(String name) {

FILE: ai/src/main/java/com/alibaba/nacos/ai/service/prompt/PromptAdminOperationService.java
  type PromptAdminOperationService (line 34) | public interface PromptAdminOperationService {
    method publishPromptVersion (line 52) | boolean publishPromptVersion(String namespaceId, String promptKey, Str...
    method bindLabel (line 68) | boolean bindLabel(String namespaceId, String promptKey, String label, ...
    method unbindLabel (line 82) | boolean unbindLabel(String namespaceId, String promptKey, String label...
    method deletePrompt (line 95) | boolean deletePrompt(String namespaceId, String promptKey, String srcU...
    method updatePromptMetadata (line 109) | boolean updatePromptMetadata(String namespaceId, String promptKey, Str...
    method listPrompts (line 124) | Page<PromptMetaSummary> listPrompts(String namespaceId, String promptK...
    method listPromptVersions (line 137) | Page<PromptVersionSummary> listPromptVersions(String namespaceId, Stri...
    method getPromptMeta (line 148) | PromptMetaInfo getPromptMeta(String namespaceId, String promptKey) thr...
    method queryPromptDetail (line 160) | PromptVersionInfo queryPromptDetail(String namespaceId, String promptK...

FILE: ai/src/main/java/com/alibaba/nacos/ai/service/prompt/PromptAdminOperationServiceImpl.java
  class PromptAdminOperationServiceImpl (line 66) | @Service
    method PromptAdminOperationServiceImpl (line 77) | public PromptAdminOperationServiceImpl(ConfigOperationService configOp...
    method publishPromptVersion (line 84) | @Override
    method bindLabel (line 147) | @Override
    method unbindLabel (line 167) | @Override
    method deletePrompt (line 182) | @Override
    method updatePromptMetadata (line 204) | @Override
    method listPrompts (line 225) | @Override
    method listPromptVersions (line 275) | @Override
    method getPromptMeta (line 317) | @Override
    method queryPromptDetail (line 330) | @Override
    method loadLabelVersionMappingSnapshot (line 357) | private PromptLabelVersionMappingSnapshot loadLabelVersionMappingSnaps...
    method requireLabelVersionMappingSnapshot (line 368) | private PromptLabelVersionMappingSnapshot requireLabelVersionMappingSn...
    method getPromptLabelVersionMapping (line 378) | private PromptLabelVersionMapping getPromptLabelVersionMapping(String ...
    method loadDescriptorSnapshot (line 382) | private DescriptorSnapshot loadDescriptorSnapshot(String namespaceId, ...
    method refreshLatestMirror (line 394) | private void refreshLatestMirror(String namespaceId, String promptKey,...
    method publishLabelVersionMapping (line 406) | private void publishLabelVersionMapping(String namespaceId, String pro...
    method publishDescriptor (line 412) | private void publishDescriptor(String namespaceId, String promptKey, P...
    method publishConfig (line 419) | private void publishConfig(String namespaceId, String dataId, String c...
    method validatePromptKeyAndVersion (line 440) | private void validatePromptKeyAndVersion(String promptKey, String vers...
    method buildVersionComparator (line 447) | private Comparator<String> buildVersionComparator() {
    method joinBizTags (line 459) | private String joinBizTags(List<String> bizTags) {
    class DescriptorSnapshot (line 467) | private static class DescriptorSnapshot {
      method DescriptorSnapshot (line 473) | DescriptorSnapshot(PromptDescriptor descriptor, String md5) {
      method getDescriptor (line 478) | public PromptDescriptor getDescriptor() {
      method getMd5 (line 482) | public String getMd5() {
      method empty (line 486) | static DescriptorSnapshot empty() {

FILE: ai/src/main/java/com/alibaba/nacos/ai/service/prompt/PromptClientOperationService.java
  type PromptClientOperationService (line 28) | public interface PromptClientOperationService {
    method queryPrompt (line 41) | PromptVersionInfo queryPrompt(String namespaceId, String promptKey, St...
    method queryPrompt (line 54) | default PromptVersionInfo queryPrompt(String namespaceId, String promp...
    method invalidateMetaCache (line 65) | void invalidateMetaCache(String namespaceId, String promptKey);
    method getPromptMeta (line 75) | PromptMetaInfo getPromptMeta(String namespaceId, String promptKey) thr...

FILE: ai/src/main/java/com/alibaba/nacos/ai/service/prompt/PromptClientOperationServiceImpl.java
  class PromptClientOperationServiceImpl (line 44) | @Service
    method PromptClientOperationServiceImpl (line 59) | public PromptClientOperationServiceImpl(ConfigQueryChainService config...
    method queryPrompt (line 67) | @Override
    method invalidateMetaCache (line 99) | @Override
    method getPromptMeta (line 107) | @Override
    method getPromptLabelVersionMapping (line 116) | private PromptLabelVersionMapping getPromptLabelVersionMapping(String ...
    method loadLabelVersionMappingSnapshot (line 134) | private PromptLabelVersionMappingSnapshot loadLabelVersionMappingSnaps...
    method queryConfig (line 145) | private ConfigQueryChainResponse queryConfig(String namespaceId, Strin...
    method isFound (line 150) | private boolean isFound(ConfigQueryChainResponse response) {
    method buildMetaCacheKey (line 155) | private String buildMetaCacheKey(String namespaceId, String promptKey) {
    method putMetaCache (line 159) | private void putMetaCache(String cacheKey, PromptLabelVersionMappingSn...
    class MetaCacheEntry (line 169) | private static class MetaCacheEntry {
      method MetaCacheEntry (line 175) | MetaCacheEntry(PromptLabelVersionMappingSnapshot snapshot, long expi...

FILE: ai/src/main/java/com/alibaba/nacos/ai/service/prompt/PromptLabelVersionMappingSnapshot.java
  class PromptLabelVersionMappingSnapshot (line 26) | public class PromptLabelVersionMappingSnapshot {
    method PromptLabelVersionMappingSnapshot (line 32) | public PromptLabelVersionMappingSnapshot(PromptLabelVersionMapping map...
    method getMapping (line 37) | public PromptLabelVersionMapping getMapping() {
    method getMd5 (line 41) | public String getMd5() {
    method empty (line 45) | public static PromptLabelVersionMappingSnapshot empty() {

FILE: ai/src/main/java/com/alibaba/nacos/ai/service/prompt/PromptMetaCacheInvalidateService.java
  class PromptMetaCacheInvalidateService (line 34) | @Service
    method PromptMetaCacheInvalidateService (line 39) | public PromptMetaCacheInvalidateService(PromptClientOperationService p...
    method onEvent (line 44) | @Override
    method subscribeType (line 60) | @Override

FILE: ai/src/main/java/com/alibaba/nacos/ai/service/prompt/PromptMetaSnapshot.java
  class PromptMetaSnapshot (line 26) | public class PromptMetaSnapshot {
    method PromptMetaSnapshot (line 32) | public PromptMetaSnapshot(PromptMetaInfo meta, String md5) {
    method getMeta (line 37) | public PromptMetaInfo getMeta() {
    method getMd5 (line 41) | public String getMd5() {
    method empty (line 45) | public static PromptMetaSnapshot empty() {

FILE: ai/src/main/java/com/alibaba/nacos/ai/service/prompt/PromptMetaUtils.java
  class PromptMetaUtils (line 36) | public final class PromptMetaUtils {
    method PromptMetaUtils (line 38) | private PromptMetaUtils() {
    method normalizeMeta (line 47) | public static PromptMetaInfo normalizeMeta(PromptMetaInfo meta) {
    method normalizeLabelVersionMapping (line 69) | public static PromptLabelVersionMapping normalizeLabelVersionMapping(P...
    method normalizeDescriptor (line 88) | public static PromptDescriptor normalizeDescriptor(PromptDescriptor de...
    method cloneMeta (line 104) | public static PromptMetaInfo cloneMeta(PromptMetaInfo meta) {
    method cloneLabelVersionMapping (line 126) | public static PromptLabelVersionMapping cloneLabelVersionMapping(Promp...
    method cloneDescriptor (line 146) | public static PromptDescriptor cloneDescriptor(PromptDescriptor descri...
    method initEmptyMeta (line 165) | public static PromptMetaInfo initEmptyMeta(String promptKey) {
    method initEmptyLabelVersionMapping (line 180) | public static PromptLabelVersionMapping initEmptyLabelVersionMapping(S...
    method initEmptyDescriptor (line 194) | public static PromptDescriptor initEmptyDescriptor(String promptKey) {
    method composeMetaInfo (line 209) | public static PromptMetaInfo composeMetaInfo(String promptKey, PromptL...
    method resolveTargetVersion (line 244) | public static String resolveTargetVersion(PromptMetaInfo meta, String ...
    method resolveTargetVersion (line 265) | public static String resolveTargetVersion(PromptLabelVersionMapping ma...

FILE: ai/src/main/java/com/alibaba/nacos/ai/service/skills/SkillOperationService.java
  type SkillOperationService (line 29) | public interface SkillOperationService {
    method registerSkill (line 39) | String registerSkill(Skill skill, String namespaceId) throws NacosExce...
    method getSkillDetail (line 49) | Skill getSkillDetail(String namespaceId, String skillName) throws Naco...
    method updateSkill (line 58) | void updateSkill(Skill skill, String namespaceId) throws NacosException;
    method deleteSkill (line 67) | void deleteSkill(String namespaceId, String skillName) throws NacosExc...
    method listSkills (line 80) | Page<SkillBasicInfo> listSkills(String namespaceId, String skillName, ...
    method uploadSkillFromZip (line 90) | String uploadSkillFromZip(String namespaceId, byte[] zipBytes) throws ...

FILE: ai/src/main/java/com/alibaba/nacos/ai/service/skills/SkillOperationServiceImpl.java
  class SkillOperationServiceImpl (line 59) | @org.springframework.stereotype.Service
    method parseResourceId (line 71) | private String[] parseResourceId(String resourceId) {
    method SkillOperationServiceImpl (line 98) | public SkillOperationServiceImpl(ConfigQueryChainService configQueryCh...
    method registerSkill (line 107) | @Override
    method getSkillDetail (line 160) | @Override
    method updateSkill (line 214) | @Override
    method collectResourceKeys (line 257) | private Set<String> collectResourceKeys(SkillMainConfig mainConfig) {
    method collectSkillResourceKeys (line 267) | private Set<String> collectSkillResourceKeys(Skill skill) {
    method updateSkillResources (line 278) | private void updateSkillResources(Skill skill, String namespaceId,
    method deleteRemovedResources (line 305) | private void deleteRemovedResources(String skillName, String namespaceId,
    method deleteSkill (line 321) | @Override
    method listSkills (line 349) | @Override
    method uploadSkillFromZip (line 402) | @Override
    method buildMainConfigForm (line 411) | private ConfigForm buildMainConfigForm(Skill skill, String namespaceId...
    method buildResourceConfigForm (line 449) | private ConfigForm buildResourceConfigForm(SkillResource resource, Str...
    class SkillMainConfig (line 474) | private static class SkillMainConfig {
      method getName (line 481) | public String getName() {
      method setName (line 485) | public void setName(String name) {
      method getDescription (line 489) | public String getDescription() {
      method setDescription (line 493) | public void setDescription(String description) {
      method getInstruction (line 497) | public String getInstruction() {
      method setInstruction (line 501) | public void setInstruction(String instruction) {
      method getUniformId (line 505) | public Long getUniformId() {
      method setUniformId (line 509) | public void setUniformId(Long uniformId) {
      method getResources (line 513) | public List<SkillResourceRef> getResources() {
      method setResources (line 517) | public void setResources(List<SkillResourceRef> resources) {
    class SkillResourceRef (line 525) | private static class SkillResourceRef {
      method getName (line 529) | public String getName() {
      method setName (line 533) | public void setName(String name) {
      method getType (line 537) | public String getType() {
      method setType (line 541) | public void setType(String type) {

FILE: ai/src/main/java/com/alibaba/nacos/ai/utils/AgentCardUtil.java
  class AgentCardUtil (line 40) | public class AgentCardUtil {
    method buildAgentCardDetailInfo (line 50) | public static AgentCardDetailInfo buildAgentCardDetailInfo(AgentCard a...
    method buildAgentCardVersionInfo (line 65) | public static AgentCardVersionInfo buildAgentCardVersionInfo(AgentCard...
    method buildAgentVersionDetail (line 83) | public static AgentVersionDetail buildAgentVersionDetail(AgentCard age...
    method updateUpdateTime (line 97) | public static void updateUpdateTime(AgentVersionDetail versionDetail) {
    method buildAgentInterface (line 107) | public static AgentInterface buildAgentInterface(Instance instance) {
    method handlerTlsIfNeeded (line 130) | private static String handlerTlsIfNeeded(String protocol, boolean isSu...
    method getCurrentTime (line 137) | private static String getCurrentTime() {
    method copyAgentCardInfo (line 143) | private static void copyAgentCardInfo(AgentCard target, AgentCard sour...
    method copyAgentCardBasicInfo (line 157) | private static void copyAgentCardBasicInfo(AgentCardBasicInfo target, ...

FILE: ai/src/main/java/com/alibaba/nacos/ai/utils/AgentEndpointUtil.java
  class AgentEndpointUtil (line 35) | public class AgentEndpointUtil {
    method transferToInstances (line 44) | public static List<Instance> transferToInstances(Collection<AgentEndpo...
    method transferToInstance (line 59) | public static Instance transferToInstance(AgentEndpoint endpoint) thro...

FILE: ai/src/main/java/com/alibaba/nacos/ai/utils/AgentRequestUtil.java
  class AgentRequestUtil (line 41) | public class AgentRequestUtil {
    method parseAgentCard (line 52) | public static AgentCard parseAgentCard(AgentCardForm agentCardForm) th...
    method validateAgentCard (line 72) | public static void validateAgentCard(AgentCard agentCard) throws Nacos...
    method fillNamespaceId (line 100) | public static void fillNamespaceId(AbstractAgentRequest request) {
    method validateAgentCardField (line 106) | private static void validateAgentCardField(String fieldName, String fi...

FILE: ai/src/main/java/com/alibaba/nacos/ai/utils/McpConfigUtils.java
  class McpConfigUtils (line 34) | public class McpConfigUtils {
    method formatServerVersionInfoDataId (line 49) | public static String formatServerVersionInfoDataId(String id) {
    method formatServerSpecInfoDataId (line 53) | public static String formatServerSpecInfoDataId(String id, String vers...
    method formatServerToolSpecDataId (line 57) | public static String formatServerToolSpecDataId(String id, String vers...
    method formatServerNameTagBlurSearchValue (line 61) | public static String formatServerNameTagBlurSearchValue(String serverN...
    method formatServerNameTagAccurateSearchValue (line 65) | public static String formatServerNameTagAccurateSearchValue(String ser...
    method isConfigFound (line 69) | public static boolean isConfigFound(ConfigQueryChainResponse.ConfigQue...
    method isConfigNotFound (line 73) | public static boolean isConfigNotFound(ConfigQueryChainResponse.Config...
    method buildMcpServerVersionConfigTags (line 77) | public static String buildMcpServerVersionConfigTags(String serverName) {
    method convertFrontEndpointConfig (line 88) | public static McpEndpointSpec convertFrontEndpointConfig(FrontEndpoint...

FILE: ai/src/main/java/com/alibaba/nacos/ai/utils/McpRequestUtil.java
  class McpRequestUtil (line 43) | public class McpRequestUtil {
    method parseMcpServerBasicInfo (line 54) | public static McpServerBasicInfo parseMcpServerBasicInfo(McpDetailForm...
    method parseMcpTools (line 71) | public static McpToolSpecification parseMcpTools(McpDetailForm mcpForm...
    method parseMcpEndpointSpec (line 87) | public static McpEndpointSpec parseMcpEndpointSpec(McpServerBasicInfo ...
    method deserializeSpec (line 109) | public static <T> T deserializeSpec(String spec, TypeReference<T> type...
    method deserializeSpec (line 123) | public static <T> T deserializeSpec(String spec, TypeReference<T> type...
    method transferToMcpServiceRef (line 141) | public static McpServiceRef transferToMcpServiceRef(Object input) {
    method fillNamespaceId (line 156) | public static void fillNamespaceId(AbstractMcpRequest request) {

FILE: ai/src/main/java/com/alibaba/nacos/ai/utils/PromptDataIdUtils.java
  class PromptDataIdUtils (line 27) | public final class PromptDataIdUtils {
    method PromptDataIdUtils (line 29) | private PromptDataIdUtils() {
    method buildMetaDataId (line 32) | public static String buildMetaDataId(String promptKey) {
    method buildDescriptorDataId (line 36) | public static String buildDescriptorDataId(String promptKey) {
    method buildAdminInfoDataId (line 40) | @Deprecated
    method buildLabelVersionMappingDataId (line 45) | public static String buildLabelVersionMappingDataId(String promptKey) {
    method buildLatestDataId (line 49) | public static String buildLatestDataId(String promptKey) {
    method buildVersionDataId (line 53) | public static String buildVersionDataId(String promptKey, String versi...
    method isMetaDataId (line 63) | public static boolean isMetaDataId(String dataId) {
    method isDescriptorDataId (line 67) | public static boolean isDescriptorDataId(String dataId) {
    method isAdminInfoDataId (line 71) | @Deprecated
    method isLabelVersionMappingDataId (line 82) | public static boolean isLabelVersionMappingDataId(String dataId) {
    method extractPromptKeyFromMetaDataId (line 92) | public static String extractPromptKeyFromMetaDataId(String dataId) {
    method extractPromptKeyFromDescriptorDataId (line 102) | public static String extractPromptKeyFromDescriptorDataId(String dataI...
    method extractPromptKeyFromAdminInfoDataId (line 109) | @Deprecated
    method extractPromptKeyFromLabelVersionMappingDataId (line 120) | public static String extractPromptKeyFromLabelVersionMappingDataId(Str...

FILE: ai/src/main/java/com/alibaba/nacos/ai/utils/PromptVersionUtils.java
  class PromptVersionUtils (line 30) | public class PromptVersionUtils {
    method PromptVersionUtils (line 47) | private PromptVersionUtils() {
    method isValidVersion (line 56) | public static boolean isValidVersion(String version) {
    method compareVersion (line 71) | public static int compareVersion(String version1, String version2) {
    method isVersionGreater (line 99) | public static boolean isVersionGreater(String newVersion, String curre...
    method buildDataId (line 120) | public static String buildDataId(String promptKey) {
    method extractPromptKey (line 130) | public static String extractPromptKey(String dataId) {

FILE: ai/src/main/java/com/alibaba/nacos/ai/utils/SkillRequestUtil.java
  class SkillRequestUtil (line 40) | public class SkillRequestUtil {
    method parseSkill (line 51) | public static Skill parseSkill(SkillDetailForm skillDetailForm) throws...
    method validateSkill (line 71) | public static void validateSkill(Skill skill) throws NacosApiException {
    method validateSkillField (line 77) | private static void validateSkillField(String fieldName, String fieldV...
    method validateAndExtractZipBytes (line 94) | public static byte[] validateAndExtractZipBytes(MultipartFile file) th...

FILE: ai/src/main/java/com/alibaba/nacos/ai/utils/SkillZipParser.java
  class SkillZipParser (line 51) | public class SkillZipParser {
    method parseSkillFromZip (line 106) | public static Skill parseSkillFromZip(byte[] zipBytes, String namespac...
    method unzipToEntries (line 158) | private static List<ZipEntryData> unzipToEntries(byte[] zipBytes) thro...
    method parseResources (line 187) | private static Map<String, SkillResource> parseResources(List<ZipEntry...
    method isBinaryResource (line 253) | private static boolean isBinaryResource(String fileName) {
    class ZipEntryData (line 261) | private static final class ZipEntryData {
      method ZipEntryData (line 265) | ZipEntryData(String name, byte[] data) {
    method parseSkillMarkdown (line 274) | private static Skill parseSkillMarkdown(String markdownContent, String...
    method parseYamlFrontMatter (line 316) | private static Map<String, String> parseYamlFrontMatter(String yamlCon...
    method unescapeDoubleQuotedYamlValue (line 352) | private static String unescapeDoubleQuotedYamlValue(String value) {
    method extractInstruction (line 359) | private static String extractInstruction(String markdownContent) {
    method isMacOsMetadataFile (line 374) | private static boolean isMacOsMetadataFile(String itemName) {
    method stripBom (line 389) | private static String stripBom(String content) {

FILE: ai/src/test/java/com/alibaba/nacos/ai/config/AiEnabledFilterTest.java
  class AiEnabledFilterTest (line 30) | class AiEnabledFilterTest {
    method setUp (line 36) | @BeforeEach
    method tearDown (line 43) | @AfterEach
    method getResponsiblePackagePrefix (line 49) | @Test
    method isExcludedOnlyNamingFunction (line 54) | @Test
    method isExcludedOnlyConfigFunction (line 60) | @Test
    method isExcludedDisabled (line 66) | @Test
    method isExcludedEnabled (line 72) | @Test

FILE: ai/src/test/java/com/alibaba/nacos/ai/config/McpCacheIndexPropertiesTest.java
  class McpCacheIndexPropertiesTest (line 23) | class McpCacheIndexPropertiesTest {
    method testToString (line 25) | @Test

FILE: ai/src/test/java/com/alibaba/nacos/ai/config/McpConfigurationTest.java
  class McpConfigurationTest (line 27) | @ExtendWith(MockitoExtension.class)
    method testInit (line 33) | @Test

FILE: ai/src/test/java/com/alibaba/nacos/ai/config/McpServerIndexConfigurationTest.java
  class McpServerIndexConfigurationTest (line 41) | class McpServerIndexConfigurationTest {
    class TestConfig (line 43) | @Configuration
      method configDetailService (line 46) | @Bean
      method namespaceOperationService (line 51) | @Bean
      method configQueryChainService (line 56) | @Bean
    class CacheEnabled (line 62) | @Nested
      method shouldInjectCachedMcpServerIndexWhenCacheEnabled (line 71) | @Test
    class CacheDisabled (line 79) | @Nested
      method shouldInjectPlainMcpServerIndexWhenCacheDisabled (line 88) | @Test

FILE: ai/src/test/java/com/alibaba/nacos/ai/controller/A2aAdminControllerTest.java
  class A2aAdminControllerTest (line 65) | @ExtendWith(MockitoExtension.class)
    method setUp (line 84) | @BeforeEach
    method testRegisterAgentSuccess (line 119) | @Test
    method testRegisterAgentValidationFailure (line 133) | @Test
    method testRegisterAgentServiceException (line 144) | @Test
    method testGetAgentCardSuccess (line 156) | @Test
    method testGetAgentCardValidationFailure (line 178) | @Test
    method testGetAgentCardServiceException (line 189) | @Test
    method testUpdateAgentCardSuccess (line 202) | @Test
    method testUpdateAgentCardValidationFailure (line 217) | @Test
    method testUpdateAgentCardServiceException (line 229) | @Test
    method testDeleteAgentSuccess (line 241) | @Test
    method testDeleteAgentValidationFailure (line 255) | @Test
    method testDeleteAgentServiceException (line 266) | @Test
    method testListAgentsSuccess (line 277) | @Test
    method testListAgentsAgentListFormValidationFailure (line 309) | @Test
    method testListAgentsPageFormValidationFailure (line 324) | @Test
    method testListAgentsServiceException (line 341) | @Test
    method testListAgentVersionsSuccess (line 353) | @Test
    method testListAgentVersionsValidationFailure (line 378) | @Test
    method testListAgentVersionsEmptyResult (line 389) | @Test
    method testListAgentsEmptyResult (line 405) | @Test

FILE: ai/src/test/java/com/alibaba/nacos/ai/controller/McpAdminControllerTest.java
  class McpAdminControllerTest (line 60) | @ExtendWith(SpringExtension.class)
    method setUp (line 79) | @BeforeEach
    method tearDown (line 87) | @AfterEach
    method listMcpServersWithIllegalSearch (line 92) | @Test
    method listMcpServersWithIllegalPage (line 100) | @Test
    method listMcpServersSuccess (line 112) | @Test
    method getMcpServerWithoutMcpIdAndMcpName (line 127) | @Test
    method getMcpServerWithMcpName (line 134) | @Test
    method getMcpServerWithMcpId (line 148) | @Test
    method getMcpServerWithVersion (line 162) | @Test
    method createMcpServerWithoutSpec (line 177) | @Test
    method createMcpServerWithSpec (line 184) | @Test
    method updateMcpServerWithoutSpec (line 203) | @Test
    method updateMcpServerWithSpec (line 210) | @Test
    method updateMcpServerWithOverrideExisting (line 224) | @Test
    method updateMcpServerWithoutLatest (line 238) | @Test
    method deleteMcpServerWithoutMcpIdAndMcpName (line 252) | @Test
    method deleteMcpServerWithMcpName (line 259) | @Test
    method deleteMcpServerWithMcpId (line 273) | @Test
    method deleteMcpServerWithVersion (line 287) | @Test
    method assertServletException (line 301) | private static <T extends Throwable> void assertServletException(Class...

FILE: ai/src/test/java/com/alibaba/nacos/ai/controller/PromptClientControllerTest.java
  class PromptClientControllerTest (line 39) | @ExtendWith(MockitoExtension.class)
    method setUp (line 47) | @BeforeEach
    method queryPromptShouldReturn304AndNullWhenNotModified (line 52) | @Test
    method queryPromptShouldReturnPromptWhenSuccess (line 66) | @Test
    method queryPromptShouldRethrowWhenNon304Exception (line 86) | @Test

FILE: ai/src/test/java/com/alibaba/nacos/ai/form/a2a/admin/AgentCardFormTest.java
  class AgentCardFormTest (line 25) | class AgentCardFormTest {
    method testValidateSuccess (line 27) | @Test
    method testValidateWithEmptyAgentCardShouldThrowException (line 36) | @Test
    method testValidateWithNullAgentCardShouldThrowException (line 44) | @Test
    method testValidateShouldFillDefaultNamespaceIdAndRegistrationType (line 52) | @Test
    method testValidateWithValidRegistrationType (line 62) | @Test
    method testValidateWithInvalidRegistrationTypeShouldThrowException (line 76) | @Test
    method testFillDefaultRegistrationType (line 85) | @Test
    method testFillDefaultRegistrationTypeWithExistingValue (line 92) | @Test
    method testGetterAndSetter (line 100) | @Test

FILE: ai/src/test/java/com/alibaba/nacos/ai/form/a2a/admin/AgentFormTest.java
  class AgentFormTest (line 25) | class AgentFormTest {
    method testValidateSuccess (line 27) | @Test
    method testValidateWithEmptyNameShouldThrowException (line 35) | @Test
    method testValidateWithNullNameShouldThrowException (line 41) | @Test
    method testFillDefaultNamespaceId (line 48) | @Test
    method testFillDefaultNamespaceIdWithExistingValue (line 55) | @Test
    method testValidateShouldFillDefaultNamespaceId (line 63) | @Test
    method testGetterAndSetter (line 71) | @Test

FILE: ai/src/test/java/com/alibaba/nacos/ai/form/a2a/admin/AgentListFormTest.java
  class AgentListFormTest (line 25) | class AgentListFormTest {
    method testValidateWithAccurateSearch (line 27) | @Test
    method testValidateWithBlurSearch (line 36) | @Test
    method testValidateWithUpperCaseSearch (line 45) | @Test
    method testValidateWithInvalidSearchShouldThrowException (line 58) | @Test
    method testValidateWithNullSearchShouldThrowException (line 66) | @Test
    method testValidateShouldFillDefaultNamespaceId (line 74) | @Test
    method testGetterAndSetter (line 83) | @Test

FILE: ai/src/test/java/com/alibaba/nacos/ai/form/mcp/admin/McpImportFormTest.java
  class McpImportFormTest (line 29) | class McpImportFormTest {
    method testValidateSuccessWithJsonType (line 31) | @Test
    method testValidateSuccessWithUrlType (line 40) | @Test
    method testValidateSuccessWithFileType (line 49) | @Test
    method testValidateWithEmptyImportTypeShouldThrowException (line 58) | @Test
    method testValidateWithNullImportTypeShouldThrowException (line 66) | @Test
    method testValidateWithEmptyDataShouldThrowException (line 74) | @Test
    method testValidateWithNullDataShouldThrowException (line 82) | @Test
    method testValidateWithInvalidImportTypeShouldThrowException (line 90) | @Test
    method testValidateShouldFillDefaultValue (line 98) | @Test
    method testGetterAndSetter (line 107) | @Test
    method testDefaultValueOfBooleanFields (line 135) | @Test

FILE: ai/src/test/java/com/alibaba/nacos/ai/form/prompt/PromptFormTest.java
  class PromptFormTest (line 25) | class PromptFormTest {
    method validateShouldFillDefaultNamespaceWhenNamespaceBlank (line 27) | @Test
    method validateShouldThrowWhenPromptKeyMissing (line 35) | @Test

FILE: ai/src/test/java/com/alibaba/nacos/ai/form/prompt/PromptHistoryFormTest.java
  class PromptHistoryFormTest (line 24) | class PromptHistoryFormTest {
    method validateShouldNormalizePageDefaultsWhenPageInvalid (line 26) | @Test
    method validateShouldCapPageSizeToMax (line 39) | @Test

FILE: ai/src/test/java/com/alibaba/nacos/ai/form/prompt/PromptLabelBindFormTest.java
  class PromptLabelBindFormTest (line 24) | class PromptLabelBindFormTest {
    method validateShouldThrowWhenLabelMissing (line 26) | @Test
    method validateShouldThrowWhenVersionMissing (line 34) | @Test

FILE: ai/src/test/java/com/alibaba/nacos/ai/form/prompt/PromptLabelFormTest.java
  class PromptLabelFormTest (line 24) | class PromptLabelFormTest {
    method validateShouldThrowWhenLabelMissing (line 26) | @Test

FILE: ai/src/test/java/com/alibaba/nacos/ai/form/prompt/PromptListFormTest.java
  class PromptListFormTest (line 25) | class PromptListFormTest {
    method validateShouldThrowWhenSearchInvalid (line 27) | @Test
    method validateShouldNormalizePageDefaultsWhenPageInvalid (line 34) | @Test
    method validateShouldCapPageSizeToMax (line 47) | @Test

FILE: ai/src/test/java/com/alibaba/nacos/ai/form/prompt/PromptPublishFormTest.java
  class PromptPublishFormTest (line 25) | class PromptPublishFormTest {
    method validateShouldThrowWhenVersionMissing (line 27) | @Test
    method validateShouldThrowWhenVersionInvalid (line 34) | @Test
    method validateShouldPassWhenVersionValid (line 42) | @Test

FILE: ai/src/test/java/com/alibaba/nacos/ai/index/AbstractMcpServerIndexTest.java
  class AbstractMcpServerIndexTest (line 30) | @ExtendWith(MockitoExtension.class)

FILE: ai/src/test/java/com/alibaba/nacos/ai/index/CachedMcpServerIndexTest.java
  class CachedMcpServerIndexTest (line 61) | @ExtendWith(MockitoExtension.class)
    method setUp (line 82) | @BeforeEach
    method testGetMcpServerByIdWithCacheHit (line 92) | @Test
    method testGetMcpServerByIdWithCacheMiss (line 116) | @Test
    method testGetMcpServerByNameWithCacheHit (line 152) | @Test
    method testGetMcpServerByNameWithCacheMiss (line 176) | @Test
    method testSearchMcpServerByName (line 215) | @Test
    method testCacheDisabled (line 258) | @Test
    method testGetCacheStats (line 298) | @Test
    method testClearCache (line 316) | @Test
    method testTriggerCacheSync (line 325) | @Test
    method testRemoveMcpServerByNameWhenCacheEnabled (line 352) | @Test
    method testRemoveMcpServerByIdWhenCacheEnabled (line 364) | @Test
    method testRemoveMcpServerByNameWhenCacheDisabled (line 375) | @Test
    method testRemoveMcpServerByIdWhenCacheDisabled (line 391) | @Test
    method testRemoveMcpServerByNameWithNullParameters (line 406) | @Test
    method testRemoveMcpServerByIdWithNullParameter (line 417) | @Test
    method testRemoveMcpServerByNameWithEmptyParameters (line 426) | @Test
    method testRemoveMcpServerByIdWithEmptyParameter (line 439) | @Test
    method testGetMcpServerByIdWithCacheDisabledAndNotFound (line 450) | @Test
    method testGetMcpServerByIdWithCacheMissAndNotFound (line 484) | @Test
    method testGetMcpServerByNameWithInvalidParameters (line 517) | @Test
    method testGetMcpServerByNameWithCacheDisabledAndNotFound (line 562) | @Test
    method testGetMcpServerByNameWithCacheMissAndNotFound (line 594) | @Test
    method testSearchMcpServerByNameWithNullName (line 625) | @Test
    method testSearchMcpServerByNameWithEmptyName (line 662) | @Test
    method testSearchMcpServerByNameWithBlurSearch (line 699) | @Test
    method testSearchMcpServerByNameWithPagination (line 737) | @Test
    method testFetchOrderedNamespaceList (line 777) | @Test
    method testMapMcpServerVersionConfigToIndexData (line 810) | @Test
    method testTriggerCacheSyncWhenCacheDisabled (line 842) | @Test
    method testStartSyncTask (line 856) | @Test
    method testStartSyncTaskWithException (line 872) | @Test
    method testDestroy (line 888) | @Test
    method testDestroyWithExceptionHandling (line 905) | @Test
    method testSyncCacheFromDatabase (line 918) | @Test
    method testSyncCacheFromDatabaseWithSearchException (line 972) | @Test
    method testSyncCacheFromDatabaseWithEmptyResult (line 993) | @Test
    method testSyncCacheFromDatabaseWithException (line 1021) | @Test

FILE: ai/src/test/java/com/alibaba/nacos/ai/index/McpCachePerformanceTest.java
  class McpCachePerformanceTest (line 37) | public class McpCachePerformanceTest {
    method createTestProperties (line 51) | private static McpCacheIndexProperties createTestProperties(int maxSiz...
    method main (line 60) | public static void main(String[] args) {
    method testMemoryCachePerformance (line 78) | private static void testMemoryCachePerformance() {
    method testConcurrentPerformance (line 140) | private static void testConcurrentPerformance() {
    method testCacheSizeImpact (line 249) | private static void testCacheSizeImpact() {
    method testKeyGenerationValidation (line 291) | @Test

FILE: ai/src/test/java/com/alibaba/nacos/ai/index/MemoryMcpCacheIndexTest.java
  class MemoryMcpCacheIndexTest (line 42) | class MemoryMcpCacheIndexTest {
    method setUp (line 48) | @BeforeEach
    method testPutAndGet (line 56) | @Test
    method testRemoveByNameAndId (line 66) | @Test
    method testClear (line 78) | @Test
    method testLruEviction (line 88) | @Test
    method testExpire (line 104) | @Test
    method testUpdateExistingEntry (line 113) | @Test
    method testStats (line 121) | @Test
    method testConcurrentPutAndGet (line 134) | @Test
    method testRemoveNonExist (line 181) | @Test
    method testPutNullOrBlank (line 188) | @Test
    method testEvictionCount (line 199) | @Test
    method testExpireDoesNotAffectOthers (line 208) | @Test
    method testGetMcpServerByName (line 218) | @Test
    method testRemoveByNameDeletesCorrectMapping (line 230) | @Test
    method testRemoveByIdDeletesAllRelatedMappings (line 253) | @Test
    method testRemoveWithInvalidMappingConsistency (line 278) | @Test
    method testRemoveNonExistentEntries (line 296) | @Test
    method testRemoveWithNullParameters (line 311) | @Test
    method testRemoveWithEmptyParameters (line 328) | @Test
    method testRemoveAfterEviction (line 348) | @Test
    method testConcurrentRemoveOperations (line 373) | @Test
    method testGetMcpIdWithInvalidParameters (line 427) | @Test
    method testGetMcpIdWithNonExistentEntry (line 440) | @Test
    method testGetMcpIdWithExpiredEntry (line 446) | @Test
    method testGetMcpServerByIdWithInvalidParameters (line 459) | @Test
    method testGetMcpServerByIdWithNonExistentEntry (line 468) | @Test
    method testGetMcpServerByIdWithExpiredEntry (line 474) | @Test
    method testGetMcpServerByIdUpdatesLru (line 487) | @Test
    method testShutdown (line 507) | @Test
    method testShutdownTimeout (line 522) | @Test
    method testShutdownWithInterruptedException (line 533) | @Test
    method testDuplicateShutdown (line 545) | @Test
    method testNoExpiredEntries (line 554) | @Test
    method testCleanupExpiredEntries (line 572) | @Test
    method testCleanupExpiredEntriesDoesNotAffectValidEntries (line 611) | @Test
    method testConcurrentAccessDuringCleanup (line 648) | @Test
    method testCleanupExpiredEntriesWithException (line 714) | @Test
    method testCleanupExpiredEntriesAfterShutdown (line 730) | @Test

FILE: ai/src/test/java/com/alibaba/nacos/ai/index/PlainMcpServerIndexTest.java
  class PlainMcpServerIndexTest (line 55) | @ExtendWith(MockitoExtension.class)
    method setUp (line 69) | @BeforeEach
    method tearDown (line 75) | @AfterEach
    method searchMcpServerByNameWithNamespaceIdByAccurateNotFound (line 79) | @Test
    method searchMcpServerByNameWithNamespaceIdByAccurate (line 93) | @Test
    method searchMcpServerByNameWithNamespaceIdByBlur (line 107) | @Test
    method searchMcpServerByNameWithMultiplePagesFirstPage (line 121) | @Test
    method searchMcpServerByNameWithMultiplePagesSecondPage (line 137) | @Test
    method searchMcpServerByNameWithMultiplePagesLastPage (line 153) | @Test
    method getMcpServerByIdWithEmptyId (line 169) | @Test
    method getMcpServerByIdNotFound (line 174) | @Test
    method getMcpServerByIdFound (line 183) | @Test
    method getMcpServerByNameNotFound (line 195) | @Test
    method getMcpServerByNameFound (line 204) | @Test
    method removeMcpServerByName (line 217) | @Test
    method removeMcpServerById (line 223) | @Test
    method mockConfigQueryChainResponse (line 228) | private ConfigQueryChainResponse mockConfigQueryChainResponse(Object o...
    method mockNamespaceList (line 239) | private List<Namespace> mockNamespaceList(int size, boolean withDefaul...
    method mockConfigInfo (line 257) | private Page<ConfigInfo> mockConfigInfo(int total, int size, String na...
    method mockConfigInfoWithPagination (line 273) | private Page<ConfigInfo> mockConfigInfoWithPagination(int total, int c...
    method mockServerVersionInfo (line 291) | private McpServerVersionInfo mockServerVersionInfo(String id) {
    method mockVersion (line 303) | private ServerVersionDetail mockVersion(String version) {

FILE: ai/src/test/java/com/alibaba/nacos/ai/param/AgentHttpParamExtractorTest.java
  class AgentHttpParamExtractorTest (line 38) | @ExtendWith(MockitoExtension.class)
    method setUp (line 46) | @BeforeEach
    method extractParamWithNamespaceIdAndAgentName (line 51) | @Test
    method extractParamWithAgentCard (line 65) | @Test
    method extractParamWithInvalidAgentCardJson (line 89) | @Test
    method extractParamWithEmptyParameters (line 104) | @Test

FILE: ai/src/test/java/com/alibaba/nacos/ai/param/McpHttpParamExtractorTest.java
  class McpHttpParamExtractorTest (line 34) | @ExtendWith(MockitoExtension.class)
    method setUp (line 42) | @BeforeEach
    method extractParam (line 47) | @Test

FILE: ai/src/test/java/com/alibaba/nacos/ai/remote/handler/McpServerEndpointRequestHandlerTest.java
  class McpServerEndpointRequestHandlerTest (line 53) | @ExtendWith(MockitoExtension.class)
    method setUp (line 70) | @BeforeEach
    method tearDown (line 76) | @AfterEach
    method handleWithInvalidParameters (line 80) | @Test
    method handleForNotFound (line 87) | @Test
    method handleForRegisterEndpoint (line 97) | @Test
    method handleForDeregisterEndpoint (line 117) | @Test
    method handleForInvalidType (line 136) | @Test
    method handleForRegisterFrontendEndpoint (line 153) | @Test
    method handleForRegisterFrontendEndpointNotFound (line 184) | @Test
    method buildMockMcpServerDetailInfo (line 211) | McpServerDetailInfo buildMockMcpServerDetailInfo() {
    method assertErrorResponse (line 224) | private void assertErrorResponse(McpServerEndpointResponse response, i...

FILE: ai/src/test/java/com/alibaba/nacos/ai/remote/handler/QueryMcpServerRequestHandlerTest.java
  class QueryMcpServerRequestHandlerTest (line 39) | @ExtendWith(MockitoExtension.class)
    method setUp (line 50) | @BeforeEach
    method tearDown (line 55) | @AfterEach
    method handleWithInvalidParam (line 59) | @Test
    method handleMcpServerNotFound (line 68) | @Test
    method handle (line 78) | @Test

FILE: ai/src/test/java/com/alibaba/nacos/ai/remote/handler/QueryPromptRequestHandlerTest.java
  class QueryPromptRequestHandlerTest (line 37) | @ExtendWith(MockitoExtension.class)
    method setUp (line 45) | @BeforeEach
    method handleShouldReturnInvalidParamWhenPromptKeyBlank (line 50) | @Test
    method handleShouldReturnNotModifiedWhenServiceThrows304 (line 58) | @Test
    method handleShouldMapPromptFieldsWhenSuccess (line 71) | @Test
    method handleShouldProcessNamespaceBeforeQuery (line 92) | @Test

FILE: ai/src/test/java/com/alibaba/nacos/ai/remote/handler/ReleaseMcpServerRequestHandlerTest.java
  class ReleaseMcpServerRequestHandlerTest (line 55) | @ExtendWith(MockitoExtension.class)
    method setUp (line 72) | @BeforeEach
    method tearDown (line 78) | @AfterEach
    method handleWithInvalidParameter (line 82) | @Test
    method handleReleaseExistedServerAndVersion (line 104) | @Test
    method handleReleaseNewServerForSse (line 117) | @Test
    method handleReleaseNewServerForSseWithSpecifiedEndpoint (line 134) | @Test
    method handleReleaseNewServerForStdio (line 151) | @Test
    method handleReleaseNewVersionWithoutLatest (line 166) | @Test
    method handleReleaseNewVersionWithoutLatestWithSpecifiedEndpoint (line 185) | @Test
    method handleReleaseNewVersionWithLatest (line 204) | @Test
    method handleReleaseWithException (line 223) | @Test
    method buildMockServerSpecification (line 238) | private McpServerBasicInfo buildMockServerSpecification(boolean isStdi...
    method buildMockServerDetail (line 257) | private McpServerDetailInfo buildMockServerDetail() {
    method assertErrorResponse (line 267) | private void assertErrorResponse(ReleaseMcpServerResponse response, in...

FILE: ai/src/test/java/com/alibaba/nacos/ai/remote/handler/a2a/AgentEndpointRequestHandlerTest.java
  class AgentEndpointRequestHandlerTest (line 48) | @ExtendWith(MockitoExtension.class)
    method setUp (line 64) | @BeforeEach
    method tearDown (line 70) | @AfterEach
    method handleWithInvalidAgentName (line 74) | @Test
    method handleWithNullEndpoint (line 82) | @Test
    method handleWithEmptyEndpointVersion (line 90) | @Test
    method handleWithInvalidType (line 103) | @Test
    method handleForRegisterEndpoint (line 119) | @Test
    method handleForDeregisterEndpoint (line 150) | @Test
    method assertErrorResponse (line 181) | private void assertErrorResponse(AgentEndpointResponse response, int c...
    method validateInstanceMetadata (line 187) | private void validateInstanceMetadata(Instance instance) {

FILE: ai/src/test/java/com/alibaba/nacos/ai/remote/handler/a2a/BatchAgentEndpointRequestHandlerTest.java
  class BatchAgentEndpointRequestHandlerTest (line 51) | @ExtendWith(MockitoExtension.class)
    method setUp (line 67) | @BeforeEach
    method tearDown (line 73) | @AfterEach
    method handleWithInvalidAgentName (line 77) | @Test
    method handleWithNullEndpoints (line 85) | @Test
    method handleWithEmptyEndpoints (line 94) | @Test
    method handleWithEmptyEndpointVersion (line 104) | @Test
    method handleWithDifferentVersions (line 117) | @Test
    method handleForBatchRegisterEndpoint (line 142) | @Test
    method assertErrorResponse (line 202) | private void assertErrorResponse(AgentEndpointResponse response, int c...
    method validateInstanceMetadata (line 208) | private void validateInstanceMetadata(Instance instance) {

FILE: ai/src/test/java/com/alibaba/nacos/ai/remote/handler/a2a/QueryAgentCardRequestHandlerTest.java
  class QueryAgentCardRequestHandlerTest (line 39) | @ExtendWith(MockitoExtension.class)
    method setUp (line 50) | @BeforeEach
    method tearDown (line 55) | @AfterEach
    method handleWithInvalidAgentName (line 59) | @Test
    method handleWithValidParameters (line 68) | @Test
    method handleWithException (line 81) | @Test

FILE: ai/src/test/java/com/alibaba/nacos/ai/remote/handler/a2a/ReleaseAgentCardRequestHandlerTest.java
  class ReleaseAgentCardRequestHandlerTest (line 46) | @ExtendWith(MockitoExtension.class)
    method setUp (line 57) | @BeforeEach
    method tearDown (line 62) | @AfterEach
    method handleWithNullAgentCard (line 66) | @Test
    method handleWithValidNewAgentCard (line 75) | @Test
    method handleWithValidNewVersionAgentCard (line 95) | @Test
    method handleWithExistingAgentCard (line 119) | @Test
    method handleWithOtherException (line 142) | @Test

FILE: ai/src/test/java/com/alibaba/nacos/ai/remote/manager/AiConnectionBasedClientManagerTest.java
  class AiConnectionBasedClientManagerTest (line 47) | @ExtendWith(MockitoExtension.class)
    method setUp (line 62) | @BeforeEach
    method tearDown (line 69) | @AfterEach
    method clientConnectedNotAiConnection (line 73) | @Test
    method clientConnected (line 80) | @Test
    method clientConnectedByClient (line 88) | @Test
    method syncClientConnected (line 95) | @Test
    method clientDisConnectedNotAiConnection (line 102) | @Test
    method clientDisconnected (line 109) | @Test
    method getClient (line 117) | @Test
    method contains (line 124) | @Test
    method allClientId (line 131) | @Test
    method isResponsibleClient (line 138) | @Test
    method verifyClient (line 146) | @Test

FILE: ai/src/test/java/com/alibaba/nacos/ai/service/McpEndpointOperationServiceTest.java
  class McpEndpointOperationServiceTest (line 55) | @ExtendWith(MockitoExtension.class)
    method setUp (line 69) | @BeforeEach
    method tearDown (line 74) | @AfterEach
    method createMcpServerEndpointServiceIfNecessaryTypeRefWithoutMsg (line 81) | @Test
    method createMcpServerEndpointServiceIfNecessaryTypeRef (line 98) | @Test
    method createMcpServerEndpointServiceIfNecessaryTypeDirectWithoutExistService (line 112) | @Test
    method createMcpServerEndpointServiceIfNecessaryTypeDirectWithExistService (line 130) | @Test
    method getMcpServerEndpointInstances (line 151) | @Test
    method deleteMcpServerEndpointServiceForNonExistService (line 170) | @Test
    method deleteMcpServerEndpointServiceForRefService (line 177) | @Test
    method deleteMcpServerEndpointService (line 188) | @Test

FILE: ai/src/test/java/com/alibaba/nacos/ai/service/McpExternalDataAdaptorTest.java
  class McpExternalDataAdaptorTest (line 49) | @DisplayName("McpExternalDataAdaptor Tests")
    method setUp (line 57) | @BeforeEach
    method testAdaptValidSeedFile (line 65) | @Test
    method testAdaptMultipleServersInSeedFile (line 95) | @Test
    method testAdaptEmptySeedFile (line 130) | @Test
    method testAdaptInvalidSeedFileJson (line 145) | @Test
    method testAdaptValidServerJson (line 159) | @Test
    method testAdaptJsonWithPackages (line 189) | @Test
    method testAdaptJsonWithoutRemotes (line 221) | @Test
    method testAdaptInvalidServerJson (line 245) | @Test
    method testAdaptEmptyJson (line 257) | @Test
    method testAdaptValidUrlResponse (line 271) | @Test
    method testAdaptUrlResponseWithPagination (line 325) | @Test
    method testAdaptUrlWithSearchParameter (line 406) | @Test
    method testAdaptUrlWithLimitParameter (line 432) | @Test
    method testAdaptUrlWith404Error (line 473) | @Test
    method testAdaptUrlWith500Error (line 485) | @Test
    method testAdaptUrlWithInvalidResponseJson (line 497) | @Test
    method testAdaptBlankUrl (line 511) | @Test
    method testAdaptNullData (line 521) | @Test
    method testAdaptUnsupportedImportType (line 531) | @Test
    method testAdaptJsonWithMultipleRemotes (line 541) | @Test
    method testConsistentIdGeneration (line 575) | @Test
    method setupHttpClientMock (line 603) | private void setupHttpClientMock(int statusCode, String responseBody) ...
    method setupHttpClientMockForPagination (line 615) | private void setupHttpClientMockForPagination(String firstPage, String...

FILE: ai/src/test/java/com/alibaba/nacos/ai/service/McpServerCacheInvalidateServiceTest.java
  class McpServerCacheInvalidateServiceTest (line 42) | @ExtendWith(MockitoExtension.class)
    method setUp (line 58) | @BeforeEach
    method tearDown (line 63) | @AfterEach
    method testHandleMcpServerVersionConfigChangeEvent (line 71) | @Test
    method testHandleNonMcpServerConfigChangeEvent (line 86) | @Test
    method testHandleMcpServerGroupConfig (line 102) | @Test
    method testHandleMcpToolsGroupConfig (line 119) | @Test
    method testHandleNonLocalDataChangeEvent (line 136) | @Test
    method testHandleEventWithInvalidDataIdFormat (line 152) | @Test
    method testHandleEventWithEmptyDataId (line 168) | @Test
    method testHandleEventWhenCacheInvalidationThrowsException (line 185) | @Test
    method testHandleMultipleEvents (line 203) | @Test
    method testHandleSameEventMultipleTimes (line 229) | @Test
    method testHandleEventWithDifferentNamespace (line 245) | @Test
    method testHandleEventWithSpecialCharactersInServerId (line 262) | @Test
    method testHandleEventWithEmptyNamespace (line 280) | @Test
    method testHandleEventWithNullNamespace (line 296) | @Test

FILE: ai/src/test/java/com/alibaba/nacos/ai/service/McpServerImportServiceTest.java
  class McpServerImportServiceTest (line 59) | @ExtendWith(MockitoExtension.class)
    method setUp (line 76) | @BeforeEach
    method testValidateImportSuccess (line 81) | @Test
    method testValidateImportTransformationFailure (line 104) | @Test
    method testExecuteImportValidationFailure (line 125) | @Test
    method testExecuteImportSuccess (line 145) | @Test
    method testExecuteImportWithSkipInvalidAndNoValidServers (line 189) | @Test
    method testExecuteImportWithSkipInvalidAndHasValidServers (line 220) | @Test
    method testExecuteImportWithExceptionInImportProcess (line 269) | @Test
    method testExecuteImportWithNullValidationServers (line 280) | @Test
    method testExecuteImportWithSelectedServersFiltering (line 311) | @Test
    method testExecuteImportSkipExistingServer (line 382) | @Test
    method testExecuteImportUpdateExistingServer (line 428) | @Test
    method testExecuteImportCreateNewServer (line 478) | @Test
    method testExecuteImportWithEndpointSpecConversion (line 524) | @Test
    method testExecuteImportWithStdioProtocolNoEndpointSpec (line 577) | @Test
    method testExecuteImportFailureDuringServerCreation (line 623) | @Test
    method testExecuteImportWithEndpointSpecExceptionHandling (line 675) | @Test

FILE: ai/src/test/java/com/alibaba/nacos/ai/service/McpServerOperationServiceTest.java
  class McpServerOperationServiceTest (line 78) | @ExtendWith(MockitoExtension.class)
    method setUp (line 101) | @BeforeEach
    method tearDown (line 107) | @AfterEach
    method listMcpServerWithPage (line 111) | @Test
    method listMcpServerWithOverPageNo (line 131) | @Test
    method getMcpServerDetailByIdFoundStdioTypeWithToolsWithNamespace (line 148) | @Test
    method getMcpServerDetailByIdFoundSseTypeWithoutToolsWithNamespace (line 168) | @Test
    method getMcpServerDetailByIdFoundHttpTypeWithoutToolsWithNamespace (line 202) | @Test
    method getMcpServerDetailByIdWithServiceRefFrontEndpoint (line 239) | @Test
    method getMcpServerDetailByIdWithDirectFrontEndpoint (line 283) | @Test
    method getMcpServerDetailByIdWithDirectNoPortFrontEndpoint (line 318) | @Test
    method getMcpServerDetailByIdWithDirectNoPortForHttpsFrontEndpoint (line 353) | @Test
    method getMcpServerDetailByIdWithToBackendFrontEndpoint (line 388) | @Test
    method getMcpServerDetailByIdNotFoundWithNamespace (line 433) | @Test
    method getMcpServerDetailByIdFoundWithNamespace (line 442) | @Test
    method getMcpServerDetailByIdNotFoundWithVersion (line 460) | @Test
    method getMcpServerDetailByIdFoundWithVersion (line 472) | @Test
    method getMcpServerDetailByNameNotFound (line 490) | @Test
    method getMcpServerDetailByNameFound (line 499) | @Test
    method createMcpServerExistedName (line 519) | @Test
    method createMcpServerWithoutVersion (line 529) | @Test
    method createMcpServerWithOldSpec (line 538) | @Test
    method createMcpServerWithNewSpec (line 553) | @Test
    method createMcpServerWithToolSpec (line 568) | @Test
    method createMcpServerWithEncryptedToolSpecOnly (line 586) | @Test
    method createMcpServerWithEndpointSpec (line 611) | @Test
    method createMcpServerByCustomIdWithException (line 634) | @Test
    method createMcpServerByCustomIdWithExistedId (line 650) | @Test
    method createMcpServerByCustomId (line 668) | @Test
    method updateMcpServerByIdNotFound (line 694) | @Test
    method updateMcpServerByIdWithoutVersion (line 703) | @Test
    method updateMcpServerByIdWithOldSpec (line 714) | @Test
    method updateMcpServerByIdWithNewSpec (line 731) | @Test
    method updateMcpServerByIdNewVersion (line 748) | @Test
    method updateMcpServerByNameNotFound (line 765) | @Test
    method updateMcpServerByNameFound (line 773) | @Test
    method updateMcpServerWithEncryptedToolSpecOnly (line 790) | @Test
    method deleteMcpServerByIdNotFound (line 818) | @Test
    method deleteMcpServerById (line 827) | @Test
    method deleteMcpServerByName (line 855) | @Test
    method deleteMcpServerForTargetVersion (line 886) | @Test
    method invalidateCacheAfterDbUpdateOperationWithDifferentNames (line 905) | @Test
    method invalidateCacheAfterDbUpdateOperationWithSameNames (line 928) | @Test
    method invalidateCacheAfterDbUpdateOperationWithEmptyNames (line 951) | @Test
    method invalidateCacheAfterDbOperation (line 974) | @Test
    method invalidateCacheAfterDbOperationWithEmptyName (line 995) | @Test
    method invalidateCacheAfterDbOperationWithEmptyId (line 1017) | @Test
    method invalidateCacheAfterDbOperationWithException (line 1039) | @Test
    method invalidateCacheAfterDbUpdateOperationWithException (line 1059) | @Test
    method mockIndexData (line 1080) | private Page<McpServerIndexData> mockIndexData(String id) {
    method mockConfigQueryChainResponse (line 1091) | private ConfigQueryChainResponse mockConfigQueryChainResponse(Object o...
    method mockServerVersionInfo (line 1102) | private McpServerVersionInfo mockServerVersionInfo(String id) {
    method mockVersion (line 1114) | private ServerVersionDetail mockVersion(String version) {
    method mockStorageInfo (line 1120) | private McpServerStorageInfo mockStorageInfo(String id, boolean isLate...
    method mockId (line 1132) | private String mockId() {

FILE: ai/src/test/java/com/alibaba/nacos/ai/service/McpServerValidationServiceTest.java
  class McpServerValidationServiceTest (line 54) | @ExtendWith(MockitoExtension.class)
    method setUp (line 62) | @BeforeEach
    method validateServersWithNullServers (line 68) | @Test
    method validateServersWithEmptyServers (line 82) | @Test
    method validateServersWithValidServer (line 96) | @Test
    method validateServersWithInvalidServer (line 118) | @Test
    method validateServersWithDuplicateServerInBatch (line 145) | @Test
    method validateServersWithExistingServer (line 180) | @Test
    method validateServersWithExceptionDuringValidation (line 209) | @Test
    method validateSingleServerWithValidServer (line 232) | @Test
    method validateSingleServerWithMissingName (line 256) | @Test
    method validateSingleServerWithMissingProtocol (line 282) | @Test
    method validateSingleServerWithInvalidProtocol (line 308) | @Test
    method validateSingleServerWithMissingDescription (line 334) | @Test
    method validateSingleServerWithDuplicateInBatch (line 360) | @Test
    method validateSingleServerWithExceptionDuringExistenceCheck (line 387) | @Test
    method isValidProtocolWithValidProtocols (line 412) | @Test
    method isValidProtocolWithInvalidProtocol (line 426) | @Test
    method validateProtocolSpecificConfigWithValidStdioConfig (line 437) | @Test
    method validateProtocolSpecificConfigWithValidStdioConfigWithPackages (line 460) | @Test
    method validateProtocolSpecificConfigWithInvalidStdioConfig (line 484) | @Test
    method validateProtocolSpecificConfigWithValidRemoteConfig (line 507) | @Test
    method validateProtocolSpecificConfigWithInvalidRemoteConfig (line 529) | @Test
    method validateProtocolSpecificConfigWithValidToolSpec (line 551) | @Test
    method validateProtocolSpecificConfigWithInvalidToolSpec (line 579) | @Test
    method validateProtocolSpecificConfigWithNullToolSpec (line 604) | @Test
    method validateSingleServerDoesNotCallIndexWhenNameIsBlank (line 626) | @Test
    method validateServersWithMixedValidAndInvalidServers (line 651) | @Test
    method initializeVersionDetail (line 687) | private void initializeVersionDetail(McpServerDetailInfo server) {
    method createValidServer (line 695) | private McpServerDetailInfo createValidServer() {

FILE: ai/src/test/java/com/alibaba/nacos/ai/service/McpToolOperationServiceTest.java
  class McpToolOperationServiceTest (line 49) | @ExtendWith(MockitoExtension.class)
    method setUp (line 60) | @BeforeEach
    method tearDown (line 65) | @AfterEach
    method refreshMcpTool (line 69) | @Test
    method getMcpTool (line 77) | @Test
    method getMcpToolNotFound (line 90) | @Test
    method deleteMcpTool (line 102) | @Test
    method getMcpServerBasicInfo (line 110) | private McpServerBasicInfo getMcpServerBasicInfo() {

FILE: ai/src/test/java/com/alibaba/nacos/ai/service/SimpleSyncEffectServiceTest.java
  class SimpleSyncEffectServiceTest (line 29) | class SimpleSyncEffectServiceTest {
    method setUp (line 33) | @BeforeEach
    method toSyncLongStartTime (line 38) | @Test
    method toSyncLongStartTimeWithInterruptedException (line 46) | @Test

FILE: ai/src/test/java/com/alibaba/nacos/ai/service/SyncEffectServiceTest.java
  class SyncEffectServiceTest (line 28) | class SyncEffectServiceTest {
    method setUp (line 34) | @BeforeEach
    method toSync (line 40) | @Test
    class MockSyncEffectService (line 46) | private class MockSyncEffectService implements SyncEffectService {
      method toSync (line 48) | @Override

FILE: ai/src/test/java/com/alibaba/nacos/ai/service/a2a/A2aServerOperationServiceTest.java
  class A2aServerOperationServiceTest (line 76) | @ExtendWith(MockitoExtension.class)
    method setUp (line 112) | @BeforeEach
    method testRegisterAgentSuccess (line 121) | @Test
    method testRegisterAgentAlreadyExists (line 140) | @Test
    method testDeleteAgentSuccess (line 159) | @Test
    method testDeleteAgentDeleteAllVersions (line 179) | @Test
    method testDeleteAgentDeleteLastVersion (line 199) | @Test
    method testDeleteAgentWhenAgentNotFound (line 224) | @Test
    method testDeleteAgentWithVersionNotFoundInVersionDetails (line 236) | @Test
    method testUpdateAgentCardSuccess (line 258) | @Test
    method testUpdateAgentCardWithExistingVersion (line 284) | @Test
    method testUpdateAgentCardWithNewVersion (line 312) | @Test
    method testUpdateAgentCardWithoutRegistrationType (line 342) | @Test
    method testUpdateAgentCardNotSetAsLatest (line 370) | @Test
    method testUpdateAgentCardSetAsLatestWithMultipleVersions (line 397) | @Test
    method testListAgentsSuccess (line 433) | @Test
    method testListAgentsAccurateSearch (line 453) | @Test
    method testListAgentsEmptyAgentName (line 473) | @Test
    method testListAgentVersionsSuccess (line 493) | @Test
    method testQueryAgentCardVersionInfoNotFound (line 508) | @Test
    method testGetAgentCardSuccess (line 523) | @Test
    method testGetAgentCardNotFound (line 554) | @Test
    method testGetAgentCardLatestVersion (line 577) | @Test
    method testGetAgentCardLatestVersionNotFound (line 614) | @Test
    method testGetAgentCardWithServiceRegistrationType (line 635) | @Test
    method testGetAgentCardWithServiceEndpoints (line 666) | @Test
    method testGetAgentCardWithEmptyRegistrationType (line 704) | @Test
    method testListAgentsWithNoAgentNameProvided (line 735) | @Test
    method testDeleteAgentWithEmptyVersion (line 756) | @Test
    method testDeleteAgentVersionNotLatest (line 776) | @Test
    method buildTestAgentCard (line 807) | private AgentCard buildTestAgentCard() {
    method buildTestAgentCardDetailInfo (line 819) | private AgentCardDetailInfo buildTestAgentCardDetailInfo() {
    method buildTestAgentCardVersionInfo (line 831) | private AgentCardVersionInfo buildTestAgentCardVersionInfo() {

FILE: ai/src/test/java/com/alibaba/nacos/ai/service/a2a/identity/AgentIdCodecHolderTest.java
  class AgentIdCodecHolderTest (line 31) | @ExtendWith(MockitoExtension.class)
    method setUp (line 42) | @BeforeEach
    method testConstructorWithNoAvailableCodec (line 48) | @Test
    method testEncode (line 55) | @Test
    method testEncodeForSearch (line 64) | @Test
    method testDecode (line 73) | @Test

FILE: ai/src/test/java/com/alibaba/nacos/ai/service/a2a/identity/AsciiAgentIdCodecTest.java
  class AsciiAgentIdCodecTest (line 24) | class AsciiAgentIdCodecTest {
    method setUp (line 28) | @BeforeEach
    method testUsageDoesNotEncodeValidNames (line 34) | @Test
    method testValidSpecialCharsAreKept (line 41) | @Test
    method testValidNamesWithNumber (line 47) | @Test
    method testEncodeAndDecodeWhenNameContainsSpace (line 55) | @Test
    method testRoundTripUnicodeChars (line 65) | @Test
    method testUnderscoreFollowedByHexAmbiguityHandledByPolicy (line 75) | @Test
    method testBoundaryCharacters (line 84) | @Test
    method testEncodeKeepsEmptyAndUnderscore (line 94) | @Test
    method testAlreadyEncodedStringIsIdempotentOnEncode (line 106) | @Test
    method testMixedUnicodeAndControlCharactersRoundTrip (line 119) | @Test
    method testDecodeNameWithFakeEncodedPrefixBody (line 129) | @Test
    method testDecodeWithoutPrefix (line 138) | @Test
    method testDecodeWithIllegalString (line 144) | @Test
    method testEncodeForSearchWithEmpty (line 150) | @Test
    method testEncodeForNotEncode (line 156) | @Test
    method testEncodeForSearchWithUnderscore (line 162) | @Test
    method testEncodeForSearchWithSpecialChars (line 168) | @Test

FILE: ai/src/test/java/com/alibaba/nacos/ai/service/prompt/PromptAdminOperationServiceImplTest.java
  class PromptAdminOperationServiceImplTest (line 57) | @ExtendWith(MockitoExtension.class)
    method setUp (line 73) | @BeforeEach
    method publishPromptVersionShouldPublishVersionMetaAndLatestWhenFirstPublish (line 79) | @Test
    method publishPromptVersionShouldRejectDescriptionOrBizTagsWhenNotFirstPublish (line 111) | @Test
    method bindLabelShouldThrowNotFoundWhenVersionNotExists (line 131) | @Test
    method queryPromptDetailShouldResolveByLabel (line 148) | @Test
    method listPromptVersionsShouldSortBySemverDescAndPaginate (line 181) | @Test
    method publishPromptVersionShouldThrowWhenVersionInvalid (line 209) | @Test
    method publishPromptVersionShouldThrowWhenTemplateBlank (line 216) | @Test
    method publishPromptVersionShouldThrowConflictWhenMetaContainsVersion (line 223) | @Test
    method publishPromptVersionShouldThrowConflictWhenVersionConfigAlreadyExists (line 241) | @Test
    method bindLabelShouldPublishMetaWhenSuccess (line 258) | @Test
    method unbindLabelShouldPublishMetaWhenSuccess (line 279) | @Test
    method deletePromptShouldDeleteMetaLatestAndAllVersionConfigs (line 303) | @Test
    method updatePromptMetadataShouldPublishMergedMeta (line 322) | @Test
    method listPromptsShouldUseMetaPatternAndFilterInvalidJson (line 356) | @Test
    method queryPromptDetailShouldThrowWhenVersionConfigMissing (line 387) | @Test

FILE: ai/src/test/java/com/alibaba/nacos/ai/service/prompt/PromptClientOperationServiceImplTest.java
  class PromptClientOperationServiceImplTest (line 50) | @ExtendWith(MockitoExtension.class)
    method setUp (line 58) | @BeforeEach
    method queryPromptShouldThrowInvalidParamWhenPromptKeyBlank (line 63) | @Test
    method queryPromptShouldThrowNotFoundWhenMetaMissing (line 68) | @Test
    method queryPromptShouldReturnPromptVersionInfoWhenLabelResolved (line 75) | @Test
    method queryPromptShouldInvalidateMetaCacheWhenVersionDataMissing (line 101) | @Test
    method getPromptMetaShouldReturnCloneAndUseCache (line 129) | @Test
    method queryPromptShouldThrowNotModifiedWhenMd5UpToDate (line 149) | @Test
    method getPromptMetaShouldReloadWhenCacheExpired (line 167) | @Test
    method invalidateMetaCacheShouldNoopWhenPromptKeyBlank (line 194) | @Test
    method getPromptMetaShouldEvictWhenCacheReachMaxSize (line 210) | @Test
    method getMetaCache (line 241) | @SuppressWarnings("unchecked")
    method foundResponse (line 248) | private ConfigQueryChainResponse foundResponse(Object content, String ...
    method notFoundResponse (line 256) | private ConfigQueryChainResponse notFoundResponse() {

FILE: ai/src/test/java/com/alibaba/nacos/ai/service/prompt/PromptMetaCacheInvalidateServiceTest.java
  class PromptMetaCacheInvalidateServiceTest (line 30) | @ExtendWith(MockitoExtension.class)
    method setUp (line 38) | @BeforeEach
    method onEventShouldIgnoreWhenGroupNotPromptGroup (line 43) | @Test
    method onEventShouldIgnoreWhenDataIdNotMeta (line 51) | @Test
    method onEventShouldInvalidateCacheWhenMetaChanged (line 58) | @Test

FILE: ai/src/test/java/com/alibaba/nacos/ai/service/prompt/PromptMetaUtilsTest.java
  class PromptMetaUtilsTest (line 32) | class PromptMetaUtilsTest {
    method normalizeMetaShouldInitCollectionsWhenNullFields (line 34) | @Test
    method cloneMetaShouldDeepCopyCollections (line 43) | @Test
    method resolveTargetVersionShouldPreferLabelOverVersion (line 62) | @Test
    method resolveTargetVersionShouldThrowWhenLabelNotFound (line 73) | @Test
    method resolveTargetVersionShouldThrowWhenVersionInvalid (line 82) | @Test
    method resolveTargetVersionShouldFallbackToLatestOrThrow (line 91) | @Test

FILE: ai/src/test/java/com/alibaba/nacos/ai/service/skills/SkillOperationServiceImplTest.java
  class SkillOperationServiceImplTest (line 68) | @ExtendWith(MockitoExtension.class)
    method setUp (line 85) | @BeforeEach
    method testRegisterSkillSuccessfully (line 94) | @Test
    method testRegisterSkillWithResources (line 113) | @Test
    method testRegisterSkillWithBlankName (line 132) | @Test
    method testRegisterSkillWithInvalidName (line 145) | @Test
    method testRegisterSkillWithDoubleUnderscore (line 157) | @Test
    method testRegisterSkillAlreadyExists (line 174) | @Test
    method testGetSkillDetailSuccessfully (line 189) | @Test
    method testGetSkillDetailNotFound (line 207) | @Test
    method testUpdateSkillSuccessfully (line 223) | @Test
    method testUpdateSkillNotFound (line 245) | @Test
    method testDeleteSkillSuccessfully (line 260) | @Test
    method testDeleteSkillAlreadyDeleted (line 277) | @Test
    method testListSkillsSuccessfully (line 295) | @Test
    method testUploadSkillFromZip (line 313) | @Test
    method createValidSkill (line 334) | private Skill createValidSkill() {
    method createValidSkillWithResources (line 345) | private Skill createValidSkillWithResources() {
    method createMockConfigResponse (line 360) | private ConfigQueryChainResponse createMockConfigResponse() {
    method createMockConfigInfoPage (line 375) | private Page<ConfigInfo> createMockConfigInfoPage() {
    method createValidZipBytes (line 396) | private byte[] createValidZipBytes() throws IOException {

FILE: ai/src/test/java/com/alibaba/nacos/ai/utils/AgentCardUtilTest.java
  class AgentCardUtilTest (line 39) | class AgentCardUtilTest {
    method testBuildAgentCardDetailInfo (line 41) | @Test
    method testBuildAgentCardVersionInfoWithLatest (line 56) | @Test
    method testBuildAgentCardVersionInfoWithoutLatest (line 80) | @Test
    method testBuildAgentVersionDetail (line 103) | @Test
    method testUpdateUpdateTime (line 120) | @Test
    method testBuildAgentInterfaceWithTlsSupport (line 134) | @Test
    method testBuildAgentInterfaceWithoutTlsSupport (line 156) | @Test
    method testBuildAgentInterfaceWithoutPath (line 178) | @Test
    method testBuildAgentInterfaceWithPathWithoutLeadingSlash (line 199) | @Test
    method testBuildAgentInterfaceWithProtocolField (line 221) | @Test
    method testBuildAgentInterfaceWithQueryField (line 244) | @Test
    method testBuildAgentInterfaceWithProtocolAndQueryFields (line 267) | @Test
    method testBuildAgentInterfaceWithEmptyMetadata (line 291) | @Test
    method testGetCurrentTimeDoesNotThrow (line 308) | @Test
    method createTestAgentCard (line 319) | private AgentCard createTestAgentCard() {
    method assertAgentCardEquals (line 338) | private void assertAgentCardEquals(AgentCard expected, AgentCard actua...

FILE: ai/src/test/java/com/alibaba/nacos/ai/utils/AgentEndpointUtilTest.java
  class AgentEndpointUtilTest (line 36) | class AgentEndpointUtilTest {
    method testTransferToInstance (line 38) | @Test
    method testTransferToInstanceWithEmptyFields (line 63) | @Test
    method testTransferToInstanceWithGrpcProtocol (line 89) | @Test
    method testTransferToInstances (line 114) | @Test
    method testTransferToInstanceWithNullEndpoint (line 141) | @Test
    method testTransferToInstancesWithEmptyCollection (line 150) | @Test
    method createTestAgentEndpoint (line 163) | private AgentEndpoint createTestAgentEndpoint() {
    method createAnotherTestAgentEndpoint (line 176) | private AgentEndpoint createAnotherTestAgentEndpoint() {

FILE: ai/src/test/java/com/alibaba/nacos/ai/utils/AgentRequestUtilTest.java
  class AgentRequestUtilTest (line 35) | class AgentRequestUtilTest {
    method testParseAgentCardSuccessfully (line 37) | @Test
    method testParseAgentCardWithInvalidJson (line 58) | @Test
    method testValidateAgentCardWithValidCard (line 68) | @Test
    method testValidateAgentCardWithMissingName (line 77) | @Test
    method testValidateAgentCardWithEmptyName (line 89) | @Test
    method testValidateAgentCardWithMissingVersion (line 101) | @Test
    method testValidateAgentCardWithMissingProtocolVersion (line 113) | @Test
    method testValidateAgentCardWithMissingPreferredTransport (line 125) | @Test
    method testValidateAgentCardWithMissingUrl (line 137) | @Test
    method testValidateAgentCardWithNullDescriptionShouldSetEmptyString (line 149) | @Test
    method testValidateAgentCardWithNullCapabilitiesShouldSetDefault (line 162) | @Test
    method testValidateAgentCardWithNullDefaultInputModesShouldSetEmptyList (line 175) | @Test
    method testValidateAgentCardWithNullDefaultOutputModesShouldSetEmptyList (line 189) | @Test
    method testValidateAgentCardWithNullSkillsShouldSetEmptyList (line 203) | @Test
    method testFillNamespaceIdWithEmptyNamespaceId (line 217) | @Test
    method testFillNamespaceIdWithNullNamespaceId (line 231) | @Test
    method testFillNamespaceIdWithValidNamespaceId (line 244) | @Test
    method createValidAgentCard (line 259) | private AgentCard createValidAgentCard() {

FILE: ai/src/test/java/com/alibaba/nacos/ai/utils/McpConfigUtilsTest.java
  class McpConfigUtilsTest (line 27) | class McpConfigUtilsTest {
    method testFormatServerVersionInfoDataId (line 35) | @Test
    method testFormatServerSpecInfoDataId (line 42) | @Test
    method testFormatServerToolSpecDataId (line 49) | @Test
    method testFormatServerNameTagBlurSearchValue (line 56) | @Test
    method testFormatServerNameTagAccurateSearchValue (line 62) | @Test
    method testIsConfigFoundPositive (line 68) | @Test
    method testIsConfigFoundNegative (line 74) | @Test
    method testIsConfigNotFoundPositive (line 80) | @Test
    method testIsConfigNotFoundNegative (line 86) | @Test
    method testBuildMcpServerVersionConfigTagsWithValidName (line 92) | @Test
    method testBuildMcpServerVersionConfigTagsWithEmptyName (line 98) | @Test
    method testBuildMcpServerVersionConfigTagsWithNullName (line 104) | @Test

FILE: ai/src/test/java/com/alibaba/nacos/ai/utils/McpRequestUtilTest.java
  class McpRequestUtilTest (line 37) | class McpRequestUtilTest {
    method parseMcpServerBasicInfoWithOldData (line 58) | @Test
    method parseMcpServerBasicInfoWithNewData (line 72) | @Test
    method parseMcpServerBasicInfoWithNewDataNoName (line 87) | @Test
    method parseMcpServerBasicInfoWithWrongData (line 103) | @Test
    method parseMcpToolsWithoutToolSpec (line 111) | @Test
    method parseMcpToolsWithWrongData (line 117) | @Test
    method parseMcpToolsSuccess (line 125) | @Test
    method parseMcpEndpointSpecForStdioType (line 143) | @Test
    method parseMcpEndpointSpecWithoutSpec (line 152) | @Test
    method parseMcpEndpointSpecSuccess (line 161) | @Test
    method transferToMcpServiceRefForMcpServiceRef (line 174) | @Test
    method transferToMcpServiceRefForMap (line 181) | @Test
    method transferToMcpServiceRefForOther (line 193) | @Test

FILE: ai/src/test/java/com/alibaba/nacos/ai/utils/McpRequestUtilsTest.java
  class McpRequestUtilsTest (line 25) | class McpRequestUtilsTest {
    method fillNamespaceId (line 27) | @Test

FILE: ai/src/test/java/com/alibaba/nacos/ai/utils/PromptDataIdUtilsTest.java
  class PromptDataIdUtilsTest (line 26) | class PromptDataIdUtilsTest {
    method buildDataIdsShouldReturnExpectedFormat (line 28) | @Test
    method isMetaDataIdShouldMatchOnlyMetaSuffix (line 37) | @Test
    method extractPromptKeyFromMetaDataIdShouldReturnNullForInvalid (line 46) | @Test

FILE: ai/src/test/java/com/alibaba/nacos/ai/utils/SkillZipParserTest.java
  class SkillZipParserTest (line 44) | class SkillZipParserTest {
    method testParseSkillFromZipWithValidSkillMd (line 46) | @Test
    method testParseSkillFromZipWithSkillMdInSubdir (line 62) | @Test
    method testParseSkillFromZipWithResources (line 76) | @Test
    method testParseSkillFromZipWithEscapedYamlValues (line 90) | @Test
    method testParseSkillFromZipWithoutSkillMd (line 104) | @Test
    method testParseSkillFromZipWithInvalidYaml (line 115) | @Test
    method testParseSkillFromZipWithMissingName (line 125) | @Test
    method testParseSkillFromZipWithMissingDescription (line 136) | @Test
    method testParseSkillFromZipWithInstructionsHeader (line 147) | @Test
    method testParseSkillFromZipWithBinaryResource (line 160) | @Test
    method testParseSkillFromZipExceedsSizeLimit (line 187) | @Test
    method testParseSkillFromZipIgnoresMacOsMetadataFiles (line 202) | @Test
    method testParseSkillFromZipIncludesFilesUnderSkillRoot (line 220) | @Test
    method createValidSkillZip (line 241) | private byte[] createValidSkillZip() throws IOException {
    method createSkillZipWithSubdir (line 261) | private byte[] createSkillZipWithSubdir() throws IOException {
    method createSkillZipWithResources (line 281) | private byte[] createSkillZipWithResources() throws IOException {
    method createZipWithoutSkillMd (line 307) | private byte[] createZipWithoutSkillMd() throws IOException {
    method createZipWithInvalidYaml (line 321) | private byte[] createZipWithInvalidYaml() throws IOException {
    method createZipWithMissingName (line 336) | private byte[] createZipWithMissingName() throws IOException {
    method createZipWithMissingDescription (line 354) | private byte[] createZipWithMissingDescription() throws IOException {
    method createZipWithEscapedYamlValues (line 372) | private byte[] createZipWithEscapedYamlValues() throws IOException {
    method createSkillZipWithFileUnderSkillRoot (line 392) | private byte[] createSkillZipWithFileUnderSkillRoot() throws IOExcepti...
    method createSkillZipWithMacOsMetadataFiles (line 417) | private byte[] createSkillZipWithMacOsMetadataFiles() throws IOExcepti...
    method createSkillZipWithBinaryResource (line 446) | private byte[] createSkillZipWithBinaryResource() throws IOException {
    method createZipWithInstructionsHeader (line 470) | private byte[] createZipWithInstructionsHeader() throws IOException {
    method testParseSkillFromZipWithUtf8Bom (line 487) | @Test
    method testParseSkillFromZipWithUtf8BomInSubdir (line 502) | @Test
    method createSkillZipWithUtf8Bom (line 519) | private byte[] createSkillZipWithUtf8Bom() throws IOException {
    method createSkillZipWithUtf8BomInSubdir (line 544) | private byte[] createSkillZipWithUtf8BomInSubdir() throws IOException {

FILE: api/src/main/java/com/alibaba/nacos/api/NacosFactory.java
  class NacosFactory (line 36) | public class NacosFactory {
    method createConfigService (line 45) | public static ConfigService createConfigService(Properties properties)...
    method createConfigService (line 56) | public static ConfigService createConfigService(String serverAddr) thr...
    method createNamingService (line 67) | public static NamingService createNamingService(String serverAddr) thr...
    method createNamingService (line 78) | public static NamingService createNamingService(Properties properties)...
    method createMaintainService (line 90) | @Deprecated
    method createMaintainService (line 103) | @Deprecated
    method createLockService (line 115) | public static LockService createLockService(Properties properties) thr...

FILE: api/src/main/java/com/alibaba/nacos/api/PropertyKeyConst.java
  class PropertyKeyConst (line 24) | public class PropertyKeyConst {
    class SystemEnv (line 122) | public static class SystemEnv {

FILE: api/src/main/java/com/alibaba/nacos/api/SystemPropertyKeyConst.java
  type SystemPropertyKeyConst (line 26) | public interface SystemPropertyKeyConst {

FILE: api/src/main/java/com/alibaba/nacos/api/ability/ClientAbilities.java
  class ClientAbilities (line 31) | @Deprecated
    method getRemoteAbility (line 42) | public ClientRemoteAbility getRemoteAbility() {
    method setRemoteAbility (line 46) | public void setRemoteAbility(ClientRemoteAbility remoteAbility) {
    method getConfigAbility (line 50) | public ClientConfigAbility getConfigAbility() {
    method setConfigAbility (line 54) | public void setConfigAbility(ClientConfigAbility configAbility) {
    method getNamingAbility (line 58) | public ClientNamingAbility getNamingAbility() {
    method setNamingAbility (line 62) | public void setNamingAbility(ClientNamingAbility namingAbility) {

FILE: api/src/main/java/com/alibaba/nacos/api/ability/ServerAbilities.java
  class ServerAbilities (line 32) | @Deprecated
    method getRemoteAbility (line 43) | public ServerRemoteAbility getRemoteAbility() {
    method setRemoteAbility (line 47) | public void setRemoteAbility(ServerRemoteAbility remoteAbility) {
    method getConfigAbility (line 51) | public ServerConfigAbility getConfigAbility() {
    method setConfigAbility (line 55) | public void setConfigAbility(ServerConfigAbility configAbility) {
    method getNamingAbility (line 59) | public ServerNamingAbility getNamingAbility() {
    method setNamingAbility (line 63) | public void setNamingAbility(ServerNamingAbility namingAbility) {
    method equals (line 67) | @Override
    method hashCode (line 80) | @Override

FILE: api/src/main/java/com/alibaba/nacos/api/ability/constant/AbilityKey.java
  type AbilityKey (line 32) | public enum AbilityKey {
    method AbilityKey (line 105) | AbilityKey(String keyName, String description, AbilityMode mode) {
    method getName (line 111) | public String getName() {
    method getDescription (line 115) | public String getDescription() {
    method getMode (line 119) | public AbilityMode getMode() {
    method getAllValues (line 133) | public static Collection<AbilityKey> getAllValues(AbilityMode mode) {
    method getAllNames (line 142) | public static Collection<String> getAllNames(AbilityMode mode) {
    method isLegalKey (line 152) | public static boolean isLegalKey(AbilityMode mode, String name) {
    method mapEnum (line 162) | public static Map<AbilityKey, Boolean> mapEnum(AbilityMode mode, Map<S...
    method mapStr (line 176) | public static Map<String, Boolean> mapStr(Map<AbilityKey, Boolean> abi...
    method getEnum (line 190) | public static AbilityKey getEnum(AbilityMode mode, String key) {

FILE: api/src/main/java/com/alibaba/nacos/api/ability/constant/AbilityMode.java
  type AbilityMode (line 25) | public enum AbilityMode {

FILE: api/src/main/java/com/alibaba/nacos/api/ability/constant/AbilityStatus.java
  type AbilityStatus (line 24) | public enum  AbilityStatus {

FILE: api/src/main/java/com/alibaba/nacos/api/ability/initializer/AbilityInitializer.java
  type AbilityInitializer (line 24) | @Deprecated
    method initialize (line 32) | void initialize(A abilities);

FILE: api/src/main/java/com/alibaba/nacos/api/ability/initializer/AbilityPostProcessor.java
  type AbilityPostProcessor (line 29) | public interface AbilityPostProcessor {
    method process (line 38) | void process(AbilityMode mode, Map<AbilityKey, Boolean> abilities);

FILE: api/src/main/java/com/alibaba/nacos/api/ability/register/AbstractAbilityRegistry.java
  class AbstractAbilityRegistry (line 30) | public abstract class AbstractAbilityRegistry {
    method getSupportedAbilities (line 39) | public Map<AbilityKey, Boolean> getSupportedAbilities() {

FILE: api/src/main/java/com/alibaba/nacos/api/ability/register/impl/ClusterClientAbilities.java
  class ClusterClientAbilities (line 29) | public class ClusterClientAbilities extends AbstractAbilityRegistry {
    method getStaticAbilities (line 54) | public static Map<AbilityKey, Boolean> getStaticAbilities() {

FILE: api/src/main/java/com/alibaba/nacos/api/ability/register/impl/SdkClientAbilities.java
  class SdkClientAbilities (line 30) | public class SdkClientAbilities extends AbstractAbilityRegistry {
    method getStaticAbilities (line 59) | public static Map<AbilityKey, Boolean> getStaticAbilities() {

FILE: api/src/main/java/com/alibaba/nacos/api/ability/register/impl/ServerAbilities.java
  class ServerAbilities (line 30) | public class ServerAbilities extends AbstractAbilityRegistry {
    method getStaticAbilities (line 60) | public static Map<AbilityKey, Boolean> getStaticAbilities() {

FILE: api/src/main/java/com/alibaba/nacos/api/ai/A2aService.java
  type A2aService (line 34) | public interface A2aService {
    method getAgentCard (line 43) | default AgentCardDetailInfo getAgentCard(String agentName) throws Naco...
    method getAgentCard (line 55) | default AgentCardDetailInfo getAgentCard(String agentName, String vers...
    method getAgentCard (line 70) | AgentCardDetailInfo getAgentCard(String agentName, String version, Str...
    method releaseAgentCard (line 84) | default void releaseAgentCard(AgentCard agentCard) throws NacosExcepti...
    method releaseAgentCard (line 102) | default void releaseAgentCard(AgentCard agentCard, String registration...
    method releaseAgentCard (line 123) | void releaseAgentCard(AgentCard agentCard, String registrationType, bo...
    method registerAgentEndpoint (line 134) | default void registerAgentEndpoint(String agentName, String version, S...
    method registerAgentEndpoint (line 149) | default void registerAgentEndpoint(String agentName, String version, S...
    method registerAgentEndpoint (line 165) | default void registerAgentEndpoint(String agentName, String version, S...
    method registerAgentEndpoint (line 182) | default void registerAgentEndpoint(String agentName, String version, S...
    method registerAgentEndpoint (line 201) | void registerAgentEndpoint(String agentName, AgentEndpoint endpoint) t...
    method registerAgentEndpoint (line 216) | void registerAgentEndpoint(String agentName, Collection<AgentEndpoint>...
    method deregisterAgentEndpoint (line 232) | default void deregisterAgentEndpoint(String agentName, String version,...
    method deregisterAgentEndpoint (line 253) | void deregisterAgentEndpoint(String agentName, AgentEndpoint endpoint)...
    method subscribeAgentCard (line 263) | default AgentCardDetailInfo subscribeAgentCard(String agentName, Abstr...
    method subscribeAgentCard (line 277) | AgentCardDetailInfo subscribeAgentCard(String agentName, String version,
    method unsubscribeAgentCard (line 287) | default void unsubscribeAgentCard(String agentName, AbstractNacosAgent...
    method unsubscribeAgentCard (line 300) | void unsubscribeAgentCard(String agentName, String version, AbstractNa...

FILE: api/src/main/java/com/alibaba/nacos/api/ai/AiFactory.java
  class AiFactory (line 29) | public class AiFactory {
    method createAiService (line 38) | public static AiService createAiService(Properties properties) throws ...

FILE: api/src/main/java/com/alibaba/nacos/api/ai/AiService.java
  type AiService (line 35) | public interface AiService extends A2aService {
    method getMcpServer (line 44) | default McpServerDetailInfo getMcpServer(String mcpName) throws NacosE...
    method getMcpServer (line 56) | McpServerDetailInfo getMcpServer(String mcpName, String version) throw...
    method releaseMcpServer (line 72) | default String releaseMcpServer(McpServerBasicInfo serverSpecification...
    method releaseMcpServer (line 92) | String releaseMcpServer(McpServerBasicInfo serverSpecification, McpToo...
    method registerMcpServerEndpoint (line 103) | default void registerMcpServerEndpoint(String mcpName, String address,...
    method registerMcpServerEndpoint (line 116) | void registerMcpServerEndpoint(String mcpName, String address, int por...
    method deregisterMcpServerEndpoint (line 131) | void deregisterMcpServerEndpoint(String mcpName, String address, int p...
    method subscribeMcpServer (line 141) | default McpServerDetailInfo subscribeMcpServer(String mcpName, Abstrac...
    method subscribeMcpServer (line 155) | McpServerDetailInfo subscribeMcpServer(String mcpName, String version,
    method unsubscribeMcpServer (line 165) | default void unsubscribeMcpServer(String mcpName, AbstractNacosMcpServ...
    method unsubscribeMcpServer (line 178) | void unsubscribeMcpServer(String mcpName, String version, AbstractNaco...
    method loadSkill (line 193) | Skill loadSkill(String skillName) throws NacosException;
    method subscribeSkill (line 203) | Skill subscribeSkill(String skillName, AbstractNacosSkillListener skil...
    method unsubscribeSkill (line 212) | void unsubscribeSkill(String skillName, AbstractNacosSkillListener ski...
    method getPrompt (line 223) | Prompt getPrompt(String promptKey) throws NacosException;
    method getPromptByVersion (line 233) | Prompt getPromptByVersion(String promptKey, String version) throws Nac...
    method getPromptByLabel (line 243) | Prompt getPromptByLabel(String promptKey, String label) throws NacosEx...
    method subscribePrompt (line 255) | Prompt subscribePrompt(String promptKey, String version, String label,
    method unsubscribePrompt (line 267) | void unsubscribePrompt(String promptKey, String version, String label,
    method shutdown (line 275) | void shutdown() throws NacosException;

FILE: api/src/main/java/com/alibaba/nacos/api/ai/constant/AiConstants.java
  class AiConstants (line 26) | public class AiConstants {
    class Mcp (line 28) | public static class Mcp {
    class A2a (line 75) | public static class A2a {

FILE: api/src/main/java/com/alibaba/nacos/api/ai/listener/AbstractNacosAgentCardListener.java
  class AbstractNacosAgentCardListener (line 24) | public abstract class AbstractNacosAgentCardListener implements NacosAiL...

FILE: api/src/main/java/com/alibaba/nacos/api/ai/listener/AbstractNacosMcpServerListener.java
  class AbstractNacosMcpServerListener (line 24) | public abstract class AbstractNacosMcpServerListener implements NacosAiL...

FILE: api/src/main/java/com/alibaba/nacos/api/ai/listener/AbstractNacosPromptListener.java
  class AbstractNacosPromptListener (line 26) | public abstract class AbstractNacosPromptListener implements NacosAiList...

FILE: api/src/main/java/com/alibaba/nacos/api/ai/listener/AbstractNacosSkillListener.java
  class AbstractNacosSkillListener (line 24) | public abstract class AbstractNacosSkillListener implements NacosAiListe...

FILE: api/src/main/java/com/alibaba/nacos/api/ai/listener/NacosAgentCardEvent.java
  class NacosAgentCardEvent (line 26) | public class NacosAgentCardEvent implements NacosAiEvent {
    method NacosAgentCardEvent (line 32) | public NacosAgentCardEvent(AgentCardDetailInfo agentCard) {
    method getAgentName (line 37) | public String getAgentName() {
    method getAgentCard (line 41) | public AgentCardDetailInfo getAgentCard() {

FILE: api/src/main/java/com/alibaba/nacos/api/ai/listener/NacosAiEvent.java
  type NacosAiEvent (line 24) | public interface NacosAiEvent {

FILE: api/src/main/java/com/alibaba/nacos/api/ai/listener/NacosAiListener.java
  type NacosAiListener (line 26) | public interface NacosAiListener<E extends NacosAiEvent> {
    method onEvent (line 33) | void onEvent(E event);
    method getExecutor (line 40) | default Executor getExecutor() {

FILE: api/src/main/java/com/alibaba/nacos/api/ai/listener/NacosMcpServerEvent.java
  class NacosMcpServerEvent (line 26) | public class NacosMcpServerEvent implements NacosAiEvent {
    method NacosMcpServerEvent (line 36) | public NacosMcpServerEvent(McpServerDetailInfo mcpServerDetailInfo) {
    method getMcpId (line 43) | public String getMcpId() {
    method getNamespaceId (line 47) | public String getNamespaceId() {
    method getMcpName (line 51) | public String getMcpName() {
    method getMcpServerDetailInfo (line 55) | public McpServerDetailInfo getMcpServerDetailInfo() {

FILE: api/src/main/java/com/alibaba/nacos/api/ai/listener/NacosPromptEvent.java
  class NacosPromptEvent (line 28) | public class NacosPromptEvent implements NacosAiEvent {
    method NacosPromptEvent (line 34) | public NacosPromptEvent(String promptKey, Prompt prompt) {
    method getPromptKey (line 44) | public String getPromptKey() {
    method getPrompt (line 53) | public Prompt getPrompt() {

FILE: api/src/main/java/com/alibaba/nacos/api/ai/listener/NacosSkillEvent.java
  class NacosSkillEvent (line 26) | public class NacosSkillEvent implements NacosAiEvent {
    method NacosSkillEvent (line 32) | public NacosSkillEvent(String skillName, Skill skill) {
    method getSkillName (line 37) | public String getSkillName() {
    method getSkill (line 41) | public Skill getSkill() {

FILE: api/src/main/java/com/alibaba/nacos/api/ai/model/a2a/AgentAuthentication.java
  class AgentAuthentication (line 28) | public class AgentAuthentication {
    method getSchemes (line 34) | public List<String> getSchemes() {
    method setSchemes (line 38) | public void setSchemes(List<String> schemes) {
    method getCredentials (line 42) | public String getCredentials() {
    method setCredentials (line 46) | public void setCredentials(String credentials) {
    method equals (line 50) | @Override
    method hashCode (line 59) | @Override

FILE: api/src/main/java/com/alibaba/nacos/api/ai/model/a2a/AgentCapabilities.java
  class AgentCapabilities (line 28) | public class AgentCapabilities {
    method getStreaming (line 38) | public Boolean getStreaming() {
    method setStreaming (line 42) | public void setStreaming(Boolean streaming) {
    method getPushNotifications (line 46) | public Boolean getPushNotifications() {
    method setPushNotifications (line 50) | public void setPushNotifications(Boolean pushNotifications) {
    method getStateTransitionHistory (line 54) | public Boolean getStateTransitionHistory() {
    method setStateTransitionHistory (line 58) | public void setStateTransitionHistory(Boolean stateTransitionHistory) {
    method getExtensions (line 62) | public List<AgentExtension> getExtensions() {
    method setExtensions (line 66) | public void setExtensions(List<AgentExtension> extensions) {
    method equals (line 70) | @Override
    method hashCode (line 81) | @Override

FILE: api/src/main/java/com/alibaba/nacos/api/ai/model/a2a/AgentCard.java
  class AgentCard (line 29) | public class AgentCard extends AgentCardBasicInfo {
    method getUrl (line 51) | public String getUrl() {
    method setUrl (line 55) | public void setUrl(String url) {
    method getPreferredTransport (line 59) | public String getPreferredTransport() {
    method setPreferredTransport (line 63) | public void setPreferredTransport(String preferredTransport) {
    method getAdditionalInterfaces (line 67) | public List<AgentInterface> getAdditionalInterfaces() {
    method setAdditionalInterfaces (line 71) | public void setAdditionalInterfaces(List<AgentInterface> additionalInt...
    method getProvider (line 75) | public AgentProvider getProvider() {
    method setProvider (line 79) | public void setProvider(AgentProvider provider) {
    method getDocumentationUrl (line 83) | public String getDocumentationUrl() {
    method setDocumentationUrl (line 87) | public void setDocumentationUrl(String documentationUrl) {
    method getSecuritySchemes (line 91) | public Map<String, SecurityScheme> getSecuritySchemes() {
    method setSecuritySchemes (line 95) | public void setSecuritySchemes(Map<String, SecurityScheme> securitySch...
    method getSecurity (line 99) | public List<Map<String, List<String>>> getSecurity() {
    method setSecurity (line 103) | public void setSecurity(List<Map<String, List<String>>> security) {
    method getDefaultInputModes (line 107) | public List<String> getDefaultInputModes() {
    method setDefaultInputModes (line 111) | public void setDefaultInputModes(List<String> defaultInputModes) {
    method getDefaultOutputModes (line 115) | public List<String> getDefaultOutputModes() {
    method setDefaultOutputModes (line 119) | public void setDefaultOutputModes(List<String> defaultOutputModes) {
    method getSupportsAuthenticatedExtendedCard (line 123) | public Boolean getSupportsAuthenticatedExtendedCard() {
    method setSupportsAuthenticatedExtendedCard (line 127) | public void setSupportsAuthenticatedExtendedCard(Boolean supportsAuthe...
    method equals (line 131) | @Override
    method hashCode (line 152) | @Override

FILE: api/src/main/java/com/alibaba/nacos/api/ai/model/a2a/AgentCardBasicInfo.java
  class AgentCardBasicInfo (line 27) | public class AgentCardBasicInfo {
    method getProtocolVersion (line 43) | public String getProtocolVersion() {
    method setProtocolVersion (line 47) | public void setProtocolVersion(String protocolVersion) {
    method getName (line 51) | public String getName() {
    method setName (line 55) | public void setName(String name) {
    method getDescription (line 59) | public String getDescription() {
    method setDescription (line 63) | public void setDescription(String description) {
    method getVersion (line 67) | public String getVersion() {
    method setVersion (line 71) | public void setVersion(String version) {
    method getIconUrl (line 75) | public String getIconUrl() {
    method setIconUrl (line 79) | public void setIconUrl(String iconUrl) {
    method getCapabilities (line 83) | public AgentCapabilities getCapabilities() {
    method setCapabilities (line 87) | public void setCapabilities(AgentCapabilities capabilities) {
    method getSkills (line 91) | public List<AgentSkill> getSkills() {
    method setSkills (line 95) | public void setSkills(List<AgentSkill> skills) {
    method equals (line 99) | @Override
    method hashCode (line 114) | @Override

FILE: api/src/main/java/com/alibaba/nacos/api/ai/model/a2a/AgentCardDetailInfo.java
  class AgentCardDetailInfo (line 26) | public class AgentCardDetailInfo extends AgentCard {
    method getRegistrationType (line 32) | public String getRegistrationType() {
    method setRegistrationType (line 36) | public void setRegistrationType(String registrationType) {
    method isLatestVersion (line 40) | public Boolean isLatestVersion() {
    method setLatestVersion (line 44) | public void setLatestVersion(Boolean latestVersion) {

FILE: api/src/main/java/com/alibaba/nacos/api/ai/model/a2a/AgentCardVersionInfo.java
  class AgentCardVersionInfo (line 28) | public class AgentCardVersionInfo extends AgentCardBasicInfo {
    method getLatestPublishedVersion (line 36) | public String getLatestPublishedVersion() {
    method setLatestPublishedVersion (line 40) | public void setLatestPublishedVersion(String latestPublishedVersion) {
    method getVersionDetails (line 44) | public List<AgentVersionDetail> getVersionDetails() {
    method setVersionDetails (line 48) | public void setVersionDetails(List<AgentVersionDetail> versionDetails) {
    method getRegistrationType (line 52) | public String getRegistrationType() {
    method setRegistrationType (line 56) | public void setRegistrationType(String registrationType) {
    method equals (line 60) | @Override
    method hashCode (line 73) | @Override

FILE: api/src/main/java/com/alibaba/nacos/api/ai/model/a2a/AgentEndpoint.java
  class AgentEndpoint (line 33) | public class AgentEndpoint {
    method getAddress (line 70) | public String getAddress() {
    method setAddress (line 74) | public void setAddress(String address) {
    method getPort (line 78) | public int getPort() {
    method setPort (line 82) | public void setPort(int port) {
    method getTransport (line 86) | public String getTransport() {
    method setTransport (line 90) | public void setTransport(String transport) {
    method getPath (line 94) | public String getPath() {
    method setPath (line 98) | public void setPath(String path) {
    method isSupportTls (line 102) | public boolean isSupportTls() {
    method setSupportTls (line 106) | public void setSupportTls(boolean supportTls) {
    method getVersion (line 110) | public String getVersion() {
    method setVersion (line 114) | public void setVersion(String version) {
    method getProtocol (line 118) | public String getProtocol() {
    method setProtocol (line 122) | public void setProtocol(String protocol) {
    method getQuery (line 126) | public String getQuery() {
    method setQuery (line 130) | public void setQuery(String query) {
    method simpleEquals (line 140) | public boolean simpleEquals(AgentEndpoint endpoint) {
    method equals (line 144) | @Override
    method hashCode (line 159) | @Override
    method toString (line 164) | @Override

FILE: api/src/main/java/com/alibaba/nacos/api/ai/model/a2a/AgentExtension.java
  class AgentExtension (line 28) | public class AgentExtension {
    method getUri (line 38) | public String getUri() {
    method setUri (line 42) | public void setUri(String uri) {
    method getDescription (line 46) | public String getDescription() {
    method setDescription (line 50) | public void setDescription(String description) {
    method getRequired (line 54) | public Boolean getRequired() {
    method setRequired (line 58) | public void setRequired(Boolean required) {
    method getParams (line 62) | public Map<String, Object> getParams() {
    method setParams (line 66) | public void setParams(Map<String, Object> params) {
    method equals (line 70) | @Override
    method hashCode (line 80) | @Override

FILE: api/src/main/java/com/alibaba/nacos/api/ai/model/a2a/AgentInterface.java
  class AgentInterface (line 27) | public class AgentInterface {
    method getUrl (line 33) | public String getUrl() {
    method setUrl (line 37) | public void setUrl(String url) {
    method getTransport (line 41) | public String getTransport() {
    method setTransport (line 45) | public void setTransport(String transport) {
    method equals (line 49) | @Override
    method hashCode (line 58) | @Override

FILE: api/src/main/java/com/alibaba/nacos/api/ai/model/a2a/AgentProvider.java
  class AgentProvider (line 27) | public class AgentProvider {
    method getOrganization (line 33) | public String getOrganization() {
    method setOrganization (line 37) | public void setOrganization(String organization) {
    method getUrl (line 41) | public String getUrl() {
    method setUrl (line 45) | public void setUrl(String url) {
    method equals (line 49) | @Override
    method hashCode (line 58) | @Override

FILE: api/src/main/java/com/alibaba/nacos/api/ai/model/a2a/AgentSkill.java
  class AgentSkill (line 28) | public class AgentSkill {
    method getId (line 44) | public String getId() {
    method setId (line 48) | public void setId(String id) {
    method getName (line 52) | public String getName() {
    method setName (line 56) | public void setName(String name) {
    method getDescription (line 60) | public String getDescription() {
    method setDescription (line 64) | public void setDescription(String description) {
    method getTags (line 68) | public List<String> getTags() {
    method setTags (line 72) | public void setTags(List<String> tags) {
    method getExamples (line 76) | public List<String> getExamples() {
    method setExamples (line 80) | public void setExamples(List<String> examples) {
    method getInputModes (line 84) | public List<String> getInputModes() {
    method setInputModes (line 88) | public void setInputModes(List<String> inputModes) {
    method getOutputModes (line 92) | public List<String> getOutputModes() {
    method setOutputModes (line 96) | public void setOutputModes(List<String> outputModes) {
    method equals (line 100) | @Override
    method hashCode (line 111) | @Override

FILE: api/src/main/java/com/alibaba/nacos/api/ai/model/a2a/AgentVersionDetail.java
  class AgentVersionDetail (line 27) | public class AgentVersionDetail {
    method getVersion (line 37) | public String getVersion() {
    method setVersion (line 41) | public void setVersion(String version) {
    method getCreatedAt (line 45) | public String getCreatedAt() {
    method setCreatedAt (line 49) | public void setCreatedAt(String createdAt) {
    method getUpdatedAt (line 53) | public String getUpdatedAt() {
    method setUpdatedAt (line 57) | public void setUpdatedAt(String updatedAt) {
    method isLatest (line 61) | public boolean isLatest() {
    method setLatest (line 65) | public void setLatest(boolean latest) {
    method equals (line 69) | @Override
    method hashCode (line 79) | @Override

FILE: api/src/main/java/com/alibaba/nacos/api/ai/model/a2a/SecurityScheme.java
  class SecurityScheme (line 27) | public class SecurityScheme extends HashMap<String, Object> {
    method SecurityScheme (line 31) | public SecurityScheme() {

FILE: api/src/main/java/com/alibaba/nacos/api/ai/model/mcp/EncryptObject.java
  class EncryptObject (line 27) | public class EncryptObject implements Serializable {
    method getData (line 41) | public String getData() {
    method setData (line 45) | public void setData(String data) {
    method getEncryptInfo (line 49) | public Map<String, String> getEncryptInfo() {
    method setEncryptInfo (line 53) | public void setEncryptInfo(Map<String, String> encryptInfo) {

FILE: api/src/main/java/com/alibaba/nacos/api/ai/model/mcp/FrontEndpointConfig.java
  class FrontEndpointConfig (line 30) | public class FrontEndpointConfig {
    method getType (line 52) | public String getType() {
    method setType (line 56) | public void setType(String type) {
    method getProtocol (line 60) | public String getProtocol() {
    method setProtocol (line 64) | public void setProtocol(String protocol) {
    method getEndpointType (line 68) | public String getEndpointType() {
    method setEndpointType (line 72) | public void setEndpointType(String endpointType) {
    method getEndpointData (line 76) | public Object getEndpointData() {
    method setEndpointData (line 80) | public void setEndpointData(Object endpointData) {
    method getPath (line 84) | public String getPath() {
    method setPath (line 88) | public void setPath(String path) {
    method getHeaders (line 92) | public List<KeyValueInput> getHeaders() {
    method setHeaders (line 96) | public void setHeaders(List<KeyValueInput> headers) {

FILE: api/src/main/java/com/alibaba/nacos/api/ai/model/mcp/McpCapability.java
  type McpCapability (line 24) | public enum McpCapability {

FILE: api/src/main/java/com/alibaba/nacos/api/ai/model/mcp/McpEndpointInfo.java
  class McpEndpointInfo (line 28) | public class McpEndpointInfo {
    method getAddress (line 43) | public String getAddress() {
    method setAddress (line 47) | public void setAddress(String address) {
    method getPort (line 51) | public int getPort() {
    method setPort (line 55) | public void setPort(int port) {
    method getPath (line 59) | public String getPath() {
    method setPath (line 63) | public void setPath(String path) {
    method getProtocol (line 67) | public String getProtocol() {
    method setProtocol (line 71) | public void setProtocol(String protocol) {
    method getHeaders (line 75) | public List<KeyValueInput> getHeaders() {
    method setHeaders (line 79) | public void setHeaders(List<KeyValueInput> headers) {

FILE: api/src/main/java/com/alibaba/nacos/api/ai/model/mcp/McpEndpointSpec.java
  class McpEndpointSpec (line 29) | public class McpEndpointSpec {
    method getType (line 50) | public String getType() {
    method setType (line 54) | public void setType(String type) {
    method getData (line 58) | public Map<String, String> getData() {
    method setData (line 62) | public void setData(Map<String, String> data) {

FILE: api/src/main/java/com/alibaba/nacos/api/ai/model/mcp/McpServerBasicInfo.java
  class McpServerBasicInfo (line 33) | public class McpServerBasicInfo {
    method getName (line 90) | public String getName() {
    method setName (line 94) | public void setName(String name) {
    method getProtocol (line 98) | public String getProtocol() {
    method setProtocol (line 102) | public void setProtocol(String protocol) {
    method getDescription (line 106) | public String getDescription() {
    method setDescription (line 110) | public void setDescription(String description) {
    method getRemoteServerConfig (line 114) | public McpServerRemoteServiceConfig getRemoteServerConfig() {
    method setRemoteServerConfig (line 118) | public void setRemoteServerConfig(McpServerRemoteServiceConfig remoteS...
    method getLocalServerConfig (line 122) | public Map<String, Object> getLocalServerConfig() {
    method setLocalServerConfig (line 126) | public void setLocalServerConfig(Map<String, Object> localServerConfig) {
    method getFrontProtocol (line 130) | public String getFrontProtocol() {
    method setFrontProtocol (line 134) | public void setFrontProtocol(String frontProtocol) {
    method isEnabled (line 138) | public boolean isEnabled() {
    method setEnabled (line 142) | public void setEnabled(boolean enabled) {
    method getCapabilities (line 146) | public List<McpCapability> getCapabilities() {
    method setCapabilities (line 150) | public void setCapabilities(List<McpCapability> capabilities) {
    method getVersionDetail (line 154) | public ServerVersionDetail getVersionDetail() {
    method setVersionDetail (line 158) | public void setVersionDetail(ServerVersionDetail versionDetail) {
    method getId (line 162) | public String getId() {
    method setId (line 166) | public void setId(String id) {
    method getRepository (line 170) | public Repository getRepository() {
    method setRepository (line 174) | public void setRepository(Repository repository) {
    method getVersion (line 178) | public String getVersion() {
    method setVersion (line 182) | public void setVersion(String version) {
    method getPackages (line 186) | public List<Package> getPackages() {
    method setPackages (line 190) | public void setPackages(List<Package> packages) {
    method getStatus (line 194) | public String getStatus() {
    method setStatus (line 198) | public void setStatus(String status) {
    method getIcons (line 202) | public List<Icon> getIcons() {
    method setIcons (line 206) | public void setIcons(List<Icon> icons) {
    method getWebsiteUrl (line 210) | public String getWebsiteUrl() {
    method setWebsiteUrl (line 214) | public void setWebsiteUrl(String websiteUrl) {
    method getNamespaceId (line 218) | public String getNamespaceId() {
    method setNamespaceId (line 222) | public void setNamespaceId(String namespaceId) {

FILE: api/src/main/java/com/alibaba/nacos/api/ai/model/mcp/McpServerDetailInfo.java
  class McpServerDetailInfo (line 28) | public class McpServerDetailInfo extends McpServerBasicInfo {
    method getBackendEndpoints (line 38) | public List<McpEndpointInfo> getBackendEndpoints() {
    method setBackendEndpoints (line 42) | public void setBackendEndpoints(List<McpEndpointInfo> backendEndpoints) {
    method getFrontendEndpoints (line 46) | public List<McpEndpointInfo> getFrontendEndpoints() {
    method setFrontendEndpoints (line 50) | public void setFrontendEndpoints(List<McpEndpointInfo> frontendEndpoin...
    method getToolSpec (line 54) | public McpToolSpecification getToolSpec() {
    method setToolSpec (line 58) | public void setToolSpec(McpToolSpecification toolSpec) {
    method getAllVersions (line 62) | public List<ServerVersionDetail> getAllVersions() {
    method setAllVersions (line 66) | public void setAllVersions(List<ServerVersionDetail> allVersions) {

FILE: api/src/main/java/com/alibaba/nacos/api/ai/model/mcp/McpServerImportRequest.java
  class McpServerImportRequest (line 26) | public class McpServerImportRequest implements Serializable {
    method getImportType (line 80) | public String getImportType() {
    method setImportType (line 84) | public void setImportType(String importType) {
    method getData (line 88) | public String getData() {
    method setData (line 92) | public void setData(String data) {
    method isOverrideExisting (line 96) | public boolean isOverrideExisting() {
    method setOverrideExisting (line 100) | public void setOverrideExisting(boolean overrideExisting) {
    method isValidateOnly (line 104) | public boolean isValidateOnly() {
    method setValidateOnly (line 108) | public void setValidateOnly(boolean validateOnly) {
    method getSelectedServers (line 112) | public String[] getSelectedServers() {
    method setSelectedServers (line 116) | public void setSelectedServers(String[] selectedServers) {
    method getCursor (line 120) | public String getCursor() {
    method setCursor (line 124) | public void setCursor(String cursor) {
    method getLimit (line 128) | public Integer getLimit() {
    method setLimit (line 132) | public void setLimit(Integer limit) {
    method getSearch (line 136) | public String getSearch() {
    method setSearch (line 140) | public void setSearch(String search) {
    method isSkipInvalid (line 144) | public boolean isSkipInvalid() {
    method setSkipInvalid (line 148) | public void setSkipInvalid(boolean skipInvalid) {

FILE: api/src/main/java/com/alibaba/nacos/api/ai/model/mcp/McpServerImportResponse.java
  class McpServerImportResponse (line 27) | public class McpServerImportResponse implements Serializable {
    method isSuccess (line 66) | public boolean isSuccess() {
    method setSuccess (line 70) | public void setSuccess(boolean success) {
    method getTotalCount (line 74) | public int getTotalCount() {
    method setTotalCount (line 78) | public void setTotalCount(int totalCount) {
    method getSuccessCount (line 82) | public int getSuccessCount() {
    method setSuccessCount (line 86) | public void setSuccessCount(int successCount) {
    method getFailedCount (line 90) | public int getFailedCount() {
    method setFailedCount (line 94) | public void setFailedCount(int failedCount) {
    method getSkippedCount (line 98) | public int getSkippedCount() {
    method setSkippedCount (line 102) | public void setSkippedCount(int skippedCount) {
    method getResults (line 106) | public List<McpServerImportResult> getResults() {
    method setResults (line 110) | public void setResults(List<McpServerImportResult> results) {
    method getErrorMessage (line 114) | public String getErrorMessage() {
    method setErrorMessage (line 118) | public void setErrorMessage(String errorMessage) {

FILE: api/src/main/java/com/alibaba/nacos/api/ai/model/mcp/McpServerImportResult.java
  class McpServerImportResult (line 26) | public class McpServerImportResult implements Serializable {
    method getServerName (line 55) | public String getServerName() {
    method setServerName (line 59) | public void setServerName(String serverName) {
    method getServerId (line 63) | public String getServerId() {
    method setServerId (line 67) | public void setServerId(String serverId) {
    method getStatus (line 71) | public String getStatus() {
    method setStatus (line 75) | public void setStatus(String status) {
    method getErrorMessage (line 79) | public String getErrorMessage() {
    method setErrorMessage (line 83) | public void setErrorMessage(String errorMessage) {
    method getConflictType (line 87) | public String getConflictType() {
    method setConflictType (line 91) | public void setConflictType(String conflictType) {

FILE: api/src/main/java/com/alibaba/nacos/api/ai/model/mcp/McpServerImportValidationResult.java
  class McpServerImportValidationResult (line 27) | public class McpServerImportValidationResult implements Serializable {
    method isValid (line 76) | public boolean isValid() {
    method setValid (line 80) | public void setValid(boolean valid) {
    method getTotalCount (line 84) | public int getTotalCount() {
    method setTotalCount (line 88) | public void setTotalCount(int totalCount) {
    method getValidCount (line 92) | public int getValidCount() {
    method setValidCount (line 96) | public void setValidCount(int validCount) {
    method getInvalidCount (line 100) | public int getInvalidCount() {
    method setInvalidCount (line 104) | public void setInvalidCount(int invalidCount) {
    method getDuplicateCount (line 108) | public int getDuplicateCount() {
    method setDuplicateCount (line 112) | public void setDuplicateCount(int duplicateCount) {
    method getServers (line 116) | public List<McpServerValidationItem> getServers() {
    method setServers (line 120) | public void setServers(List<McpServerValidationItem> servers) {
    method getErrors (line 124) | public List<String> getErrors() {
    method setErrors (line 128) | public void setErrors(List<String> errors) {
    method getNextCursor (line 132) | public String getNextCursor() {
    method setNextCursor (line 136) | public void setNextCursor(String nextCursor) {
    method isHasMore (line 140) | public boolean isHasMore() {
    method setHasMore (line 144) | public void setHasMore(boolean hasMore) {

FILE: api/src/main/java/com/alibaba/nacos/api/ai/model/mcp/McpServerRemoteServiceConfig.java
  class McpServerRemoteServiceConfig (line 26) | public class McpServerRemoteServiceConfig {
    method getServiceRef (line 34) | public McpServiceRef getServiceRef() {
    method setServiceRef (line 38) | public void setServiceRef(McpServiceRef serviceRef) {
    method getExportPath (line 42) | public String getExportPath() {
    method setExportPath (line 46) | public void setExportPath(String exportPath) {
    method getFrontEndpointConfigList (line 50) | public List<FrontEndpointConfig> getFrontEndpointConfigList() {
    method setFrontEndpointConfigList (line 54) | public void setFrontEndpointConfigList(List<FrontEndpointConfig> front...

FILE: api/src/main/java/com/alibaba/nacos/api/ai/model/mcp/McpServerValidationItem.java
  class McpServerValidationItem (line 27) | public class McpServerValidationItem implements Serializable {
    method getServerName (line 66) | public String getServerName() {
    method setServerName (line 70) | public void setServerName(String serverName) {
    method getServerId (line 74) | public String getServerId() {
    method setServerId (line 78) | public void setServerId(String serverId) {
    method getStatus (line 82) | public String getStatus() {
    method setStatus (line 86) | public void setStatus(String status) {
    method getErrors (line 90) | public List<String> getErrors() {
    method setErrors (line 94) | public void setErrors(List<String> errors) {
    method isExists (line 98) | public boolean isExists() {
    method setExists (line 102) | public void setExists(boolean exists) {
    method getServer (line 106) | public McpServerDetailInfo getServer() {
    method setServer (line 110) | public void setServer(McpServerDetailInfo server) {
    method isSelected (line 114) | public boolean isSelected() {
    method setSelected (line 118) | public void setSelected(boolean selected) {

FILE: api/src/main/java/com/alibaba/nacos/api/ai/model/mcp/McpServerVersionInfo.java
  class McpServerVersionInfo (line 27) | @SuppressWarnings({"checkstyle:MethodName", "checkstyle:ParameterName", ...
    method getLatestPublishedVersion (line 34) | public String getLatestPublishedVersion() {
    method setLatestPublishedVersion (line 38) | public void setLatestPublishedVersion(String latestPublishedVersion) {
    method getVersionDetails (line 42) | public List<ServerVersionDetail> getVersionDetails() {
    method setVersions (line 46) | public void setVersions(List<ServerVersionDetail> versionDetails) {

FILE: api/src/main/java/com/alibaba/nacos/api/ai/model/mcp/McpServiceRef.java
  class McpServiceRef (line 24) | public class McpServiceRef {
    method getNamespaceId (line 34) | public String getNamespaceId() {
    method setNamespaceId (line 38) | public void setNamespaceId(String namespaceId) {
    method getGroupName (line 42) | public String getGroupName() {
    method setGroupName (line 46) | public void setGroupName(String groupName) {
    method getServiceName (line 50) | public String getServiceName() {
    method setServiceName (line 54) | public void setServiceName(String serviceName) {
    method setTransportProtocol (line 58) | public void setTransportProtocol(String transportProtocol) {
    method getTransportProtocol (line 62) | public String getTransportProtocol() {

FILE: api/src/main/java/com/alibaba/nacos/api/ai/model/mcp/McpTool.java
  class McpTool (line 28) | public class McpTool {
    method getName (line 49) | public String getName() {
    method setName (line 53) | public void setName(String name) {
    method getDescription (line 57) | public String getDescription() {
    method setDescription (line 61) | public void setDescription(String description) {
    method getInputSchema (line 65) | public Map<String, Object> getInputSchema() {
    method setInputSchema (line 69) | public void setInputSchema(Map<String, Object> inputSchema) {
    method getOutputSchema (line 73) | public Map<String, Object> getOutputSchema() {
    method setOutputSchema (line 77) | public void setOutputSchema(Map<String, Object> outputSchema) {
    method getMeta (line 81) | public Map<String, Object> getMeta() {
    method setMeta (line 85) | public void setMeta(Map<String, Object> meta) {
    method getAnnotations (line 89) | public McpToolAnnotations getAnnotations() {
    method setAnnotations (line 93) | public void setAnnotations(McpToolAnnotations annotations) {

FILE: api/src/main/java/com/alibaba/nacos/api/ai/model/mcp/McpToolAnnotations.java
  class McpToolAnnotations (line 31) | public class McpToolAnnotations {
    method getTitle (line 66) | public String getTitle() {
    method setTitle (line 70) | public void setTitle(String title) {
    method getReadOnlyHint (line 74) | public Boolean getReadOnlyHint() {
    method setReadOnlyHint (line 78) | public void setReadOnlyHint(Boolean readOnlyHint) {
    method getDestructiveHint (line 82) | public Boolean getDestructiveHint() {
    method setDestructiveHint (line 86) | public void setDestructiveHint(Boolean destructiveHint) {
    method getIdempotentHint (line 90) | public Boolean getIdempotentHint() {
    method setIdempotentHint (line 94) | public void setIdempotentHint(Boolean idempotentHint) {
    method getOpenWorldHint (line 98) | public Boolean getOpenWorldHint() {
    method setOpenWorldHint (line 102) | public void setOpenWorldHint(Boolean openWorldHint) {

FILE: api/src/main/java/com/alibaba/nacos/api/ai/model/mcp/McpToolMeta.java
  class McpToolMeta (line 26) | public class McpToolMeta {
    method getInvokeContext (line 34) | public Map<String, String> getInvokeContext() {
    method setInvokeContext (line 38) | public void setInvokeContext(Map<String, String> invokeContext) {
    method isEnabled (line 42) | public boolean isEnabled() {
    method setEnabled (line 46) | public void setEnabled(boolean enabled) {
    method getTemplates (line 50) | public Map<String, Object> getTemplates() {
    method setTemplates (line 54) | public void setTemplates(Map<String, Object> templates) {

FILE: api/src/main/java/com/alibaba/nacos/api/ai/model/mcp/McpToolSpecification.java
  class McpToolSpecification (line 30) | public class McpToolSpecification {
    method getSpecificationType (line 52) | public String getSpecificationType() {
    method setSpecificationType (line 56) | public void setSpecificationType(String specificationType) {
    method getEncryptData (line 60) | public EncryptObject getEncryptData() {
    method setEncryptData (line 64) | public void setEncryptData(EncryptObject encryptData) {
    method getTools (line 68) | public List<McpTool> getTools() {
    method setTools (line 72) | public void setTools(List<McpTool> tools) {
    method getToolsMeta (line 76) | public Map<String, McpToolMeta> getToolsMeta() {
    method setToolsMeta (line 80) | public void setToolsMeta(Map<String, McpToolMeta> toolsMeta) {
    method getSecuritySchemes (line 84) | public List<SecurityScheme> getSecuritySchemes() {
    method setSecuritySchemes (line 88) | public void setSecuritySchemes(List<SecurityScheme> securitySchemes) {
    method getExtensions (line 92) | public Map<String, Object> getExtensions() {
    method setExtensions (line 96) | public void setExtensions(Map<String, Object> extensions) {

FILE: api/src/main/java/com/alibaba/nacos/api/ai/model/mcp/SecurityScheme.java
  class SecurityScheme (line 9) | public class SecurityScheme {
    method getId (line 42) | public String getId() {
    method setId (line 46) | public void setId(String id) {
    method getType (line 50) | public String getType() {
    method setType (line 54) | public void setType(String type) {
    method getScheme (line 58) | public String getScheme() {
    method setScheme (line 62) | public void setScheme(String scheme) {
    method getIn (line 66) | public String getIn() {
    method setIn (line 70) | public void setIn(String in) {
    method getName (line 74) | public String getName() {
    method setName (line 78) | public void setName(String name) {
    method getDefaultCredential (line 82) | public String getDefaultCredential() {
    method setDefaultCredential (line 86) | public void setDefaultCredential(String defaultCredential) {

FILE: api/src/main/java/com/alibaba/nacos/api/ai/model/mcp/registry/Argument.java
  type Argument (line 28) | @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "type", defaultImpl...

FILE: api/src/main/java/com/alibaba/nacos/api/ai/model/mcp/registry/Icon.java
  class Icon (line 38) | @JsonInclude(JsonInclude.Include.NON_NULL)
    method getSrc (line 56) | public String getSrc() {
    method setSrc (line 65) | public void setSrc(String src) {
    method getMimeType (line 74) | public MimeType getMimeType() {
    method setMimeType (line 83) | public void setMimeType(MimeType mimeType) {
    method getSizes (line 92) | public List<String> getSizes() {
    method setSizes (line 101) | public void setSizes(List<String> sizes) {
    method getTheme (line 110) | public Theme getTheme() {
    method setTheme (line 119) | public void setTheme(Theme theme) {
    type MimeType (line 127) | public static enum MimeType {
      method MimeType (line 156) | MimeType(String value) {
      method getValue (line 165) | @JsonValue
      method fromValue (line 176) | @JsonCreator
    type Theme (line 191) | public static enum Theme {
      method Theme (line 208) | Theme(String value) {
      method getValue (line 217) | @JsonValue
      method fromValue (line 228) | @JsonCreator

FILE: api/src/main/java/com/alibaba/nacos/api/ai/model/mcp/registry/Input.java
  class Input (line 29) | @JsonInclude(JsonInclude.Include.NON_NULL)
    method getDescription (line 49) | public String getDescription() {
    method setDescription (line 53) | public void setDescription(String description) {
    method getIsRequired (line 57) | public Boolean getIsRequired() {
    method setIsRequired (line 61) | public void setIsRequired(Boolean isRequired) {
    method getFormat (line 65) | public String getFormat() {
    method setFormat (line 69) | public void setFormat(String format) {
    method getValue (line 73) | public String getValue() {
    method setValue (line 77) | public void setValue(String value) {
    method getIsSecret (line 81) | public Boolean getIsSecret() {
    method setIsSecret (line 85) | public void setIsSecret(Boolean isSecret) {
    method getDefaultValue (line 89) | public String getDefaultValue() {
    method setDefaultValue (line 93) | public void setDefaultValue(String defaultValue) {
    method getChoices (line 97) | public List<String> getChoices() {
    method setChoices (line 101) | public void setChoices(List<String> choices) {
    method getPlaceholder (line 110) | public String getPlaceholder() {
    method setPlaceholder (line 119) | public void setPlaceholder(String placeholder) {

FILE: api/src/main/java/com/alibaba/nacos/api/ai/model/mcp/registry/InputWithVariables.java
  class InputWithVariables (line 28) | @JsonIgnoreProperties(ignoreUnknown = true)
    method getVariables (line 33) | public Map<String, Input> getVariables() {
    method setVariables (line 37) | public void setVariables(Map<String, Input> variables) {

FILE: api/src/main/java/com/alibaba/nacos/api/ai/model/mcp/registry/KeyValueInput.java
  class KeyValueInput (line 26) | @JsonIgnoreProperties(ignoreUnknown = true)
    method getName (line 31) | public String getName() {
    method setName (line 35) | public void setName(String name) {

FILE: api/src/main/java/com/alibaba/nacos/api/ai/model/mcp/registry/McpErrorResponse.java
  class McpErrorResponse (line 26) | @JsonIgnoreProperties(ignoreUnknown = true)
    method getError (line 30) | public String getError() {
    method setError (line 34) | public void setError(String error) {

FILE: api/src/main/java/com/alibaba/nacos/api/ai/model/mcp/registry/McpRegistryServerDetail.java
  class McpRegistryServerDetail (line 34) | @JsonInclude(JsonInclude.Include.NON_NULL)
    class Meta (line 62) | @JsonInclude(JsonInclude.Include.NON_NULL)
      method getPublisherMeta (line 70) | public Map<String, Object> getPublisherMeta() {
      method setPublisherMeta (line 74) | public void setPublisherMeta(Map<String, Object> publisherMeta) {
      method getExtensionMeta (line 78) | @JsonAnyGetter
    method getSchema (line 84) | public String getSchema() {
    method setSchema (line 88) | public void setSchema(String schema) {
    method getPackages (line 92) | public List<Package> getPackages() {
    method setPackages (line 96) | public void setPackages(List<Package> packages) {
    method getRemotes (line 100) | public List<Remote> getRemotes() {
    method setRemotes (line 104) | public void setRemotes(List<Remote> remotes) {
    method getMeta (line 108) | public Meta getMeta() {
    method setMeta (line 112) | public void setMeta(Meta meta) {
    method getName (line 116) | public String getName() {
    method setName (line 120) | public void setName(String name) {
    method getDescription (line 124) | public String getDescription() {
    method setDescription (line 128) | public void setDescription(String description) {
    method getTitle (line 132) | public String getTitle() {
    method setTitle (line 136) | public void setTitle(String title) {
    method getRepository (line 140) | public Repository getRepository() {
    method setRepository (line 144) | public void setRepository(Repository repository) {
    method getVersion (line 148) | public String getVersion() {
    method setVersion (line 152) | public void setVersion(String version) {
    method getWebsiteUrl (line 156) | public String getWebsiteUrl() {
    method setWebsiteUrl (line 160) | public void setWebsiteUrl(String websiteUrl) {
    method getIcons (line 164) | public List<Icon> getIcons() {
    method setIcons (line 168) | public void setIcons(List<Icon> icons) {

FILE: api/src/main/java/com/alibaba/nacos/api/ai/model/mcp/registry/McpRegistryServerList.java
  class McpRegistryServerList (line 31) | @JsonInclude(JsonInclude.Include.NON_NULL)
    method getServers (line 40) | public List<ServerResponse> getServers() {
    method setServers (line 44) | public void setServers(List<ServerResponse> servers) {
    method getMetadata (line 48) | public Metadata getMetadata() {
    method setMetadata (line 52) | public void setMetadata(Metadata metadata) {
    class Metadata (line 56) | @JsonInclude(JsonInclude.Include.NON_NULL)
      method Metadata (line 64) | public Metadata() {
      method Metadata (line 67) | public Metadata(String nextCursor, Integer count) {
      method getNextCursor (line 72) | public String getNextCursor() {
      method setNextCursor (line 76) | public void setNextCursor(String nextCursor) {
      method getCount (line 80) | public Integer getCount() {
      method setCount (line 84) | public void setCount(Integer count) {

FILE: api/src/main/java/com/alibaba/nacos/api/ai/model/mcp/registry/McpServerStatusEnum.java
  type McpServerStatusEnum (line 24) | public enum McpServerStatusEnum {
    method McpServerStatusEnum (line 46) | McpServerStatusEnum(String name) {
    method getName (line 50) | public String getName() {
    method parseStatus (line 60) | public static McpServerStatusEnum parseStatus(String status) {

FILE: api/src/main/java/com/alibaba/nacos/api/ai/model/mcp/registry/NamedArgument.java
  class NamedArgument (line 28) | @JsonTypeName("named")
    method getType (line 46) | public String getType() {
    method setType (line 55) | public void setType(String type) {
    method getName (line 64) | public String getName() {
    method setName (line 73) | public void setName(String name) {
    method getIsRepeated (line 82) | public Boolean getIsRepeated() {
    method setIsRepeated (line 91) | public void setIsRepeated(Boolean isRepeated) {
    method getValueHint (line 100) | public String getValueHint() {
    method setValueHint (line 109) | public void setValueHint(String valueHint) {

FILE: api/src/main/java/com/alibaba/nacos/api/ai/model/mcp/registry/OfficialMeta.java
  class OfficialMeta (line 27) | @JsonInclude(JsonInclude.Include.NON_NULL)
    method getPublishedAt (line 44) | public String getPublishedAt() {
    method setPublishedAt (line 53) | public void setPublishedAt(String publishedAt) {
    method getUpdatedAt (line 62) | public String getUpdatedAt() {
    method setUpdatedAt (line 71) | public void setUpdatedAt(String updatedAt) {
    method getIsLatest (line 80) | public Boolean getIsLatest() {
    method setIsLatest (line 89) | public void setIsLatest(Boolean isLatest) {
    method getStatus (line 98) | public String getStatus() {
    method setStatus (line 107) | public void setStatus(String status) {

FILE: api/src/main/java/com/alibaba/nacos/api/ai/model/mcp/registry/Package.java
  class Package (line 30) | @JsonIgnoreProperties(ignoreUnknown = true)
    method getRegistryType (line 68) | public String getRegistryType() {
    method setRegistryType (line 77) | public void setRegistryType(String registryType) {
    method getRegistryBaseUrl (line 86) | public String getRegistryBaseUrl() {
    method setRegistryBaseUrl (line 95) | public void setRegistryBaseUrl(String registryBaseUrl) {
    method getIdentifier (line 104) | public String getIdentifier() {
    method setIdentifier (line 113) | public void setIdentifier(String identifier) {
    method getVersion (line 122) | public String getVersion() {
    method setVersion (line 131) | public void setVersion(String version) {
    method getFileSha256 (line 140) | public String getFileSha256() {
    method setFileSha256 (line 149) | public void setFileSha256(String fileSha256) {
    method getRuntimeHint (line 158) | public String getRuntimeHint() {
    method setRuntimeHint (line 167) | public void setRuntimeHint(String runtimeHint) {
    method getRuntimeArguments (line 176) | public List<Argument> getRuntimeArguments() {
    method setRuntimeArguments (line 185) | public void setRuntimeArguments(List<Argument> runtimeArguments) {
    method getPackageArguments (line 194) | public List<Argument> getPackageArguments() {
    method setPackageArguments (line 203) | public void setPackageArguments(List<Argument> packageArguments) {
    method getEnvironmentVariables (line 212) | public List<KeyValueInput> getEnvironmentVariables() {
    method setEnvironmentVariables (line 221) | public void setEnvironmentVariables(List<KeyValueInput> environmentVar...
    method getTransport (line 230) | public Object getTransport() {
    method setTransport (line 239) | public void setTransport(Object transport) {

FILE: api/src/main/java/com/alibaba/nacos/api/ai/model/mcp/registry/PositionalArgument.java
  class PositionalArgument (line 28) | @JsonTypeName("positional")
    method getType (line 44) | public String getType() {
    method setType (line 53) | public void setType(String type) {
    method getValueHint (line 62) | public String getValueHint() {
    method setValueHint (line 71) | public void setValueHint(String valueHint) {
    method getIsRepeated (line 80) | public Boolean getIsRepeated() {
    method setIsRepeated (line 89) | public void setIsRepeated(Boolean isRepeated) {

FILE: api/src/main/java/com/alibaba/nacos/api/ai/model/mcp/registry/Remote.java
  class Remote (line 29) | @JsonInclude(JsonInclude.Include.NON_NULL)
    method getType (line 39) | public String getType() {
    method setType (line 43) | public void setType(String type) {
    method getUrl (line 47) | public String getUrl() {
    method setUrl (line 51) | public void setUrl(String url) {
    method getHeaders (line 55) | public List<KeyValueInput> getHeaders() {
    method setHeaders (line 59) | public void setHeaders(List<KeyValueInput> headers) {

FILE: api/src/main/java/com/alibaba/nacos/api/ai/model/mcp/registry/Repository.java
  class Repository (line 26) | @JsonIgnoreProperties(ignoreUnknown = true)
    method getUrl (line 37) | public String getUrl() {
    method setUrl (line 41) | public void setUrl(String url) {
    method getSource (line 45) | public String getSource() {
    method setSource (line 49) | public void setSource(String source) {
    method getId (line 53) | public String getId() {
    method setId (line 57) | public void setId(String id) {
    method getSubfolder (line 61) | public String getSubfolder() {
    method setSubfolder (line 65) | public void setSubfolder(String subfolder) {

FILE: api/src/main/java/com/alibaba/nacos/api/ai/model/mcp/registry/ServerResponse.java
  class ServerResponse (line 33) | @JsonIgnoreProperties(ignoreUnknown = true)
    method getServer (line 41) | public McpRegistryServerDetail getServer() {
    method setServer (line 45) | public void setServer(McpRegistryServerDetail server) {
    method getMeta (line 49) | public Meta getMeta() {
    method setMeta (line 53) | public void setMeta(Meta meta) {
    class Meta (line 62) | @JsonInclude(JsonInclude.Include.NON_NULL)
      method getOfficial (line 71) | public OfficialMeta getOfficial() {
      method setOfficial (line 75) | public void setOfficial(OfficialMeta official) {
      method getAdditionalMetadata (line 79) | @JsonAnyGetter

FILE: api/src/main/java/com/alibaba/nacos/api/ai/model/mcp/registry/ServerVersionDetail.java
  class ServerVersionDetail (line 26) | @SuppressWarnings({"checkstyle:MethodName", "checkstyle:ParameterName", ...
    method getRelease_date (line 36) | public String getRelease_date() {
    method getVersion (line 40) | public String getVersion() {
    method setRelease_date (line 44) | public void setRelease_date(String releaseDate) {
    method setVersion (line 48) | public void setVersion(String version) {
    method setIs_latest (line 52) | public void setIs_latest(Boolean is_latest) {
    method getIs_latest (line 56) | public Boolean getIs_latest() {

FILE: api/src/main/java/com/alibaba/nacos/api/ai/model/mcp/registry/SseTransport.java
  class SseTransport (line 31) | @JsonTypeName("sse")
    method getType (line 42) | public String getType() {
    method setType (line 46) | public void setType(String type) {
    method getUrl (line 50) | public String getUrl() {
    method setUrl (line 54) | public void setUrl(String url) {
    method getHeaders (line 58) | public List<KeyValueInput> getHeaders() {
    method setHeaders (line 62) | public void setHeaders(List<KeyValueInput> headers) {

FILE: api/src/main/java/com/alibaba/nacos/api/ai/model/mcp/registry/StdioTransport.java
  class StdioTransport (line 28) | @JsonTypeName("stdio")
    method getType (line 34) | public String getType() {
    method setType (line 38) | public void setType(String type) {

FILE: api/src/main/java/com/alibaba/nacos/api/ai/model/mcp/registry/StreamableHttpTransport.java
  class StreamableHttpTransport (line 31) | @JsonTypeName("streamable-http")
    method getType (line 42) | public String getType() {
    method setType (line 46) | public void setType(String type) {
    method getUrl (line 50) | public String getUrl() {
    method setUrl (line 54) | public void setUrl(String url) {
    method getHeaders (line 58) | public List<KeyValueInput> getHeaders() {
    method setHeaders (line 62) | public void setHeaders(List<KeyValueInput> headers) {

FILE: api/src/main/java/com/alibaba/nacos/api/ai/model/prompt/Prompt.java
  class Prompt (line 32) | public class Prompt implements Serializable {
    method Prompt (line 61) | public Prompt() {
    method Prompt (line 64) | public Prompt(String promptKey, String version, String template) {
    method getPromptKey (line 70) | public String getPromptKey() {
    method setPromptKey (line 74) | public void setPromptKey(String promptKey) {
    method getVersion (line 78) | public String getVersion() {
    method setVersion (line 82) | public void setVersion(String version) {
    method getTemplate (line 86) | public String getTemplate() {
    method setTemplate (line 90) | public void setTemplate(String template) {
    method getMd5 (line 94) | public String getMd5() {
    method setMd5 (line 98) | public void setMd5(String md5) {
    method getVariables (line 102) | public List<PromptVariable> getVariables() {
    method setVariables (line 106) | public void setVariables(List<PromptVariable> variables) {
    method render (line 131) | public String render(Map<String, String> userVariables) {
    method toString (line 161) | @Override

FILE: api/src/main/java/com/alibaba/nacos/api/ai/model/prompt/PromptDescriptor.java
  class PromptDescriptor (line 28) | public class PromptDescriptor implements Serializable {
    method getSchemaVersion (line 42) | public int getSchemaVersion() {
    method setSchemaVersion (line 46) | public void setSchemaVersion(int schemaVersion) {
    method getPromptKey (line 50) | public String getPromptKey() {
    method setPromptKey (line 54) | public void setPromptKey(String promptKey) {
    method getDescription (line 58) | public String getDescription() {
    method setDescription (line 62) | public void setDescription(String description) {
    method getBizTags (line 66) | public List<String> getBizTags() {
    method setBizTags (line 70) | public void setBizTags(List<String> bizTags) {
    method getGmtModified (line 74) | public Long getGmtModified() {
    method setGmtModified (line 78) | public void setGmtModified(Long gmtModified) {

FILE: api/src/main/java/com/alibaba/nacos/api/ai/model/prompt/PromptLabelVersionMapping.java
  class PromptLabelVersionMapping (line 30) | public class PromptLabelVersionMapping implements Serializable {
    method getSchemaVersion (line 46) | public int getSchemaVersion() {
    method setSchemaVersion (line 50) | public void setSchemaVersion(int schemaVersion) {
    method getPromptKey (line 54) | public String getPromptKey() {
    method setPromptKey (line 58) | public void setPromptKey(String promptKey) {
    method getVersions (line 62) | public List<String> getVersions() {
    method setVersions (line 66) | public void setVersions(List<String> versions) {
    method getLabels (line 70) | public Map<String, String> getLabels() {
    method setLabels (line 74) | public void setLabels(Map<String, String> labels) {
    method getLatestVersion (line 78) | public String getLatestVersion() {
    method setLatestVersion (line 82) | public void setLatestVersion(String latestVersion) {
    method getGmtModified (line 86) | public Long getGmtModified() {
    method setGmtModified (line 90) | public void setGmtModified(Long gmtModified) {

FILE: api/src/main/java/com/alibaba/nacos/api/ai/model/prompt/PromptMetaInfo.java
  class PromptMetaInfo (line 29) | public class PromptMetaInfo extends PromptMetaSummary {
    method getVersions (line 37) | public List<String> getVersions() {
    method setVersions (line 41) | public void setVersions(List<String> versions) {
    method getLabels (line 45) | public Map<String, String> getLabels() {
    method setLabels (line 49) | public void setLabels(Map<String, String> labels) {

FILE: api/src/main/java/com/alibaba/nacos/api/ai/model/prompt/PromptMetaSummary.java
  class PromptMetaSummary (line 28) | public class PromptMetaSummary implements Serializable {
    method getSchemaVersion (line 44) | public int getSchemaVersion() {
    method setSchemaVersion (line 48) | public void setSchemaVersion(int schemaVersion) {
    method getPromptKey (line 52) | public String getPromptKey() {
    method setPromptKey (line 56) | public void setPromptKey(String promptKey) {
    method getDescription (line 60) | public String getDescription() {
    method setDescription (line 64) | public void setDescription(String description) {
    method getBizTags (line 68) | public List<String> getBizTags() {
    method setBizTags (line 72) | public void setBizTags(List<String> bizTags) {
    method getLatestVersion (line 76) | public String getLatestVersion() {
    method setLatestVersion (line 80) | public void setLatestVersion(String latestVersion) {
    method getGmtModified (line 84) | public Long getGmtModified() {
    method setGmtModified (line 88) | public void setGmtModified(Long gmtModified) {

FILE: api/src/main/java/com/alibaba/nacos/api/ai/model/prompt/PromptVariable.java
  class PromptVariable (line 29) | public class PromptVariable implements Serializable {
    method PromptVariable (line 48) | public PromptVariable() {
    method PromptVariable (line 51) | public PromptVariable(String name, String defaultValue, String descrip...
    method getName (line 57) | public String getName() {
    method setName (line 61) | public void setName(String name) {
    method getDefaultValue (line 65) | public String getDefaultValue() {
    method setDefaultValue (line 69) | public void setDefaultValue(String defaultValue) {
    method getDescription (line 73) | public String getDescription() {
    method setDescription (line 77) | public void setDescription(String description) {
    method toString (line 81) | @Override

FILE: api/src/main/java/com/alibaba/nacos/api/ai/model/prompt/PromptVersionInfo.java
  class PromptVersionInfo (line 26) | public class PromptVersionInfo extends PromptVersionSummary {
    method getTemplate (line 36) | public String getTemplate() {
    method setTemplate (line 40) | public void setTemplate(String template) {
    method getMd5 (line 44) | public String getMd5() {
    method setMd5 (line 48) | public void setMd5(String md5) {
    method getVariables (line 52) | public List<PromptVariable> getVariables() {
    method setVariables (line 56) | public void setVariables(List<PromptVariable> variables) {

FILE: api/src/main/java/com/alibaba/nacos/api/ai/model/prompt/PromptVersionSummary.java
  class PromptVersionSummary (line 26) | public class PromptVersionSummary implements Serializable {
    method getPromptKey (line 40) | public String getPromptKey() {
    method setPromptKey (line 44) | public void setPromptKey(String promptKey) {
    method getVersion (line 48) | public String getVersion() {
    method setVersion (line 52) | public void setVersion(String version) {
    method getCommitMsg (line 56) | public String getCommitMsg() {
    method setCommitMsg (line 60) | public void setCommitMsg(String commitMsg) {
    method getSrcUser (line 64) | public String getSrcUser() {
    method setSrcUser (line 68) | public void setSrcUser(String srcUser) {
    method getGmtModified (line 72) | public Long getGmtModified() {
    m
Copy disabled (too large) Download .json
Condensed preview — 4319 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (16,816K chars).
[
  {
    "path": ".gitattributes",
    "chars": 87,
    "preview": "*.js linguist-language=java\n*.css linguist-language=java\n*.html linguist-language=java\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/bug-report.md",
    "chars": 1071,
    "preview": "---\nname: Bug report\nabout: Create a report to help us improve\ntitle: ''\nlabels: ''\nassignees: ''\n\n---\n\n<!-- Here is for"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/config.yml",
    "chars": 384,
    "preview": "blank_issues_enabled: false\ncontact_links:\n  - name: Questions\n    url: https://github.com/alibaba/nacos/discussions\n   "
  },
  {
    "path": ".github/ISSUE_TEMPLATE/feature_request.md",
    "chars": 892,
    "preview": "---\nname: Feature request\nabout: Suggest an idea for this project\ntitle: ''\nlabels: ''\nassignees: ''\n\n---\n\n<!-- Here is "
  },
  {
    "path": ".github/ISSUE_TEMPLATE.md",
    "chars": 604,
    "preview": "<!-- Here is for bug reports and feature requests ONLY! \n\nIf you're looking for help, please check our mail list、WeChat "
  },
  {
    "path": ".github/PULL_REQUEST_TEMPLATE.md",
    "chars": 1388,
    "preview": "Please do not create a Pull Request without creating an issue first.\n\n## What is the purpose of the change\n\nXXXXX\n\n## Br"
  },
  {
    "path": ".github/workflows/anti-spam.yml",
    "chars": 6267,
    "preview": "name: Anti-Spam Protection\n\non:\n  issues:\n    types: [opened, edited]\n\npermissions:\n  issues: write\n\njobs:\n  spam-detect"
  },
  {
    "path": ".github/workflows/ci.yml",
    "chars": 3472,
    "preview": "# This workflow will build a Java project with Maven\n# For more information see: https://help.github.com/actions/languag"
  },
  {
    "path": ".github/workflows/it.yml",
    "chars": 1737,
    "preview": "# This workflow will build a Java project with Maven\n# For more information see: https://help.github.com/actions/languag"
  },
  {
    "path": ".github/workflows/pr-ci.yml",
    "chars": 1054,
    "preview": "name: PR-CI\n\non:\n  pull_request:\n    branches: [ develop, v2.x-develop ]\n\njobs:\n  dist-tar:\n    name: Build distribution"
  },
  {
    "path": ".github/workflows/pr-comment.yml",
    "chars": 1413,
    "preview": "name: \"Comment on PR\"\n\non:\n  pull_request_target:\n    types: [opened, reopened]\n\njobs:\n  thanks-and-hint-to-document:\n  "
  },
  {
    "path": ".github/workflows/pr-e2e-test.yml",
    "chars": 22374,
    "preview": "name: E2E test for pull request\n\n\non:\n  workflow_run:\n    workflows: [\"PR-CI\"]\n    types:\n      - completed\n\nenv:\n  DOCK"
  },
  {
    "path": ".github/workflows/push-ci.yaml",
    "chars": 18210,
    "preview": "name: PUSH-CI\n\non:\n  push:\n    branches: [master, develop, v2.x-develop]\n\npermissions:\n  contents: read\n\nconcurrency:\n  "
  },
  {
    "path": ".github/workflows/stale.yml",
    "chars": 1059,
    "preview": "name: Close inactive issues\non:\n  schedule:\n    - cron: \"0 17 * * *\"   # UTC+8 01:00(UTC 17:00)\n\njobs:\n  close-issues:\n "
  },
  {
    "path": ".gitignore",
    "chars": 279,
    "preview": "# Except this file !.gitignore\n.classpath\n.project\n.settings\ntarget\n.idea\n.vscode\n.DS_Store\n.factorypath\n/logs\n*.iml\n*.l"
  },
  {
    "path": ".mvn/wrapper/maven-wrapper.properties",
    "chars": 951,
    "preview": "# Licensed to the Apache Software Foundation (ASF) under one\n# or more contributor license agreements.  See the NOTICE f"
  },
  {
    "path": ".travis.yml",
    "chars": 1252,
    "preview": "notifications:\n  email:\n    recipients:\n      - dev-nacos@googlegroups.com\n      - mw_configcenter@list.alibaba-inc.com\n"
  },
  {
    "path": "BUILDING",
    "chars": 1179,
    "preview": "Build Instructions for NACOS\n\n====================================================\n\n(1) Prerequisites\n\n    JDK 17+ is re"
  },
  {
    "path": "CHANGELOG.md",
    "chars": 10244,
    "preview": "## 1.0.0-RC4(Mar 22, 2019)\n* [#923] Nacos 1.0.0 compatible with nacos-client 0.6.2\n* [#938] Client beat processor task l"
  },
  {
    "path": "CODE_OF_CONDUCT.md",
    "chars": 3236,
    "preview": "# Contributor Covenant Code of Conduct\n\n## Our Pledge\n\nIn the interest of fostering an open and welcoming environment, w"
  },
  {
    "path": "CONTRIBUTING.md",
    "chars": 7381,
    "preview": "# Contributing to Nacos\n\n[中文版](./CONTRIBUTING_zh.md)\n\nWelcome to Nacos! This document is a guideline about how to contri"
  },
  {
    "path": "CONTRIBUTING_zh.md",
    "chars": 3780,
    "preview": "# 贡献指南\n\n[English](./CONTRIBUTING.md)\n\n欢迎来到 Nacos!本文档是关于如何为 Nacos 做贡献的指南。\n\n如果您发现任何不正确或遗漏的内容,请留下意见或建议。\n\n## 开始之前\n\n### 行为准则\n"
  },
  {
    "path": "LICENSE",
    "chars": 11357,
    "preview": "                                 Apache License\n                           Version 2.0, January 2004\n                   "
  },
  {
    "path": "NOTICE",
    "chars": 4095,
    "preview": "Nacos\nCopyright 2018-2020\n\nThis product includes software developed at\nThe Alibaba MiddleWare Group.\n\n------\nThis produc"
  },
  {
    "path": "README.md",
    "chars": 16516,
    "preview": "\n<img src=\"doc/Nacos_Logo.png\" width=\"50%\" syt height=\"50%\" />\n\n# Nacos: Dynamic  *Na*ming and *Co*nfiguration *S*ervice"
  },
  {
    "path": "REPORTING-BUGS.md",
    "chars": 1979,
    "preview": "# How to report bugs\n\nIf any part of the Nacos project has bugs or documentation mistakes, please let us know by [openin"
  },
  {
    "path": "address/pom.xml",
    "chars": 3757,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!--\n  ~ Copyright 1999-2018 Alibaba Group Holding Ltd.\n  ~\n  ~ Licensed under th"
  },
  {
    "path": "address/src/main/java/com/alibaba/nacos/address/AddressServer.java",
    "chars": 1062,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "address/src/main/java/com/alibaba/nacos/address/component/AddressServerGeneratorManager.java",
    "chars": 4446,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "address/src/main/java/com/alibaba/nacos/address/component/AddressServerManager.java",
    "chars": 2221,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "address/src/main/java/com/alibaba/nacos/address/config/AddressServerSecurityConfiguration.java",
    "chars": 1702,
    "preview": "/*\n * Copyright 1999-2022 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "address/src/main/java/com/alibaba/nacos/address/constant/AddressServerConstants.java",
    "chars": 2126,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "address/src/main/java/com/alibaba/nacos/address/controller/AddressServerClusterController.java",
    "chars": 10667,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "address/src/main/java/com/alibaba/nacos/address/controller/ServerListController.java",
    "chars": 4101,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "address/src/main/java/com/alibaba/nacos/address/misc/Loggers.java",
    "chars": 929,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "address/src/main/resources/META-INF/logback/nacos-included.xml",
    "chars": 1743,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!--\n  ~ Copyright 1999-2018 Alibaba Group Holding Ltd.\n  ~\n  ~ Licensed under th"
  },
  {
    "path": "address/src/main/resources/META-INF/nacos-default.properties",
    "chars": 601,
    "preview": "#\n# Copyright 1999-2018 Alibaba Group Holding Ltd.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n#"
  },
  {
    "path": "address/src/main/resources/application.properties",
    "chars": 647,
    "preview": "#\n# Copyright 1999-2018 Alibaba Group Holding Ltd.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n#"
  },
  {
    "path": "address/src/test/java/com/alibaba/nacos/address/component/AddressServerGeneratorManagerTest.java",
    "chars": 4411,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "address/src/test/java/com/alibaba/nacos/address/component/AddressServerManagerTests.java",
    "chars": 2681,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "address/src/test/java/com/alibaba/nacos/address/controller/AddressServerClusterControllerTest.java",
    "chars": 5942,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "address/src/test/java/com/alibaba/nacos/address/controller/ServerListControllerTest.java",
    "chars": 3905,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/pom.xml",
    "chars": 2073,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!--\n  ~ Copyright 1999-2025 Alibaba Group Holding Ltd.\n  ~\n  ~ Licensed under th"
  },
  {
    "path": "ai/src/main/java/com/alibaba/nacos/ai/config/AiEnabledFilter.java",
    "chars": 2028,
    "preview": "/*\n * Copyright 1999-2025 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/main/java/com/alibaba/nacos/ai/config/McpCacheIndexProperties.java",
    "chars": 2816,
    "preview": "/*\n * Copyright 1999-2025 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/main/java/com/alibaba/nacos/ai/config/McpConfiguration.java",
    "chars": 1237,
    "preview": "/*\n * Copyright 1999-2025 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/main/java/com/alibaba/nacos/ai/config/McpServerIndexConfiguration.java",
    "chars": 4882,
    "preview": "/*\n * Copyright 1999-2025 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/main/java/com/alibaba/nacos/ai/constant/Constants.java",
    "chars": 7585,
    "preview": "/*\n * Copyright 1999-2025 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/main/java/com/alibaba/nacos/ai/constant/McpServerValidationConstants.java",
    "chars": 1233,
    "preview": "/*\n * Copyright 1999-2025 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/main/java/com/alibaba/nacos/ai/controller/A2aAdminController.java",
    "chars": 6993,
    "preview": "/*\n * Copyright 1999-2025 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/main/java/com/alibaba/nacos/ai/controller/McpAdminController.java",
    "chars": 6725,
    "preview": "/*\n * Copyright 1999-2025 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/main/java/com/alibaba/nacos/ai/controller/PromptAdminController.java",
    "chars": 10870,
    "preview": "/*\n * Copyright 1999-2025 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/main/java/com/alibaba/nacos/ai/controller/PromptClientController.java",
    "chars": 3437,
    "preview": "/*\n * Copyright 1999-2026 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/main/java/com/alibaba/nacos/ai/controller/SkillAdminController.java",
    "chars": 6983,
    "preview": "/*\n * Copyright 1999-2025 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/main/java/com/alibaba/nacos/ai/enums/ExternalDataTypeEnum.java",
    "chars": 2379,
    "preview": "/*\n * Copyright 1999-2021 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/main/java/com/alibaba/nacos/ai/enums/McpImportResultStatusEnum.java",
    "chars": 1088,
    "preview": "/*\n * Copyright 1999-2021 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/main/java/com/alibaba/nacos/ai/form/a2a/admin/AgentCardForm.java",
    "chars": 2672,
    "preview": "/*\n * Copyright 1999-2025 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/main/java/com/alibaba/nacos/ai/form/a2a/admin/AgentCardUpdateForm.java",
    "chars": 1682,
    "preview": "/*\n * Copyright 1999-2025 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/main/java/com/alibaba/nacos/ai/form/a2a/admin/AgentForm.java",
    "chars": 2594,
    "preview": "/*\n * Copyright 1999-2025 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/main/java/com/alibaba/nacos/ai/form/a2a/admin/AgentListForm.java",
    "chars": 1687,
    "preview": "/*\n * Copyright 1999-2025 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/main/java/com/alibaba/nacos/ai/form/mcp/admin/McpDetailForm.java",
    "chars": 2342,
    "preview": "/*\n * Copyright 1999-2025 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/main/java/com/alibaba/nacos/ai/form/mcp/admin/McpForm.java",
    "chars": 2510,
    "preview": "/*\n * Copyright 1999-2025 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/main/java/com/alibaba/nacos/ai/form/mcp/admin/McpImportForm.java",
    "chars": 4224,
    "preview": "/*\n * Copyright 1999-2025 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/main/java/com/alibaba/nacos/ai/form/mcp/admin/McpListForm.java",
    "chars": 1993,
    "preview": "/*\n * Copyright 1999-2025 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/main/java/com/alibaba/nacos/ai/form/mcp/admin/McpUpdateForm.java",
    "chars": 1328,
    "preview": "/*\n * Copyright 1999-2025 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/main/java/com/alibaba/nacos/ai/form/prompt/PromptForm.java",
    "chars": 2078,
    "preview": "/*\n * Copyright 1999-2025 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/main/java/com/alibaba/nacos/ai/form/prompt/PromptHistoryForm.java",
    "chars": 1759,
    "preview": "/*\n * Copyright 1999-2025 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/main/java/com/alibaba/nacos/ai/form/prompt/PromptLabelBindForm.java",
    "chars": 1920,
    "preview": "/*\n * Copyright 1999-2026 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/main/java/com/alibaba/nacos/ai/form/prompt/PromptLabelForm.java",
    "chars": 1489,
    "preview": "/*\n * Copyright 1999-2026 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/main/java/com/alibaba/nacos/ai/form/prompt/PromptListForm.java",
    "chars": 3514,
    "preview": "/*\n * Copyright 1999-2025 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/main/java/com/alibaba/nacos/ai/form/prompt/PromptMetadataForm.java",
    "chars": 1464,
    "preview": "/*\n * Copyright 1999-2025 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/main/java/com/alibaba/nacos/ai/form/prompt/PromptPublishForm.java",
    "chars": 3497,
    "preview": "/*\n * Copyright 1999-2025 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/main/java/com/alibaba/nacos/ai/form/prompt/PromptQueryForm.java",
    "chars": 1307,
    "preview": "/*\n * Copyright 1999-2026 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/main/java/com/alibaba/nacos/ai/form/skills/admin/SkillDetailForm.java",
    "chars": 1855,
    "preview": "/*\n * Copyright 1999-2025 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/main/java/com/alibaba/nacos/ai/form/skills/admin/SkillForm.java",
    "chars": 2316,
    "preview": "/*\n * Copyright 1999-2025 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/main/java/com/alibaba/nacos/ai/form/skills/admin/SkillListForm.java",
    "chars": 1813,
    "preview": "/*\n * Copyright 1999-2025 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/main/java/com/alibaba/nacos/ai/form/skills/admin/SkillUpdateForm.java",
    "chars": 1144,
    "preview": "/*\n * Copyright 1999-2025 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/main/java/com/alibaba/nacos/ai/index/AbstractMcpServerIndex.java",
    "chars": 5468,
    "preview": "/*\n * Copyright 1999-2025 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/main/java/com/alibaba/nacos/ai/index/CachedMcpServerIndex.java",
    "chars": 11367,
    "preview": "/*\n * Copyright 1999-2025 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/main/java/com/alibaba/nacos/ai/index/McpCacheIndex.java",
    "chars": 3501,
    "preview": "/*\n * Copyright 1999-2025 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/main/java/com/alibaba/nacos/ai/index/McpServerIndex.java",
    "chars": 2257,
    "preview": "/*\n * Copyright 1999-2025 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/main/java/com/alibaba/nacos/ai/index/MemoryMcpCacheIndex.java",
    "chars": 13014,
    "preview": "/*\n * Copyright 1999-2025 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/main/java/com/alibaba/nacos/ai/index/PlainMcpServerIndex.java",
    "chars": 5150,
    "preview": "/*\n * Copyright 1999-2025 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/main/java/com/alibaba/nacos/ai/model/mcp/McpServerIndexData.java",
    "chars": 1471,
    "preview": "/*\n * Copyright 1999-2025 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/main/java/com/alibaba/nacos/ai/model/mcp/McpServerStorageInfo.java",
    "chars": 1701,
    "preview": "/*\n * Copyright 1999-2025 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/main/java/com/alibaba/nacos/ai/model/mcp/UrlPageResult.java",
    "chars": 1413,
    "preview": "/*\n * Copyright 1999-2021 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/main/java/com/alibaba/nacos/ai/param/AgentHttpParamExtractor.java",
    "chars": 2163,
    "preview": "/*\n * Copyright 1999-2025 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/main/java/com/alibaba/nacos/ai/param/McpHttpParamExtractor.java",
    "chars": 1491,
    "preview": "/*\n * Copyright 1999-2025 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/main/java/com/alibaba/nacos/ai/param/PromptHttpParamExtractor.java",
    "chars": 1674,
    "preview": "/*\n * Copyright 1999-2025 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/main/java/com/alibaba/nacos/ai/param/SkillHttpParamExtractor.java",
    "chars": 2129,
    "preview": "/*\n * Copyright 1999-2025 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/main/java/com/alibaba/nacos/ai/remote/handler/McpServerEndpointRequestHandler.java",
    "chars": 9528,
    "preview": "/*\n * Copyright 1999-2025 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/main/java/com/alibaba/nacos/ai/remote/handler/QueryMcpServerRequestHandler.java",
    "chars": 3912,
    "preview": "/*\n * Copyright 1999-2025 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/main/java/com/alibaba/nacos/ai/remote/handler/QueryPromptRequestHandler.java",
    "chars": 4157,
    "preview": "/*\n * Copyright 1999-2026 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/main/java/com/alibaba/nacos/ai/remote/handler/ReleaseMcpServerRequestHandler.java",
    "chars": 10518,
    "preview": "/*\n * Copyright 1999-2025 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/main/java/com/alibaba/nacos/ai/remote/handler/a2a/AgentEndpointRequestHandler.java",
    "chars": 7190,
    "preview": "/*\n * Copyright 1999-2025 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/main/java/com/alibaba/nacos/ai/remote/handler/a2a/BatchAgentEndpointRequestHandler.java",
    "chars": 6722,
    "preview": "/*\n * Copyright 1999-2025 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/main/java/com/alibaba/nacos/ai/remote/handler/a2a/QueryAgentCardRequestHandler.java",
    "chars": 3625,
    "preview": "/*\n * Copyright 1999-2025 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/main/java/com/alibaba/nacos/ai/remote/handler/a2a/ReleaseAgentCardRequestHandler.java",
    "chars": 5983,
    "preview": "/*\n * Copyright 1999-2025 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/main/java/com/alibaba/nacos/ai/remote/manager/AiConnectionBasedClientManager.java",
    "chars": 4211,
    "preview": "/*\n * Copyright 1999-2025 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/main/java/com/alibaba/nacos/ai/service/McpEndpointOperationService.java",
    "chars": 8780,
    "preview": "/*\n * Copyright 1999-2025 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/main/java/com/alibaba/nacos/ai/service/McpExternalDataAdaptor.java",
    "chars": 18521,
    "preview": "/*\n * Copyright 1999-2021 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/main/java/com/alibaba/nacos/ai/service/McpServerCacheInvalidateService.java",
    "chars": 5738,
    "preview": "/*\n * Copyright 1999-2025 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/main/java/com/alibaba/nacos/ai/service/McpServerImportService.java",
    "chars": 11727,
    "preview": "/*\n * Copyright 1999-2021 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/main/java/com/alibaba/nacos/ai/service/McpServerOperationService.java",
    "chars": 36294,
    "preview": "/*\n * Copyright 1999-2025 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/main/java/com/alibaba/nacos/ai/service/McpServerValidationService.java",
    "chars": 8867,
    "preview": "/*\n * Copyright 1999-2021 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/main/java/com/alibaba/nacos/ai/service/McpToolOperationService.java",
    "chars": 5353,
    "preview": "/*\n * Copyright 1999-2025 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/main/java/com/alibaba/nacos/ai/service/SimpleSyncEffectService.java",
    "chars": 1544,
    "preview": "/*\n * Copyright 1999-2025 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/main/java/com/alibaba/nacos/ai/service/SyncEffectService.java",
    "chars": 1941,
    "preview": "/*\n * Copyright 1999-2025 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/main/java/com/alibaba/nacos/ai/service/a2a/A2aServerOperationService.java",
    "chars": 21079,
    "preview": "/*\n * Copyright 1999-2025 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/main/java/com/alibaba/nacos/ai/service/a2a/identity/AgentIdCodec.java",
    "chars": 1753,
    "preview": "/*\n * Copyright 1999-2025 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/main/java/com/alibaba/nacos/ai/service/a2a/identity/AgentIdCodecHolder.java",
    "chars": 1963,
    "preview": "/*\n * Copyright 1999-2025 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/main/java/com/alibaba/nacos/ai/service/a2a/identity/AsciiAgentIdCodec.java",
    "chars": 3889,
    "preview": "/*\n * Copyright 1999-2025 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/main/java/com/alibaba/nacos/ai/service/prompt/PromptAdminOperationService.java",
    "chars": 5791,
    "preview": "/*\n * Copyright 1999-2026 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/main/java/com/alibaba/nacos/ai/service/prompt/PromptAdminOperationServiceImpl.java",
    "chars": 25729,
    "preview": "/*\n * Copyright 1999-2026 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/main/java/com/alibaba/nacos/ai/service/prompt/PromptClientOperationService.java",
    "chars": 2659,
    "preview": "/*\n * Copyright 1999-2026 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/main/java/com/alibaba/nacos/ai/service/prompt/PromptClientOperationServiceImpl.java",
    "chars": 8331,
    "preview": "/*\n * Copyright 1999-2026 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/main/java/com/alibaba/nacos/ai/service/prompt/PromptLabelVersionMappingSnapshot.java",
    "chars": 1397,
    "preview": "/*\n * Copyright 1999-2026 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/main/java/com/alibaba/nacos/ai/service/prompt/PromptMetaCacheInvalidateService.java",
    "chars": 2417,
    "preview": "/*\n * Copyright 1999-2026 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/main/java/com/alibaba/nacos/ai/service/prompt/PromptMetaSnapshot.java",
    "chars": 1258,
    "preview": "/*\n * Copyright 1999-2026 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/main/java/com/alibaba/nacos/ai/service/prompt/PromptMetaUtils.java",
    "chars": 11481,
    "preview": "/*\n * Copyright 1999-2026 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/main/java/com/alibaba/nacos/ai/service/skills/SkillOperationService.java",
    "chars": 2817,
    "preview": "/*\n * Copyright 1999-2025 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/main/java/com/alibaba/nacos/ai/service/skills/SkillOperationServiceImpl.java",
    "chars": 26123,
    "preview": "/*\n * Copyright 1999-2025 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/main/java/com/alibaba/nacos/ai/utils/AgentCardUtil.java",
    "chars": 7109,
    "preview": "/*\n * Copyright 1999-2025 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/main/java/com/alibaba/nacos/ai/utils/AgentEndpointUtil.java",
    "chars": 3129,
    "preview": "/*\n * Copyright 1999-2025 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/main/java/com/alibaba/nacos/ai/utils/AgentRequestUtil.java",
    "chars": 4515,
    "preview": "/*\n * Copyright 1999-2025 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/main/java/com/alibaba/nacos/ai/utils/McpConfigUtils.java",
    "chars": 4333,
    "preview": "/*\n * Copyright 1999-2024 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/main/java/com/alibaba/nacos/ai/utils/McpRequestUtil.java",
    "chars": 6343,
    "preview": "/*\n * Copyright 1999-2025 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/main/java/com/alibaba/nacos/ai/utils/PromptDataIdUtils.java",
    "chars": 4106,
    "preview": "/*\n * Copyright 1999-2026 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/main/java/com/alibaba/nacos/ai/utils/PromptVersionUtils.java",
    "chars": 4297,
    "preview": "/*\n * Copyright 1999-2025 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/main/java/com/alibaba/nacos/ai/utils/SkillRequestUtil.java",
    "chars": 4584,
    "preview": "/*\n * Copyright 1999-2025 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/main/java/com/alibaba/nacos/ai/utils/SkillZipParser.java",
    "chars": 16832,
    "preview": "/*\n * Copyright 1999-2025 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/main/resources/META-INF/services/com.alibaba.nacos.ai.service.McpServerOperationService",
    "chars": 656,
    "preview": "#\n# Copyright 1999-2023 Alibaba Group Holding Ltd.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n#"
  },
  {
    "path": "ai/src/main/resources/META-INF/services/com.alibaba.nacos.core.paramcheck.AbstractHttpParamExtractor",
    "chars": 700,
    "preview": "#\n# Copyright 1999-2023 Alibaba Group Holding Ltd.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n#"
  },
  {
    "path": "ai/src/main/resources/META-INF/services/com.alibaba.nacos.sys.filter.NacosPackageExcludeFilter",
    "chars": 644,
    "preview": "#\n# Copyright 1999-2025 Alibaba Group Holding Ltd.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n#"
  },
  {
    "path": "ai/src/test/java/com/alibaba/nacos/ai/config/AiEnabledFilterTest.java",
    "chars": 2663,
    "preview": "/*\n * Copyright 1999-2025 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/test/java/com/alibaba/nacos/ai/config/McpCacheIndexPropertiesTest.java",
    "chars": 1584,
    "preview": "/*\n * Copyright 1999-2025 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/test/java/com/alibaba/nacos/ai/config/McpConfigurationTest.java",
    "chars": 1279,
    "preview": "/*\n * Copyright 1999-2025 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/test/java/com/alibaba/nacos/ai/config/McpServerIndexConfigurationTest.java",
    "chars": 3671,
    "preview": "/*\n * Copyright 1999-2025 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/test/java/com/alibaba/nacos/ai/controller/A2aAdminControllerTest.java",
    "chars": 18010,
    "preview": "/*\n * Copyright 1999-2025 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/test/java/com/alibaba/nacos/ai/controller/McpAdminControllerTest.java",
    "chars": 16400,
    "preview": "/*\n * Copyright 1999-2025 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/test/java/com/alibaba/nacos/ai/controller/PromptClientControllerTest.java",
    "chars": 4010,
    "preview": "/*\n * Copyright 1999-2026 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/test/java/com/alibaba/nacos/ai/form/a2a/admin/AgentCardFormTest.java",
    "chars": 4538,
    "preview": "/*\n * Copyright 1999-2025 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/test/java/com/alibaba/nacos/ai/form/a2a/admin/AgentFormTest.java",
    "chars": 2907,
    "preview": "/*\n * Copyright 1999-2025 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/test/java/com/alibaba/nacos/ai/form/a2a/admin/AgentListFormTest.java",
    "chars": 3635,
    "preview": "/*\n * Copyright 1999-2025 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/test/java/com/alibaba/nacos/ai/form/mcp/admin/McpImportFormTest.java",
    "chars": 5122,
    "preview": "/*\n * Copyright 1999-2025 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/test/java/com/alibaba/nacos/ai/form/prompt/PromptFormTest.java",
    "chars": 1356,
    "preview": "/*\n * Copyright 1999-2026 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/test/java/com/alibaba/nacos/ai/form/prompt/PromptHistoryFormTest.java",
    "chars": 1544,
    "preview": "/*\n * Copyright 1999-2026 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/test/java/com/alibaba/nacos/ai/form/prompt/PromptLabelBindFormTest.java",
    "chars": 1377,
    "preview": "/*\n * Copyright 1999-2026 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/test/java/com/alibaba/nacos/ai/form/prompt/PromptLabelFormTest.java",
    "chars": 1070,
    "preview": "/*\n * Copyright 1999-2026 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/test/java/com/alibaba/nacos/ai/form/prompt/PromptListFormTest.java",
    "chars": 1798,
    "preview": "/*\n * Copyright 1999-2026 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/test/java/com/alibaba/nacos/ai/form/prompt/PromptPublishFormTest.java",
    "chars": 1641,
    "preview": "/*\n * Copyright 1999-2026 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/test/java/com/alibaba/nacos/ai/index/AbstractMcpServerIndexTest.java",
    "chars": 1160,
    "preview": "/*\n * Copyright 1999-2025 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/test/java/com/alibaba/nacos/ai/index/CachedMcpServerIndexTest.java",
    "chars": 44254,
    "preview": "/*\n * Copyright 1999-2025 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/test/java/com/alibaba/nacos/ai/index/McpCachePerformanceTest.java",
    "chars": 12906,
    "preview": "/*\n * Copyright 1999-2025 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/test/java/com/alibaba/nacos/ai/index/MemoryMcpCacheIndexTest.java",
    "chars": 26673,
    "preview": "/*\n * Copyright 1999-2025 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/test/java/com/alibaba/nacos/ai/index/PlainMcpServerIndexTest.java",
    "chars": 14621,
    "preview": "/*\n * Copyright 1999-2025 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/test/java/com/alibaba/nacos/ai/param/AgentHttpParamExtractorTest.java",
    "chars": 4791,
    "preview": "/*\n * Copyright 1999-2025 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/test/java/com/alibaba/nacos/ai/param/McpHttpParamExtractorTest.java",
    "chars": 2049,
    "preview": "/*\n * Copyright 1999-2025 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/test/java/com/alibaba/nacos/ai/remote/handler/McpServerEndpointRequestHandlerTest.java",
    "chars": 11909,
    "preview": "/*\n * Copyright 1999-2025 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/test/java/com/alibaba/nacos/ai/remote/handler/QueryMcpServerRequestHandlerTest.java",
    "chars": 3785,
    "preview": "/*\n * Copyright 1999-2025 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/test/java/com/alibaba/nacos/ai/remote/handler/QueryPromptRequestHandlerTest.java",
    "chars": 4269,
    "preview": "/*\n * Copyright 1999-2026 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/test/java/com/alibaba/nacos/ai/remote/handler/ReleaseMcpServerRequestHandlerTest.java",
    "chars": 14834,
    "preview": "/*\n * Copyright 1999-2025 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/test/java/com/alibaba/nacos/ai/remote/handler/a2a/AgentEndpointRequestHandlerTest.java",
    "chars": 8625,
    "preview": "/*\n * Copyright 1999-2025 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/test/java/com/alibaba/nacos/ai/remote/handler/a2a/BatchAgentEndpointRequestHandlerTest.java",
    "chars": 9287,
    "preview": "/*\n * Copyright 1999-2025 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/test/java/com/alibaba/nacos/ai/remote/handler/a2a/QueryAgentCardRequestHandlerTest.java",
    "chars": 3915,
    "preview": "/*\n * Copyright 1999-2025 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/test/java/com/alibaba/nacos/ai/remote/handler/a2a/ReleaseAgentCardRequestHandlerTest.java",
    "chars": 7907,
    "preview": "/*\n * Copyright 1999-2025 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/test/java/com/alibaba/nacos/ai/remote/manager/AiConnectionBasedClientManagerTest.java",
    "chars": 6098,
    "preview": "/*\n * Copyright 1999-2025 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/test/java/com/alibaba/nacos/ai/service/McpEndpointOperationServiceTest.java",
    "chars": 11821,
    "preview": "/*\n * Copyright 1999-2025 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/test/java/com/alibaba/nacos/ai/service/McpExternalDataAdaptorTest.java",
    "chars": 22130,
    "preview": "/*\n * Copyright 1999-2021 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/test/java/com/alibaba/nacos/ai/service/McpServerCacheInvalidateServiceTest.java",
    "chars": 11894,
    "preview": "/*\n * Copyright 1999-2025 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/test/java/com/alibaba/nacos/ai/service/McpServerImportServiceTest.java",
    "chars": 30905,
    "preview": "/*\n * Copyright 1999-2021 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/test/java/com/alibaba/nacos/ai/service/McpServerOperationServiceTest.java",
    "chars": 64039,
    "preview": "/*\n * Copyright 1999-2025 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/test/java/com/alibaba/nacos/ai/service/McpServerValidationServiceTest.java",
    "chars": 31235,
    "preview": "/*\n * Copyright 1999-2025 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/test/java/com/alibaba/nacos/ai/service/McpToolOperationServiceTest.java",
    "chars": 5591,
    "preview": "/*\n * Copyright 1999-2025 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/test/java/com/alibaba/nacos/ai/service/SimpleSyncEffectServiceTest.java",
    "chars": 2220,
    "preview": "/*\n * Copyright 1999-2025 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/test/java/com/alibaba/nacos/ai/service/SyncEffectServiceTest.java",
    "chars": 1635,
    "preview": "/*\n * Copyright 1999-2025 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/test/java/com/alibaba/nacos/ai/service/a2a/A2aServerOperationServiceTest.java",
    "chars": 45490,
    "preview": "/*\n * Copyright 1999-2025 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/test/java/com/alibaba/nacos/ai/service/a2a/identity/AgentIdCodecHolderTest.java",
    "chars": 2647,
    "preview": "/*\n * Copyright 1999-2025 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/test/java/com/alibaba/nacos/ai/service/a2a/identity/AsciiAgentIdCodecTest.java",
    "chars": 6039,
    "preview": "/*\n * Copyright 1999-2025 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/test/java/com/alibaba/nacos/ai/service/prompt/PromptAdminOperationServiceImplTest.java",
    "chars": 20216,
    "preview": "/*\n * Copyright 1999-2026 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/test/java/com/alibaba/nacos/ai/service/prompt/PromptClientOperationServiceImplTest.java",
    "chars": 11762,
    "preview": "/*\n * Copyright 1999-2026 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/test/java/com/alibaba/nacos/ai/service/prompt/PromptMetaCacheInvalidateServiceTest.java",
    "chars": 2470,
    "preview": "/*\n * Copyright 1999-2026 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/test/java/com/alibaba/nacos/ai/service/prompt/PromptMetaUtilsTest.java",
    "chars": 4123,
    "preview": "/*\n * Copyright 1999-2026 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/test/java/com/alibaba/nacos/ai/service/skills/SkillOperationServiceImplTest.java",
    "chars": 16106,
    "preview": "/*\n * Copyright 1999-2025 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/test/java/com/alibaba/nacos/ai/utils/AgentCardUtilTest.java",
    "chars": 13733,
    "preview": "/*\n * Copyright 1999-2025 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/test/java/com/alibaba/nacos/ai/utils/AgentEndpointUtilTest.java",
    "chars": 7051,
    "preview": "/*\n * Copyright 1999-2025 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/test/java/com/alibaba/nacos/ai/utils/AgentRequestUtilTest.java",
    "chars": 9692,
    "preview": "/*\n * Copyright 1999-2025 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/test/java/com/alibaba/nacos/ai/utils/McpConfigUtilsTest.java",
    "chars": 4189,
    "preview": "/*\n * Copyright 1999-2025 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/test/java/com/alibaba/nacos/ai/utils/McpRequestUtilTest.java",
    "chars": 10100,
    "preview": "/*\n * Copyright 1999-2025 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/test/java/com/alibaba/nacos/ai/utils/McpRequestUtilsTest.java",
    "chars": 1305,
    "preview": "/*\n * Copyright 1999-2025 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/test/java/com/alibaba/nacos/ai/utils/PromptDataIdUtilsTest.java",
    "chars": 2351,
    "preview": "/*\n * Copyright 1999-2026 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "ai/src/test/java/com/alibaba/nacos/ai/utils/SkillZipParserTest.java",
    "chars": 22246,
    "preview": "/*\n * Copyright 1999-2025 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "api/pom.xml",
    "chars": 5060,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!--\n  ~ Copyright 1999-2018 Alibaba Group Holding Ltd.\n  ~\n  ~ Licensed under th"
  },
  {
    "path": "api/src/main/java/com/alibaba/nacos/api/NacosFactory.java",
    "chars": 3892,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "api/src/main/java/com/alibaba/nacos/api/PropertyKeyConst.java",
    "chars": 5088,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "api/src/main/java/com/alibaba/nacos/api/SystemPropertyKeyConst.java",
    "chars": 1788,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "api/src/main/java/com/alibaba/nacos/api/ability/ClientAbilities.java",
    "chars": 2067,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "api/src/main/java/com/alibaba/nacos/api/ability/ServerAbilities.java",
    "chars": 2674,
    "preview": "/*\n * Copyright 1999-2018 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "api/src/main/java/com/alibaba/nacos/api/ability/constant/AbilityKey.java",
    "chars": 6624,
    "preview": "/*\n * Copyright 1999-2022 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "api/src/main/java/com/alibaba/nacos/api/ability/constant/AbilityMode.java",
    "chars": 946,
    "preview": "/*\n * Copyright 1999-2023 Alibaba Group Holding Ltd.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  }
]

// ... and 4119 more files (download for full content)

About this extraction

This page contains the full source code of the alibaba/nacos GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 4319 files (30.4 MB), approximately 4.3M tokens, and a symbol index with 18017 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!