Krit.OmniFramework.psd1

@{
    RootModule        = 'Krit.OmniFramework.psm1'
    ModuleVersion     = '1.1.0'
    GUID              = 'b3d1f5c9-7a4e-4c8b-9e2f-1a7c3b8d2e4f'
    Author            = 'Joshua Finley'
    CompanyName       = 'Kritical Pty Ltd'
    Copyright         = '(c) 2026 Kritical Pty Ltd. All rights reserved.'
    Description       = 'Kritical OmniFramework — multi-OS PowerShell foundation. One Import-Module call gives you: structured logging (PSFramework), shared utilities (PSSharedGoods, disambiguated from psutil), HTML reporting (PSWriteHTML), Office/Word/PDF output (PSWriteOffice), Excel I/O (ImportExcel), OS+distro+architecture detection across Windows/macOS/Linux, FHS/LSB-aware tool-inventory walker, and Kritical-branded report templates. Built to stand under Krit.Hardening and every other Krit.* package.'
    PowerShellVersion = '5.1'
    CompatiblePSEditions = @('Desktop','Core')

    # 1.0.2 — RequiredModules removed (was the cause of PSFramework AppDomain
    # version-collision failures: PowerShell hard-imports RequiredModules BEFORE
    # the psm1 runs, so a stale PSFramework already loaded in the session blew
    # up Import-Module Krit.OmniFramework with "Assembly with same name is
    # already loaded"). Soft-imported via Import-KritFoundation at use time
    # instead; declared in ExternalModuleDependencies below so Install-Module
    # STILL pulls them transitively on PSGallery install.
    # PSWriteOffice ships PSWriteWord/Excel/PowerPoint via separate modules in some versions; treat as optional.

    FunctionsToExport = @(
        # Banner
        'Write-KritBanner', 'Get-KritBanner',
        # Platform / OS detection
        'Get-KritPlatform', 'Test-KritIsAdmin', 'Test-KritIsElevated',
        # Tool inventory (multi-OS, FHS/LSB-aware)
        'Get-KritToolInventory', 'Find-KritTool', 'Test-KritToolPresent',
        # Foundation loader
        'Import-KritFoundation', 'Get-KritFoundationStatus',
        # Structured logging (PSFramework-backed)
        'Write-KritLog', 'Start-KritLogSession', 'Stop-KritLogSession',
        # Branded reporting
        'New-KritHtmlReport', 'New-KritExcelReport',
        # Config + path resolution (carried forward from Pax8FrameworkConfig)
        'Resolve-KritRepoRoot', 'Get-KritConfig', 'Get-KritProject', 'Get-KritPath',
        # Secrets posture (read-only)
        'Test-KritSecretsLoaded',
        # 1.1.0 - Brand pipeline
        'Get-KritBrandSpec',
        'New-KritBrandedDocument'
    )
    CmdletsToExport   = @()
    VariablesToExport = @()
    AliasesToExport   = @()

    PrivateData = @{
        PSData = @{
            Tags         = @('Kritical','OmniFramework','Framework','PSFramework','PSSharedGoods','PSWriteHTML','PSWriteOffice','ImportExcel','MultiOS','CrossPlatform','OSDetect','Hardening','MSP','Automation')
            LicenseUri   = 'https://kritical.net/legal/license'
            ProjectUri   = 'https://github.com/Sir-J-AU/Krit.OmniFramework'
            IconUri      = 'https://kritical.net/assets/horizontal_logo.png'
            ExternalModuleDependencies = @('PSFramework','PSSharedGoods','PSWriteHTML','ImportExcel')
            ReleaseNotes = @'
1.1.0 - Brand pipeline.
  * NEW Get-KritBrandSpec - loads canonical brand-spec.json (colours, fonts,
    corporate identity, contact details, logo paths, template paths) with
    per-session caching + resolution-order fallbacks. Single source of truth
    for every Kritical-branded artefact.
  * NEW New-KritBrandedDocument - renders Markdown (or HTML) source to
    Kritical-branded PDF / DOCX / HTML in one call. Pulls brand spec from
    Get-KritBrandSpec. Applies primary #13365C + secondary #15AFD1 + Roboto
    headings + Assistant body. Inserts Horizontal_Logo.png header + ABN/ACN/
    address/tagline footer. Optional Outlook email-signature append.
    Engines: Pandoc + wkhtmltopdf (preferred) / Chrome+Edge headless
    (fallback). DOCX uses Pandoc --reference-doc against Huzaifa's
    Kritical-BaseTemplate-CURRENT.docx.
  * Brand inventory + asset locations documented at
    Github/KRTPax8ToShopifyConnector/reference/KRITICAL-BRAND-ASSET-INVENTORY-1507.md

1.0.2 - Resilience fix (PSFramework AppDomain collision).
  * Removed PSFramework/PSSharedGoods/PSWriteHTML/ImportExcel from
    RequiredModules. PowerShell hard-imports RequiredModules BEFORE the
    consuming module's psm1 runs, so any stale PSFramework already loaded
    in the session (e.g. an older PSFramework 1.0.0.1 from a transient
    dependency) caused Import-Module Krit.OmniFramework — and everything
    that depends on it (Krit.Hardening) — to fail with "Assembly with same
    name is already loaded".
  * Dependencies are now declared in ExternalModuleDependencies (PSData)
    so Install-Module Krit.OmniFramework STILL pulls them transitively on
    fresh PSGallery installs.
  * Import-KritFoundation now detects already-loaded PSFramework at ANY
    version and reuses it instead of force-upgrading, so Write-KritLog +
    everything downstream keeps working even when the AppDomain is
    locked to an older version.
  * Write-KritLog continues to degrade gracefully to JSONL when
    PSFramework is missing.

1.0.1 - Bug fix.
  * New-KritHtmlReport now auto-creates the parent directory of -OutFile
    before calling PSWriteHTML's Save-HTML (which would otherwise fall back
    to %TEMP% and emit a warning).

1.0.0 — Initial release.
  * Multi-OS platform detection (Windows / macOS / Linux + distro + arch + privilege).
  * FHS/LSB-aware tool inventory (Get-KritToolInventory walks every standard path per OS).
  * Foundation loader (Import-KritFoundation pulls PSFramework + PSSharedGoods + PSWriteHTML + ImportExcel in one call).
  * Structured logging via PSFramework (Write-KritLog with JSON + Application Insights sinks).
  * Branded HTML + Excel reports (New-KritHtmlReport / New-KritExcelReport) with the canonical Kritical banner embedded.
  * Repo-root + config resolution carried forward from the original Pax8FrameworkConfig.
  * Pester unit + e2e test suite.
  * Joshua Finley, Kritical Pty Ltd.
'@

        }
    }
}