XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet

XFESystem

【Rust】XFE系统,基于Rust和汇编

公开
关注 0 Fork 0 Star 0
UTF-8
using Cosmos.Kernel.System;
using Cosmos.Kernel.System.Diagnostics;
using Cosmos.Kernel.System.Input;
using ConsoleKeyEx = Cosmos.Kernel.System.Input.Key;
using XFESystem.Core;
using XFESystem.Desktop;
using XFESystem.ConsoleDemo;
using XFESystem.Console;
using XFESystem.ManagedRuntime;
using XFESystem.Browser;
using System.Text;
using Cosmos.Kernel.System.Network;
using Cosmos.Kernel.System.Timers;
using System.Diagnostics;

namespace XFESystem.Kernel;

/// <summary>NativeAOT bare-metal kernel with explicit, bounded managed application compatibility.</summary>
public sealed class Kernel : Cosmos.Kernel.System.Kernel
{
    private DesktopSession? desktop;
    private TerminalSnapshot? demonstration;
    private int lastWindow;
    private MemoryWorkspace? workspace;
    private CanvasAdapter? display;
    private FramePacer? framePacer;
    private readonly NativeDesktopInput desktopInput = new();
    private readonly NativePointerFrameProbe pointerFrameProbe = new();
    private bool pointerProbeKeyDown;
    private string lastWindowState = "";
    private long lastRenderReport;
    private long lastChromeFrameReport;
    private string lastChromeFrame = "";
    private bool previousLeftButton;
    private string lastBrowserState = "";
    private long lastBrowserStateReport;
    private string lastBrowserInput = "";
    private long lastBrowserProofRevision = -1, lastBrowserProofReport;
    private int lastBrowserProofWindow;
    private string lastMonacoProof = "";
    private readonly EditorReadbackTracker basicEditorReadback = new();
    private bool lastPointerReportLeft;
    private NativeManagedWorkScheduler? editorWorker;
    private NativeManagedWorkScheduler? navigationWorker;
    private System.Threading.Thread? uiThread;
    private System.Threading.Thread? networkThread;
    private const string ManagedDemoPath = "X:\\Programs\\ManagedHello\\ManagedHello.dll";

    // Only the bounded serial byte write masks interrupts; formatting and all
    // kernel/network work happen before entering the runtime's atomic log API.
    private static void WriteDiagnostic(string message) => Log.WriteBytes(Encoding.UTF8.GetBytes("\n" + message));

    public override void Start()
    {
        NativeBootProgress.Begin();
        NativeBootProgress.Stage("A10", "Starting devices and drivers");
        try { base.Start(); }
        catch (Exception error) when (error is not OutOfMemoryException and not StackOverflowException)
        {
            NativeBootProgress.Failed(error.Message);
            WriteDiagnostic("[FAILFAST] Kernel lifecycle failed: " + error.Message + "\n");
            while (true) Power.Halt();
        }
    }

    protected override void OnBoot()
    {
        NativeBootProgress.Stage("A20", "Drivers completed; initializing console");
        base.OnBoot();
        NativeBootProgress.Stage("A21", "Console initialized");
    }

    protected override void BeforeRun()
    {
        NativeBootProgress.Resume("B00", "Managed desktop startup entered");
        InitializeDesktop();
    }

