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.

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.

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。

我们鼓励新人积极参与 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 中进行投票。

在最坏的情况下,这个过程可能会持续两周。请继续贡献!即使在提名失败的罕见情况下,反对意见通常也是容易解决的,比如"需要更多补丁"或"没有足够的人熟悉此人的工作"。
================================================
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
[](https://gitter.im/alibaba/nacos?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge) [](https://www.apache.org/licenses/LICENSE-2.0.html)
[](https://travis-ci.org/alibaba/nacos)
[](https://opensource.alibaba.com/contribution_leaderboard/details?projectValue=nacos)
[](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

### DingDing MCP Group QR Code

### WeChat Group QR Code

## 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_
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
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.