UNPKG

donobu

Version:

Create browser automations with an LLM agent and replay them as Playwright scripts.

189 lines 12.7 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __exportStar = (this && this.__exportStar) || function(m, exports) { for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.TargetRuntimePluginRegistry = exports.PersistencePluginRegistry = exports.shutdownFileUploadWorkers = exports.getFileUploadAggregateStatus = exports.createDefaultToolRegistry = exports.ToolManager = exports.PluginLoader = exports.InteractionVisualizer = exports.setupDonobuStack = exports.prepareToolCallsForRerun = exports.DonobuFlowsManager = exports.distillAllowedEnvVariableNames = exports.DonobuFlow = exports.AdminApiController = exports.env = exports.VercelAiGptClient = exports.OpenAiGptClient = exports.GptClientPluginRegistry = exports.GptClient = exports.GoogleGenerativeAiGptClient = exports.fixAssertFields = exports.DonobuGptClient = exports.AnthropicGptClient = void 0; exports.startDonobuServer = startDonobuServer; const commander_1 = require("commander"); const v4_1 = require("zod/v4"); const envVars_1 = require("./envVars"); const init_1 = require("./init"); const AdminApiController_1 = require("./managers/AdminApiController"); const ControlPanel_1 = require("./models/ControlPanel"); const Logger_1 = require("./utils/Logger"); const PlaywrightUtils_1 = require("./utils/PlaywrightUtils"); var AnthropicGptClient_1 = require("./clients/AnthropicGptClient"); Object.defineProperty(exports, "AnthropicGptClient", { enumerable: true, get: function () { return AnthropicGptClient_1.AnthropicGptClient; } }); var DonobuGptClient_1 = require("./clients/DonobuGptClient"); Object.defineProperty(exports, "DonobuGptClient", { enumerable: true, get: function () { return DonobuGptClient_1.DonobuGptClient; } }); var GoogleGenerativeAiGptClient_1 = require("./clients/GoogleGenerativeAiGptClient"); Object.defineProperty(exports, "fixAssertFields", { enumerable: true, get: function () { return GoogleGenerativeAiGptClient_1.fixAssertFields; } }); Object.defineProperty(exports, "GoogleGenerativeAiGptClient", { enumerable: true, get: function () { return GoogleGenerativeAiGptClient_1.GoogleGenerativeAiGptClient; } }); var GptClient_1 = require("./clients/GptClient"); Object.defineProperty(exports, "GptClient", { enumerable: true, get: function () { return GptClient_1.GptClient; } }); var GptClientPlugin_1 = require("./clients/GptClientPlugin"); Object.defineProperty(exports, "GptClientPluginRegistry", { enumerable: true, get: function () { return GptClientPlugin_1.GptClientPluginRegistry; } }); var OpenAiGptClient_1 = require("./clients/OpenAiGptClient"); Object.defineProperty(exports, "OpenAiGptClient", { enumerable: true, get: function () { return OpenAiGptClient_1.OpenAiGptClient; } }); var VercelAiGptClient_1 = require("./clients/VercelAiGptClient"); Object.defineProperty(exports, "VercelAiGptClient", { enumerable: true, get: function () { return VercelAiGptClient_1.VercelAiGptClient; } }); var envVars_2 = require("./envVars"); Object.defineProperty(exports, "env", { enumerable: true, get: function () { return envVars_2.env; } }); __exportStar(require("./exceptions/DonobuException"), exports); __exportStar(require("./exceptions/FlowIdCollisionException"), exports); __exportStar(require("./exceptions/FlowNotFoundException"), exports); __exportStar(require("./exceptions/GptApiKeysNotSetupException"), exports); __exportStar(require("./exceptions/GptPlatformAuthenticationFailedException"), exports); __exportStar(require("./exceptions/InvalidParamValueException"), exports); __exportStar(require("./exceptions/ToolCallFailedException"), exports); __exportStar(require("./lib/ai/cache/cache"), exports); __exportStar(require("./lib/ai/cache/cacheLocator"), exports); __exportStar(require("./lib/page/extendPage"), exports); __exportStar(require("./lib/test/fixtures/browserState"), exports); __exportStar(require("./lib/test/fixtures/gptClients"), exports); __exportStar(require("./lib/test/testExtension"), exports); __exportStar(require("./lib/test/utils/donobuTestStack"), exports); var AdminApiController_2 = require("./managers/AdminApiController"); Object.defineProperty(exports, "AdminApiController", { enumerable: true, get: function () { return AdminApiController_2.AdminApiController; } }); var DonobuFlow_1 = require("./managers/DonobuFlow"); Object.defineProperty(exports, "DonobuFlow", { enumerable: true, get: function () { return DonobuFlow_1.DonobuFlow; } }); var DonobuFlowsManager_1 = require("./managers/DonobuFlowsManager"); Object.defineProperty(exports, "distillAllowedEnvVariableNames", { enumerable: true, get: function () { return DonobuFlowsManager_1.distillAllowedEnvVariableNames; } }); Object.defineProperty(exports, "DonobuFlowsManager", { enumerable: true, get: function () { return DonobuFlowsManager_1.DonobuFlowsManager; } }); Object.defineProperty(exports, "prepareToolCallsForRerun", { enumerable: true, get: function () { return DonobuFlowsManager_1.prepareToolCallsForRerun; } }); var DonobuStack_1 = require("./managers/DonobuStack"); Object.defineProperty(exports, "setupDonobuStack", { enumerable: true, get: function () { return DonobuStack_1.setupDonobuStack; } }); var InteractionVisualizer_1 = require("./managers/InteractionVisualizer"); Object.defineProperty(exports, "InteractionVisualizer", { enumerable: true, get: function () { return InteractionVisualizer_1.InteractionVisualizer; } }); var PluginLoader_1 = require("./managers/PluginLoader"); Object.defineProperty(exports, "PluginLoader", { enumerable: true, get: function () { return PluginLoader_1.PluginLoader; } }); var ToolManager_1 = require("./managers/ToolManager"); Object.defineProperty(exports, "ToolManager", { enumerable: true, get: function () { return ToolManager_1.ToolManager; } }); var ToolRegistry_1 = require("./managers/ToolRegistry"); Object.defineProperty(exports, "createDefaultToolRegistry", { enumerable: true, get: function () { return ToolRegistry_1.createDefaultToolRegistry; } }); __exportStar(require("./managers/WebTargetInspector"), exports); __exportStar(require("./models/BrowserStorageState"), exports); __exportStar(require("./models/CodeGenerationOptions"), exports); __exportStar(require("./models/ControlPanel"), exports); __exportStar(require("./models/CreateDonobuFlow"), exports); __exportStar(require("./models/FlowMetadata"), exports); __exportStar(require("./models/InteractableElement"), exports); __exportStar(require("./models/ProposedToolCall"), exports); __exportStar(require("./models/Provenance"), exports); __exportStar(require("./models/RunConfig"), exports); __exportStar(require("./models/SuiteMetadata"), exports); __exportStar(require("./models/TargetConfig"), exports); __exportStar(require("./models/TestMetadata"), exports); __exportStar(require("./models/ToolCallResult"), exports); __exportStar(require("./models/ToolSchema"), exports); var fileUploadWorkerRegistry_1 = require("./persistence/files/fileUploadWorkerRegistry"); Object.defineProperty(exports, "getFileUploadAggregateStatus", { enumerable: true, get: function () { return fileUploadWorkerRegistry_1.getFileUploadAggregateStatus; } }); Object.defineProperty(exports, "shutdownFileUploadWorkers", { enumerable: true, get: function () { return fileUploadWorkerRegistry_1.shutdownFileUploadWorkers; } }); var PersistencePlugin_1 = require("./persistence/PersistencePlugin"); Object.defineProperty(exports, "PersistencePluginRegistry", { enumerable: true, get: function () { return PersistencePlugin_1.PersistencePluginRegistry; } }); var TargetRuntimePlugin_1 = require("./targets/TargetRuntimePlugin"); Object.defineProperty(exports, "TargetRuntimePluginRegistry", { enumerable: true, get: function () { return TargetRuntimePlugin_1.TargetRuntimePluginRegistry; } }); __exportStar(require("./tools/ReplayableInteraction"), exports); __exportStar(require("./tools/Tool"), exports); __exportStar(require("./utils/buildProvenance"), exports); __exportStar(require("./utils/createTool"), exports); __exportStar(require("./utils/FlowLogBuffer"), exports); __exportStar(require("./utils/JsonSchemaUtils"), exports); __exportStar(require("./utils/JsonUtils"), exports); __exportStar(require("./utils/Logger"), exports); __exportStar(require("./utils/MiscUtils"), exports); __exportStar(require("./utils/PlaywrightUtils"), exports); __exportStar(require("./utils/TargetUtils"), exports); const DEFAULT_PORT = 31000; /** * Starts a Donobu API server at the given port. The server assumes that the * Playwright browsers have been installed. */ async function startDonobuServer({ port = DEFAULT_PORT, controlPanelHost = ControlPanel_1.NoOpControlPanelFactory, environ = envVars_1.env.pick('ANTHROPIC_API_KEY', 'ANTHROPIC_MODEL_NAME', 'AWS_ACCESS_KEY_ID', 'AWS_BEDROCK_MODEL_NAME', 'AWS_SECRET_ACCESS_KEY', 'BASE64_GPT_CONFIG', 'BROWSERBASE_API_KEY', 'BROWSERBASE_PROJECT_ID', 'DONOBU_DEPLOYMENT_ENVIRONMENT', 'DONOBU_API_BASE_URL', 'DONOBU_API_KEY', 'DONOBU_PERSISTENCE_API_KEY', 'GOOGLE_GENERATIVE_AI_API_KEY', 'GOOGLE_GENERATIVE_AI_MODEL_NAME', 'OLLAMA_API_URL', 'OLLAMA_MODEL_NAME', 'OPENAI_API_KEY', 'OPENAI_API_MODEL_NAME', 'PERSISTENCE_PRIORITY'), } = {}) { try { const adminController = await AdminApiController_1.AdminApiController.create(environ.data.DONOBU_DEPLOYMENT_ENVIRONMENT ?? 'LOCAL', controlPanelHost, environ); await adminController.start(port); Logger_1.appLogger.info(`Donobu API server available on http://localhost:${port}`); // Keep the process running until a process signal is detected. await new Promise((resolve) => { /** * System signals that trigger graceful application shutdown. * * - SIGTERM: Termination request (typically from process managers like PM2, Docker) * - SIGINT: Interrupt signal (typically Ctrl+C from terminal) * - SIGHUP: Hangup signal (typically when terminal session ends) * * @see {@link https://nodejs.org/api/process.html#signal-events} */ ['SIGTERM', 'SIGINT', 'SIGHUP'].forEach((signal) => { process.on(signal, () => { Logger_1.appLogger.info(`Received ${signal}, shutting down...`); void adminController.stop().finally(resolve); }); }); }); } catch (e) { Logger_1.appLogger.error('Exception while running server', e); process.exit(1); } } /** * Starts the program, either ensures that the Playwright browsers are installed * or starts the API server. */ async function main(args) { const options = new commander_1.Command() .addOption(new commander_1.Option('--port <number>', 'The port to run the API on.') .default(DEFAULT_PORT) .argParser((v) => { const parsedPort = v4_1.z.coerce .number() .int() .min(1) .max(65535) .safeParse(v); if (!parsedPort.success) { Logger_1.appLogger.error(`The value of '${v}' is an invalid port! ${parsedPort.error.issues[0].message}`); process.exit(1); } return parsedPort.data; })) .option('--only-install-browsers-and-quit', 'Only install the Playwright browsers and quit.') .parse(args) .opts(); if (options.onlyInstallBrowsersAndQuit) { await PlaywrightUtils_1.PlaywrightUtils.ensurePlaywrightInstallation(); } else { await startDonobuServer({ port: options.port }); } } /** * This is the main entrypoint of the program. If you are looking for real * business logic then see the DonobuFlow class. */ if (require.main === module) { // Only install crash-on-error handlers when running as a standalone server, // never when imported as a library (where they would hijack the host // application's error handling). (0, init_1.installCrashHandlers)(); (0, init_1.installShutdownHandlers)(); main(process.argv).catch((e) => { Logger_1.appLogger.error('Unhandled error in main', e); process.exit(1); }); } //# sourceMappingURL=main.js.map