    private void InitializeDesktop()
    {
        NativeBootProgress.Stage("B10", "Preparing input and packaged resources");
        desktopInput.Trace = WriteDiagnostic;
        desktopInput.NavigationDispatched = () =>
        {
            // Navigation diagnostics inspect only the UI-owned Browser. The
            // background editor proxy never exposes its worker-owned engine.
            if (desktop?.ActiveWindow is { Application: DesktopApplication.Browser, BrowserSession: BrowserService navigation } &&
                Uri.TryCreate(navigation.CurrentPage.Address, UriKind.Absolute, out var address) && BrowserService.IsMonacoAddress(address))
                WriteDiagnostic("XFE_NATIVE_NAV_SELECTION_BEGIN\n" + navigation.ReadEditorNavigationProof() + "\nXFE_NATIVE_NAV_SELECTION_END\n");
        };
        NativeKeyboardCapture.Prepare();
        NativePointerCapture.Prepare();
        NativeNvidiaDiscovery.Report(WriteDiagnostic);
        WriteDiagnostic("XFE_CPU_TOPOLOGY|Physical|" + NativeBootProgress.PhysicalCpuCount() +
            "|Scheduler|" + NativeBootProgress.SchedulerCpuCount() + "|StartedCpus|1|BootstrapLogicalCpu|0\n");
        WriteDiagnostic("XFE_CSHARP_NATIVEAOT_BOOT_OK\n");
        int documentTextResources = XFESystem.Documents.WebsiteAssets.PrewarmTextResources();
        int browserTextResources = PackagedBrowserResources.PrewarmTextResources();
        WriteDiagnostic("XFE_PACKAGED_TEXT_PREWARM|Documents|" + documentTextResources + "|Browser|" + browserTextResources + "|Immutable|1\n");
        NativeBootProgress.Stage("B20", "Checking managed runtime");
        if (!RuntimeVarianceRegression.Run())
            throw new InvalidOperationException("The managed generic variance runtime regression failed.");
        WriteDiagnostic("XFE_RUNTIME_VARIANCE_OK\n");
        WriteDiagnostic("XFE_GC_DEEP_BEGIN\n");
        NativeBootProgress.Stage("B21", "Checking garbage collector");
        bool deepGc = NativeGcRegression.Run();
        WriteDiagnostic("XFE_GC_DEEP_RESULT|" + deepGc + "|Frames|"+NativeGcRegression.FramesVerified+"|Collections|"+NativeGcRegression.CollectionsRequested+"|FailureDepth|"+NativeGcRegression.FailureDepth+"\n");
        if (!deepGc) throw new InvalidOperationException("The native deep-stack GC root regression failed.");
        WriteDiagnostic("XFE_EH_DEEP_RETHROW_BEGIN\n");
        NativeBootProgress.Stage("B22", "Checking exception handling");
        if (!NativeEhRegression.Run())
            throw new InvalidOperationException("The native deep catch/rethrow recovery regression failed.");
        WriteDiagnostic("XFE_EH_DEEP_RETHROW_OK|Frames|" + NativeEhRegression.FramesCaught + "|Post|" + NativeEhRegression.PostCatchFrames + "\n");
        WriteDiagnostic("XFE_THREAD_EH_GC_BEGIN\n");
        NativeBootProgress.Stage("B30", "Checking timer, scheduler and thread runtime");
        bool threadRuntimeReady = NativeThreadRegression.Run();
        WriteDiagnostic("XFE_THREAD_EH_GC_RESULT|" + threadRuntimeReady + "|Steps|" + NativeThreadRegression.Steps + "|Collections|" + NativeThreadRegression.Collections + "|SingleCpu|1|GcStopTheWorld|1\n");
        WriteDiagnostic("XFE_THREAD_PREEMPTION|Checks|" + NativeThreadRegression.PreemptionChecks + "|FirstId|" + NativeThreadRegression.FirstThreadId + "|SecondId|" + NativeThreadRegression.SecondThreadId + "|FirstFailure|" + NativeThreadRegression.FirstFailure + "|SecondFailure|" + NativeThreadRegression.SecondFailure + "\n");
        WriteDiagnostic("XFE_THREAD_TLS|Checks|" + NativeThreadRegression.ThreadStaticChecks + "|FirstManagedId|" + NativeThreadRegression.FirstManagedThreadId + "|SecondManagedId|" + NativeThreadRegression.SecondManagedThreadId + "|OrdinaryThreadsOnly|1\n");
        WriteDiagnostic("XFE_NATIVE_SLEEP_TIMING|RequestedMilliseconds|25|ElapsedTicks|" + NativeThreadRegression.SleepElapsedTicks +
            "|Frequency|" + Stopwatch.Frequency + "\n");
        if (!threadRuntimeReady)
        {
            NativeBootProgress.Failed("Thread, timer or preemption contract failed.");
            WriteDiagnostic("[FAILFAST] Native thread EH/GC/preemption contract failed; background work and desktop startup remain disabled.\n");
            while (true) Power.Halt();
        }
        NativeBootProgress.Stage("B40", "Checking weak references and frozen memory");
        bool weakRuntimeReady = NativeWeakLifetimeRegression.Run(NativeRuntimeMemoryDiagnostics.DependentHandleCount);
        WriteDiagnostic("XFE_WEAK_LIFETIME_RESULT|" + weakRuntimeReady + "|Checks|" + NativeWeakLifetimeRegression.ChecksPassed +
            "|Weak|" + (NativeWeakLifetimeRegression.WeakTargetCleared ? 1 : 0) +
            "|Live|" + (NativeWeakLifetimeRegression.LiveValuePreserved ? 1 : 0) +
            "|Cycle|" + (NativeWeakLifetimeRegression.CycleCleared ? 1 : 0) +
            "|FixedPoint|" + (NativeWeakLifetimeRegression.FixedPointPreserved ? 1 : 0) +
            "|Disposed|" + (NativeWeakLifetimeRegression.HandlesDisposed ? 1 : 0) +
            "|HandlesBefore|" + NativeWeakLifetimeRegression.DependentHandlesBefore +
            "|HandlesAfter|" + NativeWeakLifetimeRegression.DependentHandlesAfter +
            "|Failure|" + NativeWeakLifetimeRegression.Failure + "\n");
        if (!weakRuntimeReady)
        {
            NativeBootProgress.Failed("Weak reference lifetime contract failed.");
            WriteDiagnostic("[FAILFAST] Native weak/dependent handle contract failed; browser and desktop remain disabled.\n");
            while (true) Power.Halt();
        }
        bool frozenRuntimeReady = NativeFrozenRangeRegression.Run(NativeRuntimeMemoryDiagnostics.ValidateFrozenRange,
            NativeRuntimeMemoryDiagnostics.RegisteredFrozenRangesValid);
        WriteDiagnostic("XFE_FROZEN_RANGE_RESULT|" + frozenRuntimeReady + "|Checks|" + NativeFrozenRangeRegression.ChecksPassed +
            "|RegisteredValid|" + (NativeFrozenRangeRegression.RegisteredRangesValid ? 1 : 0) +
            "|Failure|" + NativeFrozenRangeRegression.Failure + "\n");
        if (!frozenRuntimeReady)
        {
            NativeBootProgress.Failed("Frozen memory range contract failed.");
            WriteDiagnostic("[FAILFAST] Native frozen-object range contract failed; browser and desktop remain disabled.\n");
            while (true) Power.Halt();
        }
        bool weakCollectionsReady = NativeWeakCollectionsRegression.Run(NativeRuntimeMemoryDiagnostics.DependentHandleCount);
        WriteDiagnostic("XFE_OWNED_WEAK_COLLECTIONS_RESULT|" + weakCollectionsReady + "|Checks|" + NativeWeakCollectionsRegression.ChecksPassed +
            "|NativeCountChecked|" + (NativeWeakCollectionsRegression.NativeHandleCountChecked ? 1 : 0) +
            "|HandlesBefore|" + NativeWeakCollectionsRegression.DependentHandlesBefore +
            "|HandlesAfter|" + NativeWeakCollectionsRegression.DependentHandlesAfter +
            "|Failure|" + NativeWeakCollectionsRegression.Failure + "\n");
        if (!weakCollectionsReady)
        {
            NativeBootProgress.Failed("Owned weak collection contract failed.");
            WriteDiagnostic("[FAILFAST] Native owned weak collection contract failed; browser and desktop remain disabled.\n");
            while (true) Power.Halt();
        }
        NativeBootProgress.Stage("B50", "Checking JavaScript engine lifetime");
        var weakJavaScriptWarmup = BrowserWeakCollectionsRegression.Run();
        if (!weakJavaScriptWarmup.Passed || !weakJavaScriptWarmup.EngineCachesExercised ||
            !weakJavaScriptWarmup.ConstructorFailureReleased || !weakJavaScriptWarmup.ConstructorExceptionPreserved)
            throw new InvalidOperationException("The JavaScript weak collection warmup failed.");
        var weakJavaScript = BrowserWeakCollectionsRegression.Run(NativeRuntimeMemoryDiagnostics.DependentHandleCount);
        bool weakJavaScriptReady = weakJavaScript.Passed && weakJavaScript.EngineCachesExercised &&
            weakJavaScript.ConstructorFailureReleased && weakJavaScript.ConstructorExceptionPreserved;
        WriteDiagnostic("XFE_JS_WEAK_COLLECTIONS_RESULT|" + weakJavaScriptReady +
            "|NativeCountChecked|" + (weakJavaScript.NativeHandleCountChecked ? 1 : 0) +
            "|HandlesBefore|" + weakJavaScript.NativeHandlesBefore + "|HandlesAfter|" + weakJavaScript.NativeHandlesAfter +
            "|Created|" + weakJavaScript.AfterRelease.Created + "|Disposed|" + weakJavaScript.AfterRelease.Disposed +
            "|Tables|" + weakJavaScript.AfterRelease.Tables + "|Entries|" + weakJavaScript.AfterRelease.Entries +
            "|EngineCachesExercised|" + (weakJavaScript.EngineCachesExercised ? 1 : 0) +
            "|ConstructorFailureReleased|" + (weakJavaScript.ConstructorFailureReleased ? 1 : 0) +
            "|ConstructorExceptionPreserved|" + (weakJavaScript.ConstructorExceptionPreserved ? 1 : 0) +
            "|Actual|" + weakJavaScript.Actual + "\n");
        if (!weakJavaScriptReady)
        {
            NativeBootProgress.Failed("JavaScript weak collection contract failed.");
            WriteDiagnostic("[FAILFAST] Native JavaScript weak collection contract failed; browser and desktop remain disabled.\n");
            while (true) Power.Halt();
        }
        NativeBootProgress.Stage("B60", "Preparing memory workspace and console programs");
        RunConsoleDemo();
        workspace = new MemoryWorkspace();
        workspace.WriteText(SystemPaths.Combine(SystemPaths.Documents, "Readme.md"),
            "# XFESystem Markdown\n\n**Website renderer** is active.\n\n- C# desktop\n- JavaScript preview\n");
        workspace.WriteText(SystemPaths.Combine(SystemPaths.Documents, "WebsiteParity.md"), XFESystem.Documents.WebsiteAssets.ReadText("Fixtures/WebsiteParity.md"));
        workspace.WriteText(SystemPaths.Combine(SystemPaths.Documents, "ZCSharp.cs"), "using System;\nnamespace XFEstudio;\npublic sealed class Preview\n{\n    public string Message { get; set; } = \"Hello XFESystem\";\n    public static int Run(int value)\n    {\n        if (value > 0) return Math.Max(value, 42);\n        Console.WriteLine(\"Ready\");\n        return 0;\n    }\n}");
        workspace.CreateDirectory("X:\\Programs\\ManagedHello");
        using (var application = typeof(Kernel).Assembly.GetManifestResourceStream("XFESystem.Programs.ManagedHello.dll")
            ?? throw new InvalidOperationException("The independent C# example assembly is missing."))
        {
            var bytes = new byte[application.Length];
            application.ReadExactly(bytes);
            workspace.WriteBytes(ManagedDemoPath, bytes);
        }
        RunManagedApplicationCore(ManagedDemoPath, verifyDemonstration: true);
        NativeBootProgress.Stage("B70", "Network starts in background after desktop");
        WriteDiagnostic("XFE_NETWORK_DEFERRED|StartAfterDesktop|1\n");
        WriteDiagnostic("XFE_BROWSER_CONSTRUCT_BEGIN\n");
        NativeBootProgress.Stage("B80", "Preparing browser and document renderer");
        // Admit the real Monaco core, but reject larger optional dependencies
        // before AST preparation can exhaust a fragmented native heap.
        var browser = new BrowserService(new NativeWebTransport(), new BrowserLimits { MaximumExternalResourceCharacters = 2_500_000 }) { Trace = WriteDiagnostic };
        WriteDiagnostic("XFE_BROWSER_CONSTRUCT_OK\nXFE_BROWSER_NAVIGATE_BEGIN\n");
        var constrainedJavaScript = new JavaScriptRuntime(new BrowserLimits { MaximumStatements = 50 });
        if (constrainedJavaScript.Evaluate("while (true) {}").Success)
            throw new InvalidOperationException("The guest JavaScript statement budget was not enforced.");
        var recoveredJavaScript = constrainedJavaScript.Evaluate("6 * 7");
        if (!recoveredJavaScript.Success || recoveredJavaScript.Text != "42")
            throw new InvalidOperationException("The guest JavaScript runtime could not recover after its statement limit.");
        WriteDiagnostic("XFE_JAVASCRIPT_LIMIT_RECOVERY_OK\n");
        constrainedJavaScript.Dispose();
        var page = browser.Navigate("about:Start");
        BrowserNativeEventRegression.Run(browser,WriteDiagnostic);
        WriteDiagnostic("XFE_BROWSER_NAVIGATE_OK\n");
        if (!page.Text.Contains("JavaScript ready: 12", StringComparison.Ordinal))
            throw new InvalidOperationException("The guest browser JavaScript/DOM test failed: " + page.Text);
        WriteDiagnostic("XFE_BROWSER_MARKDOWN_BEGIN\n");
        var markdown = browser.PreviewMarkdown("# XFESystem\n\n**Markdown** from the website renderer.");
        if (!markdown.Contains("Markdown", StringComparison.Ordinal))
            throw new InvalidOperationException("The guest Markdown preview test failed.");
        WriteDiagnostic("XFE_CSHARP_JAVASCRIPT_DOM_OK\nXFE_CSHARP_MARKDOWN_OK\n");
        NativeBootProgress.Stage("B90", "Creating desktop display surface");
        var canvas = new CanvasAdapter();
        canvas.PointerFrameProbe = pointerFrameProbe;
        display = canvas;
        editorWorker = new NativeManagedWorkScheduler(WriteDiagnostic, canvas.ScalePercent / 100);
        navigationWorker = new NativeManagedWorkScheduler(WriteDiagnostic, canvas.ScalePercent / 100);
        IEditorPreparationService editorPreparation = new BrowserEditorPreparationService(browser, editorWorker, editorWorker, WriteDiagnostic, NativeThreadRegression.CurrentThreadId,
            monotonicMilliseconds: MonotonicMilliseconds, navigationScheduler: navigationWorker);
        WriteDiagnostic("XFE_WEB_FONT_METRICS|" + canvas.WebFontMetricsEvidence + "\n");
        MouseManager.SetScreenSize(canvas.NativeWidth, canvas.NativeHeight);
        MouseManager.SetPosition(canvas.NativeWidth / 2, canvas.NativeHeight / 2);
        var monitor = NativeDisplayInfo.Read(canvas.NativeWidth, canvas.NativeHeight);
        int refreshTarget = canvas.DriverRefreshHz > 0 ? canvas.DriverRefreshHz * 1000 :
            monitor.Timing.HasAdvertisedTiming ? monitor.Timing.AdvertisedRefreshMilliHz : 60_000;
        framePacer = new FramePacer(Stopwatch.Frequency, refreshTarget);
        // Wake the input/render loop often enough to service high-refresh input.
        // This is a timer cadence, not a claim of display scanout or VSync.
        if (TimerManager.IsInitialized && TimerManager.Frequency < 1000) TimerManager.Frequency = 1000;
        desktop = new DesktopSession(canvas, workspace, browser, consoleDemo: () => RunManagedApplication(ManagedDemoPath), managedApplication: RunManagedApplication,
            monotonicMilliseconds: MonotonicMilliseconds, editorPreparation: editorPreparation, threadIdentity: NativeThreadRegression.CurrentThreadId) { Trace = WriteDiagnostic };
        desktop.Pointer(canvas.ToLayout(MouseManager.X), canvas.ToLayout(MouseManager.Y), false);
        while (NativePointerCapture.TryRead(out _)) { }
        desktop.PointerReportsLost(canvas.ToLayout(MouseManager.X),canvas.ToLayout(MouseManager.Y),MouseManager.LeftButton,MonotonicMilliseconds());
        NativeBootProgress.Stage("B99", "Presenting desktop");
        NativeBootProgress.DesktopOwnsDisplay();
        desktop.Render();
        WriteDiagnostic("XFE_BOOT_SCREEN|Stages|" + NativeBootProgress.StageCount + "|DisabledBeforeDesktop|" + (NativeBootProgress.IsVisible ? 0 : 1) + "\n");
        WriteDiagnostic("XFE_SERIAL_BOUNDED|PollLimit|4096|Absent|" + NativeBootProgress.SerialAbsentCount() +
            "|Timeout|" + NativeBootProgress.SerialTimeoutCount() + "|Dropped|" + NativeBootProgress.SerialDroppedCount() + "\n");
        WriteDiagnostic("XFE_RENDER_BACKEND|Rasterization|CPU|GpuAcceleration|0|CudaAcceleration|0|Reason|No initialized native GPU or CUDA command backend\n");
        WriteDiagnostic("XFE_MONITOR_TIMING|" + monitor.Timing.AdvertisedRefreshMilliHz + "|TargetMilliHz|" + refreshTarget +
            "|DriverConfirmedHz|" + canvas.DriverRefreshHz + "|VSync|0|Origin|" + monitor.Origin + "|" + monitor.Timing.Source + "\n");
        WriteDiagnostic("XFE_INPUT_RAW_HOOK_EXPECTED\n");
        WriteDiagnostic("XFE_DISPLAY_NATIVE|" + canvas.NativeWidth + "|" + canvas.NativeHeight +
            "|ScalePercent|" + canvas.ScalePercent + "\n");
        WriteDiagnostic("XFE_CSHARP_DESKTOP_READY\n");
    }

