## ADDED Requirements ### Requirement: Console exposes required pages The platform web console SHALL provide 首页、服务器管理、插件市场、用户管理、AI 提供商管理 as first-party pages. #### Scenario: Authenticated user opens console - **WHEN** an authenticated user opens platform_web - **THEN** the primary navigation MUST include 首页、服务器管理、插件市场、用户管理、AI 提供商管理 ### Requirement: Server management uses routed or modal details Server management SHALL avoid fixed left-list/right-detail master-detail layouts and MUST use routed details, modal details, or drawers for server detail flows. #### Scenario: User opens a server - **WHEN** a user selects a server from the server list - **THEN** platform_web MUST navigate to a detail route or open an overlay detail surface rather than permanently occupying a right-side detail pane ### Requirement: Plugin page is hosted through platform context Plugin page SHALL run inside a platform-controlled host that supplies theme tokens, server instance context, safe API access, AI invocation, log queries, artifact references, and job operations. #### Scenario: Plugin page loads - **WHEN** a user opens an authorized plugin page for a server instance - **THEN** the host MUST pass only safe context and MUST not expose platform auth storage, AI keys, run credentials, or host paths ### Requirement: Frontend definitions are centralized platform_web SHALL keep API clients, route definitions, page contracts, bridge contracts, shared component types, schemas, and validation helpers in dedicated directories. #### Scenario: New API call added - **WHEN** a frontend change adds a platform API call - **THEN** the call and related request/response types MUST live in the API/contract area rather than inside a view component ### Requirement: Logs and files are separate user flows The frontend SHALL treat log history/tail views and file/artifact operations as separate workflows so file operations do not imply log stream interruption. #### Scenario: User uploads a file while viewing logs - **WHEN** a user uploads or downloads a server file from a plugin or file page - **THEN** active log history or tail views MUST continue to query or subscribe through the platform log APIs independently