1import * as Cloudflare from "alchemy/Cloudflare";
2import * as Effect from "effect/Effect";
3import * as Layer from "effect/Layer";
4import { DevBox } from "./DevBox.ts";
5import { ReleaseBlogger } from "./ReleaseBlogger.ts";
6import { EvalLive } from "./tools/Eval.ts";
7import { WriteFileDevBox } from "./tools/Fs.ts";
8import { GrepLive } from "./tools/Grep.ts";
9import { SqlDurableObjectLive } from "./tools/Sql.ts";
10
11export class ReleaseVersion extends Cloudflare.DurableObject<ReleaseVersion>()(
12 "ReleaseBlogger",
13 Effect.gen(function* () {
14 const blogger = yield* ReleaseBlogger;
15
16 return Effect.gen(function* () {
17 return {
18 generateBlog: Effect.fn(function* (request: { input: any }) {
19 yield* blogger.send(request);
20 }),
21 };
22 });
23 }).pipe(
24 Effect.provide(
25 SqlDurableObjectLive.pipe(
26 Layer.provideMerge(WriteFileDevBox),
27 Layer.provideMerge(GrepLive),
28 Layer.provideMerge(EvalLive),
29 Layer.provideMerge(Cloudflare.AI.layerChatDurableObject),
30 Layer.provideMerge(
31 Cloudflare.Containers.layer(DevBox, {
32 enableInternet: true,
33 }),
34 ),
35 ),
36 ),
37 ),
38) {}