    private static void InitializeNetwork()
    {
        // Driver-kit workers publish adapters asynchronously. The manager itself
        // is initialized by Cosmos before the driver stage, not by this kernel.
        long waitStarted = Stopwatch.GetTimestamp();
        bool ready = NativeNetworkBootWait.WaitUntilReady(
            () => NetworkManager.DeviceCount > 0 && NetworkManager.Ready && NetworkManager.LinkUp,
            Stopwatch.GetTimestamp, Stopwatch.Frequency, Power.Halt);
        WriteDiagnostic("XFE_NETWORK_BOOT_WAIT|Ready|" + ready + "|ElapsedTicks|" + (Stopwatch.GetTimestamp() - waitStarted) +
            "|Frequency|" + Stopwatch.Frequency + "|PitWait|0\n");
        if (!ready)
        {
            WriteDiagnostic("XFE_NETWORK_UNAVAILABLE\n");
            return;
        }
        try
        {
            var dhcp = new DhcpClient();
            try { dhcp.SendDiscoverPacket(); }
            catch { dhcp.Close(); throw; }
            dhcp.Close();
            if (NetworkManager.Primary.IPConfig is { } config && !config.Address.IsZero)
            {
                WriteDiagnostic("XFE_NETWORK_DHCP_OK|" + config.Address + "|DnsServers|" + DnsConfig.Nameservers.Count + "\n");
            }
            else WriteDiagnostic("XFE_NETWORK_DHCP_FAILED\n");
        }
        catch (Exception error) when (error is not OutOfMemoryException and not StackOverflowException)
        {
            WriteDiagnostic("XFE_NETWORK_DHCP_FAILED|" + error.Message + "\n");
        }
    }

