599 lines
11 KiB
Markdown
599 lines
11 KiB
Markdown
|
|
# Windows 11 Deployment Guide
|
||
|
|
|
||
|
|
Complete guide for deploying and testing Ajarbot on Windows 11.
|
||
|
|
|
||
|
|
## Prerequisites
|
||
|
|
|
||
|
|
### 1. Install Python
|
||
|
|
|
||
|
|
Download and install Python 3.8 or higher from [python.org](https://www.python.org/downloads/):
|
||
|
|
|
||
|
|
```powershell
|
||
|
|
# Verify installation
|
||
|
|
python --version
|
||
|
|
# Should show: Python 3.8+
|
||
|
|
|
||
|
|
# Verify pip
|
||
|
|
pip --version
|
||
|
|
```
|
||
|
|
|
||
|
|
**Important:** During installation, check "Add Python to PATH"
|
||
|
|
|
||
|
|
### 2. Get API Keys
|
||
|
|
|
||
|
|
You'll need at least one of these:
|
||
|
|
|
||
|
|
**Claude (Anthropic)** - Recommended
|
||
|
|
1. Go to https://console.anthropic.com/
|
||
|
|
2. Create account or sign in
|
||
|
|
3. Navigate to API Keys
|
||
|
|
4. Create new key
|
||
|
|
5. Copy the key (starts with `sk-ant-`)
|
||
|
|
|
||
|
|
**GLM (z.ai)** - Optional
|
||
|
|
1. Go to https://z.ai
|
||
|
|
2. Sign up and get API key
|
||
|
|
|
||
|
|
## Quick Start (5 Minutes)
|
||
|
|
|
||
|
|
### 1. Clone or Navigate to Project
|
||
|
|
|
||
|
|
```powershell
|
||
|
|
# If you haven't already
|
||
|
|
cd c:\Users\fam1n\projects\ajarbot
|
||
|
|
```
|
||
|
|
|
||
|
|
### 2. Create Virtual Environment (Recommended)
|
||
|
|
|
||
|
|
```powershell
|
||
|
|
# Create virtual environment
|
||
|
|
python -m venv venv
|
||
|
|
|
||
|
|
# Activate it
|
||
|
|
.\venv\Scripts\activate
|
||
|
|
|
||
|
|
# You should see (venv) in your prompt
|
||
|
|
```
|
||
|
|
|
||
|
|
### 3. Install Dependencies
|
||
|
|
|
||
|
|
```powershell
|
||
|
|
pip install -r requirements.txt
|
||
|
|
```
|
||
|
|
|
||
|
|
Expected output:
|
||
|
|
```
|
||
|
|
Successfully installed anthropic-0.40.0 requests-2.31.0 watchdog-3.0.0 ...
|
||
|
|
```
|
||
|
|
|
||
|
|
### 4. Set Environment Variables
|
||
|
|
|
||
|
|
**Option A: PowerShell (temporary - current session only)**
|
||
|
|
```powershell
|
||
|
|
$env:ANTHROPIC_API_KEY = "sk-ant-your-key-here"
|
||
|
|
|
||
|
|
# Optional: GLM
|
||
|
|
$env:GLM_API_KEY = "your-glm-key-here"
|
||
|
|
```
|
||
|
|
|
||
|
|
**Option B: System Environment Variables (persistent)**
|
||
|
|
1. Press `Win + X` → System
|
||
|
|
2. Click "Advanced system settings"
|
||
|
|
3. Click "Environment Variables"
|
||
|
|
4. Under "User variables", click "New"
|
||
|
|
5. Variable name: `ANTHROPIC_API_KEY`
|
||
|
|
6. Variable value: `sk-ant-your-key-here`
|
||
|
|
7. Click OK
|
||
|
|
|
||
|
|
**Option C: .env file (recommended for development)**
|
||
|
|
```powershell
|
||
|
|
# Create .env file in project root
|
||
|
|
notepad .env
|
||
|
|
```
|
||
|
|
|
||
|
|
Add to `.env`:
|
||
|
|
```
|
||
|
|
ANTHROPIC_API_KEY=sk-ant-your-key-here
|
||
|
|
GLM_API_KEY=your-glm-key-here
|
||
|
|
```
|
||
|
|
|
||
|
|
Then install python-dotenv and load it:
|
||
|
|
```powershell
|
||
|
|
pip install python-dotenv
|
||
|
|
```
|
||
|
|
|
||
|
|
### 5. Test Basic Agent
|
||
|
|
|
||
|
|
```powershell
|
||
|
|
python example_usage.py
|
||
|
|
```
|
||
|
|
|
||
|
|
Expected output:
|
||
|
|
```
|
||
|
|
============================================================
|
||
|
|
Basic Agent Usage Example
|
||
|
|
============================================================
|
||
|
|
|
||
|
|
[Setup] Initializing agent with Claude...
|
||
|
|
[Setup] Agent initialized
|
||
|
|
|
||
|
|
[Test 1] Basic chat...
|
||
|
|
Agent: [Response from Claude]
|
||
|
|
|
||
|
|
[Test 2] Memory operations...
|
||
|
|
...
|
||
|
|
```
|
||
|
|
|
||
|
|
## Running Different Examples
|
||
|
|
|
||
|
|
### Basic Agent with Memory
|
||
|
|
|
||
|
|
```powershell
|
||
|
|
python example_usage.py
|
||
|
|
```
|
||
|
|
|
||
|
|
**What it does:**
|
||
|
|
- Creates agent with Claude
|
||
|
|
- Tests basic chat
|
||
|
|
- Demonstrates memory operations
|
||
|
|
- Shows task management
|
||
|
|
|
||
|
|
### Pulse & Brain Monitoring
|
||
|
|
|
||
|
|
```powershell
|
||
|
|
python example_bot_with_pulse_brain.py
|
||
|
|
```
|
||
|
|
|
||
|
|
**What it does:**
|
||
|
|
- Runs cost-effective monitoring
|
||
|
|
- Pure Python checks (zero cost)
|
||
|
|
- Conditional AI calls (only when needed)
|
||
|
|
- Shows real-time status
|
||
|
|
|
||
|
|
Press `Ctrl+C` to stop
|
||
|
|
|
||
|
|
### Task Scheduler
|
||
|
|
|
||
|
|
```powershell
|
||
|
|
python example_bot_with_scheduler.py
|
||
|
|
```
|
||
|
|
|
||
|
|
**What it does:**
|
||
|
|
- Schedules recurring tasks
|
||
|
|
- Demonstrates cron-like syntax
|
||
|
|
- Shows task execution
|
||
|
|
- Runs in background
|
||
|
|
|
||
|
|
Press `Ctrl+C` to stop
|
||
|
|
|
||
|
|
### Skills Integration
|
||
|
|
|
||
|
|
```powershell
|
||
|
|
python example_bot_with_skills.py
|
||
|
|
```
|
||
|
|
|
||
|
|
**What it does:**
|
||
|
|
- Loads Claude Code skills
|
||
|
|
- Allows skill invocation
|
||
|
|
- Demonstrates preprocessing
|
||
|
|
- Shows available skills
|
||
|
|
|
||
|
|
### Multi-Platform Bot (Slack + Telegram)
|
||
|
|
|
||
|
|
First, generate configuration:
|
||
|
|
```powershell
|
||
|
|
python bot_runner.py --init
|
||
|
|
```
|
||
|
|
|
||
|
|
This creates `config\adapters.local.yaml`
|
||
|
|
|
||
|
|
Edit the file:
|
||
|
|
```powershell
|
||
|
|
notepad config\adapters.local.yaml
|
||
|
|
```
|
||
|
|
|
||
|
|
Add your credentials:
|
||
|
|
```yaml
|
||
|
|
adapters:
|
||
|
|
slack:
|
||
|
|
enabled: true
|
||
|
|
credentials:
|
||
|
|
bot_token: "xoxb-your-token"
|
||
|
|
app_token: "xapp-your-token"
|
||
|
|
|
||
|
|
telegram:
|
||
|
|
enabled: true
|
||
|
|
credentials:
|
||
|
|
bot_token: "your-bot-token"
|
||
|
|
```
|
||
|
|
|
||
|
|
Run the bot:
|
||
|
|
```powershell
|
||
|
|
python bot_runner.py
|
||
|
|
```
|
||
|
|
|
||
|
|
## Testing Components
|
||
|
|
|
||
|
|
### Test Skills System
|
||
|
|
|
||
|
|
```powershell
|
||
|
|
python test_skills.py
|
||
|
|
```
|
||
|
|
|
||
|
|
Verifies:
|
||
|
|
- Skill discovery
|
||
|
|
- Skill loading
|
||
|
|
- Preprocessor functionality
|
||
|
|
|
||
|
|
### Test Scheduler
|
||
|
|
|
||
|
|
```powershell
|
||
|
|
python test_scheduler.py
|
||
|
|
```
|
||
|
|
|
||
|
|
Verifies:
|
||
|
|
- Task scheduling
|
||
|
|
- Schedule parsing
|
||
|
|
- Task execution
|
||
|
|
|
||
|
|
## Running as Windows Service (Production)
|
||
|
|
|
||
|
|
### Option 1: NSSM (Non-Sucking Service Manager)
|
||
|
|
|
||
|
|
**Install NSSM:**
|
||
|
|
1. Download from https://nssm.cc/download
|
||
|
|
2. Extract to `C:\nssm`
|
||
|
|
3. Add to PATH or use full path
|
||
|
|
|
||
|
|
**Create Service:**
|
||
|
|
```powershell
|
||
|
|
# Run as Administrator
|
||
|
|
nssm install Ajarbot "C:\Users\fam1n\projects\ajarbot\venv\Scripts\python.exe"
|
||
|
|
|
||
|
|
# Set parameters
|
||
|
|
nssm set Ajarbot AppParameters "bot_runner.py"
|
||
|
|
nssm set Ajarbot AppDirectory "C:\Users\fam1n\projects\ajarbot"
|
||
|
|
|
||
|
|
# Set environment variables
|
||
|
|
nssm set Ajarbot AppEnvironmentExtra ANTHROPIC_API_KEY=sk-ant-your-key
|
||
|
|
|
||
|
|
# Start service
|
||
|
|
nssm start Ajarbot
|
||
|
|
```
|
||
|
|
|
||
|
|
**Manage Service:**
|
||
|
|
```powershell
|
||
|
|
# Check status
|
||
|
|
nssm status Ajarbot
|
||
|
|
|
||
|
|
# Stop service
|
||
|
|
nssm stop Ajarbot
|
||
|
|
|
||
|
|
# Remove service
|
||
|
|
nssm remove Ajarbot confirm
|
||
|
|
```
|
||
|
|
|
||
|
|
### Option 2: Task Scheduler (Simpler)
|
||
|
|
|
||
|
|
**Create scheduled task:**
|
||
|
|
1. Open Task Scheduler (`Win + R` → `taskschd.msc`)
|
||
|
|
2. Create Basic Task
|
||
|
|
3. Name: "Ajarbot"
|
||
|
|
4. Trigger: "When computer starts"
|
||
|
|
5. Action: "Start a program"
|
||
|
|
6. Program: `C:\Users\fam1n\projects\ajarbot\venv\Scripts\python.exe`
|
||
|
|
7. Arguments: `bot_runner.py`
|
||
|
|
8. Start in: `C:\Users\fam1n\projects\ajarbot`
|
||
|
|
9. Finish
|
||
|
|
|
||
|
|
**Configure task:**
|
||
|
|
- Right-click task → Properties
|
||
|
|
- Check "Run whether user is logged on or not"
|
||
|
|
- Check "Run with highest privileges"
|
||
|
|
- Triggers tab → Edit → Check "Enabled"
|
||
|
|
|
||
|
|
### Option 3: Simple Startup Script
|
||
|
|
|
||
|
|
Create `start_ajarbot.bat`:
|
||
|
|
```batch
|
||
|
|
@echo off
|
||
|
|
cd /d C:\Users\fam1n\projects\ajarbot
|
||
|
|
call venv\Scripts\activate
|
||
|
|
set ANTHROPIC_API_KEY=sk-ant-your-key-here
|
||
|
|
python bot_runner.py
|
||
|
|
pause
|
||
|
|
```
|
||
|
|
|
||
|
|
Add to startup:
|
||
|
|
1. Press `Win + R`
|
||
|
|
2. Type `shell:startup`
|
||
|
|
3. Copy `start_ajarbot.bat` to the folder
|
||
|
|
|
||
|
|
## Running in Background
|
||
|
|
|
||
|
|
### Using PowerShell
|
||
|
|
|
||
|
|
```powershell
|
||
|
|
# Start in background
|
||
|
|
Start-Process python -ArgumentList "bot_runner.py" -WindowStyle Hidden -WorkingDirectory "C:\Users\fam1n\projects\ajarbot"
|
||
|
|
|
||
|
|
# Find process
|
||
|
|
Get-Process python | Where-Object {$_.CommandLine -like "*bot_runner*"}
|
||
|
|
|
||
|
|
# Stop process (get PID first)
|
||
|
|
Stop-Process -Id <PID>
|
||
|
|
```
|
||
|
|
|
||
|
|
### Using pythonw (No console window)
|
||
|
|
|
||
|
|
```powershell
|
||
|
|
# Run without console window
|
||
|
|
pythonw bot_runner.py
|
||
|
|
```
|
||
|
|
|
||
|
|
## Monitoring and Logs
|
||
|
|
|
||
|
|
### View Logs
|
||
|
|
|
||
|
|
By default, Python prints to console. To save logs:
|
||
|
|
|
||
|
|
**Option 1: Redirect to file**
|
||
|
|
```powershell
|
||
|
|
python bot_runner.py > logs\bot.log 2>&1
|
||
|
|
```
|
||
|
|
|
||
|
|
**Option 2: Add logging to code**
|
||
|
|
|
||
|
|
Create `config\logging_config.py`:
|
||
|
|
```python
|
||
|
|
import logging
|
||
|
|
from pathlib import Path
|
||
|
|
|
||
|
|
log_dir = Path("logs")
|
||
|
|
log_dir.mkdir(exist_ok=True)
|
||
|
|
|
||
|
|
logging.basicConfig(
|
||
|
|
level=logging.INFO,
|
||
|
|
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
|
||
|
|
handlers=[
|
||
|
|
logging.FileHandler(log_dir / "ajarbot.log"),
|
||
|
|
logging.StreamHandler()
|
||
|
|
]
|
||
|
|
)
|
||
|
|
```
|
||
|
|
|
||
|
|
Then in your scripts:
|
||
|
|
```python
|
||
|
|
import logging
|
||
|
|
logger = logging.getLogger(__name__)
|
||
|
|
logger.info("Bot started")
|
||
|
|
```
|
||
|
|
|
||
|
|
### Monitor Process
|
||
|
|
|
||
|
|
**Task Manager:**
|
||
|
|
1. Press `Ctrl + Shift + Esc`
|
||
|
|
2. Details tab
|
||
|
|
3. Find `python.exe`
|
||
|
|
4. Check CPU/Memory usage
|
||
|
|
|
||
|
|
**PowerShell:**
|
||
|
|
```powershell
|
||
|
|
# Monitor in real-time
|
||
|
|
while ($true) {
|
||
|
|
Get-Process python | Select-Object CPU, PM, StartTime
|
||
|
|
Start-Sleep 5
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
## Troubleshooting
|
||
|
|
|
||
|
|
### "Python is not recognized"
|
||
|
|
|
||
|
|
**Fix:**
|
||
|
|
1. Find Python installation: `C:\Users\fam1n\AppData\Local\Programs\Python\Python3XX`
|
||
|
|
2. Add to PATH:
|
||
|
|
- Win + X → System → Advanced → Environment Variables
|
||
|
|
- Edit PATH, add Python directory
|
||
|
|
- Add Scripts directory too
|
||
|
|
|
||
|
|
### "Module not found" errors
|
||
|
|
|
||
|
|
```powershell
|
||
|
|
# Ensure virtual environment is activated
|
||
|
|
.\venv\Scripts\activate
|
||
|
|
|
||
|
|
# Reinstall dependencies
|
||
|
|
pip install -r requirements.txt --force-reinstall
|
||
|
|
```
|
||
|
|
|
||
|
|
### "API key not found"
|
||
|
|
|
||
|
|
Verify environment variable:
|
||
|
|
```powershell
|
||
|
|
# Check if set
|
||
|
|
$env:ANTHROPIC_API_KEY
|
||
|
|
|
||
|
|
# Should show your key, not empty
|
||
|
|
```
|
||
|
|
|
||
|
|
If empty, set it again:
|
||
|
|
```powershell
|
||
|
|
$env:ANTHROPIC_API_KEY = "sk-ant-your-key"
|
||
|
|
```
|
||
|
|
|
||
|
|
### Port already in use (for adapters)
|
||
|
|
|
||
|
|
If running multiple instances:
|
||
|
|
```powershell
|
||
|
|
# Find process using port
|
||
|
|
netstat -ano | findstr :PORT_NUMBER
|
||
|
|
|
||
|
|
# Kill process
|
||
|
|
taskkill /PID <PID> /F
|
||
|
|
```
|
||
|
|
|
||
|
|
### Memory workspace errors
|
||
|
|
|
||
|
|
```powershell
|
||
|
|
# Delete and recreate
|
||
|
|
Remove-Item -Recurse -Force memory_workspace
|
||
|
|
python example_usage.py
|
||
|
|
```
|
||
|
|
|
||
|
|
### Firewall blocking (for Slack/Telegram)
|
||
|
|
|
||
|
|
1. Windows Security → Firewall & network protection
|
||
|
|
2. Allow an app through firewall
|
||
|
|
3. Add Python
|
||
|
|
4. Check both Private and Public
|
||
|
|
|
||
|
|
## Performance Tips
|
||
|
|
|
||
|
|
### 1. Use SSD for memory_workspace
|
||
|
|
|
||
|
|
If you have multiple drives, store memory on SSD:
|
||
|
|
```python
|
||
|
|
# In agent.py, modify workspace_path
|
||
|
|
workspace_path = "D:\fast_storage\ajarbot_memory"
|
||
|
|
```
|
||
|
|
|
||
|
|
### 2. Optimize Pulse Interval
|
||
|
|
|
||
|
|
For lower CPU usage:
|
||
|
|
```python
|
||
|
|
pb = PulseBrain(agent, pulse_interval=300) # 5 minutes instead of 60 seconds
|
||
|
|
```
|
||
|
|
|
||
|
|
### 3. Limit Memory Database Size
|
||
|
|
|
||
|
|
```python
|
||
|
|
# In memory_system.py, add retention policy
|
||
|
|
memory.cleanup_old_entries(days=30)
|
||
|
|
```
|
||
|
|
|
||
|
|
### 4. Run with pythonw
|
||
|
|
|
||
|
|
```powershell
|
||
|
|
# Lower priority, no console
|
||
|
|
pythonw bot_runner.py
|
||
|
|
```
|
||
|
|
|
||
|
|
## Security Considerations
|
||
|
|
|
||
|
|
### 1. Protect API Keys
|
||
|
|
|
||
|
|
Never commit `.env` or `adapters.local.yaml`:
|
||
|
|
|
||
|
|
```powershell
|
||
|
|
# Check .gitignore includes:
|
||
|
|
echo ".env" >> .gitignore
|
||
|
|
echo "config/*.local.yaml" >> .gitignore
|
||
|
|
```
|
||
|
|
|
||
|
|
### 2. Use Windows Credential Manager
|
||
|
|
|
||
|
|
Store API keys securely:
|
||
|
|
|
||
|
|
```python
|
||
|
|
import keyring
|
||
|
|
|
||
|
|
# Store key
|
||
|
|
keyring.set_password("ajarbot", "anthropic_key", "sk-ant-...")
|
||
|
|
|
||
|
|
# Retrieve key
|
||
|
|
api_key = keyring.get_password("ajarbot", "anthropic_key")
|
||
|
|
```
|
||
|
|
|
||
|
|
Install keyring:
|
||
|
|
```powershell
|
||
|
|
pip install keyring
|
||
|
|
```
|
||
|
|
|
||
|
|
### 3. Run with Limited User
|
||
|
|
|
||
|
|
Create dedicated user account:
|
||
|
|
1. Settings → Accounts → Family & other users
|
||
|
|
2. Add account → "Ajarbot Service"
|
||
|
|
3. Run service as this user (limited permissions)
|
||
|
|
|
||
|
|
## Development Workflow
|
||
|
|
|
||
|
|
### 1. Development Mode
|
||
|
|
|
||
|
|
```powershell
|
||
|
|
# Activate venv
|
||
|
|
.\venv\Scripts\activate
|
||
|
|
|
||
|
|
# Run with auto-reload (install watchdog)
|
||
|
|
pip install watchdog[watchmedo]
|
||
|
|
|
||
|
|
# Monitor and restart on changes
|
||
|
|
watchmedo auto-restart --directory=. --pattern=*.py --recursive -- python bot_runner.py
|
||
|
|
```
|
||
|
|
|
||
|
|
### 2. Testing Changes
|
||
|
|
|
||
|
|
```powershell
|
||
|
|
# Quick syntax check
|
||
|
|
python -m py_compile agent.py
|
||
|
|
|
||
|
|
# Run tests
|
||
|
|
python test_skills.py
|
||
|
|
python test_scheduler.py
|
||
|
|
```
|
||
|
|
|
||
|
|
### 3. Code Formatting
|
||
|
|
|
||
|
|
```powershell
|
||
|
|
# Install black
|
||
|
|
pip install black
|
||
|
|
|
||
|
|
# Format code
|
||
|
|
black .
|
||
|
|
```
|
||
|
|
|
||
|
|
## Next Steps
|
||
|
|
|
||
|
|
1. **Test locally:** Run `example_usage.py` to verify setup
|
||
|
|
2. **Configure adapters:** Set up Slack or Telegram
|
||
|
|
3. **Customize:** Edit pulse checks, schedules, or skills
|
||
|
|
4. **Deploy:** Choose service option (NSSM, Task Scheduler, or Startup)
|
||
|
|
5. **Monitor:** Check logs and system resources
|
||
|
|
|
||
|
|
## Quick Reference
|
||
|
|
|
||
|
|
### Start Bot
|
||
|
|
```powershell
|
||
|
|
.\venv\Scripts\activate
|
||
|
|
python bot_runner.py
|
||
|
|
```
|
||
|
|
|
||
|
|
### Stop Bot
|
||
|
|
```
|
||
|
|
Ctrl + C
|
||
|
|
```
|
||
|
|
|
||
|
|
### View Logs
|
||
|
|
```powershell
|
||
|
|
type logs\bot.log
|
||
|
|
```
|
||
|
|
|
||
|
|
### Check Status
|
||
|
|
```powershell
|
||
|
|
python bot_runner.py --health
|
||
|
|
```
|
||
|
|
|
||
|
|
### Update Dependencies
|
||
|
|
```powershell
|
||
|
|
pip install -r requirements.txt --upgrade
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
**Need Help?**
|
||
|
|
- Check [main documentation](README.md)
|
||
|
|
- Review [troubleshooting](#troubleshooting) section
|
||
|
|
- Check Windows Event Viewer for service errors
|
||
|
|
- Run examples to isolate issues
|