feat: 零点原核频道v1+登录双门地基+五湖开场——zero_point裁决链/灯塔查号/code_repo_login/通知卡重设计/浅色主题联动(冰朔20260815夜谕)
This commit is contained in:
parent
ffed065841
commit
07fd4c85ef
16 changed files with 3082 additions and 88 deletions
|
|
@ -1,4 +1,8 @@
|
|||
mod agent_host;
|
||||
mod agent_parlor;
|
||||
mod code_channel;
|
||||
mod code_repo_login;
|
||||
mod glp_envelope;
|
||||
mod direct_local_broker;
|
||||
mod direct_local_session;
|
||||
mod dynamic_capability_routing;
|
||||
|
|
@ -6,11 +10,13 @@ mod home_status;
|
|||
mod knowledge_base;
|
||||
mod local_development_bridge;
|
||||
mod personal_channel;
|
||||
mod persona_butler;
|
||||
mod pncc_receipt_projection;
|
||||
mod pncc_remote_git;
|
||||
mod pncc_repository_binding;
|
||||
mod release_trust;
|
||||
mod release_update;
|
||||
mod zero_point;
|
||||
|
||||
use tauri::Manager;
|
||||
|
||||
|
|
@ -18,6 +24,13 @@ pub fn run_connector() -> Result<(), String> {
|
|||
direct_local_broker::run_connector()
|
||||
}
|
||||
|
||||
/// 排障专用:webview 启动自检回传(黑屏取证)。
|
||||
#[tauri::command]
|
||||
fn debug_boot_report(report: String) -> String {
|
||||
eprintln!("HOLOLAKE_BOOT_REPORT: {report}");
|
||||
"ok".to_string()
|
||||
}
|
||||
|
||||
#[cfg_attr(mobile, tauri::mobile_entry_point)]
|
||||
pub fn run() {
|
||||
tauri::Builder::default()
|
||||
|
|
@ -45,6 +58,14 @@ pub fn run() {
|
|||
knowledge_base::search_knowledge,
|
||||
knowledge_base::save_knowledge_document,
|
||||
knowledge_base::select_and_import_knowledge_folder,
|
||||
knowledge_base::export_knowledge_document,
|
||||
knowledge_base::create_knowledge_document,
|
||||
agent_parlor::agent_parlor_ask,
|
||||
agent_parlor::agent_parlor_switch_layer,
|
||||
agent_parlor::agent_parlor_status,
|
||||
knowledge_base::delete_knowledge_document,
|
||||
knowledge_base::delete_knowledge_folder,
|
||||
knowledge_base::print_knowledge_document,
|
||||
code_channel::get_code_channel_snapshot,
|
||||
code_channel::clone_code_channel,
|
||||
code_channel::select_local_code_channel,
|
||||
|
|
@ -54,14 +75,127 @@ pub fn run() {
|
|||
pncc_repository_binding::select_pncc_repository_candidate,
|
||||
pncc_repository_binding::confirm_pncc_repository_mount,
|
||||
pncc_receipt_projection::query_pncc_receipt_projection,
|
||||
persona_butler::report_context_water_level,
|
||||
persona_butler::query_prompter,
|
||||
persona_butler::register_prompter_entry,
|
||||
persona_butler::submit_glp_envelope,
|
||||
persona_butler::deposit_work_order,
|
||||
persona_butler::get_butler_ledger,
|
||||
code_repo_login::check_code_repo_login,
|
||||
code_repo_login::perform_code_repo_login,
|
||||
code_repo_login::sign_out_code_repo_login,
|
||||
agent_host::receive_agent_task_envelope,
|
||||
agent_host::query_agent_session_memory,
|
||||
zero_point::zero_point_bind,
|
||||
zero_point::zero_point_verify,
|
||||
zero_point::zero_point_sync,
|
||||
zero_point::zero_point_status,
|
||||
zero_point::zero_point_save_api,
|
||||
zero_point::zero_point_api_config,
|
||||
zero_point::generic_layer_chat,
|
||||
debug_boot_report,
|
||||
])
|
||||
.setup(|app| {
|
||||
// 零点原核频道·铸渊执行手脚:启动即落仓、读协议、按协议裁决路由。
|
||||
let zero_point_state = zero_point::ZeroPointState::default();
|
||||
if let Err(error) = zero_point::boot_zero_point(app.handle(), &zero_point_state) {
|
||||
eprintln!("HoloLake zero-point core requires maintenance: {error}");
|
||||
}
|
||||
app.manage(zero_point_state);
|
||||
app.manage(agent_parlor::ParlorState::default());
|
||||
let butler = persona_butler::ButlerState::default();
|
||||
if let Err(error) = persona_butler::restore_ledger(app.handle(), &butler) {
|
||||
eprintln!("HoloLake butler ledger restore requires maintenance: {error}");
|
||||
}
|
||||
app.manage(butler);
|
||||
let broker = direct_local_broker::start(app.handle())?;
|
||||
app.manage(broker);
|
||||
release_trust::install_updater_if_provisioned(app.handle())?;
|
||||
if let Err(error) = release_update::observe_release_startup(app.handle()) {
|
||||
eprintln!("HoloLake update recovery requires maintenance: {error}");
|
||||
}
|
||||
// 启动自适应:按主屏大小调窗口(82%,上下限保护),钳制在主屏内。
|
||||
// 踩坑账:current_monitor 曾返回幽灵副屏(x=6901),center 把窗口弹出屏外,
|
||||
// 冰朔验收两次只见黑屏。现改为 primary_monitor + 坐标钳制,永不飞出屏。
|
||||
if let Some(window) = app.get_webview_window("main") {
|
||||
// 排障用:debug 构建自动打开开发者工具,看 webview 真实报错。
|
||||
#[cfg(debug_assertions)]
|
||||
window.open_devtools();
|
||||
// 排障自检:3 秒后让 webview 把自己的真实状态吐到 stderr。
|
||||
let probe = window.clone();
|
||||
std::thread::spawn(move || {
|
||||
eprintln!("PROBE_THREAD: fired");
|
||||
std::thread::sleep(std::time::Duration::from_secs(3));
|
||||
let js = concat!(
|
||||
"if (!window.__hololake_probe) {",
|
||||
" window.__hololake_probe = 0;",
|
||||
" var __t = setInterval(function(){",
|
||||
" window.__hololake_probe++;",
|
||||
" try {",
|
||||
" var __r = JSON.stringify({",
|
||||
" url: location.href,",
|
||||
" ready: document.readyState,",
|
||||
" rootChildren: (document.getElementById('root') ? document.getElementById('root').childElementCount : -1),",
|
||||
" hasTauri: !!(window.__TAURI__ && window.__TAURI__.core)",
|
||||
" });",
|
||||
" if (window.__TAURI__ && window.__TAURI__.core) {",
|
||||
" clearInterval(__t);",
|
||||
" window.__TAURI__.core.invoke('debug_boot_report', { report: String(__r) }).catch(function(){ });",
|
||||
" } else if (window.__hololake_probe === 5) {",
|
||||
" if (location.href.indexOf('5210') === -1) { location.replace('http://127.0.0.1:5210/'); }",
|
||||
" } else if (window.__hololake_probe > 30) {",
|
||||
" clearInterval(__t);",
|
||||
" }",
|
||||
" } catch (e) { window.__hololake_probe_err = String(e); }",
|
||||
" if (window.__hololake_probe_err && window.__hololake_probe > 8) {",
|
||||
" try {",
|
||||
" var __img = new Image();",
|
||||
" __img.src = 'http://127.0.0.1:5210/favicon.ico?err=' + encodeURIComponent(window.__hololake_probe_err).slice(0, 120);",
|
||||
" window.__hololake_probe_err = null;",
|
||||
" } catch (e2) { }",
|
||||
" }",
|
||||
" }, 2000);",
|
||||
"}"
|
||||
);
|
||||
match probe.eval(js) {
|
||||
Ok(_) => eprintln!("PROBE_EVAL: injected OK"),
|
||||
Err(e) => eprintln!("PROBE_EVAL_ERR: {e}"),
|
||||
}
|
||||
});
|
||||
// 自愈导航(踩坑账 2026-08-15:webview 曾停在 about:blank 导致整夜黑屏)。
|
||||
// 启动 6 秒后若 webview 还没坐上 devUrl,主动补一次导航;生产版无 dev_url 不生效。
|
||||
let heal = window.clone();
|
||||
let dev_url = app.config().build.dev_url.clone();
|
||||
std::thread::spawn(move || {
|
||||
std::thread::sleep(std::time::Duration::from_secs(6));
|
||||
if let Some(dev_url) = dev_url {
|
||||
if let Ok(current) = heal.url() {
|
||||
let current = current.to_string();
|
||||
if current.starts_with("about:") || !current.starts_with(dev_url.as_str()) {
|
||||
eprintln!("SELF_HEAL_NAV: webview at {current}, navigating to dev url");
|
||||
let _ = heal.navigate(dev_url);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
let monitor = window
|
||||
.primary_monitor()
|
||||
.ok()
|
||||
.flatten()
|
||||
.or_else(|| window.current_monitor().ok().flatten());
|
||||
if let Some(monitor) = monitor {
|
||||
let physical = monitor.size();
|
||||
let scale = monitor.scale_factor().max(1.0);
|
||||
let width = ((physical.width as f64 / scale) * 0.82).clamp(960.0, 1600.0);
|
||||
let height = ((physical.height as f64 / scale) * 0.82).clamp(640.0, 1000.0);
|
||||
let _ = window.set_size(tauri::LogicalSize::new(width, height));
|
||||
// 主屏居中(primary_monitor 坐标即主屏原点),不再用 center() 赌监视器。
|
||||
let mon_pos = monitor.position();
|
||||
let x = mon_pos.x as f64 / scale + ((physical.width as f64 / scale) - width) / 2.0;
|
||||
let y = mon_pos.y as f64 / scale + ((physical.height as f64 / scale) - height) / 2.0;
|
||||
let _ = window.set_position(tauri::LogicalPosition::new(x.max(0.0), y.max(0.0)));
|
||||
}
|
||||
}
|
||||
Ok(())
|
||||
})
|
||||
.run(tauri::generate_context!())
|
||||
|
|
|
|||
Loading…
Reference in a new issue