import { Container, getContainer } from "@cloudflare/containers"; interface Env { AGENT_WORKER: DurableObjectNamespace; AGENT_API_URL: string; AGENT_ROUTER_URL: string; AGENT_MODEL?: string; AGENT_WORKER_SECRET: string; TEMPORAL_ADDRESS: string; TEMPORAL_NAMESPACE: string; TEMPORAL_API_KEY: string; } const INSTANCES = ["agent-worker-0"]; /** The Temporal worker: one long-running process, kept up by the cron below. */ export class AgentWorker extends Container { defaultPort = 8080; sleepAfter = "1h"; enableInternet = true; constructor(ctx: DurableObjectState<{}>, env: Env) { super(ctx, env); this.envVars = { AGENT_API_URL: env.AGENT_API_URL, AGENT_ROUTER_URL: env.AGENT_ROUTER_URL, ...(env.AGENT_MODEL ? { AGENT_MODEL: env.AGENT_MODEL } : {}), AGENT_WORKER_SECRET: env.AGENT_WORKER_SECRET, TEMPORAL_ADDRESS: env.TEMPORAL_ADDRESS, TEMPORAL_NAMESPACE: env.TEMPORAL_NAMESPACE, TEMPORAL_API_KEY: env.TEMPORAL_API_KEY, }; } override async onActivityExpired(): Promise { this.renewActivityTimeout(); } } export default { async scheduled(_controller: ScheduledController, env: Env): Promise { await Promise.all( INSTANCES.map((name) => getContainer(env.AGENT_WORKER, name).startAndWaitForPorts(), ), ); }, async fetch(): Promise { return new Response("Not found", { status: 404 }); }, };