@openqa/cli 2.1.0 → 2.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agent/index-v2.js +33 -55
- package/dist/agent/index-v2.js.map +1 -1
- package/dist/agent/index.js +85 -116
- package/dist/agent/index.js.map +1 -1
- package/dist/cli/daemon.js +86 -71
- package/dist/cli/dashboard.html.js +53 -16
- package/dist/cli/index.js +53 -16
- package/dist/cli/server.js +53 -16
- package/package.json +1 -1
package/dist/cli/daemon.js
CHANGED
|
@@ -1576,13 +1576,9 @@ var BrowserTools = class {
|
|
|
1576
1576
|
{
|
|
1577
1577
|
name: "navigate_to_page",
|
|
1578
1578
|
description: "Navigate to a specific URL in the application",
|
|
1579
|
-
parameters:
|
|
1580
|
-
type: "
|
|
1581
|
-
|
|
1582
|
-
url: { type: "string", description: "The URL to navigate to" }
|
|
1583
|
-
},
|
|
1584
|
-
required: ["url"]
|
|
1585
|
-
},
|
|
1579
|
+
parameters: [
|
|
1580
|
+
{ name: "url", type: "string", description: "The URL to navigate to", required: true }
|
|
1581
|
+
],
|
|
1586
1582
|
execute: async ({ url }) => {
|
|
1587
1583
|
if (!this.page) await this.initialize();
|
|
1588
1584
|
try {
|
|
@@ -1595,24 +1591,20 @@ var BrowserTools = class {
|
|
|
1595
1591
|
input: url,
|
|
1596
1592
|
output: `Page title: ${title}`
|
|
1597
1593
|
});
|
|
1598
|
-
return `Successfully navigated to ${url}. Page title: "${title}"
|
|
1594
|
+
return { output: `Successfully navigated to ${url}. Page title: "${title}"` };
|
|
1599
1595
|
} catch (error) {
|
|
1600
|
-
return `Failed to navigate: ${error instanceof Error ? error.message : String(error)}
|
|
1596
|
+
return { output: `Failed to navigate: ${error instanceof Error ? error.message : String(error)}`, error: error instanceof Error ? error.message : String(error) };
|
|
1601
1597
|
}
|
|
1602
1598
|
}
|
|
1603
1599
|
},
|
|
1604
1600
|
{
|
|
1605
1601
|
name: "click_element",
|
|
1606
1602
|
description: "Click on an element using a CSS selector",
|
|
1607
|
-
parameters:
|
|
1608
|
-
type: "
|
|
1609
|
-
|
|
1610
|
-
selector: { type: "string", description: "CSS selector of the element to click" }
|
|
1611
|
-
},
|
|
1612
|
-
required: ["selector"]
|
|
1613
|
-
},
|
|
1603
|
+
parameters: [
|
|
1604
|
+
{ name: "selector", type: "string", description: "CSS selector of the element to click", required: true }
|
|
1605
|
+
],
|
|
1614
1606
|
execute: async ({ selector }) => {
|
|
1615
|
-
if (!this.page) return "Browser not initialized. Navigate to a page first.";
|
|
1607
|
+
if (!this.page) return { output: "Browser not initialized. Navigate to a page first.", error: "Browser not initialized" };
|
|
1616
1608
|
try {
|
|
1617
1609
|
await this.page.click(selector, { timeout: 5e3 });
|
|
1618
1610
|
this.db.createAction({
|
|
@@ -1621,25 +1613,21 @@ var BrowserTools = class {
|
|
|
1621
1613
|
description: `Clicked element: ${selector}`,
|
|
1622
1614
|
input: selector
|
|
1623
1615
|
});
|
|
1624
|
-
return `Successfully clicked element: ${selector}
|
|
1616
|
+
return { output: `Successfully clicked element: ${selector}` };
|
|
1625
1617
|
} catch (error) {
|
|
1626
|
-
return `Failed to click element: ${error instanceof Error ? error.message : String(error)}
|
|
1618
|
+
return { output: `Failed to click element: ${error instanceof Error ? error.message : String(error)}`, error: error instanceof Error ? error.message : String(error) };
|
|
1627
1619
|
}
|
|
1628
1620
|
}
|
|
1629
1621
|
},
|
|
1630
1622
|
{
|
|
1631
1623
|
name: "fill_input",
|
|
1632
1624
|
description: "Fill an input field with text",
|
|
1633
|
-
parameters:
|
|
1634
|
-
type: "
|
|
1635
|
-
|
|
1636
|
-
|
|
1637
|
-
text: { type: "string", description: "Text to fill in the input" }
|
|
1638
|
-
},
|
|
1639
|
-
required: ["selector", "text"]
|
|
1640
|
-
},
|
|
1625
|
+
parameters: [
|
|
1626
|
+
{ name: "selector", type: "string", description: "CSS selector of the input field", required: true },
|
|
1627
|
+
{ name: "text", type: "string", description: "Text to fill in the input", required: true }
|
|
1628
|
+
],
|
|
1641
1629
|
execute: async ({ selector, text }) => {
|
|
1642
|
-
if (!this.page) return "Browser not initialized. Navigate to a page first.";
|
|
1630
|
+
if (!this.page) return { output: "Browser not initialized. Navigate to a page first.", error: "Browser not initialized" };
|
|
1643
1631
|
try {
|
|
1644
1632
|
await this.page.fill(selector, text);
|
|
1645
1633
|
this.db.createAction({
|
|
@@ -1648,24 +1636,20 @@ var BrowserTools = class {
|
|
|
1648
1636
|
description: `Filled input ${selector}`,
|
|
1649
1637
|
input: `${selector} = ${text}`
|
|
1650
1638
|
});
|
|
1651
|
-
return `Successfully filled input ${selector} with text
|
|
1639
|
+
return { output: `Successfully filled input ${selector} with text` };
|
|
1652
1640
|
} catch (error) {
|
|
1653
|
-
return `Failed to fill input: ${error instanceof Error ? error.message : String(error)}
|
|
1641
|
+
return { output: `Failed to fill input: ${error instanceof Error ? error.message : String(error)}`, error: error instanceof Error ? error.message : String(error) };
|
|
1654
1642
|
}
|
|
1655
1643
|
}
|
|
1656
1644
|
},
|
|
1657
1645
|
{
|
|
1658
1646
|
name: "take_screenshot",
|
|
1659
1647
|
description: "Take a screenshot of the current page for evidence",
|
|
1660
|
-
parameters:
|
|
1661
|
-
type: "
|
|
1662
|
-
|
|
1663
|
-
name: { type: "string", description: "Name for the screenshot file" }
|
|
1664
|
-
},
|
|
1665
|
-
required: ["name"]
|
|
1666
|
-
},
|
|
1648
|
+
parameters: [
|
|
1649
|
+
{ name: "name", type: "string", description: "Name for the screenshot file", required: true }
|
|
1650
|
+
],
|
|
1667
1651
|
execute: async ({ name }) => {
|
|
1668
|
-
if (!this.page) return "Browser not initialized. Navigate to a page first.";
|
|
1652
|
+
if (!this.page) return { output: "Browser not initialized. Navigate to a page first.", error: "Browser not initialized" };
|
|
1669
1653
|
try {
|
|
1670
1654
|
const filename = `${Date.now()}_${name}.png`;
|
|
1671
1655
|
const path2 = join4(this.screenshotDir, filename);
|
|
@@ -1676,38 +1660,32 @@ var BrowserTools = class {
|
|
|
1676
1660
|
description: `Screenshot: ${name}`,
|
|
1677
1661
|
screenshot_path: path2
|
|
1678
1662
|
});
|
|
1679
|
-
return `Screenshot saved: ${path2}
|
|
1663
|
+
return { output: `Screenshot saved: ${path2}` };
|
|
1680
1664
|
} catch (error) {
|
|
1681
|
-
return `Failed to take screenshot: ${error instanceof Error ? error.message : String(error)}
|
|
1665
|
+
return { output: `Failed to take screenshot: ${error instanceof Error ? error.message : String(error)}`, error: error instanceof Error ? error.message : String(error) };
|
|
1682
1666
|
}
|
|
1683
1667
|
}
|
|
1684
1668
|
},
|
|
1685
1669
|
{
|
|
1686
1670
|
name: "get_page_content",
|
|
1687
1671
|
description: "Get the text content of the current page",
|
|
1688
|
-
parameters:
|
|
1689
|
-
type: "object",
|
|
1690
|
-
properties: {}
|
|
1691
|
-
},
|
|
1672
|
+
parameters: [],
|
|
1692
1673
|
execute: async () => {
|
|
1693
|
-
if (!this.page) return "Browser not initialized. Navigate to a page first.";
|
|
1674
|
+
if (!this.page) return { output: "Browser not initialized. Navigate to a page first.", error: "Browser not initialized" };
|
|
1694
1675
|
try {
|
|
1695
1676
|
const content = await this.page.textContent("body");
|
|
1696
|
-
return content?.slice(0, 1e3) || "No content found";
|
|
1677
|
+
return { output: content?.slice(0, 1e3) || "No content found" };
|
|
1697
1678
|
} catch (error) {
|
|
1698
|
-
return `Failed to get content: ${error instanceof Error ? error.message : String(error)}
|
|
1679
|
+
return { output: `Failed to get content: ${error instanceof Error ? error.message : String(error)}`, error: error instanceof Error ? error.message : String(error) };
|
|
1699
1680
|
}
|
|
1700
1681
|
}
|
|
1701
1682
|
},
|
|
1702
1683
|
{
|
|
1703
1684
|
name: "check_console_errors",
|
|
1704
1685
|
description: "Check for JavaScript console errors on the page",
|
|
1705
|
-
parameters:
|
|
1706
|
-
type: "object",
|
|
1707
|
-
properties: {}
|
|
1708
|
-
},
|
|
1686
|
+
parameters: [],
|
|
1709
1687
|
execute: async () => {
|
|
1710
|
-
if (!this.page) return "Browser not initialized. Navigate to a page first.";
|
|
1688
|
+
if (!this.page) return { output: "Browser not initialized. Navigate to a page first.", error: "Browser not initialized" };
|
|
1711
1689
|
const errors = [];
|
|
1712
1690
|
this.page.on("console", (msg) => {
|
|
1713
1691
|
if (msg.type() === "error") {
|
|
@@ -1716,10 +1694,10 @@ var BrowserTools = class {
|
|
|
1716
1694
|
});
|
|
1717
1695
|
await this.page.waitForTimeout(2e3);
|
|
1718
1696
|
if (errors.length > 0) {
|
|
1719
|
-
return `Found ${errors.length} console errors:
|
|
1720
|
-
${errors.join("\n")}
|
|
1697
|
+
return { output: `Found ${errors.length} console errors:
|
|
1698
|
+
${errors.join("\n")}` };
|
|
1721
1699
|
}
|
|
1722
|
-
return "No console errors detected";
|
|
1700
|
+
return { output: "No console errors detected" };
|
|
1723
1701
|
}
|
|
1724
1702
|
}
|
|
1725
1703
|
];
|
|
@@ -4759,7 +4737,7 @@ function getDashboardHTML() {
|
|
|
4759
4737
|
.logo-mark {
|
|
4760
4738
|
width: 34px;
|
|
4761
4739
|
height: 34px;
|
|
4762
|
-
background:
|
|
4740
|
+
background: transparent;
|
|
4763
4741
|
border-radius: 8px;
|
|
4764
4742
|
display: grid;
|
|
4765
4743
|
place-items: center;
|
|
@@ -5381,7 +5359,9 @@ function getDashboardHTML() {
|
|
|
5381
5359
|
<!-- Sidebar -->
|
|
5382
5360
|
<aside>
|
|
5383
5361
|
<div class="logo">
|
|
5384
|
-
<div class="logo-mark"
|
|
5362
|
+
<div class="logo-mark">
|
|
5363
|
+
<img src="https://openqa.orkajs.com/_next/image?url=https%3A%2F%2Forkajs.com%2Floutre-orka-qa.png&w=256&q=75" alt="OpenQA Logo" style="width: 40px; height: 40px;">
|
|
5364
|
+
</div>
|
|
5385
5365
|
<div>
|
|
5386
5366
|
<div class="logo-name">OpenQA</div>
|
|
5387
5367
|
<div class="logo-version">v2.1.0 \xB7 OSS</div>
|
|
@@ -5391,42 +5371,69 @@ function getDashboardHTML() {
|
|
|
5391
5371
|
<div class="nav-section">
|
|
5392
5372
|
<div class="nav-label">Overview</div>
|
|
5393
5373
|
<a class="nav-item active" href="/">
|
|
5394
|
-
<span class="icon"
|
|
5374
|
+
<span class="icon">
|
|
5375
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-gauge-icon lucide-gauge"><path d="m12 14 4-4"/><path d="M3.34 19a10 10 0 1 1 17.32 0"/></svg>
|
|
5376
|
+
</span> Dashboard
|
|
5395
5377
|
</a>
|
|
5396
5378
|
<a class="nav-item" href="/kanban">
|
|
5397
|
-
<span class="icon"
|
|
5379
|
+
<span class="icon">
|
|
5380
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-square-dashed-kanban-icon lucide-square-dashed-kanban"><path d="M8 7v7"/><path d="M12 7v4"/><path d="M16 7v9"/><path d="M5 3a2 2 0 0 0-2 2"/><path d="M9 3h1"/><path d="M14 3h1"/><path d="M19 3a2 2 0 0 1 2 2"/><path d="M21 9v1"/><path d="M21 14v1"/><path d="M21 19a2 2 0 0 1-2 2"/><path d="M14 21h1"/><path d="M9 21h1"/><path d="M5 21a2 2 0 0 1-2-2"/><path d="M3 14v1"/><path d="M3 9v1"/></svg>
|
|
5381
|
+
</span> Kanban
|
|
5398
5382
|
<span class="badge" id="kanban-count">0</span>
|
|
5399
5383
|
</a>
|
|
5400
5384
|
|
|
5401
5385
|
<div class="nav-label">Agents</div>
|
|
5402
5386
|
<a class="nav-item" href="javascript:void(0)" onclick="scrollToSection('agents-table')">
|
|
5403
|
-
<span class="icon"
|
|
5387
|
+
<span class="icon">
|
|
5388
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-activity-icon lucide-activity"><path d="M22 12h-2.48a2 2 0 0 0-1.93 1.46l-2.35 8.36a.25.25 0 0 1-.48 0L9.24 2.18a.25.25 0 0 0-.48 0l-2.35 8.36A2 2 0 0 1 4.49 12H2"/></svg>
|
|
5389
|
+
</span> Active Agents
|
|
5404
5390
|
</a>
|
|
5405
5391
|
<a class="nav-item" href="javascript:void(0)" onclick="switchAgentTab('specialists'); scrollToSection('agents-table')">
|
|
5406
|
-
<span class="icon"
|
|
5392
|
+
<span class="icon">
|
|
5393
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-hat-glasses-icon lucide-hat-glasses"><path d="M14 18a2 2 0 0 0-4 0"/><path d="m19 11-2.11-6.657a2 2 0 0 0-2.752-1.148l-1.276.61A2 2 0 0 1 12 4H8.5a2 2 0 0 0-1.925 1.456L5 11"/><path d="M2 11h20"/><circle cx="17" cy="18" r="3"/><circle cx="7" cy="18" r="3"/></svg>
|
|
5394
|
+
</span> Specialists
|
|
5407
5395
|
</a>
|
|
5408
5396
|
<a class="nav-item" href="javascript:void(0)" onclick="scrollToSection('interventions-panel')">
|
|
5409
|
-
<span class="icon"
|
|
5397
|
+
<span class="icon">
|
|
5398
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-user-cog-icon lucide-user-cog"><path d="M10 15H6a4 4 0 0 0-4 4v2"/><path d="m14.305 16.53.923-.382"/><path d="m15.228 13.852-.923-.383"/><path d="m16.852 12.228-.383-.923"/><path d="m16.852 17.772-.383.924"/><path d="m19.148 12.228.383-.923"/><path d="m19.53 18.696-.382-.924"/><path d="m20.772 13.852.924-.383"/><path d="m20.772 16.148.924.383"/><circle cx="18" cy="15" r="3"/><circle cx="9" cy="7" r="4"/></svg>
|
|
5399
|
+
</span> Interventions
|
|
5410
5400
|
<span class="badge" id="intervention-count" style="background: var(--red);">0</span>
|
|
5411
5401
|
</a>
|
|
5412
5402
|
|
|
5413
5403
|
<div class="nav-label">Analysis</div>
|
|
5414
5404
|
<a class="nav-item" href="javascript:void(0)" onclick="scrollToSection('issues-panel')">
|
|
5415
|
-
<span class="icon"
|
|
5405
|
+
<span class="icon">
|
|
5406
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-bug-play-icon lucide-bug-play"><path d="M10 19.655A6 6 0 0 1 6 14v-3a4 4 0 0 1 4-4h4a4 4 0 0 1 4 3.97"/><path d="M14 15.003a1 1 0 0 1 1.517-.859l4.997 2.997a1 1 0 0 1 0 1.718l-4.997 2.997a1 1 0 0 1-1.517-.86z"/>
|
|
5407
|
+
<path d="M14.12 3.88 16 2"/>
|
|
5408
|
+
<path d="M21 5a4 4 0 0 1-3.55 3.97"/>
|
|
5409
|
+
<path d="M3 21a4 4 0 0 1 3.81-4"/>
|
|
5410
|
+
<path d="M3 5a4 4 0 0 0 3.55 3.97"/>
|
|
5411
|
+
<path d="M6 13H2"/><path d="m8 2 1.88 1.88"/>
|
|
5412
|
+
<path d="M9 7.13V6a3 3 0 1 1 6 0v1.13"/>
|
|
5413
|
+
</svg>
|
|
5414
|
+
</span> Bug Reports
|
|
5416
5415
|
</a>
|
|
5417
5416
|
<a class="nav-item" href="javascript:void(0)" onclick="switchChartTab('performance'); scrollToSection('chart-performance')">
|
|
5418
|
-
<span class="icon"
|
|
5417
|
+
<span class="icon">
|
|
5418
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chart-spline-icon lucide-chart-spline"><path d="M3 3v16a2 2 0 0 0 2 2h16"/><path d="M7 16c.5-2 1.5-7 4-7 2 0 2 3 4 3 2.5 0 4.5-5 5-7"/></svg>
|
|
5419
|
+
</span> Performance
|
|
5419
5420
|
</a>
|
|
5420
5421
|
<a class="nav-item" href="javascript:void(0)" onclick="scrollToSection('activity-list')">
|
|
5421
|
-
<span class="icon"
|
|
5422
|
+
<span class="icon">
|
|
5423
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-scroll-text-icon lucide-scroll-text"><path d="M15 12h-5"/><path d="M15 8h-5"/><path d="M19 17V5a2 2 0 0 0-2-2H4"/><path d="M8 21h12a2 2 0 0 0 2-2v-1a1 1 0 0 0-1-1H11a1 1 0 0 0-1 1v1a2 2 0 1 1-4 0V5a2 2 0 1 0-4 0v2a1 1 0 0 0 1 1h3"/></svg>
|
|
5424
|
+
</span> Logs
|
|
5422
5425
|
</a>
|
|
5423
5426
|
|
|
5424
5427
|
<div class="nav-label">System</div>
|
|
5425
5428
|
<a class="nav-item" href="/config">
|
|
5426
|
-
<span class="icon"
|
|
5429
|
+
<span class="icon">
|
|
5430
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-columns3-cog-icon lucide-columns-3-cog"><path d="M10.5 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2v5.5"/><path d="m14.3 19.6 1-.4"/><path d="M15 3v7.5"/><path d="m15.2 16.9-.9-.3"/><path d="m16.6 21.7.3-.9"/><path d="m16.8 15.3-.4-1"/><path d="m19.1 15.2.3-.9"/><path d="m19.6 21.7-.4-1"/><path d="m20.7 16.8 1-.4"/><path d="m21.7 19.4-.9-.3"/><path d="M9 3v18"/><circle cx="18" cy="18" r="3"/></svg>
|
|
5431
|
+
</span> Config
|
|
5427
5432
|
</a>
|
|
5428
5433
|
<a class="nav-item" href="/config/env">
|
|
5429
|
-
<span class="icon"
|
|
5434
|
+
<span class="icon">
|
|
5435
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-columns3-cog-icon lucide-columns-3-cog"><path d="M10.5 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2v5.5"/><path d="m14.3 19.6 1-.4"/><path d="M15 3v7.5"/><path d="m15.2 16.9-.9-.3"/><path d="m16.6 21.7.3-.9"/><path d="m16.8 15.3-.4-1"/><path d="m19.1 15.2.3-.9"/><path d="m19.6 21.7-.4-1"/><path d="m20.7 16.8 1-.4"/><path d="m21.7 19.4-.9-.3"/><path d="M9 3v18"/><circle cx="18" cy="18" r="3"/></svg>
|
|
5436
|
+
</span> Environment
|
|
5430
5437
|
</a>
|
|
5431
5438
|
</div>
|
|
5432
5439
|
|
|
@@ -5458,7 +5465,9 @@ function getDashboardHTML() {
|
|
|
5458
5465
|
<div class="metric-card">
|
|
5459
5466
|
<div class="metric-header">
|
|
5460
5467
|
<div class="metric-label">Active Agents</div>
|
|
5461
|
-
<div class="metric-icon"
|
|
5468
|
+
<div class="metric-icon">
|
|
5469
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-square-terminal-icon lucide-square-terminal"><path d="m7 11 2-2-2-2"/><path d="M11 13h4"/><rect width="18" height="18" x="3" y="3" rx="2" ry="2"/></svg>
|
|
5470
|
+
</div>
|
|
5462
5471
|
</div>
|
|
5463
5472
|
<div class="metric-value" id="active-agents">0</div>
|
|
5464
5473
|
<div class="metric-change positive" id="agents-change">\u2191 0 from last hour</div>
|
|
@@ -5466,7 +5475,9 @@ function getDashboardHTML() {
|
|
|
5466
5475
|
<div class="metric-card">
|
|
5467
5476
|
<div class="metric-header">
|
|
5468
5477
|
<div class="metric-label">Total Actions</div>
|
|
5469
|
-
<div class="metric-icon"
|
|
5478
|
+
<div class="metric-icon">
|
|
5479
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-list-todo-icon lucide-list-todo"><path d="M13 5h8"/><path d="M13 12h8"/><path d="M13 19h8"/><path d="m3 17 2 2 4-4"/><rect x="3" y="4" width="6" height="6" rx="1"/></svg>
|
|
5480
|
+
</div>
|
|
5470
5481
|
</div>
|
|
5471
5482
|
<div class="metric-value" id="total-actions">0</div>
|
|
5472
5483
|
<div class="metric-change positive" id="actions-change">\u2191 0% this session</div>
|
|
@@ -5474,7 +5485,9 @@ function getDashboardHTML() {
|
|
|
5474
5485
|
<div class="metric-card">
|
|
5475
5486
|
<div class="metric-header">
|
|
5476
5487
|
<div class="metric-label">Bugs Found</div>
|
|
5477
|
-
<div class="metric-icon"
|
|
5488
|
+
<div class="metric-icon">
|
|
5489
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-list-todo-icon lucide-list-todo"><path d="M13 5h8"/><path d="M13 12h8"/><path d="M13 19h8"/><path d="m3 17 2 2 4-4"/><rect x="3" y="4" width="6" height="6" rx="1"/></svg>
|
|
5490
|
+
</div>
|
|
5478
5491
|
</div>
|
|
5479
5492
|
<div class="metric-value" id="bugs-found">0</div>
|
|
5480
5493
|
<div class="metric-change negative" id="bugs-change">\u2193 0 from yesterday</div>
|
|
@@ -5482,7 +5495,9 @@ function getDashboardHTML() {
|
|
|
5482
5495
|
<div class="metric-card">
|
|
5483
5496
|
<div class="metric-header">
|
|
5484
5497
|
<div class="metric-label">Success Rate</div>
|
|
5485
|
-
<div class="metric-icon"
|
|
5498
|
+
<div class="metric-icon">
|
|
5499
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-cloud-check-icon lucide-cloud-check"><path d="m17 15-5.5 5.5L9 18"/><path d="M5.516 16.07A7 7 0 1 1 15.71 8h1.79a4.5 4.5 0 0 1 3.501 7.327"/></svg>
|
|
5500
|
+
</div>
|
|
5486
5501
|
</div>
|
|
5487
5502
|
<div class="metric-value" id="success-rate">\u2014</div>
|
|
5488
5503
|
<div class="metric-change positive" id="rate-change">\u2191 0 pts improvement</div>
|
|
@@ -75,7 +75,7 @@ function getDashboardHTML() {
|
|
|
75
75
|
.logo-mark {
|
|
76
76
|
width: 34px;
|
|
77
77
|
height: 34px;
|
|
78
|
-
background:
|
|
78
|
+
background: transparent;
|
|
79
79
|
border-radius: 8px;
|
|
80
80
|
display: grid;
|
|
81
81
|
place-items: center;
|
|
@@ -697,7 +697,9 @@ function getDashboardHTML() {
|
|
|
697
697
|
<!-- Sidebar -->
|
|
698
698
|
<aside>
|
|
699
699
|
<div class="logo">
|
|
700
|
-
<div class="logo-mark"
|
|
700
|
+
<div class="logo-mark">
|
|
701
|
+
<img src="https://openqa.orkajs.com/_next/image?url=https%3A%2F%2Forkajs.com%2Floutre-orka-qa.png&w=256&q=75" alt="OpenQA Logo" style="width: 40px; height: 40px;">
|
|
702
|
+
</div>
|
|
701
703
|
<div>
|
|
702
704
|
<div class="logo-name">OpenQA</div>
|
|
703
705
|
<div class="logo-version">v2.1.0 \xB7 OSS</div>
|
|
@@ -707,42 +709,69 @@ function getDashboardHTML() {
|
|
|
707
709
|
<div class="nav-section">
|
|
708
710
|
<div class="nav-label">Overview</div>
|
|
709
711
|
<a class="nav-item active" href="/">
|
|
710
|
-
<span class="icon"
|
|
712
|
+
<span class="icon">
|
|
713
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-gauge-icon lucide-gauge"><path d="m12 14 4-4"/><path d="M3.34 19a10 10 0 1 1 17.32 0"/></svg>
|
|
714
|
+
</span> Dashboard
|
|
711
715
|
</a>
|
|
712
716
|
<a class="nav-item" href="/kanban">
|
|
713
|
-
<span class="icon"
|
|
717
|
+
<span class="icon">
|
|
718
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-square-dashed-kanban-icon lucide-square-dashed-kanban"><path d="M8 7v7"/><path d="M12 7v4"/><path d="M16 7v9"/><path d="M5 3a2 2 0 0 0-2 2"/><path d="M9 3h1"/><path d="M14 3h1"/><path d="M19 3a2 2 0 0 1 2 2"/><path d="M21 9v1"/><path d="M21 14v1"/><path d="M21 19a2 2 0 0 1-2 2"/><path d="M14 21h1"/><path d="M9 21h1"/><path d="M5 21a2 2 0 0 1-2-2"/><path d="M3 14v1"/><path d="M3 9v1"/></svg>
|
|
719
|
+
</span> Kanban
|
|
714
720
|
<span class="badge" id="kanban-count">0</span>
|
|
715
721
|
</a>
|
|
716
722
|
|
|
717
723
|
<div class="nav-label">Agents</div>
|
|
718
724
|
<a class="nav-item" href="javascript:void(0)" onclick="scrollToSection('agents-table')">
|
|
719
|
-
<span class="icon"
|
|
725
|
+
<span class="icon">
|
|
726
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-activity-icon lucide-activity"><path d="M22 12h-2.48a2 2 0 0 0-1.93 1.46l-2.35 8.36a.25.25 0 0 1-.48 0L9.24 2.18a.25.25 0 0 0-.48 0l-2.35 8.36A2 2 0 0 1 4.49 12H2"/></svg>
|
|
727
|
+
</span> Active Agents
|
|
720
728
|
</a>
|
|
721
729
|
<a class="nav-item" href="javascript:void(0)" onclick="switchAgentTab('specialists'); scrollToSection('agents-table')">
|
|
722
|
-
<span class="icon"
|
|
730
|
+
<span class="icon">
|
|
731
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-hat-glasses-icon lucide-hat-glasses"><path d="M14 18a2 2 0 0 0-4 0"/><path d="m19 11-2.11-6.657a2 2 0 0 0-2.752-1.148l-1.276.61A2 2 0 0 1 12 4H8.5a2 2 0 0 0-1.925 1.456L5 11"/><path d="M2 11h20"/><circle cx="17" cy="18" r="3"/><circle cx="7" cy="18" r="3"/></svg>
|
|
732
|
+
</span> Specialists
|
|
723
733
|
</a>
|
|
724
734
|
<a class="nav-item" href="javascript:void(0)" onclick="scrollToSection('interventions-panel')">
|
|
725
|
-
<span class="icon"
|
|
735
|
+
<span class="icon">
|
|
736
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-user-cog-icon lucide-user-cog"><path d="M10 15H6a4 4 0 0 0-4 4v2"/><path d="m14.305 16.53.923-.382"/><path d="m15.228 13.852-.923-.383"/><path d="m16.852 12.228-.383-.923"/><path d="m16.852 17.772-.383.924"/><path d="m19.148 12.228.383-.923"/><path d="m19.53 18.696-.382-.924"/><path d="m20.772 13.852.924-.383"/><path d="m20.772 16.148.924.383"/><circle cx="18" cy="15" r="3"/><circle cx="9" cy="7" r="4"/></svg>
|
|
737
|
+
</span> Interventions
|
|
726
738
|
<span class="badge" id="intervention-count" style="background: var(--red);">0</span>
|
|
727
739
|
</a>
|
|
728
740
|
|
|
729
741
|
<div class="nav-label">Analysis</div>
|
|
730
742
|
<a class="nav-item" href="javascript:void(0)" onclick="scrollToSection('issues-panel')">
|
|
731
|
-
<span class="icon"
|
|
743
|
+
<span class="icon">
|
|
744
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-bug-play-icon lucide-bug-play"><path d="M10 19.655A6 6 0 0 1 6 14v-3a4 4 0 0 1 4-4h4a4 4 0 0 1 4 3.97"/><path d="M14 15.003a1 1 0 0 1 1.517-.859l4.997 2.997a1 1 0 0 1 0 1.718l-4.997 2.997a1 1 0 0 1-1.517-.86z"/>
|
|
745
|
+
<path d="M14.12 3.88 16 2"/>
|
|
746
|
+
<path d="M21 5a4 4 0 0 1-3.55 3.97"/>
|
|
747
|
+
<path d="M3 21a4 4 0 0 1 3.81-4"/>
|
|
748
|
+
<path d="M3 5a4 4 0 0 0 3.55 3.97"/>
|
|
749
|
+
<path d="M6 13H2"/><path d="m8 2 1.88 1.88"/>
|
|
750
|
+
<path d="M9 7.13V6a3 3 0 1 1 6 0v1.13"/>
|
|
751
|
+
</svg>
|
|
752
|
+
</span> Bug Reports
|
|
732
753
|
</a>
|
|
733
754
|
<a class="nav-item" href="javascript:void(0)" onclick="switchChartTab('performance'); scrollToSection('chart-performance')">
|
|
734
|
-
<span class="icon"
|
|
755
|
+
<span class="icon">
|
|
756
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chart-spline-icon lucide-chart-spline"><path d="M3 3v16a2 2 0 0 0 2 2h16"/><path d="M7 16c.5-2 1.5-7 4-7 2 0 2 3 4 3 2.5 0 4.5-5 5-7"/></svg>
|
|
757
|
+
</span> Performance
|
|
735
758
|
</a>
|
|
736
759
|
<a class="nav-item" href="javascript:void(0)" onclick="scrollToSection('activity-list')">
|
|
737
|
-
<span class="icon"
|
|
760
|
+
<span class="icon">
|
|
761
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-scroll-text-icon lucide-scroll-text"><path d="M15 12h-5"/><path d="M15 8h-5"/><path d="M19 17V5a2 2 0 0 0-2-2H4"/><path d="M8 21h12a2 2 0 0 0 2-2v-1a1 1 0 0 0-1-1H11a1 1 0 0 0-1 1v1a2 2 0 1 1-4 0V5a2 2 0 1 0-4 0v2a1 1 0 0 0 1 1h3"/></svg>
|
|
762
|
+
</span> Logs
|
|
738
763
|
</a>
|
|
739
764
|
|
|
740
765
|
<div class="nav-label">System</div>
|
|
741
766
|
<a class="nav-item" href="/config">
|
|
742
|
-
<span class="icon"
|
|
767
|
+
<span class="icon">
|
|
768
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-columns3-cog-icon lucide-columns-3-cog"><path d="M10.5 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2v5.5"/><path d="m14.3 19.6 1-.4"/><path d="M15 3v7.5"/><path d="m15.2 16.9-.9-.3"/><path d="m16.6 21.7.3-.9"/><path d="m16.8 15.3-.4-1"/><path d="m19.1 15.2.3-.9"/><path d="m19.6 21.7-.4-1"/><path d="m20.7 16.8 1-.4"/><path d="m21.7 19.4-.9-.3"/><path d="M9 3v18"/><circle cx="18" cy="18" r="3"/></svg>
|
|
769
|
+
</span> Config
|
|
743
770
|
</a>
|
|
744
771
|
<a class="nav-item" href="/config/env">
|
|
745
|
-
<span class="icon"
|
|
772
|
+
<span class="icon">
|
|
773
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-columns3-cog-icon lucide-columns-3-cog"><path d="M10.5 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2v5.5"/><path d="m14.3 19.6 1-.4"/><path d="M15 3v7.5"/><path d="m15.2 16.9-.9-.3"/><path d="m16.6 21.7.3-.9"/><path d="m16.8 15.3-.4-1"/><path d="m19.1 15.2.3-.9"/><path d="m19.6 21.7-.4-1"/><path d="m20.7 16.8 1-.4"/><path d="m21.7 19.4-.9-.3"/><path d="M9 3v18"/><circle cx="18" cy="18" r="3"/></svg>
|
|
774
|
+
</span> Environment
|
|
746
775
|
</a>
|
|
747
776
|
</div>
|
|
748
777
|
|
|
@@ -774,7 +803,9 @@ function getDashboardHTML() {
|
|
|
774
803
|
<div class="metric-card">
|
|
775
804
|
<div class="metric-header">
|
|
776
805
|
<div class="metric-label">Active Agents</div>
|
|
777
|
-
<div class="metric-icon"
|
|
806
|
+
<div class="metric-icon">
|
|
807
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-square-terminal-icon lucide-square-terminal"><path d="m7 11 2-2-2-2"/><path d="M11 13h4"/><rect width="18" height="18" x="3" y="3" rx="2" ry="2"/></svg>
|
|
808
|
+
</div>
|
|
778
809
|
</div>
|
|
779
810
|
<div class="metric-value" id="active-agents">0</div>
|
|
780
811
|
<div class="metric-change positive" id="agents-change">\u2191 0 from last hour</div>
|
|
@@ -782,7 +813,9 @@ function getDashboardHTML() {
|
|
|
782
813
|
<div class="metric-card">
|
|
783
814
|
<div class="metric-header">
|
|
784
815
|
<div class="metric-label">Total Actions</div>
|
|
785
|
-
<div class="metric-icon"
|
|
816
|
+
<div class="metric-icon">
|
|
817
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-list-todo-icon lucide-list-todo"><path d="M13 5h8"/><path d="M13 12h8"/><path d="M13 19h8"/><path d="m3 17 2 2 4-4"/><rect x="3" y="4" width="6" height="6" rx="1"/></svg>
|
|
818
|
+
</div>
|
|
786
819
|
</div>
|
|
787
820
|
<div class="metric-value" id="total-actions">0</div>
|
|
788
821
|
<div class="metric-change positive" id="actions-change">\u2191 0% this session</div>
|
|
@@ -790,7 +823,9 @@ function getDashboardHTML() {
|
|
|
790
823
|
<div class="metric-card">
|
|
791
824
|
<div class="metric-header">
|
|
792
825
|
<div class="metric-label">Bugs Found</div>
|
|
793
|
-
<div class="metric-icon"
|
|
826
|
+
<div class="metric-icon">
|
|
827
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-list-todo-icon lucide-list-todo"><path d="M13 5h8"/><path d="M13 12h8"/><path d="M13 19h8"/><path d="m3 17 2 2 4-4"/><rect x="3" y="4" width="6" height="6" rx="1"/></svg>
|
|
828
|
+
</div>
|
|
794
829
|
</div>
|
|
795
830
|
<div class="metric-value" id="bugs-found">0</div>
|
|
796
831
|
<div class="metric-change negative" id="bugs-change">\u2193 0 from yesterday</div>
|
|
@@ -798,7 +833,9 @@ function getDashboardHTML() {
|
|
|
798
833
|
<div class="metric-card">
|
|
799
834
|
<div class="metric-header">
|
|
800
835
|
<div class="metric-label">Success Rate</div>
|
|
801
|
-
<div class="metric-icon"
|
|
836
|
+
<div class="metric-icon">
|
|
837
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-cloud-check-icon lucide-cloud-check"><path d="m17 15-5.5 5.5L9 18"/><path d="M5.516 16.07A7 7 0 1 1 15.71 8h1.79a4.5 4.5 0 0 1 3.501 7.327"/></svg>
|
|
838
|
+
</div>
|
|
802
839
|
</div>
|
|
803
840
|
<div class="metric-value" id="success-rate">\u2014</div>
|
|
804
841
|
<div class="metric-change positive" id="rate-change">\u2191 0 pts improvement</div>
|