Something went wrong. Try again.
ATProto-based AI Assistant Chat interface.
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142import { existsSync } from 'node:fs'import { fileURLToPath } from 'node:url'import { serve } from '@hono/node-server'import { defaultConfigPath, loadConfig, readConfigFile } from './config.ts'import { createDb } from './db/index.ts'import { createLogger } from './logger.ts'import { importPlugins } from './plugins/import.ts'import { createServer } from './server.ts'
if (existsSync('.env')) process.loadEnvFile('.env')else if (existsSync('../../.env')) process.loadEnvFile('../../.env')
const configPath = process.env.SCN_CHAT_CONFIG || defaultConfigPathconst config = loadConfig({ env: process.env, file: readConfigFile(configPath), configPath })const logger = createLogger(config.logLevel)process.on('unhandledRejection', (err) => logger.error({ err }, 'unhandled promise rejection'))const db = createDb(config.databaseUrl)const plugins = await importPlugins(config.plugins, config.configDir)const webDist = fileURLToPath(new URL('../../web/dist', import.meta.url))
const server = await createServer({ config, appConfig: { plugins, models: config.models, roles: config.roles, sync: config.sync }, db, logger, webDist: config.nodeEnv === 'production' ? webDist : undefined,})
const http = serve({ fetch: server.app.fetch, port: config.port }, ({ port }) => { logger.info({ port, publicUrl: config.publicUrl }, `${config.appName} server listening`)})
const shutdown = async () => { logger.info('shutting down') http.close() await server.close() await db.destroy() process.exit(0)}process.on('SIGTERM', shutdown)process.on('SIGINT', shutdown)