diff --git a/.prettierrc b/.prettierrc index 0967ef4..9bf5683 100644 --- a/.prettierrc +++ b/.prettierrc @@ -1 +1,3 @@ -{} +{ + "plugins": ["prettier-plugin-organize-imports"] +} diff --git a/src/agent/GuideAgent.ts b/src/agent/GuideAgent.ts index 09b2fd6..0e7170d 100644 --- a/src/agent/GuideAgent.ts +++ b/src/agent/GuideAgent.ts @@ -1,11 +1,11 @@ -import { inject, injectable } from "tsyringe-neo"; import { type LanguageModelV1 } from "ai"; import Mustache from "mustache"; +import { inject, injectable } from "tsyringe-neo"; -import { trackGenerateText } from "./utils"; +import { Config } from "@app/config"; import { OpenAi } from "@app/container"; import system from "./prompts/guide.md"; -import { Config } from "@app/config"; +import { trackGenerateText } from "./utils"; @injectable() export class GuideAgent { diff --git a/src/agent/Npc.ts b/src/agent/Npc.ts index f034360..6a8d330 100644 --- a/src/agent/Npc.ts +++ b/src/agent/Npc.ts @@ -1,19 +1,10 @@ -import { inject, injectable } from "tsyringe-neo"; -import { z } from "zod"; -import { CoreMessage, CoreTool, tool, type LanguageModelV1 } from "ai"; +import { CoreTool, type LanguageModelV1 } from "ai"; import Mustache from "mustache"; -import { trackGenerateText } from "./utils"; -import { OpenAi } from "@app/container"; import { Config } from "@app/config"; -import system from "./prompts/jack.md"; import { City } from "@entity/City"; import { NpcName } from "@entity/Npc"; -import { - canChangeFavorability, - canGetFavorability, -} from "./tools/Favorability"; -import { canCloseValve } from "./tools/Valve"; +import { trackGenerateText } from "./utils"; export abstract class Npc { protected readonly maxSteps = 15; diff --git a/src/agent/NpcJack.ts b/src/agent/NpcJack.ts index fe2c8ec..3fc10a5 100644 --- a/src/agent/NpcJack.ts +++ b/src/agent/NpcJack.ts @@ -1,20 +1,17 @@ +import { CoreTool, type LanguageModelV1 } from "ai"; import { inject, injectable } from "tsyringe-neo"; -import { z } from "zod"; -import { CoreMessage, CoreTool, tool, type LanguageModelV1 } from "ai"; -import Mustache from "mustache"; -import { trackGenerateText } from "./utils"; -import { OpenAi } from "@app/container"; import { Config } from "@app/config"; -import system from "./prompts/jack.md"; +import { OpenAi } from "@app/container"; import { City } from "@entity/City"; import { NpcName } from "@entity/Npc"; +import { Npc } from "./Npc"; +import system from "./prompts/jack.md"; import { canChangeFavorability, canGetFavorability, } from "./tools/Favorability"; import { canCloseValve } from "./tools/Valve"; -import { Npc } from "./Npc"; @injectable() export class NpcJack extends Npc { diff --git a/src/agent/NpcMary.ts b/src/agent/NpcMary.ts index b73b82f..2b84c76 100644 --- a/src/agent/NpcMary.ts +++ b/src/agent/NpcMary.ts @@ -1,20 +1,17 @@ +import { CoreTool, type LanguageModelV1 } from "ai"; import { inject, injectable } from "tsyringe-neo"; -import { z } from "zod"; -import { CoreTool, tool, type LanguageModelV1 } from "ai"; -import Mustache from "mustache"; -import { trackGenerateText } from "./utils"; -import { OpenAi } from "@app/container"; import { Config } from "@app/config"; -import system from "./prompts/mary.md"; +import { OpenAi } from "@app/container"; import { City } from "@entity/City"; import { NpcName } from "@entity/Npc"; +import { Npc } from "./Npc"; +import system from "./prompts/mary.md"; import { canChangeFavorability, canGetFavorability, } from "./tools/Favorability"; import { canCallPeople } from "./tools/Skill"; -import { Npc } from "./Npc"; @injectable() export class NpcMary extends Npc { diff --git a/src/agent/NpcMatt.ts b/src/agent/NpcMatt.ts index 91c278f..31b97cc 100644 --- a/src/agent/NpcMatt.ts +++ b/src/agent/NpcMatt.ts @@ -1,20 +1,17 @@ +import { CoreTool, type LanguageModelV1 } from "ai"; import { inject, injectable } from "tsyringe-neo"; -import { z } from "zod"; -import { CoreTool, tool, type LanguageModelV1 } from "ai"; -import Mustache from "mustache"; -import { trackGenerateText } from "./utils"; -import { OpenAi } from "@app/container"; import { Config } from "@app/config"; -import system from "./prompts/matt.md"; +import { OpenAi } from "@app/container"; import { City } from "@entity/City"; import { NpcName } from "@entity/Npc"; +import { Npc } from "./Npc"; +import system from "./prompts/matt.md"; import { canChangeFavorability, canGetFavorability, } from "./tools/Favorability"; import { canEnableProtectMachine } from "./tools/Skill"; -import { Npc } from "./Npc"; @injectable() export class NpcMatt extends Npc { diff --git a/src/agent/tools/Favorability.ts b/src/agent/tools/Favorability.ts index 9907052..7624c92 100644 --- a/src/agent/tools/Favorability.ts +++ b/src/agent/tools/Favorability.ts @@ -1,5 +1,5 @@ -import { z } from "zod"; import { tool } from "ai"; +import { z } from "zod"; import { City } from "@entity/City"; import { NpcName } from "@entity/Npc"; diff --git a/src/agent/tools/Skill.ts b/src/agent/tools/Skill.ts index 5be4c85..cdbca50 100644 --- a/src/agent/tools/Skill.ts +++ b/src/agent/tools/Skill.ts @@ -1,5 +1,5 @@ -import { z } from "zod"; import { tool } from "ai"; +import { z } from "zod"; import { City } from "@entity/City"; diff --git a/src/agent/tools/Valve.ts b/src/agent/tools/Valve.ts index fbf4df9..18c16a8 100644 --- a/src/agent/tools/Valve.ts +++ b/src/agent/tools/Valve.ts @@ -1,5 +1,5 @@ -import { z } from "zod"; import { tool } from "ai"; +import { z } from "zod"; import { City } from "@entity/City"; diff --git a/src/app/container.ts b/src/app/container.ts index 422fd98..55ccfaa 100644 --- a/src/app/container.ts +++ b/src/app/container.ts @@ -1,6 +1,6 @@ +import { createOpenAI } from "@ai-sdk/openai"; import { SESv2Client } from "@aws-sdk/client-sesv2"; import { experimental_wrapLanguageModel as wrapLanguageModel } from "ai"; -import { createOpenAI } from "@ai-sdk/openai"; import { container, DependencyContainer, diff --git a/src/app/email.ts b/src/app/email.ts index 410576d..c4fac8f 100644 --- a/src/app/email.ts +++ b/src/app/email.ts @@ -1,4 +1,4 @@ -import { captureException, setUser, startSpan } from "@sentry/cloudflare"; +import { setUser, startSpan } from "@sentry/cloudflare"; import { getContainer } from "./container"; import { routes } from "./routes/email"; import { sha256 } from "./utils"; diff --git a/src/app/web.tsx b/src/app/web.tsx index 906e12d..e17eed8 100644 --- a/src/app/web.tsx +++ b/src/app/web.tsx @@ -1,11 +1,10 @@ import { Hono } from "hono"; import { cache } from "hono/cache"; -import { compress } from "hono/compress"; import { etag } from "hono/etag"; -import { getContainer } from "./container"; import { CityViewController } from "@controller/CityViewController"; import { Credit } from "@view/Credit"; +import { getContainer } from "./container"; const app = new Hono<{ Bindings: Env }>(); app.use(etag()); diff --git a/src/builder/EndMessageBuilder.ts b/src/builder/EndMessageBuilder.ts index e0c83cf..a39f77b 100644 --- a/src/builder/EndMessageBuilder.ts +++ b/src/builder/EndMessageBuilder.ts @@ -1,8 +1,8 @@ -import { inject, injectable } from "tsyringe-neo"; -import Mustache from "mustache"; -import endMessage from "./text/end.txt"; import { Config } from "@app/config"; import { City } from "@entity/City"; +import Mustache from "mustache"; +import { inject, injectable } from "tsyringe-neo"; +import endMessage from "./text/end.txt"; @injectable() export class EndMessageBuilder { diff --git a/src/builder/ProgressBuilder.ts b/src/builder/ProgressBuilder.ts index 5ba67ca..5dbdb29 100644 --- a/src/builder/ProgressBuilder.ts +++ b/src/builder/ProgressBuilder.ts @@ -1,7 +1,6 @@ -import { inject, injectable } from "tsyringe-neo"; -import Mustache from "mustache"; import { Config } from "@app/config"; import { City } from "@entity/City"; +import { inject, injectable } from "tsyringe-neo"; @injectable() export class ProgressBuilder { diff --git a/src/builder/WelcomeMessageBuilder.ts b/src/builder/WelcomeMessageBuilder.ts index 746e283..b21a8ad 100644 --- a/src/builder/WelcomeMessageBuilder.ts +++ b/src/builder/WelcomeMessageBuilder.ts @@ -1,7 +1,7 @@ -import { inject, injectable } from "tsyringe-neo"; +import { Config } from "@app/config"; import Mustache from "mustache"; +import { inject, injectable } from "tsyringe-neo"; import welcomeMessage from "./text/welcome.txt"; -import { Config } from "@app/config"; @injectable() export class WelcomeMessageBuilder { diff --git a/src/controller/CityViewController.tsx b/src/controller/CityViewController.tsx index 0ecb3e1..e3588c2 100644 --- a/src/controller/CityViewController.tsx +++ b/src/controller/CityViewController.tsx @@ -1,7 +1,7 @@ /** @jsxImportSource hono/jsx */ -import { inject, injectable } from "tsyringe-neo"; import { HtmlEscapedString } from "hono/utils/html"; +import { inject, injectable } from "tsyringe-neo"; import { KvCityRepository } from "@repository/KvCityRepository"; import { CitySnapshotUsecase } from "@usecase/CitySnapshotUsecase"; diff --git a/src/controller/DestroyController.ts b/src/controller/DestroyController.ts index c4b5537..1531718 100644 --- a/src/controller/DestroyController.ts +++ b/src/controller/DestroyController.ts @@ -1,10 +1,10 @@ import { inject, injectable } from "tsyringe-neo"; -import { EmailController, EmailParams } from "./EmailController"; import { SESv2Client } from "@aws-sdk/client-sesv2"; import { SesEmailPresenter } from "@presenter/SesEmailPresenter"; -import { DestroyUsecase } from "@usecase/DestroyUsecase"; import { KvCityRepository } from "@repository/KvCityRepository"; +import { DestroyUsecase } from "@usecase/DestroyUsecase"; +import { EmailController, EmailParams } from "./EmailController"; @injectable() export class DestroyController extends EmailController { diff --git a/src/controller/NewGameController.ts b/src/controller/NewGameController.ts index 196fc7b..eb64110 100644 --- a/src/controller/NewGameController.ts +++ b/src/controller/NewGameController.ts @@ -1,13 +1,13 @@ import { inject, injectable } from "tsyringe-neo"; -import { EmailController, EmailParams } from "./EmailController"; -import { SesEmailPresenter } from "@presenter/SesEmailPresenter"; -import { SESv2Client } from "@aws-sdk/client-sesv2"; -import { GuideUsecase } from "@usecase/GuideUsecase"; import { GuideAgent } from "@agent/GuideAgent"; -import { KvCityRepository } from "@repository/KvCityRepository"; -import { WelcomeMessageBuilder } from "@builder/WelcomeMessageBuilder"; +import { SESv2Client } from "@aws-sdk/client-sesv2"; import { EndMessageBuilder } from "@builder/EndMessageBuilder"; +import { WelcomeMessageBuilder } from "@builder/WelcomeMessageBuilder"; +import { SesEmailPresenter } from "@presenter/SesEmailPresenter"; +import { KvCityRepository } from "@repository/KvCityRepository"; +import { GuideUsecase } from "@usecase/GuideUsecase"; +import { EmailController, EmailParams } from "./EmailController"; @injectable() export class NewGameController extends EmailController { diff --git a/src/controller/NpcController.ts b/src/controller/NpcController.ts index f16328b..2362cc1 100644 --- a/src/controller/NpcController.ts +++ b/src/controller/NpcController.ts @@ -1,13 +1,11 @@ -import { inject, injectable } from "tsyringe-neo"; - -import { EmailController, EmailParams } from "./EmailController"; import { SESv2Client } from "@aws-sdk/client-sesv2"; -import { SesEmailPresenter } from "@presenter/SesEmailPresenter"; -import { KvCityRepository } from "@repository/KvCityRepository"; -import { TaklWithNpcUsecase } from "@usecase/TalkWithNpcUsecase"; import { EndMessageBuilder } from "@builder/EndMessageBuilder"; import { ProgressBuilder } from "@builder/ProgressBuilder"; +import { SesEmailPresenter } from "@presenter/SesEmailPresenter"; +import { KvCityRepository } from "@repository/KvCityRepository"; import { Npc } from "@usecase/interface"; +import { TaklWithNpcUsecase } from "@usecase/TalkWithNpcUsecase"; +import { EmailController, EmailParams } from "./EmailController"; export abstract class NpcController extends EmailController { constructor( diff --git a/src/controller/NpcJackController.ts b/src/controller/NpcJackController.ts index 9354086..4cf4405 100644 --- a/src/controller/NpcJackController.ts +++ b/src/controller/NpcJackController.ts @@ -1,14 +1,12 @@ import { inject, injectable } from "tsyringe-neo"; -import { NpcController } from "./NpcController"; -import { SESv2Client } from "@aws-sdk/client-sesv2"; -import { SesEmailPresenter } from "@presenter/SesEmailPresenter"; -import { KvCityRepository } from "@repository/KvCityRepository"; -import { TaklWithNpcUsecase } from "@usecase/TalkWithNpcUsecase"; import { NpcJack } from "@agent/NpcJack"; +import { SESv2Client } from "@aws-sdk/client-sesv2"; import { EndMessageBuilder } from "@builder/EndMessageBuilder"; import { ProgressBuilder } from "@builder/ProgressBuilder"; import { NpcName } from "@entity/Npc"; +import { KvCityRepository } from "@repository/KvCityRepository"; +import { NpcController } from "./NpcController"; @injectable() export class NpcJackController extends NpcController { diff --git a/src/controller/NpcMaryController.ts b/src/controller/NpcMaryController.ts index 322689d..4d0eefb 100644 --- a/src/controller/NpcMaryController.ts +++ b/src/controller/NpcMaryController.ts @@ -1,14 +1,12 @@ import { inject, injectable } from "tsyringe-neo"; -import { NpcController } from "./NpcController"; +import { NpcMary } from "@agent/NpcMary"; import { SESv2Client } from "@aws-sdk/client-sesv2"; -import { SesEmailPresenter } from "@presenter/SesEmailPresenter"; -import { KvCityRepository } from "@repository/KvCityRepository"; -import { TaklWithNpcUsecase } from "@usecase/TalkWithNpcUsecase"; import { EndMessageBuilder } from "@builder/EndMessageBuilder"; import { ProgressBuilder } from "@builder/ProgressBuilder"; import { NpcName } from "@entity/Npc"; -import { NpcMary } from "@agent/NpcMary"; +import { KvCityRepository } from "@repository/KvCityRepository"; +import { NpcController } from "./NpcController"; @injectable() export class NpcMaryController extends NpcController { diff --git a/src/controller/NpcMattController.ts b/src/controller/NpcMattController.ts index 69ef9aa..a6f3b03 100644 --- a/src/controller/NpcMattController.ts +++ b/src/controller/NpcMattController.ts @@ -1,15 +1,12 @@ import { inject, injectable } from "tsyringe-neo"; -import { NpcController } from "./NpcController"; +import { NpcMatt } from "@agent/NpcMatt"; import { SESv2Client } from "@aws-sdk/client-sesv2"; -import { SesEmailPresenter } from "@presenter/SesEmailPresenter"; -import { KvCityRepository } from "@repository/KvCityRepository"; -import { TaklWithNpcUsecase } from "@usecase/TalkWithNpcUsecase"; import { EndMessageBuilder } from "@builder/EndMessageBuilder"; import { ProgressBuilder } from "@builder/ProgressBuilder"; import { NpcName } from "@entity/Npc"; -import { NpcMary } from "@agent/NpcMary"; -import { NpcMatt } from "@agent/NpcMatt"; +import { KvCityRepository } from "@repository/KvCityRepository"; +import { NpcController } from "./NpcController"; @injectable() export class NpcMattController extends NpcController { diff --git a/src/entity/City.ts b/src/entity/City.ts index 4ba7a02..e754792 100644 --- a/src/entity/City.ts +++ b/src/entity/City.ts @@ -1,13 +1,11 @@ -import { handle } from "hono/cloudflare-pages"; import { + CallPeopleEvent, CityEvent, - CityEventType, CityInitializedEvent, + EnableProtectedMachineEvent, FavorabilityChangedEvent, RefreshEvent, ValveClosedEvent, - EnableProtectedMachineEvent, - CallPeopleEvent, } from "./CityEvent"; import { Npc, NpcName } from "./Npc"; diff --git a/src/index.ts b/src/index.ts index 0f5a89d..b0786c8 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,8 +1,8 @@ import "reflect-metadata"; -import { withSentry } from "./vendor/sentry"; import { email } from "@app/email"; import app from "@app/web"; +import { withSentry } from "./vendor/sentry"; export default withSentry( (env) => ({ diff --git a/src/repository/KvCityRepository.ts b/src/repository/KvCityRepository.ts index 7434103..777fb90 100644 --- a/src/repository/KvCityRepository.ts +++ b/src/repository/KvCityRepository.ts @@ -1,6 +1,6 @@ -import { type KVNamespace } from "@cloudflare/workers-types"; -import { inject, injectable } from "tsyringe-neo"; +import { Config } from "@app/config"; import { CloudFlareKv } from "@app/container"; +import { type KVNamespace } from "@cloudflare/workers-types"; import { City } from "@entity/City"; import { CallPeopleEvent, @@ -12,9 +12,9 @@ import { RefreshEvent, ValveClosedEvent, } from "@entity/CityEvent"; -import { addBreadcrumb } from "@sentry/cloudflare"; -import { Config } from "@app/config"; import { NpcName } from "@entity/Npc"; +import { addBreadcrumb } from "@sentry/cloudflare"; +import { inject, injectable } from "tsyringe-neo"; type EventSchema = { type: string; diff --git a/src/usecase/GuideUsecase.ts b/src/usecase/GuideUsecase.ts index cf9b394..2abaf13 100644 --- a/src/usecase/GuideUsecase.ts +++ b/src/usecase/GuideUsecase.ts @@ -1,10 +1,10 @@ import { City } from "@entity/City"; import { - EmailPresenter, - CityRepository, Agent, - WelcomeMessageBuilder, + CityRepository, + EmailPresenter, EndMessageBuilder, + WelcomeMessageBuilder, } from "./interface"; export class GuideUsecase { diff --git a/src/view/Building.tsx b/src/view/Building.tsx index d740ad5..fc226aa 100644 --- a/src/view/Building.tsx +++ b/src/view/Building.tsx @@ -1,7 +1,7 @@ /** @jsxImportSource hono/jsx */ -import { FC } from "hono/jsx"; import { css } from "hono/css"; +import { FC } from "hono/jsx"; const caculateDamaged = function (damage: number) { if (damage < 30) return "_0.png"; diff --git a/src/view/City.tsx b/src/view/City.tsx index c61cf06..67dca3e 100644 --- a/src/view/City.tsx +++ b/src/view/City.tsx @@ -3,10 +3,10 @@ import { FC } from "hono/jsx"; import { type CitySnapshot } from "@usecase/CitySnapshotUsecase"; -import { Layout } from "./Layout"; +import { css } from "hono/css"; import { Building } from "./Building"; +import { Layout } from "./Layout"; import { Npc } from "./Npc"; -import { css } from "hono/css"; const container = css` width: 768px; diff --git a/src/view/Credit.tsx b/src/view/Credit.tsx index b132015..6aee0bd 100644 --- a/src/view/Credit.tsx +++ b/src/view/Credit.tsx @@ -1,7 +1,7 @@ /** @jsxImportSource hono/jsx */ -import { FC } from "hono/jsx"; import { Style, css } from "hono/css"; +import { FC } from "hono/jsx"; export const Credit: FC = () => { const container = css` diff --git a/src/view/Layout.tsx b/src/view/Layout.tsx index 33155c9..d1aab58 100644 --- a/src/view/Layout.tsx +++ b/src/view/Layout.tsx @@ -1,7 +1,7 @@ /** @jsxImportSource hono/jsx */ -import { FC } from "hono/jsx"; import { css, Style } from "hono/css"; +import { FC } from "hono/jsx"; const globalClass = css` :-hono-global { diff --git a/src/view/Npc.tsx b/src/view/Npc.tsx index 2edf57c..252eb15 100644 --- a/src/view/Npc.tsx +++ b/src/view/Npc.tsx @@ -1,7 +1,7 @@ /** @jsxImportSource hono/jsx */ -import { FC } from "hono/jsx"; import { css } from "hono/css"; +import { FC } from "hono/jsx"; const caculateFavorability = function (favorability: number) { if (favorability <= 30) return "_mad.png"; diff --git a/test/index.spec.ts b/test/index.spec.ts index 3af06b4..8b3b8fb 100644 --- a/test/index.spec.ts +++ b/test/index.spec.ts @@ -1,11 +1,11 @@ // test/index.spec.ts import { - env, createExecutionContext, - waitOnExecutionContext, + env, SELF, + waitOnExecutionContext, } from "cloudflare:test"; -import { describe, it, expect } from "vitest"; +import { describe, expect, it } from "vitest"; import worker from "../src/index"; // For now, you'll need to do something like this to get a correctly-typed