From 61219ce5a23027d392944d7878433f2ff36aec41 Mon Sep 17 00:00:00 2001
From: ValueOn AG
Date: Sun, 15 Feb 2026 00:52:39 +0100
Subject: [PATCH] feat: Log screenshots as base64 for Azure debugging
Co-authored-by: Cursor
---
src/bot/orchestrator.ts | 15 ++++++++++++++-
1 file changed, 14 insertions(+), 1 deletion(-)
diff --git a/src/bot/orchestrator.ts b/src/bot/orchestrator.ts
index 1dd5c02..a45ee1b 100644
--- a/src/bot/orchestrator.ts
+++ b/src/bot/orchestrator.ts
@@ -439,6 +439,7 @@ export class BotOrchestrator {
/**
* Take a screenshot for debugging.
+ * Logs screenshot as base64 for easy viewing from Azure logs.
*/
private async _takeScreenshot(name: string): Promise {
if (!config.screenshotOnError || !this._page) {
@@ -446,6 +447,7 @@ export class BotOrchestrator {
}
try {
+ // Save to file
const screenshotDir = config.screenshotDir;
if (!fs.existsSync(screenshotDir)) {
fs.mkdirSync(screenshotDir, { recursive: true });
@@ -453,8 +455,19 @@ export class BotOrchestrator {
const filename = `${this._sessionId}-${name}-${Date.now()}.png`;
const filepath = path.join(screenshotDir, filename);
- await this._page.screenshot({ path: filepath, fullPage: true });
+ const buffer = await this._page.screenshot({ fullPage: true });
+ fs.writeFileSync(filepath, buffer);
this._logger.info(`Screenshot saved: ${filepath}`);
+
+ // Also log as base64 for Azure logs (truncated for readability)
+ const base64 = buffer.toString('base64');
+ this._logger.info(`SCREENSHOT_BASE64_START:${name}`);
+ // Log in chunks to avoid log line limits
+ const chunkSize = 50000;
+ for (let i = 0; i < base64.length; i += chunkSize) {
+ this._logger.info(`SCREENSHOT_CHUNK:${base64.substring(i, i + chunkSize)}`);
+ }
+ this._logger.info(`SCREENSHOT_BASE64_END:${name}`);
} catch (error) {
this._logger.error('Error taking screenshot:', error);
}