138 lines · 5.4 KB · TypeScript
RawDownload
// CRITICALimport { mkdirSync } from "node:fs";import { resolve } from "node:path";import type { AppContext } from "./types/context";import { createConfig } from "./config/env";import { createEventManager } from "./modules/monitoring/event-manager";import { createLaunchState } from "./modules/lifecycle/state/launch-state";import { createMetrics } from "./modules/monitoring/metrics";import { createProcessManager } from "./modules/lifecycle/process/process-manager";import { createLifecycleCoordinator } from "./modules/lifecycle/state/lifecycle-coordinator";import { DownloadManager } from "./modules/downloads/manager";import { createLogger, resolveLogLevel } from "./core/logger";import { primaryLogPathFor } from "./core/log-files";import { ChatStore } from "./modules/chat/store";import { DownloadStore } from "./modules/downloads/store";import { PeakMetricsStore, LifetimeMetricsStore } from "./modules/monitoring/metrics-store";import { RecipeStore } from "./modules/lifecycle/recipes/recipe-store";import { ChatRunManager } from "./modules/chat/agent/run-manager";import { JobStore } from "./stores/job-store";import { JobManager } from "./modules/jobs/job-manager";import { DistributedStore } from "./stores/distributed-store";import { ControllerKernel } from "./kernel/kernel";import { EventBusAdapter } from "./kernel/adapters/event-bus";import { RecipeRegistryAdapter } from "./kernel/adapters/recipe-registry";import { RuntimeLeaseManagerAdapter } from "./kernel/adapters/runtime-lease-manager";import { ProviderRouterAdapter } from "./kernel/adapters/provider-router";import { MetricsStoreAdapter } from "./kernel/adapters/metrics-store";import { ChatStoreAdapter } from "./kernel/adapters/chat-store";import { DownloadStoreAdapter } from "./kernel/adapters/download-store";import { JobStoreAdapter } from "./kernel/adapters/job-store";import { NodeRegistryAdapter } from "./kernel/adapters/node-registry";import { DistributedClusterManager } from "./modules/distributed/cluster-manager"; /** * Create the application dependency container. * @returns AppContext instance. */export const createAppContext = (): AppContext => {  const config = createConfig();   mkdirSync(config.data_dir, { recursive: true });  const dbPath = resolve(config.db_path);   const recipeStore = new RecipeStore(dbPath);  const chatStore = new ChatStore(resolve(config.data_dir, "chats.db"));  const downloadStore = new DownloadStore(dbPath);  const peakMetricsStore = new PeakMetricsStore(dbPath);  const lifetimeMetricsStore = new LifetimeMetricsStore(dbPath);  const jobStore = new JobStore(dbPath);  const distributedStore = new DistributedStore(dbPath);  const eventManager = createEventManager();  const logger = createLogger(resolveLogLevel("info"), {    filePath: primaryLogPathFor(config.data_dir, "controller"),    onLine: (line) => eventManager.publishLogLine("controller", line),  });  const launchState = createLaunchState();  const { registry: metricsRegistry, metrics } = createMetrics();  const processManager = createProcessManager(config, logger, eventManager);  let runManager: ChatRunManager | null = null;  const lifecycleCoordinator = createLifecycleCoordinator({    config,    logger,    eventManager,    launchState,    metrics,    processManager,    recipeStore,    abortRunsForModel: (modelName) => runManager?.abortRunsForModel(modelName) ?? 0,  });  const downloadManager = new DownloadManager(config, downloadStore, eventManager, logger);   lifetimeMetricsStore.ensureFirstStarted();   const baseContext = {    config,    logger,    eventManager,    launchState,    metrics,    metricsRegistry,    processManager,    lifecycleCoordinator,    downloadManager,    stores: {      recipeStore,      chatStore,      downloadStore,      peakMetricsStore,      lifetimeMetricsStore,      jobStore,      distributedStore,    },  } as Omit<AppContext, "runManager" | "jobManager" | "distributedManager">;   runManager = new ChatRunManager(baseContext as AppContext);  const jobManager = new JobManager(baseContext as AppContext, jobStore);  const distributedManager = new DistributedClusterManager(    baseContext as AppContext,    distributedStore  );   // Wire kernel adapters over existing stores/managers  const kernelEvents = new EventBusAdapter(eventManager);  const kernelRecipes = new RecipeRegistryAdapter(recipeStore);  const kernelRuntime = new RuntimeLeaseManagerAdapter(    lifecycleCoordinator,    processManager,    kernelEvents,    config.inference_port,  );  const kernelProviders = new ProviderRouterAdapter(kernelRecipes);  const kernelMetrics = new MetricsStoreAdapter(lifetimeMetricsStore);  // eslint-disable-next-line @typescript-eslint/no-explicit-any -- adapter wiring across module boundaries  const kernelChats = new ChatStoreAdapter(chatStore as any);  const kernelDownloads = new DownloadStoreAdapter(downloadManager as any);  const kernelJobs = new JobStoreAdapter(jobManager as any);  const kernelCluster = new NodeRegistryAdapter(distributedManager as any);   const kernel = new ControllerKernel({    events: kernelEvents,    recipes: kernelRecipes,    runtime: kernelRuntime,    providers: kernelProviders,    chats: kernelChats,    metrics: kernelMetrics,    downloads: kernelDownloads,    jobs: kernelJobs,    cluster: kernelCluster,  });   return {    ...baseContext,    runManager,    jobManager,    distributedManager,    kernel,  };};

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t