| 1 | import { DurableObject } from "cloudflare:workers"; |
| 2 | import handler from "./.open-next/worker.js"; |
| 3 | import { |
| 4 | runCurate, |
| 5 | runTriage, |
| 6 | runPrReview, |
| 7 | runStale, |
| 8 | runDupes, |
| 9 | runDigest, |
| 10 | type AgentEnv, |
| 11 | } from "./lib/community-agent-tasks"; |
| 12 | import { runFactsDrift } from "./lib/facts-drift"; |
| 13 | import { runLinkCheck, runSemanticDrift } from "./lib/content-watch"; |
| 14 | import { fetchWithStaticInstaller } from "./lib/static-installer"; |
| 15 | import { applyDraftLock, type DraftLockRequest } from "./lib/draft-claim-lock"; |
| 16 | |
| 17 | /** |
| 18 | * Exclusive claim on one community-agent draft (binding DRAFT_CLAIM_LOCK, one |
| 19 | * instance per draft via idFromName). OpenNext's custom-worker entry exports |
| 20 | * extra Durable Object classes from here; see lib/draft-claim-lock.ts. |
| 21 | */ |
| 22 | export class DraftClaimLock extends DurableObject { |
| 23 | async act(req: DraftLockRequest) { |
| 24 | return applyDraftLock(this.ctx.storage, Date.now(), req); |
| 25 | } |
| 26 | } |
| 27 | |
| 28 | export default { |
| 29 | fetch(request, env, ctx) { |
| 30 | return fetchWithStaticInstaller( |
| 31 | request, |
| 32 | env, |
| 33 | ctx, |
| 34 | (nextRequest, nextEnv, nextCtx) => handler.fetch(nextRequest, nextEnv, nextCtx), |
| 35 | ); |
| 36 | }, |
| 37 | async scheduled(event: ScheduledEvent, env: Record<string, unknown>, ctx: ExecutionContext) { |
| 38 | const expr = event.cron; |
| 39 | ctx.waitUntil((async () => { |
| 40 | const agentEnv = env as unknown as AgentEnv; |
| 41 | if (expr === "0 */6 * * *") { |
| 42 | await runCurate(agentEnv); |
| 43 | await runFactsDrift(agentEnv); |
| 44 | } |
| 45 | else if (expr === "*/30 * * * *") { |
| 46 | await runTriage(agentEnv); |
| 47 | await runPrReview(agentEnv); |
| 48 | } |
| 49 | else if (expr === "0 0 * * *") { |
| 50 | await runStale(agentEnv); |
| 51 | await runDupes(agentEnv); |
| 52 | await runLinkCheck(agentEnv); |
| 53 | await runSemanticDrift(agentEnv); |
| 54 | } |
| 55 | else if (expr === "0 9 * * 1") await runDigest(agentEnv); |
| 56 | })()); |
| 57 | }, |
| 58 | } satisfies ExportedHandler; |
| 59 |