feat: Add various tools for document processing and management

- Introduced `docx-extractor` for extracting content and metadata from Word .docx files.
- Added `docx2md` for converting Word .docx files to Markdown format.
- Implemented `gpt` for generating text using OpenAI's GPT models.
- Created `html2text` for converting HTML content to plain text.
- Developed `mbox2eml` for converting MBOX mailbox files to individual .eml files.
- Added `md2pdf` for converting Markdown files to PDF format.
- Introduced `mdscraper` for combining text files into a single markdown document.
- Created `pdf-extractor` for extracting content and metadata from PDF files.
- Developed `pdf2md` for converting PDF files to Markdown format.
- Implemented `protonmail` for managing ProtonMail emails via Bridge.
- Added `schedule` for managing systemd timers and services.
- Introduced `search` for managing searchable collections of files.
- Added `text-extractor` for extracting content and metadata from text files.
- Removed outdated recommendations document.
This commit is contained in:
2026-02-22 22:18:41 -08:00
parent eab6f8b535
commit 6d0332e32b
75 changed files with 62 additions and 235 deletions

View File

@@ -0,0 +1,202 @@
# install-service.ps1 - Install devbox-connect as a Windows service using NSSM
#
# Prerequisites:
# 1. Install NSSM: winget install nssm
# 2. Install devbox-connect: uv tool install .
#
# Usage (run as Administrator):
# .\install-service.ps1 -ConfigPath C:\path\to\tunnels.yaml
# .\install-service.ps1 -Uninstall
# .\install-service.ps1 -Status
param(
[string]$ConfigPath,
[switch]$Uninstall,
[switch]$Status,
[string]$ServiceName = "DevboxConnect"
)
$ErrorActionPreference = "Stop"
function Test-Administrator {
$identity = [Security.Principal.WindowsIdentity]::GetCurrent()
$principal = New-Object Security.Principal.WindowsPrincipal($identity)
return $principal.IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)
}
function Get-NssmPath {
$nssm = Get-Command nssm -ErrorAction SilentlyContinue
if ($nssm) {
return $nssm.Source
}
# Check common locations
$paths = @(
"C:\Program Files\nssm\nssm.exe",
"C:\Program Files (x86)\nssm\nssm.exe",
"$env:LOCALAPPDATA\Microsoft\WinGet\Packages\*nssm*\nssm.exe"
)
foreach ($path in $paths) {
$found = Get-Item $path -ErrorAction SilentlyContinue | Select-Object -First 1
if ($found) {
return $found.FullName
}
}
return $null
}
function Get-DevboxConnectPath {
# Find the uv-installed devbox-connect
$uvToolPath = "$env:LOCALAPPDATA\uv\tools\devbox-connect"
if (Test-Path $uvToolPath) {
# Find the Python executable in the venv
$pythonPath = Join-Path $uvToolPath "Scripts\python.exe"
if (Test-Path $pythonPath) {
return @{
Python = $pythonPath
Module = "devbox_connect.cli"
}
}
}
# Try to find via uv tool list
$uvPath = Get-Command uv -ErrorAction SilentlyContinue
if ($uvPath) {
$toolDir = & uv tool dir 2>$null
if ($toolDir -and (Test-Path "$toolDir\devbox-connect")) {
$pythonPath = Join-Path $toolDir "devbox-connect\Scripts\python.exe"
if (Test-Path $pythonPath) {
return @{
Python = $pythonPath
Module = "devbox_connect.cli"
}
}
}
}
return $null
}
# Check for admin rights
if (-not (Test-Administrator)) {
Write-Error "This script must be run as Administrator"
exit 1
}
# Handle status check
if ($Status) {
$service = Get-Service -Name $ServiceName -ErrorAction SilentlyContinue
if ($service) {
Write-Host "Service '$ServiceName' status: $($service.Status)"
Write-Host "Startup type: $($service.StartType)"
} else {
Write-Host "Service '$ServiceName' is not installed"
}
exit 0
}
# Handle uninstall
if ($Uninstall) {
$nssm = Get-NssmPath
if (-not $nssm) {
Write-Error "NSSM not found. Install with: winget install nssm"
exit 1
}
Write-Host "Stopping service..."
& $nssm stop $ServiceName 2>$null
Write-Host "Removing service..."
& $nssm remove $ServiceName confirm
Write-Host "Service '$ServiceName' removed"
exit 0
}
# Install service
if (-not $ConfigPath) {
Write-Error "ConfigPath is required. Usage: .\install-service.ps1 -ConfigPath C:\path\to\tunnels.yaml"
exit 1
}
if (-not (Test-Path $ConfigPath)) {
Write-Error "Config file not found: $ConfigPath"
exit 1
}
$ConfigPath = (Resolve-Path $ConfigPath).Path
# Find NSSM
$nssm = Get-NssmPath
if (-not $nssm) {
Write-Error @"
NSSM (Non-Sucking Service Manager) not found.
Install with:
winget install nssm
Or download from: https://nssm.cc/download
"@
exit 1
}
# Find devbox-connect
$devboxConnect = Get-DevboxConnectPath
if (-not $devboxConnect) {
Write-Error @"
devbox-connect not found. Install with:
uv tool install .
Or from a directory containing the project:
uv tool install /path/to/devbox-connect
"@
exit 1
}
Write-Host "Found devbox-connect at: $($devboxConnect.Python)"
Write-Host "Config file: $ConfigPath"
Write-Host ""
# Remove existing service if present
$existing = Get-Service -Name $ServiceName -ErrorAction SilentlyContinue
if ($existing) {
Write-Host "Removing existing service..."
& $nssm stop $ServiceName 2>$null
& $nssm remove $ServiceName confirm
}
# Install the service
Write-Host "Installing service '$ServiceName'..."
& $nssm install $ServiceName $devboxConnect.Python "-m" $devboxConnect.Module "-c" $ConfigPath "start"
# Configure service
& $nssm set $ServiceName DisplayName "Devbox Connect SSH Tunnels"
& $nssm set $ServiceName Description "Maintains SSH tunnels to devbox for port forwarding"
& $nssm set $ServiceName Start SERVICE_AUTO_START
& $nssm set $ServiceName AppStdout "$env:LOCALAPPDATA\devbox-connect\service.log"
& $nssm set $ServiceName AppStderr "$env:LOCALAPPDATA\devbox-connect\service.log"
& $nssm set $ServiceName AppRotateFiles 1
& $nssm set $ServiceName AppRotateBytes 1048576
# Create log directory
$logDir = "$env:LOCALAPPDATA\devbox-connect"
if (-not (Test-Path $logDir)) {
New-Item -ItemType Directory -Path $logDir | Out-Null
}
Write-Host ""
Write-Host "Service '$ServiceName' installed successfully!"
Write-Host ""
Write-Host "Commands:"
Write-Host " Start: Start-Service $ServiceName"
Write-Host " Stop: Stop-Service $ServiceName"
Write-Host " Status: Get-Service $ServiceName"
Write-Host " Logs: Get-Content $logDir\service.log -Tail 50"
Write-Host ""
Write-Host "Starting service..."
Start-Service $ServiceName
Get-Service $ServiceName

View File

@@ -0,0 +1,19 @@
@echo off
REM run-manual.bat - Run devbox-connect manually (not as a service)
REM
REM Usage:
REM run-manual.bat - Uses tunnels.yaml in current directory
REM run-manual.bat C:\path\to\config - Uses specified config file
setlocal
set CONFIG=%1
if "%CONFIG%"=="" set CONFIG=tunnels.yaml
echo Starting devbox-connect with config: %CONFIG%
echo Press Ctrl+C to stop
echo.
devbox-connect -c "%CONFIG%" start
pause