This is an automated email from the ASF dual-hosted git repository.
dependabot[bot] pushed a change to branch
dependabot/npm_and_yarn/web/browserslist-4.29.0
in repository https://gitbox.apache.org/repos/asf/rocketmq-dashboard.git
discard 1b9c0d432 chore(deps-dev): bump browserslist from 4.28.4 to 4.29.0 in
/web
omit 3b5605c4a ci: run workflows from master and carry over the ASF repo
settings
add bf607f5e5 ci: run workflows from master and carry over the ASF repo
settings (#4380)
add 987b748e8 docs: add a contributing guide, issue and pull request
templates (#4381)
add d50ffecc9 docs: update development trunk branch to rocketmq-studio
add 5b761df83 feat(ai): hosted conversation platform with persisted
timeline and history management (#4606)
add 40a8f6ae7 feat(cluster): clarify supported NameServer address formats
(#4383)
add a24826048 fix(acl): clear a Tencent role's permissions instead of
deleting the role (#4469)
add 1172d8597 fix(studio): clear hidden resource selections (#4473)
add 8457a929d fix(dlq): isolate detail resend state across instance
switches (#4487)
add 2945fba5e fix(topic): scope topic page state to the selected instance
(#4490)
add c230fc989 fix(message): preserve replacement queue pull locks (#4501)
add aaaa957c9 fix(alert): match padded instance ids and render alert
windows and placeholders (#4464)
add f75951052 fix(studio): persist cleared optional instance and registry
fields (#4466)
add e63c8e56f fix(message): abbreviate message properties on code point
boundaries (#4467)
add 7ce9a6821 feat(topic): support cloud test-message sending (#4496)
add cb2ca635b fix(metrics): preserve unknown Apache queue lag (#4517)
add eda9884d6 fix(metrics): preserve unavailable broker runtime fields
(#4521)
add 85f839b6c fix(message): surface message-id lookup failures (#4525)
add d24f58b82 fix(tencent): reject incomplete catalog pages (#4529)
add a913ce7ae fix(group): preserve unknown lag in reset preview (#4540)
add 1c8542efa fix(group): preflight settings across brokers (#4542)
add df369b63a fix(studio): ignore stale consumer progress responses (#4546)
add f531fb8e6 fix(studio): preserve cluster filter in paginated metadata
queries (#4551)
add 27fc97dd3 fix(studio): isolate MCP tool results from audit failures
(#4553)
add c9795c1b7 fix(studio): ignore stale topic sync results (#4548)
add cd448e17f fix(group): preserve unavailable consumer connections (#4544)
add e55409633 fix(auth): bound the login username and correct the
wrong-password status (#4684)
add e3dee797e fix(instance): bound instance text to the column width and
read a legacy null vendor (#4713)
add 958a75990 fix(dlq): keep the redelivery count in exports and reject a
zero-length window (#4718)
add 15167dc5d fix(studio): normalize the audit search term and require an
alert metric (#4682)
add ce8acd080 fix(web): promote the byte unit at the rounding boundary and
localize MiniBar labels (#4680)
add 42b68d1d5 fix(web): surface failed requests instead of stale or blank
panels (#4615)
add 29a7d4abe fix(alert): audit exhausted deliveries with the shared
FAILED vocabulary (#4657)
add b88582b12 [ISSUE #4143][ISSUE #4147] feat(ai): bound message queries
and support custom traces (#4388)
add ed6613bd1 [ISSUE #4463] fix(producer): surface incomplete connection
scans (#4468)
add beae721a9 fix(ai): validate message properties before confirming a
send preview (#4470)
add 7c8ec156f fix(ai): keep the provider token out of
LlmProperties.toString (#4472)
add 61d1b178d fix(nameserver): preserve named IPv6 zone identifiers (#4522)
add 34b033208 fix(tencent): reject incomplete resource pages (#4531)
add cea345e69 fix(tencent): reject incomplete ACL role pages (#4533)
add dff6876d6 fix(client): constrain diagnostics to registered nameservers
(#4534)
add aae11ff0d fix(lite): surface session metric read failures (#4536)
add 74c9ea91c fix(topic): reject updates for missing topics (#4538)
add 59aaadfd7 fix(k8s): redact certificate private keys (#4555)
add 25d8645c8 fix(ai): repair corrupt prompt-template storage instead of
locking it out (#4575)
add e7bacd22e fix(studio): render session timestamps in the viewer
timezone (#4576)
add 5479af6f4 fix(lite): fail the TTL extension instead of partially
updating the cluster (#4578)
add f597fecc2 fix(audit): let the timeline target be activated from the
keyboard (#4580)
add eca042d3c fix(cluster): keep the selected instance when the display
language changes (#4590)
add af47c9697 fix(consumer): refresh the subscription verdict on the 2s
modal auto-refresh (#4593)
add d8157bf68 fix(clients): reset the text search and type filter when the
nameserver changes (#4595)
add fd3776615 fix(topic): reload the paginated inventory after importing
topics (#4602)
add 971a4d17d fix(consumer): keep a failed progress read out of the empty
and healthy states (#4604)
add 042b50d98 fix(message): record direct-consume audit failures as FAILED
(#4607)
add aec407743 fix(ai): seed the run id on attach so stop works after a
reconnect (#4613)
add 91bebfe44 fix(studio): localize the user management page (#4621)
add 480f4bca7 fix(rmqctl): fetch the confirm token after interactive
confirmation (#4623)
add 84174f0c1 fix(rmqctl): align install.sh with the actual release
artifacts (#4625)
add 7a1b8eeb4 fix(rmqctl): ignore non-positive --timeout instead of
failing every request (#4627)
add da43b1ea0 fix(studio): localize the remaining hardcoded strings on
Ops, BrokerCluster and AlertRuleAssets (#4629)
add 114656085 fix(ai): drop superseded LLM runtime responses instead of
letting them repopulate the state (#4631)
add b0b0e176f fix(web): localize the remaining hardcoded strings on the
message page (#4633)
add d388bc43d fix(metrics): keep the current data source when cancelling
the auth dialog (#4643)
add 1b9374b7f fix(rmqctl): escape control characters in table cell output
(#4661)
add 02d81ec28 fix(ai): retry a turn whose remembered agent session is gone
(#4693)
add 930e27df5 fix(ai): attach only the run of the conversation on screen
(#4696)
add c55a45244 fix(studio): keep a failed Ops load out of the
unsupported-cluster state (#4698)
add 71ffb696a fix(deliveries): offer a retry when the instance filter
cannot load (#4700)
add 96c484637 docs: correct the audit result values in the API spec (#4709)
add ef9b98269 fix: prevent unread badge from inflating when streaming
fails (#4715)
add ef5b203c3 fix(deploy): use gmt_create in the nameserver unique-key
migration (#4721)
add 3945f6d44 docs: align the ACL section of the API spec with the
controller (#4723)
add 4cbc45120 docs: align the instance section of the API spec with
InstanceType (#4725)
add cd6bec037 docs: list the enum values the API actually defines (#4727)
add 148cb694d docs: sync the Chinese README login description with the
code (#4729)
add 552409185 fix(web): key the protocol tag map by the values the API
returns (#4741)
add 4c697f07a fix(web): prefix CSV downloads with a UTF-8 BOM (#4743)
add 1ef5d8607 fix(studio): repair MCP tool gating, smooth AI streaming,
and polish console surfaces (#4855)
add b42a6ed1b feat(studio): enforce resource ownership isolation for open
source instances (#5006)
add 0228dad5b chore(studio): 3.0.0 release readiness (#5007)
add 587c2770b chore(deps-dev): bump browserslist from 4.28.4 to 4.29.0 in
/web
This update added new revisions after undoing existing revisions.
That is to say, some revisions that were in the old version of the
branch are not in the new version. This situation occurs
when a user --force pushes a change and generates a repository
containing something like this:
* -- * -- B -- O -- O -- O (1b9c0d432)
\
N -- N -- N
refs/heads/dependabot/npm_and_yarn/web/browserslist-4.29.0 (587c2770b)
You should already have received notification emails for all of the O
revisions, and so the following emails describe only the N revisions
from the common base, B.
Any revisions marked "omit" are not gone; other references still
refer to them. Any revisions marked "discard" are gone forever.
No new revisions were added by this update.
Summary of changes:
.claude/skills/deploy-rocketmq/SKILL.md | 22 +
.dockerignore | 60 +
.github/ISSUE_TEMPLATE/bug_report.yml | 141 ++
.github/ISSUE_TEMPLATE/config.yml | 25 +
.github/ISSUE_TEMPLATE/doc.yml | 70 +
.github/ISSUE_TEMPLATE/enhancement_request.yml | 91 ++
.github/ISSUE_TEMPLATE/feature_request.yml | 82 +
.github/PULL_REQUEST_TEMPLATE.md | 29 +
.github/workflows/ci.yml | 66 +-
.gitignore | 4 +
CONTRIBUTING.md | 217 +++
LICENSE | 15 +-
NOTICE | 11 +-
README.md | 97 +-
README_zh.md | 96 +-
deploy/.env.example | 77 +
deploy/deploy.sh | 10 +-
deploy/docker-compose.yml | 41 +-
deploy/mysql/upgrade-nameserver-name-uk.sql | 8 +-
deploy/rocketmq/README.md | 3 +-
deploy/rocketmq/conf/broker-0.conf | 2 +-
deploy/rocketmq/conf/broker-1.conf | 2 +-
deploy/rocketmq/conf/rmq-proxy.json | 2 +-
deploy/rocketmq/docker-compose.yml | 8 +-
docs/ai-agent-architecture.md | 254 +++
docs/api-spec.md | 587 ++++++-
rmqctl/Makefile | 25 +-
rmqctl/cmd/app.go | 2 +-
rmqctl/cmd/app_test.go | 62 +-
rmqctl/cmd/catalog.go | 14 +-
rmqctl/cmd/mcp_config_golden_test.go | 147 ++
rmqctl/install.sh | 8 +-
rmqctl/internal/catalog/catalog_gen.go | 17 +-
rmqctl/internal/output/output.go | 5 +-
rmqctl/internal/output/output_test.go | 24 +
rmqctl/internal/studio/auth.go | 18 +-
rmqctl/internal/studio/client.go | 14 +-
rmqctl/internal/studio/client_test.go | 78 +
rmqctl/internal/studio/mcp_http_test.go | 2 +-
.../studio/testdata/auth-hmac-vectors.json | 12 +-
rmqctl/internal/studio/tools_test.go | 26 +-
rmqctl/scripts/build-windows.ps1 | 94 ++
rmqctl/scripts/license-binary.go | 281 ++++
rmqctl/scripts/license-binary_test.go | 129 ++
rmqctl/scripts/package-release.sh | 47 +-
server/Dockerfile | 149 +-
server/LICENSE | 2 +-
server/NOTICE | 6 +-
server/pom.xml | 83 +-
server/scripts/legal.py | 310 ++++
server/scripts/legal_test.py | 114 ++
.../rocketmq/studio/auth/AuthInterceptor.java | 32 +-
.../apache/rocketmq/studio/auth/AuthService.java | 19 +-
.../studio/cluster/client/ClientProvider.java | 6 +
.../studio/cluster/client/ClientService.java | 5 +-
.../cluster/client/ProducerConnectionResultVO.java | 19 +-
.../client/ProducerConnectionScanResult.java | 41 +
.../cluster/client/ProducerConnectionService.java | 9 +-
.../client/ProducerConnectionSummaryVO.java | 26 +-
.../studio/cluster/client/ProducerController.java | 3 +-
.../rocketmq/studio/cluster/k8s/CreateCertDTO.java | 2 +
.../rocketmq/studio/cluster/k8s/K8sCertVO.java | 2 +
.../studio/cluster/metrics/MetricsService.java | 26 +-
.../ApacheRocketMqBusinessMetricsCollector.java | 56 +-
.../ApacheRocketMqClusterMetricsCollector.java | 24 +-
.../nameserver/NameserverRegistryService.java | 39 +
.../cluster/nameserver/NamesrvAddrParser.java | 6 +-
.../rocketmq/studio/common/config/CorsConfig.java | 6 +-
.../studio/common/util/MessagePropertyDisplay.java | 31 +-
.../rocketmq/studio/instance/InstanceService.java | 47 +-
.../instance/MybatisPlusInstanceRepository.java | 18 +-
.../studio/instance/ResourceOwnershipGuard.java | 287 ++++
.../instance/ResourceOwnershipSchemaMigration.java | 153 ++
.../studio/instance/dlq/DLQMessageExcelRow.java | 3 +
.../rocketmq/studio/instance/dlq/DLQService.java | 8 +
.../studio/instance/group/ConsumerGroupVO.java | 1 +
.../instance/group/DeleteConsumerGroupDTO.java | 1 +
.../studio/instance/message/MessageService.java | 63 +-
.../studio/instance/topic/DeleteTopicDTO.java | 1 +
.../studio/instance/topic/LiteTopicController.java | 2 +-
.../studio/instance/topic/LiteTopicService.java | 18 +-
.../instance/topic/LiteTopicTTLUpdateDTO.java | 2 +
.../studio/instance/topic/MetadataService.java | 136 +-
.../rocketmq/studio/ops/ai/AgentProvider.java | 46 +-
.../rocketmq/studio/ops/ai/AiController.java | 44 -
.../rocketmq/studio/ops/ai/AiExecuteResultVO.java | 31 -
.../rocketmq/studio/ops/ai/AiPayloadGuard.java | 44 +-
.../apache/rocketmq/studio/ops/ai/AiService.java | 73 -
.../org/apache/rocketmq/studio/ops/ai/ChatDTO.java | 35 -
.../studio/ops/ai/ClaudeCodeAgentProvider.java | 373 ++++-
.../studio/ops/ai/ClaudeCodeStreamParser.java | 712 ++++++++
.../rocketmq/studio/ops/ai/CliAgentProvider.java | 30 +-
.../studio/ops/ai/CliProcessEnvironment.java | 51 +-
.../rocketmq/studio/ops/ai/LlmConfigService.java | 5 +
.../apache/rocketmq/studio/ops/ai/LlmGateway.java | 26 -
.../rocketmq/studio/ops/ai/LlmProperties.java | 2 +
.../rocketmq/studio/ops/ai/LlmSseSession.java | 129 --
.../rocketmq/studio/ops/ai/McpServerRegistry.java | 36 -
.../studio/ops/ai/OpenAiCompatibleLlmGateway.java | 377 -----
.../rocketmq/studio/ops/ai/ToolController.java | 5 +-
.../studio/ops/ai/auth/McpAuthenticator.java | 54 +-
.../studio/ops/ai/conversation/AbortReason.java | 84 +
.../studio/ops/ai/conversation/AgentRunHandle.java | 354 ++++
.../ops/ai/conversation/AgentRunRegistry.java | 215 +++
.../ops/ai/conversation/AgentStreamSession.java | 385 +++++
.../ai/conversation/AiConversationController.java | 415 +++++
.../ai/conversation/AiConversationProperties.java | 74 +
.../ai/conversation/AiConversationRepository.java | 60 +
.../AiConversationSchemaMigration.java | 209 +++
.../ops/ai/conversation/AiConversationService.java | 549 +++++++
.../ai/conversation/AiConversationVoAssembler.java | 253 +++
.../studio/ops/ai/conversation/AiEventCodec.java | 91 ++
.../ops/ai/conversation/AiEventRepository.java | 48 +
.../studio/ops/ai/conversation/AiEventSink.java | 487 ++++++
.../studio/ops/ai/conversation/AiRunExecutor.java | 749 +++++++++
.../ops/ai/conversation/AiRunRepository.java | 66 +
.../studio/ops/ai/conversation/AiRunService.java | 596 +++++++
.../MybatisPlusAiConversationRepository.java | 132 ++
.../conversation/MybatisPlusAiEventRepository.java | 91 ++
.../conversation/MybatisPlusAiRunRepository.java | 184 +++
.../conversation/agent/AgentCapabilityProbe.java | 132 ++
.../ai/conversation/agent/AgentStreamOptions.java | 136 ++
.../ops/ai/conversation/agent/CliBinaryProbe.java | 111 ++
.../agent/InstanceCredentialResolver.java | 167 ++
.../ops/ai/conversation/agent/PromptEnhancer.java | 140 ++
.../ops/ai/conversation/agent/ResumeRecovery.java | 101 ++
.../ops/ai/conversation/agent/RmqctlWorkspace.java | 683 ++++++++
.../conversation/dto/AiConversationCreateDTO.java} | 29 +-
.../conversation/dto/AiConversationUpdateDTO.java} | 18 +-
.../ops/ai/conversation/dto/AiMessageDTO.java | 65 +
.../conversation/dto/ReportRunSpeedDTO.java} | 19 +-
.../ops/ai/conversation/event/AgentEvent.java | 102 ++
.../ai/conversation/event/AgentEventProjector.java | 515 ++++++
.../ops/ai/conversation/event/LiveEvent.java | 102 ++
.../ops/ai/conversation/event/RunStatus.java | 55 +
.../ops/ai/conversation/event/StopReason.java | 55 +
.../ops/ai/conversation/event/ThinkingSource.java | 65 +
.../ops/ai/conversation/event/TimelineEvent.java | 110 ++
.../ai/conversation/vo/AiActiveRunRef.java} | 28 +-
.../ai/conversation/vo/AiAgentCapabilitiesVO.java} | 31 +-
.../ai/conversation/vo/AiConversationDetailVO.java | 45 +
.../vo/AiConversationListItemVO.java} | 33 +-
.../ops/ai/conversation/vo/AiConversationVO.java | 66 +
.../ai/conversation/vo/AiRmqctlConfigVO.java} | 27 +-
.../ai/conversation/vo/AiRunStatsVO.java} | 24 +-
.../studio/ops/ai/conversation/vo/AiRunVO.java | 59 +
.../ai/conversation/vo/AiTimelineItemVO.java} | 31 +-
.../ai/conversation/vo/AiTimelineVO.java} | 23 +-
.../ai/tool/contract/group/GroupDetailOutput.java | 1 +
.../ops/ai/tool/contract/group/GroupListItem.java | 1 +
.../contract/message/MessageQueryByTopicInput.java | 16 +-
.../tool/contract/message/MessageQueryInput.java | 16 +-
.../tool/contract/message/MessageQueryOutput.java | 81 +
.../tool/contract/message/MessageTraceInput.java | 7 +-
.../studio/ops/ai/tool/core/ToolError.java | 4 +-
.../studio/ops/ai/tool/filter/ToolAuditFilter.java | 21 +-
.../ops/ai/tool/filter/ToolCapabilityFilter.java | 20 +
.../tool/handler/group/GroupDetailToolHandler.java | 7 +-
.../message/MessageQueryByTopicToolHandler.java | 16 +-
.../handler/message/MessageQueryToolHandler.java | 28 +-
.../handler/message/MessageSendToolHandler.java | 2 +
.../handler/message/MessageTraceToolHandler.java | 8 +-
.../ops/ai/tool/service/ToolExecutionService.java | 51 +-
.../ops/alert/MybatisPlusAlertStateRepository.java | 2 +-
.../studio/ops/alert/NativeAlertProcessor.java | 3 +-
.../ops/alert/NativeAlertRuleTestService.java | 6 +
.../ops/alert/NotificationOutboxService.java | 4 +-
.../rocketmq/studio/ops/audit/AuditService.java | 16 +-
.../persistence/MybatisPlusSettingsRepository.java | 2 +-
.../{RmqTopic.java => RmqAiConversation.java} | 31 +-
.../entity/{RmqInstance.java => RmqAiEvent.java} | 32 +-
.../{RmqOperationAudit.java => RmqAiRun.java} | 43 +-
.../persistence/entity/RmqK8sCertificate.java | 2 +
...uleMapper.java => RmqAiConversationMapper.java} | 4 +-
...RmqAclRuleMapper.java => RmqAiEventMapper.java} | 4 +-
.../{RmqGroupMapper.java => RmqAiRunMapper.java} | 4 +-
.../studio/provider/InstanceCapability.java | 1 +
.../rocketmq/studio/provider/InstanceProvider.java | 34 +
.../studio/provider/LiteTopicProvider.java | 6 +
.../provider/alibaba/AliyunInstanceProvider.java | 30 +
.../studio/provider/apache/AdminClient.java | 2 +
.../provider/apache/ApacheInstanceProvider.java | 43 +
.../provider/apache/ApacheWriteTargetResolver.java | 109 ++
.../provider/apache/ProxyConsumerResolver.java | 94 +-
.../provider/apache/RocketMQAdminClientImpl.java | 444 +++--
.../provider/apache/RocketMQClientProvider.java | 53 +-
.../provider/apache/RocketMQLiteTopicProvider.java | 105 +-
.../provider/apache/RocketMQMessageProvider.java | 139 +-
.../provider/apache/RocketMQMetadataProvider.java | 125 +-
.../studio/provider/tencent/TencentAclService.java | 53 +-
.../provider/tencent/TencentCatalogService.java | 23 +-
.../provider/tencent/TencentInstanceProvider.java | 71 +-
server/src/main/resources/application.yml | 70 +-
server/src/main/resources/db/schema.sql | 106 +-
.../main/resources/prompts/agent-system-prompt.txt | 29 +
.../main/resources/tool-catalog/tools/group.yaml | 7 +-
.../main/resources/tool-catalog/tools/message.yaml | 41 +-
.../main/resources/tool-catalog/tools/proxy.yaml | 6 +-
.../rocketmq/studio/auth/AuthInterceptorTest.java | 118 ++
.../AuthPasswordChangeStatusIntegrationTest.java | 110 ++
.../studio/auth/AuthServiceDatabaseTest.java | 48 +
.../AuthServiceSessionOverviewIntegrationTest.java | 10 +-
.../rocketmq/studio/auth/AuthServiceTest.java | 2 +-
.../studio/cluster/client/ClientServiceTest.java | 28 +-
.../client/ProducerConnectionServiceTest.java | 60 +-
.../client/ProducerConnectionSummaryVOTest.java | 9 +
.../cluster/client/ProducerControllerTest.java | 30 +-
.../k8s/K8sCertificateSecretRedactionTest.java | 62 +
.../studio/cluster/metrics/MetricsServiceTest.java | 77 +
...ApacheRocketMqBusinessMetricsCollectorTest.java | 37 +
.../ApacheRocketMqClusterMetricsCollectorTest.java | 33 +
.../nameserver/NameserverRegistryServiceTest.java | 122 +-
.../cluster/nameserver/NamesrvAddrParserTest.java | 12 +
.../studio/common/config/CorsConfigTest.java | 17 +
.../common/util/MessagePropertyDisplayTest.java | 54 +
.../studio/instance/InstanceServiceTest.java | 140 ++
.../MybatisPlusInstanceRepositoryTest.java | 56 +
.../instance/ResourceOwnershipGuardTest.java | 685 ++++++++
.../instance/dlq/DLQMessageExcelRowTest.java | 71 +
.../studio/instance/dlq/DLQServiceTest.java | 31 +
.../group/ConsumerGroupControllerTest.java | 26 +-
.../instance/message/MessageServiceTest.java | 121 +-
.../instance/topic/LiteTopicControllerTest.java | 25 +-
.../instance/topic/LiteTopicServiceTest.java | 36 +-
.../studio/instance/topic/MetadataServiceTest.java | 271 ++--
.../studio/instance/topic/TopicControllerTest.java | 25 +-
.../rocketmq/studio/ops/ai/AiControllerTest.java | 55 -
.../rocketmq/studio/ops/ai/AiPayloadGuardTest.java | 25 +-
.../rocketmq/studio/ops/ai/AiServiceTest.java | 187 ---
.../studio/ops/ai/ClaudeCodeAgentProviderTest.java | 304 ++++
.../studio/ops/ai/ClaudeCodeStreamParserTest.java | 653 ++++++++
.../studio/ops/ai/CliAgentProviderTest.java | 36 +
.../studio/ops/ai/CliProcessEnvironmentTest.java | 53 +
...LlmConfigVOTest.java => LlmPropertiesTest.java} | 24 +-
.../rocketmq/studio/ops/ai/LlmSseSessionTest.java | 130 --
.../ops/ai/OpenAiCompatibleLlmGatewayTest.java | 402 -----
.../studio/ops/ai/QoderAgentProviderTest.java | 23 +
.../rocketmq/studio/ops/ai/ToolControllerTest.java | 28 +-
.../ai/conversation/AgentRunHandleStopTest.java | 369 +++++
.../ops/ai/conversation/AgentRunRegistryTest.java | 264 +++
.../conversation/AiConversationControllerTest.java | 645 ++++++++
.../AiConversationPersistenceIntegrationTest.java | 521 ++++++
.../AiConversationSchemaMigrationTest.java | 231 +++
.../ai/conversation/AiConversationServiceTest.java | 442 +++++
.../AiConversationVoAssemblerTest.java | 666 ++++++++
.../ai/conversation/AiEventSeqAllocationTest.java | 320 ++++
.../ops/ai/conversation/AiRunExecutorTest.java | 617 +++++++
.../ops/ai/conversation/AiRunServiceTest.java | 561 +++++++
.../ops/ai/conversation/AiRunTestSupport.java | 365 +++++
.../ai/conversation/AiStreamControllerTest.java | 403 +++++
.../ai/conversation/AiTimelineRepositoryTest.java | 807 +++++++++
.../agent/InstanceCredentialResolverTest.java | 268 +++
.../ai/conversation/agent/RmqctlWorkspaceTest.java | 600 +++++++
.../event/AgentEventProjectorTest.java | 589 +++++++
.../ops/ai/conversation/event/AiEventCodecs.java | 109 ++
.../ai/conversation/event/AiEventContractTest.java | 526 ++++++
.../event/AiEventJsonSerializationTest.java | 453 ++++++
.../studio/ops/ai/mcp/McpToolRegistrarTest.java | 108 ++
.../ops/ai/tool/MessageTraceToolHandlerTest.java | 32 +
.../ops/ai/tool/catalog/ToolCatalogTest.java | 62 +
.../group/ConsumerGroupReadToolHandlersTest.java | 17 +
.../MessageQueryByTopicToolHandlerTest.java | 98 +-
.../message/MessageQueryToolHandlerTest.java | 171 +-
.../message/MessageSendToolHandlerTest.java | 17 +
.../ai/tool/service/ToolInstanceBindingTest.java | 317 ++++
.../ai/tool/service/ToolInstanceRoutingTest.java | 3 +-
.../tool/service/ToolOutputSchemaContractTest.java | 38 +-
.../alert/MybatisPlusAlertStateRepositoryTest.java | 29 +
.../studio/ops/alert/NativeAlertProcessorTest.java | 68 +
.../ops/alert/NativeAlertRuleTestServiceTest.java | 20 +
.../ops/alert/NotificationOutboxServiceTest.java | 38 +
.../studio/ops/audit/AuditServiceTest.java | 47 +
.../alibaba/AliyunInstanceProviderTest.java | 51 +
.../apache/ApacheInstanceProviderTest.java | 54 +
.../provider/apache/ProxyConsumerResolverTest.java | 57 +-
.../apache/RocketMQAdminClientImplTest.java | 327 +++-
.../apache/RocketMQClientProviderTest.java | 78 +-
.../apache/RocketMQLiteTopicProviderTest.java | 141 +-
.../apache/RocketMQMessageProviderTest.java | 126 +-
.../apache/RocketMQMetadataProviderTest.java | 89 +-
.../provider/tencent/TencentAclServiceTest.java | 74 +
.../tencent/TencentCatalogServiceTest.java | 42 +
.../tencent/TencentInstanceProviderTest.java | 82 +
server/src/test/resources/ai/agent-notices.txt | 26 +
.../src/test/resources/ai/ai-event-contract.json | 263 +++
.../ai/claude-stream-capture-mcp-failed.jsonl | 196 +++
.../test/resources/ai/claude-stream-capture.jsonl | 278 ++++
web/Dockerfile | 18 +
web/LICENSE | 15 +-
web/NOTICE | 11 +-
web/licenses/toggle-selection-1.0.6/LICENSE | 21 +
web/nginx.conf | 33 +-
web/nginx_contract_test.sh | 23 +-
web/package-lock.json | 30 +-
web/package.json | 7 +-
.../TopicPerm.java => web/scripts/licenses.d.mts | 8 +-
web/scripts/licenses.mjs | 247 +++
web/scripts/licenses.test.mjs | 98 ++
web/src/App.test.tsx | 47 +-
web/src/App.tsx | 1 +
web/src/api/ai.test.ts | 521 ++++--
web/src/api/ai.ts | 372 +++--
web/src/api/aiConversations.test.ts | 299 ++++
web/src/api/aiConversations.ts | 263 +++
web/src/api/aiEvents.contract.test.ts | 706 ++++++++
web/src/api/aiEvents.optionalFields.test.ts | 640 ++++++++
web/src/api/aiEvents.ts | 371 +++++
web/src/api/client.ts | 2 -
web/src/api/cluster.ts | 4 -
web/src/api/instance.ts | 1 +
web/src/api/metadata.ts | 1 +
web/src/api/producer.test.ts | 17 +
web/src/api/producer.ts | 38 +-
web/src/assets/model-logos/LICENSE | 21 +
web/src/assets/model-logos/baichuan-color.svg | 1 +
web/src/assets/model-logos/chatglm-color.svg | 1 +
web/src/assets/model-logos/claude-color.svg | 1 +
web/src/assets/model-logos/deepseek-color.svg | 1 +
web/src/assets/model-logos/doubao-color.svg | 1 +
web/src/assets/model-logos/gemini-color.svg | 1 +
web/src/assets/model-logos/grok.svg | 1 +
web/src/assets/model-logos/hunyuan-color.svg | 1 +
web/src/assets/model-logos/kimi-color.svg | 1 +
web/src/assets/model-logos/metaai-color.svg | 1 +
web/src/assets/model-logos/minimax-color.svg | 1 +
web/src/assets/model-logos/mistral-color.svg | 1 +
web/src/assets/model-logos/moonshot.svg | 1 +
web/src/assets/model-logos/ollama.svg | 1 +
web/src/assets/model-logos/openai.svg | 1 +
web/src/assets/model-logos/qwen-color.svg | 1 +
web/src/assets/model-logos/spark-color.svg | 1 +
web/src/components/AlertRuleAssetList.tsx | 19 +
web/src/components/GrafanaDashboardList.tsx | 19 +
web/src/components/MetricsExplorer.tsx | 19 +-
web/src/components/MiniBar.tsx | 14 +-
web/src/components/QueueBrowser.tsx | 6 +-
.../__tests__/AlertRuleAssetList.test.tsx | 22 +
.../__tests__/GrafanaDashboardList.test.tsx | 28 +
.../components/__tests__/MetricsExplorer.test.tsx | 75 +
web/src/components/__tests__/MiniBar.test.tsx | 51 +-
web/src/components/__tests__/QueueBrowser.test.tsx | 31 +
web/src/constants/__tests__/theme.test.ts | 7 +
web/src/constants/theme.ts | 4 +-
web/src/i18n/translations.ts | 661 +++++++-
web/src/index.css | 108 +-
web/src/layouts/MainLayout.test.tsx | 7 +-
web/src/layouts/MainLayout.tsx | 343 ++--
web/src/mock/consumers.ts | 82 +-
web/src/pages/ai/__tests__/AiMessage.test.tsx | 68 -
web/src/pages/ai/__tests__/AiPage.test.tsx | 842 +++++-----
web/src/pages/ai/chatDraft.test.ts | 85 +-
web/src/pages/ai/chatDraft.ts | 70 +-
web/src/pages/ai/components/AssistantBubble.tsx | 310 ++++
web/src/pages/ai/components/BubbleList.tsx | 143 ++
web/src/pages/ai/components/ChatThread.tsx | 261 +++
web/src/pages/ai/components/Composer.tsx | 578 +++++++
.../pages/ai/components/ConversationListModal.tsx | 526 ++++++
web/src/pages/ai/components/ModelBadge.tsx | 132 ++
.../pages/ai/components/PromptTemplateModal.tsx | 382 +++++
web/src/pages/ai/components/RuntimeNotices.tsx | 79 +
web/src/pages/ai/components/SendStopButton.tsx | 94 ++
.../pages/ai/components/ToolPlaygroundModal.tsx | 348 ++++
web/src/pages/ai/components/UserBubble.tsx | 102 ++
web/src/pages/ai/components/WelcomeStarters.tsx | 170 ++
.../components/__tests__/AssistantBubble.test.tsx | 399 +++++
.../ai/components/__tests__/ChatThread.test.tsx | 330 ++++
.../ai/components/__tests__/Composer.test.tsx | 303 ++++
.../__tests__/ConversationListModal.test.tsx | 509 ++++++
.../components/__tests__/SendStopButton.test.tsx | 149 ++
.../ai/components/__tests__/ToolBlock.test.tsx | 146 ++
web/src/pages/ai/components/blocks/ErrorBlock.tsx | 66 +
web/src/pages/ai/components/blocks/NoticeBlock.tsx | 51 +
web/src/pages/ai/components/blocks/TextBlock.tsx | 50 +
.../pages/ai/components/blocks/ThinkingBlock.tsx | 116 ++
web/src/pages/ai/components/blocks/ToolBlock.tsx | 265 +++
web/src/pages/ai/hooks/useActiveRunAttach.test.ts | 77 +
web/src/pages/ai/hooks/useActiveRunAttach.ts | 60 +
web/src/pages/ai/hooks/useAgentCapabilities.ts | 49 +
web/src/pages/ai/hooks/useAgentRun.test.ts | 497 ++++++
web/src/pages/ai/hooks/useAgentRun.ts | 470 ++++++
web/src/pages/ai/hooks/useAiSend.ts | 149 ++
web/src/pages/ai/hooks/useComposerDraft.ts | 75 +
web/src/pages/ai/hooks/useConversationList.test.ts | 185 +++
web/src/pages/ai/hooks/useConversationList.ts | 139 ++
.../pages/ai/hooks/useConversationTimeline.test.ts | 243 +++
web/src/pages/ai/hooks/useConversationTimeline.ts | 217 +++
web/src/pages/ai/hooks/useDraftHandoff.ts | 127 ++
web/src/pages/ai/hooks/useLlmRuntime.test.ts | 136 ++
web/src/pages/ai/hooks/useLlmRuntime.ts | 148 ++
web/src/pages/ai/index.tsx | 1716 +++-----------------
web/src/pages/ai/pageStyle.ts | 45 +
web/src/pages/ai/promptTemplates.test.ts | 17 +
web/src/pages/ai/promptTemplates.ts | 37 +-
.../pages/ai/render/__tests__/streamSpeed.test.ts | 70 +
web/src/pages/ai/render/blocks.ts | 239 +++
web/src/pages/ai/render/equivalence.test.ts | 772 +++++++++
web/src/pages/ai/render/foldTimeline.ts | 343 ++++
web/src/pages/ai/render/markdown.ts | 35 +
web/src/pages/ai/render/reduceLive.ts | 76 +
web/src/pages/ai/render/streamSpeed.ts | 69 +
.../pages/cluster/__tests__/ClientsPage.test.tsx | 60 +-
.../pages/cluster/__tests__/ClusterPage.test.tsx | 211 ++-
web/src/pages/cluster/clients.tsx | 56 +-
web/src/pages/cluster/index.tsx | 258 ++-
.../pages/home/__tests__/DashboardPage.test.tsx | 10 +-
web/src/pages/home/__tests__/HomePage.test.tsx | 34 +-
web/src/pages/home/index.tsx | 247 +--
web/src/pages/instance/__tests__/AclPage.test.tsx | 40 +-
.../pages/instance/__tests__/ConsumerPage.test.tsx | 217 ++-
.../__tests__/ConsumerPageDiagnosticsRace.test.tsx | 166 ++
web/src/pages/instance/__tests__/DLQPage.test.tsx | 128 +-
.../pages/instance/__tests__/InstancePage.test.tsx | 46 +-
.../pages/instance/__tests__/MessagePage.test.tsx | 81 +-
.../__tests__/MessagePageAsyncState.test.tsx | 36 +-
.../pages/instance/__tests__/TopicPage.test.tsx | 225 ++-
web/src/pages/instance/acl.tsx | 4 +-
web/src/pages/instance/consumer.tsx | 93 +-
web/src/pages/instance/dlq.tsx | 60 +-
web/src/pages/instance/index.tsx | 2 +-
web/src/pages/instance/message.tsx | 258 +--
web/src/pages/instance/topic.tsx | 80 +-
web/src/pages/login/index.css | 299 ++--
web/src/pages/login/index.tsx | 135 +-
web/src/pages/ops/__tests__/AlertsPage.test.tsx | 106 ++
web/src/pages/ops/__tests__/AuditPage.test.tsx | 21 +-
.../__tests__/NotificationDeliveriesPage.test.tsx | 30 +-
.../pages/ops/__tests__/SystemAlertsPage.test.tsx | 32 +
web/src/pages/ops/alerts.tsx | 38 +-
web/src/pages/ops/audit.tsx | 20 +-
web/src/pages/ops/notificationDeliveries.tsx | 32 +-
web/src/pages/ops/systemAlerts.tsx | 8 +-
web/src/pages/settings/AboutTab.tsx | 4 +-
web/src/pages/studio/AlertRuleAssets.tsx | 2 +-
web/src/pages/studio/BrokerCluster.tsx | 10 +-
web/src/pages/studio/Ops.tsx | 35 +-
web/src/pages/studio/Producer.tsx | 21 +-
web/src/pages/studio/UserManagement.tsx | 289 ++--
.../__tests__/BrokerClusterInstanceScope.test.tsx | 185 +++
web/src/pages/studio/__tests__/Ops.test.tsx | 18 +
web/src/pages/studio/__tests__/Producer.test.tsx | 45 +
.../pages/studio/__tests__/UserManagement.test.tsx | 59 +-
web/src/services/consumerService.test.ts | 40 +-
web/src/services/consumerService.ts | 6 +-
web/src/stores/aiChatHistoryStore.test.ts | 205 ---
web/src/stores/aiChatHistoryStore.ts | 308 ----
web/src/test/setup.test.ts | 134 ++
web/src/test/setup.ts | 54 +-
web/src/utils/alertTemplatePreview.test.ts | 24 +
web/src/utils/alertTemplatePreview.ts | 6 +-
web/src/utils/apiError.ts | 15 +
web/src/utils/consumerConnections.test.ts | 51 +
web/src/utils/consumerConnections.ts | 35 +
web/src/utils/consumerGroupDiagnostics.test.ts | 12 +
web/src/utils/consumerGroupDiagnostics.ts | 18 +-
web/src/utils/download.test.ts | 36 +-
web/src/utils/download.ts | 6 +-
web/src/utils/format.test.ts | 7 +
web/src/utils/format.ts | 21 +-
web/src/utils/messageTraceDiagnostics.test.ts | 51 +-
web/src/utils/messageTraceDiagnostics.ts | 137 +-
web/vite.config.ts | 21 +-
461 files changed, 48445 insertions(+), 7168 deletions(-)
create mode 100644 .dockerignore
create mode 100644 .github/ISSUE_TEMPLATE/bug_report.yml
create mode 100644 .github/ISSUE_TEMPLATE/config.yml
create mode 100644 .github/ISSUE_TEMPLATE/doc.yml
create mode 100644 .github/ISSUE_TEMPLATE/enhancement_request.yml
create mode 100644 .github/ISSUE_TEMPLATE/feature_request.yml
create mode 100644 .github/PULL_REQUEST_TEMPLATE.md
create mode 100644 CONTRIBUTING.md
create mode 100644 docs/ai-agent-architecture.md
create mode 100644 rmqctl/cmd/mcp_config_golden_test.go
create mode 100644 rmqctl/internal/studio/client_test.go
create mode 100644 rmqctl/scripts/build-windows.ps1
create mode 100644 rmqctl/scripts/license-binary.go
create mode 100644 rmqctl/scripts/license-binary_test.go
create mode 100644 server/scripts/legal.py
create mode 100644 server/scripts/legal_test.py
create mode 100644
server/src/main/java/org/apache/rocketmq/studio/cluster/client/ProducerConnectionScanResult.java
create mode 100644
server/src/main/java/org/apache/rocketmq/studio/instance/ResourceOwnershipGuard.java
create mode 100644
server/src/main/java/org/apache/rocketmq/studio/instance/ResourceOwnershipSchemaMigration.java
delete mode 100644
server/src/main/java/org/apache/rocketmq/studio/ops/ai/AiController.java
delete mode 100644
server/src/main/java/org/apache/rocketmq/studio/ops/ai/AiExecuteResultVO.java
delete mode 100644
server/src/main/java/org/apache/rocketmq/studio/ops/ai/AiService.java
delete mode 100644
server/src/main/java/org/apache/rocketmq/studio/ops/ai/ChatDTO.java
create mode 100644
server/src/main/java/org/apache/rocketmq/studio/ops/ai/ClaudeCodeStreamParser.java
delete mode 100644
server/src/main/java/org/apache/rocketmq/studio/ops/ai/LlmGateway.java
delete mode 100644
server/src/main/java/org/apache/rocketmq/studio/ops/ai/LlmSseSession.java
delete mode 100644
server/src/main/java/org/apache/rocketmq/studio/ops/ai/McpServerRegistry.java
delete mode 100644
server/src/main/java/org/apache/rocketmq/studio/ops/ai/OpenAiCompatibleLlmGateway.java
create mode 100644
server/src/main/java/org/apache/rocketmq/studio/ops/ai/conversation/AbortReason.java
create mode 100644
server/src/main/java/org/apache/rocketmq/studio/ops/ai/conversation/AgentRunHandle.java
create mode 100644
server/src/main/java/org/apache/rocketmq/studio/ops/ai/conversation/AgentRunRegistry.java
create mode 100644
server/src/main/java/org/apache/rocketmq/studio/ops/ai/conversation/AgentStreamSession.java
create mode 100644
server/src/main/java/org/apache/rocketmq/studio/ops/ai/conversation/AiConversationController.java
create mode 100644
server/src/main/java/org/apache/rocketmq/studio/ops/ai/conversation/AiConversationProperties.java
create mode 100644
server/src/main/java/org/apache/rocketmq/studio/ops/ai/conversation/AiConversationRepository.java
create mode 100644
server/src/main/java/org/apache/rocketmq/studio/ops/ai/conversation/AiConversationSchemaMigration.java
create mode 100644
server/src/main/java/org/apache/rocketmq/studio/ops/ai/conversation/AiConversationService.java
create mode 100644
server/src/main/java/org/apache/rocketmq/studio/ops/ai/conversation/AiConversationVoAssembler.java
create mode 100644
server/src/main/java/org/apache/rocketmq/studio/ops/ai/conversation/AiEventCodec.java
create mode 100644
server/src/main/java/org/apache/rocketmq/studio/ops/ai/conversation/AiEventRepository.java
create mode 100644
server/src/main/java/org/apache/rocketmq/studio/ops/ai/conversation/AiEventSink.java
create mode 100644
server/src/main/java/org/apache/rocketmq/studio/ops/ai/conversation/AiRunExecutor.java
create mode 100644
server/src/main/java/org/apache/rocketmq/studio/ops/ai/conversation/AiRunRepository.java
create mode 100644
server/src/main/java/org/apache/rocketmq/studio/ops/ai/conversation/AiRunService.java
create mode 100644
server/src/main/java/org/apache/rocketmq/studio/ops/ai/conversation/MybatisPlusAiConversationRepository.java
create mode 100644
server/src/main/java/org/apache/rocketmq/studio/ops/ai/conversation/MybatisPlusAiEventRepository.java
create mode 100644
server/src/main/java/org/apache/rocketmq/studio/ops/ai/conversation/MybatisPlusAiRunRepository.java
create mode 100644
server/src/main/java/org/apache/rocketmq/studio/ops/ai/conversation/agent/AgentCapabilityProbe.java
create mode 100644
server/src/main/java/org/apache/rocketmq/studio/ops/ai/conversation/agent/AgentStreamOptions.java
create mode 100644
server/src/main/java/org/apache/rocketmq/studio/ops/ai/conversation/agent/CliBinaryProbe.java
create mode 100644
server/src/main/java/org/apache/rocketmq/studio/ops/ai/conversation/agent/InstanceCredentialResolver.java
create mode 100644
server/src/main/java/org/apache/rocketmq/studio/ops/ai/conversation/agent/PromptEnhancer.java
create mode 100644
server/src/main/java/org/apache/rocketmq/studio/ops/ai/conversation/agent/ResumeRecovery.java
create mode 100644
server/src/main/java/org/apache/rocketmq/studio/ops/ai/conversation/agent/RmqctlWorkspace.java
copy
server/src/main/java/org/apache/rocketmq/studio/{instance/dlq/DLQResendSelectedRequestDTO.java
=> ops/ai/conversation/dto/AiConversationCreateDTO.java} (56%)
copy
server/src/main/java/org/apache/rocketmq/studio/{instance/message/TraceNodeVO.java
=> ops/ai/conversation/dto/AiConversationUpdateDTO.java} (65%)
create mode 100644
server/src/main/java/org/apache/rocketmq/studio/ops/ai/conversation/dto/AiMessageDTO.java
copy
server/src/main/java/org/apache/rocketmq/studio/ops/{alert/ToggleAlertRuleDTO.java
=> ai/conversation/dto/ReportRunSpeedDTO.java} (58%)
create mode 100644
server/src/main/java/org/apache/rocketmq/studio/ops/ai/conversation/event/AgentEvent.java
create mode 100644
server/src/main/java/org/apache/rocketmq/studio/ops/ai/conversation/event/AgentEventProjector.java
create mode 100644
server/src/main/java/org/apache/rocketmq/studio/ops/ai/conversation/event/LiveEvent.java
create mode 100644
server/src/main/java/org/apache/rocketmq/studio/ops/ai/conversation/event/RunStatus.java
create mode 100644
server/src/main/java/org/apache/rocketmq/studio/ops/ai/conversation/event/StopReason.java
create mode 100644
server/src/main/java/org/apache/rocketmq/studio/ops/ai/conversation/event/ThinkingSource.java
create mode 100644
server/src/main/java/org/apache/rocketmq/studio/ops/ai/conversation/event/TimelineEvent.java
copy
server/src/main/java/org/apache/rocketmq/studio/{instance/acl/AclRuleVO.java =>
ops/ai/conversation/vo/AiActiveRunRef.java} (58%)
copy
server/src/main/java/org/apache/rocketmq/studio/{instance/dlq/DLQExportResultVO.java
=> ops/ai/conversation/vo/AiAgentCapabilitiesVO.java} (51%)
create mode 100644
server/src/main/java/org/apache/rocketmq/studio/ops/ai/conversation/vo/AiConversationDetailVO.java
rename
server/src/main/java/org/apache/rocketmq/studio/ops/ai/{AiCommandDTO.java =>
conversation/vo/AiConversationListItemVO.java} (55%)
create mode 100644
server/src/main/java/org/apache/rocketmq/studio/ops/ai/conversation/vo/AiConversationVO.java
copy
server/src/main/java/org/apache/rocketmq/studio/{instance/group/ResetConsumerOffsetDTO.java
=> ops/ai/conversation/vo/AiRmqctlConfigVO.java} (61%)
copy
server/src/main/java/org/apache/rocketmq/studio/{cluster/k8s/UpdateCertDTO.java
=> ops/ai/conversation/vo/AiRunStatsVO.java} (67%)
create mode 100644
server/src/main/java/org/apache/rocketmq/studio/ops/ai/conversation/vo/AiRunVO.java
copy
server/src/main/java/org/apache/rocketmq/studio/{cluster/nameserver/NameserverRegistryVO.java
=> ops/ai/conversation/vo/AiTimelineItemVO.java} (52%)
copy
server/src/main/java/org/apache/rocketmq/studio/{instance/dlq/DLQExportResultVO.java
=> ops/ai/conversation/vo/AiTimelineVO.java} (59%)
create mode 100644
server/src/main/java/org/apache/rocketmq/studio/ops/ai/tool/contract/message/MessageQueryOutput.java
copy
server/src/main/java/org/apache/rocketmq/studio/persistence/entity/{RmqTopic.java
=> RmqAiConversation.java} (70%)
copy
server/src/main/java/org/apache/rocketmq/studio/persistence/entity/{RmqInstance.java
=> RmqAiEvent.java} (67%)
copy
server/src/main/java/org/apache/rocketmq/studio/persistence/entity/{RmqOperationAudit.java
=> RmqAiRun.java} (61%)
copy
server/src/main/java/org/apache/rocketmq/studio/persistence/mapper/{RmqAclRuleMapper.java
=> RmqAiConversationMapper.java} (85%)
copy
server/src/main/java/org/apache/rocketmq/studio/persistence/mapper/{RmqAclRuleMapper.java
=> RmqAiEventMapper.java} (87%)
copy
server/src/main/java/org/apache/rocketmq/studio/persistence/mapper/{RmqGroupMapper.java
=> RmqAiRunMapper.java} (87%)
create mode 100644
server/src/main/java/org/apache/rocketmq/studio/provider/apache/ApacheWriteTargetResolver.java
create mode 100644 server/src/main/resources/prompts/agent-system-prompt.txt
create mode 100644
server/src/test/java/org/apache/rocketmq/studio/auth/AuthPasswordChangeStatusIntegrationTest.java
create mode 100644
server/src/test/java/org/apache/rocketmq/studio/cluster/k8s/K8sCertificateSecretRedactionTest.java
create mode 100644
server/src/test/java/org/apache/rocketmq/studio/instance/ResourceOwnershipGuardTest.java
create mode 100644
server/src/test/java/org/apache/rocketmq/studio/instance/dlq/DLQMessageExcelRowTest.java
delete mode 100644
server/src/test/java/org/apache/rocketmq/studio/ops/ai/AiControllerTest.java
delete mode 100644
server/src/test/java/org/apache/rocketmq/studio/ops/ai/AiServiceTest.java
create mode 100644
server/src/test/java/org/apache/rocketmq/studio/ops/ai/ClaudeCodeStreamParserTest.java
copy
server/src/test/java/org/apache/rocketmq/studio/ops/ai/{LlmConfigVOTest.java =>
LlmPropertiesTest.java} (60%)
delete mode 100644
server/src/test/java/org/apache/rocketmq/studio/ops/ai/LlmSseSessionTest.java
delete mode 100644
server/src/test/java/org/apache/rocketmq/studio/ops/ai/OpenAiCompatibleLlmGatewayTest.java
create mode 100644
server/src/test/java/org/apache/rocketmq/studio/ops/ai/conversation/AgentRunHandleStopTest.java
create mode 100644
server/src/test/java/org/apache/rocketmq/studio/ops/ai/conversation/AgentRunRegistryTest.java
create mode 100644
server/src/test/java/org/apache/rocketmq/studio/ops/ai/conversation/AiConversationControllerTest.java
create mode 100644
server/src/test/java/org/apache/rocketmq/studio/ops/ai/conversation/AiConversationPersistenceIntegrationTest.java
create mode 100644
server/src/test/java/org/apache/rocketmq/studio/ops/ai/conversation/AiConversationSchemaMigrationTest.java
create mode 100644
server/src/test/java/org/apache/rocketmq/studio/ops/ai/conversation/AiConversationServiceTest.java
create mode 100644
server/src/test/java/org/apache/rocketmq/studio/ops/ai/conversation/AiConversationVoAssemblerTest.java
create mode 100644
server/src/test/java/org/apache/rocketmq/studio/ops/ai/conversation/AiEventSeqAllocationTest.java
create mode 100644
server/src/test/java/org/apache/rocketmq/studio/ops/ai/conversation/AiRunExecutorTest.java
create mode 100644
server/src/test/java/org/apache/rocketmq/studio/ops/ai/conversation/AiRunServiceTest.java
create mode 100644
server/src/test/java/org/apache/rocketmq/studio/ops/ai/conversation/AiRunTestSupport.java
create mode 100644
server/src/test/java/org/apache/rocketmq/studio/ops/ai/conversation/AiStreamControllerTest.java
create mode 100644
server/src/test/java/org/apache/rocketmq/studio/ops/ai/conversation/AiTimelineRepositoryTest.java
create mode 100644
server/src/test/java/org/apache/rocketmq/studio/ops/ai/conversation/agent/InstanceCredentialResolverTest.java
create mode 100644
server/src/test/java/org/apache/rocketmq/studio/ops/ai/conversation/agent/RmqctlWorkspaceTest.java
create mode 100644
server/src/test/java/org/apache/rocketmq/studio/ops/ai/conversation/event/AgentEventProjectorTest.java
create mode 100644
server/src/test/java/org/apache/rocketmq/studio/ops/ai/conversation/event/AiEventCodecs.java
create mode 100644
server/src/test/java/org/apache/rocketmq/studio/ops/ai/conversation/event/AiEventContractTest.java
create mode 100644
server/src/test/java/org/apache/rocketmq/studio/ops/ai/conversation/event/AiEventJsonSerializationTest.java
create mode 100644
server/src/test/java/org/apache/rocketmq/studio/ops/ai/tool/service/ToolInstanceBindingTest.java
create mode 100644 server/src/test/resources/ai/agent-notices.txt
create mode 100644 server/src/test/resources/ai/ai-event-contract.json
create mode 100644
server/src/test/resources/ai/claude-stream-capture-mcp-failed.jsonl
create mode 100644 server/src/test/resources/ai/claude-stream-capture.jsonl
create mode 100644 web/licenses/toggle-selection-1.0.6/LICENSE
copy
server/src/main/java/org/apache/rocketmq/studio/common/domain/enums/TopicPerm.java
=> web/scripts/licenses.d.mts (89%)
create mode 100644 web/scripts/licenses.mjs
create mode 100644 web/scripts/licenses.test.mjs
create mode 100644 web/src/api/aiConversations.test.ts
create mode 100644 web/src/api/aiConversations.ts
create mode 100644 web/src/api/aiEvents.contract.test.ts
create mode 100644 web/src/api/aiEvents.optionalFields.test.ts
create mode 100644 web/src/api/aiEvents.ts
create mode 100644 web/src/assets/model-logos/LICENSE
create mode 100644 web/src/assets/model-logos/baichuan-color.svg
create mode 100644 web/src/assets/model-logos/chatglm-color.svg
create mode 100644 web/src/assets/model-logos/claude-color.svg
create mode 100644 web/src/assets/model-logos/deepseek-color.svg
create mode 100644 web/src/assets/model-logos/doubao-color.svg
create mode 100644 web/src/assets/model-logos/gemini-color.svg
create mode 100644 web/src/assets/model-logos/grok.svg
create mode 100644 web/src/assets/model-logos/hunyuan-color.svg
create mode 100644 web/src/assets/model-logos/kimi-color.svg
create mode 100644 web/src/assets/model-logos/metaai-color.svg
create mode 100644 web/src/assets/model-logos/minimax-color.svg
create mode 100644 web/src/assets/model-logos/mistral-color.svg
create mode 100644 web/src/assets/model-logos/moonshot.svg
create mode 100644 web/src/assets/model-logos/ollama.svg
create mode 100644 web/src/assets/model-logos/openai.svg
create mode 100644 web/src/assets/model-logos/qwen-color.svg
create mode 100644 web/src/assets/model-logos/spark-color.svg
delete mode 100644 web/src/pages/ai/__tests__/AiMessage.test.tsx
create mode 100644 web/src/pages/ai/components/AssistantBubble.tsx
create mode 100644 web/src/pages/ai/components/BubbleList.tsx
create mode 100644 web/src/pages/ai/components/ChatThread.tsx
create mode 100644 web/src/pages/ai/components/Composer.tsx
create mode 100644 web/src/pages/ai/components/ConversationListModal.tsx
create mode 100644 web/src/pages/ai/components/ModelBadge.tsx
create mode 100644 web/src/pages/ai/components/PromptTemplateModal.tsx
create mode 100644 web/src/pages/ai/components/RuntimeNotices.tsx
create mode 100644 web/src/pages/ai/components/SendStopButton.tsx
create mode 100644 web/src/pages/ai/components/ToolPlaygroundModal.tsx
create mode 100644 web/src/pages/ai/components/UserBubble.tsx
create mode 100644 web/src/pages/ai/components/WelcomeStarters.tsx
create mode 100644
web/src/pages/ai/components/__tests__/AssistantBubble.test.tsx
create mode 100644 web/src/pages/ai/components/__tests__/ChatThread.test.tsx
create mode 100644 web/src/pages/ai/components/__tests__/Composer.test.tsx
create mode 100644
web/src/pages/ai/components/__tests__/ConversationListModal.test.tsx
create mode 100644
web/src/pages/ai/components/__tests__/SendStopButton.test.tsx
create mode 100644 web/src/pages/ai/components/__tests__/ToolBlock.test.tsx
create mode 100644 web/src/pages/ai/components/blocks/ErrorBlock.tsx
create mode 100644 web/src/pages/ai/components/blocks/NoticeBlock.tsx
create mode 100644 web/src/pages/ai/components/blocks/TextBlock.tsx
create mode 100644 web/src/pages/ai/components/blocks/ThinkingBlock.tsx
create mode 100644 web/src/pages/ai/components/blocks/ToolBlock.tsx
create mode 100644 web/src/pages/ai/hooks/useActiveRunAttach.test.ts
create mode 100644 web/src/pages/ai/hooks/useActiveRunAttach.ts
create mode 100644 web/src/pages/ai/hooks/useAgentCapabilities.ts
create mode 100644 web/src/pages/ai/hooks/useAgentRun.test.ts
create mode 100644 web/src/pages/ai/hooks/useAgentRun.ts
create mode 100644 web/src/pages/ai/hooks/useAiSend.ts
create mode 100644 web/src/pages/ai/hooks/useComposerDraft.ts
create mode 100644 web/src/pages/ai/hooks/useConversationList.test.ts
create mode 100644 web/src/pages/ai/hooks/useConversationList.ts
create mode 100644 web/src/pages/ai/hooks/useConversationTimeline.test.ts
create mode 100644 web/src/pages/ai/hooks/useConversationTimeline.ts
create mode 100644 web/src/pages/ai/hooks/useDraftHandoff.ts
create mode 100644 web/src/pages/ai/hooks/useLlmRuntime.test.ts
create mode 100644 web/src/pages/ai/hooks/useLlmRuntime.ts
create mode 100644 web/src/pages/ai/pageStyle.ts
create mode 100644 web/src/pages/ai/render/__tests__/streamSpeed.test.ts
create mode 100644 web/src/pages/ai/render/blocks.ts
create mode 100644 web/src/pages/ai/render/equivalence.test.ts
create mode 100644 web/src/pages/ai/render/foldTimeline.ts
create mode 100644 web/src/pages/ai/render/markdown.ts
create mode 100644 web/src/pages/ai/render/reduceLive.ts
create mode 100644 web/src/pages/ai/render/streamSpeed.ts
create mode 100644
web/src/pages/instance/__tests__/ConsumerPageDiagnosticsRace.test.tsx
create mode 100644
web/src/pages/studio/__tests__/BrokerClusterInstanceScope.test.tsx
delete mode 100644 web/src/stores/aiChatHistoryStore.test.ts
delete mode 100644 web/src/stores/aiChatHistoryStore.ts
create mode 100644 web/src/test/setup.test.ts
create mode 100644 web/src/utils/consumerConnections.test.ts
create mode 100644 web/src/utils/consumerConnections.ts