import { Agent } from "@mastra/core/agent";
import { Mastra } from "@mastra/core/mastra";
import { PostgresStore } from "@mastra/pg";
import { createSlackAdapter } from "@chat-adapter/slack";
import { LandingPageRepository } from "./db/repositories";
const landingPageAgent = new Agent({
id: "landing-page-agent",
name: "Landing Page Agent",
model: LANDING_PAGE_MODEL_ID,
// The default Mastra agent path uses these instructions and tools.
// Our Slack handlers bypass that path and call app services directly.
// instructions: () => getLandingPageOrchestratorInstructions(),
// tools: {
// get_page_context: getPageContextTool,
// publish_landing_page: publishLandingPageTool,
// },
channels: {
adapters: {
slack: {
adapter: createSlackAdapter({
mode: "webhook",
botToken: () => process.env.SLACK_BOT_TOKEN!,
webhookVerifier: verifySlackWebhook,
}),
},
},
handlers: {
onMention: slackGenerationHandler({ subscribe: true }),
onSubscribedMessage: slackGenerationHandler({ subscribe: false }),
},
},
});
function createDatabase(databaseUrl: string) {
const storage = new PostgresStore({
id: "landing-page-postgres",
connectionString: databaseUrl,
schemaName: "mastra",
});
return { storage, landingPages: new LandingPageRepository(storage.pool) };
}
export const mastra = new Mastra({
agents: { landingPageAgent },
storage: createDatabase(process.env.DATABASE_URL).storage,
server: {
apiRoutes: [
latestPagePreviewRoute,
versionedPagePreviewRoute,
],
},
});