Add durable candidate funnel

This commit is contained in:
jjbrunton committed 2026-08-09 15:08:06 +01:00
1 parent 5abac31c28
commit df35648920
20 files changed
+1128 -142

No files matched your search

+10
View File
@@ -51,6 +51,7 @@ import { AiUsageRepository } from './database/ai-usage-repository.js';
import { importLegacyAccountContent } from './database/legacy-content-import.js';
import { RecipientDeduplicator } from './services/recipient-deduplicator.js';
import { createConfigBackedSubredditPollingControl } from './services/subreddit-polling-control.js';
import { CandidateQueueRepository, RuntimeStateRepository } from './database/candidate-queue-repository.js';
export interface AppContainer {
config: Config;
@@ -69,6 +70,8 @@ export interface AppContainer {
conversationStateRepo: ConversationStateRepository;
conversationOutcomesRepo: ConversationOutcomesRepository;
recipientDeduplicator: RecipientDeduplicator;
candidateQueueRepo: CandidateQueueRepository;
runtimeStateRepo: RuntimeStateRepository;
redditApi: RedditApiClient;
aiClient: OpenRouterClient;
@@ -126,6 +129,8 @@ export async function bootstrap(
const conversationStateRepo = new ConversationStateRepository(db, bootstrapAccountId);
const conversationOutcomesRepo = new ConversationOutcomesRepository(db, bootstrapAccountId);
const recipientDeduplicator = new RecipientDeduplicator(new RecipientHistoryRepository(db));
const candidateQueueRepo = new CandidateQueueRepository(db);
const runtimeStateRepo = new RuntimeStateRepository(db);
const redditAccountsRepo = bootstrapAccountsRepo;
const accountContentRepo = new AccountContentRepository(db);
const aiUsageRepo = new AiUsageRepository(db);
@@ -360,6 +365,8 @@ export async function bootstrap(
broadcaster,
process.cwd(),
aiUsageRepo,
runtimeStateRepo.isBotRunning(),
(running) => runtimeStateRepo.setBotRunning(running),
);
webServer.setChatService(chatService);
@@ -429,6 +436,7 @@ export async function bootstrap(
webServer.setRedditAccountsService(redditAccounts);
webServer.setAccountRuntimeManager(accountRuntimeManager);
webServer.setConversationStateRepository(conversationStateRepo);
webServer.setCandidateQueueRepository(candidateQueueRepo);
webServer.setConfigStore(new ConfigStore(db));
webServer.setOnConfigChange(() => logger.info('Runtime config updated via dashboard'));
}
@@ -463,6 +471,8 @@ export async function bootstrap(
conversationStateRepo,
conversationOutcomesRepo,
recipientDeduplicator,
candidateQueueRepo,
runtimeStateRepo,
redditApi,
aiClient,
monitorService,