bin/net8.0/PSDataRepository.Core.xml

<?xml version="1.0"?>
<doc>
    <assembly>
        <name>PSDataRepository.Core</name>
    </assembly>
    <members>
        <member name="T:PSDataRepository.Core.Common.AsyncHelper">
            <summary>
            Provides helper methods for safely executing async operations synchronously
            in PowerShell binary cmdlet context.
            <para>
            PowerShell 7+ runs cmdlets without a <see cref="T:System.Threading.SynchronizationContext"/>, so blocking
            on a task here cannot deadlock the way it would in a UI/ASP.NET classic context.
            We deliberately do <b>not</b> use <c>Task.Run</c> to keep the call on the cmdlet's
            own thread — this preserves <see cref="T:System.Threading.AsyncLocal`1"/> flow
            (the <see cref="T:PSDataRepository.Core.Session.RepositorySession"/> ambient slot
            in particular) and avoids an unnecessary thread-pool hop per await.
            </para>
            </summary>
        </member>
        <member name="M:PSDataRepository.Core.Common.AsyncHelper.RunSync``1(System.Func{System.Threading.Tasks.Task{``0}})">
            <summary>Safely executes an async operation synchronously and returns the result.</summary>
        </member>
        <member name="M:PSDataRepository.Core.Common.AsyncHelper.RunSync(System.Func{System.Threading.Tasks.Task})">
            <summary>Safely executes an async operation synchronously (no return value).</summary>
        </member>
        <member name="M:PSDataRepository.Core.Common.AsyncHelper.RunSync``1(System.Func{System.Threading.CancellationToken,System.Threading.Tasks.Task{``0}},System.Threading.CancellationToken)">
            <summary>
            Safely executes an async operation that accepts a <see cref="T:System.Threading.CancellationToken"/>
            synchronously and returns the result.
            </summary>
        </member>
        <member name="M:PSDataRepository.Core.Common.AsyncHelper.RunSync(System.Func{System.Threading.CancellationToken,System.Threading.Tasks.Task},System.Threading.CancellationToken)">
            <summary>
            Safely executes an async operation that accepts a <see cref="T:System.Threading.CancellationToken"/>
            synchronously (no return value).
            </summary>
        </member>
        <member name="T:PSDataRepository.Core.Common.EncodingCompleter">
            <summary>
            Provides tab-completion for common encoding names used in cmdlet parameters.
            </summary>
        </member>
        <member name="T:PSDataRepository.Core.Common.EncodingTransformationAttribute">
            <summary>
            Transforms string encoding names (e.g., "UTF8", "ASCII") into <see cref="T:System.Text.Encoding"/> instances.
            Allows users to pass friendly encoding names instead of <c>[System.Text.Encoding]::UTF8</c>.
            </summary>
        </member>
        <member name="M:PSDataRepository.Core.Common.EncodingTransformationAttribute.Transform(System.Management.Automation.EngineIntrinsics,System.Object)">
            <inheritdoc/>
        </member>
        <member name="T:PSDataRepository.Core.Common.RetryHelper">
            <summary>
            Provides retry logic for transient failures in Azure operations.
            Implements exponential backoff strategy with optional ILogger support.
            </summary>
        </member>
        <member name="F:PSDataRepository.Core.Common.RetryHelper._transientClassifiers">
            <summary>
            Pluggable transient exception classifiers. Providers register their own
            (e.g., Azure <c>RequestFailedException</c>, SSH.NET, FluentFTP).
            </summary>
        </member>
        <member name="M:PSDataRepository.Core.Common.RetryHelper.RegisterTransientClassifier(System.Func{System.Exception,System.Boolean})">
            <summary>
            Registers a provider-specific transient exception classifier.
            Called by provider assemblies during initialization.
            Returns an <see cref="T:System.IDisposable"/> that unregisters the classifier when disposed.
            </summary>
        </member>
        <member name="F:PSDataRepository.Core.Common.RetryHelper.DefaultMaxRetries">
            <summary>
            Default maximum number of retry attempts.
            </summary>
        </member>
        <member name="F:PSDataRepository.Core.Common.RetryHelper.DefaultInitialDelayMs">
            <summary>
            Default initial delay between retries (in milliseconds).
            </summary>
        </member>
        <member name="F:PSDataRepository.Core.Common.RetryHelper.DefaultMaxDelayMs">
            <summary>
            Default maximum delay between retries (in milliseconds).
            </summary>
        </member>
        <member name="M:PSDataRepository.Core.Common.RetryHelper.ExecuteWithRetryAsync``1(System.Func{System.Threading.Tasks.Task{``0}},System.Int32,System.Int32,System.Int32,Microsoft.Extensions.Logging.ILogger,System.Threading.CancellationToken,System.Action{System.String})">
            <summary>
            Executes an async operation with retry logic for transient failures.
            Uses exponential backoff strategy.
            </summary>
            <typeparam name="T">Return type of the operation.</typeparam>
            <param name="operation">The async operation to execute.</param>
            <param name="maxRetries">
            Maximum number of total attempts (initial call + retries). Must be &gt;= 1.
            A value of 1 disables retries — the operation is invoked once and any transient
            failure surfaces directly.
            </param>
            <param name="initialDelayMs">Initial delay between retries in milliseconds.</param>
            <param name="maxDelayMs">Maximum delay between retries in milliseconds.</param>
            <param name="logger">Optional logger for retry diagnostics.</param>
            <param name="cancellationToken">Cancellation token.</param>
            <param name="onRetry">Optional callback invoked on each retry attempt with diagnostic message.</param>
            <returns>Result of the operation.</returns>
        </member>
        <member name="M:PSDataRepository.Core.Common.RetryHelper.ExecuteWithRetryAsync(System.Func{System.Threading.Tasks.Task},System.Int32,System.Int32,System.Int32,Microsoft.Extensions.Logging.ILogger,System.Threading.CancellationToken,System.Action{System.String})">
            <summary>
            Executes an async operation with retry logic (void return).
            </summary>
        </member>
        <member name="M:PSDataRepository.Core.Common.RetryHelper.IsTransientException(System.Exception)">
            <summary>
            Determines if an exception is transient and should be retried.
            </summary>
            <param name="exception">The exception to check.</param>
            <returns>True if the exception is transient and can be retried.</returns>
        </member>
        <member name="T:PSDataRepository.Core.Common.RetryHelper.RetryPolicy">
            <summary>
            Creates a retry policy configuration.
            </summary>
        </member>
        <member name="M:PSDataRepository.Core.Common.RetryHelper.RetryPolicy.ExecuteAsync``1(System.Func{System.Threading.Tasks.Task{``0}},System.Threading.CancellationToken)">
            <summary>
            Executes an operation using this policy.
            </summary>
        </member>
        <member name="M:PSDataRepository.Core.Common.RetryHelper.RetryPolicy.ExecuteAsync(System.Func{System.Threading.Tasks.Task},System.Threading.CancellationToken)">
            <summary>
            Executes an operation using this policy (void return).
            </summary>
        </member>
        <member name="P:PSDataRepository.Core.Common.RetryHelper.RetryPolicy.Default">
            <summary>
            Default retry policy for Azure operations.
            </summary>
        </member>
        <member name="P:PSDataRepository.Core.Common.RetryHelper.RetryPolicy.Aggressive">
            <summary>
            Aggressive retry policy for critical operations.
            </summary>
        </member>
        <member name="P:PSDataRepository.Core.Common.RetryHelper.RetryPolicy.None">
            <summary>
            No retry policy.
            </summary>
        </member>
        <member name="T:PSDataRepository.Core.Exceptions.PSDataRepositoryException">
            <summary>
            Base exception for all PSDataRepository-related errors.
            </summary>
        </member>
        <member name="T:PSDataRepository.Core.Exceptions.ConnectionException">
            <summary>
            Exception thrown when connection to a repository fails.
            </summary>
        </member>
        <member name="T:PSDataRepository.Core.Exceptions.AuthenticationException">
            <summary>
            Exception thrown when authentication or authorization fails.
            </summary>
        </member>
        <member name="T:PSDataRepository.Core.Exceptions.TransientException">
            <summary>
            Exception thrown when a repository operation fails due to transient errors (can be retried).
            </summary>
        </member>
        <member name="T:PSDataRepository.Core.Exceptions.SessionNotFoundException">
            <summary>
            Exception thrown when a session/connection is required but not established.
            </summary>
        </member>
        <member name="T:PSDataRepository.Core.Exceptions.UnsupportedProviderOperationException">
            <summary>
            Exception thrown when attempting to perform unsupported operations on a provider.
            </summary>
        </member>
        <member name="T:PSDataRepository.Core.Exceptions.SerializationException">
            <summary>
            Exception thrown when serialization/deserialization fails.
            </summary>
        </member>
        <member name="T:PSDataRepository.Core.Extensions.ConnectContext">
            <summary>
            Concrete implementation of <see cref="T:PSDataRepository.Abstractions.IConnectContext"/> that wraps
            PowerShell <see cref="T:System.Management.Automation.RuntimeDefinedParameterDictionary"/> dynamic parameters.
            </summary>
        </member>
        <member name="M:PSDataRepository.Core.Extensions.ConnectContext.From(System.Collections.Generic.IDictionary{System.String,System.Object},PSDataRepository.Abstractions.IAuthenticationInfo,System.String)">
            <summary>
            Creates a <see cref="T:PSDataRepository.Core.Extensions.ConnectContext"/> from a generic property bag for non-PowerShell
            callers (e.g. the MCP host or unit tests) where no <see cref="T:System.Management.Automation.RuntimeDefinedParameterDictionary"/>
            is available. Keys are matched case-insensitively, mirroring PowerShell parameter binding.
            </summary>
        </member>
        <member name="P:PSDataRepository.Core.Extensions.ConnectContext.AuthenticationMode">
            <inheritdoc />
        </member>
        <member name="P:PSDataRepository.Core.Extensions.ConnectContext.Authentication">
            <inheritdoc />
        </member>
        <member name="M:PSDataRepository.Core.Extensions.ConnectContext.GetParameter``1(System.String)">
            <inheritdoc />
        </member>
        <member name="M:PSDataRepository.Core.Extensions.ConnectContext.GetString(System.String)">
            <inheritdoc />
        </member>
        <member name="M:PSDataRepository.Core.Extensions.ConnectContext.GetInt(System.String,System.Int32)">
            <inheritdoc />
        </member>
        <member name="M:PSDataRepository.Core.Extensions.ConnectContext.GetSwitch(System.String)">
            <inheritdoc />
        </member>
        <member name="M:PSDataRepository.Core.Extensions.ConnectContext.GetSecureString(System.String)">
            <inheritdoc />
        </member>
        <member name="T:PSDataRepository.Core.Extensions.DynamicParameterBuilder">
            <summary>
            Converts <see cref="T:PSDataRepository.Abstractions.ProviderParameterDefinition"/> metadata into PowerShell
            <see cref="T:System.Management.Automation.RuntimeDefinedParameter"/> instances for dynamic parameter support.
            </summary>
        </member>
        <member name="M:PSDataRepository.Core.Extensions.DynamicParameterBuilder.AddProviderParameters(System.Management.Automation.RuntimeDefinedParameterDictionary,System.Collections.Generic.IReadOnlyList{PSDataRepository.Abstractions.ProviderParameterDefinition},System.Action{System.String})">
            <summary>
            Builds a <see cref="T:System.Management.Automation.RuntimeDefinedParameterDictionary"/> from provider parameter definitions.
            </summary>
        </member>
        <member name="T:PSDataRepository.Core.Extensions.ExtensionDependencyFile">
            <summary>One dependency an extension brought into the module's per-framework root.</summary>
        </member>
        <member name="M:PSDataRepository.Core.Extensions.ExtensionDependencyFile.#ctor(System.String,System.String,System.Boolean)">
            <summary>Creates a dependency record entry.</summary>
        </member>
        <member name="P:PSDataRepository.Core.Extensions.ExtensionDependencyFile.Name">
            <summary>File name, e.g. <c>Microsoft.Graph.dll</c>.</summary>
        </member>
        <member name="P:PSDataRepository.Core.Extensions.ExtensionDependencyFile.Version">
            <summary>Assembly version the extension supplied, or <c>null</c> for native/unreadable files.</summary>
        </member>
        <member name="P:PSDataRepository.Core.Extensions.ExtensionDependencyFile.Introduced">
            <summary>
            <c>true</c> when this file did not exist in the module before the extension was
            installed. Only such files are ever candidates for deletion on uninstall — anything
            that pre-existed belongs to the module (or to an earlier extension) and removing it
            would break whatever put it there.
            </summary>
        </member>
        <member name="T:PSDataRepository.Core.Extensions.ExtensionDependencyRecord">
            <summary>What one installed extension contributed to the module.</summary>
        </member>
        <member name="M:PSDataRepository.Core.Extensions.ExtensionDependencyRecord.#ctor(System.String,System.String,System.String,System.DateTimeOffset,System.Collections.Generic.IReadOnlyList{PSDataRepository.Core.Extensions.ExtensionDependencyFile})">
            <summary>Creates a record.</summary>
        </member>
        <member name="P:PSDataRepository.Core.Extensions.ExtensionDependencyRecord.ExtensionFile">
            <summary>File name of the extension assembly, e.g. <c>Contoso.Provider.dll</c>.</summary>
        </member>
        <member name="P:PSDataRepository.Core.Extensions.ExtensionDependencyRecord.Subfolder">
            <summary>Plugin subfolder it was installed into.</summary>
        </member>
        <member name="P:PSDataRepository.Core.Extensions.ExtensionDependencyRecord.Version">
            <summary>Assembly version of the extension itself.</summary>
        </member>
        <member name="P:PSDataRepository.Core.Extensions.ExtensionDependencyRecord.InstalledUtc">
            <summary>When it was installed.</summary>
        </member>
        <member name="P:PSDataRepository.Core.Extensions.ExtensionDependencyRecord.Files">
            <summary>Every dependency the extension brought, whether or not it had to be written.</summary>
        </member>
        <member name="T:PSDataRepository.Core.Extensions.ExtensionDependencyStore">
            <summary>
            Records which extension contributed which files to a module's <c>bin/{TFM}/</c> root.
            <para>
            That folder is otherwise a flat pile with no provenance: the module's own dependencies and
            every extension's dependencies sit side by side, indistinguishable. Without a record an
            uninstall cannot clean up (deleting a shared assembly would break whatever else needs it),
            nothing can tell which files are orphans, and a module upgrade — which lands in a brand new
            version folder — silently loses every extension with no way to report what went missing.
            </para>
            <para>
            The file lives next to <c>extensions.trust.json</c> and is edited through a JSON node tree
            so hand-written content survives a round trip. It is bookkeeping, not a trust boundary:
            a missing or unreadable file only costs provenance, never correctness of loading.
            </para>
            </summary>
        </member>
        <member name="F:PSDataRepository.Core.Extensions.ExtensionDependencyStore.FileName">
            <summary>Name of the sidecar file, kept beside the trust list in <c>bin/{TFM}/</c>.</summary>
        </member>
        <member name="M:PSDataRepository.Core.Extensions.ExtensionDependencyStore.Read(System.String)">
            <summary>
            Reads every recorded extension. A missing file yields an empty set; a malformed one
            yields an empty set too, because losing provenance must never block an install or an
            uninstall the administrator asked for.
            </summary>
            <param name="storePath">Full path to <c>extensions.deps.json</c>.</param>
        </member>
        <member name="M:PSDataRepository.Core.Extensions.ExtensionDependencyStore.Record(System.String,PSDataRepository.Core.Extensions.ExtensionDependencyRecord)">
            <summary>
            Records (or replaces) what one extension contributed.
            </summary>
        </member>
        <member name="M:PSDataRepository.Core.Extensions.ExtensionDependencyStore.Remove(System.String,System.String)">
            <summary>
            Removes an extension from the record and reports which of its files are now safe to
            delete.
            <para>
            A file qualifies only when the extension being removed INTRODUCED it — it did not exist
            in the module beforehand — and no other recorded extension lists it at all. Both halves
            matter: the first keeps the module's own assemblies untouched, the second keeps a
            dependency shared with another extension in place.
            </para>
            </summary>
            <param name="storePath">Full path to <c>extensions.deps.json</c>.</param>
            <param name="extensionFile">Extension assembly file name.</param>
            <returns>File names that no longer belong to anything.</returns>
        </member>
        <member name="T:PSDataRepository.Core.Extensions.ExtensionLoader">
            <summary>
            Discovers and loads plugin assemblies from subdirectories next to the module DLL.
            Scans for <see cref="T:PSDataRepository.Providers.IProviderDefinition"/>, <see cref="T:PSDataRepository.Authentications.IAuthenticationProvider"/>,
            and <see cref="T:PSDataRepository.Formatters.IFormatterDefinition"/> implementations.
            </summary>
        </member>
        <member name="F:PSDataRepository.Core.Extensions.ExtensionLoader.SharedAssemblyPrefixes">
            <summary>
            Assembly-name prefixes that are always resolved through the Default load context
            so that contract types (interfaces) have a single identity across all plugin ALCs.
            Without this, an <c>IProviderDefinition</c> loaded into a plugin ALC would not be
            assignable to the same interface type loaded into the host ALC.
            </summary>
        </member>
        <member name="F:PSDataRepository.Core.Extensions.ExtensionLoader.ExpectedPublicKeyToken">
            <summary>
            Expected public key token for trusted plugin assemblies.
            Derived from the same SNK used to sign all PSDataRepository assemblies.
            <para>
            If this token is empty (i.e. Core itself is not strong-named), plugin loading is
            disabled completely — fail-closed. Without a known good token there is no way to
            distinguish a legitimate plugin from a maliciously dropped DLL in the module folder.
            </para>
            </summary>
        </member>
        <member name="F:PSDataRepository.Core.Extensions.ExtensionLoader._trustedTokens">
            <summary>
            Additional public key tokens trusted by the host administrator.
            Populated from the sidecar <c>extensions.trust.json</c> file (see
            <see cref="M:PSDataRepository.Core.Extensions.ExtensionLoader.LoadTrustedTokensFromFile(System.String,System.Action{System.String})"/>) before <see cref="M:PSDataRepository.Core.Extensions.ExtensionLoader.LoadAll(PSDataRepository.Providers.IProviderRegistry,PSDataRepository.Authentications.IAuthenticationRegistry,PSDataRepository.Formatters.IFormatterRegistry,System.Action{System.String})"/>
            runs. The Core SNK token is always implicitly trusted; this list
            extends trust to 3rd-party plugins signed with their own SNK.
            </summary>
        </member>
        <member name="F:PSDataRepository.Core.Extensions.ExtensionLoader.TrustListFileName">
            <summary>
            Name of the optional sidecar JSON file located next to the module
            manifest that lists additional trusted public key tokens.
            </summary>
        </member>
        <member name="F:PSDataRepository.Core.Extensions.ExtensionLoader._loadReport">
            <summary>
            One entry per candidate assembly seen during the last scan, loaded or rejected.
            Surfaced by <c>Get-PSDataRepositoryExtension</c> so a rejection is diagnosable
            instead of presenting as a silently missing provider or formatter.
            </summary>
        </member>
        <member name="M:PSDataRepository.Core.Extensions.ExtensionLoader.GetLoadReport">
            <summary>
            Returns the result of the last scan: every candidate assembly under the plugin
            subfolders, with the reason any of them was rejected.
            </summary>
        </member>
        <member name="M:PSDataRepository.Core.Extensions.ExtensionLoader.Inspect(System.String)">
            <summary>
            Reads an assembly's strong-name token and declared contract version and evaluates
            them against this host — without loading the assembly for execution.
            <para>
            This is the same inspection the loader performs during a scan, exposed so tooling
            (notably <c>Install-PSDataRepositoryExtension</c>) can apply the gates BEFORE a file
            is placed into the module, instead of discovering the problem at the next import.
            </para>
            </summary>
            <param name="assemblyPath">Path to the candidate assembly.</param>
            <returns>
            The inspection result, or <c>null</c> when the file could not be read as a managed
            assembly.
            </returns>
        </member>
        <member name="M:PSDataRepository.Core.Extensions.ExtensionLoader.AddTrustedToken(System.String)">
            <summary>
            Adds a public key token to the runtime trust list. Token must be a
            16-character lowercase hex string (8 bytes). Duplicates are ignored.
            </summary>
            <param name="hexToken">Hex-encoded 8-byte public key token.</param>
            <returns><c>true</c> when the token was added, <c>false</c> when invalid or duplicate.</returns>
        </member>
        <member name="M:PSDataRepository.Core.Extensions.ExtensionLoader.LoadTrustedTokensFromFile(System.String,System.Action{System.String})">
            <summary>
            Loads additional trusted public key tokens from
            <c>{moduleDir}/extensions.trust.json</c> if it exists. Missing or
            malformed file is treated as "no extra trust" — fail-closed.
            </summary>
            <param name="moduleDir">Directory containing the module manifest.</param>
            <param name="diagnosticLog">Optional diagnostic sink.</param>
            <returns>Number of tokens added.</returns>
        </member>
        <member name="M:PSDataRepository.Core.Extensions.ExtensionLoader.LoadTrustListFromAllLocations(System.String,System.Action{System.String})">
            <summary>
            Loads trusted public key tokens from every well-known location relative to
            <paramref name="moduleDir"/> and returns the total number of tokens added.
            <para>
            The host installs the module so that the runtime assemblies (and a copy of
            <see cref="F:PSDataRepository.Core.Extensions.ExtensionLoader.TrustListFileName"/>) live in <c>{ModuleRoot}/bin/{TFM}</c>, while the
            module manifest and the administrator-facing copy of the trust file live in the
            module root (<c>{ModuleRoot}</c>). The loader runs from the former but the docs and
            the SDK deploy step tell administrators to edit the latter; probing both keeps the
            documented workflow working without weakening the fail-closed model (an empty or
            missing file contributes nothing).
            </para>
            </summary>
        </member>
        <member name="M:PSDataRepository.Core.Extensions.ExtensionLoader.EnumerateTrustListProbeDirs(System.String)">
            <summary>
            Yields additional directories (beyond <paramref name="moduleDir"/> itself) that may
            contain the administrator-managed trust file. When the loader runs from a
            <c>bin/{TFM}</c> layout, the module manifest root is two levels up.
            </summary>
        </member>
        <member name="M:PSDataRepository.Core.Extensions.ExtensionLoader.IsTokenTrusted(System.Byte[])">
            <summary>
            Returns <c>true</c> if <paramref name="publicKeyToken"/> matches the
            Core SNK token or any administrator-trusted token.
            </summary>
        </member>
        <member name="M:PSDataRepository.Core.Extensions.ExtensionLoader.LoadAll(PSDataRepository.Providers.IProviderRegistry,PSDataRepository.Authentications.IAuthenticationRegistry,PSDataRepository.Formatters.IFormatterRegistry,System.Action{System.String})">
            <summary>
            Scans the module directory for plugin assemblies and registers discovered
            providers, authentication providers, and formatters. Safe to call multiple times.
            </summary>
        </member>
        <member name="M:PSDataRepository.Core.Extensions.ExtensionLoader.LoadAll(System.String,PSDataRepository.Providers.IProviderRegistry,PSDataRepository.Authentications.IAuthenticationRegistry,PSDataRepository.Formatters.IFormatterRegistry,System.Action{System.String})">
            <summary>
            Host-friendly overload that scans <paramref name="moduleDirOverride"/> instead of
            the directory containing <c>PSDataRepository.Core.dll</c>. All trust-check rules
            (S-1 strong-name token, S-2 path-containment) still apply against the override.
            Used by alternative hosts (tests, MCP server) that load Core from a location which
            does not contain the <c>Auth/</c>, <c>Providers/</c>, <c>Formatters/</c> subfolders.
            </summary>
        </member>
        <member name="M:PSDataRepository.Core.Extensions.ExtensionLoader.TryReadAssemblyFacts(System.String,System.Byte[]@,System.String@)">
            <summary>
            Reads the strong-name public key token AND the declared extension contract version
            from a .NET assembly without loading it for execution. Uses <see cref="T:System.Reflection.PortableExecutable.PEReader"/> +
            <see cref="T:System.Reflection.Metadata.MetadataReader"/> so no static constructors or module initializers in the
            candidate file are triggered — both trust and compatibility are decided before any
            of its code can run.
            </summary>
            <param name="assemblyPath">Candidate assembly.</param>
            <param name="token">Public key token, empty when the assembly is unsigned.</param>
            <param name="contractVersion">
            Value of <c>PSDataRepositoryContractAttribute</c>, or <c>null</c> when absent.
            </param>
            <returns><c>false</c> when the file could not be read as a managed assembly.</returns>
        </member>
        <member name="M:PSDataRepository.Core.Extensions.ExtensionLoader.TryReadAssemblyFacts(System.String,System.Byte[]@,System.String@,System.String@)">
            <summary>
            As <see cref="M:PSDataRepository.Core.Extensions.ExtensionLoader.TryReadAssemblyFacts(System.String,System.Byte[]@,System.String@)"/>, additionally
            yielding the plugin subfolder the SDK stamped onto the extension.
            </summary>
        </member>
        <member name="M:PSDataRepository.Core.Extensions.ExtensionLoader.GetReferencedAssemblies(System.String)">
            <summary>
            Reads the assemblies an extension was compiled against, with the versions recorded in
            its metadata — again without loading it.
            <para>
            Comparing these against what actually sits in the module root is how version skew
            becomes visible. An extension binds to whatever version is present at runtime, not the
            one it was built with, so a mismatch surfaces as a MissingMethodException on first use
            rather than as anything the install or the load reported.
            </para>
            </summary>
            <param name="assemblyPath">Path to the extension assembly.</param>
            <returns>Assembly simple name to referenced version; empty when the file is unreadable.</returns>
        </member>
        <member name="M:PSDataRepository.Core.Extensions.ExtensionLoader.ReadExtensionMetadata(System.Reflection.Metadata.MetadataReader,System.Reflection.Metadata.AssemblyDefinition,System.String@,System.String@)">
            <summary>
            Decodes the two assembly-level facts the SDK stamps onto an extension:
            <c>[assembly: PSDataRepositoryContract("...")]</c> and the
            <c>PSDataRepositoryExtensionSubfolder</c> assembly metadata entry.
            <para>
            Both are read straight from the attribute blobs. A CustomAttribute value blob is a
            2-byte prolog (0x0001) followed by the serialized fixed arguments, so a one-string
            attribute is prolog + SerString and a two-string one is prolog + SerString + SerString.
            </para>
            </summary>
        </member>
        <member name="M:PSDataRepository.Core.Extensions.ExtensionLoader.TryGetAttributeTypeName(System.Reflection.Metadata.MetadataReader,System.Reflection.Metadata.CustomAttribute,System.String@,System.String@)">
            <summary>
            Resolves a custom attribute's declaring type name and namespace.
            The comparison is nominal rather than by resolved type because nothing is loaded at
            this point — the extension's reference to PSDataRepository.Abstractions is only a
            TypeReference row in its metadata.
            </summary>
        </member>
        <member name="M:PSDataRepository.Core.Extensions.ExtensionLoader.Reload">
            <summary>
            Resets the loaded state and discards all plugin <see cref="T:System.Runtime.Loader.AssemblyLoadContext"/>s.
            Useful in tests or when a full plugin re-scan is desired. Note that the underlying
            assemblies cannot be unloaded while still referenced; this only clears the loader's
            own bookkeeping so that <c>LoadAll</c> will rescan and rebuild on next call.
            </summary>
        </member>
        <member name="M:PSDataRepository.Core.Extensions.ExtensionLoader.Reset">
            <summary>
            Resets the loaded state (for testing only).
            </summary>
        </member>
        <member name="M:PSDataRepository.Core.Extensions.ExtensionLoader.EnsureDefaultAlcResolverInstalled(System.String,System.Action{System.String})">
            <summary>
            Installs (idempotently) a <see cref="E:System.Runtime.Loader.AssemblyLoadContext.Resolving"/> handler on
            the <see cref="P:System.Runtime.Loader.AssemblyLoadContext.Default"/> context that probes
            <paramref name="moduleDir"/> for assemblies the runtime cannot otherwise locate.
            Required because shared third-party libs (Azure.Core, Azure.Identity, ...) are
            delegated to the Default ALC, but their transitive dependencies in the module
            root (e.g. <c>System.ClientModel.dll</c>) are not on PowerShell's default probe path.
            </summary>
        </member>
        <member name="T:PSDataRepository.Core.Extensions.ExtensionLoader.ExtensionLoadContext">
            <summary>
            Per-plugin-folder <see cref="T:System.Runtime.Loader.AssemblyLoadContext"/>. Plugin DLLs and their private
            dependencies are loaded into this context. Shared contract assemblies
            (<see cref="F:PSDataRepository.Core.Extensions.ExtensionLoader.SharedAssemblyPrefixes"/>) are delegated to the Default context so type
            identity is preserved across boundaries.
            </summary>
        </member>
        <member name="P:PSDataRepository.Core.Extensions.ExtensionLoader.ExtensionLoadContext.PluginDirectory">
            <summary>Folder this extension was loaded from; used for sibling probing.</summary>
        </member>
        <member name="T:PSDataRepository.Core.Extensions.ExtensionLoadStatus">
            <summary>Outcome of a single extension assembly's load attempt.</summary>
        </member>
        <member name="F:PSDataRepository.Core.Extensions.ExtensionLoadStatus.Loaded">
            <summary>The assembly passed every check and its definitions were registered.</summary>
        </member>
        <member name="F:PSDataRepository.Core.Extensions.ExtensionLoadStatus.Rejected">
            <summary>The assembly was skipped; <see cref="P:PSDataRepository.Core.Extensions.ExtensionLoadReportEntry.Reason"/> says why.</summary>
        </member>
        <member name="T:PSDataRepository.Core.Extensions.ExtensionLoadReportEntry">
            <summary>
            One row of the extension load report.
            <para>
            Every candidate DLL found under <c>Auth/</c>, <c>Providers/</c> and <c>Formatters/</c>
            produces exactly one entry, whether it loaded or not. Before this existed, a rejected
            extension left no trace beyond an optional diagnostic callback nobody was listening
            to, so the symptom an administrator actually saw was a provider or formatter that
            silently did not exist. Surfaced by <c>Get-PSDataRepositoryExtension</c>.
            </para>
            </summary>
        </member>
        <member name="M:PSDataRepository.Core.Extensions.ExtensionLoadReportEntry.#ctor(System.String,System.String,System.String,PSDataRepository.Core.Extensions.ExtensionLoadStatus,System.String,System.String,System.String,System.Collections.Generic.IReadOnlyList{System.String})">
            <summary>Creates a report entry.</summary>
        </member>
        <member name="P:PSDataRepository.Core.Extensions.ExtensionLoadReportEntry.FileName">
            <summary>File name of the candidate assembly.</summary>
        </member>
        <member name="P:PSDataRepository.Core.Extensions.ExtensionLoadReportEntry.Path">
            <summary>Full path of the candidate assembly.</summary>
        </member>
        <member name="P:PSDataRepository.Core.Extensions.ExtensionLoadReportEntry.Subfolder">
            <summary>Plugin subfolder it was found in: Auth, Providers or Formatters.</summary>
        </member>
        <member name="P:PSDataRepository.Core.Extensions.ExtensionLoadReportEntry.Status">
            <summary>Whether the assembly was loaded or rejected.</summary>
        </member>
        <member name="P:PSDataRepository.Core.Extensions.ExtensionLoadReportEntry.Reason">
            <summary>Operator-facing explanation when <see cref="P:PSDataRepository.Core.Extensions.ExtensionLoadReportEntry.Status"/> is Rejected; otherwise <c>null</c>.</summary>
        </member>
        <member name="P:PSDataRepository.Core.Extensions.ExtensionLoadReportEntry.ContractVersion">
            <summary>
            Contract version declared by the assembly, or <c>null</c> when it carries no
            contract attribute (treated as legacy).
            </summary>
        </member>
        <member name="P:PSDataRepository.Core.Extensions.ExtensionLoadReportEntry.PublicKeyToken">
            <summary>Strong-name public key token as lowercase hex, or <c>null</c> when unsigned/unreadable.</summary>
        </member>
        <member name="P:PSDataRepository.Core.Extensions.ExtensionLoadReportEntry.Registered">
            <summary>Names of the providers, auth providers and formatters registered from this assembly.</summary>
        </member>
        <member name="T:PSDataRepository.Core.Extensions.ExtensionAssemblyInfo">
            <summary>
            What can be learned about a candidate extension assembly WITHOUT loading it: its
            strong-name token and the contract version it was built against.
            <para>
            Produced by <c>ExtensionLoader.Inspect</c> so the install cmdlets can apply the same
            gates the loader applies, before a file is copied into the module rather than after
            the next PowerShell start.
            </para>
            </summary>
        </member>
        <member name="M:PSDataRepository.Core.Extensions.ExtensionAssemblyInfo.#ctor(System.String,System.String,System.String,System.String,System.Boolean,System.Boolean,System.String)">
            <summary>Creates an inspection result.</summary>
        </member>
        <member name="P:PSDataRepository.Core.Extensions.ExtensionAssemblyInfo.Subfolder">
            <summary>
            Plugin subfolder the SDK stamped onto the extension (Auth, Providers or Formatters),
            or <c>null</c> when the assembly carries no such metadata — for instance because it
            predates the stamp or was not built with the SDK targets.
            </summary>
        </member>
        <member name="P:PSDataRepository.Core.Extensions.ExtensionAssemblyInfo.Path">
            <summary>Full path of the inspected assembly.</summary>
        </member>
        <member name="P:PSDataRepository.Core.Extensions.ExtensionAssemblyInfo.PublicKeyToken">
            <summary>Lowercase hex public key token, or <c>null</c> when the assembly is not strong-named.</summary>
        </member>
        <member name="P:PSDataRepository.Core.Extensions.ExtensionAssemblyInfo.ContractVersion">
            <summary>Declared contract version, or <c>null</c> when the assembly carries no contract attribute.</summary>
        </member>
        <member name="P:PSDataRepository.Core.Extensions.ExtensionAssemblyInfo.IsTrusted">
            <summary><c>true</c> when <see cref="P:PSDataRepository.Core.Extensions.ExtensionAssemblyInfo.PublicKeyToken"/> is already trusted by the running host.</summary>
        </member>
        <member name="P:PSDataRepository.Core.Extensions.ExtensionAssemblyInfo.IsContractCompatible">
            <summary><c>true</c> when the declared contract can be satisfied by this host.</summary>
        </member>
        <member name="P:PSDataRepository.Core.Extensions.ExtensionAssemblyInfo.IncompatibilityReason">
            <summary>Why the contract is not satisfied; <c>null</c> when it is.</summary>
        </member>
        <member name="P:PSDataRepository.Core.Extensions.ExtensionAssemblyInfo.IsStrongNamed">
            <summary><c>true</c> when the assembly is strong-named at all.</summary>
        </member>
        <member name="T:PSDataRepository.Core.Extensions.ExtensionTrustStore">
            <summary>
            Read/modify/write access to <c>extensions.trust.json</c>, the administrator-managed
            list of strong-name public key tokens allowed to author plugins.
            <para>
            The file is edited through a JSON node tree rather than being serialised from a POCO
            so that the explanatory <c>_comment</c> — and anything else an administrator added —
            survives a round trip. A trust file that silently loses its own documentation the
            first time a cmdlet touches it would be worse than no cmdlet at all.
            </para>
            <para>
            This file grants CODE EXECUTION. It records who may author an extension; it says
            nothing about which contract version an extension targets. Those are orthogonal —
            a publisher does not become untrusted because their extension needs a rebuild — and
            the contract version travels with the binary instead, where it cannot drift from the
            code it describes.
            </para>
            </summary>
        </member>
        <member name="M:PSDataRepository.Core.Extensions.ExtensionTrustStore.ReadTokens(System.String)">
            <summary>
            Reads the trusted tokens from the given trust file. A missing file yields an empty
            list; a malformed one throws, because silently treating corruption as "no trust"
            would turn a typo into a fleet-wide extension outage with no explanation.
            </summary>
            <param name="trustFilePath">Path to <c>extensions.trust.json</c>.</param>
        </member>
        <member name="M:PSDataRepository.Core.Extensions.ExtensionTrustStore.AddToken(System.String,System.String)">
            <summary>
            Adds a token to the trust file, creating the file if it does not exist.
            </summary>
            <param name="trustFilePath">Path to <c>extensions.trust.json</c>.</param>
            <param name="publicKeyToken">Lowercase 16-character hex token.</param>
            <returns><c>true</c> when the token was added, <c>false</c> when already present.</returns>
            <exception cref="T:System.ArgumentException">The token is not 16 hex characters.</exception>
        </member>
        <member name="M:PSDataRepository.Core.Extensions.ExtensionTrustStore.RemoveToken(System.String,System.String)">
            <summary>
            Removes a token from the trust file.
            </summary>
            <param name="trustFilePath">Path to <c>extensions.trust.json</c>.</param>
            <param name="publicKeyToken">Token to remove.</param>
            <returns><c>true</c> when a token was removed.</returns>
        </member>
        <member name="M:PSDataRepository.Core.Extensions.ExtensionTrustStore.NormalizeToken(System.String)">
            <summary>
            Validates and normalises a public key token to lowercase hex.
            </summary>
            <param name="publicKeyToken">Candidate token.</param>
            <exception cref="T:System.ArgumentException">The token is not 16 hex characters.</exception>
        </member>
        <member name="T:PSDataRepository.Core.Resources.Strings">
            <summary>
              A strongly-typed resource class, for looking up localized strings, etc.
            </summary>
        </member>
        <member name="P:PSDataRepository.Core.Resources.Strings.ResourceManager">
            <summary>
              Returns the cached ResourceManager instance used by this class.
            </summary>
        </member>
        <member name="P:PSDataRepository.Core.Resources.Strings.Culture">
            <summary>
              Overrides the current thread's CurrentUICulture property for all
              resource lookups using this strongly typed resource class.
            </summary>
        </member>
        <member name="P:PSDataRepository.Core.Resources.Strings.Conn_NoActiveSession">
            <summary>
              Looks up a localized string similar to No active PSDataRepository session. Use Connect-PSDataRepository first..
            </summary>
        </member>
        <member name="P:PSDataRepository.Core.Resources.Strings.Err_UnsupportedEncoding">
            <summary>
              Looks up a localized string similar to Cannot convert &apos;{0}&apos; to System.Text.Encoding. Supported values: ASCII, BigEndianUnicode, Latin1, Unicode, UTF7, UTF8, UTF8BOM, UTF8NoBOM, UTF32..
            </summary>
        </member>
        <member name="P:PSDataRepository.Core.Resources.Strings.Prov_UnsupportedOperation">
            <summary>
              Looks up a localized string similar to Provider &apos;{0}&apos; does not support operation &apos;{1}&apos;..
            </summary>
        </member>
        <member name="P:PSDataRepository.Core.Resources.Strings.Retry_MaxAttemptsExceeded">
            <summary>
              Looks up a localized string similar to Operation failed after {0} attempts..
            </summary>
        </member>
        <member name="P:PSDataRepository.Core.Resources.Strings.Retry_TransientError">
            <summary>
              Looks up a localized string similar to Transient error on attempt {0}/{1}: {2}. Retrying in {3}ms....
            </summary>
        </member>
        <member name="T:PSDataRepository.Core.Session.ISessionManager">
            <summary>
            Abstraction over session management for testability.
            </summary>
        </member>
        <member name="P:PSDataRepository.Core.Session.ISessionManager.IsConnected">
            <summary>Whether a session is currently active.</summary>
        </member>
        <member name="M:PSDataRepository.Core.Session.ISessionManager.GetSession">
            <summary>Gets the current provider session.</summary>
        </member>
        <member name="M:PSDataRepository.Core.Session.ISessionManager.SetSession(PSDataRepository.Providers.IProviderSession)">
            <summary>Sets the active provider session.</summary>
        </member>
        <member name="M:PSDataRepository.Core.Session.ISessionManager.ClearSession">
            <summary>Disposes and clears the current session.</summary>
        </member>
        <member name="M:PSDataRepository.Core.Session.ISessionManager.GetRepository``1">
            <summary>
            Gets a repository for the requested capability from the current session.
            Returns null if the session doesn't support that capability.
            </summary>
        </member>
        <member name="T:PSDataRepository.Core.Session.RepositorySessionContext">
            <summary>
            Encapsulates a single repository session context.
            Holds the active <see cref="T:PSDataRepository.Providers.IProviderSession"/> and nothing else.
            </summary>
        </member>
        <member name="P:PSDataRepository.Core.Session.RepositorySessionContext.CurrentSession">
            <summary>Active provider session (set by <see cref="T:PSDataRepository.Core.Session.SessionManager"/>).</summary>
        </member>
        <member name="P:PSDataRepository.Core.Session.RepositorySessionContext.IsConnected">
            <summary>True when a provider session is active.</summary>
        </member>
        <member name="M:PSDataRepository.Core.Session.RepositorySessionContext.Clear">
            <summary>Disposes and clears the current session.</summary>
        </member>
        <member name="T:PSDataRepository.Core.Session.RepositorySession">
            <summary>
            Ambient session holder backed by <see cref="T:System.Threading.AsyncLocal`1"/>.
            <para>
            AsyncLocal flows across <c>Task.Run</c> / <c>await</c> boundaries via
            <see cref="T:System.Threading.ExecutionContext"/>, so the session stays consistent when
            synchronous PowerShell cmdlets bridge to async repository code via
            <c>AsyncHelper.RunSync</c>. Each PowerShell runspace / pipeline
            invocation gets its own execution context and therefore its own
            session slot — no cross-pipeline bleed.
            </para>
            </summary>
        </member>
        <member name="P:PSDataRepository.Core.Session.RepositorySession.Current">
            <summary>Gets the active provider session, or null.</summary>
        </member>
        <member name="P:PSDataRepository.Core.Session.RepositorySession.IsConnected">
            <summary>True when a provider session is active.</summary>
        </member>
        <member name="M:PSDataRepository.Core.Session.RepositorySession.Clear">
            <summary>Disposes the current session and clears state.</summary>
        </member>
        <member name="T:PSDataRepository.Core.Session.SessionManager">
            <summary>
            Manages the lifecycle of repository sessions.
            Purely delegates to <see cref="T:PSDataRepository.Providers.IProviderSession"/> — knows nothing about
            concrete providers, Azure SDKs, or authentication.
            </summary>
        </member>
        <member name="P:PSDataRepository.Core.Session.SessionManager.Instance">
            <summary>
            Singleton <see cref="T:PSDataRepository.Core.Session.ISessionManager"/> adapter backed by this static class.
            Enables dependency injection and unit testing.
            </summary>
        </member>
        <member name="M:PSDataRepository.Core.Session.SessionManager.SetSession(PSDataRepository.Providers.IProviderSession)">
            <summary>Sets (connects) the active session.</summary>
        </member>
        <member name="M:PSDataRepository.Core.Session.SessionManager.ClearSession">
            <summary>Disposes and clears the current session.</summary>
        </member>
        <member name="P:PSDataRepository.Core.Session.SessionManager.IsConnected">
            <summary>Whether a session is active.</summary>
        </member>
        <member name="M:PSDataRepository.Core.Session.SessionManager.GetSession">
            <summary>Gets the current provider session.</summary>
        </member>
        <member name="M:PSDataRepository.Core.Session.SessionManager.GetRepository``1">
            <summary>
            Gets a repository for the requested capability from the current session.
            </summary>
        </member>
    </members>
</doc>