    protected override void Run()
    {
        if (!NativeThreadRegression.Passed) { WriteDiagnostic("[FAILFAST] The native desktop requires its verified thread runtime.\n"); while (true) Power.Halt(); }
        // The boot thread is the scheduler's idle fallback. A CPU-bound worker
        // would starve it, so the UI must itself be an ordinary runnable thread.
        uiThread = new System.Threading.Thread(RunDesktopLoop, NativeManagedWorkScheduler.StackBytes);
        uiThread.Start();
        // Adapter and DHCP waits cannot hold the desktop's boot or UI thread.
        // The thread/runtime contract has already passed before either starts.
        networkThread = new System.Threading.Thread(InitializeNetwork, NativeManagedWorkScheduler.StackBytes);
        networkThread.Start();
        while (true) Power.Halt();
    }

    private void RunDesktopLoop()
    {
        WriteDiagnostic("XFE_DESKTOP_UI_THREAD|" + NativeThreadRegression.CurrentThreadId() + "|StackBytes|" + NativeManagedWorkScheduler.StackBytes + "\n");
        while (true)
        {
            if (desktop is { } session)
            {
                long inputMilliseconds = MonotonicMilliseconds();
                if (MouseManager.ScrollDelta != 0) MouseManager.ResetScrollDelta();
                bool leftButton = MouseManager.LeftButton, processedKey = false;
                NativePointerReport? pendingMotion = null;
                bool packetLeft = lastPointerReportLeft;
                // Bound one drain so continuous input cannot starve rendering,
                // animation, keyboard handling or diagnostics.
                int pointerBudget = 64;
                while (pointerBudget-- > 0 && NativePointerCapture.TryRead(out var pointerReport))
                {
                    if (pointerReport.LostReports)
                    {
                        pendingMotion = null; packetLeft = leftButton;
                        session.PointerReportsLost(display!.ToLayout(MouseManager.X),display.ToLayout(MouseManager.Y),leftButton,inputMilliseconds);
                        WriteDiagnostic("XFE_POINTER_REPORTS_LOST\n"); continue;
                    }
                    if (pointerReport.LeftButton == packetLeft && pointerReport.Wheel == 0) { pendingMotion = pointerReport; continue; }
                    if (pendingMotion is { } motion) { DispatchPointer(session,motion); pendingMotion = null; }
                    DispatchPointer(session,pointerReport); packetLeft = pointerReport.LeftButton;
                }
                if (pendingMotion is { } finalMotion) DispatchPointer(session,finalMotion);
                // Preserve the upstream queue for its other consumers but drain
                // our copy: desktop input must include modifier break reports.
                while (KeyboardManager.TryReadKey(out _)) { }
                while (NativeKeyboardCapture.TryRead(out var scanCode, out var released, out var lostReports))
                {
                    if (lostReports) pointerProbeKeyDown = false;
                    // Reserved opt-in native timing probe. F12 emits no
                    // per-frame logs; stop formats only after capture ends.
                    if (scanCode == 0x58 && !lostReports)
                    {
                        if (released) pointerProbeKeyDown = false;
                        else if (!pointerProbeKeyDown)
                        {
                            pointerProbeKeyDown = true;
                            var counters = new NativePointerTimingCounters(NativePointerCapture.ObservedReports,
                                NativePointerCapture.ConsumedReports, NativePointerCapture.LostReports);
                            long at = Stopwatch.GetTimestamp();
                            if (pointerFrameProbe.IsCapturing)
                                pointerFrameProbe.Stop(at, display!.FramesPresented, counters, WriteDiagnostic);
                            else
                            {
                                pointerFrameProbe.Start(Stopwatch.Frequency, at, display!.FramesPresented, counters);
                                WriteDiagnostic("XFE_POINTER_TIMING_STARTED\n");
                            }
                        }
                        continue;
                    }
                    if (desktopInput.Translate(scanCode, released, lostReports, session, out var character) is { } mapped)
                    {
                        processedKey = true;
                        session.Key(mapped, character);
                        if (mapped == DesktopKey.Enter && session.ActiveWindow is { Application: DesktopApplication.Browser } navigated)
                        {
                            // WriteBytes is the runtime's atomic serial protocol API.
                            // The plain string logger truncates UTF-16 to bytes and
                            // permits IRQ logs to split acceptance frame markers.
                            var body = navigated.Content.Length <= 4_096 ? navigated.Content : navigated.Content[..4_096];
                            var report = "XFE_BROWSER_NAVIGATED|" + navigated.Location +
                                "\nXFE_BROWSER_TEXT_BEGIN\n" + body + "\nXFE_BROWSER_TEXT_END\n";
                            if (navigated.Content.Contains("中文 HTTP 正文", StringComparison.Ordinal))
                                report += "XFE_BROWSER_UTF8_BODY_OK\n";
                            WriteDiagnostic(report);
                        }
                        if (mapped == DesktopKey.Save && session.ActiveWindow is { IsDirty: false } saved &&
                            saved.BrowserSession is not IBackgroundEditorSession)
                        {
                            WriteDiagnostic("XFE_DESKTOP_SAVED|" + saved.Location + "|" + saved.Content.Length + "\n");
                        }
                    }
                }
                // Already queued input takes priority over a cooperative page
                // loading phase. In particular Win+D/close can hide or remove
                // the page before an indivisible script evaluation starts.
                session.AdvanceFeedback(inputMilliseconds);
                var active = session.ActiveWindow;
                bool activeChanged = (active?.Id ?? 0) != lastWindow;
                // A queued readback can open a preview without another input
                // report. Publish its actual geometry before any DOM evidence.
                if (activeChanged) ReportWindowState(session);
                if (active is not null && VisiblePage(active) is not null)
                {
                    basicEditorReadback.Reset();
                    ReportBrowserState(active);
                }
                else if (active is { Application: DesktopApplication.Editor }) ReportBasicEditorState(active);
                else basicEditorReadback.Reset();
                if (activeChanged)
                {
                    lastWindow = active?.Id ?? 0;
                    WriteDiagnostic("XFE_DESKTOP_ACTIVE|" + (active?.Application.ToString() ?? "Desktop") + "\n");
                    if (active is { Application: DesktopApplication.Browser })
                    {
                        if (active.Content.Contains("JavaScript ready: 12", StringComparison.Ordinal))
                            WriteDiagnostic("XFE_BROWSER_START_DOM_RENDER_OK\n");
                        if (active.Content.Contains("Hello from XFESystem!", StringComparison.Ordinal))
                            WriteDiagnostic("XFE_EDITOR_JAVASCRIPT_PREVIEW_OK\n");
                        if (active.Content.Contains("Website renderer", StringComparison.Ordinal))
                            WriteDiagnostic("XFE_EDITOR_MARKDOWN_PREVIEW_OK\n");
                    }
                }
                if (!leftButton && (processedKey || previousLeftButton || lastWindowState.Length == 0)) ReportWindowState(session);
                previousLeftButton = leftButton;
                long now = Stopwatch.GetTimestamp();
                if (framePacer!.ShouldRender(now, session.NeedsRender))
                {
                    session.Render();
                    if (session.LastFrameCompleted)
                    {
                        framePacer.Rendered(now, Stopwatch.GetTimestamp());
                        ReportChromeFrame(session, now);
                    }
                }
                if (now - lastRenderReport >= Stopwatch.Frequency)
                {
                    lastRenderReport = now;
                    WriteDiagnostic("XFE_RENDER_STATS|" + now + "|Frames|" + framePacer.FramesRendered + "|Partial|" + display!.PartialFrames +
                        "|Pixels|" + display.PixelsPresented + "|Glyphs|" + display.CachedGlyphCount + "|Fallback|" + display.FullCopyFallbackFrames +
                        "|LastRenderTicks|" + framePacer.LastRenderDurationTicks + "|Frequency|" + Stopwatch.Frequency +
                        "|MotionReuses|" + display.MotionReuseCount + "|MotionPixels|" + display.MotionPixelsReused +
                        "|ScanoutPixelsSaved|" + display.ScanoutPixelsSaved + "|RenderYields|" + session.RenderYieldCount +
                        "|RawFreePages|" + NativeRuntimeMemoryDiagnostics.FreePages() + "|RawTotalPages|" + NativeRuntimeMemoryDiagnostics.TotalPages() +
                        "|RawLargestFreeRunPages|" + NativeRuntimeMemoryDiagnostics.LargestFreeRunPages() +
                        "|LastGcIndex|" + NativeRuntimeMemoryDiagnostics.LastGcCollectionIndex() +
                        "|LastGcHeapSpanBytes|" + NativeRuntimeMemoryDiagnostics.LastGcHeapSpanBytes() +
                        "|LastGcFragmentedBytes|" + NativeRuntimeMemoryDiagnostics.LastGcFragmentedBytes() +
                        "|LastGcCommittedBytes|" + NativeRuntimeMemoryDiagnostics.LastGcCommittedBytes() +
                        "|DependentHandles|" + NativeRuntimeMemoryDiagnostics.DependentHandleCount() +
                        "|WebFrameChunks|" + display.WebFramePixelChunkAllocations +
                        "|WebFrameLargestChunkBytes|" + display.WebFrameLargestPixelChunkBytes +
                        "|WebFrameStorageReuses|" + display.WebFramePixelStorageReuses + "\n");
                    if (active?.BrowserSession is BrowserService measuredPage)
                        WriteDiagnostic("XFE_WEB_WORK|Window|" + active.Id + "|Layout|" + measuredPage.LayoutPassCount +
                            "|ScrollReuse|" + measuredPage.ScrollLayoutReuseCount + "|Raster|" + measuredPage.RasterPaintCount +
                            "|CachedPaint|" + measuredPage.CachedPaintCount + "|AstHits|" + measuredPage.PackagedScriptCacheHits +
                            "|AstPrepared|" + measuredPage.PackagedScriptPreparations + "\n");
                    else if (active?.BrowserSession is IBackgroundEditorSession backgroundPage)
                    {
                        var published = backgroundPage.Diagnostics;
                        WriteDiagnostic("XFE_WEB_WORK|Window|" + active.Id + "|Layout|" + published.LayoutPassCount +
                            "|ScrollReuse|" + published.ScrollLayoutReuseCount + "|Raster|" + backgroundPage.RasterPaintCount +
                            "|CachedPaint|" + backgroundPage.CachedPaintCount + "|AstHits|" +
                            published.PackagedScriptCacheHits + "|AstPrepared|" + published.PackagedScriptPreparations +
                            "|EngineThread|" + published.WorkerThreadId + "|PaintSource|Snapshot\n");
                    }
                }
            }
            Power.Halt();
        }
    }

