Files
openfang/scripts/install.ps1
T
jaberjaber23 5692c96494 Initial commit — OpenFang Agent Operating System
Open-source Agent OS built in Rust.

- 14 crates, 1,767+ tests, zero clippy warnings
- 7 autonomous Hands (Clip, Lead, Collector, Predictor, Researcher, Twitter, Browser)
- 16 security systems (WASM sandbox, Merkle audit trail, taint tracking, Ed25519 signing, SSRF protection, secret zeroization, HMAC-SHA256 mutual auth, and more)
- 30 pre-built agents across 4 performance tiers
- 40 channel adapters (Telegram, Discord, Slack, WhatsApp, Teams, and 35 more)
- 38 built-in tools + MCP client/server + A2A protocol
- 26 LLM providers with intelligent routing and cost tracking
- 60+ bundled skills with FangHub marketplace
- Tauri 2.0 native desktop app
- 140+ REST/WS/SSE API endpoints with Alpine.js dashboard
- OpenAI-compatible /v1/chat/completions endpoint
- One-command install, production-ready
2026-02-26 01:00:27 +03:00

169 lines
5.9 KiB
PowerShell

# OpenFang installer for Windows
# Usage: iwr -useb https://openfang.sh/install.ps1 | iex
# or: powershell -c "irm https://openfang.sh/install.ps1 | iex"
#
# Flags (via environment variables):
# $env:OPENFANG_INSTALL_DIR = custom install directory
# $env:OPENFANG_VERSION = specific version tag (e.g. "v0.1.0")
$ErrorActionPreference = 'Stop'
$Repo = "RightNow-AI/openfang"
$DefaultInstallDir = Join-Path $env:USERPROFILE ".openfang\bin"
$InstallDir = if ($env:OPENFANG_INSTALL_DIR) { $env:OPENFANG_INSTALL_DIR } else { $DefaultInstallDir }
function Write-Banner {
Write-Host ""
Write-Host " OpenFang Installer" -ForegroundColor Cyan
Write-Host " ==================" -ForegroundColor Cyan
Write-Host ""
}
function Get-Architecture {
try {
$arch = [System.Runtime.InteropServices.RuntimeInformation]::OSArchitecture
} catch {
# PowerShell 5.1 fallback
$arch = $env:PROCESSOR_ARCHITECTURE
}
switch ($arch) {
{ $_ -in "X64", "AMD64" } { return "x86_64" }
{ $_ -in "Arm64", "ARM64" } { return "aarch64" }
default {
Write-Host " Unsupported architecture: $arch" -ForegroundColor Red
exit 1
}
}
}
function Get-LatestVersion {
if ($env:OPENFANG_VERSION) {
return $env:OPENFANG_VERSION
}
Write-Host " Fetching latest release..."
try {
$release = Invoke-RestMethod -Uri "https://api.github.com/repos/$Repo/releases/latest"
return $release.tag_name
}
catch {
Write-Host " Could not determine latest version." -ForegroundColor Red
Write-Host " Install from source instead:" -ForegroundColor Yellow
Write-Host " cargo install --git https://github.com/$Repo openfang-cli"
exit 1
}
}
function Install-OpenFang {
Write-Banner
$arch = Get-Architecture
$version = Get-LatestVersion
$target = "${arch}-pc-windows-msvc"
$archive = "openfang-${target}.zip"
$url = "https://github.com/$Repo/releases/download/$version/$archive"
$checksumUrl = "$url.sha256"
Write-Host " Installing OpenFang $version for $target..."
# Create install directory
if (-not (Test-Path $InstallDir)) {
New-Item -ItemType Directory -Path $InstallDir -Force | Out-Null
}
# Download to temp
$tempDir = Join-Path ([System.IO.Path]::GetTempPath()) "openfang-install"
if (Test-Path $tempDir) { Remove-Item -Recurse -Force $tempDir }
New-Item -ItemType Directory -Path $tempDir -Force | Out-Null
$archivePath = Join-Path $tempDir $archive
$checksumPath = Join-Path $tempDir "$archive.sha256"
try {
Invoke-WebRequest -Uri $url -OutFile $archivePath -UseBasicParsing
}
catch {
Write-Host " Download failed. The release may not exist for your platform." -ForegroundColor Red
Write-Host " Install from source instead:" -ForegroundColor Yellow
Write-Host " cargo install --git https://github.com/$Repo openfang-cli"
Remove-Item -Recurse -Force $tempDir -ErrorAction SilentlyContinue
exit 1
}
# Verify checksum if available
$checksumDownloaded = $false
try {
Invoke-WebRequest -Uri $checksumUrl -OutFile $checksumPath -UseBasicParsing
$checksumDownloaded = $true
}
catch {
Write-Host " Checksum file not available, skipping verification." -ForegroundColor Yellow
}
if ($checksumDownloaded) {
$expectedHash = (Get-Content $checksumPath -Raw).Split(" ")[0].Trim().ToLower()
$actualHash = (Get-FileHash $archivePath -Algorithm SHA256).Hash.ToLower()
if ($expectedHash -ne $actualHash) {
Write-Host " Checksum verification FAILED!" -ForegroundColor Red
Write-Host " Expected: $expectedHash" -ForegroundColor Red
Write-Host " Got: $actualHash" -ForegroundColor Red
Remove-Item -Recurse -Force $tempDir -ErrorAction SilentlyContinue
exit 1
}
Write-Host " Checksum verified." -ForegroundColor Green
}
# Extract
Expand-Archive -Path $archivePath -DestinationPath $tempDir -Force
$exePath = Join-Path $tempDir "openfang.exe"
if (-not (Test-Path $exePath)) {
# May be nested in a directory
$found = Get-ChildItem -Path $tempDir -Filter "openfang.exe" -Recurse | Select-Object -First 1
if ($found) {
$exePath = $found.FullName
}
else {
Write-Host " Could not find openfang.exe in archive." -ForegroundColor Red
Remove-Item -Recurse -Force $tempDir -ErrorAction SilentlyContinue
exit 1
}
}
# Install
Copy-Item -Path $exePath -Destination (Join-Path $InstallDir "openfang.exe") -Force
# Clean up temp
Remove-Item -Recurse -Force $tempDir -ErrorAction SilentlyContinue
# Add to user PATH if not already present
$currentPath = [Environment]::GetEnvironmentVariable("Path", "User")
if ($currentPath -notlike "*$InstallDir*") {
[Environment]::SetEnvironmentVariable("Path", "$InstallDir;$currentPath", "User")
Write-Host " Added $InstallDir to user PATH." -ForegroundColor Green
Write-Host " Restart your terminal for PATH changes to take effect." -ForegroundColor Yellow
}
# Verify
$installedExe = Join-Path $InstallDir "openfang.exe"
if (Test-Path $installedExe) {
try {
$versionOutput = & $installedExe --version 2>&1
Write-Host ""
Write-Host " OpenFang installed successfully! ($versionOutput)" -ForegroundColor Green
}
catch {
Write-Host ""
Write-Host " OpenFang binary installed to $installedExe" -ForegroundColor Green
}
}
Write-Host ""
Write-Host " Get started:" -ForegroundColor Cyan
Write-Host " openfang init"
Write-Host ""
Write-Host " The setup wizard will guide you through provider selection"
Write-Host " and configuration."
Write-Host ""
}
Install-OpenFang