返回 CodeWhale
worker.ts
根目录 / web / worker.ts
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
59 lines TYPESCRIPT