docs: update all 11 dashboard screenshots + README references
19
README.md
@@ -165,8 +165,8 @@
|
||||
<details>
|
||||
<summary>📸 展开查看更多截图</summary>
|
||||
|
||||
### 天下要闻
|
||||

|
||||
### 省部调度
|
||||

|
||||
|
||||
### 任务流转详情
|
||||

|
||||
@@ -180,6 +180,21 @@
|
||||
### 官员总览
|
||||

|
||||
|
||||
### 会话记录
|
||||

|
||||
|
||||
### 奏折归档
|
||||

|
||||
|
||||
### 圣旨模板
|
||||

|
||||
|
||||
### 天下要闻
|
||||

|
||||
|
||||
### 上朝仪式
|
||||

|
||||
|
||||
</details>
|
||||
|
||||
---
|
||||
|
||||
19
README_EN.md
@@ -98,8 +98,8 @@ This isn't a cute metaphor. It's **real separation of powers** for AI:
|
||||
<details>
|
||||
<summary>📸 More screenshots</summary>
|
||||
|
||||
### Daily Briefing
|
||||

|
||||
### Agent Monitor
|
||||

|
||||
|
||||
### Task Detail
|
||||

|
||||
@@ -113,6 +113,21 @@ This isn't a cute metaphor. It's **real separation of powers** for AI:
|
||||
### Officials
|
||||

|
||||
|
||||
### Sessions
|
||||

|
||||
|
||||
### Memorials Archive
|
||||

|
||||
|
||||
### Command Templates
|
||||

|
||||
|
||||
### Daily Briefing
|
||||

|
||||
|
||||
### Court Ceremony
|
||||

