diff --git a/apps/mobile-shell/scripts/check-config.mjs b/apps/mobile-shell/scripts/check-config.mjs index 40fc0fbd8..a4a8b2d70 100644 --- a/apps/mobile-shell/scripts/check-config.mjs +++ b/apps/mobile-shell/scripts/check-config.mjs @@ -1962,14 +1962,17 @@ if (!hostBridgeNavigationSource.includes('openMobileShellExternalNavigation(Link } if ( - !dispatchSource.includes('getMobileHostBridgeNetworkStatus()') || + !dispatchSource.includes('getMobileHostBridgeNetworkStatus(request)') || dispatchSource.includes('../shell/network') || - dispatchSource.includes('getMobileNetworkStatus()') + dispatchSource.includes('getMobileNetworkStatus()') || + dispatchSource.includes('ok(request, await getMobileHostBridgeNetworkStatus())') ) { throw new Error('mobile shell network HostBridge method must delegate to network module'); } for (const snippet of [ 'getMobileHostBridgeNetworkStatus', + 'request: HostBridgeRequest', + 'ok(request, await getMobileNetworkStatus())', 'getMobileNetworkStatus()', ]) { if (!hostBridgeNetworkSource.includes(snippet)) { diff --git a/apps/mobile-shell/src/host-bridge/dispatch.ts b/apps/mobile-shell/src/host-bridge/dispatch.ts index 5f5c057be..09a7b140a 100644 --- a/apps/mobile-shell/src/host-bridge/dispatch.ts +++ b/apps/mobile-shell/src/host-bridge/dispatch.ts @@ -58,7 +58,7 @@ export async function dispatchMobileHostBridgeRequest( case 'app.reloadWebView': return ok(request, reloadMobileHostBridgeWebView(navigation)); case 'network.status': - return ok(request, await getMobileHostBridgeNetworkStatus()); + return getMobileHostBridgeNetworkStatus(request); case 'clipboard.writeText': return ok(request, await writeMobileHostBridgeClipboardText(request.payload)); case 'clipboard.readText': diff --git a/apps/mobile-shell/src/host-bridge/network.ts b/apps/mobile-shell/src/host-bridge/network.ts index ce8ea863d..ef046a42a 100644 --- a/apps/mobile-shell/src/host-bridge/network.ts +++ b/apps/mobile-shell/src/host-bridge/network.ts @@ -1,5 +1,9 @@ import { getMobileNetworkStatus } from '../shell/network'; +import { type HostBridgeRequest } from '../../../../packages/shared/src/contracts/hostBridge'; +import { ok } from './protocol'; -export function getMobileHostBridgeNetworkStatus() { - return getMobileNetworkStatus(); +export async function getMobileHostBridgeNetworkStatus( + request: HostBridgeRequest, +) { + return ok(request, await getMobileNetworkStatus()); } diff --git a/docs/project-memory/shared-memory/decision-log.md b/docs/project-memory/shared-memory/decision-log.md index d1645629b..986c9a110 100644 --- a/docs/project-memory/shared-memory/decision-log.md +++ b/docs/project-memory/shared-memory/decision-log.md @@ -2801,6 +2801,6 @@ ## 2026-06-19 原生壳网络查询桥接边界 - 背景:`network.status` 已由 Expo shell network 和 Tauri shell network 承接真实系统 / 主站可达性查询,但两端 HostBridge `dispatch` 仍直接调用底层 network helper 或异步阻塞包装,继续补壳能力时容易让分发层重新承接宿主细节。 -- 决策:Expo 移动壳新增 `apps/mobile-shell/src/host-bridge/network.ts`,统一承接 `network.status` HostBridge 查询并复用 `src/shell/network.ts`;Tauri 桌面壳新增 `apps/desktop-shell/src-tauri/src/host_bridge/network.rs`,统一承接 `network.status` HostBridge 查询、成功响应和 `host_error` 失败映射,并复用 `shell::network::resolve_desktop_network_status`。两端 `dispatch` 只保留 method 委托,配置检查会拒绝分发层直接导入 shell network、直接执行 `resolve_desktop_network_status` 或重新映射桌面网络错误。 +- 决策:Expo 移动壳新增 `apps/mobile-shell/src/host-bridge/network.ts`,统一承接 `network.status` HostBridge 查询和成功响应包装,并复用 `src/shell/network.ts`;Tauri 桌面壳新增 `apps/desktop-shell/src-tauri/src/host_bridge/network.rs`,统一承接 `network.status` HostBridge 查询、成功响应和 `host_error` 失败映射,并复用 `shell::network::resolve_desktop_network_status`。两端 `dispatch` 只保留 method 委托,配置检查会拒绝分发层直接导入 shell network、直接执行 `resolve_desktop_network_status`、包装移动网络成功响应或重新映射桌面网络错误。 - 影响范围:`apps/mobile-shell/src/host-bridge/network.ts`、`apps/mobile-shell/src/host-bridge/dispatch.ts`、`apps/mobile-shell/scripts/check-config.mjs`、`apps/desktop-shell/src-tauri/src/host_bridge/network.rs`、`apps/desktop-shell/src-tauri/src/host_bridge/dispatch.rs`、`apps/desktop-shell/scripts/check-config.mjs`、`scripts/check-native-shells.mjs`、宿主壳能力统一协议文档、Expo / Tauri HostBridge 方案文档。 - 验证方式:`npm run mobile-shell:typecheck`、`npm run mobile-shell:test -- src/host-bridge/bridge.test.ts`、`npm run desktop-shell:typecheck`、`cargo test --manifest-path apps/desktop-shell/src-tauri/Cargo.toml`、`npm run check:native-shells`、`npm run check:encoding`、`git diff --check`。