flue-eve

Cloudflare Worker

flue-eve ships with a Cloudflare Worker entry point that handles Eve HTTP routes with KV or Durable Object persistence.

Minimal setup

import { createEveWorkerApp } from '@flue-eve/compat-server/worker'

export default createEveWorkerApp({
  agentName: 'assistant',
  persistence: {
    type: 'kv',
    kvNamespace: MY_KV,
  },
})

With Durable Object journal

For larger journals or multi-region replication, use Durable Objects:

export { EveSessionJournalDO } from '@flue-eve/compat-server/worker'

import { createEveWorkerApp } from '@flue-eve/compat-server/worker'

export default createEveWorkerApp({
  agentName: 'assistant',
  persistence: {
    type: 'durable-object',
    doNamespace: EVE_JOURNAL,
  },
})

Add the DO binding in wrangler.jsonc:

{
  "durable_objects": {
    "bindings": [
      {
        "name": "EVE_JOURNAL",
        "class_name": "EveSessionJournalDO"
      }
    ]
  },
  "migrations": [
    {
      "tag": "v1",
      "new_classes": ["EveSessionJournalDO"]
    }
  ]
}

Admission on Workers

By default, the Worker uses mock admission — deterministic responses without an LLM. For real agent execution, set up Service Binding:

  1. Deploy a Flue agent as a separate Worker
  2. Add a Service Binding to your EVE Worker's wrangler.jsonc:
{
  "services": [
    { "binding": "FLUE_AGENT", "service": "my-flue-agent" }
  ]
}
  1. Set the binding name in your Worker:
export default createEveWorkerApp({
  agentName: 'assistant',
  flueAgentBinding: 'FLUE_AGENT',
})

The Worker will route admission requests through the Service Binding when available, falling back to mock admission if not configured.

Persistence types

TypeBest forSetup
kvSmall journals, simple setupBind a KV namespace to your Worker
durable-objectLarge journals, multi-regionBind a DO namespace + migration
(none)Dev, ephemeral sessionsNo persistence — default

Without persistence, sessions are lost on Worker restarts or eviction.

Full example

// src/worker.ts
export { EveSessionJournalDO } from '@flue-eve/compat-server/worker'

import { createEveWorkerApp } from '@flue-eve/compat-server/worker'

export default createEveWorkerApp({
  agentName: 'assistant',
  persistence: {
    type: 'durable-object',
    doNamespace: EVE_JOURNAL,
  },
  flueAgentBinding: 'FLUE_AGENT',
  auth: 'token',
  authToken: 'my-secret-token',
})
// wrangler.jsonc
{
  "name": "my-eve-worker",
  "main": "src/worker.ts",
  "kv_namespaces": [
    { "binding": "MY_KV", "id": "..." }
  ],
  "durable_objects": {
    "bindings": [
      { "name": "EVE_JOURNAL", "class_name": "EveSessionJournalDO" }
    ]
  },
  "services": [
    { "binding": "FLUE_AGENT", "service": "my-flue-agent" }
  ]
}

See Cloudflare deployment for detailed setup, authentication, and troubleshooting.