✅ What's Working: - WebSocket connections established (patched worker to intercept upgrades) - Real-time event streaming: Agent → DO → Browser - Terminal panel showing live command execution - Agent chat panel showing LLM thoughts - Full infrastructure: UI → API → DO → SSH Proxy → LangGraph Agent 🔧 Key Changes: - Created standalone DO worker at workers/bandit-agent-do/ - Deployed DO as separate Worker (bandit-agent-do) - Updated wrangler.jsonc to reference external DO via script_name - Modified patch-worker.js to intercept WS upgrades before Next.js - Added __name polyfill to fix esbuild helper - Created pnpm workspace config for monorepo 📝 Architecture: - Frontend (Next.js) → Cloudflare Worker - Worker intercepts /api/agent/*/ws → forwards to DO - DO (bandit-agent-do) → manages WebSocket connections - DO → calls SSH Proxy API - SSH Proxy → runs LangGraph agent → executes SSH commands - Events stream back: SSH Proxy → DO → WebSocket → UI 🐛 Known Issue: - Agent logic needs refinement (not parsing SSH output correctly) - But core infrastructure is 100% functional! This resolves all WebSocket and real-time streaming issues.
70 lines
1.6 KiB
JSON
70 lines
1.6 KiB
JSON
/**
|
|
* For more details on how to configure Wrangler, refer to:
|
|
* https://developers.cloudflare.com/workers/wrangler/configuration/
|
|
*/
|
|
{
|
|
"$schema": "node_modules/wrangler/config-schema.json",
|
|
"name": "bandit-runner-app",
|
|
"main": ".open-next/worker.js",
|
|
"compatibility_date": "2025-03-01",
|
|
"compatibility_flags": [
|
|
"nodejs_compat",
|
|
"global_fetch_strictly_public"
|
|
],
|
|
"assets": {
|
|
"binding": "ASSETS",
|
|
"directory": ".open-next/assets"
|
|
},
|
|
"observability": {
|
|
"enabled": true
|
|
},
|
|
/**
|
|
* Durable Objects - External Worker
|
|
* https://developers.cloudflare.com/durable-objects/
|
|
* References the standalone DO worker to avoid bundling issues
|
|
*/
|
|
"durable_objects": {
|
|
"bindings": [
|
|
{
|
|
"name": "BANDIT_AGENT",
|
|
"class_name": "BanditAgentDO",
|
|
"script_name": "bandit-agent-do"
|
|
}
|
|
]
|
|
},
|
|
/**
|
|
* Environment Variables
|
|
* https://developers.cloudflare.com/workers/wrangler/configuration/#environment-variables
|
|
*/
|
|
"vars": {
|
|
"SSH_PROXY_URL": "https://bandit-ssh-proxy.fly.dev",
|
|
"MAX_RUN_DURATION_MINUTES": "60",
|
|
"MAX_RETRIES_PER_LEVEL": "3"
|
|
}
|
|
/**
|
|
* Secrets (set via: wrangler secret put OPENROUTER_API_KEY)
|
|
* - OPENROUTER_API_KEY
|
|
* - ENCRYPTION_KEY
|
|
*/
|
|
/**
|
|
* D1 Database (uncomment when database is created)
|
|
* wrangler d1 create bandit-runs
|
|
*/
|
|
// "d1_databases": [
|
|
// {
|
|
// "binding": "DB",
|
|
// "database_name": "bandit-runs",
|
|
// "database_id": "YOUR_DATABASE_ID"
|
|
// }
|
|
// ],
|
|
/**
|
|
* R2 Bucket (uncomment when bucket is created)
|
|
* wrangler r2 bucket create bandit-logs
|
|
*/
|
|
// "r2_buckets": [
|
|
// {
|
|
// "binding": "LOGS",
|
|
// "bucket_name": "bandit-logs"
|
|
// }
|
|
// ]
|
|
} |