    private static long MonotonicMilliseconds() => (long)(Stopwatch.GetTimestamp() / (double)Stopwatch.Frequency * 1000);
    private void DispatchPointer(DesktopSession session,NativePointerReport report)
    {
        int x = display!.ToLayout(report.X), y = display.ToLayout(report.Y);
        pointerFrameProbe.ObserveConsumed(report.Sequence, report.TimestampTicks, Stopwatch.GetTimestamp(), x, y);
        bool released = lastPointerReportLeft && !report.LeftButton;
        // Button transitions are enough for click evidence. Per-wheel serial
        // formatting at high input rates would distort the measured rendering.
        if (report.LeftButton != lastPointerReportLeft)
        {
            lastPointerReportLeft = report.LeftButton;
            WriteDiagnostic("XFE_NATIVE_POINTER|X|" + x + "|Y|" + y + "|Left|" + (report.LeftButton ? 1 : 0) +
                "|Wheel|" + report.Wheel + "|Ticks|" + report.TimestampTicks + "\n");
        }
        session.Pointer(x,y,report.LeftButton,report.DesktopWheel,(long)(report.TimestampTicks/(double)Stopwatch.Frequency*1000));
        // A complete down/move/up can be drained in one UI iteration. The
        // MouseManager snapshot taken before that drain may already be up,
        // so publish final bounds from the actual release transition.
        if (released) ReportWindowState(session);
    }
    private void ReportBasicEditorState(DesktopWindow window)
    {
        const int limit = EditorReadbackTracker.MaximumPrefixCharacters;
        if (!basicEditorReadback.TryUpdate(window.Id, window.Location, window.Content, out string source)) return;
        WriteDiagnostic("XFE_BASIC_EDITOR_VALUE_BEGIN\nWindow|" + window.Id + "|Path|" + window.Location +
            "|SourceCharacters|" + window.Content.Length + "|Truncated|" + (window.Content.Length > limit ? 1 : 0) +
            "\n" + source + "\nXFE_BASIC_EDITOR_VALUE_END\n");
    }

