Initial commit: add all skills files

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-04-10 16:52:49 +08:00
commit 6487becf60
396 changed files with 108871 additions and 0 deletions

View File

@@ -0,0 +1,274 @@
# minimax-docx Environment Setup & Initialization Script (Windows PowerShell)
# Supports: Windows 10/11, Windows Server 2019+
# License: MIT
#Requires -Version 5.1
param(
[switch]$Minimal,
[switch]$SkipVerify,
[switch]$Help
)
$ErrorActionPreference = "Stop"
$ScriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path
$ProjectDir = Split-Path -Parent $ScriptDir
$DotnetDir = Join-Path $ScriptDir "dotnet"
$LogFile = Join-Path $ProjectDir ".setup.log"
# --- Output Helpers ---
function Log { Write-Host "[OK] $args" -ForegroundColor Green }
function Warn { Write-Host "[WARN] $args" -ForegroundColor Yellow }
function Fail { Write-Host "[FAIL] $args" -ForegroundColor Red }
function Info { Write-Host "[INFO] $args" -ForegroundColor Cyan }
function Step { Write-Host "`n=== $args ===" -ForegroundColor Blue }
if ($Help) {
Write-Host @"
Usage: setup.ps1 [options]
-Minimal Only install critical dependencies (skip pandoc, soffice, fonts)
-SkipVerify Skip the verification test at the end
-Help Show this help
"@
exit 0
}
Write-Host "============================================"
Write-Host " minimax-docx Setup & Initialization (Windows)"
Write-Host " $(Get-Date -Format 'yyyy-MM-dd HH:mm:ss')"
Write-Host "============================================"
"" | Set-Content $LogFile
# --- Detect Package Manager ---
$HasWinget = $null -ne (Get-Command winget -ErrorAction SilentlyContinue)
$HasChoco = $null -ne (Get-Command choco -ErrorAction SilentlyContinue)
$HasScoop = $null -ne (Get-Command scoop -ErrorAction SilentlyContinue)
if ($HasWinget) { Info "Package manager: winget" }
elseif ($HasChoco) { Info "Package manager: chocolatey" }
elseif ($HasScoop) { Info "Package manager: scoop" }
else { Warn "No package manager found (winget/choco/scoop). Manual install may be needed." }
# --- .NET SDK ---
Step "Checking .NET SDK"
$dotnetCmd = Get-Command dotnet -ErrorAction SilentlyContinue
if ($dotnetCmd) {
$dotnetVer = & dotnet --version 2>$null
$majorVer = [int]($dotnetVer -split '\.')[0]
if ($majorVer -ge 8) {
Log "dotnet $dotnetVer already installed (>= 8.0 OK)"
} else {
Warn "dotnet $dotnetVer found but < 8.0, upgrading..."
$dotnetCmd = $null
}
}
if (-not $dotnetCmd -or $majorVer -lt 8) {
Info "Installing .NET SDK..."
if ($HasWinget) {
winget install Microsoft.DotNet.SDK.8 --accept-source-agreements --accept-package-agreements 2>>$LogFile
} elseif ($HasChoco) {
choco install dotnet-sdk -y 2>>$LogFile
} elseif ($HasScoop) {
scoop install dotnet-sdk 2>>$LogFile
} else {
Fail "Cannot auto-install .NET SDK. Download from: https://dotnet.microsoft.com/download"
Fail "After installing, restart PowerShell and re-run this script."
exit 1
}
# Refresh PATH
$env:Path = [System.Environment]::GetEnvironmentVariable("Path", "Machine") + ";" + [System.Environment]::GetEnvironmentVariable("Path", "User")
if (Get-Command dotnet -ErrorAction SilentlyContinue) {
Log "dotnet $(dotnet --version) installed"
} else {
Fail "dotnet installation failed. Restart PowerShell and retry, or install manually."
exit 1
}
}
# --- Pandoc (Optional) ---
if (-not $Minimal) {
Step "Checking pandoc (optional: content preview)"
if (Get-Command pandoc -ErrorAction SilentlyContinue) {
$pandocVer = (pandoc --version | Select-Object -First 1) -replace '.*?(\d+\.\d+(\.\d+)?)', '$1'
Log "pandoc $pandocVer already installed"
} else {
Info "Installing pandoc..."
if ($HasWinget) { winget install JohnMacFarlane.Pandoc --accept-source-agreements 2>>$LogFile }
elseif ($HasChoco) { choco install pandoc -y 2>>$LogFile }
elseif ($HasScoop) { scoop install pandoc 2>>$LogFile }
else { Warn "Install pandoc manually: https://pandoc.org/installing.html" }
$env:Path = [System.Environment]::GetEnvironmentVariable("Path", "Machine") + ";" + [System.Environment]::GetEnvironmentVariable("Path", "User")
if (Get-Command pandoc -ErrorAction SilentlyContinue) {
Log "pandoc installed"
} else {
Warn "pandoc not found after install (optional, will degrade gracefully)"
}
}
}
# --- LibreOffice (Optional) ---
if (-not $Minimal) {
Step "Checking LibreOffice/soffice (optional: .doc conversion)"
$sofficeFound = $false
# Check common Windows install paths
$sofficePaths = @(
"C:\Program Files\LibreOffice\program\soffice.exe",
"C:\Program Files (x86)\LibreOffice\program\soffice.exe",
"${env:LOCALAPPDATA}\Programs\LibreOffice\program\soffice.exe"
)
if (Get-Command soffice -ErrorAction SilentlyContinue) {
Log "soffice found in PATH"
$sofficeFound = $true
} else {
foreach ($p in $sofficePaths) {
if (Test-Path $p) {
Log "soffice found at: $p"
Info "Tip: Add to PATH: `$env:Path += ';$(Split-Path $p)'"
$sofficeFound = $true
break
}
}
}
if (-not $sofficeFound) {
Info "Installing LibreOffice (this may take a while)..."
if ($HasWinget) { winget install TheDocumentFoundation.LibreOffice --accept-source-agreements 2>>$LogFile }
elseif ($HasChoco) { choco install libreoffice-fresh -y 2>>$LogFile }
else { Warn "Install LibreOffice manually: https://www.libreoffice.org/download/" }
}
}
# --- NuGet Configuration ---
Step "Checking NuGet configuration"
$nugetSources = & dotnet nuget list source 2>$null
if ($nugetSources -match "nuget.org") {
Log "nuget.org source is configured"
} else {
Warn "nuget.org not in sources. Adding..."
& dotnet nuget add source "https://api.nuget.org/v3/index.json" --name "nuget.org" 2>>$LogFile
}
# --- Encoding Check ---
Step "Checking console encoding"
$currentEncoding = [Console]::OutputEncoding.EncodingName
if ($currentEncoding -match "UTF-8|Unicode") {
Log "Console encoding: $currentEncoding (UTF-8 compatible)"
} else {
Warn "Console encoding: $currentEncoding (may cause issues with CJK text)"
Info "To fix: [Console]::OutputEncoding = [System.Text.Encoding]::UTF8"
Info "Or set system-wide: Settings > Time & Language > Language > Administrative > Change system locale > Beta: UTF-8"
# Apply for this session
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8
Log "Set UTF-8 encoding for this session"
}
# --- Font Check ---
if (-not $Minimal) {
Step "Checking fonts"
$fonts = [System.Drawing.FontFamily]::Families 2>$null
if ($fonts) {
$fontNames = $fonts | ForEach-Object { $_.Name }
$hasCalibri = $fontNames -contains "Calibri"
$hasTimes = $fontNames -contains "Times New Roman"
$hasCJK = ($fontNames | Where-Object { $_ -match "SimSun|Microsoft YaHei|MS Mincho|Malgun Gothic" }).Count -gt 0
if ($hasCalibri) { Log "Western fonts: Calibri found" } else { Warn "Calibri not found (install Microsoft Office or fonts)" }
if ($hasTimes) { Log "Western fonts: Times New Roman found" } else { Warn "Times New Roman not found" }
if ($hasCJK) { Log "CJK fonts: available" } else { Warn "CJK fonts not found (install language packs for Chinese/Japanese/Korean)" }
} else {
Info "Cannot enumerate fonts (System.Drawing not loaded). Skipping font check."
}
}
# --- Build Project ---
Step "Building minimax-docx .NET project"
if (-not (Test-Path $DotnetDir)) {
Fail "Dotnet project directory not found: $DotnetDir"
exit 1
}
Push-Location $DotnetDir
Info "Restoring NuGet packages..."
$restoreResult = & dotnet restore --verbosity quiet 2>&1
if ($LASTEXITCODE -ne 0) {
Fail "NuGet restore failed:"
$restoreResult | ForEach-Object { Fail " $_" }
Fail "Common causes:"
Fail " - No internet (NuGet needs to download packages)"
Fail " - Corporate proxy/firewall blocking nuget.org"
Fail " - Insufficient disk space"
Fail "Try: dotnet restore --verbosity detailed"
Pop-Location
exit 1
}
Log "NuGet packages restored"
Info "Building project..."
$buildResult = & dotnet build --verbosity quiet --no-restore 2>&1
if ($LASTEXITCODE -ne 0) {
Fail "Build failed:"
$buildResult | ForEach-Object { Fail " $_" }
Pop-Location
exit 1
}
Log "Project built successfully"
Pop-Location
# --- Verification ---
if (-not $SkipVerify) {
Step "Verification Test"
$testOutput = Join-Path $env:TEMP "minimax-docx-setup-test-$PID.docx"
Info "Creating a test document..."
Push-Location $DotnetDir
$testResult = & dotnet run --project MiniMaxAIDocx.Cli -- create --type report --output $testOutput --title "Setup Test" 2>&1
$testExitCode = $LASTEXITCODE
Pop-Location
if ($testExitCode -eq 0 -and (Test-Path $testOutput)) {
Log "Test document created: $testOutput"
if (Get-Command pandoc -ErrorAction SilentlyContinue) {
$preview = & pandoc -f docx -t plain $testOutput 2>$null | Select-Object -First 3
if ($preview) { Log "Preview working: `"$($preview -join ' ')`"" }
}
Remove-Item $testOutput -Force
Log "Test passed - minimax-docx is ready to use!"
} else {
Fail "Test document creation failed. Output:"
$testResult | ForEach-Object { Fail " $_" }
}
}
# --- Summary ---
Step "Setup Complete"
Write-Host ""
Write-Host " Environment: Windows $([System.Environment]::OSVersion.Version)"
Write-Host " .NET SDK: $(dotnet --version 2>$null)"
$pandocInfo = if (Get-Command pandoc -ErrorAction SilentlyContinue) { pandoc --version | Select-Object -First 1 } else { "not installed (optional)" }
Write-Host " pandoc: $pandocInfo"
Write-Host " Project: $DotnetDir"
Write-Host ""
Write-Host " Usage:"
Write-Host " dotnet run --project $DotnetDir\MiniMaxAIDocx.Cli -- create --type report --output my_report.docx"
Write-Host ""
Write-Host " Log file: $LogFile"