|
||||
|
||||
</details>
|
||||
|
||||
---
|
||||
|
||||
|
Before Width: | Height: | Size: 442 KiB After Width: | Height: | Size: 501 KiB |
BIN
docs/screenshots/02-monitor.png
Normal file
|
After Width: | Height: | Size: 259 KiB |
|
Before Width: | Height: | Size: 441 KiB |
|
Before Width: | Height: | Size: 634 KiB After Width: | Height: | Size: 680 KiB |
|
Before Width: | Height: | Size: 314 KiB After Width: | Height: | Size: 309 KiB |
|
Before Width: | Height: | Size: 252 KiB After Width: | Height: | Size: 193 KiB |
|
Before Width: | Height: | Size: 369 KiB After Width: | Height: | Size: 410 KiB |
BIN
docs/screenshots/07-sessions.png
Normal file
|
After Width: | Height: | Size: 416 KiB |
BIN
docs/screenshots/08-memorials.png
Normal file
|
After Width: | Height: | Size: 429 KiB |
BIN
docs/screenshots/09-templates.png
Normal file
|
After Width: | Height: | Size: 332 KiB |
BIN
docs/screenshots/10-morning-briefing.png
Normal file
|
After Width: | Height: | Size: 566 KiB |
BIN
docs/screenshots/11-ceremony.png
Normal file
|
After Width: | Height: | Size: 100 KiB |
105
scripts/take_screenshots.py
Normal file
@@ -0,0 +1,105 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Take all dashboard screenshots for the README using Playwright."""
|
||||
from playwright.sync_api import sync_playwright
|
||||
import time, os
|
||||
|
||||
SHOTS = os.path.join(os.path.dirname(__file__), '..', 'docs', 'screenshots')
|
||||
URL = 'http://localhost:7891'
|
||||
|
||||
def main():
|
||||
os.makedirs(SHOTS, exist_ok=True)
|
||||
with sync_playwright() as p:
|
||||
browser = p.chromium.launch(headless=True)
|
||||
ctx = browser.new_context(
|
||||
viewport={'width': 1920, 'height': 1080},
|
||||
device_scale_factor=2,
|
||||
color_scheme='dark',
|
||||
)
|
||||
page = ctx.new_page()
|
||||
|
||||
# ── Clear ceremony localStorage so it doesn't show on every load
|
||||
page.goto(URL)
|
||||
page.evaluate("localStorage.setItem('openclaw_court_date', new Date().toISOString().substring(0,10))")
|
||||
page.reload()
|
||||
page.wait_for_load_state('networkidle')
|
||||
page.wait_for_timeout(2000)
|
||||
|
||||
# 1. Kanban main (default tab = edicts)
|
||||
print('📋 01 kanban...')
|
||||
page.screenshot(path=os.path.join(SHOTS, '01-kanban-main.png'), full_page=False)
|
||||
|
||||
# 2. Monitor (省部调度)
|
||||
print('🔭 02 monitor...')
|
||||
page.click('[data-tab="monitor"]')
|
||||
page.wait_for_timeout(800)
|
||||
page.screenshot(path=os.path.join(SHOTS, '02-monitor.png'), full_page=False)
|
||||
|
||||
# 3. Task detail - click first task card
|
||||
print('📜 03 task detail...')
|
||||
page.click('[data-tab="edicts"]')
|
||||
page.wait_for_timeout(500)
|
||||
cards = page.locator('.edict-card')
|
||||
if cards.count() > 0:
|
||||
cards.first.click()
|
||||
page.wait_for_timeout(800)
|
||||
page.screenshot(path=os.path.join(SHOTS, '03-task-detail.png'), full_page=False)
|
||||
# Close modal
|
||||
page.keyboard.press('Escape')
|
||||
page.wait_for_timeout(300)
|
||||
|
||||
# 4. Model config
|
||||
print('⚙️ 04 models...')
|
||||
page.click('[data-tab="models"]')
|
||||
page.wait_for_load_state('networkidle')
|
||||
page.wait_for_timeout(1000)
|
||||
page.screenshot(path=os.path.join(SHOTS, '04-model-config.png'), full_page=False)
|
||||
|
||||
# 5. Skills config
|
||||
print('🛠️ 05 skills...')
|
||||
page.click('[data-tab="skills"]')
|
||||
page.wait_for_load_state('networkidle')
|
||||
page.wait_for_timeout(1000)
|
||||
page.screenshot(path=os.path.join(SHOTS, '05-skills-config.png'), full_page=False)
|
||||
|
||||
# 6. Officials overview
|
||||
print('👥 06 officials...')
|
||||
page.click('[data-tab="officials"]')
|
||||
page.wait_for_timeout(1000)
|
||||
page.screenshot(path=os.path.join(SHOTS, '06-official-overview.png'), full_page=False)
|
||||
|
||||
# 7. Sessions
|
||||
print('💬 07 sessions...')
|
||||
page.click('[data-tab="sessions"]')
|
||||
page.wait_for_timeout(800)
|
||||
page.screenshot(path=os.path.join(SHOTS, '07-sessions.png'), full_page=False)
|
||||
|
||||
# 8. Memorials
|
||||
print('📜 08 memorials...')
|
||||
page.click('[data-tab="memorials"]')
|
||||
page.wait_for_timeout(800)
|
||||
page.screenshot(path=os.path.join(SHOTS, '08-memorials.png'), full_page=False)
|
||||
|
||||
# 9. Templates
|
||||
print('📜 09 templates...')
|
||||
page.click('[data-tab="templates"]')
|
||||
page.wait_for_timeout(800)
|
||||
page.screenshot(path=os.path.join(SHOTS, '09-templates.png'), full_page=False)
|
||||
|
||||
# 10. Morning briefing
|
||||
print('📰 10 morning...')
|
||||
page.click('[data-tab="morning"]')
|
||||
page.wait_for_timeout(1000)
|
||||
page.screenshot(path=os.path.join(SHOTS, '10-morning-briefing.png'), full_page=False)
|
||||
|
||||
# 11. Ceremony - clear date then reload
|
||||
print('🎬 11 ceremony...')
|
||||
page.evaluate("localStorage.removeItem('openclaw_court_date')")
|
||||
page.reload()
|
||||
page.wait_for_timeout(2500)
|
||||
page.screenshot(path=os.path.join(SHOTS, '11-ceremony.png'), full_page=False)
|
||||
|
||||
browser.close()
|
||||
print('✅ All screenshots saved to', SHOTS)
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||