同步技能全量内容:更新主说明、跨平台安装脚本与面板UI审计脚本
This commit is contained in:
+8
-8
@@ -1,13 +1,13 @@
|
|||||||
# 技能安装与迁移说明
|
# 技能安装与迁移说明
|
||||||
|
|
||||||
技能名称:**panel-project-deploy**
|
技能名称:**project-init-panel-deploy**
|
||||||
用途:自动化克隆、初始化、品牌化、Docker 部署开源项目,并强制改造成炫酷科技感玻璃面板风格 UI;
|
用途:自动化克隆、初始化、品牌化、Docker 部署开源项目,并强制改造成炫酷科技感玻璃面板风格 UI;
|
||||||
同时对齐《开源软件改造部署外包服务合同》的交付物与验收标准。
|
同时对齐《开源软件改造部署外包服务合同》的交付物与验收标准。
|
||||||
|
|
||||||
## 一、目录内容
|
## 一、目录内容
|
||||||
|
|
||||||
```text
|
```text
|
||||||
panel-project-deploy/
|
project-init-panel-deploy/
|
||||||
├── SKILL.md # 技能主文件(18 步工作流,必须先读)
|
├── SKILL.md # 技能主文件(18 步工作流,必须先读)
|
||||||
├── references/
|
├── references/
|
||||||
│ ├── panel-ui.md # 面板风格 UI 设计与验收规范
|
│ ├── panel-ui.md # 面板风格 UI 设计与验收规范
|
||||||
@@ -35,20 +35,20 @@ panel-project-deploy/
|
|||||||
|
|
||||||
```powershell
|
```powershell
|
||||||
# 1. 复制整个技能目录到 Codex 技能目录
|
# 1. 复制整个技能目录到 Codex 技能目录
|
||||||
Copy-Item .\panel-project-deploy "$env:USERPROFILE\.codex\skills\" -Recurse -Force
|
Copy-Item .\project-init-panel-deploy "$env:USERPROFILE\.codex\skills\" -Recurse -Force
|
||||||
|
|
||||||
# 2. 执行安装脚本(创建 venv 可选;安装 playwright)
|
# 2. 执行安装脚本(创建 venv 可选;安装 playwright)
|
||||||
.\panel-project-deploy\install.ps1
|
.\project-init-panel-deploy\install.ps1
|
||||||
```
|
```
|
||||||
|
|
||||||
### macOS / Linux
|
### macOS / Linux
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# 1. 复制技能目录
|
# 1. 复制技能目录
|
||||||
cp -r ./panel-project-deploy ~/.codex/skills/
|
cp -r ./project-init-panel-deploy ~/.codex/skills/
|
||||||
|
|
||||||
# 2. 执行安装脚本
|
# 2. 执行安装脚本
|
||||||
bash ./panel-project-deploy/install.sh
|
bash ./project-init-panel-deploy/install.sh
|
||||||
```
|
```
|
||||||
|
|
||||||
> 若使用的是其他 Agent 框架,技能目录也可能是 `~/.agents/skills/`,按对应框架要求放置即可。
|
> 若使用的是其他 Agent 框架,技能目录也可能是 `~/.agents/skills/`,按对应框架要求放置即可。
|
||||||
@@ -67,8 +67,8 @@ python -m playwright install-deps chromium
|
|||||||
## 五、验证安装
|
## 五、验证安装
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
python ~/.codex/skills/panel-project-deploy/scripts/panel_ui_audit.py --help
|
python ~/.codex/skills/project-init-panel-deploy/scripts/panel_ui_audit.py --help
|
||||||
python ~/.codex/skills/panel-project-deploy/scripts/workflow_manager.py --help
|
python ~/.codex/skills/project-init-panel-deploy/scripts/workflow_manager.py --help
|
||||||
```
|
```
|
||||||
|
|
||||||
能正常打印帮助即安装成功。
|
能正常打印帮助即安装成功。
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
---
|
---
|
||||||
name: panel-project-deploy
|
name: project-init-panel-deploy
|
||||||
description: 自动化克隆、初始化、品牌化、Docker 部署并提交项目,同时强制将前端页面改造成炫酷的科技感玻璃面板风格。适用于“初始化并部署项目”“项目页面改版”“面板风格 UI”“科技感大屏/仪表盘”等请求。
|
description: 自动化克隆、初始化、品牌化、Docker 部署并提交项目,同时强制将前端页面改造成炫酷的科技感玻璃面板风格。适用于“初始化并部署项目”“项目页面改版”“面板风格 UI”“科技感大屏/仪表盘”等请求。
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
# panel-project-deploy 技能安装脚本 (Windows)
|
# project-init-panel-deploy 技能安装脚本 (Windows)
|
||||||
$ErrorActionPreference = "Stop"
|
$ErrorActionPreference = "Stop"
|
||||||
Write-Host "==> 安装 Python 依赖 (playwright)" -ForegroundColor Cyan
|
Write-Host "==> 安装 Python 依赖 (playwright)" -ForegroundColor Cyan
|
||||||
python -m pip install --upgrade pip
|
python -m pip install --upgrade pip
|
||||||
|
|||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
# panel-project-deploy 技能安装脚本 (macOS / Linux)
|
# project-init-panel-deploy 技能安装脚本 (macOS / Linux)
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||||
echo "==> 安装 Python 依赖 (playwright)"
|
echo "==> 安装 Python 依赖 (playwright)"
|
||||||
|
|||||||
@@ -7,7 +7,6 @@ from __future__ import annotations
|
|||||||
|
|
||||||
import argparse
|
import argparse
|
||||||
import json
|
import json
|
||||||
import os
|
|
||||||
import sys
|
import sys
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import Any
|
from typing import Any
|
||||||
@@ -260,31 +259,6 @@ def audit_page(page: Page, route: str, extra_openers: list[str]) -> dict[str, An
|
|||||||
return {'route': route, 'issues': issues}
|
return {'route': route, 'issues': issues}
|
||||||
|
|
||||||
|
|
||||||
def launch_chromium(playwright):
|
|
||||||
launch_options = {'headless': True}
|
|
||||||
channel = os.environ.get('PANEL_PLAYWRIGHT_CHANNEL')
|
|
||||||
executable_path = os.environ.get('PANEL_PLAYWRIGHT_EXECUTABLE_PATH')
|
|
||||||
if channel:
|
|
||||||
launch_options['channel'] = channel
|
|
||||||
elif executable_path:
|
|
||||||
launch_options['executable_path'] = executable_path
|
|
||||||
else:
|
|
||||||
local_app_data = os.environ.get('LOCALAPPDATA', '')
|
|
||||||
playwright_cache = Path(local_app_data) / 'ms-playwright' if local_app_data else None
|
|
||||||
has_downloaded_chromium = bool(
|
|
||||||
playwright_cache and list(playwright_cache.glob('chromium-*/chrome-win64/chrome.exe'))
|
|
||||||
)
|
|
||||||
if not has_downloaded_chromium:
|
|
||||||
program_files_x86 = os.environ.get('ProgramFiles(x86)', '')
|
|
||||||
program_files = os.environ.get('ProgramFiles', '')
|
|
||||||
edge_candidates = [
|
|
||||||
Path(program_files_x86) / 'Microsoft' / 'Edge' / 'Application' / 'msedge.exe',
|
|
||||||
Path(program_files) / 'Microsoft' / 'Edge' / 'Application' / 'msedge.exe',
|
|
||||||
]
|
|
||||||
if any(edge.exists() for edge in edge_candidates):
|
|
||||||
launch_options['channel'] = 'msedge'
|
|
||||||
return playwright.chromium.launch(**launch_options)
|
|
||||||
|
|
||||||
def csv_list(value: str) -> list[str]:
|
def csv_list(value: str) -> list[str]:
|
||||||
return [item.strip() for item in value.split(',') if item.strip()]
|
return [item.strip() for item in value.split(',') if item.strip()]
|
||||||
|
|
||||||
@@ -313,7 +287,7 @@ def main() -> int:
|
|||||||
report: dict[str, Any] = {'baseUrl': args.base_url, 'pages': []}
|
report: dict[str, Any] = {'baseUrl': args.base_url, 'pages': []}
|
||||||
|
|
||||||
with sync_playwright() as playwright:
|
with sync_playwright() as playwright:
|
||||||
browser = launch_chromium(playwright)
|
browser = playwright.chromium.launch(headless=True)
|
||||||
page = browser.new_page(viewport={'width': args.viewport_width, 'height': args.viewport_height})
|
page = browser.new_page(viewport={'width': args.viewport_width, 'height': args.viewport_height})
|
||||||
|
|
||||||
if not args.skip_login:
|
if not args.skip_login:
|
||||||
@@ -348,4 +322,3 @@ def main() -> int:
|
|||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
sys.exit(main())
|
sys.exit(main())
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user