From 20befcd6fd29b321e5bf8eebb71a535ff1789a50 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 31 Jan 2026 07:51:09 +0000 Subject: [PATCH] Remove temporary debug files Co-authored-by: thomasnordquist <7721625+thomasnordquist@users.noreply.github.com> --- debug-chat.sh | 83 ---- src/spec/chat-debug.spec.ts | 83 ---- test-output.log | 870 ------------------------------------ 3 files changed, 1036 deletions(-) delete mode 100755 debug-chat.sh delete mode 100644 src/spec/chat-debug.spec.ts delete mode 100644 test-output.log diff --git a/debug-chat.sh b/debug-chat.sh deleted file mode 100755 index e71294b2..00000000 --- a/debug-chat.sh +++ /dev/null @@ -1,83 +0,0 @@ -#!/bin/bash - -# Script to debug AI Assistant chat with Playwright - -set -e - -echo "=== Starting Chat Debug Test ===" - -# Check for API key -if [ -z "$OPENAI_API_KEY" ] && [ -z "$GEMINI_API_KEY" ] && [ -z "$LLM_API_KEY" ]; then - echo "Error: No LLM API key found. Please set OPENAI_API_KEY, GEMINI_API_KEY, or LLM_API_KEY" - exit 1 -fi - -echo "✓ API key found" - -# Start mosquitto if not running -if ! pgrep -x "mosquitto" > /dev/null; then - echo "Starting mosquitto..." - mosquitto -c /dev/null -p 1883 & - MOSQUITTO_PID=$! - sleep 2 -else - echo "✓ Mosquitto already running" -fi - -# Build the server -echo "Building server..." -yarn build:server - -# Start the server in background -echo "Starting server..." -export MQTT_EXPLORER_USERNAME=test -export MQTT_EXPLORER_PASSWORD=test123 -export PORT=3000 -export TESTS_MQTT_BROKER_HOST=127.0.0.1 -export TESTS_MQTT_BROKER_PORT=1883 - -node dist/src/server.js & -SERVER_PID=$! - -echo "Server PID: $SERVER_PID" - -# Wait for server to start -echo "Waiting for server to be ready..." -for i in {1..30}; do - if curl -s http://localhost:3000 > /dev/null 2>&1; then - echo "✓ Server is ready" - break - fi - if [ $i -eq 30 ]; then - echo "Error: Server failed to start" - kill $SERVER_PID 2>/dev/null || true - kill $MOSQUITTO_PID 2>/dev/null || true - exit 1 - fi - sleep 1 -done - -# Run the test -echo "" -echo "=== Running Playwright Test ===" -echo "" - -npx playwright test test-chat-debug.ts --headed || TEST_FAILED=1 - -# Cleanup -echo "" -echo "=== Cleanup ===" -kill $SERVER_PID 2>/dev/null || true -if [ ! -z "$MOSQUITTO_PID" ]; then - kill $MOSQUITTO_PID 2>/dev/null || true -fi - -if [ "$TEST_FAILED" = "1" ]; then - echo "" - echo "Test failed. Check the screenshots:" - ls -lh screenshot-*.png 2>/dev/null || echo "No screenshots found" - exit 1 -fi - -echo "" -echo "✓ Test completed successfully" diff --git a/src/spec/chat-debug.spec.ts b/src/spec/chat-debug.spec.ts deleted file mode 100644 index c523684a..00000000 --- a/src/spec/chat-debug.spec.ts +++ /dev/null @@ -1,83 +0,0 @@ -import { test, expect } from '@playwright/test' -import * as path from 'path' - -test.setTimeout(120000) // 2 minutes for LLM responses - -test('Debug AI Assistant Chat', async ({ page }) => { - // Start server is handled by the script - - // Go to the page - await page.goto('http://localhost:3000') - - // Wait for page to load - await page.waitForLoadState('networkidle') - - // Take screenshot of initial state - await page.screenshot({ path: 'screenshot-initial.png', fullPage: true }) - - // Check console for errors - const consoleMessages: string[] = [] - const consoleErrors: string[] = [] - - page.on('console', msg => { - const text = msg.text() - consoleMessages.push(`[${msg.type()}] ${text}`) - if (msg.type() === 'error') { - consoleErrors.push(text) - } - }) - - // Look for the AI Assistant - const aiAssistant = page.getByTestId('ai-assistant') - await expect(aiAssistant).toBeVisible({ timeout: 10000 }) - - console.log('AI Assistant found') - - // Expand the AI Assistant - const header = page.getByTestId('ai-assistant-header') - await header.click() - await page.waitForTimeout(1000) - - // Take screenshot of expanded state - await page.screenshot({ path: 'screenshot-expanded.png', fullPage: true }) - - console.log('AI Assistant expanded') - - // Try to send a message - const input = page.getByTestId('ai-assistant-input') - await expect(input).toBeVisible() - - await input.fill('Test message') - - const sendButton = page.getByTestId('ai-assistant-send') - await sendButton.click() - - console.log('Message sent, waiting for response...') - - // Wait for a response (up to 60 seconds) - try { - await page.waitForSelector('[data-testid="ai-message-assistant"]', { timeout: 60000 }) - console.log('Response received!') - - // Take screenshot of response - await page.screenshot({ path: 'screenshot-response.png', fullPage: true }) - } catch (error) { - console.log('No response after 60 seconds') - console.log('Console messages:', consoleMessages) - console.log('Console errors:', consoleErrors) - - // Take screenshot of error state - await page.screenshot({ path: 'screenshot-error.png', fullPage: true }) - - throw error - } - - // Log console output - console.log('\n=== Console Messages ===') - consoleMessages.forEach(msg => console.log(msg)) - - if (consoleErrors.length > 0) { - console.log('\n=== Console Errors ===') - consoleErrors.forEach(err => console.log(err)) - } -}) diff --git a/test-output.log b/test-output.log deleted file mode 100644 index 449f4456..00000000 --- a/test-output.log +++ /dev/null @@ -1,870 +0,0 @@ -Using OpenAI API key (length: 167) -LLM Provider: openai -1769844756: mosquitto version 2.0.18 starting -1769844756: Using default config. -1769844756: Starting in local only mode. Connections will only be possible from clients running on this machine. -1769844756: Create a configuration file which defines a listener to allow remote access. -1769844756: For more details see https://mosquitto.org/documentation/authentication-methods/ -1769844756: Opening ipv4 listen socket on port 1883. -1769844756: Error: Address already in use -1769844756: Opening ipv6 listen socket on port 1883. -1769844756: Error: Address already in use -Downloading Chromium 143.0.7499.4 (playwright build v1200) from https://cdn.playwright.dev/dbazure/download/playwright/builds/chromium/1200/chromium-linux.zip -| | 0% of 164.7 MiB -|■■■■■■■■ | 10% of 164.7 MiB -|■■■■■■■■■■■■■■■■ | 20% of 164.7 MiB -|■■■■■■■■■■■■■■■■■■■■■■■■ | 30% of 164.7 MiB -|■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ | 40% of 164.7 MiB -|■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ | 50% of 164.7 MiB -|■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ | 60% of 164.7 MiB -|■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ | 70% of 164.7 MiB -|■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ | 80% of 164.7 MiB -|■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ | 90% of 164.7 MiB -|■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■| 100% of 164.7 MiB -Chromium 143.0.7499.4 (playwright build v1200) downloaded to /home/runner/.cache/ms-playwright/chromium-1200 -Downloading Chromium Headless Shell 143.0.7499.4 (playwright build v1200) from https://cdn.playwright.dev/dbazure/download/playwright/builds/chromium/1200/chromium-headless-shell-linux.zip -| | 0% of 109.7 MiB -|■■■■■■■■ | 10% of 109.7 MiB -|■■■■■■■■■■■■■■■■ | 20% of 109.7 MiB -|■■■■■■■■■■■■■■■■■■■■■■■■ | 30% of 109.7 MiB -|■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ | 40% of 109.7 MiB -|■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ | 50% of 109.7 MiB -|■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ | 60% of 109.7 MiB -|■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ | 70% of 109.7 MiB -|■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ | 80% of 109.7 MiB -|■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ | 90% of 109.7 MiB -|■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■| 100% of 109.7 MiB -Chromium Headless Shell 143.0.7499.4 (playwright build v1200) downloaded to /home/runner/.cache/ms-playwright/chromium_headless_shell-1200 -Downloading Firefox 144.0.2 (playwright build v1497) from https://cdn.playwright.dev/dbazure/download/playwright/builds/firefox/1497/firefox-ubuntu-24.04.zip -| | 0% of 98.4 MiB -|■■■■■■■■ | 10% of 98.4 MiB -|■■■■■■■■■■■■■■■■ | 20% of 98.4 MiB -|■■■■■■■■■■■■■■■■■■■■■■■■ | 30% of 98.4 MiB -|■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ | 40% of 98.4 MiB -|■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ | 50% of 98.4 MiB -|■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ | 60% of 98.4 MiB -|■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ | 70% of 98.4 MiB -|■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ | 80% of 98.4 MiB -|■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ | 90% of 98.4 MiB -|■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■| 100% of 98.4 MiB -Firefox 144.0.2 (playwright build v1497) downloaded to /home/runner/.cache/ms-playwright/firefox-1497 -Downloading Webkit 26.0 (playwright build v2227) from https://cdn.playwright.dev/dbazure/download/playwright/builds/webkit/2227/webkit-ubuntu-24.04.zip -| | 0% of 95.9 MiB -|■■■■■■■■ | 10% of 95.9 MiB -|■■■■■■■■■■■■■■■■ | 20% of 95.9 MiB -|■■■■■■■■■■■■■■■■■■■■■■■■ | 30% of 95.9 MiB -|■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ | 40% of 95.9 MiB -|■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ | 50% of 95.9 MiB -|■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ | 60% of 95.9 MiB -|■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ | 70% of 95.9 MiB -|■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ | 80% of 95.9 MiB -|■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ | 90% of 95.9 MiB -|■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■| 100% of 95.9 MiB -Webkit 26.0 (playwright build v2227) downloaded to /home/runner/.cache/ms-playwright/webkit-2227 -Downloading FFMPEG playwright build v1011 from https://cdn.playwright.dev/dbazure/download/playwright/builds/ffmpeg/1011/ffmpeg-linux.zip -| | 0% of 2.3 MiB -|■■■■■■■■ | 10% of 2.3 MiB -|■■■■■■■■■■■■■■■■ | 20% of 2.3 MiB -|■■■■■■■■■■■■■■■■■■■■■■■■ | 30% of 2.3 MiB -|■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ | 40% of 2.3 MiB -|■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ | 50% of 2.3 MiB -|■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ | 60% of 2.3 MiB -|■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ | 70% of 2.3 MiB -|■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ | 80% of 2.3 MiB -|■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ | 90% of 2.3 MiB -|■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■| 100% of 2.3 MiB -FFMPEG playwright build v1011 downloaded to /home/runner/.cache/ms-playwright/ffmpeg-1011 -Playwright Host validation warning: -╔══════════════════════════════════════════════════════╗ -║ Host system is missing dependencies to run browsers. ║ -║ Missing libraries: ║ -║ libgtk-4.so.1 ║ -║ libgraphene-1.0.so.0 ║ -║ libwoff2dec.so.1.0.2 ║ -║ libvpx.so.9 ║ -║ libevent-2.1.so.7 ║ -║ libopus.so.0 ║ -║ libgstallocators-1.0.so.0 ║ -║ libgstapp-1.0.so.0 ║ -║ libgstpbutils-1.0.so.0 ║ -║ libgstaudio-1.0.so.0 ║ -║ libgsttag-1.0.so.0 ║ -║ libgstvideo-1.0.so.0 ║ -║ libgstgl-1.0.so.0 ║ -║ libgstcodecparsers-1.0.so.0 ║ -║ libgstfft-1.0.so.0 ║ -║ libflite.so.1 ║ -║ libflite_usenglish.so.1 ║ -║ libflite_cmu_grapheme_lang.so.1 ║ -║ libflite_cmu_grapheme_lex.so.1 ║ -║ libflite_cmu_indic_lang.so.1 ║ -║ libflite_cmu_indic_lex.so.1 ║ -║ libflite_cmulex.so.1 ║ -║ libflite_cmu_time_awb.so.1 ║ -║ libflite_cmu_us_awb.so.1 ║ -║ libflite_cmu_us_kal16.so.1 ║ -║ libflite_cmu_us_kal.so.1 ║ -║ libflite_cmu_us_rms.so.1 ║ -║ libflite_cmu_us_slt.so.1 ║ -║ libavif.so.16 ║ -║ libharfbuzz-icu.so.0 ║ -║ libsecret-1.so.0 ║ -║ libhyphen.so.0 ║ -║ libmanette-0.2.so.0 ║ -║ libGLESv2.so.2 ║ -║ libx264.so ║ -╚══════════════════════════════════════════════════════╝ - at validateDependenciesLinux (/home/runner/work/MQTT-Explorer/MQTT-Explorer/node_modules/playwright-core/lib/server/registry/dependencies.js:269:9) - at process.processTicksAndRejections (node:internal/process/task_queues:103:5) - at async Registry._validateHostRequirements (/home/runner/work/MQTT-Explorer/MQTT-Explorer/node_modules/playwright-core/lib/server/registry/index.js:990:14) - at async Registry._validateHostRequirementsForExecutableIfNeeded (/home/runner/work/MQTT-Explorer/MQTT-Explorer/node_modules/playwright-core/lib/server/registry/index.js:1112:7) - at async Registry.validateHostRequirementsForExecutablesIfNeeded (/home/runner/work/MQTT-Explorer/MQTT-Explorer/node_modules/playwright-core/lib/server/registry/index.js:1101:7) - at async r. (/home/runner/work/MQTT-Explorer/MQTT-Explorer/node_modules/playwright-core/lib/cli/program.js:176:7) -Starting server with LLM support... -Waiting for server to start... -Using credentials from environment variables -Username: test -============================================================ -MQTT Explorer server running on http://localhost:3000 -============================================================ -Server started successfully after 2 seconds -Using MQTT broker at 127.0.0.1:1883 -Mobile viewport: DISABLED (desktop 1280x720) -yarn run v1.22.22 -$ tsc && mocha --require source-map-support/register dist/src/spec/ui-tests.spec.js - - - MQTT Explorer UI Tests -Creating test-specific MQTT mock (no timers)... -Connecting to MQTT broker at mqtt://127.0.0.1:1883 -Successfully connected to MQTT broker -Connected to MQTT broker at mqtt://127.0.0.1:1883 -Publishing test topics... -Launching browser in browser mode... -Browser URL: http://localhost:3000 -Mobile viewport: false -Using desktop viewport: 1280x720 -Browser console: info %cDownload the React DevTools for a better development experience: https://react.dev/link/react-devtools font-weight:bold -Browser console: error Socket connection error: Authentication required -Browser console: error Authentication error: Authentication required -Waiting for page to initialize and auth check... -Checking for login dialog... -Login dialog detected, authenticating... -Client authenticated: test -Client connected, auth disabled: false -LLM service is available on backend -Browser console: log Socket connected successfully -Browser console: log Authentication successful -Browser console: log subscribing storage/load/response/a32bdc96-665a-4417-979b-e24d769f31bd -Browser console: log Auth status received from server: {authDisabled: false} -Browser console: log LLM availability received from server: true -storage/load/response/a32bdc96-665a-4417-979b-e24d769f31bd { data: undefined, store: 'Settings' } undefined -Browser console: log received {id: a32bdc96-665a-4417-979b-e24d769f31bd, payload: Object} -Browser console: log subscribing getAppVersion/response/e8dfcb88-5dee-471b-b1a2-5bb39ac268b6 -getAppVersion/response/e8dfcb88-5dee-471b-b1a2-5bb39ac268b6 0.4.0-beta.5 undefined -Browser console: log subscribing storage/load/response/4f229c5d-647b-4e20-9685-01803420b5c6 -Browser console: log subscribing getAppVersion/response/2fddfe61-cc1c-4e10-9a0d-008bc26f2350 -storage/load/response/4f229c5d-647b-4e20-9685-01803420b5c6 { data: undefined, store: 'ConnectionManager_connections' } undefined -getAppVersion/response/2fddfe61-cc1c-4e10-9a0d-008bc26f2350 0.4.0-beta.5 undefined -Browser console: log received {id: e8dfcb88-5dee-471b-b1a2-5bb39ac268b6, payload: 0.4.0-beta.5} -Browser console: error Connecting to 'https://api.github.com/repos/thomasnordquist/mqtt-explorer/releases' violates the following Content Security Policy directive: "connect-src 'self' ws: wss:". The action has been blocked. -Browser console: log received {id: 4f229c5d-647b-4e20-9685-01803420b5c6, payload: Object} -Browser console: log subscribing storage/store/response/3d2ddb0d-9e94-4c1d-b9e0-059091eee9c3 -Browser console: log received {id: 2fddfe61-cc1c-4e10-9a0d-008bc26f2350, payload: 0.4.0-beta.5} -storage/store/response/3d2ddb0d-9e94-4c1d-b9e0-059091eee9c3 undefined undefined -Browser error: [Error [AxiosError]: AxiosError] -storage/load/response/5f1b3e00-8e6f-4813-9dda-387baf9f9a64 { - data: { - 'mqtt.eclipseprojects.io': { - configVersion: 1, - certValidation: true, - clientId: 'mqtt-explorer-26e5f5c6', - id: 'mqtt.eclipseprojects.io', - name: 'mqtt.eclipseprojects.io', - encryption: false, - subscriptions: [Array], - type: 'mqtt', - host: 'mqtt.eclipseprojects.io', - port: 1883, - protocol: 'mqtt' - }, - 'test.mosquitto.org': { - configVersion: 1, - certValidation: true, - clientId: 'mqtt-explorer-d6d97851', - id: 'test.mosquitto.org', - name: 'test.mosquitto.org', - encryption: false, - subscriptions: [Array], - type: 'mqtt', - host: 'test.mosquitto.org', - port: 1883, - protocol: 'mqtt' - } - }, - store: 'ConnectionManager_connections' -} undefined -Browser console: log received {id: 3d2ddb0d-9e94-4c1d-b9e0-059091eee9c3} -Browser console: log subscribing storage/load/response/5f1b3e00-8e6f-4813-9dda-387baf9f9a64 -Browser console: log received {id: 5f1b3e00-8e6f-4813-9dda-387baf9f9a64, payload: Object} -Browser console: error Received `%s` for a non-boolean attribute `%s`. - -If you want to write it to the DOM, pass a string instead: %s="%s" or %s={value.toString()}. true button button true button -Browser console: warning MUI Grid: The `item` prop has been removed and is no longer necessary. You can safely remove it. - -Browser console: warning MUI Grid: The `xs` prop has been removed. See https://mui.com/material-ui/migration/upgrade-to-grid-v2/ for migration instructions. - -Browser console: error Received `%s` for a non-boolean attribute `%s`. - -If you want to write it to the DOM, pass a string instead: %s="%s" or %s={value.toString()}. true notched notched true notched -Browser console: warning componentWillReceiveProps has been renamed, and is not recommended for use. See https://react.dev/link/unsafe-component-lifecycles for details. - -* Move data fetching code or side effects to componentDidUpdate. -* If you're updating state whenever props change, refactor your code to use memoization techniques or move it to static getDerivedStateFromProps. Learn more at: https://react.dev/link/derived-state -* Rename componentWillReceiveProps to UNSAFE_componentWillReceiveProps to suppress this warning in non-strict mode. In React 18.x, only the UNSAFE_ name will work. To rename all deprecated lifecycles to their new names, you can run `npx react-codemod rename-unsafe-lifecycles` in your project source folder. - -Please update the following components: %s TreeComponent -Browser console: warning componentWillUpdate has been renamed, and is not recommended for use. See https://react.dev/link/unsafe-component-lifecycles for details. - -* Move data fetching code or side effects to componentDidUpdate. -* Rename componentWillUpdate to UNSAFE_componentWillUpdate to suppress this warning in non-strict mode. In React 18.x, only the UNSAFE_ name will work. To rename all deprecated lifecycles to their new names, you can run `npx react-codemod rename-unsafe-lifecycles` in your project source folder. - -Please update the following components: %s TreeComponent -Browser console: warning MUI: You have provided an out-of-range value `en-US` for the select (name="time-locale") component. -Consider providing a value that matches one of the available options or ''. -The available values are `en`, `af`, `ar-dz`, `ar-kw`, `ar-ly`, `ar-ma`, `ar-ps`, `ar-sa`, `ar-tn`, `ar`, `az`, `be`, `bg`, `bm`, `bn-bd`, `bn`, `bo`, `br`, `bs`, `ca`, `cs`, `cv`, `cy`, `da`, `de-at`, `de-ch`, `de`, `dv`, `el`, `en-au`, `en-ca`, `en-gb`, `en-ie`, `en-il`, `en-in`, `en-nz`, `en-sg`, `eo`, `es-do`, `es-mx`, `es-us`, `es`, `et`, `eu`, `fa`, `fi`, `fil`, `fo`, `fr-ca`, `fr-ch`, `fr`, `fy`, `ga`, `gd`, `gl`, `gom-deva`, `gom-latn`, `gu`, `he`, `hi`, `hr`, `hu`, `hy-am`, `id`, `is`, `it-ch`, `it`, `ja`, `jv`, `ka`, `kk`, `km`, `kn`, `ko`, `ku-kmr`, `ku`, `ky`, `lb`, `lo`, `lt`, `lv`, `me`, `mi`, `mk`, `ml`, `mn`, `mr`, `ms-my`, `ms`, `mt`, `my`, `nb`, `ne`, `nl-be`, `nl`, `nn`, `oc-lnc`, `pa-in`, `pl`, `pt-br`, `pt`, `ro`, `ru`, `sd`, `se`, `si`, `sk`, `sl`, `sq`, `sr-cyrl`, `sr`, `ss`, `sv`, `sw`, `ta`, `te`, `tet`, `tg`, `th`, `tk`, `tl-ph`, `tlh`, `tr`, `tzl`, `tzm-latn`, `tzm`, `ug-cn`, `uk`, `ur`, `uz-latn`, `uz`, `vi`, `x-pseudo`, `yo`, `zh-cn`, `zh-hk`, `zh-mo`, `zh-tw`. -Browser console: warning MUI: You have provided an out-of-range value `en-US` for the select (name="time-locale") component. -Consider providing a value that matches one of the available options or ''. -The available values are `en`, `af`, `ar-dz`, `ar-kw`, `ar-ly`, `ar-ma`, `ar-ps`, `ar-sa`, `ar-tn`, `ar`, `az`, `be`, `bg`, `bm`, `bn-bd`, `bn`, `bo`, `br`, `bs`, `ca`, `cs`, `cv`, `cy`, `da`, `de-at`, `de-ch`, `de`, `dv`, `el`, `en-au`, `en-ca`, `en-gb`, `en-ie`, `en-il`, `en-in`, `en-nz`, `en-sg`, `eo`, `es-do`, `es-mx`, `es-us`, `es`, `et`, `eu`, `fa`, `fi`, `fil`, `fo`, `fr-ca`, `fr-ch`, `fr`, `fy`, `ga`, `gd`, `gl`, `gom-deva`, `gom-latn`, `gu`, `he`, `hi`, `hr`, `hu`, `hy-am`, `id`, `is`, `it-ch`, `it`, `ja`, `jv`, `ka`, `kk`, `km`, `kn`, `ko`, `ku-kmr`, `ku`, `ky`, `lb`, `lo`, `lt`, `lv`, `me`, `mi`, `mk`, `ml`, `mn`, `mr`, `ms-my`, `ms`, `mt`, `my`, `nb`, `ne`, `nl-be`, `nl`, `nn`, `oc-lnc`, `pa-in`, `pl`, `pt-br`, `pt`, `ro`, `ru`, `sd`, `se`, `si`, `sk`, `sl`, `sq`, `sr-cyrl`, `sr`, `ss`, `sv`, `sw`, `ta`, `te`, `tet`, `tg`, `th`, `tk`, `tl-ph`, `tlh`, `tr`, `tzl`, `tzm-latn`, `tzm`, `ug-cn`, `uk`, `ur`, `uz-latn`, `uz`, `vi`, `x-pseudo`, `yo`, `zh-cn`, `zh-hk`, `zh-mo`, `zh-tw`. -Browser console: error Creating a worker from 'blob:http://localhost:3000/81d1c8a2-e19c-40a6-bf56-ef9f878e45d2' violates the following Content Security Policy directive: "script-src 'self' 'unsafe-inline' 'unsafe-eval'". Note that 'worker-src' was not explicitly set, so 'script-src' is used as a fallback. The action has been blocked. -Browser console: warning ReactAce: editor option enableBasicAutocompletion was activated but not found. Did you need to import a related tool or did you possibly mispell the option? -Browser console: warning ReactAce: editor option enableLiveAutocompletion was activated but not found. Did you need to import a related tool or did you possibly mispell the option? -Browser console: warning ReactAce: editor option enableSnippets was activated but not found. Did you need to import a related tool or did you possibly mispell the option? -Authentication complete -Waiting for MQTT connection dialog... -Connecting to MQTT broker... -Browser console: log subscribing conn/state/mqtt.eclipseprojects.io -Browser console: log subscribing storage/load/response/92360798-5cab-4063-9c05-690b975e678b -storage/load/response/92360798-5cab-4063-9c05-690b975e678b { data: undefined, store: 'connection_view_state' } undefined -Browser console: log subscribing conn/mqtt.eclipseprojects.io -Browser console: log received {id: 92360798-5cab-4063-9c05-690b975e678b, payload: Object} -Setup complete - Connection Management -expandTopic livingroom/lamp -Expanding level 1/2: livingroom -Using selector: span[data-test-topic='livingroom'] -Found 1 elements matching 'livingroom' -Using match #0 for 'livingroom' -Clicking topic text to expand: livingroom -Topic livingroom is collapsed, clicking to expand -Waiting for children of 'livingroom' to render... -After expanding 'livingroom', found 1 elements for next topic 'lamp' -Expanding level 2/2: lamp -Using selector: span[data-test-topic='lamp'] -Found 1 elements matching 'lamp' -Using match #0 for 'lamp' -Clicking topic text to expand: lamp -Topic lamp is collapsed, clicking to expand - ✔ should connect and expand livingroom/lamp topic (4779ms) - Topic Tree Structure -expandTopic kitchen/coffee_maker -Expanding level 1/2: kitchen -Using selector: span[data-test-topic='kitchen'] -Found 1 elements matching 'kitchen' -Using match #0 for 'kitchen' -Clicking topic text to expand: kitchen -Topic kitchen is collapsed, clicking to expand -Waiting for children of 'kitchen' to render... -After expanding 'kitchen', found 1 elements for next topic 'coffee_maker' -Expanding level 2/2: coffee_maker -Using selector: span[data-test-topic='coffee_maker'] -Found 1 elements matching 'coffee_maker' -Using match #0 for 'coffee_maker' -Clicking topic text to expand: coffee_maker -Topic coffee_maker has no children, clicking to select - ✔ should expand and display kitchen/coffee_maker with JSON payload (4252ms) -expandTopic livingroom/lamp/state -Expanding level 1/3: livingroom -Using selector: span[data-test-topic='livingroom'] -Found 1 elements matching 'livingroom' -Using match #0 for 'livingroom' -Clicking topic text to expand: livingroom -Topic livingroom is already expanded, clicking to select -Browser console: log destroy 0 -Browser console: log destroy 0 -Browser console: log destroy 0 -Browser console: log destroy 0 -Waiting for children of 'livingroom' to render... -After expanding 'livingroom', found 1 elements for next topic 'lamp' -Expanding level 2/3: lamp -Using selector: span[data-test-topic='lamp'] -Found 1 elements matching 'lamp' -Using match #0 for 'lamp' -Clicking topic text to expand: lamp -Topic lamp is collapsed, clicking to expand -Waiting for children of 'lamp' to render... -After expanding 'lamp', found 1 elements for next topic 'state' -Expanding level 3/3: state -Using selector: span[data-test-topic='state'] -Found 1 elements matching 'state' -Using match #0 for 'state' -Clicking topic text to expand: state -Topic state has no children, clicking to select - ✔ should expand nested topic livingroom/lamp/state (6366ms) - Search Functionality -Browser console: log subscribing conn/mqtt.eclipseprojects.io -Browser console: log destroy 0 -Browser console: log destroy 0 -Browser console: log destroy 0 -Browser console: log destroy 0 -Browser console: log destroy 0 -Browser console: log destroy 0 -Browser console: log destroy 0 -Browser console: error A component is changing an uncontrolled input to be controlled. This is likely caused by the value changing from undefined to a defined value, which should not happen. Decide between using a controlled or uncontrolled input element for the lifetime of the component. More info: https://react.dev/link/controlled-components -Browser console: log subscribing conn/mqtt.eclipseprojects.io -Browser console: warning destroy -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log subscribing conn/mqtt.eclipseprojects.io -Browser console: warning destroy -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 0 -Browser console: log destroy 0 -Browser console: log destroy 0 -Browser console: log destroy 0 -Browser console: log destroy 0 -Browser console: log destroy 0 -Browser console: log subscribing conn/mqtt.eclipseprojects.io -Browser console: warning destroy -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log subscribing conn/mqtt.eclipseprojects.io -Browser console: warning destroy -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log subscribing conn/mqtt.eclipseprojects.io -Browser console: warning destroy -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log subscribing conn/mqtt.eclipseprojects.io -Browser console: warning destroy -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: warning destroy -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -expandTopic kitchen/temperature -Expanding level 1/2: kitchen -Using selector: span[data-test-topic='kitchen'] -Found 1 elements matching 'kitchen' -Using match #0 for 'kitchen' -Clicking topic text to expand: kitchen -Topic kitchen is collapsed, clicking to expand -Browser console: log destroy 0 -Waiting for children of 'kitchen' to render... -After expanding 'kitchen', found 1 elements for next topic 'temperature' -Expanding level 2/2: temperature -Using selector: span[data-test-topic='temperature'] -Found 1 elements matching 'temperature' -Using match #0 for 'temperature' -Clicking topic text to expand: temperature -Topic temperature has no children, clicking to select - ✔ should search for temperature and expand kitchen/temperature (9966ms) -Browser console: log subscribing conn/mqtt.eclipseprojects.io -Browser console: log destroy 0 -Browser console: log destroy 0 -Browser console: log destroy 0 -Browser console: log destroy 0 -Browser console: log destroy 0 -Browser console: log destroy 0 -Browser console: log subscribing conn/mqtt.eclipseprojects.io -Browser console: warning destroy -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log subscribing conn/mqtt.eclipseprojects.io -Browser console: warning destroy -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log subscribing conn/mqtt.eclipseprojects.io -Browser console: warning destroy -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log subscribing conn/mqtt.eclipseprojects.io -Browser console: warning destroy -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log subscribing conn/mqtt.eclipseprojects.io -Browser console: warning destroy -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log subscribing conn/mqtt.eclipseprojects.io -Browser console: warning destroy -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log subscribing conn/mqtt.eclipseprojects.io -Browser console: warning destroy -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log subscribing conn/mqtt.eclipseprojects.io -Browser console: warning destroy -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log subscribing conn/mqtt.eclipseprojects.io -Browser console: warning destroy -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log subscribing conn/mqtt.eclipseprojects.io -Browser console: warning destroy -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log subscribing conn/mqtt.eclipseprojects.io -Browser console: warning destroy -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log subscribing conn/mqtt.eclipseprojects.io -Browser console: warning destroy -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log subscribing conn/mqtt.eclipseprojects.io -Browser console: warning destroy -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log subscribing conn/mqtt.eclipseprojects.io -Browser console: warning destroy -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log subscribing conn/mqtt.eclipseprojects.io -Browser console: warning destroy -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log subscribing conn/mqtt.eclipseprojects.io -Browser console: warning destroy -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log subscribing conn/mqtt.eclipseprojects.io -Browser console: warning destroy -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log subscribing conn/mqtt.eclipseprojects.io -Browser console: warning destroy -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log subscribing conn/mqtt.eclipseprojects.io -Browser console: warning destroy -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log subscribing conn/mqtt.eclipseprojects.io -Browser console: warning destroy -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log subscribing conn/mqtt.eclipseprojects.io -Browser console: warning destroy -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log subscribing conn/mqtt.eclipseprojects.io -Browser console: warning destroy -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: warning destroy -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -Browser console: log destroy 2 -expandTopic kitchen/lamp -Expanding level 1/2: kitchen -Using selector: span[data-test-topic='kitchen'] -Found 1 elements matching 'kitchen' -Using match #0 for 'kitchen' -Clicking topic text to expand: kitchen -Topic kitchen is collapsed, clicking to expand -Waiting for children of 'kitchen' to render... -After expanding 'kitchen', found 1 elements for next topic 'lamp' -Expanding level 2/2: lamp -Using selector: span[data-test-topic='lamp'] -Found 1 elements matching 'lamp' -Using match #0 for 'lamp' -Clicking topic text to expand: lamp -Topic lamp is collapsed, clicking to expand - ✔ should search for lamp and expand kitchen/lamp (11597ms) - Clipboard Operations -expandTopic livingroom/lamp/state -Expanding level 1/3: livingroom -Using selector: span[data-test-topic='livingroom'] -Found 1 elements matching 'livingroom' -Using match #0 for 'livingroom' -Clicking topic text to expand: livingroom -Topic livingroom is collapsed, clicking to expand -Waiting for children of 'livingroom' to render... -After expanding 'livingroom', found 2 elements for next topic 'lamp' -Expanding level 2/3: lamp -Using selector: span[data-test-topic='lamp'] -Found 2 elements matching 'lamp' -Using match #0 for 'lamp' -Clicking topic text to expand: lamp -Topic lamp is collapsed, clicking to expand -Waiting for children of 'lamp' to render... -After expanding 'lamp', found 2 elements for next topic 'state' -Expanding level 3/3: state -Using selector: span[data-test-topic='state'] -Found 2 elements matching 'state' -Using match #0 for 'state' -Clicking topic text to expand: state -Topic state has no children, clicking to select - ✔ should copy topic path to clipboard in both Electron and browser modes (10520ms) - ✔ should copy message value to clipboard in both Electron and browser modes (583ms) - File Save/Download Operations -Browser mode: File downloaded: mqtt-message-2026-01-31T07-33-59-282Z.bin - ✔ should save/download message to file in both Electron and browser modes (583ms) - AI Assistant Chat -expandTopic livingroom/lamp -Expanding level 1/2: livingroom -Using selector: span[data-test-topic='livingroom'] -Found 1 elements matching 'livingroom' -Using match #0 for 'livingroom' -Clicking topic text to expand: livingroom -Topic livingroom is already expanded, clicking to select -Browser console: log destroy 0 -Browser console: log destroy 0 -Browser console: log destroy 0 -Browser console: log destroy 0 -Waiting for children of 'livingroom' to render... -After expanding 'livingroom', found 1 elements for next topic 'lamp' -Expanding level 2/2: lamp -Using selector: span[data-test-topic='lamp'] -Found 1 elements matching 'lamp' -Using match #0 for 'lamp' -Clicking topic text to expand: lamp -Topic lamp is already expanded, clicking to select -Browser console: log destroy 0 -Browser console: log subscribing llm/chat/response/492a97e2-bdc4-437b-aa1f-3c000b8db57b - -================================================================================ -LLM RPC HANDLER - Received Request -================================================================================ -Messages count: 2 -Topic context provided: false -Tool results provided: false - -Last user message: -Content length: 260 characters -Content starts with "Context:"? false -Content preview: Based on this MQTT topic and its context, suggest 3-5 brief, relevant questions a user might want to ask. Return ONLY a JSON array of question strings, nothing else. - -Context: -Topic: kitchen/lamp -Subtopics: 1 - -Format: ["question 1", "question 2", "question 3"] -================================================================================ - -LLM Provider: openai -LLM Model: gpt-5-mini -================================================================================ - - ✔ should expand AI Assistant panel when clicked (5296ms) -Browser console: log LLM Service: Topic context added to message -Browser console: log Context length: 32 characters -Browser console: log Context preview: Topic: kitchen/lamp -Subtopics: 1... - -================================================================================ -LLM RPC HANDLER - Received Request -================================================================================ -Browser console: log LLM Service: User message added to history -Messages count: 2 -Topic context provided: true -Browser console: log Message content length: 78 characters -Tool results provided: false -Topic context length: 32 characters -Browser console: log Message preview: Context: -Topic: kitchen/lamp -Subtopics: 1 - -User Question: What is this device?... -Topic context preview: Topic: kitchen/lamp -Subtopics: 1... - -Last user message: -Content length: 78 characters -Content starts with "Context:"? true -Browser console: log subscribing llm/chat/response/d3ce6696-1a83-48cd-ba62-b692cd8756b0 -Content preview: Context: -Topic: kitchen/lamp -Subtopics: 1 - -User Question: What is this device? -================================================================================ - -LLM Provider: openai -LLM Model: gpt-5-mini -================================================================================ - - -================================================================================ -LLM RESPONSE -================================================================================ -Duration: 1135 ms -Provider: openai -Model: gpt-5-mini-2025-08-07 -Content length: 0 -Usage: { promptTokens: 1378, completionTokens: 26, totalTokens: 1404 } -================================================================================ - - -================================================================================ -LLM RPC HANDLER - Returning response -================================================================================ -Response length: 0 -Has debugInfo: true -================================================================================ - -llm/chat/response/d3ce6696-1a83-48cd-ba62-b692cd8756b0 { - response: '', - toolCalls: [ - { - id: 'call_rQKzguDNmzGTmXmbQJaviWNW', - type: 'function', - function: [Object] - } - ], - debugInfo: { - provider: 'openai', - model: 'gpt-5-mini-2025-08-07', - request: { - url: 'https://api.openai.com/v1/chat/completions', - messageCount: 2 - }, - response: { contentLength: 0, usage: [Object] }, - timing: { duration_ms: 1135, timestamp: '2026-01-31T07:34:06.338Z' } - } -} undefined -Browser console: log received {id: d3ce6696-1a83-48cd-ba62-b692cd8756b0, payload: Object} -Browser console: log LLM Service: Received result from backend: {response: , toolCalls: Array(1), debugInfo: Object} -Browser console: log LLM Service: Has response: false -Browser console: log LLM Service: Has toolCalls: true -Browser console: log LLM Service: Has debugInfo: true -Browser console: error LLM Service: Invalid result from backend: {response: , toolCalls: Array(1), debugInfo: Object} -Browser console: error LLM Service Error: Error: No response from AI assistant - at LLMService.sendMessage (webpack-internal:///24932:11047:23) - at async eval (webpack-internal:///24932:11330:33) -Browser console: error AI Assistant error: Error: No response from AI assistant - at LLMService.sendMessage (webpack-internal:///24932:11109:19) - at async eval (webpack-internal:///24932:11330:33) -Browser console: error Error details: Error: No response from AI assistant - at LLMService.sendMessage (webpack-internal:///24932:11109:19) - at async eval (webpack-internal:///24932:11330:33) - -================================================================================ -LLM RESPONSE -================================================================================ -Duration: 2904 ms -Provider: openai -Model: gpt-5-mini-2025-08-07 -Content length: 612 -Usage: { promptTokens: 1424, completionTokens: 152, totalTokens: 1576 } -================================================================================ - - -================================================================================ -LLM RPC HANDLER - Returning response -================================================================================ -Response length: 612 -Has debugInfo: true -================================================================================ - -llm/chat/response/492a97e2-bdc4-437b-aa1f-3c000b8db57b { - response: '[\n' + - ' "Is the kitchen/lamp topic a controllable device (can I publish to a /set or /cmd topic to switch it)?",\n' + - ' "What payload format does the kitchen/lamp expect for turning on/off or setting brightness (e.g., \\"ON\\"/\\"OFF\\" or JSON)?",\n' + - ' "Is the kitchen/lamp retained and does it publish a /state or /status subtopic I can subscribe to for current state?",\n' + - ' "Are there any automation-friendly topics nearby (like kitchen/lamp/brightness or kitchen/lamp/color) to support dimming or color changes?",\n' + - ' "Can you provide recent message history for kitchen/lamp to see usage patterns and confirm topic behaviour?"\n' + - ']', - toolCalls: undefined, - debugInfo: { - provider: 'openai', - model: 'gpt-5-mini-2025-08-07', - request: { - url: 'https://api.openai.com/v1/chat/completions', - messageCount: 2 - }, - response: { contentLength: 612, usage: [Object] }, - timing: { duration_ms: 2904, timestamp: '2026-01-31T07:34:06.995Z' } - } -} undefined -Browser console: log received {id: 492a97e2-bdc4-437b-aa1f-3c000b8db57b, payload: Object}