beadboard/.agents/skills/agent-browser/references/session-management.md

205 lines
5.1 KiB
Markdown
Raw Normal View History

# Session Management
Browser sessions for state persistence and parallel browsing.
**Related**: [authentication.md](authentication.md) for login patterns, [SKILL.md](../SKILL.md) for quick start.
## Contents
- [How Sessions Work](#how-sessions-work)
- [Starting a Session](#starting-a-session)
- [Using Session IDs](#using-session-ids)
- [Session State](#session-state)
- [Parallel Sessions](#parallel-sessions)
- [Session Cleanup](#session-cleanup)
- [Best Practices](#best-practices)
## How Sessions Work
Each session maintains an isolated browser context with:
- Cookies
- LocalStorage / SessionStorage
- Browser history
- Page state
- Video recording (if enabled)
Sessions persist across function calls, allowing multi-step workflows.
## Starting a Session
Use `--session new` to create a fresh session:
```bash
RESULT=$(infsh app run agent-browser --function open --session new --input '{
"url": "https://example.com"
}')
SESSION_ID=$(echo $RESULT | jq -r '.session_id')
echo "Session: $SESSION_ID"
```
## Using Session IDs
All subsequent calls use the session ID:
```bash
# Navigate
infsh app run agent-browser --function open --session $SESSION_ID --input '{
"url": "https://example.com/page2"
}'
# Interact
infsh app run agent-browser --function interact --session $SESSION_ID --input '{
"action": "click", "ref": "@e1"
}'
# Screenshot
infsh app run agent-browser --function screenshot --session $SESSION_ID --input '{}'
# Close
infsh app run agent-browser --function close --session $SESSION_ID --input '{}'
```
## Session State
### What Persists
Within a session, these persist across calls:
- Cookies (login state, preferences)
- LocalStorage and SessionStorage
- IndexedDB data
- Browser history (for back/forward)
- Current page and DOM state
- Video recording buffer
### What Doesn't Persist
- Sessions don't persist across server restarts
- No automatic session recovery
- Video is only available until close is called
## Parallel Sessions
Run multiple independent sessions simultaneously:
```bash
#!/bin/bash
# Scrape multiple sites in parallel
# Start sessions
RESULT1=$(infsh app run agent-browser --function open --session new --input '{
"url": "https://site1.com"
}')
SESSION1=$(echo $RESULT1 | jq -r '.session_id')
RESULT2=$(infsh app run agent-browser --function open --session new --input '{
"url": "https://site2.com"
}')
SESSION2=$(echo $RESULT2 | jq -r '.session_id')
# Work with each session independently
infsh app run agent-browser --function screenshot --session $SESSION1 --input '{}' &
infsh app run agent-browser --function screenshot --session $SESSION2 --input '{}' &
wait
# Clean up both
infsh app run agent-browser --function close --session $SESSION1 --input '{}'
infsh app run agent-browser --function close --session $SESSION2 --input '{}'
```
### Use Cases for Parallel Sessions
1. **A/B Testing** - Compare different pages or user experiences
2. **Multi-site scraping** - Gather data from multiple sources
3. **Load testing** - Simulate multiple users
4. **Cross-region testing** - Use different proxies per session
## Session Cleanup
Always close sessions when done:
```bash
infsh app run agent-browser --function close --session $SESSION_ID --input '{}'
```
**Why close matters:**
- Releases server resources
- Returns video recording (if enabled)
- Prevents resource leaks
### Error Handling
```bash
#!/bin/bash
set -e
cleanup() {
infsh app run agent-browser --function close --session $SESSION_ID --input '{}' 2>/dev/null || true
}
trap cleanup EXIT
SESSION_ID=$(infsh app run agent-browser --function open --session new --input '{
"url": "https://example.com"
}' | jq -r '.session_id')
# ... your automation ...
# cleanup runs automatically on exit
```
## Best Practices
### 1. Store Session IDs
```bash
# Good: Store for reuse
SESSION_ID=$(... | jq -r '.session_id')
infsh ... --session $SESSION_ID ...
# Bad: Parse every time
infsh ... --session $(... | jq -r '.session_id') ...
```
### 2. Close Sessions Promptly
Don't leave sessions open longer than needed. Server resources are limited.
### 3. Use Meaningful Variable Names
```bash
# Good: Clear purpose
LOGIN_SESSION=$(...)
SCRAPE_SESSION=$(...)
# Bad: Generic names
S1=$(...)
S2=$(...)
```
### 4. Handle Session Expiry
Sessions may expire after extended inactivity:
```bash
# Check if session is still valid
RESULT=$(infsh app run agent-browser --function snapshot --session $SESSION_ID --input '{}' 2>&1)
if echo "$RESULT" | grep -q "session not found"; then
echo "Session expired, starting new one"
SESSION_ID=$(infsh app run agent-browser --function open --session new --input '{
"url": "https://example.com"
}' | jq -r '.session_id')
fi
```
### 5. One Task Per Session
For clarity, use one session per logical task:
```bash
# Good: Separate sessions for separate tasks
LOGIN_SESSION=$(...) # Handle login
SCRAPE_SESSION=$(...) # Handle scraping
# Okay for related tasks: One session for a workflow
SESSION=$(...)
# login -> navigate -> extract -> close
```