Nucleic: Windows Port 1

This commit is contained in:
2026-07-27 22:02:34 -07:00
commit 049ab9bc78
155 changed files with 3568 additions and 0 deletions
+48
View File
@@ -0,0 +1,48 @@
namespace NucleicBroker;
/// <summary>
/// The facade used when Microsoft.WSL.Containers isn't compiled in (any non-Windows build,
/// or a build without -p:UseWslc=true): every operation fails with a structured
/// `wslc_unavailable` error so hostd sees a clean capability gap, never a crash. The `hello`
/// exchange reports `wslcVersion: null`, which is the real capability signal.
/// </summary>
public sealed class UnavailableWslc : IWslc
{
public string? WslcVersion => null;
public void SetEvents(IBrokerEvents events) { }
private static WslcError Unavailable() =>
new(WslcError.Unavailable, "Microsoft.WSL.Containers is not available in this broker build");
public Task<IReadOnlyList<string>> MissingComponentsAsync(CancellationToken ct) =>
Task.FromException<IReadOnlyList<string>>(Unavailable());
public Task InstallComponentsAsync(CancellationToken ct) => Task.FromException(Unavailable());
public Task<string> EnsureSessionAsync(SessionSpec spec, CancellationToken ct) =>
Task.FromException<string>(Unavailable());
public Task TerminateSessionAsync(CancellationToken ct) => Task.FromException(Unavailable());
public Task PullImageAsync(string reference, RegistryAuth? auth, CancellationToken ct) =>
Task.FromException(Unavailable());
public Task<IReadOnlyList<ImageInfo>> ListImagesAsync(CancellationToken ct) =>
Task.FromException<IReadOnlyList<ImageInfo>>(Unavailable());
public Task DeleteImageAsync(string reference, CancellationToken ct) =>
Task.FromException(Unavailable());
public Task<ImageInfo?> InspectImageAsync(string reference, CancellationToken ct) =>
Task.FromException<ImageInfo?>(Unavailable());
public Task CreateContainerAsync(ContainerCreateSpec spec, CancellationToken ct) =>
Task.FromException(Unavailable());
public Task StartContainerAsync(string name, CancellationToken ct) =>
Task.FromException(Unavailable());
public Task StopContainerAsync(string name, int signal, int graceMs, CancellationToken ct) =>
Task.FromException(Unavailable());
public Task DeleteContainerAsync(string name, bool force, CancellationToken ct) =>
Task.FromException(Unavailable());
public Task<IReadOnlyList<ContainerInfo>> ListContainersAsync(CancellationToken ct) =>
Task.FromException<IReadOnlyList<ContainerInfo>>(Unavailable());
public Task<string> ContainerStateAsync(string name, CancellationToken ct) =>
Task.FromException<string>(Unavailable());
public Task<ContainerStatsInfo?> ContainerStatsAsync(string name, CancellationToken ct) =>
Task.FromException<ContainerStatsInfo?>(Unavailable());
public Task<IWslcProcess> ExecAsync(long procId, ProcSpec spec, CancellationToken ct) =>
Task.FromException<IWslcProcess>(Unavailable());
}