    private void ReportBrowserState(DesktopWindow window)
    {
        long now = MonotonicMilliseconds();
        var visiblePage = VisiblePage(window);
        // Background editors publish immutable diagnostics. Never unwrap their
        // engine or ask a worker-owned BrowserService to acquire its page gate.
        var background = visiblePage as IBackgroundEditorSession;
        var published = background?.Diagnostics;
        string? inputTrace = visiblePage is BrowserService traced ? traced.LastInputTrace : published?.LastInputTrace;
        if (inputTrace is not null && inputTrace != lastBrowserInput)
        { lastBrowserInput = inputTrace; WriteDiagnostic("XFE_BROWSER_INPUT|" + lastBrowserInput + "\n"); }
        if (visiblePage is BrowserService documentBrowser && now - lastBrowserProofReport >= 500 &&
            (lastBrowserProofWindow != window.Id || lastBrowserProofRevision != documentBrowser.Revision))
        {
            lastBrowserProofWindow = window.Id; lastBrowserProofRevision = documentBrowser.Revision; lastBrowserProofReport = now;
            var documentProof = documentBrowser.ReadWebsiteDocumentProof();
            if (documentProof != "{}") WriteDiagnostic("XFE_WEBSITE_DOCUMENT_PROOF_BEGIN\n" + documentProof + "\nXFE_WEBSITE_DOCUMENT_PROOF_END\n");
            if (Uri.TryCreate(documentBrowser.CurrentPage.Address, UriKind.Absolute, out var proofUri) && BrowserService.IsMonacoAddress(proofUri))
            {
                // Background tokenization can change span classes without changing
                // textContent. Read real view state after each changed revision.
                var colorProof = documentBrowser.ReadMonacoProof();
                if (colorProof != "{}" && colorProof != lastMonacoProof)
                { lastMonacoProof = colorProof; WriteDiagnostic("XFE_MONACO_CSHARP_PROOF_BEGIN\n" + colorProof + "\nXFE_MONACO_CSHARP_PROOF_END\n"); }
            }
        }
        else if (background is not null && published is not null && now - lastBrowserProofReport >= 500 &&
            (lastBrowserProofWindow != window.Id || lastBrowserProofRevision != background.Revision))
        {
            lastBrowserProofWindow = window.Id; lastBrowserProofRevision = background.Revision; lastBrowserProofReport = now;
            string colorProof = published.MonacoProof;
            if (colorProof != "{}" && colorProof != lastMonacoProof)
            { lastMonacoProof = colorProof; WriteDiagnostic("XFE_MONACO_CSHARP_PROOF_BEGIN\n" + colorProof + "\nXFE_MONACO_CSHARP_PROOF_END\n"); }
        }
        if (now - lastBrowserStateReport < 200) return;
        lastBrowserStateReport = now;
        string content = window.IsMarkdown && window.MarkdownView != MarkdownViewMode.Edit && visiblePage is not null ? visiblePage.CurrentPage.Text : window.Content;
        var body = content.Length <= 4096 ? content : content[..4096];
        string state = window.Id + "|" + window.Location + "\n" + body;
        if (state == lastBrowserState) return;
        lastBrowserState = state;
        WriteDiagnostic("XFE_BROWSER_STATE_BEGIN\n" + state + "\nXFE_BROWSER_STATE_END\n");
        if (background is not null && background.ReadEditorText() is not null || visiblePage is BrowserService browser && Uri.TryCreate(browser.CurrentPage.Address, UriKind.Absolute, out var browserUri) && BrowserService.IsMonacoAddress(browserUri) &&
            (window.Application == DesktopApplication.Editor || body.Contains("Official Monaco 0.52.2 - ready", StringComparison.Ordinal) || body.Contains("Monaco - edited", StringComparison.Ordinal) || body.Contains("Monaco C# - website grammar and palette", StringComparison.Ordinal)))
        {
            var value = visiblePage!.ReadEditorText() ?? "Editor unavailable";
            WriteDiagnostic("XFE_MONACO_VALUE_BEGIN\n" + value + "\nXFE_MONACO_VALUE_END\n");
        }
    }
    private static IInteractiveBrowserSession? VisiblePage(DesktopWindow window) =>
        window.IsMarkdown && window.MarkdownView == MarkdownViewMode.Preview ? window.PreviewSession : window.BrowserSession;
    private void ReportChromeFrame(DesktopSession session, long now)
    {
        if (now - lastChromeFrameReport < Stopwatch.Frequency / 25) return;
        var active = session.ActiveWindow;
        if (active is null) return;
        var chrome = active.ChromeAnimation;
        string state = "XFE_CHROME_FRAME|" + active.Id + "|Min|" + (int)Math.Round(chrome.MinimizeProgress * 1000) +
            "|Close|" + (int)Math.Round(chrome.CloseProgress * 1000) + "|Title|" + (int)Math.Round(chrome.TitleHintProgress * 1000) +
            "|Resize|" + (int)Math.Round(chrome.ResizeProgress * 1000);
        if (state == lastChromeFrame) return;
        lastChromeFrame = state; lastChromeFrameReport = now;
        WriteDiagnostic(state + "\n");
    }
    private void ReportWindowState(DesktopSession session)
    {
        string report = "XFE_DESKTOP_FLAGS|" + (session.IsStartMenuOpen ? 1 : 0) + "|" + (session.IsWindowSwitching ? 1 : 0) +
            "|Active|" + (session.ActiveWindow?.Id ?? 0) + "\n" +
            "XFE_DESKTOP_APPEARANCE|" + session.Theme.Mode + "|" + session.Theme.Accent.ToString("X6") +
            "|Persistent|" + (session.IsAppearancePersistent ? 1 : 0) + "\n";
        foreach (var window in session.Windows)
        {
            var b = window.Bounds;
            report += "XFE_WINDOW_STATE|" + window.Id + "|" + window.Application + "|" + b.X + "|" + b.Y + "|" + b.Width + "|" + b.Height +
                "|" + (window.IsMinimized ? 1 : 0) + "|" + (window.IsMaximized ? 1 : 0) + "|" + (window.IsSnapped ? 1 : 0) + "\n";
        }
        if (report == lastWindowState) return;
        lastWindowState = report; WriteDiagnostic(report);
    }

