Initial commit: QwenClaw persistent daemon for Qwen Code
This commit is contained in:
58
scripts/autostart.ps1
Normal file
58
scripts/autostart.ps1
Normal file
@@ -0,0 +1,58 @@
|
||||
# QwenClaw Auto-Start Script
|
||||
# This script ensures QwenClaw daemon is always running
|
||||
# Run at Windows startup via Task Scheduler
|
||||
|
||||
$ErrorActionPreference = "SilentlyContinue"
|
||||
|
||||
$QWENCLAW_DIR = Join-Path $env:USERPROFILE "qwenclaw"
|
||||
$QWEN_DIR = Join-Path $env:USERPROFILE ".qwen"
|
||||
$DAEMON_PID_FILE = Join-Path $QWEN_DIR "qwenclaw\daemon.pid"
|
||||
$LOG_FILE = Join-Path $QWEN_DIR "qwenclaw\autostart.log"
|
||||
|
||||
function Write-Log {
|
||||
param([string]$Message)
|
||||
$timestamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
|
||||
"[$timestamp] $Message" | Out-File -FilePath $LOG_FILE -Append
|
||||
}
|
||||
|
||||
Write-Log "QwenClaw auto-start initiated"
|
||||
|
||||
# Check if daemon is already running
|
||||
if (Test-Path $DAEMON_PID_FILE) {
|
||||
$pidContent = Get-Content $DAEMON_PID_FILE -ErrorAction SilentlyContinue
|
||||
if ($pidContent) {
|
||||
try {
|
||||
$process = Get-Process -Id ([int]$pidContent) -ErrorAction SilentlyContinue
|
||||
if ($process) {
|
||||
Write-Log "QwenClaw daemon already running (PID: $pidContent)"
|
||||
exit 0
|
||||
}
|
||||
} catch {
|
||||
Write-Log "Stale PID file found, cleaning up..."
|
||||
Remove-Item $DAEMON_PID_FILE -Force -ErrorAction SilentlyContinue
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# Wait for Qwen Code to be available (in case of system startup)
|
||||
Start-Sleep -Seconds 5
|
||||
|
||||
# Start daemon in background
|
||||
Write-Log "Starting QwenClaw daemon from: $QWENCLAW_DIR"
|
||||
|
||||
try {
|
||||
$startInfo = New-Object System.Diagnostics.ProcessStartInfo
|
||||
$startInfo.FileName = "bun"
|
||||
$startInfo.Arguments = "run start --web"
|
||||
$startInfo.WorkingDirectory = $QWENCLAW_DIR
|
||||
$startInfo.UseShellExecute = $true
|
||||
$startInfo.WindowStyle = [System.Diagnostics.ProcessWindowStyle]::Hidden
|
||||
$startInfo.CreateNoWindow = $true
|
||||
|
||||
$process = [System.Diagnostics.Process]::Start($startInfo)
|
||||
Write-Log "QwenClaw daemon started (PID: $($process.Id))"
|
||||
} catch {
|
||||
Write-Log "Failed to start daemon: $($_.Exception.Message)"
|
||||
}
|
||||
|
||||
Write-Log "QwenClaw auto-start completed"
|
||||
Reference in New Issue
Block a user