# Durable Object Setup Issue & Solutions

## The Problem

OpenNext builds for Cloudflare Workers don't easily support Durable Objects in local development because:
1. The build system generates a bundled worker that doesn't export the DO
2. LangGraph.js has many dependencies that complicate bundling
3. Local DO bindings require the class to be exported from the worker

## Current Status

- ✅ **UI Works Perfectly** - All frontend components functional
- ✅ **API Routes Exist** - `/api/agent/[runId]/start` etc. all created
- ✅ **Backend Code Complete** - LangGraph agent, tools, everything ready
- ❌ **Durable Object Export** - Not working in local dev with OpenNext

## Solutions

### Option 1: Deploy to Production (Recommended)

The Durable Object will work perfectly when deployed to Cloudflare:

```bash
cd bandit-runner-app

# Deploy to Cloudflare
wrangler deploy

# Set secrets
wrangler secret put OPENROUTER_API_KEY
# Enter your key when prompted

# Test on:
# https://bandit-runner-app.YOUR-ACCOUNT.workers.dev
```

**Why this works:**
- Cloudflare's production environment properly handles DO exports
- OpenNext builds work correctly in production
- All bindings are available

### Option 2: Mock the Durable Object (For Local Dev)

Create a mock DO that returns simulated responses:

```typescript
// In API routes, add:
if (process.env.NODE_ENV === 'development') {
  // Return mock response
  return NextResponse.json({
    success: true,
    runId,
    state: {
      status: 'running',
      currentLevel: 0,
      thoughts: ['[Mock] Agent would start here']
    }
  })
}
```

### Option 3: Separate DO Worker

Create the DO in a separate wrangler project:

```bash
# Create new worker project
mkdir ../bandit-agent-do
cd ../bandit-agent-do

# Create wrangler.toml
cat > wrangler.toml << EOF
name = "bandit-agent-do"
main = "src/index.ts"
compatibility_date = "2025-01-01"

[[durable_objects.bindings]]
name = "BANDIT_AGENT"
class_name = "BanditAgentDO"
EOF

# Copy DO code
cp ../bandit-runner-app/src/lib/durable-objects/BanditAgentDO.ts src/index.ts

# Deploy
wrangler deploy
```

Then update main app's wrangler.jsonc to use remote DO.

### Option 4: Use wrangler dev with custom build

Skip OpenNext for local dev:

```bash
# Build Next.js normally
pnpm build

# Run with wrangler directly (not via OpenNext)
wrangler dev --local

# Access at http://localhost:8787
```

## Recommended Path Forward

**For Development & Testing:**
1. UI already works - test all components locally
2. Test SSH proxy integration separately
3. Mock the agent responses for UI development

**For Real Testing:**
1. Deploy to Cloudflare production
2. Set secrets properly
3. Test full integration with real LLMs

**Current Working Features:**
- ✅ Beautiful retro terminal UI
- ✅ Control panel with model selection
- ✅ WebSocket client code
- ✅ All API route handlers
- ✅ LangGraph state machine
- ✅ SSH tool wrappers
- ✅ Error handling
- ✅ Cost tracking

**What Needs Production:**
- ⏸️ Actual Durable Object runtime
- ⏸️ Real WebSocket connections
- ⏸️ LangGraph execution

## Quick Deploy Guide

```bash
cd bandit-runner-app

# 1. Deploy
wrangler deploy

# 2. Set API key
wrangler secret put OPENROUTER_API_KEY
# Paste: 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

# 3. Test
# Open: https://bandit-runner-app.YOUR-SUBDOMAIN.workers.dev
# Click START
# Watch it work! 🎉
```

## Why Deploy is Better

1. **Zero Configuration** - Works out of the box
2. **Real Environment** - Actual Workers runtime
3. **Free Tier** - Cloudflare Free plan includes DOs
4. **Fast** - Edge deployment, global CDN
5. **No Build Complexity** - OpenNext handles everything

## Next Steps

**Choose your path:**

**A) Want to see it working NOW?**
→ Deploy to Cloudflare (5 minutes)

**B) Want to develop UI locally?**
→ Use `pnpm dev` and test components
→ Mock agent responses

**C) Want full local development?**
→ Create separate DO worker project
→ Use service bindings

**D) Want production-ready?**
→ Deploy to Cloudflare
→ Set up D1 database
→ Configure R2 storage
→ Add monitoring

I recommend **Option A** - deploy to production and test the full system there. Local development with OpenNext + DOs is complex, but production deployment is simple and everything works!