    private void RunConsoleDemo()
    {
        var buffer = new TerminalBuffer(90, 18);
        var writer = new TerminalTextWriter(buffer);
        ConsoleDemoScenario.Run(writer);
        ConsoleDemoScenario.RunXfeConsoleApi(writer);
        writer.Complete();
        demonstration = writer.Snapshot();
        if (!buffer.GetText().Contains(ConsoleDemoScenario.SuccessMarker, StringComparison.Ordinal))
            throw new InvalidOperationException("The guest console application did not complete.");
        if (!buffer.GetText().Contains("XFEConsole API: Real NuGet 2.6.0", StringComparison.Ordinal))
            throw new InvalidOperationException("The real XFEConsole API did not write to the guest terminal.");
        var rgb = buffer.GetCell(0, 1).Style.Foreground;
        if (rgb != TerminalColor.ThemeForeground)
            throw new InvalidOperationException("The guest ANSI true color output was not preserved.");
        ConsoleDemoScenario.RunSystemConsoleColors();
        var previousForeground = global::System.Console.ForegroundColor;
        global::System.Console.ForegroundColor = ConsoleColor.Cyan;
        if (global::System.Console.ForegroundColor != ConsoleColor.Cyan)
            throw new InvalidOperationException("The guest Console color PAL did not preserve its state.");
        global::System.Console.ForegroundColor = previousForeground;
        desktop?.SetTerminalSnapshot(demonstration);
        WriteDiagnostic("XFE_CSHARP_CONSOLE_DEMO_OK\nXFE_CSHARP_ANSI_RGB_OK\nXFE_CSHARP_CONSOLE_PAL_COLOR_OK\nXFE_CSHARP_XFECONSOLE_API_OK\n");
    }

