summaryrefslogtreecommitdiffhomepage
path: root/packages/api/src/app.ts
diff options
context:
space:
mode:
Diffstat (limited to 'packages/api/src/app.ts')
-rw-r--r--packages/api/src/app.ts46
1 files changed, 46 insertions, 0 deletions
diff --git a/packages/api/src/app.ts b/packages/api/src/app.ts
new file mode 100644
index 0000000..9c31eab
--- /dev/null
+++ b/packages/api/src/app.ts
@@ -0,0 +1,46 @@
+import { Hono } from "hono";
+import { cors } from "hono/cors";
+import { AgentManager } from "./agent-manager.js";
+
+export const agentManager = new AgentManager();
+
+export const app = new Hono();
+
+app.use(
+ "*",
+ cors({
+ origin: "http://localhost:5173",
+ credentials: true,
+ allowHeaders: ["Content-Type", "Authorization"],
+ allowMethods: ["GET", "POST", "OPTIONS"],
+ }),
+);
+
+app.get("/health", (c) => {
+ return c.json({ ok: true });
+});
+
+app.get("/status", (c) => {
+ return c.json({
+ status: agentManager.getStatus(),
+ messageCount: agentManager.getMessageCount(),
+ });
+});
+
+app.post("/chat", async (c) => {
+ const body = await c.req.json<{ message?: unknown }>();
+ const message = body.message;
+
+ if (typeof message !== "string" || message.trim() === "") {
+ return c.json({ error: "message must be a non-empty string" }, 400);
+ }
+
+ if (agentManager.getStatus() === "running") {
+ return c.json({ error: "agent is already running" }, 409);
+ }
+
+ // Non-blocking — let the agent run in the background
+ agentManager.processMessage(message).catch(console.error);
+
+ return c.json({ status: "ok" });
+});