diff --git a/lib/features/workspace_management/workspace_provision_models.dart b/lib/features/workspace_management/workspace_provision_models.dart index b4d0936d..beb7f804 100644 --- a/lib/features/workspace_management/workspace_provision_models.dart +++ b/lib/features/workspace_management/workspace_provision_models.dart @@ -97,22 +97,42 @@ class ServerInfo { bool get isBridgePort443Available => bridgePort443ListenerCount == 0; String get displaySummary { - final sudo = sudoAvailable ? 'sudo=yes' : 'sudo=no'; - return [ + final systemParts = [ if (os.trim().isNotEmpty) os.trim(), if (arch.trim().isNotEmpty) arch.trim(), - sudo, - dnsResolved ? 'dns=ok' : 'dns=missing', - port80Open ? '80=open' : '80=blocked', - isPort80Available ? '80=free' : '80=busy', - port443Open ? '443=open' : '443=blocked', - isPort443Available ? '443=free' : '443=busy', - bridgeDnsResolved ? 'bridge-dns=ok' : 'bridge-dns=missing', - bridgePort80Open ? 'bridge-80=open' : 'bridge-80=blocked', - isBridgePort80Available ? 'bridge-80=free' : 'bridge-80=busy', - bridgePort443Open ? 'bridge-443=open' : 'bridge-443=blocked', - isBridgePort443Available ? 'bridge-443=free' : 'bridge-443=busy', - ].join(', '); + sudoAvailable ? 'sudo 可用' : 'sudo 不可用', + ]; + final bridgeParts = [ + dnsResolved ? '主域名 DNS 已解析' : '主域名 DNS 未解析', + bridgeDnsResolved ? '桥接域名 DNS 已解析' : '桥接域名 DNS 未解析', + ]; + final portParts = [ + port80Open + ? '80 端口策略已放行' + : '80 端口策略未放行', + isPort80Available ? '80 端口当前空闲' : '80 端口当前被占用', + port443Open + ? '443 端口策略已放行' + : '443 端口策略未放行', + isPort443Available ? '443 端口当前空闲' : '443 端口当前被占用', + bridgePort80Open + ? '桥接 80 端口策略已放行' + : '桥接 80 端口策略未放行', + isBridgePort80Available + ? '桥接 80 端口当前空闲' + : '桥接 80 端口当前被占用', + bridgePort443Open + ? '桥接 443 端口策略已放行' + : '桥接 443 端口策略未放行', + isBridgePort443Available + ? '桥接 443 端口当前空闲' + : '桥接 443 端口当前被占用', + ]; + return [ + if (systemParts.isNotEmpty) systemParts.join(' · '), + if (bridgeParts.isNotEmpty) bridgeParts.join(' · '), + if (portParts.isNotEmpty) portParts.join(' · '), + ].join('\n'); } static bool _isMissing(String value) => @@ -253,7 +273,10 @@ List defaultProvisionSteps() { ), ProvisionStep( id: 'deploy_webrtc', - title: appText('部署 WebRTC 远端桌面', 'Deploy WebRTC remote desktop'), + title: appText( + '部署 AI 智能体工作空间', + 'Deploy AI Agentic Workspace environment', + ), phaseGroup: 'console', ), ProvisionStep( diff --git a/test/features/workspace_management/workspace_management_unit_test.dart b/test/features/workspace_management/workspace_management_unit_test.dart index 78b389d7..70d52a32 100644 --- a/test/features/workspace_management/workspace_management_unit_test.dart +++ b/test/features/workspace_management/workspace_management_unit_test.dart @@ -73,6 +73,9 @@ BRIDGE_PORT_443_OPEN=yes expect(info.isBridgePort80Available, isTrue); expect(info.bridgePort443Open, isTrue); expect(info.isBridgePort443Available, isTrue); + expect(info.displaySummary, contains('sudo 可用')); + expect(info.displaySummary, contains('主域名 DNS 已解析')); + expect(info.displaySummary, contains('桥接 443 端口当前空闲')); }); test('ansible parser maps human readable output to step events', () {