Files
curriculum-project-hub/hub/src/server.ts
T

25 lines
1005 B
TypeScript

/**
* Hub entry — Fastify server + Feishu WebSocket listener + org admin HTTP.
*
* Wires the full trigger path: lark ws receives `im.message.receive_v1` →
* trigger handler resolves chat->project (ADR-0001), creates AgentRun + acquires
* the project lock (ADR-0002), runs the AI SDK-backed agent runner
* (ADR-0017), and releases the lock on finish. Feishu context reads inside the
* loop are ADR-0003-authorized (chat must match binding).
*
* Org admin (ADR-0021): Feishu OAuth session + `/api/org/:orgSlug/*`.
*
* Env (see .env.example):
* DATABASE_URL, HUB_SILO_ORGANIZATION_ID, PORT,
* HUB_PROJECT_WORKSPACE_ROOT, HUB_SESSION_SECRET, HUB_PUBLIC_BASE_URL.
* Provider credentials are org-scoped encrypted records; production receives
* the local master-key keyring only through systemd CREDENTIALS_DIRECTORY.
*/
import "dotenv/config";
import { startHub } from "./hub.js";
startHub().catch((error: unknown) => {
console.error("[hub] fatal:", error);
process.exitCode = 1;
});