    private void RunManagedApplication(string path)
    {
        try { RunManagedApplicationCore(path); }
        catch (Exception error) when (error is not OutOfMemoryException and not StackOverflowException)
        {
            var buffer = new TerminalBuffer(90, 18);
            buffer.Write("The program cannot run in this compatibility profile.\r\n" + error.Message);
            desktop?.SetTerminalSnapshot(buffer.Snapshot());
            WriteDiagnostic("XFE_MANAGED_APP_REJECTED\n");
        }
    }

    private void RunManagedApplicationCore(string path, bool verifyDemonstration = false)
    {
        var bytes = (workspace ?? throw new InvalidOperationException("The workspace is not initialized.")).ReadBytes(path);
        var buffer = new TerminalBuffer(90, 18);
        var writer = new TerminalTextWriter(buffer);
        var result = new ManagedApplicationRunner().Execute(bytes, new TerminalManagedConsole(writer));
        writer.Complete();
        bool demonstrationSucceeded = result.ExitCode == 0 &&
            buffer.GetText().Contains("XFE_MANAGED_APP_OK", StringComparison.Ordinal) &&
            buffer.GetText().Contains("XFE_MANAGED_XFECONSOLE_OK", StringComparison.Ordinal) &&
            buffer.GetCell(0, 1).Style.Foreground == TerminalColor.ThemeForeground;
        if (verifyDemonstration && !demonstrationSucceeded)
            throw new InvalidOperationException("The independent C# example assembly did not complete its console/ANSI scenario.");
        desktop?.SetTerminalSnapshot(buffer.Snapshot());
        if (demonstrationSucceeded)
            WriteDiagnostic("XFE_MANAGED_APP_OK\nXFE_MANAGED_XFECONSOLE_OK\nXFE_MANAGED_ANSI_RGB_OK\n");
        WriteDiagnostic("XFE_MANAGED_APPLICATION_EXIT|" + result.AssemblyName + "|" + result.ExitCode + "\n");
        WriteDiagnostic("XFE_MANAGED_IL_INSTRUCTIONS|" + result.Instructions + "|InteropCalls|" + result.InteropCalls + "\n");
    }

    private static DesktopKey? MapKey(KeyEvent key)
    {
        if ((key.Modifiers & ConsoleModifiers.Control) != 0 && key.Key == ConsoleKeyEx.S)
            return DesktopKey.Save;
        if ((key.Modifiers & ConsoleModifiers.Control) != 0 && key.Key == ConsoleKeyEx.L)
            return DesktopKey.FocusAddress;
        return key.Key switch
        {
            ConsoleKeyEx.Enter => DesktopKey.Enter,
            ConsoleKeyEx.Backspace => DesktopKey.Backspace,
            ConsoleKeyEx.Delete => DesktopKey.Delete,
            ConsoleKeyEx.LeftArrow => DesktopKey.Left,
            ConsoleKeyEx.RightArrow => DesktopKey.Right,
            ConsoleKeyEx.UpArrow => DesktopKey.Up,
            ConsoleKeyEx.DownArrow => DesktopKey.Down,
            ConsoleKeyEx.Home => DesktopKey.Home,
            ConsoleKeyEx.End => DesktopKey.End,
            ConsoleKeyEx.Tab => DesktopKey.Tab,
            ConsoleKeyEx.Escape => DesktopKey.Escape,
            ConsoleKeyEx.F5 => DesktopKey.Run,
            _ => key.KeyChar >= ' ' ? DesktopKey.Character : null
        };
    }
}