ai-code-writer
Version:
An AI code writer application using OpenAI APIs for audio transcription and chat completion.
74 lines (73 loc) • 6.82 kB
JavaScript
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const StartController_1 = __importDefault(require("../Application/StartController"));
const OpenAi_1 = __importDefault(require("../Infrastructure/Conversation/ChatCompletionClient/OpenAi/OpenAi"));
const OpenAiAudio_1 = __importDefault(require("../Infrastructure/AudioTransformClient/OpenAi/OpenAiAudio"));
const Node_1 = __importDefault(require("../Infrastructure/AudioRecorder/Node/Node"));
const Node_2 = __importDefault(require("../Infrastructure/AudioPlayer/Node/Node"));
const InMemory_1 = __importDefault(require("../Infrastructure/Conversation/ConversationStorage/InMemory"));
const DefinedSystemPrompt_1 = __importDefault(require("../Infrastructure/Conversation/SystemPrompt/DefinedSystemPrompt"));
const NoopConversationLogger_1 = __importDefault(require("../Infrastructure/Conversation/ConversationLogger/NoopConversationLogger"));
const FileSystemActionHandler_1 = __importDefault(require("../Infrastructure/FileActions/FileSystemActionHandler"));
const FileCollector_1 = __importDefault(require("../Infrastructure/Conversation/FileCollector/FileCollector"));
const FileActionUseCase_1 = __importDefault(require("../Core/FileActions/FileActionUseCase"));
const FsDirectoryWatcher_1 = __importDefault(require("../Infrastructure/FileActions/FsDirectoryWatcher"));
const openai_1 = require("openai");
const AudioUseCase_1 = __importDefault(require("../Core/Audio/AudioUseCase"));
const NodeAudioRecorderConfig_1 = __importDefault(require("../Infrastructure/AudioRecorder/Node/NodeAudioRecorderConfig"));
const ConversationUseCase_1 = __importDefault(require("../Core/Conversation/UseCase/ConversationUseCase"));
const Config_1 = __importDefault(require("./Config"));
const Logger_1 = __importDefault(require("../Infrastructure/Logger/Logger"));
const FileConversationLogger_1 = __importDefault(require("../Infrastructure/Conversation/ConversationLogger/FileConversationLogger"));
const ModeUseCase_1 = __importDefault(require("../Core/Conversation/ModeUseCase/ModeUseCase"));
const Memory_1 = __importDefault(require("../Infrastructure/StateStorage/Memory/Memory"));
const FileActionExecutor_1 = __importDefault(require("../Application/Task/FileActionExecutor"));
const ToolCallConverter_1 = __importDefault(require("../Infrastructure/Conversation/ChatCompletionClient/OpenAi/ToolCallConverter"));
const MessageEncoder_1 = __importDefault(require("../Infrastructure/Conversation/ChatCompletionClient/OpenAi/MessageEncoder"));
const ConversationRunner_1 = __importDefault(require("../Core/Conversation/UseCase/Task/ConversationRunner"));
const FileTask_1 = __importDefault(require("../Core/Conversation/UseCase/Task/FileTask"));
const ConversationHandler_1 = __importDefault(require("../Application/Task/ConversationHandler"));
const ActionHandler_1 = __importDefault(require("../Application/Task/ActionHandler"));
const PauseHandler_1 = __importDefault(require("../Application/Task/PauseHandler"));
const ExitHandler_1 = __importDefault(require("../Application/Task/ExitHandler"));
const ConversationService_1 = __importDefault(require("../Core/Conversation/UseCase/ConversationService"));
class GlobalContainer {
constructor() {
this.config = new Config_1.default();
this.openAi = new openai_1.OpenAI({
organization: this.config.openAiOrg,
apiKey: this.config.apiKey
});
this.conversationStorage = new InMemory_1.default();
this.systemPromptService = new DefinedSystemPrompt_1.default();
this.conversationLogger = this.config.logToFile ? new FileConversationLogger_1.default() : new NoopConversationLogger_1.default();
this.fileSystemActionHandler = new FileSystemActionHandler_1.default(new Logger_1.default());
this.fileCollectorService = new FileCollector_1.default('.', this.config.includePatterns, this.config.excludeDirs, this.config.excludeFiles);
this.logger = new Logger_1.default();
this.chatClient = new OpenAi_1.default(this.openAi, this.config.openAiChatTemperature, this.logger, this.config.openAiChatModel, this.config.maxTokens, new ToolCallConverter_1.default(this.logger), new MessageEncoder_1.default());
this.audioTransformClientOpenAi = new OpenAiAudio_1.default('https://api.openai.com/v1/audio/speech', this.config.apiKey, this.openAi, this.config.openAiAudioTemperature, this.logger);
this.audioRecorderConfig = new NodeAudioRecorderConfig_1.default();
this.audioRecorder = new Node_1.default(this.audioRecorderConfig);
this.audioPlayer = new Node_2.default();
this.audioUseCase = new AudioUseCase_1.default(this.audioTransformClientOpenAi, this.audioRecorder, this.audioPlayer);
this.fileTask = new FileTask_1.default(this.conversationLogger);
this.conversationService = new ConversationService_1.default(this.conversationStorage, this.fileCollectorService, this.fileTask);
this.fileActionUseCase = new FileActionUseCase_1.default(this.fileSystemActionHandler, this.conversationService);
this.directoryWatcher = new FsDirectoryWatcher_1.default('.', this.config.includePatterns, this.config.excludeDirs, this.config.excludeFiles);
this.stateStorage = new Memory_1.default();
this.conversationRunner = new ConversationRunner_1.default(this.chatClient, this.conversationStorage, this.conversationLogger, this.stateStorage, this.systemPromptService, this.config);
this.conversationUseCase = new ConversationUseCase_1.default(this.conversationStorage, this.conversationLogger, this.systemPromptService, this.fileCollectorService, this.stateStorage, this.config, this.conversationRunner, this.fileTask);
this.modeUseCase = new ModeUseCase_1.default(this.stateStorage);
this.fileActionExecutor = new FileActionExecutor_1.default(this.fileActionUseCase, this.conversationUseCase);
this.pauseHandler = new PauseHandler_1.default(this.audioUseCase, this.modeUseCase);
this.exitHandler = new ExitHandler_1.default();
this.actionHandler = new ActionHandler_1.default(this.directoryWatcher, this.fileActionExecutor, this.modeUseCase, this.audioUseCase, this.conversationUseCase, this.pauseHandler, this.exitHandler);
this.conversationHandler = new ConversationHandler_1.default(this.audioUseCase, this.conversationUseCase, this.actionHandler, this.modeUseCase);
this.startController = new StartController_1.default(this.audioUseCase, this.conversationUseCase, this.directoryWatcher, this.conversationHandler, this.exitHandler, this.pauseHandler);
}
}
const Container = new GlobalContainer();
exports.default = Container;