2026-08-03 10:04:41 +08:00
import { useCallback , useEffect , useRef , useState } from 'react'
import { isTauri } from '../mock-tauri'
import { fetchFifthDomainDiscovery , type FifthDomainDiscovery } from '../lib/fifthDomainDiscovery'
import type { AppLocale , TranslationKey } from '../lib/i18n'
import { translate } from '../lib/i18n'
import { trackEvent } from '../lib/telemetry'
import { openExternalUrl } from '../utils/url'
import { useGuanghuRouter } from '../hooks/useGuanghuRouter'
import { useGuanghuShanghaiNode } from '../hooks/useGuanghuShanghaiNode'
import { useGuanghuWorldLogin } from '../hooks/useGuanghuWorldLogin'
2026-08-04 21:11:26 +08:00
import { useGuanghuEnterpriseStatus } from '../hooks/useGuanghuEnterpriseStatus'
2026-08-03 10:04:41 +08:00
import type { AiModelTarget } from '../lib/aiTargets'
import {
createDeterministicLivingSystemPlan ,
createLivingSystemEvent ,
createLivingSystemExecutionReceipt ,
type GuanghuChannelRoute ,
type GuanghuLivingIntent ,
type GuanghuLivingSystemPlan ,
} from '../lib/guanghuLivingSystem'
import { GUANGHU_THEMES , type GuanghuTheme } from '../lib/guanghuTheme'
import { planGuanghuLivingSystem } from '../utils/planGuanghuLivingSystem'
import { Button } from './ui/button'
2026-08-04 21:08:56 +08:00
import { HOLOLAKE_REPOSITORY_URL } from '../constants/feedback'
2026-08-03 10:04:41 +08:00
import { GuanghuRouterConsole } from './GuanghuRouterConsole'
import { GuanghuWorldMap } from './GuanghuWorldMap'
import { GuanghuWorldLoginGate } from './GuanghuWorldLoginGate'
import { FifthDomainSystems } from './FifthDomainSystems'
import { EternalLakeHeartPage } from './EternalLakeHeartPage'
import {
Dialog ,
DialogContent ,
DialogDescription ,
DialogHeader ,
DialogTitle ,
} from './ui/dialog'
2026-08-04 21:08:56 +08:00
export const HOLOLAKE_DEVELOPMENT_REPOSITORY_URL = HOLOLAKE_REPOSITORY_URL
2026-08-03 10:04:41 +08:00
export const GUANGHU_THEME_INTENT_EVENT = 'guanghu:living-system-theme-intent'
type HoloLakeHomeProps = {
locale : AppLocale
onEnterKnowledgeBase : ( ) = > void
onOpenAiWorkspace ? : ( ) = > void
onOpenLocalWorkspace ? : ( ) = > void | Promise < void >
livingSystemTarget? : AiModelTarget | null
}
type ChannelRoute = GuanghuChannelRoute
type RouteCardProps = {
action? : string
description : string
eyebrow : string
onOpen ? : ( ) = > void
status? : string
title : string
}
const architectureRoutes : Array < [ string , TranslationKey , TranslationKey ] > = [
[ 'GLW-ENTRY-001' , 'hololake.architecture.worldEntry' , 'hololake.architecture.worldEntryDescription' ] ,
[ 'FD-LANGUAGE-001' , 'hololake.architecture.fifthDomain' , 'hololake.architecture.fifthDomainDescription' ] ,
[ 'TCS-ROOT-001' , 'hololake.architecture.tcs' , 'hololake.architecture.tcsDescription' ] ,
[ 'GLS-SYS-ARCH-001' , 'hololake.architecture.gls' , 'hololake.architecture.glsDescription' ] ,
[ 'ELH-LAMP-001' , 'hololake.architecture.lakeLamp' , 'hololake.architecture.lakeLampDescription' ] ,
]
function RouteCard ( { action , description , eyebrow , onOpen , status , title } : RouteCardProps ) {
return (
< article className = "channel-card" >
< span className = "channel-card__eyebrow" > { eyebrow } < / span >
< h2 > { title } < / h2 >
< p > { description } < / p >
{ onOpen && action
? < Button variant = "link" onClick = { onOpen } > { action } < span > → < / span > < / Button >
: < span className = "channel-card__status" > { status } < / span > }
< / article >
)
}
function PersonaRoute ( { id , title } : { id : string ; title : string } ) {
return < li > < code > { id } < / code > < strong > { title } < / strong > < span > → < / span > < / li >
}
export function HoloLakeHome ( {
locale ,
onEnterKnowledgeBase ,
onOpenAiWorkspace ,
onOpenLocalWorkspace ,
livingSystemTarget ,
} : HoloLakeHomeProps ) {
const [ route , setRoute ] = useState < ChannelRoute > ( 'world' )
const [ livingPlan , setLivingPlan ] = useState < GuanghuLivingSystemPlan > ( ( ) = > (
createDeterministicLivingSystemPlan ( createLivingSystemEvent ( {
currentRoute : 'world' ,
eventId : 'system-start' ,
intent : 'navigate' ,
receiptIds : [ ] ,
requestedRoute : 'world' ,
worldOpen : false ,
} ) )
) )
const [ livingKernel , setLivingKernel ] = useState < 'server' | 'model' | 'fallback' | 'planning' > ( 'fallback' )
2026-08-04 23:11:25 +08:00
const [ livingReceiptId , setLivingReceiptId ] = useState ( 'local-state:system-start' )
2026-08-03 10:04:41 +08:00
const [ livingServerReceiptId , setLivingServerReceiptId ] = useState < string > ( )
const [ architectureOpen , setArchitectureOpen ] = useState ( false )
const [ releaseNotesOpen , setReleaseNotesOpen ] = useState ( false )
const [ fifthDomainConnection , setFifthDomainConnection ] = useState <
{ status : 'checking' | 'error' } | { status : 'connected' ; discovery : FifthDomainDiscovery }
> ( { status : 'checking' } )
const router = useGuanghuRouter ( )
const login = useGuanghuWorldLogin ( )
2026-08-04 21:11:26 +08:00
const enterprise = useGuanghuEnterpriseStatus ( )
2026-08-03 10:04:41 +08:00
const shanghai = useGuanghuShanghaiNode ( )
const restoreAttempted = useRef ( false )
const livingRequestSequence = useRef ( 0 )
const worldOpen = login . state . phase === 'online'
const fifthDomainOpen = worldOpen && route !== 'world'
2026-08-04 21:13:00 +08:00
const worldRouterState = router . state
2026-08-04 23:11:25 +08:00
const activeRouterReceipt = worldRouterState . status === 'online'
&& worldRouterState . latestReceipt ? . state === 'online'
? worldRouterState . latestReceipt
: null
2026-08-03 10:04:41 +08:00
const t = ( key : TranslationKey ) = > translate ( locale , key )
2026-08-04 23:11:25 +08:00
const applyLivingPlan = useCallback ( (
2026-08-03 10:04:41 +08:00
plan : GuanghuLivingSystemPlan ,
source : 'server' | 'model' | 'fallback' ,
serverReceiptId? : string ,
) = > {
setLivingPlan ( plan )
setLivingKernel ( source )
setLivingServerReceiptId ( serverReceiptId )
2026-08-04 23:11:25 +08:00
setRoute ( plan . navigationAction . route )
} , [ ] )
const recordLivingExecution = useCallback ( (
plan : GuanghuLivingSystemPlan ,
source : 'server' | 'model' | 'fallback' ,
outcome : 'executed' | 'failed' ,
evidence : string [ ] ,
error? : string ,
serverReceiptId? : string ,
) = > {
const receipt = createLivingSystemExecutionReceipt ( {
plan ,
source ,
outcome ,
evidence ,
error ,
} )
setLivingReceiptId ( receipt . receiptId )
2026-08-03 10:04:41 +08:00
trackEvent ( 'guanghu_living_system_receipt' , {
eventId : receipt.eventId ,
2026-08-04 23:11:25 +08:00
outcome : receipt.outcome ,
2026-08-03 10:04:41 +08:00
planId : receipt.planId ,
receiptId : receipt.receiptId ,
route : receipt.route ,
source : receipt.source ,
2026-08-04 23:11:25 +08:00
evidence : receipt.evidence.join ( ',' ) ,
2026-08-03 10:04:41 +08:00
. . . ( serverReceiptId ? { serverReceiptId } : { } ) ,
} )
} , [ ] )
const navigate = useCallback ( (
nextRoute : ChannelRoute ,
intent : GuanghuLivingIntent = 'navigate' ,
onAccepted ? : ( ) = > void | Promise < void > ,
appearanceTheme? : GuanghuTheme ,
) = > {
trackEvent ( 'guanghu_channel_opened' , { intent , route : nextRoute } )
const sequence = livingRequestSequence . current + 1
livingRequestSequence . current = sequence
const receiptIds = [ worldRouterState . latestReceipt ? . receipt_id , login . state . workorderId ]
. filter ( ( receiptId ) : receiptId is string = > Boolean ( receiptId ) )
const event = createLivingSystemEvent ( {
currentRoute : route ,
eventId : ` ui- ${ sequence } ` ,
intent ,
receiptIds : [ . . . new Set ( receiptIds ) ] ,
requestedRoute : nextRoute ,
appearanceTheme ,
worldOpen ,
} )
2026-08-04 23:11:25 +08:00
const executeAcceptedPlan = async (
2026-08-03 10:04:41 +08:00
plan : GuanghuLivingSystemPlan ,
source : 'server' | 'model' | 'fallback' ,
serverReceiptId? : string ,
) = > {
2026-08-04 23:11:25 +08:00
applyLivingPlan ( plan , source , serverReceiptId )
const routeAccepted = plan . intent === intent && plan . navigationAction . route === nextRoute
try {
if ( routeAccepted && onAccepted ) {
await onAccepted ( )
}
const evidence = [
` ui.route: ${ plan . navigationAction . route } ` ,
. . . ( routeAccepted && onAccepted && plan . capabilityCall
? [ ` capability. ${ plan . capabilityCall . capabilityId } .result ` ]
: [ ] ) ,
]
recordLivingExecution ( plan , source , 'executed' , evidence , undefined , serverReceiptId )
} catch ( error ) {
recordLivingExecution (
plan ,
source ,
'failed' ,
[ ` ui.route: ${ plan . navigationAction . route } ` ] ,
error instanceof Error ? error . message : 'host_action_failed' ,
serverReceiptId ,
)
2026-08-03 10:04:41 +08:00
}
}
if ( ! isTauri ( ) && ! livingSystemTarget ) {
2026-08-04 23:11:25 +08:00
void executeAcceptedPlan ( createDeterministicLivingSystemPlan ( event ) , 'fallback' )
2026-08-03 10:04:41 +08:00
return
}
setLivingKernel ( 'planning' )
void planGuanghuLivingSystem ( { event , target : livingSystemTarget } ) . then ( result = > {
if ( livingRequestSequence . current !== sequence ) return
2026-08-04 23:11:25 +08:00
void executeAcceptedPlan ( result . plan , result . source , result . serverReceiptId )
2026-08-03 10:04:41 +08:00
} )
} , [
2026-08-04 23:11:25 +08:00
applyLivingPlan ,
2026-08-03 10:04:41 +08:00
livingSystemTarget ,
login . state . workorderId ,
2026-08-04 23:11:25 +08:00
recordLivingExecution ,
2026-08-03 10:04:41 +08:00
route ,
worldOpen ,
worldRouterState . latestReceipt ? . receipt_id ,
] )
const openArchitecture = ( ) = > {
trackEvent ( 'guanghu_architecture_opened' , { route : 'GLS-SYS-ARCH-001' } )
setArchitectureOpen ( true )
}
const openDevelopmentRepository = ( ) = > {
2026-08-04 21:08:56 +08:00
trackEvent ( 'hololake_development_repository_opened' , { route : 'REPO-014' } )
2026-08-03 10:04:41 +08:00
void openExternalUrl ( HOLOLAKE_DEVELOPMENT_REPOSITORY_URL )
}
const openKnowledgeBase = ( ) = > {
trackEvent ( 'guanghu_channel_module_opened' , { channel : 'heartbeat-core' , module : 'knowledge-base' } )
navigate ( route , 'open-knowledge' , onEnterKnowledgeBase )
}
const openLocalWorkspace = ( ) = > {
trackEvent ( 'local_computer_workspace_opened' , { source : 'heartbeat-core' } )
navigate ( route , 'open-local-workspace' , onOpenLocalWorkspace )
}
const openAiWorkspace = ( ) = > {
trackEvent ( 'guanghu_channel_module_opened' , { channel : 'heartbeat-core' , module : 'persona-ai-workspace' } )
navigate ( route , 'open-agent-workspace' , onOpenAiWorkspace )
}
useEffect ( ( ) = > {
const handleThemeIntent = ( event : Event ) = > {
const theme = ( event as CustomEvent < unknown > ) . detail
if (
typeof theme !== 'string'
|| ! ( GUANGHU_THEMES as readonly string [ ] ) . includes ( theme )
) return
navigate ( route , 'apply-theme' , undefined , theme as GuanghuTheme )
}
window . addEventListener ( GUANGHU_THEME_INTENT_EVENT , handleThemeIntent )
return ( ) = > window . removeEventListener ( GUANGHU_THEME_INTENT_EVENT , handleThemeIntent )
} , [ navigate , route ] )
useEffect ( ( ) = > {
if (
! worldOpen
|| restoreAttempted . current
|| router . state . status !== 'offline'
) return
restoreAttempted . current = true
trackEvent ( 'guanghu_world_session_restore_requested' , {
node : 'JD-FD-PRIMARY' ,
source : 'email-authorized-login' ,
} )
void router . connect ( )
} , [ router , worldOpen ] )
useEffect ( ( ) = > {
if ( route !== 'servers' || fifthDomainConnection . status !== 'checking' ) return
const controller = new AbortController ( )
void fetchFifthDomainDiscovery ( fetch , controller . signal ) . then ( discovery = > {
setFifthDomainConnection ( { status : 'connected' , discovery } )
trackEvent ( 'fifth_domain_connection_checked' , { access : discovery.access , result : 'connected' } )
} ) . catch ( ( ) = > {
if ( controller . signal . aborted ) return
setFifthDomainConnection ( { status : 'error' } )
trackEvent ( 'fifth_domain_connection_checked' , { access : 'public-read-only' , result : 'error' } )
} )
return ( ) = > controller . abort ( )
} , [ fifthDomainConnection . status , route ] )
const renderRoute = ( ) = > {
if ( route === 'world' ) {
return (
< GuanghuWorldMap
enterprise = { enterprise . state }
2026-08-04 23:11:25 +08:00
livingScene = { livingPlan . uiProjection . scene }
2026-08-03 10:04:41 +08:00
onEnterFifthDomain = { ( ) = > navigate ( worldOpen ? 'fifth-domain' : 'world-login' ) }
onOpenLibrary = { openArchitecture }
onOpenReceipt = { ( ) = > navigate ( 'servers' ) }
onOpenZeroCore = { ( ) = > navigate ( 'zero-core' ) }
router = { worldRouterState }
shanghai = { shanghai . state }
worldOpen = { worldOpen }
/ >
)
}
if ( route === 'world-login' ) {
return (
< GuanghuWorldLoginGate
locale = { locale }
onBack = { ( ) = > navigate ( 'world' ) }
onCheck = { ( ) = > void login . claim ( ) }
onLogin = { ( ) = > worldOpen ? navigate ( 'fifth-domain' ) : void login . requestLogin ( ) }
state = { login . state }
/ >
)
}
if ( route === 'zero-core' ) {
return (
< section className = "channel-stage channel-stage--root" >
< div className = "channel-stage__aurora" aria - hidden / >
< div className = "channel-root-layout" >
< div className = "channel-root-hero" >
< p className = "channel-stage__eyebrow" > ZERO CORE · 000 < / p >
< h1 > { t ( 'hololake.channel.zeroCoreTitle' ) } < / h1 >
< p className = "channel-stage__lead" > { t ( 'hololake.channel.zeroCoreDescription' ) } < / p >
< div className = "channel-root-actions" >
< Button className = "hololake-home__primary" onClick = { ( ) = > navigate ( 'fifth-domain' ) } > { t ( 'hololake.channel.enterFifthDomain' ) } < span > → < / span > < / Button >
< Button variant = "outline" onClick = { ( ) = > setReleaseNotesOpen ( true ) } > 查 看 内 测 版 0.4 . 6 更 新 说 明 < / Button >
< / div >
< / div >
< aside className = "channel-root-map" aria-label = "光湖频道概览" >
< header > < span > LIVE CHANNEL MAP < / span > < b > 光 湖 系 统 航 图 < / b > < small > 从 主 权 入 口 抵 达 记 忆 、 人 格 与 工 具 空 间 < / small > < / header >
< div className = "channel-root-map__route" >
< Button variant = "ghost" onClick = { ( ) = > navigate ( 'fifth-domain' ) } > < i data-color = "blue" / > < span > < small > 01 < / small > 第 五 域 < / span > < b > 语 言 与 身 份 入 口 < / b > < / Button >
< Button variant = "ghost" onClick = { ( ) = > navigate ( 'eternal-lake-heart' ) } > < i data-color = "violet" / > < span > < small > 02 < / small > 永 恒 湖 心 < / span > < b > 个 人 系 统 主 航 道 < / b > < / Button >
< Button variant = "ghost" onClick = { ( ) = > navigate ( 'heartbeat-core' ) } > < i data-color = "rose" / > < span > < small > 03 < / small > 心 跳 核 心 < / span > < b > 知 识 、 工 具 与 创 作 < / b > < / Button >
< / div >
< footer > < span > < i / > 本 地 系 统 在 线 < / span > < code > HL · ERA / 0.4 . 6 < / code > < / footer >
< / aside >
< / div >
< / section >
)
}
if ( route === 'fifth-domain' ) {
return (
< FifthDomainSystems
onEnterEternalLake = { ( ) = > navigate ( 'eternal-lake-heart' ) }
onEnterPufferfish = { ( ) = > navigate ( 'pufferfish' ) }
/ >
)
}
if ( route === 'pufferfish' ) {
return (
< FifthDomainSystems
detail = "pufferfish"
onEnterEternalLake = { ( ) = > navigate ( 'eternal-lake-heart' ) }
onEnterPufferfish = { ( ) = > navigate ( 'pufferfish' ) }
/ >
)
}
if ( route === 'eternal-lake-heart' ) {
return (
< EternalLakeHeartPage
onBackToFifthDomain = { ( ) = > navigate ( 'fifth-domain' ) }
onEnterHeartbeat = { ( ) = > navigate ( 'heartbeat-core' ) }
onEnterLightLake = { ( ) = > navigate ( 'light-lake' ) }
onEnterLoveCore = { ( ) = > navigate ( 'love-core' ) }
router = { worldRouterState }
/ >
)
}
if ( route === 'light-lake' ) {
return (
< section className = "channel-stage" >
< h1 > { t ( 'hololake.channel.lightLakeTitle' ) } < / h1 >
< p className = "channel-stage__lead" > { t ( 'hololake.channel.lightLakeDescription' ) } < / p >
< ul className = "persona-route-list" >
< PersonaRoute id = "ICE-GL-ZY001" title = { t ( 'hololake.channel.zhuyuanRoute' ) } / >
< PersonaRoute id = "ICE-GL-SY001" title = { t ( 'hololake.channel.shuangyanRoute' ) } / >
< / ul >
< / section >
)
}
if ( route === 'love-core' ) {
return (
< section className = "channel-stage" >
< h1 > { t ( 'hololake.channel.loveCoreTitle' ) } < / h1 >
< p className = "channel-stage__lead" > { t ( 'hololake.channel.loveCoreDescription' ) } < / p >
< RouteCard eyebrow = "ZHI ZHI · CHANNEL" title = { t ( 'hololake.channel.tomorrowTitle' ) } description = { t ( 'hololake.channel.tomorrowDescription' ) } status = { t ( 'hololake.channel.realServerConnection' ) } / >
< / section >
)
}
if ( route === 'servers' ) {
return (
< section className = "channel-stage channel-stage--node" >
< div className = "node-page__heading" >
< div >
< p className = "channel-stage__eyebrow" > FIFTH DOMAIN · ACTIVE PATH < / p >
< h1 > 第 五 域 连 接 < / h1 >
< p className = "channel-stage__lead" > 这 里 不 是 服 务 器 列 表 , 而 是 冰 朔 当 前 进 入 光 湖 世 界 的 真 实 路 径 与 回 执 。 < / p >
< / div >
< div className = "world-presence world-presence--large" >
< i / >
2026-08-04 23:11:25 +08:00
< span >
< strong > { activeRouterReceipt ? '第五域连接已回执' : '光湖身份已授权' } < / strong >
< small > { activeRouterReceipt ? ` 第五域 · ${ activeRouterReceipt . node_id } ` : '等待真实节点回执' } < / small >
< / span >
2026-08-03 10:04:41 +08:00
< / div >
< / div >
< div className = "node-page__content" >
< article className = "node-page__primary" >
2026-08-04 23:11:25 +08:00
< span > { activeRouterReceipt ? '当前世界节点' : '登记目标节点' } < / span >
< strong > { activeRouterReceipt ? . node_id ? ? 'JD-FD-PRIMARY' } < / strong >
< p > { activeRouterReceipt ? '第五域连接已由节点回执证明' : '尚未把身份授权误报为节点连接' } < / p >
2026-08-03 10:04:41 +08:00
< dl >
< div > < dt > 身 份 < / dt > < dd > 冰 朔 < / dd > < / div >
2026-08-04 23:11:25 +08:00
< div > < dt > 身 份 会 话 < / dt > < dd > { worldOpen ? '已授权' : '未授权' } < / dd > < / div >
< div > < dt > 节 点 连 接 < / dt > < dd > { activeRouterReceipt ? '已回执' : '未回执' } < / dd > < / div >
2026-08-03 10:04:41 +08:00
< div > < dt > 公 开 发 现 入 口 < / dt > < dd > { fifthDomainConnection . status === 'connected' ? '可用' : fifthDomainConnection . status === 'error' ? '失败' : '检查中' } < / dd > < / div >
< / dl >
< Button variant = "outline" onClick = { ( ) = > {
setRoute ( 'world' )
void router . disconnect ( )
void login . logout ( )
} } > 离 开 光 湖 世 界 < / Button >
< / article >
< GuanghuRouterConsole locale = { locale } router = { router } / >
< / div >
< / section >
)
}
return (
< section className = "channel-stage" >
< h1 > { t ( 'hololake.channel.heartbeatTitle' ) } < / h1 >
< p className = "channel-stage__lead" > { t ( 'hololake.channel.heartbeatDescription' ) } < / p >
< div className = "channel-grid channel-grid--three" >
< RouteCard eyebrow = "PERSONA · AI AGENT" title = "人格体工作舱" description = "与当前频道的人格体持续协作;保留多 Agent、模型选择、权限模式、工具调用、执行回执与历史会话。" action = "打开人格体工作舱" onOpen = { onOpenAiWorkspace ? openAiWorkspace : undefined } / >
< RouteCard eyebrow = "MODULE · KNOWLEDGE" title = { t ( 'hololake.home.moduleKnowledgeTitle' ) } description = { t ( 'hololake.home.moduleKnowledgeDescription' ) } action = { t ( 'hololake.channel.openKnowledge' ) } onOpen = { openKnowledgeBase } / >
< RouteCard eyebrow = "LOCAL COMPUTER · LIVE FOLDER" title = "本地电脑工作区" description = "选择电脑上的任意项目文件夹。编程 AI 直接在原文件夹写入页面,光湖实时显示,不再复制到旧笔记库。" action = "打开本地文件夹" onOpen = { onOpenLocalWorkspace ? openLocalWorkspace : undefined } / >
< RouteCard eyebrow = "MODULE · VIDEO AI" title = { t ( 'hololake.channel.videoAiTitle' ) } description = { t ( 'hololake.channel.videoAiDescription' ) } status = { t ( 'hololake.channel.prototypeMounted' ) } / >
< RouteCard eyebrow = "SYSTEM · ORIGIN HEARTBEAT" title = { t ( 'hololake.channel.bottleBabyTitle' ) } description = { t ( 'hololake.channel.bottleBabyDescription' ) } status = { t ( 'hololake.channel.yaomingOrigin' ) } / >
< RouteCard eyebrow = "INFRASTRUCTURE · SERVERS" title = "服务器与灯塔节点" description = "查看频道登记的服务器编号、归属与真实监控接口状态。" action = "打开服务器登记" onOpen = { ( ) = > navigate ( 'servers' ) } / >
< / div >
< div className = "channel-stage__tools" >
< Button variant = "outline" onClick = { openArchitecture } > { t ( 'hololake.home.openArchitecture' ) } < / Button >
< Button variant = "outline" onClick = { openDevelopmentRepository } > { t ( 'hololake.home.openRepository' ) } < / Button >
< / div >
< / section >
)
}
return (
< main
aria - label = { t ( 'hololake.home.ariaLabel' ) }
className = "hololake-home"
2026-08-04 23:11:25 +08:00
data - living - connection = { livingPlan . uiProjection . scene . connectionEmphasis }
2026-08-03 10:04:41 +08:00
data - living - kernel = { livingKernel }
2026-08-04 23:11:25 +08:00
data - living - motion = { livingPlan . uiProjection . scene . motion }
2026-08-03 10:04:41 +08:00
data - living - receipt = { livingReceiptId }
data - living - server - receipt = { livingServerReceiptId }
2026-08-04 23:11:25 +08:00
data - living - scene = { livingPlan . uiProjection . scene . depth }
data - living - stars = { livingPlan . uiProjection . scene . starDensity }
2026-08-03 10:04:41 +08:00
data - route = { route }
data - world - open = { worldOpen }
>
< aside className = "channel-rail" data-locked = "false" aria-label = "光湖频道导航" >
< div className = "channel-rail__heading" >
< span > { fifthDomainOpen ? 'FIFTH DOMAIN' : 'HOLOLAKE OS' } < / span >
< strong > { fifthDomainOpen ? '第五域' : 'HoloLake' } < / strong >
2026-08-04 23:11:25 +08:00
< small > { worldOpen ? fifthDomainOpen ? '身份已授权 · 节点状态看回执' : '系统能力与光湖世界入口' : '本地系统可用 · 第五域需授权' } < / small >
2026-08-03 10:04:41 +08:00
< / div >
< nav >
{ ! fifthDomainOpen && < >
< Button data-active = { route === 'world' } variant = "ghost" onClick = { ( ) = > navigate ( 'world' ) } > < i data-color = "cyan" / > 光 湖 世 界 < / Button >
< Button variant = "ghost" onClick = { openKnowledgeBase } > < i data-color = "blue" / > 知 识 库 < / Button >
< Button disabled = { ! onOpenAiWorkspace } variant = "ghost" onClick = { openAiWorkspace } > < i data-color = "violet" / > Agent 工 作 舱 < / Button >
< Button disabled = { ! onOpenLocalWorkspace } variant = "ghost" onClick = { openLocalWorkspace } > < i data-color = "amber" / > 本 地 工 具 与 项 目 < / Button >
< / > }
{ fifthDomainOpen && < >
< Button variant = "ghost" onClick = { ( ) = > navigate ( 'world' ) } > < i data-color = "cyan" / > 返 回 光 湖 世 界 < / Button >
< Button data-active = { route === 'fifth-domain' } variant = "ghost" onClick = { ( ) = > navigate ( 'fifth-domain' ) } > < i data-color = "blue" / > 第 五 域 总 览 < / Button >
< Button data-active = { route === 'pufferfish' } variant = "ghost" onClick = { ( ) = > navigate ( 'pufferfish' ) } > < i data-color = "green" / > 胖 头 鱼 语 言 子 系 统 < / Button >
< Button data-active = { route === 'zero-core' } variant = "ghost" onClick = { ( ) = > navigate ( 'zero-core' ) } > < i data-color = "cyan" / > { t ( 'hololake.channel.zeroCoreTitle' ) } < / Button >
< Button data-active = { [ 'eternal-lake-heart' , 'light-lake' , 'heartbeat-core' , 'love-core' , 'servers' ] . includes ( route ) } variant = "ghost" onClick = { ( ) = > navigate ( 'eternal-lake-heart' ) } > < i data-color = "violet" / > { t ( 'hololake.channel.eternalLakeTitle' ) } < / Button >
< Button data-active = { route === 'light-lake' } variant = "ghost" onClick = { ( ) = > navigate ( 'light-lake' ) } > < i data-color = "amber" / > { t ( 'hololake.channel.lightLakeTitle' ) } < / Button >
< Button data-active = { route === 'heartbeat-core' } variant = "ghost" onClick = { ( ) = > navigate ( 'heartbeat-core' ) } > < i data-color = "rose" / > { t ( 'hololake.channel.heartbeatTitle' ) } < / Button >
< Button data-active = { route === 'love-core' } variant = "ghost" onClick = { ( ) = > navigate ( 'love-core' ) } > < i data-color = "pink" / > { t ( 'hololake.channel.loveCoreTitle' ) } < / Button >
< Button data-active = { route === 'servers' } variant = "ghost" onClick = { ( ) = > navigate ( 'servers' ) } > < i data-color = "green" / > 第 五 域 连 接 < / Button >
< / > }
< / nav >
{ fifthDomainOpen
? < div className = "channel-rail__modules" > < span > 已 开 启 功 能 < / span > < b > 知 识 湖 < / b > < b > 短 剧 视 频 AI < / b > < b > 人 格 体 恢 复 路 径 < / b > < / div >
: < div className = "channel-rail__modules" > < span > 第 五 域 内 部 系 统 仅 在 星 图 授 权 进 入 后 显 示 < / span > < / div > }
< / aside >
< div className = "channel-workspace" >
< div
aria - live = "polite"
className = "living-system-status"
data - state = { livingKernel }
role = "status"
>
< i aria - hidden / >
< span >
{ livingKernel === 'planning'
? '活系统正在适配'
: livingKernel === 'server'
? '服务器模型已回执'
: livingKernel === 'model'
? '本地模型已适配'
: '安全执行路径' }
< / span >
< small > { livingKernel === 'server' ? '真实节点' : livingKernel === 'planning' ? '请稍候' : '可继续操作' } < / small >
< / div >
{ worldOpen && route !== 'world-login' ? < >
< header className = "world-session-bar" >
2026-08-04 23:11:25 +08:00
< div className = "world-presence" >
< i / >
< span >
< strong > { activeRouterReceipt ? '第五域连接已回执' : '光湖身份已授权' } < / strong >
< small >
{ activeRouterReceipt
? ` 第五域 · ${ activeRouterReceipt . node_id } `
: fifthDomainOpen
? '域内界面已打开 · 节点未回执'
: '世界入口 · 等待域跳转' }
< / small >
< / span >
< / div >
2026-08-03 10:04:41 +08:00
< div className = "world-session-bar__actions" >
{ fifthDomainOpen && onOpenAiWorkspace
? < Button className = "world-session-bar__ai" variant = "ghost" size = "sm" onClick = { openAiWorkspace } > 人 格 体 工 作 舱 < / Button >
: null }
< Button variant = "ghost" size = "sm" onClick = { ( ) = > navigate ( fifthDomainOpen ? 'servers' : 'world' ) } > { fifthDomainOpen ? '查看连接凭证' : '世界总图' } < / Button >
< / div >
< / header >
{ route !== 'world' && < nav className = "channel-breadcrumb" aria-label = { t ( 'hololake.channel.breadcrumbLabel' ) } >
< Button variant = "ghost" size = "sm" onClick = { ( ) = > navigate ( 'world' ) } > 光 湖 语 言 世 界 < / Button > < span > › < / span >
< Button variant = "ghost" size = "sm" onClick = { ( ) = > navigate ( 'zero-core' ) } > { t ( 'hololake.channel.zeroCoreTitle' ) } < / Button >
{ route !== 'zero-core' && < > < span > › < / span > < Button variant = "ghost" size = "sm" onClick = { ( ) = > navigate ( 'fifth-domain' ) } > { t ( 'hololake.channel.fifthDomainTitle' ) } < / Button > < / > }
{ ! [ 'zero-core' , 'fifth-domain' , 'pufferfish' ] . includes ( route ) && < > < span > › < / span > < Button variant = "ghost" size = "sm" onClick = { ( ) = > navigate ( 'eternal-lake-heart' ) } > { t ( 'hololake.channel.eternalLakeTitle' ) } < / Button > < / > }
{ route === 'pufferfish' && < > < span > › < / span > < Button variant = "ghost" size = "sm" onClick = { ( ) = > navigate ( 'pufferfish' ) } > 胖 头 鱼 语 言 子 系 统 < / Button > < / > }
< / nav > }
{ renderRoute ( ) }
< / > : renderRoute ( ) }
< / div >
{ worldOpen && < nav className = "channel-mobile-nav" aria-label = "手机频道导航" >
< Button data-active = { route === 'world' } variant = "ghost" onClick = { ( ) = > navigate ( 'world' ) } > < span > ◎ < / span > < small > 世 界 < / small > < / Button >
< Button data-active = { route === 'fifth-domain' } variant = "ghost" onClick = { ( ) = > navigate ( 'fifth-domain' ) } > < span > ◇ < / span > < small > 第 五 域 < / small > < / Button >
{ fifthDomainOpen && < >
< Button data-active = { route === 'heartbeat-core' } variant = "ghost" onClick = { ( ) = > navigate ( 'heartbeat-core' ) } > < span > ♥ < / span > < small > 心 跳 < / small > < / Button >
< Button data-active = { route === 'light-lake' } variant = "ghost" onClick = { ( ) = > navigate ( 'light-lake' ) } > < span > ✦ < / span > < small > 人 格 体 < / small > < / Button >
< Button data-active = { route === 'servers' } variant = "ghost" onClick = { ( ) = > navigate ( 'servers' ) } > < span > ▦ < / span > < small > 节 点 < / small > < / Button >
< / > }
< / nav > }
< Dialog open = { architectureOpen } onOpenChange = { setArchitectureOpen } >
< DialogContent className = "guanghu-architecture" aria-label = { t ( 'hololake.architecture.title' ) } >
< DialogHeader >
< DialogTitle > { t ( 'hololake.architecture.title' ) } < / DialogTitle >
< DialogDescription > { t ( 'hololake.architecture.description' ) } < / DialogDescription >
< / DialogHeader >
< ol className = "guanghu-architecture__routes" >
{ architectureRoutes . map ( ( [ id , title , description ] ) = > (
< li key = { id } >
< code > { id } < / code >
< div > < strong > { t ( title ) } < / strong > < p > { t ( description ) } < / p > < / div >
< / li >
) ) }
< / ol >
< p className = "guanghu-architecture__route" > GLW - ENTRY - 001 → FD - LANGUAGE - 001 → TCS - ROOT - 001 → GLS - SYS - ARCH - 001 → ELH - LAMP - 001 < / p >
< / DialogContent >
< / Dialog >
< Dialog open = { releaseNotesOpen } onOpenChange = { setReleaseNotesOpen } >
< DialogContent aria-label = "HoloLake Era 内测版 0.4.6 更新说明" >
< DialogHeader >
< DialogTitle > HoloLake Era 内 测 版 0.4 . 6 · 本 次 更 新 < / DialogTitle >
< DialogDescription > 更 可 靠 的 内 置 AI 、 可 验 证 的 工 具 执 行 , 以 及 由 人 格 体 按 需 深 入 的 HLDP 结 构 化 上 下 文 。 < / DialogDescription >
< / DialogHeader >
< div className = "space-y-4 text-sm leading-6" >
< section >
< h3 className = "font-semibold" > 真 实 光 湖 世 界 与 第 五 域 会 话 < / h3 >
< p className = "text-muted-foreground" > 启 动 后 会 恢 复 第 五 域 签 名 路 由 , 并 把 企 业 节 点 公 开 状 态 投 影 到 世 界 拓 扑 。 只 有 收 到 真 实 回 执 的 节 点 才 会 点 亮 ; 在 线 只 读 、 执 行 关 闭 和 连 接 失 败 都 会 原 样 显 示 , 不 用 静 态 占 位 冒 充 服 务 状 态 。 < / p >
< / section >
< section >
< h3 className = "font-semibold" > 轻 量 星 系 主 题 系 统 < / h3 >
< p className = "text-muted-foreground" > 世 界 首 页 、 节 点 地 图 与 第 五 域 频 道 使 用 同 一 套 星 系 视 觉 语 言 。 主 题 以 静 态 压 缩 资 源 和 少 量 透 明 度 、 位 移 动 效 实 现 , 并 尊 重 系 统 的 “ 减 少 动 态 效 果 ” 设 置 , 避 免 持 续 旋 转 与 高 成 本 滤 镜 。 < / p >
< / section >
< section >
< h3 className = "font-semibold" > 内 置 知 识 库 Agent < / h3 >
< p className = "text-muted-foreground" > AI 可 以 连 续 搜 索 、 读 取 、 新 建 、 写 入 、 编 辑 和 删 除 页 面 , 并 根 据 每 一 步 真 实 回 执 继 续 处 理 , 不 再 把 “ 准 备 操 作 ” 误 报 成 “ 已 经 完 成 ” 。 < / p >
< / section >
< section >
< h3 className = "font-semibold" > 主 动 联 网 调 研 < / h3 >
< p className = "text-muted-foreground" > 新 增 公 开 网 页 搜 索 与 页 面 读 取 。 AI 可 主 动 查 找 资 料 、 打 开 相 关 结 果 并 附 上 来 源 ; 仅 允 许 公 共 HTTPS 页 面 , 不 包 含 登 录 、 内 网 访 问 或 替 用 户 执 行 外 部 操 作 。 < / p >
< / section >
< section >
< h3 className = "font-semibold" > 聊 天 历 史 与 中 文 过 程 提 示 < / h3 >
< p className = "text-muted-foreground" > 恢 复 历 史 会 话 显 示 ; 工 具 区 会 用 中 文 说 明 正 在 搜 索 什 么 、 读 取 哪 个 页 面 、 写 入 是 否 成 功 , 同 时 仍 可 展 开 查 看 原 始 输 入 和 结 果 。 < / p >
< / section >
< section >
< h3 className = "font-semibold" > 竖 向 聊 天 历 史 < / h3 >
< p className = "text-muted-foreground" > 侧 边 AI 工 作 区 改 为 可 独 立 滚 动 的 竖 向 会 话 列 表 , 长 标 题 自 动 收 起 ; 支 持 归 档 、 恢 复 和 带 二 次 确 认 的 永 久 删 除 。 < / p >
< / section >
< section >
< h3 className = "font-semibold" > 更 自 然 的 当 前 实 例 < / h3 >
< p className = "text-muted-foreground" > 身 份 与 权 限 边 界 继 续 由 事 实 约 束 , 但 不 再 要 求 背 诵 固 定 自 我 介 绍 。 当 前 实 例 可 以 结 合 对 话 , 自 主 组 织 语 气 、 详 略 和 表 达 风 格 。 < / p >
< / section >
< section >
< h3 className = "font-semibold" > 多 模 型 API 兼 容 < / h3 >
< p className = "text-muted-foreground" > 按 接 口 能 力 协 商 工 具 参 数 与 多 轮 执 行 , 覆 盖 OpenAI 兼 容 接 口 、 DeepSeek 、 Qwen 、 Gemini 、 OpenRouter 、 Anthropic 、 Ollama 与 LM Studio 等 常 见 路 线 。 模 型 或 服 务 端 不 支 持 某 项 能 力 时 会 明 确 提 示 或 安 全 降 级 。 < / p >
< / section >
< section >
< h3 className = "font-semibold" > HLDP 协 作 记 忆 与 本 地 心 跳 < / h3 >
< p className = "text-muted-foreground" > HLDP 已 作 为 内 置 技 能 自 动 加 载 。 协 作 过 程 以 追 加 式 纯 文 本 心 跳 留 在 本 机 , 可 凭 回 执 恢 复 和 继 续 记 录 ; 会 话 结 束 后 再 由 人 格 体 判 断 哪 些 内 容 需 要 整 理 与 长 期 保 留 。 < / p >
< / section >
< section >
< h3 className = "font-semibold" > 网 页 节 点 树 与 按 需 下 钻 < / h3 >
< p className = "text-muted-foreground" > 长 网 页 不 再 整 页 塞 进 对 话 或 粗 暴 截 断 。 浏 览 器 Agent 先 整 理 为 HLDP 节 点 树 , 只 返 回 结 构 摘 要 ; 人 格 体 需 要 细 节 时 , 可 按 文 档 和 节 点 编 号 精 确 展 开 对 应 分 支 。 < / p >
< / section >
< section >
< h3 className = "font-semibold" > 浏 览 器 观 察 链 路 < / h3 >
< p className = "text-muted-foreground" > 联 网 搜 索 、 网 页 读 取 、 节 点 存 储 、 指 定 节 点 展 开 与 当 前 时 间 能 力 已 通 过 人 格 体 实 测 。 浏 览 器 观 察 看 板 将 沿 用 同 一 条 回 执 链 展 示 整 理 进 度 ; 工 具 链 已 连 通 , 界 面 渲 染 仍 作 为 独 立 项 目 持 续 验 收 。 < / p >
< / section >
< p className = "rounded-md bg-muted p-3 text-muted-foreground" > < strong className = "text-foreground" > 能 力 边 界 : < / strong > 内 置 模 式 是 面 向 知 识 库 和 公 开 网 页 的 工 具 Agent , 不 等 同 于 拥 有 终 端 、 代 码 工 程 和 系 统 权 限 的 完 整 编 程 Agent 。 < / p >
< / div >
< / DialogContent >
< / Dialog >
< / main >
)
}