11import { parseKaytooArgv } from './cli/argv.js' ;
22import { getConfig } from './config.js' ;
3- import { createSlackNotifierWithRetry } from './notify/slack.js' ;
43import { createConsoleInsightSink } from './notify/consoleInsightSink.js' ;
54import { startInsightEngine } from './insights/engine.js' ;
6- import { ChatRouter } from './chat/router.js' ;
7- import { startSlackSocketAdapter } from './chat/adapters/slackSocket.js' ;
8- import { startMatrixAdapter } from './chat/adapters/matrix.js' ;
9- import { startMattermostAdapter } from './chat/adapters/mattermost.js' ;
10- import { createAgentRuntime } from './agent/runtime.js' ;
11- import { createSlackChatNotifier } from './notify/slackNotifier.js' ;
12- import { createMatrixNotifier } from './notify/matrixNotifier.js' ;
13- import { createMattermostNotifier } from './notify/mattermostNotifier.js' ;
14- import { createMultiNotifier , createPromiseBackedNotifier } from './notify/multiNotifier.js' ;
155import { getLogger , initLogging } from './logging/logger.js' ;
166import { startE2eHttpChatServer } from './e2eHttpChatServer.js' ;
7+ import type { ChatRouter as ChatRouterT } from './chat/router.js' ;
178
189const argv = parseKaytooArgv ( ) ;
1910const config = getConfig ( process . env , argv ) ;
@@ -28,7 +19,13 @@ log.info(
2819const insightSink =
2920 config . output === 'console'
3021 ? createConsoleInsightSink ( getLogger ( { component : 'insights.out' } ) )
31- : createSlackNotifierWithRetry ( { botToken : config . slack ! . botToken ! , log : getLogger ( { component : 'notify.slack' } ) } ) ;
22+ : await ( async ( ) => {
23+ const { createSlackNotifierWithRetry } = await import ( './notify/slack.js' ) ;
24+ return createSlackNotifierWithRetry ( {
25+ botToken : config . slack ! . botToken ! ,
26+ log : getLogger ( { component : 'notify.slack' } ) ,
27+ } ) ;
28+ } ) ( ) ;
3229
3330// Bind e2e HTTP chat before the insight engine: the engine awaits the first poll, which can take a long time
3431// (OpenSearch + LLM) and would otherwise block /health and /chat until that poll finishes.
@@ -49,14 +46,33 @@ if (config.output === 'console') {
4946 'console output mode: insight polling (Slack/Matrix/Mattermost adapters off unless KAYTOO_HTTP_CHAT_BIND set)' ,
5047 ) ;
5148} else {
49+ const [ { ChatRouter } , { createAgentRuntime } , notify , slackSocket , matrixAdapter , mattermostAdapter ] =
50+ await Promise . all ( [
51+ import ( './chat/router.js' ) ,
52+ import ( './agent/runtime.js' ) ,
53+ import ( './notify/multiNotifier.js' ) ,
54+ import ( './chat/adapters/slackSocket.js' ) ,
55+ import ( './chat/adapters/matrix.js' ) ,
56+ import ( './chat/adapters/mattermost.js' ) ,
57+ ] ) ;
58+
59+ const { createMultiNotifier, createPromiseBackedNotifier } = notify ;
60+ const { startSlackSocketAdapter } = slackSocket ;
61+ const { startMatrixAdapter } = matrixAdapter ;
62+ const { startMattermostAdapter } = mattermostAdapter ;
63+
64+ const { createSlackChatNotifier } = await import ( './notify/slackNotifier.js' ) ;
65+ const { createMatrixNotifier } = await import ( './notify/matrixNotifier.js' ) ;
66+ const { createMattermostNotifier } = await import ( './notify/mattermostNotifier.js' ) ;
67+
5268 const slackCfg = config . slack ! ;
5369 const slack = insightSink ;
5470 const slackNotifier = createSlackChatNotifier ( { slack } ) ;
5571 // Adapters call `onEvent` as soon as they connect; the router is created later, so we
5672 // resolve the router through a promise until `ChatRouter` is constructed below.
57- const routerCtl = Promise . withResolvers < ChatRouter > ( ) ;
73+ const routerCtl = Promise . withResolvers < ChatRouterT > ( ) ;
5874
59- const onEvent = async ( evt : Parameters < ChatRouter [ 'handleEvent' ] > [ 0 ] ) => {
75+ const onEvent = async ( evt : Parameters < ChatRouterT [ 'handleEvent' ] > [ 0 ] ) => {
6076 await ( await routerCtl . promise ) . handleEvent ( evt ) ;
6177 } ;
6278
0 commit comments