Capture the current unreleased K1 connection, recovery, lifecycle, viewer, and test work as a single known-bad baseline for subsequent fixes.
133 lines
7.7 KiB
TypeScript
133 lines
7.7 KiB
TypeScript
import {
|
||
isXgridsHostFailureDiagnostic,
|
||
type XgridsHostDiagnosticCode,
|
||
type XgridsHostDiagnosticAction,
|
||
type XgridsHostDiagnosticDomain,
|
||
type XgridsHostDiagnosticImpact,
|
||
type XgridsHostFailureDiagnostic,
|
||
type XgridsOperation,
|
||
} from "./api";
|
||
|
||
const CODE_LABELS: Record<XgridsHostDiagnosticCode, string> = {
|
||
"host.bluetooth.permission-denied":
|
||
"macOS не разрешила Mission Core использовать Bluetooth.",
|
||
"host.bluetooth.adapter-powered-off":
|
||
"Bluetooth на этом Mac выключен.",
|
||
"host.bluetooth.adapter-unavailable":
|
||
"Системный Bluetooth-адаптер сейчас недоступен.",
|
||
"host.bluetooth.runtime-unavailable":
|
||
"Локальный Bluetooth runtime не готов к новой операции.",
|
||
"host.bluetooth.operation-timeout":
|
||
"Bluetooth-операция не завершилась за ограниченное время.",
|
||
"host.wifi.permission-denied":
|
||
"macOS не разрешила Mission Core читать состояние Wi‑Fi.",
|
||
"host.wifi.adapter-powered-off":
|
||
"Wi‑Fi на этом Mac выключен.",
|
||
"host.wifi.interface-unavailable":
|
||
"Системный Wi‑Fi-интерфейс сейчас недоступен.",
|
||
"host.wifi.ssid-unavailable":
|
||
"macOS не сообщила имя текущей Wi‑Fi-сети.",
|
||
"host.wifi.operation-timeout":
|
||
"Операция с Wi‑Fi не завершилась за ограниченное время.",
|
||
"host.wifi.association-failed":
|
||
"Mac не подтвердил подключение к ожидаемой Wi‑Fi-сети.",
|
||
"host.keychain.interaction-required":
|
||
"Связка ключей требует явного подтверждения оператора.",
|
||
"host.keychain.permission-denied":
|
||
"macOS запретила чтение профиля подключения.",
|
||
"host.keychain.unavailable":
|
||
"Профиль подключения сейчас недоступен в связке ключей.",
|
||
"host.route.unavailable":
|
||
"Прямой локальный маршрут к адресу подключения не найден.",
|
||
"host.tcp.connection-refused":
|
||
"Управляющий TCP endpoint отклонил соединение.",
|
||
"host.tcp.connection-timeout":
|
||
"Управляющий TCP endpoint не ответил за ограниченное время.",
|
||
"host.tcp.endpoint-unavailable":
|
||
"Управляющий TCP endpoint недоступен из текущей сети.",
|
||
"host.mqtt.connection-timeout":
|
||
"Управляющий MQTT-канал не открылся за ограниченное время.",
|
||
"host.mqtt.connection-refused":
|
||
"Управляющий MQTT-канал отклонил соединение.",
|
||
"host.mqtt.transport-unavailable":
|
||
"Транспорт управляющего MQTT-канала недоступен.",
|
||
"host.filesystem.permission-denied":
|
||
"Mission Core не может записать обязательные данные операции в локальное хранилище.",
|
||
"host.filesystem.ledger-unavailable":
|
||
"Журнал безопасного результата операции недоступен или не подтверждён.",
|
||
};
|
||
|
||
const DOMAIN_LABELS: Record<XgridsHostDiagnosticDomain, string> = {
|
||
corebluetooth: "Bluetooth macOS",
|
||
corewlan: "Wi‑Fi macOS",
|
||
keychain: "Связка ключей macOS",
|
||
route: "Локальный сетевой маршрут",
|
||
tcp: "Управляющий TCP endpoint",
|
||
mqtt: "Управляющий канал MQTT",
|
||
filesystem: "Локальное хранилище Mission Core",
|
||
};
|
||
|
||
const IMPACT_LABELS: Record<XgridsHostDiagnosticImpact, string> = {
|
||
discovery: "Поиск Bluetooth сейчас недоступен.",
|
||
"host-network": "Сетевой путь между этим компьютером и локальным контуром недоступен.",
|
||
control: "Управляющая связь не установлена; команды не повторяются автоматически.",
|
||
"durable-safety": "Надёжная фиксация результата операции недоступна; новая команда заблокирована.",
|
||
};
|
||
|
||
const ACTION_LABELS: Record<XgridsHostDiagnosticAction, string> = {
|
||
"grant-bluetooth-permission":
|
||
"Разрешите Mission Core доступ к Bluetooth в системных настройках macOS, затем повторите действие вручную.",
|
||
"power-on-bluetooth":
|
||
"Включите Bluetooth на этом Mac и запустите новый поиск вручную.",
|
||
"restore-bluetooth-adapter":
|
||
"Восстановите доступность Bluetooth-адаптера macOS и перезапустите локальный сервис перед новой попыткой.",
|
||
"grant-wifi-permission":
|
||
"Разрешите Mission Core доступ к данным Wi‑Fi в системных настройках macOS, затем повторите действие вручную.",
|
||
"power-on-wifi":
|
||
"Включите Wi‑Fi на этом Mac и заново выберите требуемый способ подключения.",
|
||
"restore-wifi-interface":
|
||
"Восстановите системный Wi‑Fi-интерфейс macOS перед новой попыткой подключения.",
|
||
"unlock-or-authorize-keychain":
|
||
"Разблокируйте связку ключей macOS и подтвердите доступ Mission Core к профилю подключения.",
|
||
"review-keychain-access":
|
||
"Разрешите Mission Core чтение профиля подключения в связке ключей macOS.",
|
||
"join-expected-network":
|
||
"Установите связь этого Mac с ожидаемой локальной сетью и повторите действие.",
|
||
"inspect-host-route":
|
||
"Восстановите прямой локальный маршрут к адресу подключения.",
|
||
"verify-broker-endpoint":
|
||
"Восстановите доступность управляющего endpoint из текущей сети; команда автоматически не повторяется.",
|
||
"inspect-local-storage":
|
||
"Освободите место и восстановите доступ к локальному хранилищу Mission Core до следующей операции.",
|
||
"restart-local-service":
|
||
"Перезапустите канонический локальный сервис Mission Core и после загрузки обновите состояние.",
|
||
"explicit-retry":
|
||
"После устранения причины повторите действие отдельным нажатием; автоматического повтора нет.",
|
||
};
|
||
|
||
export interface HostFailureDiagnosticPresentation {
|
||
codeLabel: string;
|
||
domainLabel: string;
|
||
impactLabel: string;
|
||
operatorActionLabel: string;
|
||
}
|
||
|
||
export function hostFailureDiagnosticPresentation(
|
||
value: unknown,
|
||
): HostFailureDiagnosticPresentation | null {
|
||
if (!isXgridsHostFailureDiagnostic(value)) return null;
|
||
return {
|
||
codeLabel: CODE_LABELS[value.code],
|
||
domainLabel: DOMAIN_LABELS[value.domain],
|
||
impactLabel: IMPACT_LABELS[value.impact],
|
||
operatorActionLabel: ACTION_LABELS[value.operator_action],
|
||
};
|
||
}
|
||
|
||
export function operationHostFailureDiagnostic(
|
||
operation: XgridsOperation | null | undefined,
|
||
): XgridsHostFailureDiagnostic | null {
|
||
const diagnostic = operation?.error?.host_diagnostic;
|
||
return isXgridsHostFailureDiagnostic(diagnostic) ? diagnostic : null;
|
||
}
|