1/// <reference types="@cloudflare/workers-types" />2/**3 * Single Worker: static site (assets), REST /api/*, stateless MCP at /mcp,4 * daily TTL sweep cron. Routes in run_worker_first always reach this code.5 */6import { corsPreflight, handleApi } from './router';7import { backfillR2, retryDeadPublicSims, runSweep } from './sweep';8import { runLadder } from './ladder';9import { syncModels } from './models-sync';10import type { Env } from './env';11import { createRuntimeValidator } from './runtime-validation';12import { createMcpFetchHandler, handleLlmsTxt } from './mcp/handler';13import { docsText } from './mcp/docs';14import { authenticateBearer } from './auth';15import { createService } from './service';1617export type { Env } from './env';18// Integration surface for the MCP transport (worker/src/mcp/**):19export { authenticate, authenticateBearer } from './auth';20export { createService, ServiceError } from './service';21export type { ServiceDeps } from './service';22export { baseStages, createValidator } from './validate';2324// Real QuickJS compile + engine smoke test (wasm module lazily created on25// first submit and reused across requests in this isolate).26const validate = createRuntimeValidator();2728export default {29 async fetch(request: Request, env: Env, ctx: ExecutionContext): Promise<Response> {30 const { pathname } = new URL(request.url);3132 if (pathname === '/mcp') {33 if (request.method === 'OPTIONS') return corsPreflight();34 const service = createService(env, {35 validate,36 origin: new URL(request.url).origin,37 background: (work) => ctx.waitUntil(work),38 });39 const mcpFetch = createMcpFetchHandler({40 service,41 authenticate: (req) => authenticateBearer(req, env),42 docsText,43 });44 return mcpFetch(request, env, ctx);45 }46 if (pathname === '/llms.txt') {47 return handleLlmsTxt(docsText);48 }49 if (pathname.startsWith('/api/')) {50 return handleApi(request, env, ctx, { validate, background: (work) => ctx.waitUntil(work) });51 }52 return env.ASSETS.fetch(request);53 },5455 async scheduled(_event: ScheduledController, env: Env, _ctx: ExecutionContext): Promise<void> {56 const swept = await runSweep(env);57 console.log(JSON.stringify({ event: 'sweep', ...swept }));58 // Backfill, model catalog + nightly ladder are best-effort: never fail the sweep.59 try {60 const moved = await backfillR2(env);61 if (moved.sources + moved.metrics > 0) {62 console.log(JSON.stringify({ event: 'r2_backfill', ...moved }));63 }64 } catch (err) {65 console.warn('r2 backfill failed:', err);66 }67 try {68 const models = await syncModels(env);69 console.log(JSON.stringify({ event: 'models_sync', models }));70 } catch (err) {71 console.warn('models sync failed:', err);72 }73 try {74 const retried = await retryDeadPublicSims(env);75 if (retried > 0) console.log(JSON.stringify({ event: 'sim_retry', retried }));76 } catch (err) {77 console.warn('dead-sim retry failed:', err);78 }79 try {80 await runLadder(env);81 } catch (err) {82 console.warn('ladder run failed:', err);83 }84 },85} satisfies ExportedHandler<Env>;