commit d5ea866eb4be45820f2ea93bf5fc673983c8ef81 Author: Your Name Date: Thu Feb 5 16:25:52 2026 +0800 Initial commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..27fbf9a --- /dev/null +++ b/.gitignore @@ -0,0 +1,63 @@ +# General +.DS_Store +Thumbs.db +*.log +.vscode/ +.idea/ +*.swp + +# Python / Backend +__pycache__/ +*.py[cod] +*$py.class +*.so +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +share/python-wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST +backend/venv/ +backend/env/ +venv/ +env/ +ENV/ +.pytest_cache/ +.coverage +htmlcov/ + +# Node.js / Frontend +node_modules/ +frontend/node_modules/ +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* + +# Frontend Build / Vite / Electron +frontend/dist/ +frontend/build/ +frontend/out/ +frontend/.vite/ +frontend/coverage/ + +# Environment Variables (Frontend) +frontend/.env.local +frontend/.env.development.local +frontend/.env.test.local +frontend/.env.production.local + +# Docker +.docker/ diff --git a/README.md b/README.md new file mode 100644 index 0000000..f167a9c --- /dev/null +++ b/README.md @@ -0,0 +1,116 @@ +# 柔性敏捷智能测试体系平台 + +基于 Electron + React + FastAPI 的智能测试意图编制平台。 + +## 项目结构 + +``` +FlexibleTestPlatform/ +├── frontend/ # Electron + React 前端 +│ ├── src/ +│ │ ├── main/ # Electron 主进程 +│ │ ├── preload/ # 预加载脚本 +│ │ └── renderer/ # React 渲染进程 +│ └── package.json +├── backend/ # Python FastAPI 后端 +│ ├── app/ +│ │ ├── api/ # API 路由 +│ │ ├── models/ # 数据模型 +│ │ └── services/ # AI 服务 +│ └── requirements.txt +└── docker/ # Docker 配置 + └── docker-compose.yml +``` + +## 快速开始 + +### 1. 启动数据库 + +```bash +cd docker +docker-compose up -d +``` + +访问 pgAdmin: http://localhost:5050 +- 邮箱: admin@admin.com +- 密码: admin123 + +### 2. 启动后端 + +```bash +cd backend + +# 创建虚拟环境 +python -m venv venv +venv\Scripts\activate # Windows +# source venv/bin/activate # Linux/Mac + +# 安装依赖 +pip install -r requirements.txt + +# 配置环境变量 +cp .env.example .env +# 编辑 .env 填写 QWEN_API_KEY + +# 启动服务 +python -m uvicorn app.main:app --reload --port 8080 +``` + +API 文档: http://localhost:8080/docs + +### 3. 启动前端 + +```bash +cd frontend + +# 安装依赖 +npm install + +# 开发模式 +npm run dev + +# 另一个终端启动 Electron +npm run start +``` + +## 功能模块 + +| 模块 | 功能 | 状态 | +|------|------|------| +| 意图编制 | 测试意图文档编辑、AI生成、AI检查 | ✅ 完成 | +| 任务规划 | 测试任务分配和进度管理 | 🚧 开发中 | +| 逻辑仿真 | 测试流程仿真验证 | 🚧 开发中 | +| 代码生成 | 自动生成测试代码 | 🚧 开发中 | +| 数据服务 | 测试数据管理 | 🚧 开发中 | +| 知识库 | 测试知识积累和检索 | 🚧 开发中 | + +## AI 配置 + +支持两种 AI 模型: + +### 通义千问 (默认) + +1. 获取 API Key: https://dashscope.console.aliyun.com/ +2. 配置 `backend/.env`: + ``` + QWEN_API_KEY=your_api_key + ``` + +### 本地模型 + +编辑 `backend/config.yaml`: + +```yaml +ai: + provider: "local" + local: + endpoint: "http://localhost:8000" + model: "llama3" +``` + +## 技术栈 + +- **前端**: Electron + React + TypeScript + Vite +- **后端**: Python + FastAPI + SQLAlchemy +- **数据库**: PostgreSQL +- **AI**: 通义千问 / 本地模型 (OpenAI API 兼容) diff --git a/backend/.env b/backend/.env new file mode 100644 index 0000000..9a9c07b --- /dev/null +++ b/backend/.env @@ -0,0 +1,58 @@ +# 环境变量配置文件 +# 复制此文件为 .env 并填写实际值 + +# 数据库配置 +DATABASE_URL=postgresql+asyncpg://postgres:postgres123@localhost:5432/flexible_test_platform + +# AI 服务配置 (支持任何 OpenAI 兼容的 API) +# 通义千问示例: +# AI_BASE_URL=https://dashscope.aliyuncs.com/compatible-mode/v1 +# AI_MODEL=qwen-plus +# DeepSeek 示例: +# AI_BASE_URL=https://api.deepseek.com/v1 +# AI_MODEL=deepseek-chat +# OpenAI 示例: +# AI_BASE_URL=https://api.openai.com/v1 +# AI_MODEL=gpt-4 + +AI_API_KEY=sk-2d8e680151b240e2a2e40294834d3b03 +AI_BASE_URL=https://dashscope.aliyuncs.com/compatible-mode/v1 +AI_MODEL=qwen-plus + +#轨迹流动 +QWEN_API_KEY=sk-lnyjdovsoclgxdryzxwwxyvxgspkegwvuakxgonoewolgdpx + +MinerU_URL=http://10.10.5.251:8000/file_parse + +# MinerU调用示例 +# curl -X 'POST' \ +# 'http://10.10.5.251:8000/file_parse' \ +# -H 'accept: application/json' \ +# -H 'Content-Type: multipart/form-data' \ +# -F 'return_middle_json=false' \ +# -F 'return_model_output=false' \ +# -F 'return_md=true' \ +# -F 'return_images=false' \ +# -F 'end_page_id=99999' \ +# -F 'parse_method=auto' \ +# -F 'start_page_id=0' \ +# -F 'lang_list=ch' \ +# -F 'output_dir=./output' \ +# -F 'server_url=string' \ +# -F 'return_content_list=false' \ +# -F 'backend=hybrid-auto-engine' \ +# -F 'table_enable=true' \ +# -F 'response_format_zip=false' \ +# -F 'files=@广西职业师范学院教案.pdf;type=application/pdf' \ +# -F 'formula_enable=true' + +# MinerU响应示例 +# { +# "backend": "hybrid-auto-engine", +# "version": "2.7.5", +# "results": { +# "广西职业师范学院教案": { +# "md_content": +# } +# } +# } \ No newline at end of file diff --git a/backend/.env.example b/backend/.env.example new file mode 100644 index 0000000..aa752d2 --- /dev/null +++ b/backend/.env.example @@ -0,0 +1,20 @@ +# 环境变量配置文件模板 +# 复制此文件为 .env 并填写实际值 + +# 数据库配置 +DATABASE_URL=postgresql+asyncpg://postgres:postgres123@localhost:5432/flexible_test_platform + +# AI 服务配置 (支持任何 OpenAI 兼容的 API) +# 通义千问示例: +# AI_BASE_URL=https://dashscope.aliyuncs.com/compatible-mode/v1 +# AI_MODEL=qwen-plus +# DeepSeek 示例: +# AI_BASE_URL=https://api.deepseek.com/v1 +# AI_MODEL=deepseek-chat +# OpenAI 示例: +# AI_BASE_URL=https://api.openai.com/v1 +# AI_MODEL=gpt-4 + +AI_API_KEY=your_api_key_here +AI_BASE_URL=https://dashscope.aliyuncs.com/compatible-mode/v1 +AI_MODEL=qwen-plus diff --git a/backend/app/__init__.py b/backend/app/__init__.py new file mode 100644 index 0000000..2dc65a2 --- /dev/null +++ b/backend/app/__init__.py @@ -0,0 +1,7 @@ +""" +App package initialization +""" + +from app.database import Base, get_db, engine, AsyncSessionLocal + +__all__ = ["Base", "get_db", "engine", "AsyncSessionLocal"] diff --git a/backend/app/api/__init__.py b/backend/app/api/__init__.py new file mode 100644 index 0000000..5a37e59 --- /dev/null +++ b/backend/app/api/__init__.py @@ -0,0 +1,7 @@ +""" +API package initialization +""" + +from app.api.routes import intent_router, ai_router + +__all__ = ["intent_router", "ai_router"] diff --git a/backend/app/api/routes/__init__.py b/backend/app/api/routes/__init__.py new file mode 100644 index 0000000..086c2d4 --- /dev/null +++ b/backend/app/api/routes/__init__.py @@ -0,0 +1,8 @@ +""" +API routes package initialization +""" + +from app.api.routes.intent import router as intent_router +from app.api.routes.ai_assistant import router as ai_router + +__all__ = ["intent_router", "ai_router"] diff --git a/backend/app/api/routes/ai_assistant.py b/backend/app/api/routes/ai_assistant.py new file mode 100644 index 0000000..7e8c28b --- /dev/null +++ b/backend/app/api/routes/ai_assistant.py @@ -0,0 +1,401 @@ +""" +AI 助手 API 路由 +""" + +from typing import Optional, List +from pathlib import Path +from fastapi import APIRouter, Depends, HTTPException +from sqlalchemy.ext.asyncio import AsyncSession +from sqlalchemy import select +from pydantic import BaseModel +from datetime import datetime + +from app.database import get_db +from app.models.intent import Intent, AICheckRecord +from app.services.ai_service import get_ai_service + +router = APIRouter(prefix="/ai", tags=["AI助手"]) + + +# ============ Pydantic Schemas ============ + +class GenerateRequest(BaseModel): + """AI生成请求""" + prompt: str + context: Optional[str] = None + + +class GenerateResponse(BaseModel): + """AI生成响应""" + content: str + success: bool + error: Optional[str] = None + + +class CheckRequest(BaseModel): + """AI检查请求""" + content: str + intent_id: Optional[int] = None # 如果提供,会保存检查记录 + requirements: Optional[List[str]] = None + + +class CheckResult(BaseModel): + """AI检查结果""" + passed: bool + score: int + issues: List[str] + suggestions: List[str] + raw_response: Optional[str] = None + + +class CheckResponse(BaseModel): + """AI检查响应""" + result: CheckResult + record_id: Optional[int] = None # 如果保存了记录 + success: bool + error: Optional[str] = None + + +class IntentGenerateRequest(BaseModel): + """意图编制生成请求""" + test_type: str # 测试类型:功能测试、性能测试、安全测试等 + test_target: str # 测试目标描述 + additional_requirements: Optional[str] = None + + +class PlanGenerateRequest(BaseModel): + """测试规划生成请求""" + requirement_text: str # 测试需求文本(前端文本框内容) + source_name: Optional[str] = "用户输入" # 来源名称 + + +class ExtractStepsRequest(BaseModel): + """提取测试步骤请求""" + content: str # 意图编制内容 + title: Optional[str] = "意图编制" + + +class ExtractedStepData(BaseModel): + """提取的步骤数据""" + id: int + name: str + purpose: str + deviceParams: dict # {设备类别: {参数名: 参数值}} + + +class ExtractStepsResponse(BaseModel): + """提取测试步骤响应""" + success: bool + steps: List[ExtractedStepData] + error: Optional[str] = None + + +# ============ API Endpoints ============ + +@router.post("/generate", response_model=GenerateResponse) +async def generate_content(request: GenerateRequest): + """AI 生成内容""" + try: + ai_service = get_ai_service() + content = await ai_service.generate( + prompt=request.prompt, + context=request.context + ) + return GenerateResponse(content=content, success=True) + except Exception as e: + return GenerateResponse( + content="", + success=False, + error=str(e) + ) + + +@router.post("/check", response_model=CheckResponse) +async def check_content( + request: CheckRequest, + db: AsyncSession = Depends(get_db) +): + """AI 检查内容""" + try: + ai_service = get_ai_service() + result = await ai_service.check( + content=request.content, + requirements=request.requirements + ) + + check_result = CheckResult( + passed=result.get("passed", False), + score=result.get("score", 0), + issues=result.get("issues", []), + suggestions=result.get("suggestions", []), + raw_response=result.get("raw_response") + ) + + record_id = None + + # 如果提供了 intent_id,保存检查记录 + if request.intent_id: + # 验证意图存在 + query = select(Intent).where(Intent.id == request.intent_id) + intent_result = await db.execute(query) + intent = intent_result.scalar_one_or_none() + + if intent: + record = AICheckRecord( + intent_id=request.intent_id, + check_result=result, + suggestions="\n".join(result.get("suggestions", [])) + ) + db.add(record) + await db.commit() + await db.refresh(record) + record_id = record.id + + return CheckResponse( + result=check_result, + record_id=record_id, + success=True + ) + except Exception as e: + return CheckResponse( + result=CheckResult(passed=False, score=0, issues=[str(e)], suggestions=[]), + success=False, + error=str(e) + ) + + +@router.post("/generate-intent", response_model=GenerateResponse) +async def generate_intent_content(request: IntentGenerateRequest): + """AI 生成意图编制初始内容""" + prompt = f"""请帮我生成一份测试意图编制文档的初始内容。 + +测试类型:{request.test_type} +测试目标:{request.test_target} +{"额外要求:" + request.additional_requirements if request.additional_requirements else ""} + +请按照以下格式生成内容: + +## 1. 测试目标 +[详细描述测试的目标和预期达成的效果] + +## 2. 测试范围 +[明确测试的边界和覆盖范围] + +## 3. 测试条件 +### 3.1 前置条件 +[列出测试开始前需要满足的条件] + +### 3.2 测试环境 +[描述测试所需的硬件、软件环境] + +### 3.3 测试数据 +[描述测试所需的数据准备] + +## 4. 测试用例概述 +[列出主要的测试场景和用例] + +## 5. 预期结果 +[描述测试成功的判定标准] + +## 6. 风险与注意事项 +[列出可能的风险和需要注意的事项] +""" + + context = """你是一位专业的软件测试工程师,擅长编写测试意图编制文档。 +请生成规范、完整、专业的测试意图编制内容。""" + + try: + ai_service = get_ai_service() + content = await ai_service.generate(prompt=prompt, context=context) + return GenerateResponse(content=content, success=True) + except Exception as e: + return GenerateResponse( + content="", + success=False, + error=str(e) + ) + + +@router.post("/generate-plan", response_model=GenerateResponse) +async def generate_test_plan(request: PlanGenerateRequest): + """ + 根据前端输入的测试需求文本,调用 planner 生成测试规划。 + 直接返回生成的 Markdown 内容(不保存文件)。 + """ + from planner.planning_agent.planner import build_plan_from_text + + try: + # 直接调用规划生成函数,返回 Markdown 内容 + md_content = build_plan_from_text( + requirement_text=request.requirement_text, + source_doc=request.source_name or "用户输入" + ) + + if not md_content: + return GenerateResponse( + content="", + success=False, + error="生成内容为空,请检查输入内容或后端服务" + ) + + return GenerateResponse(content=md_content, success=True) + except Exception as e: + import traceback + traceback.print_exc() + return GenerateResponse( + content="", + success=False, + error=f"规划生成失败: {str(e)}" + ) + + +@router.post("/extract-steps", response_model=ExtractStepsResponse) +async def extract_steps_from_intent(request: ExtractStepsRequest): + """ + 从意图编制内容中提取测试步骤和参数。 + 使用 LLM 解析文本并返回结构化的步骤数据。 + """ + try: + ai_service = get_ai_service() + + # 构建提取 prompt + extract_prompt = f"""请从以下测试规划内容中提取测试步骤和仪器参数。 + +请严格按照以下 JSON 格式返回,不要添加任何其他内容: +```json +{{ + "steps": [ + {{ + "id": 1, + "name": "步骤名称", + "purpose": "步骤目的", + "deviceParams": {{ + "程控电源参数": {{ + "输出电压": "28V", + "输出电流": "6A" + }}, + "频谱分析仪参数": {{ + "中心频率": "2.7GHz", + "扫宽Span": "500MHz" + }} + }} + }} + ] +}} +``` + +设备类别必须使用以下名称之一: +- 程控电源参数 +- 功率探头参数 +- 频谱分析仪参数 +- 矢量网络分析仪参数 +- 矢量信号分析仪参数 +- 矢量信号源参数 +- 示波器参数 +- 信号源基础参数 + +测试规划内容: +{request.content} +""" + + context = """你是一个专业的测试工程师,擅长从测试规划文档中提取结构化的测试步骤和仪器参数。 +请仔细分析文档,提取每个测试步骤及其涉及的仪器配置参数。 +只返回 JSON 格式的结果,不要添加任何解释或其他文字。""" + + response_text = await ai_service.generate(prompt=extract_prompt, context=context) + + # 解析 JSON 响应 + import json + import re + + # 尝试从响应中提取 JSON + json_match = re.search(r'```json\s*([\s\S]*?)\s*```', response_text) + if json_match: + json_str = json_match.group(1) + else: + # 尝试直接解析整个响应 + json_str = response_text.strip() + # 清理可能的 markdown 代码块标记 + json_str = re.sub(r'^```\w*\n?', '', json_str) + json_str = re.sub(r'\n?```$', '', json_str) + + try: + parsed = json.loads(json_str) + steps_data = parsed.get("steps", []) + except json.JSONDecodeError: + # 如果解析失败,返回空列表 + return ExtractStepsResponse( + success=False, + steps=[], + error="无法解析 LLM 返回的 JSON 格式" + ) + + # 构建响应,过滤掉空值 + def filter_device_params(params: dict) -> dict: + """过滤掉空的设备参数""" + if not params or not isinstance(params, dict): + return {} + filtered = {} + for device_category, device_params in params.items(): + if not device_params or not isinstance(device_params, dict): + continue + # 过滤掉空值的参数 + non_empty_params = { + k: v for k, v in device_params.items() + if v and isinstance(v, str) and v.strip() + } + if non_empty_params: + filtered[device_category] = non_empty_params + return filtered + + steps = [] + for step in steps_data: + filtered_params = filter_device_params(step.get("deviceParams", {})) + steps.append(ExtractedStepData( + id=step.get("id", len(steps) + 1), + name=step.get("name", f"步骤 {len(steps) + 1}"), + purpose=step.get("purpose", ""), + deviceParams=filtered_params + )) + + return ExtractStepsResponse( + success=True, + steps=steps + ) + + except Exception as e: + import traceback + traceback.print_exc() + return ExtractStepsResponse( + success=False, + steps=[], + error=f"步骤提取失败: {str(e)}" + ) + + +@router.get("/check-records/{intent_id}") +async def get_check_records( + intent_id: int, + db: AsyncSession = Depends(get_db) +): + """获取意图的所有检查记录""" + query = select(AICheckRecord).where( + AICheckRecord.intent_id == intent_id + ).order_by(AICheckRecord.checked_at.desc()) + + result = await db.execute(query) + records = result.scalars().all() + + return { + "intent_id": intent_id, + "total": len(records), + "records": [ + { + "id": r.id, + "check_result": r.check_result, + "suggestions": r.suggestions, + "checked_at": r.checked_at.isoformat() + } + for r in records + ] + } diff --git a/backend/app/api/routes/intent.py b/backend/app/api/routes/intent.py new file mode 100644 index 0000000..f3f248d --- /dev/null +++ b/backend/app/api/routes/intent.py @@ -0,0 +1,188 @@ +""" +意图编制 API 路由 +""" + +from typing import List, Optional +from fastapi import APIRouter, Depends, HTTPException, status, UploadFile, File +from sqlalchemy.ext.asyncio import AsyncSession +from sqlalchemy import select +from pydantic import BaseModel +from datetime import datetime +from pathlib import Path + +from app.database import get_db +from app.models.intent import Intent, AICheckRecord +from planner.planning_agent.input_pipeline import parse_intent_file +import tempfile + +router = APIRouter(prefix="/intent", tags=["意图编制"]) + + +# ============ Pydantic Schemas ============ + +class IntentCreate(BaseModel): + """创建意图请求""" + title: str + content: Optional[str] = None + status: str = "draft" + + +class IntentUpdate(BaseModel): + """更新意图请求""" + title: Optional[str] = None + content: Optional[str] = None + status: Optional[str] = None + + +class IntentResponse(BaseModel): + """意图响应""" + id: int + title: str + content: Optional[str] + status: str + created_at: datetime + updated_at: datetime + + class Config: + from_attributes = True + + +class IntentListResponse(BaseModel): + """意图列表响应""" + total: int + items: List[IntentResponse] + + +# ============ API Endpoints ============ + +@router.post("", response_model=IntentResponse, status_code=status.HTTP_201_CREATED) +async def create_intent( + intent_data: IntentCreate, + db: AsyncSession = Depends(get_db) +): + """创建新意图""" + intent = Intent( + title=intent_data.title, + content=intent_data.content, + status=intent_data.status + ) + db.add(intent) + await db.commit() + await db.refresh(intent) + return intent + + +@router.get("", response_model=IntentListResponse) +async def list_intents( + skip: int = 0, + limit: int = 20, + status_filter: Optional[str] = None, + db: AsyncSession = Depends(get_db) +): + """获取意图列表""" + query = select(Intent) + + if status_filter: + query = query.where(Intent.status == status_filter) + + query = query.order_by(Intent.updated_at.desc()) + + # 获取总数 + count_query = select(Intent) + if status_filter: + count_query = count_query.where(Intent.status == status_filter) + result = await db.execute(count_query) + total = len(result.scalars().all()) + + # 获取分页数据 + query = query.offset(skip).limit(limit) + result = await db.execute(query) + items = result.scalars().all() + + return IntentListResponse(total=total, items=items) + + +@router.get("/{intent_id}", response_model=IntentResponse) +async def get_intent( + intent_id: int, + db: AsyncSession = Depends(get_db) +): + """获取单个意图""" + result = await db.execute(select(Intent).where(Intent.id == intent_id)) + intent = result.scalar_one_or_none() + + if not intent: + raise HTTPException(status_code=404, detail="意图不存在") + + return intent + + +@router.put("/{intent_id}", response_model=IntentResponse) +async def update_intent( + intent_id: int, + intent_data: IntentUpdate, + db: AsyncSession = Depends(get_db) +): + """更新意图""" + result = await db.execute(select(Intent).where(Intent.id == intent_id)) + intent = result.scalar_one_or_none() + + if not intent: + raise HTTPException(status_code=404, detail="意图不存在") + + if intent_data.title is not None: + intent.title = intent_data.title + if intent_data.content is not None: + intent.content = intent_data.content + if intent_data.status is not None: + intent.status = intent_data.status + + intent.updated_at = datetime.utcnow() + + await db.commit() + await db.refresh(intent) + return intent + + +@router.delete("/{intent_id}", status_code=status.HTTP_204_NO_CONTENT) +async def delete_intent( + intent_id: int, + db: AsyncSession = Depends(get_db) +): + """删除意图""" + result = await db.execute(select(Intent).where(Intent.id == intent_id)) + intent = result.scalar_one_or_none() + + if not intent: + raise HTTPException(status_code=404, detail="意图不存在") + + await db.delete(intent) + await db.commit() + return None + + +@router.post("/parse-file") +async def parse_intent_file_endpoint(file: UploadFile = File(...)): + """解析意图编制导入文件(pdf/图片走 MinerU,文本直接读取)""" + if not file.filename: + raise HTTPException(status_code=400, detail="未提供文件") + + suffix = Path(file.filename).suffix.lower() + + with tempfile.TemporaryDirectory() as tmp_dir: + tmp_path = Path(tmp_dir) / file.filename + content = await file.read() + tmp_path.write_bytes(content) + + try: + result = parse_intent_file(str(tmp_path)) + except Exception as e: + raise HTTPException(status_code=400, detail=str(e)) + + return { + "filename": file.filename, + "suffix": suffix, + "title": result.get("title", ""), + "content": result.get("content", ""), + "raw_result": result.get("raw_result"), + } diff --git a/backend/app/database.py b/backend/app/database.py new file mode 100644 index 0000000..9a2b896 --- /dev/null +++ b/backend/app/database.py @@ -0,0 +1,38 @@ +""" +数据库配置和连接管理 +""" + +import os +from sqlalchemy.ext.asyncio import create_async_engine, AsyncSession, async_sessionmaker +from sqlalchemy.orm import declarative_base +from dotenv import load_dotenv + +load_dotenv() + +DATABASE_URL = os.getenv( + "DATABASE_URL", + "postgresql+asyncpg://postgres:postgres123@localhost:5432/flexible_test_platform" +) + +engine = create_async_engine( + DATABASE_URL, + echo=True, # 开发环境打印 SQL + pool_pre_ping=True, +) + +AsyncSessionLocal = async_sessionmaker( + engine, + class_=AsyncSession, + expire_on_commit=False, +) + +Base = declarative_base() + + +async def get_db(): + """获取数据库会话""" + async with AsyncSessionLocal() as session: + try: + yield session + finally: + await session.close() diff --git a/backend/app/main.py b/backend/app/main.py new file mode 100644 index 0000000..847f973 --- /dev/null +++ b/backend/app/main.py @@ -0,0 +1,68 @@ +""" +柔性敏捷智能测试体系平台 - FastAPI 后端主入口 +""" + +from contextlib import asynccontextmanager +from fastapi import FastAPI +from fastapi.middleware.cors import CORSMiddleware + +from app.database import engine, Base +from app.api import intent_router, ai_router + + +@asynccontextmanager +async def lifespan(app: FastAPI): + """应用生命周期管理""" + # 启动时创建数据库表 + async with engine.begin() as conn: + await conn.run_sync(Base.metadata.create_all) + yield + # 关闭时清理资源 + await engine.dispose() + + +app = FastAPI( + title="柔性敏捷智能测试体系平台", + description="Flexible Agile Intelligent Test System Platform API", + version="1.0.0", + lifespan=lifespan +) + +# CORS 配置 - 允许 Electron 前端访问 +app.add_middleware( + CORSMiddleware, + allow_origins=["*"], # Electron 应用使用 file:// 协议 + allow_credentials=True, + allow_methods=["*"], + allow_headers=["*"], +) + +# 注册路由 +app.include_router(intent_router, prefix="/api") +app.include_router(ai_router, prefix="/api") + + +@app.get("/") +async def root(): + """根路径""" + return { + "name": "柔性敏捷智能测试体系平台", + "version": "1.0.0", + "status": "running" + } + + +@app.get("/health") +async def health_check(): + """健康检查""" + return {"status": "healthy"} + + +if __name__ == "__main__": + import uvicorn + uvicorn.run( + "app.main:app", + host="0.0.0.0", + port=8080, + reload=True + ) diff --git a/backend/app/models/__init__.py b/backend/app/models/__init__.py new file mode 100644 index 0000000..6bcb705 --- /dev/null +++ b/backend/app/models/__init__.py @@ -0,0 +1,7 @@ +""" +Models package initialization +""" + +from app.models.intent import Intent, AICheckRecord + +__all__ = ["Intent", "AICheckRecord"] diff --git a/backend/app/models/intent.py b/backend/app/models/intent.py new file mode 100644 index 0000000..7b706d0 --- /dev/null +++ b/backend/app/models/intent.py @@ -0,0 +1,38 @@ +""" +意图编制数据模型 +""" + +from datetime import datetime +from typing import Optional +from sqlalchemy import Column, Integer, String, Text, DateTime, ForeignKey, JSON +from sqlalchemy.orm import relationship +from app.database import Base + + +class Intent(Base): + """意图编制表""" + __tablename__ = "intents" + + id = Column(Integer, primary_key=True, index=True) + title = Column(String(255), nullable=False, comment="意图标题") + content = Column(Text, nullable=True, comment="意图内容") + status = Column(String(50), default="draft", comment="状态: draft, submitted, approved") + created_at = Column(DateTime, default=datetime.utcnow, comment="创建时间") + updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow, comment="更新时间") + + # 关联 AI 检查记录 + check_records = relationship("AICheckRecord", back_populates="intent", cascade="all, delete-orphan") + + +class AICheckRecord(Base): + """AI 检查记录表""" + __tablename__ = "ai_check_records" + + id = Column(Integer, primary_key=True, index=True) + intent_id = Column(Integer, ForeignKey("intents.id"), nullable=False) + check_result = Column(JSON, nullable=True, comment="检查结果JSON") + suggestions = Column(Text, nullable=True, comment="AI建议") + checked_at = Column(DateTime, default=datetime.utcnow, comment="检查时间") + + # 关联意图 + intent = relationship("Intent", back_populates="check_records") diff --git a/backend/app/services/__init__.py b/backend/app/services/__init__.py new file mode 100644 index 0000000..cf80e4c --- /dev/null +++ b/backend/app/services/__init__.py @@ -0,0 +1,19 @@ +""" +Services package initialization +""" + +from app.services.ai_service import ( + AIProvider, + OpenAICompatibleProvider, + LocalModelProvider, + AIServiceFactory, + get_ai_service +) + +__all__ = [ + "AIProvider", + "OpenAICompatibleProvider", + "LocalModelProvider", + "AIServiceFactory", + "get_ai_service" +] diff --git a/backend/app/services/ai_service.py b/backend/app/services/ai_service.py new file mode 100644 index 0000000..66a95cf --- /dev/null +++ b/backend/app/services/ai_service.py @@ -0,0 +1,263 @@ +""" +AI 服务抽象层 - 支持通义千问和本地模型 +""" + +import os +from abc import ABC, abstractmethod +from typing import Optional, Dict, Any +import yaml +from pathlib import Path + +# 配置文件路径 +CONFIG_PATH = Path(__file__).parent.parent.parent / "config.yaml" + + +def load_config() -> Dict[str, Any]: + """加载配置文件""" + if CONFIG_PATH.exists(): + with open(CONFIG_PATH, 'r', encoding='utf-8') as f: + return yaml.safe_load(f) or {} + return {} + + +class AIProvider(ABC): + """AI 服务提供者抽象基类""" + + @abstractmethod + async def generate(self, prompt: str, context: Optional[str] = None) -> str: + """生成内容 + + Args: + prompt: 用户提示词 + context: 可选的上下文信息 + + Returns: + 生成的文本内容 + """ + pass + + @abstractmethod + async def check(self, content: str, requirements: Optional[list] = None) -> Dict[str, Any]: + """检查内容是否包含必要信息 + + Args: + content: 要检查的内容 + requirements: 可选的检查要求列表 + + Returns: + 检查结果字典,包含 passed, issues, suggestions 等字段 + """ + pass + + +class OpenAICompatibleProvider(AIProvider): + """OpenAI 兼容接口实现 - 支持通义千问、DeepSeek 等""" + + def __init__( + self, + api_key: Optional[str] = None, + base_url: Optional[str] = None, + model: str = "qwen-plus" + ): + self.api_key = api_key or os.getenv("AI_API_KEY", "") + self.base_url = base_url or os.getenv("AI_BASE_URL", "https://dashscope.aliyuncs.com/compatible-mode/v1") + self.model = model + + # 初始化 OpenAI 客户端 + from openai import AsyncOpenAI + self.client = AsyncOpenAI( + api_key=self.api_key, + base_url=self.base_url + ) + + async def generate(self, prompt: str, context: Optional[str] = None) -> str: + """使用 OpenAI 兼容接口生成内容""" + messages = [] + if context: + messages.append({"role": "system", "content": context}) + messages.append({"role": "user", "content": prompt}) + + try: + response = await self.client.chat.completions.create( + model=self.model, + messages=messages + ) + return response.choices[0].message.content + except Exception as e: + return f"调用API出错: {str(e)}" + + async def check(self, content: str, requirements: Optional[list] = None) -> Dict[str, Any]: + """使用 AI 检查内容""" + check_prompt = f"""请检查以下意图编制内容是否完整,是否包含必要的信息。 + +要检查的内容: +{content} + +请检查以下方面: +1. 测试目标是否明确 +2. 测试范围是否清晰 +3. 测试条件是否完整 +4. 预期结果是否明确 +5. 是否有遗漏的关键信息 + +请以JSON格式返回检查结果: +{{ + "passed": true/false, + "score": 0-100, + "issues": ["问题1", "问题2"], + "suggestions": ["建议1", "建议2"] +}} +""" + + try: + response = await self.client.chat.completions.create( + model=self.model, + messages=[{"role": "user", "content": check_prompt}] + ) + + result_text = response.choices[0].message.content + # 尝试解析JSON + import json + try: + # 提取JSON部分 + start = result_text.find('{') + end = result_text.rfind('}') + 1 + if start != -1 and end > start: + return json.loads(result_text[start:end]) + except: + pass + return { + "passed": False, + "score": 0, + "issues": ["无法解析AI返回结果"], + "suggestions": [], + "raw_response": result_text + } + except Exception as e: + return { + "passed": False, + "score": 0, + "issues": [f"调用出错: {str(e)}"], + "suggestions": [] + } + + +class LocalModelProvider(AIProvider): + """本地模型实现 - 兼容 OpenAI API 格式""" + + def __init__(self, endpoint: str = "http://localhost:8000", model: str = "llama3", api_key: str = ""): + self.endpoint = endpoint.rstrip('/') + self.model = model + self.api_key = api_key or os.getenv("LOCAL_MODEL_API_KEY", "not-needed") + + async def generate(self, prompt: str, context: Optional[str] = None) -> str: + """使用本地模型生成内容""" + import aiohttp + + messages = [] + if context: + messages.append({"role": "system", "content": context}) + messages.append({"role": "user", "content": prompt}) + + headers = { + "Content-Type": "application/json", + "Authorization": f"Bearer {self.api_key}" + } + + payload = { + "model": self.model, + "messages": messages, + "stream": False + } + + try: + async with aiohttp.ClientSession() as session: + async with session.post( + f"{self.endpoint}/v1/chat/completions", + headers=headers, + json=payload + ) as response: + if response.status == 200: + data = await response.json() + return data["choices"][0]["message"]["content"] + else: + return f"生成失败: HTTP {response.status}" + except Exception as e: + return f"调用本地模型出错: {str(e)}" + + async def check(self, content: str, requirements: Optional[list] = None) -> Dict[str, Any]: + """使用本地模型检查内容""" + check_prompt = f"""请检查以下意图编制内容是否完整。 + +内容: +{content} + +请以JSON格式返回:{{"passed": bool, "score": int, "issues": [], "suggestions": []}}""" + + result = await self.generate(check_prompt) + + try: + import json + start = result.find('{') + end = result.rfind('}') + 1 + if start != -1 and end > start: + return json.loads(result[start:end]) + except: + pass + + return { + "passed": False, + "score": 0, + "issues": ["无法解析结果"], + "suggestions": [], + "raw_response": result + } + + +class AIServiceFactory: + """AI 服务工厂 - 根据配置创建对应的 Provider""" + + _instance: Optional[AIProvider] = None + + @classmethod + def get_provider(cls) -> AIProvider: + """获取 AI Provider 单例""" + if cls._instance is None: + cls._instance = cls._create_provider() + return cls._instance + + @classmethod + def _create_provider(cls) -> AIProvider: + """根据配置创建 Provider""" + config = load_config() + ai_config = config.get("ai", {}) + + # 优先从环境变量读取 + api_key = os.getenv("AI_API_KEY", "") + base_url = os.getenv("AI_BASE_URL", "") + model = os.getenv("AI_MODEL", "") + + # 如果环境变量未设置,从配置文件读取 + if not api_key: + api_key = ai_config.get("api_key", "") + if not base_url: + base_url = ai_config.get("base_url", "https://dashscope.aliyuncs.com/compatible-mode/v1") + if not model: + model = ai_config.get("model", "qwen-plus") + + return OpenAICompatibleProvider( + api_key=api_key, + base_url=base_url, + model=model + ) + + @classmethod + def reset(cls): + """重置单例,用于切换 Provider""" + cls._instance = None + + +# 便捷函数 +def get_ai_service() -> AIProvider: + """获取 AI 服务实例""" + return AIServiceFactory.get_provider() diff --git a/backend/config.yaml b/backend/config.yaml new file mode 100644 index 0000000..d78be04 --- /dev/null +++ b/backend/config.yaml @@ -0,0 +1,18 @@ +# AI 服务配置 +ai: + # API Key (优先使用环境变量 AI_API_KEY) + api_key: "${AI_API_KEY}" + # Base URL (优先使用环境变量 AI_BASE_URL) + base_url: "${AI_BASE_URL}" + # 模型名称 (优先使用环境变量 AI_MODEL) + model: "${AI_MODEL}" + +# 数据库配置 +database: + url: "${DATABASE_URL}" + +# 服务器配置 +server: + host: "0.0.0.0" + port: 8080 + debug: true diff --git a/backend/planner/__init__.py b/backend/planner/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/backend/planner/instruction/create_instruction_library.py b/backend/planner/instruction/create_instruction_library.py new file mode 100644 index 0000000..fba423e --- /dev/null +++ b/backend/planner/instruction/create_instruction_library.py @@ -0,0 +1,93 @@ +import csv +import yaml +import json +from collections import defaultdict +from pathlib import Path + + +CSV_PATH = "instruction/镜频指令抽取.csv" +YAML_OUT = "instruction/instruction_library.yaml" +JSON_OUT = "instruction/instruction_library.json" + + +def load_csv(path: str): + rows = [] + with open(path, "r", encoding="utf-8", newline="") as f: + reader = csv.DictReader(f) + for r in reader: + rows.append(r) + return rows + + +def build_instruction_library(rows): + devices = defaultdict(lambda: {"index": None, "commands": []}) + global_commands = [] + + for row in rows: + device = row["设备名称"].strip() + index = row["设备索引"].strip() + name = row["指令名称"].strip() + cmd_id = row["指令编号"].strip() + ret = row["返回值"].strip() + desc = row["指令描述"].strip() + role = row["指令角色"].strip() + + # 指令类型转换 + type_map = { + "构造函数": "constructor", + "普通指令": "normal", + "循环开始": "loop_begin", + "循环结束": "loop_end", + } + cmd_type = type_map.get(role, "normal") + + cmd_obj = { + "name": name, + "id": cmd_id, + "return": ret if ret else "", + "description": desc, + "type": cmd_type + } + + if device == "" or device is None: + # 无设备 → 全局指令 + global_commands.append(cmd_obj) + else: + # 有设备 → 写入设备指令 + if devices[device]["index"] is None: + devices[device]["index"] = int(index) + + devices[device]["commands"].append(cmd_obj) + + return { + "devices": devices, + "global_commands": global_commands + } + + +def save_yaml(data, path): + with open(path, "w", encoding="utf-8") as f: + yaml.dump(data, f, allow_unicode=True, sort_keys=False) + + +def save_json(data, path): + with open(path, "w", encoding="utf-8") as f: + json.dump(data, f, ensure_ascii=False, indent=2) + + +if __name__ == "__main__": + print("📥 Loading CSV...") + rows = load_csv(CSV_PATH) + + print("🔧 Building instruction library...") + lib = build_instruction_library(rows) + + print("💾 Saving YAML...") + save_yaml(lib, YAML_OUT) + + print("💾 Saving JSON...") + save_json(lib, JSON_OUT) + + print("\n🎉 Done! Instruction library generated:") + print(f" - YAML: {YAML_OUT}") + print(f" - JSON: {JSON_OUT}") diff --git a/backend/planner/instruction/instruction_library.yaml b/backend/planner/instruction/instruction_library.yaml new file mode 100644 index 0000000..2bfbfd6 --- /dev/null +++ b/backend/planner/instruction/instruction_library.yaml @@ -0,0 +1,274 @@ +devices: + 信号源: + index: 0 + commands: + - name: .ctor + id: In_211013104750 + return: '' + description: 一参数构造函数 + type: constructor + - name: Preset + id: In_221009063035 + return: void + description: Preset + type: normal + - name: Configure Pulse Modulation State + id: In_221009063035 + return: void + description: Configure Pulse Modulation State + type: normal + - name: Configure Pulse Generator Pulse Output State + id: In_221009063035 + return: void + description: Configure Pulse Generator Pulse Output State + type: normal + - name: Configure Pulse Width + id: In_221009063035 + return: void + description: Configure Pulse Width + type: normal + - name: Configure Pulse Period + id: In_221009063035 + return: void + description: Configure Pulse Period + type: normal + - name: Configure RF Output + id: In_221009063035 + return: void + description: Configure RF Output + type: normal + - name: Configure RF Power + id: In_211026053452 + return: void + description: Configure RF Power + type: normal + - name: Configure RF Frequency + id: In_211026053452 + return: void + description: Configure RF Frequency + type: normal + - name: Query RF Frequency + id: In_230809025811 + return: void + description: Query RF Frequency + type: normal + - name: Configure RF Output + id: In_211207044141 + return: void + description: Configure RF Output + type: normal + - name: Configure Pulse Modulation State + id: In_211207044141 + return: void + description: Configure Pulse Modulation State + type: normal + - name: DisConnecte Control + id: In_220929033205 + return: void + description: DisConnecte Control + type: normal + 频谱分析仪: + index: 0 + commands: + - name: .ctor + id: In_211018035640 + return: '' + description: 一参数构造函数 + type: constructor + - name: Preset + id: In_220124060445 + return: void + description: Preset + type: normal + - name: Configure Display Update + id: In_220124061406 + return: void + description: Configure Display Update + type: normal + - name: Configure Frequency Span + id: In_230421040832 + return: void + description: Configure Frequency Span + type: normal + - name: Configure Sweep Time + id: In_230421040832 + return: void + description: Configure Sweep Time + type: normal + - name: Configure Sweep Coupling + id: In_230421040832 + return: void + description: Configure Sweep Coupling + type: normal + - name: Configure Marker State + id: In_230421040832 + return: void + description: Configure Marker State + type: normal + - name: Configure Frequency Center + id: In_211026061355 + return: void + description: Configure Frequency Center + type: normal + - name: Configure Marker X + id: In_230421040832 + return: void + description: Configure Marker X + type: normal + - name: Configure Reference Level + id: In_211026061355 + return: void + description: Configure Reference Level + type: normal + - name: Configure Trace Max Hold + id: In_220127031511 + return: void + description: Configure Trace Max Hold + type: normal + - name: Marker Peak Max + id: In_220124062140 + return: void + description: Marker Peak Max + type: normal + - name: Query Marker Y + id: In_230421040832 + return: void + description: Query Marker Y + type: normal + - name: Configure Trace Clear + id: In_230421040832 + return: void + description: Configure Trace Clear + type: normal + - name: Configure Frequency Center + id: In_230421040832 + return: void + description: Configure Frequency Center + type: normal + - name: Configure Reference Level + id: In_230421040832 + return: void + description: Configure Reference Level + type: normal + - name: Configure Trace Max Hold + id: In_230421040832 + return: void + description: Configure Trace Max Hold + type: normal + - name: Configure Trace Clear + id: In_220209110325 + return: void + description: Configure Trace Clear + type: normal + - name: Preset + id: In_230421040832 + return: void + description: Preset + type: normal + - name: DisConnecte Control + id: In_220930084739 + return: void + description: DisConnecte Control + type: normal + 开关矩阵: + index: 0 + commands: + - name: .ctor + id: In_230209035212 + return: '' + description: 一参数构造函数 + type: constructor + - name: SetPath + id: In_230209035212 + return: void + description: SetPath + type: normal + - name: SetPath + id: In_230727120720 + return: void + description: SetPath + type: normal + 直流电源: + index: 0 + commands: + - name: .ctor + id: In_230806083804 + return: '' + description: 三参数构造函数 + type: constructor +global_commands: +- name: testShowMessage + description: 提示信息函数 + type: normal +- name: configuerQueryMarker + description: configuerQueryMarker + type: normal +- name: GetSwitchSelectUserNameList + description: 获取自定义开关名称列表 + type: normal +- name: assignValue + description: 赋值函数 + type: normal +- name: loopBegin + description: 循环开始 + type: loop_begin +- name: GetSwitchSelectNameList + description: 获取自选开关名称列表 + type: normal +- name: GetSwitchSelectCmdList + description: 获取自选开关指令列表 + type: normal +- name: GetSwitchSelectNoteList + description: 获取自选开关备注列表 + type: normal +- name: GetSwitchSelectTransSumList + description: 获取自选通路线损列表 + type: normal +- name: setSwitchPathNote + description: 配置开关当前通道的备注 + type: normal +- name: threadWaiting + description: 线程等待函数 + type: normal +- name: addValue + description: 加法函数 + type: normal +- name: loopEnd + description: 循环结束 + type: loop_end +- name: SCXFreqCompareAssign + description: SCXFreqCompareAssign + type: normal +- name: fiveValueCompareAssign + description: fiveValueCompareAssign + type: normal +- name: loopNumValue + description: loopNumValue + type: normal +- name: setSwitchPathTransducer + description: 配置开关当前通道的线损路径 + type: normal +- name: FreqAddValue + description: FreqAddValue + type: normal +- name: readILDataFromFile + description: 从文件读测试数据 + type: normal +- name: DUTInputPower + description: DUT输入功率 + type: normal +- name: drawDiagram + description: 画图函数 + type: normal +- name: saveToXValue + description: 数据转换X轴值 + type: normal +- name: subValue + description: 减法函数 + type: normal +- name: saveToYValue + description: 测试数据转换Y轴值 + type: normal +- name: ChannelLoopEnd + description: ChannelLoopEnd + type: normal diff --git a/backend/planner/instruction/镜频指令抽取.csv b/backend/planner/instruction/镜频指令抽取.csv new file mode 100644 index 0000000..9d9217b --- /dev/null +++ b/backend/planner/instruction/镜频指令抽取.csv @@ -0,0 +1,246 @@ +设备名称,设备索引,指令名称,指令编号,返回值,指令描述,指令角色,返回值角色,命令 (cmds),参数 (params) +信号源,0,.ctor,In_211013104750,,一参数构造函数,构造函数,普通返回值,TCPIP::%Resource_Name,"Name: Resource_Name, Value: TCPIP0::192.168.10.11, Type: System.String, Role: 普通参数, Desc: IP地址, Privilege: 用户设置" +频谱分析仪,0,.ctor,In_211018035640,,一参数构造函数,构造函数,普通返回值,TCPIP::%Resource_Name,"Name: Resource_Name, Value: TCPIP0::192.168.10.10, Type: System.String, Role: 普通参数, Desc: IP地址, Privilege: 用户设置" +开关矩阵,0,.ctor,In_230209035212,,一参数构造函数,构造函数,普通返回值,TCPIP::%Resource_Name,"Name: Resource_Name, Value: TCPIP0::192.168.10.201::2000::SOCKET, Type: System.String, Role: 普通参数, Desc: IP地址, Privilege: 用户设置" +直流电源,0,.ctor,In_230806083804,,三参数构造函数,构造函数,普通返回值,TCPIP::%Resource_Name,"Name: Resource_Name, Value: TCPIP::192.168.10.68, Type: System.String, Role: 普通参数, Desc: IP地址, Privilege: 用户设置 +Name: AccessModes, Value: 0, Type: System.Int32, Role: 普通参数, Desc: NoLock = 0,ExclusiveLock = 1,SharedLock = 2,LoadConfig = 4, Privilege: 管理员设置 +Name: OpenTimeout, Value: 2000, Type: System.Int32, Role: 普通参数, Desc: 以毫秒计, Privilege: 管理员设置" +频谱分析仪,0,Preset,In_220124060445,void,Preset,普通指令,普通返回值,"*RST +SYSTem:DISPlay:UPDate ON", +信号源,0,Preset,In_221009063035,void,Preset,普通指令,普通返回值,*RST, +,0,testShowMessage,,,提示信息函数,普通指令,普通返回值,,"Name: hint, Value: 产品编号列表, Type: System.String, Role: 普通参数, Desc: hint, Privilege: 管理员设置 +Name: title, Value: 软件提示, Type: System.String, Role: 普通参数, Desc: title, Privilege: 管理员设置 +Name: buttonContent, Value: 继续, Type: System.String, Role: 普通参数, Desc: buttonContent, Privilege: 管理员设置 +Name: DUTSleepTime, Value: 60, Type: System.Inter32, Role: 普通参数, Desc: DUT输入等待时间, Privilege: 管理员设置" +频谱分析仪,0,Configure Display Update,In_220124061406,void,Configure Display Update,普通指令,普通返回值,SYSTem:DISPlay:UPDate %state,"Name: state, Value: ON, Type: System.String, Role: 普通参数, Desc: state, Privilege: 管理员设置" +频谱分析仪,0,Configure Frequency Span,In_230421040832,void,Configure Frequency Span,普通指令,普通返回值,:FREQuency:SPAN %span,"Name: span, Value: &span, Type: System.String, Role: 普通参数, Desc: span, Privilege: 管理员设置" +频谱分析仪,0,Configure Sweep Time,In_230421040832,void,Configure Sweep Time,普通指令,普通返回值,SENSe:SWEep:TIME %sweepTime,"Name: sweepTime, Value: &sweepTime, Type: System.String, Role: 普通参数, Desc: sweepTime, Privilege: 管理员设置" +频谱分析仪,0,Configure Sweep Coupling,In_230421040832,void,Configure Sweep Coupling,普通指令,普通返回值,":BANDwidth %RBW +:BANDwidth:VIDeo %VBW","Name: RBW, Value: &RBW, Type: System.String, Role: 普通参数, Desc: 1 Hz、3 Hz、10 Hz、30 Hz、100 Hz、300 Hz、1 KHz、3 KHz、10 KHz、30 KHz、100KHz, Privilege: 管理员设置 +Name: VBW, Value: &RBW, Type: System.String, Role: 普通参数, Desc: 1 Hz、3 Hz、10 Hz、30 Hz、100 Hz、300 Hz、1 KHz、3 KHz、10 KHz、30 KHz、100KHz, Privilege: 管理员设置" +信号源,0,Configure Pulse Modulation State,In_221009063035,void,Configure Pulse Modulation State,普通指令,普通返回值,"PULM:STATe %state +MODulation %state","Name: state, Value: ON, Type: System.String, Role: 普通参数, Desc: state:ON|OFF, Privilege: 管理员设置" +信号源,0,Configure Pulse Generator Pulse Output State,In_221009063035,void,Configure Pulse Generator Pulse Output State,普通指令,普通返回值,PULM:OUT:STATe %state,"Name: state, Value: ON, Type: System.String, Role: 普通参数, Desc: Pulse Output State, Privilege: 管理员设置" +信号源,0,Configure Pulse Width,In_221009063035,void,Configure Pulse Width,普通指令,普通返回值,PULM:WIDTh %width,"Name: width, Value: &width, Type: System.String, Role: 普通参数, Desc: width, Privilege: 管理员设置" +信号源,0,Configure Pulse Period,In_221009063035,void,Configure Pulse Period,普通指令,普通返回值,PULM:PER %period,"Name: period, Value: &period, Type: System.String, Role: 普通参数, Desc: period, Privilege: 管理员设置" +,0,configuerQueryMarker,,,configuerQueryMarker,普通指令,普通返回值,, +,0,GetSwitchSelectUserNameList,,,获取自定义开关名称列表,普通指令,普通返回值,,"Name: switchIndex, Value: 0, Type: System.String, Role: 普通参数, Desc: 开关序号, Privilege: 管理员设置 +Name: userNameList, Value: &SwitchUserNameList, Type: System.String[], Role: 普通参数, Desc: 信息列表, Privilege: 管理员设置 +Name: totalCount, Value: &userNameCount, Type: System.Int32, Role: 普通参数, Desc: 列表总数, Privilege: 管理员设置" +,0,assignValue,,,赋值函数,普通指令,普通返回值,,"Name: AssignNumber, Value: 0, Type: System.Int32, Role: 普通参数, Desc: 赋值数, Privilege: 管理员设置 +Name: Assigned, Value: &userNameLoopIndex, Type: System.Int32&, Role: 普通参数, Desc: 被赋数, Privilege: 管理员设置" +,0,loopBegin,,,循环开始,循环开始,普通返回值,,"Name: 循环起始值, Value: 0, Type: System.Int32, Role: 循环起始值, Desc: 循环起始值, Privilege: 管理员设置 +Name: 循环终点值, Value: &userNameCount, Type: System.Int32, Role: 循环终点值, Desc: 循环终点值, Privilege: 管理员设置 +Name: 循环步进量, Value: 1, Type: System.Int32, Role: 循环步进量, Desc: 循环步进量, Privilege: 管理员设置 +Name: 步进量变化方式, Value: +, Type: System.String, Role: 普通参数, Desc: 步进量变化方式, Privilege: 管理员设置" +,0,GetSwitchSelectNameList,,,获取自选开关名称列表,普通指令,普通返回值,,"Name: switchIndex, Value: 0, Type: System.String, Role: 普通参数, Desc: 开关序号, Privilege: 管理员设置 +Name: PathUserName, Value: &SwitchUserNameList[&userNameLoopIndex], Type: System.String, Role: 普通参数, Desc: 通道自定义名称, Privilege: 管理员设置 +Name: PathNameList, Value: &SwitchNameList, Type: System.String[], Role: 普通参数, Desc: 信息列表, Privilege: 管理员设置 +Name: totalCount, Value: &curNameCount, Type: System.Int32, Role: 普通参数, Desc: 列表总数, Privilege: 管理员设置" +,0,GetSwitchSelectCmdList,,,获取自选开关指令列表,普通指令,普通返回值,,"Name: SwitchIndex, Value: 0, Type: System.String, Role: 普通参数, Desc: 开关序号, Privilege: 管理员设置 +Name: PathUserName, Value: &SwitchUserNameList[&userNameLoopIndex], Type: System.String, Role: 普通参数, Desc: 通道自定义名称, Privilege: 管理员设置 +Name: PathNameList, Value: &SwitchCmdList, Type: System.String[], Role: 普通参数, Desc: 信息列表, Privilege: 管理员设置" +,0,GetSwitchSelectNoteList,,,获取自选开关备注列表,普通指令,普通返回值,,"Name: SwitchIndex, Value: 0, Type: System.String, Role: 普通参数, Desc: 开关序号, Privilege: 管理员设置 +Name: PathUserName, Value: &SwitchUserNameList[&userNameLoopIndex], Type: System.String, Role: 普通参数, Desc: 通道自定义名称, Privilege: 管理员设置 +Name: PathNameList, Value: &SwitchNoteList, Type: System.String[], Role: 普通参数, Desc: 信息列表, Privilege: 管理员设置" +,0,GetSwitchSelectTransSumList,,,获取自选通路线损列表,普通指令,普通返回值,,"Name: SwitchIndex, Value: 0, Type: System.String, Role: 普通参数, Desc: 开关序号, Privilege: 管理员设置 +Name: PathUserName, Value: &SwitchUserNameList[&userNameLoopIndex], Type: System.String, Role: 普通参数, Desc: 通道自定义名称, Privilege: 管理员设置 +Name: PathNameList, Value: &SwitchTransList, Type: System.String[], Role: 普通参数, Desc: 信息列表, Privilege: 管理员设置" +,0,assignValue,,,赋值函数,普通指令,普通返回值,,"Name: AssignNumber, Value: 0, Type: System.Int32, Role: 普通参数, Desc: 赋值数, Privilege: 管理员设置 +Name: Assigned, Value: &switchloopNo, Type: System.Int32&, Role: 普通参数, Desc: 被赋数, Privilege: 管理员设置" +,0,loopBegin,,,循环开始,循环开始,普通返回值,,"Name: 循环起始值, Value: 0, Type: System.Int32, Role: 循环起始值, Desc: 循环起始值, Privilege: 管理员设置 +Name: 循环终点值, Value: 1, Type: System.Int32, Role: 循环终点值, Desc: 4个循环, Privilege: 管理员设置 +Name: 循环步进量, Value: 1, Type: System.Int32, Role: 循环步进量, Desc: 循环步进量, Privilege: 管理员设置 +Name: 步进量变化方式, Value: +, Type: System.String, Role: 普通参数, Desc: 步进量变化方式, Privilege: 管理员设置" +,0,setSwitchPathNote,,,配置开关当前通道的备注,普通指令,普通返回值,,"Name: noteInfo, Value: &SwitchNoteList[&switchloopNo], Type: System.String, Role: 普通参数, Desc: 测试场景及通道,备注信息, Privilege: 管理员设置" +,0,testShowMessage,,,提示信息函数,普通指令,普通返回值,,"Name: hint, Value: &SwitchUserNameList[&userNameLoopIndex], Type: System.String, Role: 普通参数, Desc: hint, Privilege: 管理员设置 +Name: title, Value: 软件提示, Type: System.String, Role: 普通参数, Desc: title, Privilege: 管理员设置 +Name: buttonContent, Value: 继续, Type: System.String, Role: 普通参数, Desc: buttonContent, Privilege: 管理员设置 +Name: DUTSleepTime, Value: 1, Type: System.Inter32, Role: 普通参数, Desc: DUT输入等待时间, Privilege: 管理员设置" +,0,assignValue,,,赋值函数,普通指令,普通返回值,,"Name: AssignNumber, Value: 0, Type: System.Int32, Role: 普通参数, Desc: 赋值数, Privilege: 管理员设置 +Name: Assigned, Value: &curNameLoopIndex, Type: System.Int32&, Role: 普通参数, Desc: 被赋数, Privilege: 管理员设置" +,0,loopBegin,,,循环开始,循环开始,普通返回值,,"Name: 循环起始值, Value: 0, Type: System.Int32, Role: 循环起始值, Desc: 循环起始值, Privilege: 管理员设置 +Name: 循环终点值, Value: &curNameCount, Type: System.Int32, Role: 循环终点值, Desc: 循环终点值, Privilege: 管理员设置 +Name: 循环步进量, Value: 1, Type: System.Int32, Role: 循环步进量, Desc: 循环步进量, Privilege: 管理员设置 +Name: 步进量变化方式, Value: +, Type: System.String, Role: 普通参数, Desc: 步进量变化方式, Privilege: 管理员设置" +开关矩阵,0,SetPath,In_230209035212,void,SetPath,普通指令,普通返回值,ROUTe:CLOSe %PathInfo,"Name: PathInfo, Value: &SwitchCmdList[&curNameLoopIndex], Type: System.String, Role: 普通参数, Desc: PathInfo, Privilege: 管理员设置" +,0,threadWaiting,,,线程等待函数,普通指令,普通返回值,,"Name: WaitingTime, Value: 100, Type: System.Int32, Role: 普通参数, Desc: 线程等待时间(毫秒计), Privilege: 管理员设置" +开关矩阵,0,SetPath,In_230727120720,void,SetPath,普通指令,普通返回值,ROUTe:CLOSe %PathInfo,"Name: PathInfo, Value: &SwitchCmdList[&curNameLoopIndex], Type: System.String, Role: 普通参数, Desc: PathInfo, Privilege: 管理员设置" +,0,addValue,,,加法函数,普通指令,普通返回值,,"Name: Augend, Value: &curNameLoopIndex, Type: System.Int32, Role: 普通参数, Desc: 被加数, Privilege: 管理员设置 +Name: Addend, Value: 1, Type: System.Int32, Role: 普通参数, Desc: 加数, Privilege: 管理员设置 +Name: Sum, Value: &curNameLoopIndex, Type: System.Int32&, Role: 普通参数, Desc: 和, Privilege: 管理员设置" +,0,loopEnd,,,循环结束,循环结束,普通返回值,, +,0,SCXFreqCompareAssign,,,SCXFreqCompareAssign,普通指令,普通返回值,,"Name: channelName, Value: &SwitchUserNameList[&userNameLoopIndex], Type: System.String, Role: 普通参数, Desc: channelName, Privilege: 管理员设置 +Name: SCStartFreq, Value: &SCStartFreq, Type: System.String, Role: 普通参数, Desc: SCStartFreq, Privilege: 管理员设置 +Name: SCStopFreq, Value: &SCStopFreq, Type: System.String, Role: 普通参数, Desc: SCStopFreq, Privilege: 管理员设置 +Name: XStartFreq, Value: &XStartFreq, Type: System.String, Role: 普通参数, Desc: XStartFreq, Privilege: 管理员设置 +Name: XStopFreq, Value: &XStopFreq, Type: System.String, Role: 普通参数, Desc: XStopFreq, Privilege: 管理员设置 +Name: startFreq, Value: &startFreq, Type: System.String&, Role: 普通参数, Desc: startFreq, Privilege: 管理员设置 +Name: stopFreq, Value: &stopFreq, Type: System.String&, Role: 普通参数, Desc: stopFreq, Privilege: 管理员设置" +,0,assignValue,,,赋值函数,普通指令,普通返回值,,"Name: AssignNumber, Value: 0, Type: System.Int32, Role: 普通参数, Desc: 赋值数, Privilege: 管理员设置 +Name: Assigned, Value: &imageSpectrumFreqIndex, Type: System.Int32&, Role: 普通参数, Desc: 被赋数, Privilege: 管理员设置" +,0,assignValue,,,赋值函数,普通指令,普通返回值,,"Name: AssignNumber, Value: 0, Type: System.Int32, Role: 普通参数, Desc: 赋值数, Privilege: 管理员设置 +Name: Assigned, Value: &freqIndex, Type: System.Int32&, Role: 普通参数, Desc: 被赋数, Privilege: 管理员设置" +,0,fiveValueCompareAssign,,,fiveValueCompareAssign,普通指令,普通返回值,,"Name: param1, Value: &startFreq, Type: System.String, Role: 普通参数, Desc: param1, Privilege: 管理员设置 +Name: param2, Value: &stopFreq, Type: System.String, Role: 普通参数, Desc: param2, Privilege: 管理员设置 +Name: param3, Value: &imageStepFreqSC, Type: System.String, Role: 普通参数, Desc: param3, Privilege: 管理员设置 +Name: param4, Value: &imageStepFreqX, Type: System.String, Role: 普通参数, Desc: param4, Privilege: 管理员设置 +Name: param5, Value: &imagestepFreq, Type: System.String, Role: 普通参数, Desc: param5, Privilege: 管理员设置" +,0,fiveValueCompareAssign,,,fiveValueCompareAssign,普通指令,普通返回值,,"Name: param1, Value: &startFreq, Type: System.String, Role: 普通参数, Desc: param1, Privilege: 管理员设置 +Name: param2, Value: &stopFreq, Type: System.String, Role: 普通参数, Desc: param2, Privilege: 管理员设置 +Name: param3, Value: &imagePowerSC, Type: System.String, Role: 普通参数, Desc: param3, Privilege: 管理员设置 +Name: param4, Value: &imagePowerX, Type: System.String, Role: 普通参数, Desc: param4, Privilege: 管理员设置 +Name: param5, Value: &imagePower, Type: System.String, Role: 普通参数, Desc: param5, Privilege: 管理员设置" +,0,loopNumValue,,,loopNumValue,普通指令,普通返回值,,"Name: startFreq, Value: &startFreq, Type: System.String, Role: 普通参数, Desc: startFreq, Privilege: 管理员设置 +Name: stopFreq, Value: &stopFreq, Type: System.String, Role: 普通参数, Desc: stopFreq, Privilege: 管理员设置 +Name: stepFreq, Value: &imagestepFreq, Type: System.String, Role: 普通参数, Desc: stepFreq, Privilege: 管理员设置 +Name: loopNum, Value: &loopNum, Type: System.Int32, Role: 普通参数, Desc: loopNum, Privilege: 管理员设置" +,0,assignValue,,,赋值函数,普通指令,普通返回值,,"Name: AssignNumber, Value: &startFreq, Type: System.String, Role: 普通参数, Desc: 赋值数, Privilege: 管理员设置 +Name: Assigned, Value: ¢erFreq, Type: System.String&, Role: 普通参数, Desc: 被赋数, Privilege: 管理员设置" +信号源,0,Configure RF Output,In_221009063035,void,Configure RF Output,普通指令,普通返回值,OUTPut %state,"Name: state, Value: ON, Type: System.String, Role: 普通参数, Desc: state:ON|OFF|1|0, Privilege: 管理员设置" +频谱分析仪,0,Configure Marker State,In_230421040832,void,Configure Marker State,普通指令,普通返回值,CALCulate:MARKer%marker:STATe %state,"Name: marker, Value: 1, Type: System.Int32, Role: 普通参数, Desc: marker:1|2|3|4|5|6|7|8, Privilege: 管理员设置 +Name: state, Value: ON, Type: System.String, Role: 普通参数, Desc: state:ON/OFF, Privilege: 管理员设置" +,0,loopBegin,,,循环开始,循环开始,普通返回值,,"Name: 循环起始值, Value: 0, Type: System.Int32, Role: 循环起始值, Desc: 循环起始值, Privilege: 管理员设置 +Name: 循环终点值, Value: &loopNum, Type: System.Int32, Role: 循环终点值, Desc: 循环终点值, Privilege: 管理员设置 +Name: 循环步进量, Value: 1, Type: System.Int32, Role: 循环步进量, Desc: 循环步进量, Privilege: 管理员设置 +Name: 步进量变化方式, Value: +, Type: System.String, Role: 普通参数, Desc: 步进量变化方式, Privilege: 管理员设置" +,0,setSwitchPathTransducer,,,配置开关当前通道的线损路径,普通指令,普通返回值,,"Name: IsIn, Value: true, Type: System.Boolean, Role: 普通参数, Desc: 文件名, Privilege: 管理员设置 +Name: TransducerPath, Value: &SwitchTransList[0], Type: System.String, Role: 普通参数, Desc: 输入线损文件, Privilege: 管理员设置" +,0,fiveValueCompareAssign,,,fiveValueCompareAssign,普通指令,普通返回值,,"Name: param1, Value: &startFreq, Type: System.String, Role: 普通参数, Desc: param1, Privilege: 管理员设置 +Name: param2, Value: &stopFreq, Type: System.String, Role: 普通参数, Desc: param2, Privilege: 管理员设置 +Name: param3, Value: &imageSpectrumFreqSC[&imageSpectrumFreqIndex], Type: System.String, Role: 普通参数, Desc: param3, Privilege: 管理员设置 +Name: param4, Value: &imageSpectrumFreqX[&imageSpectrumFreqIndex], Type: System.String, Role: 普通参数, Desc: param4, Privilege: 管理员设置 +Name: param5, Value: &imageSpectrumFreq, Type: System.String, Role: 普通参数, Desc: param5, Privilege: 管理员设置" +,0,FreqAddValue,,,FreqAddValue,普通指令,普通返回值,,"Name: startFreq, Value: &startFreq, Type: System.String, Role: 普通参数, Desc: startFreq, Privilege: 管理员设置 +Name: stopFreq, Value: &stopFreq, Type: System.String, Role: 普通参数, Desc: stopFreq, Privilege: 管理员设置 +Name: stepFreq, Value: &imagestepFreq, Type: System.String, Role: 普通参数, Desc: stepFreq, Privilege: 管理员设置 +Name: order, Value: 0, Type: System.String, Role: 普通参数, Desc: 0正序,1倒序, Privilege: 管理员设置 +Name: FreqIndex, Value: &freqIndex, Type: System.Int32, Role: 普通参数, Desc: FreqIndex, Privilege: 管理员设置 +Name: currentFreq, Value: ¢erFreq, Type: System.String&, Role: 普通参数, Desc: currentFreq, Privilege: 管理员设置" +,0,readILDataFromFile,,,从文件读测试数据,普通指令,普通返回值,,"Name: dataName, Value: &SwitchTransList[0], Type: System.String, Role: 普通参数, Desc: 文件名, Privilege: 管理员设置 +Name: dataX, Value: ¢erFreq, Type: System.String, Role: 普通参数, Desc: 频率, Privilege: 管理员设置 +Name: dataY, Value: &inPutILY, Type: System.String&, Role: 普通参数, Desc: Y轴数据, Privilege: 管理员设置" +,0,readILDataFromFile,,,从文件读测试数据,普通指令,普通返回值,,"Name: dataName, Value: &SwitchTransList[1], Type: System.String, Role: 普通参数, Desc: 文件名, Privilege: 管理员设置 +Name: dataX, Value: ¢erFreq, Type: System.String, Role: 普通参数, Desc: 频率, Privilege: 管理员设置 +Name: dataY, Value: 0, Type: System.String&, Role: 普通参数, Desc: Y轴数据, Privilege: 管理员设置" +,0,DUTInputPower,,,DUT输入功率,普通指令,普通返回值,,"Name: DUTInputPower, Value: &imagePower, Type: System.String, Role: 普通参数, Desc: DUTInputPower, Privilege: 管理员设置 +Name: DUTAtt, Value: &attenuationSSG, Type: System.String, Role: 普通参数, Desc: DUT前端衰减器, Privilege: 管理员设置 +Name: DUTLineIL, Value: &inPutILY, Type: System.String, Role: 普通参数, Desc: DUTLineIL, Privilege: 管理员设置 +Name: power, Value: &RFimagePower, Type: System.String, Role: 普通参数, Desc: power, Privilege: 管理员设置" +信号源,0,Configure RF Power,In_211026053452,void,Configure RF Power,普通指令,普通返回值,POWer %power,"Name: power, Value: &RFimagePower, Type: System.String, Role: 普通参数, Desc: power, Privilege: 管理员设置" +信号源,0,Configure RF Frequency,In_211026053452,void,Configure RF Frequency,普通指令,普通返回值,FREQuency %freq,"Name: freq, Value: ¢erFreq, Type: System.String, Role: 普通参数, Desc: freq, Privilege: 管理员设置" +频谱分析仪,0,Configure Frequency Center,In_211026061355,void,Configure Frequency Center,普通指令,普通返回值,:FREQuency:CENTer %centerFreq,"Name: centerFreq, Value: ¢erFreq, Type: System.String, Role: 普通参数, Desc: centerFreq, Privilege: 管理员设置 +Name: window, Value: 1, Type: System.Int32, Role: 普通参数, Desc: window, Privilege: 管理员设置" +频谱分析仪,0,Configure Marker X,In_230421040832,void,Configure Marker X,普通指令,普通返回值,CALCulate:MARKer%marker:X %freq,"Name: marker, Value: 1, Type: System.Int32, Role: 普通参数, Desc: marker, Privilege: 管理员设置 +Name: freq, Value: ¢erFreq, Type: System.String, Role: 普通参数, Desc: freq, Privilege: 管理员设置" +频谱分析仪,0,Configure Reference Level,In_211026061355,void,Configure Reference Level,普通指令,普通返回值,DISPlay:WINDow:TRACe:Y:RLEVel %referenceLevel,"Name: referenceLevel, Value: &refLevel, Type: System.String, Role: 普通参数, Desc: referenceLevel, Privilege: 管理员设置" +频谱分析仪,0,Configure Trace Max Hold,In_220127031511,void,Configure Trace Max Hold,普通指令,普通返回值,:TRAC%trace:TYPE MAXH,"Name: trace, Value: 1, Type: System.Int32, Role: 普通参数, Desc: trace, Privilege: 管理员设置" +,0,threadWaiting,,,线程等待函数,普通指令,普通返回值,,"Name: WaitingTime, Value: 3000, Type: System.Int32, Role: 普通参数, Desc: 线程等待时间(毫秒计), Privilege: 管理员设置" +频谱分析仪,0,Marker Peak Max,In_220124062140,void,Marker Peak Max,普通指令,普通返回值,CALCulate:MARKer%marker:MAXimum,"Name: marker, Value: 1, Type: System.Int32, Role: 普通参数, Desc: marker, Privilege: 管理员设置" +,0,threadWaiting,,,线程等待函数,普通指令,普通返回值,,"Name: WaitingTime, Value: 300, Type: System.Int32, Role: 普通参数, Desc: 线程等待时间(毫秒计), Privilege: 管理员设置" +频谱分析仪,0,Query Marker Y,In_230421040832,void,Query Marker Y,读取测量结果,普通返回值,CALCulate:MARKer%marker:Y?amplitude,"Name: marker, Value: 1, Type: System.Int32, Role: 普通参数, Desc: marker, Privilege: 管理员设置 +Name: amplitude, Value: &imageSpectrumPower1, Type: System.String&, Role: 测量结果(Y坐标), Desc: amplitude, Privilege: 管理员设置 +Name: window, Value: 1, Type: System.Int32, Role: 普通参数, Desc: window, Privilege: 管理员设置" +信号源,0,Query RF Frequency,In_230809025811,void,Query RF Frequency,读取测量结果,普通返回值,FREQuency?frequency,"Name: frequency, Value: , Type: System.String&, Role: 测量结果(X坐标), Desc: frequency, Privilege: 管理员设置" +,0,drawDiagram,,,画图函数,普通指令,普通返回值,,"Name: Title, Value: 镜频抑制P1, Type: System.String, Role: 普通参数, Desc: 图表标题, Privilege: 管理员设置 +Name: xTitle, Value: X坐标, Type: System.String, Role: 普通参数, Desc: 图表X轴标题, Privilege: 管理员设置 +Name: xMinimum, Value: , Type: System.Double, Role: 普通参数, Desc: 图表X轴起始点, Privilege: 管理员设置 +Name: xMaximum, Value: , Type: System.Double, Role: 普通参数, Desc: 图表X轴终止点, Privilege: 管理员设置 +Name: XAxisInterval, Value: , Type: System.Double, Role: 普通参数, Desc: 图表X轴最大刻度间隔, Privilege: 管理员设置 +Name: yTitle, Value: Y坐标, Type: System.String, Role: 普通参数, Desc: 图表Y轴标题, Privilege: 管理员设置 +Name: yMinimum, Value: , Type: System.Double, Role: 普通参数, Desc: 图表Y轴起始点, Privilege: 管理员设置 +Name: yMaximum, Value: , Type: System.Double, Role: 普通参数, Desc: 图表Y轴终止点, Privilege: 管理员设置 +Name: YAxisInterval, Value: , Type: System.Double, Role: 普通参数, Desc: 图表Y轴最大刻度间隔, Privilege: 管理员设置 +Name: SeriesChartType, Value: , Type: System.String, Role: 普通参数, Desc: 图表类型, Privilege: 管理员设置 +Name: SeriesChartNumber, Value: 0, Type: System.Int32, Role: 普通参数, Desc: 图表编号(唯一标识号), Privilege: 管理员设置 +Name: LimitMax, Value: 100, Type: System.String, Role: 普通参数, Desc: 极大限值, Privilege: 管理员设置 +Name: LimitMin, Value: -100, Type: System.String, Role: 普通参数, Desc: 极小限值, Privilege: 管理员设置 +Name: XAxisUnit, Value: Hz, Type: System.String, Role: 普通参数, Desc: X轴坐标单位, Privilege: 管理员设置 +Name: YAxisUnit, Value: dB, Type: System.String, Role: 普通参数, Desc: Y轴坐标单位, Privilege: 管理员设置 +Name: MarkerYMax, Value: 0, Type: System.String, Role: 普通参数, Desc: MarkerPeackY, Privilege: 管理员设置 +Name: MarkerXMax, Value: 0, Type: System.String, Role: 普通参数, Desc: MarkerPeackX, Privilege: 管理员设置 +Name: resultConclusion, Value: 0, Type: System.String, Role: 普通参数, Desc: resultConclusion, Privilege: 管理员设置" +频谱分析仪,0,Configure Trace Clear,In_230421040832,void,Configure Trace Clear,普通指令,普通返回值,:TRACe%trace:TYPE WRITe,"Name: trace, Value: 1, Type: System.Int32, Role: 普通参数, Desc: trace, Privilege: 管理员设置" +频谱分析仪,0,Configure Frequency Center,In_230421040832,void,Configure Frequency Center,普通指令,普通返回值,:FREQuency:CENTer %centerFreq,"Name: centerFreq, Value: &imageSpectrumFreq, Type: System.String, Role: 普通参数, Desc: centerFreq, Privilege: 管理员设置 +Name: window, Value: 1, Type: System.Int32, Role: 普通参数, Desc: window, Privilege: 管理员设置" +频谱分析仪,0,Configure Marker X,In_230421040832,void,Configure Marker X,普通指令,普通返回值,CALCulate:MARKer%marker:X %freq,"Name: marker, Value: 1, Type: System.Int32, Role: 普通参数, Desc: marker, Privilege: 管理员设置 +Name: freq, Value: &imageSpectrumFreq, Type: System.String, Role: 普通参数, Desc: freq, Privilege: 管理员设置" +频谱分析仪,0,Configure Reference Level,In_230421040832,void,Configure Reference Level,普通指令,普通返回值,DISPlay:WINDow:TRACe:Y:RLEVel %referenceLevel,"Name: referenceLevel, Value: 5, Type: System.Double, Role: 普通参数, Desc: referenceLevel, Privilege: 管理员设置" +频谱分析仪,0,Configure Trace Max Hold,In_230421040832,void,Configure Trace Max Hold,普通指令,普通返回值,:TRAC%trace:TYPE MAXH,"Name: trace, Value: 1, Type: System.Int32, Role: 普通参数, Desc: trace, Privilege: 管理员设置" +,0,threadWaiting,,,线程等待函数,普通指令,普通返回值,,"Name: WaitingTime, Value: 3000, Type: System.Int32, Role: 普通参数, Desc: 线程等待时间(毫秒计), Privilege: 管理员设置" +频谱分析仪,0,Marker Peak Max,In_220124062140,void,Marker Peak Max,普通指令,普通返回值,CALCulate:MARKer%marker:MAXimum,"Name: marker, Value: 1, Type: System.Int32, Role: 普通参数, Desc: marker, Privilege: 管理员设置" +,0,threadWaiting,,,线程等待函数,普通指令,普通返回值,,"Name: WaitingTime, Value: 300, Type: System.Int32, Role: 普通参数, Desc: 线程等待时间(毫秒计), Privilege: 管理员设置" +频谱分析仪,0,Query Marker Y,In_230421040832,void,Query Marker Y,读取测量结果,普通返回值,CALCulate:MARKer%marker:Y?amplitude,"Name: marker, Value: 1, Type: System.Int32, Role: 普通参数, Desc: marker, Privilege: 管理员设置 +Name: amplitude, Value: &imageSpectrumPower2, Type: System.String&, Role: 测量结果(Y坐标), Desc: amplitude, Privilege: 管理员设置 +Name: window, Value: 1, Type: System.Int32, Role: 普通参数, Desc: window, Privilege: 管理员设置" +信号源,0,Query RF Frequency,In_230809025811,void,Query RF Frequency,读取测量结果,普通返回值,FREQuency?frequency,"Name: frequency, Value: , Type: System.String&, Role: 测量结果(X坐标), Desc: frequency, Privilege: 管理员设置" +,0,drawDiagram,,,画图函数,普通指令,普通返回值,,"Name: Title, Value: 镜频抑制P2, Type: System.String, Role: 普通参数, Desc: 图表标题, Privilege: 管理员设置 +Name: xTitle, Value: X坐标, Type: System.String, Role: 普通参数, Desc: 图表X轴标题, Privilege: 管理员设置 +Name: xMinimum, Value: , Type: System.Double, Role: 普通参数, Desc: 图表X轴起始点, Privilege: 管理员设置 +Name: xMaximum, Value: , Type: System.Double, Role: 普通参数, Desc: 图表X轴终止点, Privilege: 管理员设置 +Name: XAxisInterval, Value: , Type: System.Double, Role: 普通参数, Desc: 图表X轴最大刻度间隔, Privilege: 管理员设置 +Name: yTitle, Value: Y坐标, Type: System.String, Role: 普通参数, Desc: 图表Y轴标题, Privilege: 管理员设置 +Name: yMinimum, Value: , Type: System.Double, Role: 普通参数, Desc: 图表Y轴起始点, Privilege: 管理员设置 +Name: yMaximum, Value: , Type: System.Double, Role: 普通参数, Desc: 图表Y轴终止点, Privilege: 管理员设置 +Name: YAxisInterval, Value: , Type: System.Double, Role: 普通参数, Desc: 图表Y轴最大刻度间隔, Privilege: 管理员设置 +Name: SeriesChartType, Value: , Type: System.String, Role: 普通参数, Desc: 图表类型, Privilege: 管理员设置 +Name: SeriesChartNumber, Value: 1, Type: System.Int32, Role: 普通参数, Desc: 图表编号(唯一标识号), Privilege: 管理员设置 +Name: LimitMax, Value: 100, Type: System.String, Role: 普通参数, Desc: 极大限值, Privilege: 管理员设置 +Name: LimitMin, Value: -100, Type: System.String, Role: 普通参数, Desc: 极小限值, Privilege: 管理员设置 +Name: XAxisUnit, Value: Hz, Type: System.String, Role: 普通参数, Desc: X轴坐标单位, Privilege: 管理员设置 +Name: YAxisUnit, Value: dB, Type: System.String, Role: 普通参数, Desc: Y轴坐标单位, Privilege: 管理员设置 +Name: MarkerYMax, Value: 0, Type: System.String, Role: 普通参数, Desc: MarkerPeackY, Privilege: 管理员设置 +Name: MarkerXMax, Value: 0, Type: System.String, Role: 普通参数, Desc: MarkerPeackX, Privilege: 管理员设置 +Name: resultConclusion, Value: 0, Type: System.String, Role: 普通参数, Desc: resultConclusion, Privilege: 管理员设置" +频谱分析仪,0,Configure Trace Clear,In_220209110325,void,Configure Trace Clear,普通指令,普通返回值,:TRACe%trace:TYPE WRITe,"Name: trace, Value: 1, Type: System.Int32, Role: 普通参数, Desc: trace, Privilege: 管理员设置" +,0,saveToXValue,,,数据转换X轴值,普通指令,普通返回值,,"Name: XValue, Value: ¢erFreq, Type: System.String, Role: 普通参数, Desc: XValue, Privilege: 管理员设置 +Name: convertXValue, Value: ¢erFreq, Type: System.String&, Role: 普通参数, Desc: convertXValue, Privilege: 管理员设置" +,0,subValue,,,减法函数,普通指令,普通返回值,,"Name: Minuend, Value: &imageSpectrumPower1, Type: System.String, Role: 普通参数, Desc: 被减数, Privilege: 管理员设置 +Name: Subtrahend, Value: &imageSpectrumPower2, Type: System.String, Role: 普通参数, Desc: 减数, Privilege: 管理员设置 +Name: dif, Value: &imageRejection, Type: System.String&, Role: 普通参数, Desc: 差, Privilege: 管理员设置" +,0,saveToYValue,,,测试数据转换Y轴值,普通指令,普通返回值,,"Name: calYValue, Value: &imageRejection, Type: System.String, Role: 普通参数, Desc: calYValue, Privilege: 管理员设置 +Name: convertYValue, Value: &imageRejection, Type: System.String&, Role: 普通参数, Desc: convertYValue, Privilege: 管理员设置" +,0,drawDiagram,,,画图函数,普通指令,普通返回值,,"Name: Title, Value: 镜频抑制比, Type: System.String, Role: 普通参数, Desc: 图表标题, Privilege: 管理员设置 +Name: xTitle, Value: X坐标, Type: System.String, Role: 普通参数, Desc: 图表X轴标题, Privilege: 管理员设置 +Name: xMinimum, Value: , Type: System.Double, Role: 普通参数, Desc: 图表X轴起始点, Privilege: 管理员设置 +Name: xMaximum, Value: , Type: System.Double, Role: 普通参数, Desc: 图表X轴终止点, Privilege: 管理员设置 +Name: XAxisInterval, Value: , Type: System.Double, Role: 普通参数, Desc: 图表X轴最大刻度间隔, Privilege: 管理员设置 +Name: yTitle, Value: Y坐标, Type: System.String, Role: 普通参数, Desc: 图表Y轴标题, Privilege: 管理员设置 +Name: yMinimum, Value: , Type: System.Double, Role: 普通参数, Desc: 图表Y轴起始点, Privilege: 管理员设置 +Name: yMaximum, Value: , Type: System.Double, Role: 普通参数, Desc: 图表Y轴终止点, Privilege: 管理员设置 +Name: YAxisInterval, Value: , Type: System.Double, Role: 普通参数, Desc: 图表Y轴最大刻度间隔, Privilege: 管理员设置 +Name: SeriesChartType, Value: , Type: System.String, Role: 普通参数, Desc: 图表类型, Privilege: 管理员设置 +Name: SeriesChartNumber, Value: 2, Type: System.Int32, Role: 普通参数, Desc: 图表编号(唯一标识号), Privilege: 管理员设置 +Name: LimitMax, Value: 100, Type: System.String, Role: 普通参数, Desc: 极大限值, Privilege: 管理员设置 +Name: LimitMin, Value: &imageRejectionLimit, Type: System.String, Role: 普通参数, Desc: 极小限值, Privilege: 管理员设置 +Name: XAxisUnit, Value: Hz, Type: System.String, Role: 普通参数, Desc: X轴坐标单位, Privilege: 管理员设置 +Name: YAxisUnit, Value: dB, Type: System.String, Role: 普通参数, Desc: Y轴坐标单位, Privilege: 管理员设置 +Name: MarkerYMax, Value: 0, Type: System.String, Role: 普通参数, Desc: MarkerPeackY, Privilege: 管理员设置 +Name: MarkerXMax, Value: 0, Type: System.String, Role: 普通参数, Desc: MarkerPeackX, Privilege: 管理员设置 +Name: resultConclusion, Value: 0, Type: System.String, Role: 普通参数, Desc: resultConclusion, Privilege: 管理员设置" +,0,addValue,,,加法函数,普通指令,普通返回值,,"Name: Augend, Value: ¢erFreq, Type: System.String, Role: 普通参数, Desc: 被加数, Privilege: 管理员设置 +Name: Addend, Value: &imagestepFreq, Type: System.String, Role: 普通参数, Desc: 加数, Privilege: 管理员设置 +Name: Sum, Value: ¢erFreq, Type: System.String&, Role: 普通参数, Desc: 和, Privilege: 管理员设置" +,0,addValue,,,加法函数,普通指令,普通返回值,,"Name: Augend, Value: &imageSpectrumFreqIndex, Type: System.Int32, Role: 普通参数, Desc: 被加数, Privilege: 管理员设置 +Name: Addend, Value: 1, Type: System.Int32, Role: 普通参数, Desc: 加数, Privilege: 管理员设置 +Name: Sum, Value: &imageSpectrumFreqIndex, Type: System.Int32&, Role: 普通参数, Desc: 和, Privilege: 管理员设置" +,0,addValue,,,加法函数,普通指令,普通返回值,,"Name: Augend, Value: &freqIndex, Type: System.Int32, Role: 普通参数, Desc: 被加数, Privilege: 管理员设置 +Name: Addend, Value: 1, Type: System.Int32, Role: 普通参数, Desc: 加数, Privilege: 管理员设置 +Name: Sum, Value: &freqIndex, Type: System.Int32&, Role: 普通参数, Desc: 和, Privilege: 管理员设置" +,0,loopEnd,,,循环结束,循环结束,普通返回值,, +,0,ChannelLoopEnd,,,ChannelLoopEnd,普通指令,普通返回值,, +,0,addValue,,,加法函数,普通指令,普通返回值,,"Name: Augend, Value: &switchloopNo, Type: System.Int32, Role: 普通参数, Desc: 被加数, Privilege: 管理员设置 +Name: Addend, Value: 1, Type: System.Int32, Role: 普通参数, Desc: 加数, Privilege: 管理员设置 +Name: Sum, Value: &switchloopNo, Type: System.Int32&, Role: 普通参数, Desc: 和, Privilege: 管理员设置" +,0,loopEnd,,,循环结束,循环结束,普通返回值,, +,0,addValue,,,加法函数,普通指令,普通返回值,,"Name: Augend, Value: &userNameLoopIndex, Type: System.Int32, Role: 普通参数, Desc: 被加数, Privilege: 管理员设置 +Name: Addend, Value: 1, Type: System.Int32, Role: 普通参数, Desc: 加数, Privilege: 管理员设置 +Name: Sum, Value: &userNameLoopIndex, Type: System.Int32&, Role: 普通参数, Desc: 和, Privilege: 管理员设置" +,0,loopEnd,,,循环结束,循环结束,普通返回值,, +信号源,0,Configure RF Output,In_211207044141,void,Configure RF Output,普通指令,普通返回值,OUTPut %state,"Name: state, Value: OFF, Type: System.String, Role: 普通参数, Desc: state, Privilege: 管理员设置" +信号源,0,Configure Pulse Modulation State,In_211207044141,void,Configure Pulse Modulation State,普通指令,普通返回值,"PULM:STATe %state +MODulation %state","Name: state, Value: OFF, Type: System.String, Role: 普通参数, Desc: state:ON|OFF, Privilege: 管理员设置" +频谱分析仪,0,Preset,In_230421040832,void,Preset,普通指令,普通返回值,"*RST +SYSTem:DISPlay:UPDate ON", +频谱分析仪,0,DisConnecte Control,In_220930084739,void,DisConnecte Control,普通指令,普通返回值,:SYSTem:LOCal, +信号源,0,DisConnecte Control,In_220929033205,void,DisConnecte Control,普通指令,普通返回值,:SYSTem:REMote 0, diff --git a/backend/planner/instruction/镜频指令抽取.xlsx b/backend/planner/instruction/镜频指令抽取.xlsx new file mode 100644 index 0000000..51529f8 Binary files /dev/null and b/backend/planner/instruction/镜频指令抽取.xlsx differ diff --git a/backend/planner/knowledge/上电_镜频测试_无参数.docx b/backend/planner/knowledge/上电_镜频测试_无参数.docx new file mode 100644 index 0000000..da36465 Binary files /dev/null and b/backend/planner/knowledge/上电_镜频测试_无参数.docx differ diff --git a/backend/planner/mineru_client.py b/backend/planner/mineru_client.py new file mode 100644 index 0000000..e8250fd --- /dev/null +++ b/backend/planner/mineru_client.py @@ -0,0 +1,150 @@ +import os +import io +import time +import zipfile +import requests +from pathlib import Path + +API_BASE = "https://mineru.net/api/v4" +DEFAULT_MINERU_FIELDS = { + "return_middle_json": "false", + "return_model_output": "false", + "return_md": "true", + "return_images": "false", + "end_page_id": "99999", + "parse_method": "auto", + "start_page_id": "0", + "lang_list": "ch", + "output_dir": "./output", + "server_url": "string", + "return_content_list": "false", + "backend": "hybrid-auto-engine", + "table_enable": "true", + "response_format_zip": "false", + "formula_enable": "true", +} + +class MinerUClient: + def __init__(self, token: str | None = None): + self.token = token or "" + self.headers = { + "Content-Type": "application/json" + } + if self.token: + self.headers["Authorization"] = f"Bearer {self.token}" + self.result = None + + def parse_file(self, file_path: str, model_version="vlm"): + """上传单个文件到 MinerU 并启动解析""" + if os.getenv("MinerU_URL"): + return self.parse_file_api(file_path) + + resp = requests.post( + f"{API_BASE}/file-urls/batch", + headers=self.headers, + json={"files": [{"name": os.path.basename(file_path)}], "model_version": model_version} + ) + resp.raise_for_status() + data = resp.json()["data"] + batch_id = data["batch_id"] + upload_url = data["file_urls"][0] + + print(f"[INFO] 上传文件: {file_path}") + with open(file_path, "rb") as f: + put_resp = requests.put(upload_url, data=f) + put_resp.raise_for_status() + + print(f"[INFO] 等待 MinerU 解析文件 {os.path.basename(file_path)} ...") + while True: + res = requests.get( + f"{API_BASE}/extract-results/batch/{batch_id}", + headers=self.headers + ).json() + states = [r["state"] for r in res["data"]["extract_result"]] + if all(s == "done" for s in states): + print(f"[INFO] 文件解析完成: {os.path.basename(file_path)}") + self.result = res + return res + elif any(s == "failed" for s in states): + raise RuntimeError(f"[INFO] MinerU 解析失败: {file_path}") + time.sleep(10) + + def parse_file_api(self, file_path: str, fields: dict | None = None): + """通过本地/私有 MinerU API 解析文件(/file_parse)。""" + api_url = os.getenv("MinerU_URL") + if not api_url: + raise RuntimeError("MinerU_URL 未配置") + + data = {**DEFAULT_MINERU_FIELDS, **(fields or {})} + file_name = os.path.basename(file_path) + with open(file_path, "rb") as f: + files = { + "files": (file_name, f, "application/octet-stream") + } + resp = requests.post(api_url, data=data, files=files, headers={"accept": "application/json"}) + resp.raise_for_status() + self.result = resp.json() + return self.result + + def download_result(self, save_dir="mineru_result"): + """下载并解压 MinerU 结果""" + if os.getenv("MinerU_URL"): + raise RuntimeError("MinerU_URL 模式不支持下载 zip 结果") + + zip_url = self.result["data"]["extract_result"][0]["full_zip_url"] + print(f"[INFO] 下载解析结果: {zip_url}") + res = requests.get(zip_url) + res.raise_for_status() + zf = zipfile.ZipFile(io.BytesIO(res.content)) + os.makedirs(save_dir, exist_ok=True) + zf.extractall(save_dir) + print(f"[INFO] 已解压到 {save_dir}/") + return save_dir + + +# ✅ 新增函数:统一批量解析接口 +def extract_texts_with_mineru(input_dir: str, save_dir: str = "./mineru_result") -> str: + """ + 批量调用 MinerU 解析 input_dir 下的所有文件,并合并结果为纯文本。 + 返回合并后的文本文件路径。 + """ + mineru_token = os.getenv("MinerU_API_KEY") # 可从环境变量读取 + client = MinerUClient(token=mineru_token) + + input_path = Path(input_dir) + os.makedirs(save_dir, exist_ok=True) + output_file = Path(save_dir) / "all_knowledge.txt" + + print(f"[INFO] 开始批量解析目录: {input_path}") + all_texts = [] + + for file in input_path.iterdir(): + if not file.is_file(): + continue + if file.suffix.lower() not in [".pdf", ".docx", ".xlsx", ".pptx", ".txt"]: + print(f"[INFO] 跳过不支持的文件类型: {file.name}") + continue + + try: + # 调用 MinerU 解析 + client.parse_file(str(file)) + result_dir = client.download_result(save_dir) + + # 查找 full.md 文件 + for md_path in Path(result_dir).rglob("full.md"): + with open(md_path, "r", encoding="utf-8") as f: + content = f.read().strip() + all_texts.append(f"\n# {file.name}\n{content}") + + except Exception as e: + print(f"[INFO] 解析失败: {file.name} ({type(e).__name__}: {e})") + + # 合并所有内容 + if all_texts: + with open(output_file, "w", encoding="utf-8") as f: + f.write("\n\n".join(all_texts)) + print(f"[INFO] 已合并所有 MinerU 输出 -> {output_file}") + else: + print(f"[INFO] 未成功解析任何文件。") + + return str(output_file) diff --git a/backend/planner/mineru_result/1b17ac05-4221-4e5c-8f46-4fc7aa29a8c9_content_list.json b/backend/planner/mineru_result/1b17ac05-4221-4e5c-8f46-4fc7aa29a8c9_content_list.json new file mode 100644 index 0000000..2f98677 --- /dev/null +++ b/backend/planner/mineru_result/1b17ac05-4221-4e5c-8f46-4fc7aa29a8c9_content_list.json @@ -0,0 +1,143 @@ +[ + { + "type": "text", + "text": "全壳测试", + "text_level": 1, + "bbox": [ + 421, + 126, + 576, + 156 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "全壳测试包含上电、镜频测试、灵敏度测试、极化测试、功率测试、断电几项,测试中包含的五个核心器件五个核心仪器:频谱分析仪、信号源、开关矩阵、直流电源、示波器。以下是连接示意图:", + "bbox": [ + 144, + 250, + 840, + 342 + ], + "page_idx": 0 + }, + { + "type": "image", + "img_path": "images/f05193299040c6cc15e934e062835d77bb1816610f7ebd7716eb4db1e04c4c38.jpg", + "image_caption": [ + "连接示意图" + ], + "image_footnote": [], + "bbox": [ + 152, + 367, + 858, + 634 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "1. 上电测试", + "text_level": 1, + "bbox": [ + 144, + 688, + 290, + 709 + ], + "page_idx": 0 + }, + { + "type": "list", + "sub_type": "text", + "list_items": [ + "a) 直流电源与信号源与工程机通过TCPIP连接, 连接超时 $2000 \\mathrm{~ms}$ 。", + "b) 信号源设置: 射频输出设置为 OFF。", + "c) 直流电源设置: OCP 状态设置为 ON; OCP 电流设置为 12A; OVP 电压设置为 32V; 输出电流设置为 6A; 输出电压设置为 28V。", + "d) 直流电源射频输出设置为 ON, 整机上电, 等待 2000ms。" + ], + "bbox": [ + 144, + 753, + 836, + 879 + ], + "page_idx": 0 + }, + { + "type": "list", + "sub_type": "text", + "list_items": [ + "e) 测试仪循环查询直流电源电流, 并将实测值与待机电流限值3.0A进行比较, 每次循环等待 $100\\mathrm{ms}$ 。", + "f) 当测试次数达到 5 或总时长达到 20 秒后, 停止监控, 将测试结果记录在表中。" + ], + "bbox": [ + 144, + 93, + 836, + 166 + ], + "page_idx": 1 + }, + { + "type": "text", + "text": "2. 镜频测试", + "text_level": 1, + "bbox": [ + 144, + 198, + 290, + 221 + ], + "page_idx": 1 + }, + { + "type": "list", + "sub_type": "text", + "list_items": [ + "a) 直流电源连接电源,电源设置 28V@6A。信号源、频谱分析仪、开关矩阵与工程机通过TCP/IP 连接。", + "b) 频谱仪设置: Span: 500MHz, RBW: 3MHz, VBW: 3MHz, Sweeptime: 1ms; 信号源设置: 开启脉冲调制, 脉宽 2us, 周期 1ms。整机上电, 等待产品进入低功耗。", + "c) 选择一个SC频段通道(如SC边), 软件自动配置开关矩阵。信号源功率设置为-25dBm (基于 imagePowerSC 变量)。", + "d) SC 频段测试点 1 (2.7GHz): 1. 测试仪设置信号源频率为 2.7GHz。频谱仪设置中心频率 2.7GHz, 开启最大值保持 (MAXH), 等待 3s, 使用 Peak 观察信号最高点, 将功率 P1 记录在草稿中 (测量结果存入 imageSpectrumPower1)。2. 信号源设置不变。频谱仪清除迹线 (WRITe), 设置中心频率为 3.84GHz (基于 imageSpectrumFreqSC[0] 变量), 开启最大值保持, 等待 3s, 使用 Peak 观察信号最高点, 将功率 P2 记录在草稿中 (测量结果存入 imageSpectrumPower2)。", + "e) SC 频段测试点 2 (6.2GHz): 1. 测试仪设置信号源频率为 6.2GHz (基于 SCStopFreq 变量)。频谱仪清除迹线, 设置中心频率 6.2GHz, 开启最大值保持, 等待 3s, 读取峰值功率 P1。2. 信号源设置不变。频谱仪清除迹线, 设置中心频率为 5.04GHz (基于 imageSpectrumFreqSC[1] 变量), 开启最大值保持, 等待 3s, 读取峰值功率 P2。", + "f) 选择一个 X 频段通道 (如 X 边), 软件自动配置开关矩阵。信号源功率设置为 -40dBm (基于 imagePowerX 变量)。", + "g) X 频段测试点 1 (8GHz): 1. 测试仪设置信号源频率为 8GHz (基于 XStartFreq 变量)。频谱仪清除迹线, 设置中心频率 8GHz, 开启最大值保持, 等待 3s, 读取峰值功率 P1。2. 信号源设置不变。频谱仪清除迹线, 设置中心频率为 9.44GHz (基于 imageSpectrumFreqX[0] 变量), 开启最大值保持, 等待 3s, 读取峰值功率 P2。", + "h) X频段测试点2(12GHz): 1. 测试仪设置信号源频率为12GHz(基于XStopFreq变量)。频谱" + ], + "bbox": [ + 144, + 263, + 850, + 890 + ], + "page_idx": 1 + }, + { + "type": "text", + "text": "仪清除迹线, 设置中心频率 12GHz, 开启最大值保持, 等待 3s, 读取峰值功率 P1。2. 信号源设置不变。频谱仪清除迹线, 设置中心频率为 10.54GHz (基于 imageSpectrumFreqX[1] 变量), 开启最大值保持, 等待 3s, 读取峰值功率 P2。", + "bbox": [ + 169, + 93, + 850, + 165 + ], + "page_idx": 2 + }, + { + "type": "list", + "sub_type": "text", + "list_items": [ + "i) 测试软件自动计算 (P1 - P2), 得到镜频抑制比 (存入 imageRejection)。重复步骤 c) 至 h) 直到所有选定通道测试完毕。将所有镜频抑制比结果记录在表中。", + "j) 测试完毕, 关闭信号源射频输出, 关闭脉冲调制, 频谱仪和信号源释放远程控制。" + ], + "bbox": [ + 144, + 177, + 850, + 248 + ], + "page_idx": 2 + } +] \ No newline at end of file diff --git a/backend/planner/mineru_result/1b17ac05-4221-4e5c-8f46-4fc7aa29a8c9_model.json b/backend/planner/mineru_result/1b17ac05-4221-4e5c-8f46-4fc7aa29a8c9_model.json new file mode 100644 index 0000000..329f95e --- /dev/null +++ b/backend/planner/mineru_result/1b17ac05-4221-4e5c-8f46-4fc7aa29a8c9_model.json @@ -0,0 +1,305 @@ +[ + [ + { + "type": "title", + "bbox": [ + 0.423, + 0.127, + 0.577, + 0.157 + ], + "angle": 0, + "content": "全壳测试" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.251, + 0.841, + 0.343 + ], + "angle": 0, + "content": "全壳测试包含上电、镜频测试、灵敏度测试、极化测试、功率测试、断电几项,测试中包含的五个核心器件五个核心仪器:频谱分析仪、信号源、开关矩阵、直流电源、示波器。以下是连接示意图:" + }, + { + "type": "image", + "bbox": [ + 0.153, + 0.368, + 0.859, + 0.635 + ], + "angle": 0, + "content": null + }, + { + "type": "image_caption", + "bbox": [ + 0.452, + 0.648, + 0.546, + 0.664 + ], + "angle": 0, + "content": "连接示意图" + }, + { + "type": "title", + "bbox": [ + 0.146, + 0.689, + 0.291, + 0.71 + ], + "angle": 0, + "content": "1. 上电测试" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.755, + 0.647, + 0.77 + ], + "angle": 0, + "content": "a) 直流电源与信号源与工程机通过TCPIP连接, 连接超时 \\(2000 \\mathrm{~ms}\\) 。" + }, + { + "type": "text", + "bbox": [ + 0.147, + 0.782, + 0.431, + 0.797 + ], + "angle": 0, + "content": "b) 信号源设置: 射频输出设置为 OFF。" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.81, + 0.838, + 0.853 + ], + "angle": 0, + "content": "c) 直流电源设置: OCP 状态设置为 ON; OCP 电流设置为 12A; OVP 电压设置为 32V; 输出电流设置为 6A; 输出电压设置为 28V。" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.865, + 0.59, + 0.88 + ], + "angle": 0, + "content": "d) 直流电源射频输出设置为 ON, 整机上电, 等待 2000ms。" + }, + { + "type": "list", + "bbox": [ + 0.146, + 0.755, + 0.838, + 0.88 + ], + "angle": 0, + "content": null + } + ], + [ + { + "type": "text", + "bbox": [ + 0.146, + 0.094, + 0.837, + 0.138 + ], + "angle": 0, + "content": "e) 测试仪循环查询直流电源电流, 并将实测值与待机电流限值3.0A进行比较, 每次循环等待 \\(100\\mathrm{ms}\\) 。" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.149, + 0.747, + 0.167 + ], + "angle": 0, + "content": "f) 当测试次数达到 5 或总时长达到 20 秒后, 停止监控, 将测试结果记录在表中。" + }, + { + "type": "list", + "bbox": [ + 0.146, + 0.094, + 0.837, + 0.167 + ], + "angle": 0, + "content": null + }, + { + "type": "title", + "bbox": [ + 0.146, + 0.199, + 0.292, + 0.222 + ], + "angle": 0, + "content": "2. 镜频测试" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.265, + 0.851, + 0.308 + ], + "angle": 0, + "content": "a) 直流电源连接电源,电源设置 28V@6A。信号源、频谱分析仪、开关矩阵与工程机通过TCP/IP 连接。" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.32, + 0.851, + 0.364 + ], + "angle": 0, + "content": "b) 频谱仪设置: Span: 500MHz, RBW: 3MHz, VBW: 3MHz, Sweeptime: 1ms; 信号源设置: 开启脉冲调制, 脉宽 2us, 周期 1ms。整机上电, 等待产品进入低功耗。" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.375, + 0.851, + 0.42 + ], + "angle": 0, + "content": "c) 选择一个SC频段通道(如SC边), 软件自动配置开关矩阵。信号源功率设置为-25dBm (基于 imagePowerSC 变量)。" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.431, + 0.851, + 0.587 + ], + "angle": 0, + "content": "d) SC 频段测试点 1 (2.7GHz): 1. 测试仪设置信号源频率为 2.7GHz。频谱仪设置中心频率 2.7GHz, 开启最大值保持 (MAXH), 等待 3s, 使用 Peak 观察信号最高点, 将功率 P1 记录在草稿中 (测量结果存入 imageSpectrumPower1)。2. 信号源设置不变。频谱仪清除迹线 (WRITe), 设置中心频率为 3.84GHz (基于 imageSpectrumFreqSC[0] 变量), 开启最大值保持, 等待 3s, 使用 Peak 观察信号最高点, 将功率 P2 记录在草稿中 (测量结果存入 imageSpectrumPower2)。" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.597, + 0.851, + 0.698 + ], + "angle": 0, + "content": "e) SC 频段测试点 2 (6.2GHz): 1. 测试仪设置信号源频率为 6.2GHz (基于 SCStopFreq 变量)。频谱仪清除迹线, 设置中心频率 6.2GHz, 开启最大值保持, 等待 3s, 读取峰值功率 P1。2. 信号源设置不变。频谱仪清除迹线, 设置中心频率为 5.04GHz (基于 imageSpectrumFreqSC[1] 变量), 开启最大值保持, 等待 3s, 读取峰值功率 P2。" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.708, + 0.851, + 0.752 + ], + "angle": 0, + "content": "f) 选择一个 X 频段通道 (如 X 边), 软件自动配置开关矩阵。信号源功率设置为 -40dBm (基于 imagePowerX 变量)。" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.763, + 0.851, + 0.863 + ], + "angle": 0, + "content": "g) X 频段测试点 1 (8GHz): 1. 测试仪设置信号源频率为 8GHz (基于 XStartFreq 变量)。频谱仪清除迹线, 设置中心频率 8GHz, 开启最大值保持, 等待 3s, 读取峰值功率 P1。2. 信号源设置不变。频谱仪清除迹线, 设置中心频率为 9.44GHz (基于 imageSpectrumFreqX[0] 变量), 开启最大值保持, 等待 3s, 读取峰值功率 P2。" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.875, + 0.851, + 0.891 + ], + "angle": 0, + "content": "h) X频段测试点2(12GHz): 1. 测试仪设置信号源频率为12GHz(基于XStopFreq变量)。频谱" + }, + { + "type": "list", + "bbox": [ + 0.146, + 0.265, + 0.851, + 0.891 + ], + "angle": 0, + "content": null + } + ], + [ + { + "type": "text", + "bbox": [ + 0.17, + 0.094, + 0.851, + 0.166 + ], + "angle": 0, + "content": "仪清除迹线, 设置中心频率 12GHz, 开启最大值保持, 等待 3s, 读取峰值功率 P1。2. 信号源设置不变。频谱仪清除迹线, 设置中心频率为 10.54GHz (基于 imageSpectrumFreqX[1] 变量), 开启最大值保持, 等待 3s, 读取峰值功率 P2。" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.178, + 0.851, + 0.222 + ], + "angle": 0, + "content": "i) 测试软件自动计算 (P1 - P2), 得到镜频抑制比 (存入 imageRejection)。重复步骤 c) 至 h) 直到所有选定通道测试完毕。将所有镜频抑制比结果记录在表中。" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.233, + 0.765, + 0.249 + ], + "angle": 0, + "content": "j) 测试完毕, 关闭信号源射频输出, 关闭脉冲调制, 频谱仪和信号源释放远程控制。" + }, + { + "type": "list", + "bbox": [ + 0.146, + 0.178, + 0.851, + 0.249 + ], + "angle": 0, + "content": null + } + ] +] \ No newline at end of file diff --git a/backend/planner/mineru_result/1b17ac05-4221-4e5c-8f46-4fc7aa29a8c9_origin.pdf b/backend/planner/mineru_result/1b17ac05-4221-4e5c-8f46-4fc7aa29a8c9_origin.pdf new file mode 100644 index 0000000..6c11eb8 Binary files /dev/null and b/backend/planner/mineru_result/1b17ac05-4221-4e5c-8f46-4fc7aa29a8c9_origin.pdf differ diff --git a/backend/planner/mineru_result/3c26b27f-fb2d-4d40-a6d0-3286732f93b2_content_list.json b/backend/planner/mineru_result/3c26b27f-fb2d-4d40-a6d0-3286732f93b2_content_list.json new file mode 100644 index 0000000..63282d5 --- /dev/null +++ b/backend/planner/mineru_result/3c26b27f-fb2d-4d40-a6d0-3286732f93b2_content_list.json @@ -0,0 +1,143 @@ +[ + { + "type": "text", + "text": "全壳测试", + "text_level": 1, + "bbox": [ + 421, + 126, + 576, + 156 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "全壳测试包含上电、镜频测试、灵敏度测试、极化测试、功率测试、断电几项,测试中包含的五个核心器件五个核心仪器:频谱分析仪、信号源、开关矩阵、直流电源、示波器。以下是连接示意图:", + "bbox": [ + 144, + 250, + 840, + 343 + ], + "page_idx": 0 + }, + { + "type": "image", + "img_path": "images/f05193299040c6cc15e934e062835d77bb1816610f7ebd7716eb4db1e04c4c38.jpg", + "image_caption": [ + "连接示意图" + ], + "image_footnote": [], + "bbox": [ + 152, + 367, + 858, + 634 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "1. 上电测试", + "text_level": 1, + "bbox": [ + 144, + 688, + 290, + 709 + ], + "page_idx": 0 + }, + { + "type": "list", + "sub_type": "text", + "list_items": [ + "a) 直流电源与信号源与工程机通过TCPIP连接, 连接超时 $2000 \\mathrm{~ms}$ 。", + "b) 信号源设置: 射频输出设置为 OFF。", + "c) 直流电源设置: OCP 状态设置为 ON; OCP 电流设置为 12A; OVP 电压设置为 32V; 输出电流设置为 6A; 输出电压设置为 28V。", + "d) 直流电源射频输出设置为 ON, 整机上电, 等待 2000ms。" + ], + "bbox": [ + 144, + 753, + 836, + 879 + ], + "page_idx": 0 + }, + { + "type": "list", + "sub_type": "text", + "list_items": [ + "e) 测试仪循环查询直流电源电流, 并将实测值与待机电流限值3.0A进行比较, 每次循环等待 $100\\mathrm{ms}$ 。", + "f) 当测试次数达到 5 或总时长达到 20 秒后, 停止监控, 将测试结果记录在表中。" + ], + "bbox": [ + 144, + 93, + 836, + 166 + ], + "page_idx": 1 + }, + { + "type": "text", + "text": "2. 镜频测试", + "text_level": 1, + "bbox": [ + 144, + 198, + 290, + 221 + ], + "page_idx": 1 + }, + { + "type": "list", + "sub_type": "text", + "list_items": [ + "a) 直流电源连接电源,电源设置 $28\\mathrm{V} @ 6\\mathrm{A}$ 。信号源、频谱分析仪、开关矩阵与工程机通过TCPIP 连接。", + "b) 频谱仪设置: Span: 500MHz, RBW: 3MHz, VBW: 3MHz, Sweeptime: 1ms; 信号源设置: 开启脉冲调制, 脉宽 2us, 周期 1ms。整机上电, 等待产品进入低功耗。", + "c) 选择一个SC频段通道(如SC边), 软件自动配置开关矩阵。信号源功率设置为-25dBm (基于 imagePowerSC 变量)。", + "d) SC 频段测试点 1 (2.7GHz): 1. 测试仪设置信号源频率为 2.7GHz。频谱仪设置中心频率 2.7GHz, 开启最大值保持 (MAXH), 等待 3s, 使用 Peak 观察信号最高点, 将功率 P1 记录在草稿中 (测量结果存入 imageSpectrumPower1)。2. 信号源设置不变。频谱仪清除迹线 (WRITEte), 设置中心频率为 3.84GHz (基于 imageSpectrumFreqSC[0] 变量), 开启最大值保持, 等待 3s, 使用 Peak 观察信号最高点, 将功率 P2 记录在草稿中 (测量结果存入 imageSpectrumPower2)。", + "e) SC 频段测试点 2 (6.2GHz): 1. 测试仪设置信号源频率为 6.2GHz (基于 SCStopFreq 变量)。频谱仪清除迹线, 设置中心频率 6.2GHz, 开启最大值保持, 等待 3s, 读取峰值功率 P1。2. 信号源设置不变。频谱仪清除迹线, 设置中心频率为 5.04GHz (基于 imageSpectrumFreqSC[1] 变量), 开启最大值保持, 等待 3s, 读取峰值功率 P2。", + "f) 选择一个 X 频段通道 (如 X 边), 软件自动配置开关矩阵。信号源功率设置为 -40dBm (基于 imagePowerX 变量)。", + "g) X 频段测试点 1 (8GHz): 1. 测试仪设置信号源频率为 8GHz (基于 XStartFreq 变量)。频谱仪清除迹线, 设置中心频率 8GHz, 开启最大值保持, 等待 3s, 读取峰值功率 P1。2. 信号源设置不变。频谱仪清除迹线, 设置中心频率为 9.44GHz (基于 imageSpectrumFreqX[0] 变量), 开启最大值保持, 等待 3s, 读取峰值功率 P2。", + "h) X频段测试点2(12GHz): 1. 测试仪设置信号源频率为12GHz (基于XStopFreq变量)。频谱" + ], + "bbox": [ + 144, + 263, + 847, + 890 + ], + "page_idx": 1 + }, + { + "type": "text", + "text": "仪清除迹线, 设置中心频率 12GHz, 开启最大值保持, 等待 3s, 读取峰值功率 P1。2. 信号源设置不变。频谱仪清除迹线, 设置中心频率为 10.54GHz (基于 imageSpectrumFreqX[1] 变量), 开启最大值保持, 等待 3s, 读取峰值功率 P2。", + "bbox": [ + 169, + 93, + 850, + 165 + ], + "page_idx": 2 + }, + { + "type": "list", + "sub_type": "text", + "list_items": [ + "i) 测试软件自动计算 (P1 - P2), 得到镜频抑制比 (存入 imageRejection)。重复步骤 c) 至 h) 直到所有选定通道测试完毕。将所有镜频抑制比结果记录在表中。", + "j) 测试完毕, 关闭信号源射频输出, 关闭脉冲调制, 频谱仪和信号源释放远程控制。" + ], + "bbox": [ + 144, + 177, + 850, + 248 + ], + "page_idx": 2 + } +] \ No newline at end of file diff --git a/backend/planner/mineru_result/3c26b27f-fb2d-4d40-a6d0-3286732f93b2_model.json b/backend/planner/mineru_result/3c26b27f-fb2d-4d40-a6d0-3286732f93b2_model.json new file mode 100644 index 0000000..d639072 --- /dev/null +++ b/backend/planner/mineru_result/3c26b27f-fb2d-4d40-a6d0-3286732f93b2_model.json @@ -0,0 +1,305 @@ +[ + [ + { + "type": "title", + "bbox": [ + 0.423, + 0.127, + 0.577, + 0.157 + ], + "angle": 0, + "content": "全壳测试" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.251, + 0.841, + 0.344 + ], + "angle": 0, + "content": "全壳测试包含上电、镜频测试、灵敏度测试、极化测试、功率测试、断电几项,测试中包含的五个核心器件五个核心仪器:频谱分析仪、信号源、开关矩阵、直流电源、示波器。以下是连接示意图:" + }, + { + "type": "image", + "bbox": [ + 0.153, + 0.368, + 0.859, + 0.635 + ], + "angle": 0, + "content": null + }, + { + "type": "image_caption", + "bbox": [ + 0.452, + 0.648, + 0.546, + 0.664 + ], + "angle": 0, + "content": "连接示意图" + }, + { + "type": "title", + "bbox": [ + 0.146, + 0.689, + 0.291, + 0.71 + ], + "angle": 0, + "content": "1. 上电测试" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.755, + 0.647, + 0.77 + ], + "angle": 0, + "content": "a) 直流电源与信号源与工程机通过TCPIP连接, 连接超时 \\(2000 \\mathrm{~ms}\\) 。" + }, + { + "type": "text", + "bbox": [ + 0.147, + 0.782, + 0.43, + 0.797 + ], + "angle": 0, + "content": "b) 信号源设置: 射频输出设置为 OFF。" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.81, + 0.838, + 0.853 + ], + "angle": 0, + "content": "c) 直流电源设置: OCP 状态设置为 ON; OCP 电流设置为 12A; OVP 电压设置为 32V; 输出电流设置为 6A; 输出电压设置为 28V。" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.865, + 0.59, + 0.88 + ], + "angle": 0, + "content": "d) 直流电源射频输出设置为 ON, 整机上电, 等待 2000ms。" + }, + { + "type": "list", + "bbox": [ + 0.146, + 0.755, + 0.838, + 0.88 + ], + "angle": 0, + "content": null + } + ], + [ + { + "type": "text", + "bbox": [ + 0.146, + 0.094, + 0.837, + 0.138 + ], + "angle": 0, + "content": "e) 测试仪循环查询直流电源电流, 并将实测值与待机电流限值3.0A进行比较, 每次循环等待 \\(100\\mathrm{ms}\\) 。" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.149, + 0.747, + 0.167 + ], + "angle": 0, + "content": "f) 当测试次数达到 5 或总时长达到 20 秒后, 停止监控, 将测试结果记录在表中。" + }, + { + "type": "list", + "bbox": [ + 0.146, + 0.094, + 0.837, + 0.167 + ], + "angle": 0, + "content": null + }, + { + "type": "title", + "bbox": [ + 0.146, + 0.199, + 0.292, + 0.222 + ], + "angle": 0, + "content": "2. 镜频测试" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.265, + 0.848, + 0.308 + ], + "angle": 0, + "content": "a) 直流电源连接电源,电源设置 \\(28\\mathrm{V} @ 6\\mathrm{A}\\) 。信号源、频谱分析仪、开关矩阵与工程机通过TCPIP 连接。" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.32, + 0.848, + 0.364 + ], + "angle": 0, + "content": "b) 频谱仪设置: Span: 500MHz, RBW: 3MHz, VBW: 3MHz, Sweeptime: 1ms; 信号源设置: 开启脉冲调制, 脉宽 2us, 周期 1ms。整机上电, 等待产品进入低功耗。" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.375, + 0.848, + 0.419 + ], + "angle": 0, + "content": "c) 选择一个SC频段通道(如SC边), 软件自动配置开关矩阵。信号源功率设置为-25dBm (基于 imagePowerSC 变量)。" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.431, + 0.848, + 0.586 + ], + "angle": 0, + "content": "d) SC 频段测试点 1 (2.7GHz): 1. 测试仪设置信号源频率为 2.7GHz。频谱仪设置中心频率 2.7GHz, 开启最大值保持 (MAXH), 等待 3s, 使用 Peak 观察信号最高点, 将功率 P1 记录在草稿中 (测量结果存入 imageSpectrumPower1)。2. 信号源设置不变。频谱仪清除迹线 (WRITEte), 设置中心频率为 3.84GHz (基于 imageSpectrumFreqSC[0] 变量), 开启最大值保持, 等待 3s, 使用 Peak 观察信号最高点, 将功率 P2 记录在草稿中 (测量结果存入 imageSpectrumPower2)。" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.597, + 0.848, + 0.697 + ], + "angle": 0, + "content": "e) SC 频段测试点 2 (6.2GHz): 1. 测试仪设置信号源频率为 6.2GHz (基于 SCStopFreq 变量)。频谱仪清除迹线, 设置中心频率 6.2GHz, 开启最大值保持, 等待 3s, 读取峰值功率 P1。2. 信号源设置不变。频谱仪清除迹线, 设置中心频率为 5.04GHz (基于 imageSpectrumFreqSC[1] 变量), 开启最大值保持, 等待 3s, 读取峰值功率 P2。" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.708, + 0.848, + 0.752 + ], + "angle": 0, + "content": "f) 选择一个 X 频段通道 (如 X 边), 软件自动配置开关矩阵。信号源功率设置为 -40dBm (基于 imagePowerX 变量)。" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.763, + 0.848, + 0.863 + ], + "angle": 0, + "content": "g) X 频段测试点 1 (8GHz): 1. 测试仪设置信号源频率为 8GHz (基于 XStartFreq 变量)。频谱仪清除迹线, 设置中心频率 8GHz, 开启最大值保持, 等待 3s, 读取峰值功率 P1。2. 信号源设置不变。频谱仪清除迹线, 设置中心频率为 9.44GHz (基于 imageSpectrumFreqX[0] 变量), 开启最大值保持, 等待 3s, 读取峰值功率 P2。" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.875, + 0.848, + 0.891 + ], + "angle": 0, + "content": "h) X频段测试点2(12GHz): 1. 测试仪设置信号源频率为12GHz (基于XStopFreq变量)。频谱" + }, + { + "type": "list", + "bbox": [ + 0.146, + 0.265, + 0.848, + 0.891 + ], + "angle": 0, + "content": null + } + ], + [ + { + "type": "text", + "bbox": [ + 0.17, + 0.094, + 0.851, + 0.166 + ], + "angle": 0, + "content": "仪清除迹线, 设置中心频率 12GHz, 开启最大值保持, 等待 3s, 读取峰值功率 P1。2. 信号源设置不变。频谱仪清除迹线, 设置中心频率为 10.54GHz (基于 imageSpectrumFreqX[1] 变量), 开启最大值保持, 等待 3s, 读取峰值功率 P2。" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.178, + 0.851, + 0.222 + ], + "angle": 0, + "content": "i) 测试软件自动计算 (P1 - P2), 得到镜频抑制比 (存入 imageRejection)。重复步骤 c) 至 h) 直到所有选定通道测试完毕。将所有镜频抑制比结果记录在表中。" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.233, + 0.765, + 0.249 + ], + "angle": 0, + "content": "j) 测试完毕, 关闭信号源射频输出, 关闭脉冲调制, 频谱仪和信号源释放远程控制。" + }, + { + "type": "list", + "bbox": [ + 0.146, + 0.178, + 0.851, + 0.249 + ], + "angle": 0, + "content": null + } + ] +] \ No newline at end of file diff --git a/backend/planner/mineru_result/3c26b27f-fb2d-4d40-a6d0-3286732f93b2_origin.pdf b/backend/planner/mineru_result/3c26b27f-fb2d-4d40-a6d0-3286732f93b2_origin.pdf new file mode 100644 index 0000000..b4f4d8d Binary files /dev/null and b/backend/planner/mineru_result/3c26b27f-fb2d-4d40-a6d0-3286732f93b2_origin.pdf differ diff --git a/backend/planner/mineru_result/45e0a8a9-2208-4b5d-953c-56a8952ea5fb_content_list.json b/backend/planner/mineru_result/45e0a8a9-2208-4b5d-953c-56a8952ea5fb_content_list.json new file mode 100644 index 0000000..7a06a8d --- /dev/null +++ b/backend/planner/mineru_result/45e0a8a9-2208-4b5d-953c-56a8952ea5fb_content_list.json @@ -0,0 +1,143 @@ +[ + { + "type": "text", + "text": "全壳测试", + "text_level": 1, + "bbox": [ + 421, + 126, + 576, + 156 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "全壳测试包含上电、镜频测试、灵敏度测试、极化测试、功率测试、断电几项,测试中包含的五个核心器件五个核心仪器:频谱分析仪、信号源、开关矩阵、直流电源、示波器。以下是连接示意图:", + "bbox": [ + 144, + 250, + 840, + 343 + ], + "page_idx": 0 + }, + { + "type": "image", + "img_path": "images/f05193299040c6cc15e934e062835d77bb1816610f7ebd7716eb4db1e04c4c38.jpg", + "image_caption": [ + "连接示意图" + ], + "image_footnote": [], + "bbox": [ + 152, + 367, + 858, + 634 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "1. 上电测试", + "text_level": 1, + "bbox": [ + 144, + 688, + 290, + 709 + ], + "page_idx": 0 + }, + { + "type": "list", + "sub_type": "text", + "list_items": [ + "a) 直流电源与信号源与工程机通过TCPIP连接, 连接超时 $2000 \\mathrm{~ms}$ 。", + "b) 信号源设置: 射频输出设置为 OFF。", + "c) 直流电源设置: OCP 状态设置为 ON; OCP 电流设置为 12A; OVP 电压设置为 32V; 输出电流设置为 6A; 输出电压设置为 28V。", + "d) 直流电源射频输出设置为 ON, 整机上电, 等待 2000ms。" + ], + "bbox": [ + 144, + 753, + 836, + 879 + ], + "page_idx": 0 + }, + { + "type": "list", + "sub_type": "text", + "list_items": [ + "e) 测试仪循环查询直流电源电流, 并将实测值与待机电流限值3.0A进行比较, 每次循环等待 $100\\mathrm{ms}$ 。", + "f) 当测试次数达到 5 或总时长达到 20 秒后, 停止监控, 将测试结果记录在表中。" + ], + "bbox": [ + 144, + 93, + 836, + 166 + ], + "page_idx": 1 + }, + { + "type": "text", + "text": "2. 镜频测试", + "text_level": 1, + "bbox": [ + 144, + 198, + 290, + 221 + ], + "page_idx": 1 + }, + { + "type": "list", + "sub_type": "text", + "list_items": [ + "a) 直流电源连接电源,电源设置 28V@6A。信号源、频谱分析仪、开关矩阵与工程机通过TCP/IP 连接。", + "b) 频谱仪设置: Span: 500MHz, RBW: 3MHz, VBW: 3MHz, Sweeptime: 1ms; 信号源设置: 开启脉冲调制, 脉宽 2us, 周期 1ms。整机上电, 等待产品进入低功耗。", + "c) 选择一个SC频段通道(如SC边), 软件自动配置开关矩阵。信号源功率设置为-25dBm (基于 imagePowerSC 变量)。", + "d) SC 频段测试点 1 (2.7GHz): 1. 测试仪设置信号源频率为 2.7GHz。频谱仪设置中心频率 2.7GHz, 开启最大值保持 (MAXH), 等待 3s, 使用 Peak 观察信号最高点, 将功率 P1 记录在草稿中 (测量结果存入 imageSpectrumPower1)。2. 信号源设置不变。频谱仪清除迹线 (WRITe), 设置中心频率为 3.84GHz (基于 imageSpectrumFreqSC[0] 变量), 开启最大值保持, 等待 3s, 使用 Peak 观察信号最高点, 将功率 P2 记录在草稿中 (测量结果存入 imageSpectrumPower2)。", + "e) SC 频段测试点 2 (6.2GHz): 1. 测试仪设置信号源频率为 6.2GHz (基于 SCStopFreq 变量)。频谱仪清除迹线, 设置中心频率 6.2GHz, 开启最大值保持, 等待 3s, 读取峰值功率 P1。2. 信号源设置不变。频谱仪清除迹线, 设置中心频率为 5.04GHz (基于 imageSpectrumFreqSC[1] 变量), 开启最大值保持, 等待 3s, 读取峰值功率 P2。", + "f) 选择一个 X 频段通道 (如 X 边), 软件自动配置开关矩阵。信号源功率设置为 -40dBm (基于 imagePowerX 变量)。", + "g) X 频段测试点 1 (8GHz): 1. 测试仪设置信号源频率为 8GHz (基于 XStartFreq 变量)。频谱仪清除迹线, 设置中心频率 8GHz, 开启最大值保持, 等待 3s, 读取峰值功率 P1。2. 信号源设置不变。频谱仪清除迹线, 设置中心频率为 9.44GHz (基于 imageSpectrumFreqX[0] 变量), 开启最大值保持, 等待 3s, 读取峰值功率 P2。", + "h) X频段测试点2(12GHz): 1. 测试仪设置信号源频率为12GHz(基于XStopFreq变量)。频谱" + ], + "bbox": [ + 144, + 263, + 850, + 890 + ], + "page_idx": 1 + }, + { + "type": "text", + "text": "仪清除迹线, 设置中心频率 12GHz, 开启最大值保持, 等待 3s, 读取峰值功率 P1。2. 信号源设置不变。频谱仪清除迹线, 设置中心频率为 10.54GHz (基于 imageSpectrumFreqX[1] 变量), 开启最大值保持, 等待 3s, 读取峰值功率 P2。", + "bbox": [ + 169, + 93, + 850, + 165 + ], + "page_idx": 2 + }, + { + "type": "list", + "sub_type": "text", + "list_items": [ + "i) 测试软件自动计算 (P1 - P2), 得到镜频抑制比 (存入 imageRejection)。重复步骤 c) 至 h) 直到所有选定通道测试完毕。将所有镜频抑制比结果记录在表中。", + "j) 测试完毕, 关闭信号源射频输出, 关闭脉冲调制, 频谱仪和信号源释放远程控制。" + ], + "bbox": [ + 144, + 177, + 850, + 249 + ], + "page_idx": 2 + } +] \ No newline at end of file diff --git a/backend/planner/mineru_result/45e0a8a9-2208-4b5d-953c-56a8952ea5fb_model.json b/backend/planner/mineru_result/45e0a8a9-2208-4b5d-953c-56a8952ea5fb_model.json new file mode 100644 index 0000000..8a8bca5 --- /dev/null +++ b/backend/planner/mineru_result/45e0a8a9-2208-4b5d-953c-56a8952ea5fb_model.json @@ -0,0 +1,305 @@ +[ + [ + { + "type": "title", + "bbox": [ + 0.423, + 0.127, + 0.577, + 0.157 + ], + "angle": 0, + "content": "全壳测试" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.251, + 0.841, + 0.344 + ], + "angle": 0, + "content": "全壳测试包含上电、镜频测试、灵敏度测试、极化测试、功率测试、断电几项,测试中包含的五个核心器件五个核心仪器:频谱分析仪、信号源、开关矩阵、直流电源、示波器。以下是连接示意图:" + }, + { + "type": "image", + "bbox": [ + 0.153, + 0.368, + 0.859, + 0.635 + ], + "angle": 0, + "content": null + }, + { + "type": "image_caption", + "bbox": [ + 0.452, + 0.648, + 0.546, + 0.664 + ], + "angle": 0, + "content": "连接示意图" + }, + { + "type": "title", + "bbox": [ + 0.146, + 0.689, + 0.291, + 0.71 + ], + "angle": 0, + "content": "1. 上电测试" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.755, + 0.647, + 0.77 + ], + "angle": 0, + "content": "a) 直流电源与信号源与工程机通过TCPIP连接, 连接超时 \\(2000 \\mathrm{~ms}\\) 。" + }, + { + "type": "text", + "bbox": [ + 0.147, + 0.782, + 0.43, + 0.797 + ], + "angle": 0, + "content": "b) 信号源设置: 射频输出设置为 OFF。" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.81, + 0.838, + 0.853 + ], + "angle": 0, + "content": "c) 直流电源设置: OCP 状态设置为 ON; OCP 电流设置为 12A; OVP 电压设置为 32V; 输出电流设置为 6A; 输出电压设置为 28V。" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.865, + 0.59, + 0.88 + ], + "angle": 0, + "content": "d) 直流电源射频输出设置为 ON, 整机上电, 等待 2000ms。" + }, + { + "type": "list", + "bbox": [ + 0.146, + 0.755, + 0.838, + 0.88 + ], + "angle": 0, + "content": null + } + ], + [ + { + "type": "text", + "bbox": [ + 0.146, + 0.094, + 0.837, + 0.138 + ], + "angle": 0, + "content": "e) 测试仪循环查询直流电源电流, 并将实测值与待机电流限值3.0A进行比较, 每次循环等待 \\(100\\mathrm{ms}\\) 。" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.149, + 0.747, + 0.167 + ], + "angle": 0, + "content": "f) 当测试次数达到 5 或总时长达到 20 秒后, 停止监控, 将测试结果记录在表中。" + }, + { + "type": "list", + "bbox": [ + 0.146, + 0.094, + 0.837, + 0.167 + ], + "angle": 0, + "content": null + }, + { + "type": "title", + "bbox": [ + 0.146, + 0.199, + 0.292, + 0.222 + ], + "angle": 0, + "content": "2. 镜频测试" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.265, + 0.851, + 0.308 + ], + "angle": 0, + "content": "a) 直流电源连接电源,电源设置 28V@6A。信号源、频谱分析仪、开关矩阵与工程机通过TCP/IP 连接。" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.32, + 0.851, + 0.364 + ], + "angle": 0, + "content": "b) 频谱仪设置: Span: 500MHz, RBW: 3MHz, VBW: 3MHz, Sweeptime: 1ms; 信号源设置: 开启脉冲调制, 脉宽 2us, 周期 1ms。整机上电, 等待产品进入低功耗。" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.375, + 0.851, + 0.42 + ], + "angle": 0, + "content": "c) 选择一个SC频段通道(如SC边), 软件自动配置开关矩阵。信号源功率设置为-25dBm (基于 imagePowerSC 变量)。" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.431, + 0.851, + 0.587 + ], + "angle": 0, + "content": "d) SC 频段测试点 1 (2.7GHz): 1. 测试仪设置信号源频率为 2.7GHz。频谱仪设置中心频率 2.7GHz, 开启最大值保持 (MAXH), 等待 3s, 使用 Peak 观察信号最高点, 将功率 P1 记录在草稿中 (测量结果存入 imageSpectrumPower1)。2. 信号源设置不变。频谱仪清除迹线 (WRITe), 设置中心频率为 3.84GHz (基于 imageSpectrumFreqSC[0] 变量), 开启最大值保持, 等待 3s, 使用 Peak 观察信号最高点, 将功率 P2 记录在草稿中 (测量结果存入 imageSpectrumPower2)。" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.597, + 0.851, + 0.698 + ], + "angle": 0, + "content": "e) SC 频段测试点 2 (6.2GHz): 1. 测试仪设置信号源频率为 6.2GHz (基于 SCStopFreq 变量)。频谱仪清除迹线, 设置中心频率 6.2GHz, 开启最大值保持, 等待 3s, 读取峰值功率 P1。2. 信号源设置不变。频谱仪清除迹线, 设置中心频率为 5.04GHz (基于 imageSpectrumFreqSC[1] 变量), 开启最大值保持, 等待 3s, 读取峰值功率 P2。" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.708, + 0.851, + 0.752 + ], + "angle": 0, + "content": "f) 选择一个 X 频段通道 (如 X 边), 软件自动配置开关矩阵。信号源功率设置为 -40dBm (基于 imagePowerX 变量)。" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.763, + 0.851, + 0.863 + ], + "angle": 0, + "content": "g) X 频段测试点 1 (8GHz): 1. 测试仪设置信号源频率为 8GHz (基于 XStartFreq 变量)。频谱仪清除迹线, 设置中心频率 8GHz, 开启最大值保持, 等待 3s, 读取峰值功率 P1。2. 信号源设置不变。频谱仪清除迹线, 设置中心频率为 9.44GHz (基于 imageSpectrumFreqX[0] 变量), 开启最大值保持, 等待 3s, 读取峰值功率 P2。" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.875, + 0.851, + 0.891 + ], + "angle": 0, + "content": "h) X频段测试点2(12GHz): 1. 测试仪设置信号源频率为12GHz(基于XStopFreq变量)。频谱" + }, + { + "type": "list", + "bbox": [ + 0.146, + 0.265, + 0.851, + 0.891 + ], + "angle": 0, + "content": null + } + ], + [ + { + "type": "text", + "bbox": [ + 0.17, + 0.094, + 0.851, + 0.166 + ], + "angle": 0, + "content": "仪清除迹线, 设置中心频率 12GHz, 开启最大值保持, 等待 3s, 读取峰值功率 P1。2. 信号源设置不变。频谱仪清除迹线, 设置中心频率为 10.54GHz (基于 imageSpectrumFreqX[1] 变量), 开启最大值保持, 等待 3s, 读取峰值功率 P2。" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.178, + 0.851, + 0.222 + ], + "angle": 0, + "content": "i) 测试软件自动计算 (P1 - P2), 得到镜频抑制比 (存入 imageRejection)。重复步骤 c) 至 h) 直到所有选定通道测试完毕。将所有镜频抑制比结果记录在表中。" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.233, + 0.765, + 0.25 + ], + "angle": 0, + "content": "j) 测试完毕, 关闭信号源射频输出, 关闭脉冲调制, 频谱仪和信号源释放远程控制。" + }, + { + "type": "list", + "bbox": [ + 0.146, + 0.178, + 0.851, + 0.25 + ], + "angle": 0, + "content": null + } + ] +] \ No newline at end of file diff --git a/backend/planner/mineru_result/45e0a8a9-2208-4b5d-953c-56a8952ea5fb_origin.pdf b/backend/planner/mineru_result/45e0a8a9-2208-4b5d-953c-56a8952ea5fb_origin.pdf new file mode 100644 index 0000000..40ddea3 Binary files /dev/null and b/backend/planner/mineru_result/45e0a8a9-2208-4b5d-953c-56a8952ea5fb_origin.pdf differ diff --git a/backend/planner/mineru_result/571784d0-9def-4088-8f58-33d1fda508fb_content_list.json b/backend/planner/mineru_result/571784d0-9def-4088-8f58-33d1fda508fb_content_list.json new file mode 100644 index 0000000..cc88367 --- /dev/null +++ b/backend/planner/mineru_result/571784d0-9def-4088-8f58-33d1fda508fb_content_list.json @@ -0,0 +1,143 @@ +[ + { + "type": "text", + "text": "全壳测试", + "text_level": 1, + "bbox": [ + 421, + 126, + 576, + 156 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "全壳测试包含上电、镜频测试、灵敏度测试、极化测试、功率测试、断电几项,测试中包含的五个核心器件五个核心仪器:频谱分析仪、信号源、开关矩阵、直流电源、示波器。以下是连接示意图:", + "bbox": [ + 144, + 250, + 840, + 343 + ], + "page_idx": 0 + }, + { + "type": "image", + "img_path": "images/f05193299040c6cc15e934e062835d77bb1816610f7ebd7716eb4db1e04c4c38.jpg", + "image_caption": [ + "连接示意图" + ], + "image_footnote": [], + "bbox": [ + 152, + 367, + 858, + 634 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "1. 上电测试", + "text_level": 1, + "bbox": [ + 146, + 688, + 290, + 709 + ], + "page_idx": 0 + }, + { + "type": "list", + "sub_type": "text", + "list_items": [ + "a) 直流电源与信号源与工程机通过TCPIP连接, 连接超时 $2000 \\mathrm{~ms}$ 。", + "b) 信号源设置: 射频输出设置为 OFF。", + "c) 直流电源设置: OCP 状态设置为 ON; OCP 电流设置为 12A; OVP 电压设置为 32V; 输出电流设置为 6A; 输出电压设置为 28V。", + "d) 直流电源射频输出设置为 ON, 整机上电, 等待 2000ms。" + ], + "bbox": [ + 144, + 753, + 836, + 879 + ], + "page_idx": 0 + }, + { + "type": "list", + "sub_type": "text", + "list_items": [ + "e) 测试仪循环查询直流电源电流, 并将实测值与待机电流限值3.0A进行比较, 每次循环等待 $100\\mathrm{ms}$ 。", + "f) 当测试次数达到 5 或总时长达到 20 秒后, 停止监控, 将测试结果记录在表中。" + ], + "bbox": [ + 144, + 93, + 836, + 166 + ], + "page_idx": 1 + }, + { + "type": "text", + "text": "2. 镜频测试", + "text_level": 1, + "bbox": [ + 144, + 198, + 290, + 221 + ], + "page_idx": 1 + }, + { + "type": "list", + "sub_type": "text", + "list_items": [ + "a) 直流电源连接电源,电源设置 $28\\mathrm{V} @ 6\\mathrm{A}$ 。信号源、频谱分析仪、开关矩阵与工程机通过TCPIP 连接。", + "b) 频谱仪设置: Span: 500MHz, RBW: 3MHz, VBW: 3MHz, Sweeptime: 1ms; 信号源设置: 开启脉冲调制, 脉宽 2us, 周期 1ms。整机上电, 等待产品进入低功耗。", + "c) 选择一个SC频段通道(如SC边), 软件自动配置开关矩阵。信号源功率设置为-25dBm (基于 imagePowerSC 变量)。", + "d) SC 频段测试点 1 (2.7GHz): 1. 测试仪设置信号源频率为 2.7GHz。频谱仪设置中心频率 2.7GHz, 开启最大值保持 (MAXH), 等待 3s, 使用 Peak 观察信号最高点, 将功率 P1 记录在草稿中 (测量结果存入 imageSpectrumPower1)。2. 信号源设置不变。频谱仪清除迹线 (WRITEte), 设置中心频率为 3.84GHz (基于 imageSpectrumFreqSC[0] 变量), 开启最大值保持, 等待 3s, 使用 Peak 观察信号最高点, 将功率 P2 记录在草稿中 (测量结果存入 imageSpectrumPower2)。", + "e) SC 频段测试点 2 (6.2GHz): 1. 测试仪设置信号源频率为 6.2GHz (基于 SCStopFreq 变量)。频谱仪清除迹线, 设置中心频率 6.2GHz, 开启最大值保持, 等待 3s, 读取峰值功率 P1。2. 信号源设置不变。频谱仪清除迹线, 设置中心频率为 5.04GHz (基于 imageSpectrumFreqSC[1] 变量), 开启最大值保持, 等待 3s, 读取峰值功率 P2。", + "f) 选择一个 X 频段通道 (如 X 边), 软件自动配置开关矩阵。信号源功率设置为 -40dBm (基于 imagePowerX 变量)。", + "g) X 频段测试点 1 (8GHz): 1. 测试仪设置信号源频率为 8GHz (基于 XStartFreq 变量)。频谱仪清除迹线, 设置中心频率 8GHz, 开启最大值保持, 等待 3s, 读取峰值功率 P1。2. 信号源设置不变。频谱仪清除迹线, 设置中心频率为 9.44GHz (基于 imageSpectrumFreqX[0] 变量), 开启最大值保持, 等待 3s, 读取峰值功率 P2。", + "h) X频段测试点2(12GHz): 1. 测试仪设置信号源频率为12GHz (基于XStopFreq变量)。频谱" + ], + "bbox": [ + 144, + 263, + 847, + 890 + ], + "page_idx": 1 + }, + { + "type": "text", + "text": "仪清除迹线, 设置中心频率 12GHz, 开启最大值保持, 等待 3s, 读取峰值功率 P1。2. 信号源设置不变。频谱仪清除迹线, 设置中心频率为 10.54GHz (基于 imageSpectrumFreqX[1] 变量), 开启最大值保持, 等待 3s, 读取峰值功率 P2。", + "bbox": [ + 169, + 93, + 850, + 165 + ], + "page_idx": 2 + }, + { + "type": "list", + "sub_type": "text", + "list_items": [ + "i) 测试软件自动计算 (P1 - P2), 得到镜频抑制比 (存入 imageRejection)。重复步骤 c) 至 h) 直到所有选定通道测试完毕。将所有镜频抑制比结果记录在表中。", + "j) 测试完毕, 关闭信号源射频输出, 关闭脉冲调制, 频谱仪和信号源释放远程控制。" + ], + "bbox": [ + 144, + 177, + 850, + 249 + ], + "page_idx": 2 + } +] \ No newline at end of file diff --git a/backend/planner/mineru_result/571784d0-9def-4088-8f58-33d1fda508fb_model.json b/backend/planner/mineru_result/571784d0-9def-4088-8f58-33d1fda508fb_model.json new file mode 100644 index 0000000..f9bdc83 --- /dev/null +++ b/backend/planner/mineru_result/571784d0-9def-4088-8f58-33d1fda508fb_model.json @@ -0,0 +1,305 @@ +[ + [ + { + "type": "title", + "bbox": [ + 0.423, + 0.127, + 0.577, + 0.157 + ], + "angle": 0, + "content": "全壳测试" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.251, + 0.841, + 0.344 + ], + "angle": 0, + "content": "全壳测试包含上电、镜频测试、灵敏度测试、极化测试、功率测试、断电几项,测试中包含的五个核心器件五个核心仪器:频谱分析仪、信号源、开关矩阵、直流电源、示波器。以下是连接示意图:" + }, + { + "type": "image", + "bbox": [ + 0.153, + 0.368, + 0.859, + 0.635 + ], + "angle": 0, + "content": null + }, + { + "type": "image_caption", + "bbox": [ + 0.452, + 0.648, + 0.546, + 0.664 + ], + "angle": 0, + "content": "连接示意图" + }, + { + "type": "title", + "bbox": [ + 0.147, + 0.689, + 0.291, + 0.71 + ], + "angle": 0, + "content": "1. 上电测试" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.755, + 0.647, + 0.77 + ], + "angle": 0, + "content": "a) 直流电源与信号源与工程机通过TCPIP连接, 连接超时 \\(2000 \\mathrm{~ms}\\) 。" + }, + { + "type": "text", + "bbox": [ + 0.147, + 0.782, + 0.431, + 0.797 + ], + "angle": 0, + "content": "b) 信号源设置: 射频输出设置为 OFF。" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.81, + 0.838, + 0.853 + ], + "angle": 0, + "content": "c) 直流电源设置: OCP 状态设置为 ON; OCP 电流设置为 12A; OVP 电压设置为 32V; 输出电流设置为 6A; 输出电压设置为 28V。" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.865, + 0.59, + 0.88 + ], + "angle": 0, + "content": "d) 直流电源射频输出设置为 ON, 整机上电, 等待 2000ms。" + }, + { + "type": "list", + "bbox": [ + 0.146, + 0.755, + 0.838, + 0.88 + ], + "angle": 0, + "content": null + } + ], + [ + { + "type": "text", + "bbox": [ + 0.146, + 0.094, + 0.837, + 0.138 + ], + "angle": 0, + "content": "e) 测试仪循环查询直流电源电流, 并将实测值与待机电流限值3.0A进行比较, 每次循环等待 \\(100\\mathrm{ms}\\) 。" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.149, + 0.747, + 0.167 + ], + "angle": 0, + "content": "f) 当测试次数达到 5 或总时长达到 20 秒后, 停止监控, 将测试结果记录在表中。" + }, + { + "type": "list", + "bbox": [ + 0.146, + 0.094, + 0.837, + 0.167 + ], + "angle": 0, + "content": null + }, + { + "type": "title", + "bbox": [ + 0.146, + 0.199, + 0.292, + 0.222 + ], + "angle": 0, + "content": "2. 镜频测试" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.265, + 0.848, + 0.308 + ], + "angle": 0, + "content": "a) 直流电源连接电源,电源设置 \\(28\\mathrm{V} @ 6\\mathrm{A}\\) 。信号源、频谱分析仪、开关矩阵与工程机通过TCPIP 连接。" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.32, + 0.848, + 0.364 + ], + "angle": 0, + "content": "b) 频谱仪设置: Span: 500MHz, RBW: 3MHz, VBW: 3MHz, Sweeptime: 1ms; 信号源设置: 开启脉冲调制, 脉宽 2us, 周期 1ms。整机上电, 等待产品进入低功耗。" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.375, + 0.848, + 0.419 + ], + "angle": 0, + "content": "c) 选择一个SC频段通道(如SC边), 软件自动配置开关矩阵。信号源功率设置为-25dBm (基于 imagePowerSC 变量)。" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.431, + 0.848, + 0.586 + ], + "angle": 0, + "content": "d) SC 频段测试点 1 (2.7GHz): 1. 测试仪设置信号源频率为 2.7GHz。频谱仪设置中心频率 2.7GHz, 开启最大值保持 (MAXH), 等待 3s, 使用 Peak 观察信号最高点, 将功率 P1 记录在草稿中 (测量结果存入 imageSpectrumPower1)。2. 信号源设置不变。频谱仪清除迹线 (WRITEte), 设置中心频率为 3.84GHz (基于 imageSpectrumFreqSC[0] 变量), 开启最大值保持, 等待 3s, 使用 Peak 观察信号最高点, 将功率 P2 记录在草稿中 (测量结果存入 imageSpectrumPower2)。" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.597, + 0.848, + 0.697 + ], + "angle": 0, + "content": "e) SC 频段测试点 2 (6.2GHz): 1. 测试仪设置信号源频率为 6.2GHz (基于 SCStopFreq 变量)。频谱仪清除迹线, 设置中心频率 6.2GHz, 开启最大值保持, 等待 3s, 读取峰值功率 P1。2. 信号源设置不变。频谱仪清除迹线, 设置中心频率为 5.04GHz (基于 imageSpectrumFreqSC[1] 变量), 开启最大值保持, 等待 3s, 读取峰值功率 P2。" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.708, + 0.848, + 0.752 + ], + "angle": 0, + "content": "f) 选择一个 X 频段通道 (如 X 边), 软件自动配置开关矩阵。信号源功率设置为 -40dBm (基于 imagePowerX 变量)。" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.763, + 0.848, + 0.863 + ], + "angle": 0, + "content": "g) X 频段测试点 1 (8GHz): 1. 测试仪设置信号源频率为 8GHz (基于 XStartFreq 变量)。频谱仪清除迹线, 设置中心频率 8GHz, 开启最大值保持, 等待 3s, 读取峰值功率 P1。2. 信号源设置不变。频谱仪清除迹线, 设置中心频率为 9.44GHz (基于 imageSpectrumFreqX[0] 变量), 开启最大值保持, 等待 3s, 读取峰值功率 P2。" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.875, + 0.848, + 0.891 + ], + "angle": 0, + "content": "h) X频段测试点2(12GHz): 1. 测试仪设置信号源频率为12GHz (基于XStopFreq变量)。频谱" + }, + { + "type": "list", + "bbox": [ + 0.146, + 0.265, + 0.848, + 0.891 + ], + "angle": 0, + "content": null + } + ], + [ + { + "type": "text", + "bbox": [ + 0.17, + 0.094, + 0.851, + 0.166 + ], + "angle": 0, + "content": "仪清除迹线, 设置中心频率 12GHz, 开启最大值保持, 等待 3s, 读取峰值功率 P1。2. 信号源设置不变。频谱仪清除迹线, 设置中心频率为 10.54GHz (基于 imageSpectrumFreqX[1] 变量), 开启最大值保持, 等待 3s, 读取峰值功率 P2。" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.178, + 0.851, + 0.222 + ], + "angle": 0, + "content": "i) 测试软件自动计算 (P1 - P2), 得到镜频抑制比 (存入 imageRejection)。重复步骤 c) 至 h) 直到所有选定通道测试完毕。将所有镜频抑制比结果记录在表中。" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.233, + 0.765, + 0.25 + ], + "angle": 0, + "content": "j) 测试完毕, 关闭信号源射频输出, 关闭脉冲调制, 频谱仪和信号源释放远程控制。" + }, + { + "type": "list", + "bbox": [ + 0.146, + 0.178, + 0.851, + 0.25 + ], + "angle": 0, + "content": null + } + ] +] \ No newline at end of file diff --git a/backend/planner/mineru_result/571784d0-9def-4088-8f58-33d1fda508fb_origin.pdf b/backend/planner/mineru_result/571784d0-9def-4088-8f58-33d1fda508fb_origin.pdf new file mode 100644 index 0000000..4a3d64c Binary files /dev/null and b/backend/planner/mineru_result/571784d0-9def-4088-8f58-33d1fda508fb_origin.pdf differ diff --git a/backend/planner/mineru_result/67c95dc1-807b-45b9-890e-03ff78f3e347_content_list.json b/backend/planner/mineru_result/67c95dc1-807b-45b9-890e-03ff78f3e347_content_list.json new file mode 100644 index 0000000..66df0e4 --- /dev/null +++ b/backend/planner/mineru_result/67c95dc1-807b-45b9-890e-03ff78f3e347_content_list.json @@ -0,0 +1,143 @@ +[ + { + "type": "text", + "text": "全壳测试", + "text_level": 1, + "bbox": [ + 421, + 126, + 576, + 156 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "全壳测试包含上电、镜频测试、灵敏度测试、极化测试、功率测试、断电几项,测试中包含的五个核心器件五个核心仪器:频谱分析仪、信号源、开关矩阵、直流电源、示波器。以下是连接示意图:", + "bbox": [ + 144, + 250, + 840, + 343 + ], + "page_idx": 0 + }, + { + "type": "image", + "img_path": "images/f05193299040c6cc15e934e062835d77bb1816610f7ebd7716eb4db1e04c4c38.jpg", + "image_caption": [ + "连接示意图" + ], + "image_footnote": [], + "bbox": [ + 152, + 367, + 858, + 634 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "1. 上电测试", + "text_level": 1, + "bbox": [ + 146, + 688, + 290, + 709 + ], + "page_idx": 0 + }, + { + "type": "list", + "sub_type": "text", + "list_items": [ + "a) 直流电源与信号源与工程机通过TCPIP连接, 连接超时 $2000 \\mathrm{~ms}$ 。", + "b) 信号源设置: 射频输出设置为 OFF。", + "c) 直流电源设置: OCP 状态设置为 ON; OCP 电流设置为 12A; OVP 电压设置为 32V; 输出电流设置为 6A; 输出电压设置为 28V。", + "d) 直流电源射频输出设置为 ON, 整机上电, 等待 2000ms。" + ], + "bbox": [ + 144, + 753, + 836, + 879 + ], + "page_idx": 0 + }, + { + "type": "list", + "sub_type": "text", + "list_items": [ + "e) 测试仪循环查询直流电源电流, 并将实测值与待机电流限值3.0A进行比较, 每次循环等待 $100\\mathrm{ms}$ 。", + "f) 当测试次数达到 5 或总时长达到 20 秒后, 停止监控, 将测试结果记录在表中。" + ], + "bbox": [ + 144, + 93, + 836, + 166 + ], + "page_idx": 1 + }, + { + "type": "text", + "text": "2. 镜频测试", + "text_level": 1, + "bbox": [ + 144, + 198, + 290, + 221 + ], + "page_idx": 1 + }, + { + "type": "list", + "sub_type": "text", + "list_items": [ + "a) 直流电源连接电源,电源设置 28V@6A。信号源、频谱分析仪、开关矩阵与工程机通过TCP/IP 连接。", + "b) 频谱仪设置: Span: 500MHz, RBW: 3MHz, VBW: 3MHz, Sweeptime: 1ms; 信号源设置: 开启脉冲调制, 脉宽 2us, 周期 1ms。整机上电, 等待产品进入低功耗。", + "c) 选择一个SC频段通道(如SC边), 软件自动配置开关矩阵。信号源功率设置为-25dBm (基于 imagePowerSC 变量)。", + "d) SC 频段测试点 1 (2.7GHz): 1. 测试仪设置信号源频率为 2.7GHz。频谱仪设置中心频率 2.7GHz, 开启最大值保持 (MAXH), 等待 3s, 使用 Peak 观察信号最高点, 将功率 P1 记录在草稿中 (测量结果存入 imageSpectrumPower1)。2. 信号源设置不变。频谱仪清除迹线 (WRITe), 设置中心频率为 3.84GHz (基于 imageSpectrumFreqSC[0] 变量), 开启最大值保持, 等待 3s, 使用 Peak 观察信号最高点, 将功率 P2 记录在草稿中 (测量结果存入 imageSpectrumPower2)。", + "e) SC 频段测试点 2 (6.2GHz): 1. 测试仪设置信号源频率为 6.2GHz (基于 SCStopFreq 变量)。频谱仪清除迹线, 设置中心频率 6.2GHz, 开启最大值保持, 等待 3s, 读取峰值功率 P1。2. 信号源设置不变。频谱仪清除迹线, 设置中心频率为 5.04GHz (基于 imageSpectrumFreqSC[1] 变量), 开启最大值保持, 等待 3s, 读取峰值功率 P2。", + "f) 选择一个 X 频段通道 (如 X 边), 软件自动配置开关矩阵。信号源功率设置为 -40dBm (基于 imagePowerX 变量)。", + "g) X 频段测试点 1 (8GHz): 1. 测试仪设置信号源频率为 8GHz (基于 XStartFreq 变量)。频谱仪清除迹线, 设置中心频率 8GHz, 开启最大值保持, 等待 3s, 读取峰值功率 P1。2. 信号源设置不变。频谱仪清除迹线, 设置中心频率为 9.44GHz (基于 imageSpectrumFreqX[0] 变量), 开启最大值保持, 等待 3s, 读取峰值功率 P2。", + "h) X频段测试点2(12GHz): 1. 测试仪设置信号源频率为12GHz(基于XStopFreq变量)。频谱" + ], + "bbox": [ + 144, + 263, + 850, + 890 + ], + "page_idx": 1 + }, + { + "type": "text", + "text": "仪清除迹线, 设置中心频率 12GHz, 开启最大值保持, 等待 3s, 读取峰值功率 P1。2. 信号源设置不变。频谱仪清除迹线, 设置中心频率为 10.54GHz (基于 imageSpectrumFreqX[1] 变量), 开启最大值保持, 等待 3s, 读取峰值功率 P2。", + "bbox": [ + 169, + 93, + 850, + 165 + ], + "page_idx": 2 + }, + { + "type": "list", + "sub_type": "text", + "list_items": [ + "i) 测试软件自动计算 (P1 - P2), 得到镜频抑制比 (存入 imageRejection)。重复步骤 c) 至 h) 直到所有选定通道测试完毕。将所有镜频抑制比结果记录在表中。", + "j) 测试完毕, 关闭信号源射频输出, 关闭脉冲调制, 频谱仪和信号源释放远程控制。" + ], + "bbox": [ + 144, + 177, + 850, + 249 + ], + "page_idx": 2 + } +] \ No newline at end of file diff --git a/backend/planner/mineru_result/67c95dc1-807b-45b9-890e-03ff78f3e347_model.json b/backend/planner/mineru_result/67c95dc1-807b-45b9-890e-03ff78f3e347_model.json new file mode 100644 index 0000000..cb459e5 --- /dev/null +++ b/backend/planner/mineru_result/67c95dc1-807b-45b9-890e-03ff78f3e347_model.json @@ -0,0 +1,305 @@ +[ + [ + { + "type": "title", + "bbox": [ + 0.423, + 0.127, + 0.577, + 0.157 + ], + "angle": 0, + "content": "全壳测试" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.251, + 0.841, + 0.344 + ], + "angle": 0, + "content": "全壳测试包含上电、镜频测试、灵敏度测试、极化测试、功率测试、断电几项,测试中包含的五个核心器件五个核心仪器:频谱分析仪、信号源、开关矩阵、直流电源、示波器。以下是连接示意图:" + }, + { + "type": "image", + "bbox": [ + 0.153, + 0.368, + 0.859, + 0.635 + ], + "angle": 0, + "content": null + }, + { + "type": "image_caption", + "bbox": [ + 0.452, + 0.648, + 0.546, + 0.664 + ], + "angle": 0, + "content": "连接示意图" + }, + { + "type": "title", + "bbox": [ + 0.147, + 0.689, + 0.291, + 0.71 + ], + "angle": 0, + "content": "1. 上电测试" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.755, + 0.647, + 0.77 + ], + "angle": 0, + "content": "a) 直流电源与信号源与工程机通过TCPIP连接, 连接超时 \\(2000 \\mathrm{~ms}\\) 。" + }, + { + "type": "text", + "bbox": [ + 0.147, + 0.782, + 0.431, + 0.797 + ], + "angle": 0, + "content": "b) 信号源设置: 射频输出设置为 OFF。" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.81, + 0.838, + 0.853 + ], + "angle": 0, + "content": "c) 直流电源设置: OCP 状态设置为 ON; OCP 电流设置为 12A; OVP 电压设置为 32V; 输出电流设置为 6A; 输出电压设置为 28V。" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.865, + 0.59, + 0.88 + ], + "angle": 0, + "content": "d) 直流电源射频输出设置为 ON, 整机上电, 等待 2000ms。" + }, + { + "type": "list", + "bbox": [ + 0.146, + 0.755, + 0.838, + 0.88 + ], + "angle": 0, + "content": null + } + ], + [ + { + "type": "text", + "bbox": [ + 0.146, + 0.094, + 0.837, + 0.138 + ], + "angle": 0, + "content": "e) 测试仪循环查询直流电源电流, 并将实测值与待机电流限值3.0A进行比较, 每次循环等待 \\(100\\mathrm{ms}\\) 。" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.149, + 0.747, + 0.167 + ], + "angle": 0, + "content": "f) 当测试次数达到 5 或总时长达到 20 秒后, 停止监控, 将测试结果记录在表中。" + }, + { + "type": "list", + "bbox": [ + 0.146, + 0.094, + 0.837, + 0.167 + ], + "angle": 0, + "content": null + }, + { + "type": "title", + "bbox": [ + 0.146, + 0.199, + 0.292, + 0.222 + ], + "angle": 0, + "content": "2. 镜频测试" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.265, + 0.851, + 0.308 + ], + "angle": 0, + "content": "a) 直流电源连接电源,电源设置 28V@6A。信号源、频谱分析仪、开关矩阵与工程机通过TCP/IP 连接。" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.32, + 0.851, + 0.364 + ], + "angle": 0, + "content": "b) 频谱仪设置: Span: 500MHz, RBW: 3MHz, VBW: 3MHz, Sweeptime: 1ms; 信号源设置: 开启脉冲调制, 脉宽 2us, 周期 1ms。整机上电, 等待产品进入低功耗。" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.375, + 0.851, + 0.42 + ], + "angle": 0, + "content": "c) 选择一个SC频段通道(如SC边), 软件自动配置开关矩阵。信号源功率设置为-25dBm (基于 imagePowerSC 变量)。" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.431, + 0.851, + 0.587 + ], + "angle": 0, + "content": "d) SC 频段测试点 1 (2.7GHz): 1. 测试仪设置信号源频率为 2.7GHz。频谱仪设置中心频率 2.7GHz, 开启最大值保持 (MAXH), 等待 3s, 使用 Peak 观察信号最高点, 将功率 P1 记录在草稿中 (测量结果存入 imageSpectrumPower1)。2. 信号源设置不变。频谱仪清除迹线 (WRITe), 设置中心频率为 3.84GHz (基于 imageSpectrumFreqSC[0] 变量), 开启最大值保持, 等待 3s, 使用 Peak 观察信号最高点, 将功率 P2 记录在草稿中 (测量结果存入 imageSpectrumPower2)。" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.597, + 0.851, + 0.698 + ], + "angle": 0, + "content": "e) SC 频段测试点 2 (6.2GHz): 1. 测试仪设置信号源频率为 6.2GHz (基于 SCStopFreq 变量)。频谱仪清除迹线, 设置中心频率 6.2GHz, 开启最大值保持, 等待 3s, 读取峰值功率 P1。2. 信号源设置不变。频谱仪清除迹线, 设置中心频率为 5.04GHz (基于 imageSpectrumFreqSC[1] 变量), 开启最大值保持, 等待 3s, 读取峰值功率 P2。" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.708, + 0.851, + 0.752 + ], + "angle": 0, + "content": "f) 选择一个 X 频段通道 (如 X 边), 软件自动配置开关矩阵。信号源功率设置为 -40dBm (基于 imagePowerX 变量)。" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.763, + 0.851, + 0.863 + ], + "angle": 0, + "content": "g) X 频段测试点 1 (8GHz): 1. 测试仪设置信号源频率为 8GHz (基于 XStartFreq 变量)。频谱仪清除迹线, 设置中心频率 8GHz, 开启最大值保持, 等待 3s, 读取峰值功率 P1。2. 信号源设置不变。频谱仪清除迹线, 设置中心频率为 9.44GHz (基于 imageSpectrumFreqX[0] 变量), 开启最大值保持, 等待 3s, 读取峰值功率 P2。" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.875, + 0.851, + 0.891 + ], + "angle": 0, + "content": "h) X频段测试点2(12GHz): 1. 测试仪设置信号源频率为12GHz(基于XStopFreq变量)。频谱" + }, + { + "type": "list", + "bbox": [ + 0.146, + 0.265, + 0.851, + 0.891 + ], + "angle": 0, + "content": null + } + ], + [ + { + "type": "text", + "bbox": [ + 0.17, + 0.094, + 0.851, + 0.166 + ], + "angle": 0, + "content": "仪清除迹线, 设置中心频率 12GHz, 开启最大值保持, 等待 3s, 读取峰值功率 P1。2. 信号源设置不变。频谱仪清除迹线, 设置中心频率为 10.54GHz (基于 imageSpectrumFreqX[1] 变量), 开启最大值保持, 等待 3s, 读取峰值功率 P2。" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.178, + 0.851, + 0.222 + ], + "angle": 0, + "content": "i) 测试软件自动计算 (P1 - P2), 得到镜频抑制比 (存入 imageRejection)。重复步骤 c) 至 h) 直到所有选定通道测试完毕。将所有镜频抑制比结果记录在表中。" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.233, + 0.765, + 0.25 + ], + "angle": 0, + "content": "j) 测试完毕, 关闭信号源射频输出, 关闭脉冲调制, 频谱仪和信号源释放远程控制。" + }, + { + "type": "list", + "bbox": [ + 0.146, + 0.178, + 0.851, + 0.25 + ], + "angle": 0, + "content": null + } + ] +] \ No newline at end of file diff --git a/backend/planner/mineru_result/67c95dc1-807b-45b9-890e-03ff78f3e347_origin.pdf b/backend/planner/mineru_result/67c95dc1-807b-45b9-890e-03ff78f3e347_origin.pdf new file mode 100644 index 0000000..e8afcd6 Binary files /dev/null and b/backend/planner/mineru_result/67c95dc1-807b-45b9-890e-03ff78f3e347_origin.pdf differ diff --git a/backend/planner/mineru_result/844ff94d-5941-4187-b061-5a45cf2baa54_content_list.json b/backend/planner/mineru_result/844ff94d-5941-4187-b061-5a45cf2baa54_content_list.json new file mode 100644 index 0000000..7a06a8d --- /dev/null +++ b/backend/planner/mineru_result/844ff94d-5941-4187-b061-5a45cf2baa54_content_list.json @@ -0,0 +1,143 @@ +[ + { + "type": "text", + "text": "全壳测试", + "text_level": 1, + "bbox": [ + 421, + 126, + 576, + 156 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "全壳测试包含上电、镜频测试、灵敏度测试、极化测试、功率测试、断电几项,测试中包含的五个核心器件五个核心仪器:频谱分析仪、信号源、开关矩阵、直流电源、示波器。以下是连接示意图:", + "bbox": [ + 144, + 250, + 840, + 343 + ], + "page_idx": 0 + }, + { + "type": "image", + "img_path": "images/f05193299040c6cc15e934e062835d77bb1816610f7ebd7716eb4db1e04c4c38.jpg", + "image_caption": [ + "连接示意图" + ], + "image_footnote": [], + "bbox": [ + 152, + 367, + 858, + 634 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "1. 上电测试", + "text_level": 1, + "bbox": [ + 144, + 688, + 290, + 709 + ], + "page_idx": 0 + }, + { + "type": "list", + "sub_type": "text", + "list_items": [ + "a) 直流电源与信号源与工程机通过TCPIP连接, 连接超时 $2000 \\mathrm{~ms}$ 。", + "b) 信号源设置: 射频输出设置为 OFF。", + "c) 直流电源设置: OCP 状态设置为 ON; OCP 电流设置为 12A; OVP 电压设置为 32V; 输出电流设置为 6A; 输出电压设置为 28V。", + "d) 直流电源射频输出设置为 ON, 整机上电, 等待 2000ms。" + ], + "bbox": [ + 144, + 753, + 836, + 879 + ], + "page_idx": 0 + }, + { + "type": "list", + "sub_type": "text", + "list_items": [ + "e) 测试仪循环查询直流电源电流, 并将实测值与待机电流限值3.0A进行比较, 每次循环等待 $100\\mathrm{ms}$ 。", + "f) 当测试次数达到 5 或总时长达到 20 秒后, 停止监控, 将测试结果记录在表中。" + ], + "bbox": [ + 144, + 93, + 836, + 166 + ], + "page_idx": 1 + }, + { + "type": "text", + "text": "2. 镜频测试", + "text_level": 1, + "bbox": [ + 144, + 198, + 290, + 221 + ], + "page_idx": 1 + }, + { + "type": "list", + "sub_type": "text", + "list_items": [ + "a) 直流电源连接电源,电源设置 28V@6A。信号源、频谱分析仪、开关矩阵与工程机通过TCP/IP 连接。", + "b) 频谱仪设置: Span: 500MHz, RBW: 3MHz, VBW: 3MHz, Sweeptime: 1ms; 信号源设置: 开启脉冲调制, 脉宽 2us, 周期 1ms。整机上电, 等待产品进入低功耗。", + "c) 选择一个SC频段通道(如SC边), 软件自动配置开关矩阵。信号源功率设置为-25dBm (基于 imagePowerSC 变量)。", + "d) SC 频段测试点 1 (2.7GHz): 1. 测试仪设置信号源频率为 2.7GHz。频谱仪设置中心频率 2.7GHz, 开启最大值保持 (MAXH), 等待 3s, 使用 Peak 观察信号最高点, 将功率 P1 记录在草稿中 (测量结果存入 imageSpectrumPower1)。2. 信号源设置不变。频谱仪清除迹线 (WRITe), 设置中心频率为 3.84GHz (基于 imageSpectrumFreqSC[0] 变量), 开启最大值保持, 等待 3s, 使用 Peak 观察信号最高点, 将功率 P2 记录在草稿中 (测量结果存入 imageSpectrumPower2)。", + "e) SC 频段测试点 2 (6.2GHz): 1. 测试仪设置信号源频率为 6.2GHz (基于 SCStopFreq 变量)。频谱仪清除迹线, 设置中心频率 6.2GHz, 开启最大值保持, 等待 3s, 读取峰值功率 P1。2. 信号源设置不变。频谱仪清除迹线, 设置中心频率为 5.04GHz (基于 imageSpectrumFreqSC[1] 变量), 开启最大值保持, 等待 3s, 读取峰值功率 P2。", + "f) 选择一个 X 频段通道 (如 X 边), 软件自动配置开关矩阵。信号源功率设置为 -40dBm (基于 imagePowerX 变量)。", + "g) X 频段测试点 1 (8GHz): 1. 测试仪设置信号源频率为 8GHz (基于 XStartFreq 变量)。频谱仪清除迹线, 设置中心频率 8GHz, 开启最大值保持, 等待 3s, 读取峰值功率 P1。2. 信号源设置不变。频谱仪清除迹线, 设置中心频率为 9.44GHz (基于 imageSpectrumFreqX[0] 变量), 开启最大值保持, 等待 3s, 读取峰值功率 P2。", + "h) X频段测试点2(12GHz): 1. 测试仪设置信号源频率为12GHz(基于XStopFreq变量)。频谱" + ], + "bbox": [ + 144, + 263, + 850, + 890 + ], + "page_idx": 1 + }, + { + "type": "text", + "text": "仪清除迹线, 设置中心频率 12GHz, 开启最大值保持, 等待 3s, 读取峰值功率 P1。2. 信号源设置不变。频谱仪清除迹线, 设置中心频率为 10.54GHz (基于 imageSpectrumFreqX[1] 变量), 开启最大值保持, 等待 3s, 读取峰值功率 P2。", + "bbox": [ + 169, + 93, + 850, + 165 + ], + "page_idx": 2 + }, + { + "type": "list", + "sub_type": "text", + "list_items": [ + "i) 测试软件自动计算 (P1 - P2), 得到镜频抑制比 (存入 imageRejection)。重复步骤 c) 至 h) 直到所有选定通道测试完毕。将所有镜频抑制比结果记录在表中。", + "j) 测试完毕, 关闭信号源射频输出, 关闭脉冲调制, 频谱仪和信号源释放远程控制。" + ], + "bbox": [ + 144, + 177, + 850, + 249 + ], + "page_idx": 2 + } +] \ No newline at end of file diff --git a/backend/planner/mineru_result/844ff94d-5941-4187-b061-5a45cf2baa54_model.json b/backend/planner/mineru_result/844ff94d-5941-4187-b061-5a45cf2baa54_model.json new file mode 100644 index 0000000..575bcf1 --- /dev/null +++ b/backend/planner/mineru_result/844ff94d-5941-4187-b061-5a45cf2baa54_model.json @@ -0,0 +1,305 @@ +[ + [ + { + "type": "title", + "bbox": [ + 0.423, + 0.127, + 0.577, + 0.157 + ], + "angle": 0, + "content": "全壳测试" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.251, + 0.841, + 0.344 + ], + "angle": 0, + "content": "全壳测试包含上电、镜频测试、灵敏度测试、极化测试、功率测试、断电几项,测试中包含的五个核心器件五个核心仪器:频谱分析仪、信号源、开关矩阵、直流电源、示波器。以下是连接示意图:" + }, + { + "type": "image", + "bbox": [ + 0.153, + 0.368, + 0.859, + 0.635 + ], + "angle": 0, + "content": null + }, + { + "type": "image_caption", + "bbox": [ + 0.452, + 0.648, + 0.546, + 0.664 + ], + "angle": 0, + "content": "连接示意图" + }, + { + "type": "title", + "bbox": [ + 0.146, + 0.689, + 0.291, + 0.71 + ], + "angle": 0, + "content": "1. 上电测试" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.755, + 0.647, + 0.77 + ], + "angle": 0, + "content": "a) 直流电源与信号源与工程机通过TCPIP连接, 连接超时 \\(2000 \\mathrm{~ms}\\) 。" + }, + { + "type": "text", + "bbox": [ + 0.147, + 0.782, + 0.431, + 0.797 + ], + "angle": 0, + "content": "b) 信号源设置: 射频输出设置为 OFF。" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.81, + 0.838, + 0.853 + ], + "angle": 0, + "content": "c) 直流电源设置: OCP 状态设置为 ON; OCP 电流设置为 12A; OVP 电压设置为 32V; 输出电流设置为 6A; 输出电压设置为 28V。" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.865, + 0.59, + 0.88 + ], + "angle": 0, + "content": "d) 直流电源射频输出设置为 ON, 整机上电, 等待 2000ms。" + }, + { + "type": "list", + "bbox": [ + 0.146, + 0.755, + 0.838, + 0.88 + ], + "angle": 0, + "content": null + } + ], + [ + { + "type": "text", + "bbox": [ + 0.146, + 0.094, + 0.837, + 0.138 + ], + "angle": 0, + "content": "e) 测试仪循环查询直流电源电流, 并将实测值与待机电流限值3.0A进行比较, 每次循环等待 \\(100\\mathrm{ms}\\) 。" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.149, + 0.747, + 0.167 + ], + "angle": 0, + "content": "f) 当测试次数达到 5 或总时长达到 20 秒后, 停止监控, 将测试结果记录在表中。" + }, + { + "type": "list", + "bbox": [ + 0.146, + 0.094, + 0.837, + 0.167 + ], + "angle": 0, + "content": null + }, + { + "type": "title", + "bbox": [ + 0.146, + 0.199, + 0.292, + 0.222 + ], + "angle": 0, + "content": "2. 镜频测试" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.265, + 0.851, + 0.308 + ], + "angle": 0, + "content": "a) 直流电源连接电源,电源设置 28V@6A。信号源、频谱分析仪、开关矩阵与工程机通过TCP/IP 连接。" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.32, + 0.851, + 0.364 + ], + "angle": 0, + "content": "b) 频谱仪设置: Span: 500MHz, RBW: 3MHz, VBW: 3MHz, Sweeptime: 1ms; 信号源设置: 开启脉冲调制, 脉宽 2us, 周期 1ms。整机上电, 等待产品进入低功耗。" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.375, + 0.851, + 0.42 + ], + "angle": 0, + "content": "c) 选择一个SC频段通道(如SC边), 软件自动配置开关矩阵。信号源功率设置为-25dBm (基于 imagePowerSC 变量)。" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.431, + 0.851, + 0.587 + ], + "angle": 0, + "content": "d) SC 频段测试点 1 (2.7GHz): 1. 测试仪设置信号源频率为 2.7GHz。频谱仪设置中心频率 2.7GHz, 开启最大值保持 (MAXH), 等待 3s, 使用 Peak 观察信号最高点, 将功率 P1 记录在草稿中 (测量结果存入 imageSpectrumPower1)。2. 信号源设置不变。频谱仪清除迹线 (WRITe), 设置中心频率为 3.84GHz (基于 imageSpectrumFreqSC[0] 变量), 开启最大值保持, 等待 3s, 使用 Peak 观察信号最高点, 将功率 P2 记录在草稿中 (测量结果存入 imageSpectrumPower2)。" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.597, + 0.851, + 0.698 + ], + "angle": 0, + "content": "e) SC 频段测试点 2 (6.2GHz): 1. 测试仪设置信号源频率为 6.2GHz (基于 SCStopFreq 变量)。频谱仪清除迹线, 设置中心频率 6.2GHz, 开启最大值保持, 等待 3s, 读取峰值功率 P1。2. 信号源设置不变。频谱仪清除迹线, 设置中心频率为 5.04GHz (基于 imageSpectrumFreqSC[1] 变量), 开启最大值保持, 等待 3s, 读取峰值功率 P2。" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.708, + 0.851, + 0.752 + ], + "angle": 0, + "content": "f) 选择一个 X 频段通道 (如 X 边), 软件自动配置开关矩阵。信号源功率设置为 -40dBm (基于 imagePowerX 变量)。" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.763, + 0.851, + 0.863 + ], + "angle": 0, + "content": "g) X 频段测试点 1 (8GHz): 1. 测试仪设置信号源频率为 8GHz (基于 XStartFreq 变量)。频谱仪清除迹线, 设置中心频率 8GHz, 开启最大值保持, 等待 3s, 读取峰值功率 P1。2. 信号源设置不变。频谱仪清除迹线, 设置中心频率为 9.44GHz (基于 imageSpectrumFreqX[0] 变量), 开启最大值保持, 等待 3s, 读取峰值功率 P2。" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.875, + 0.851, + 0.891 + ], + "angle": 0, + "content": "h) X频段测试点2(12GHz): 1. 测试仪设置信号源频率为12GHz(基于XStopFreq变量)。频谱" + }, + { + "type": "list", + "bbox": [ + 0.146, + 0.265, + 0.851, + 0.891 + ], + "angle": 0, + "content": null + } + ], + [ + { + "type": "text", + "bbox": [ + 0.17, + 0.094, + 0.851, + 0.166 + ], + "angle": 0, + "content": "仪清除迹线, 设置中心频率 12GHz, 开启最大值保持, 等待 3s, 读取峰值功率 P1。2. 信号源设置不变。频谱仪清除迹线, 设置中心频率为 10.54GHz (基于 imageSpectrumFreqX[1] 变量), 开启最大值保持, 等待 3s, 读取峰值功率 P2。" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.178, + 0.851, + 0.222 + ], + "angle": 0, + "content": "i) 测试软件自动计算 (P1 - P2), 得到镜频抑制比 (存入 imageRejection)。重复步骤 c) 至 h) 直到所有选定通道测试完毕。将所有镜频抑制比结果记录在表中。" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.233, + 0.765, + 0.25 + ], + "angle": 0, + "content": "j) 测试完毕, 关闭信号源射频输出, 关闭脉冲调制, 频谱仪和信号源释放远程控制。" + }, + { + "type": "list", + "bbox": [ + 0.146, + 0.178, + 0.851, + 0.25 + ], + "angle": 0, + "content": null + } + ] +] \ No newline at end of file diff --git a/backend/planner/mineru_result/844ff94d-5941-4187-b061-5a45cf2baa54_origin.pdf b/backend/planner/mineru_result/844ff94d-5941-4187-b061-5a45cf2baa54_origin.pdf new file mode 100644 index 0000000..bc96524 Binary files /dev/null and b/backend/planner/mineru_result/844ff94d-5941-4187-b061-5a45cf2baa54_origin.pdf differ diff --git a/backend/planner/mineru_result/970a20be-041a-4e1f-9649-cff9edf95674_content_list.json b/backend/planner/mineru_result/970a20be-041a-4e1f-9649-cff9edf95674_content_list.json new file mode 100644 index 0000000..7045859 --- /dev/null +++ b/backend/planner/mineru_result/970a20be-041a-4e1f-9649-cff9edf95674_content_list.json @@ -0,0 +1,143 @@ +[ + { + "type": "text", + "text": "全壳测试", + "text_level": 1, + "bbox": [ + 421, + 126, + 576, + 156 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "全壳测试包含上电、镜频测试、灵敏度测试、极化测试、功率测试、断电几项,测试中包含的五个核心器件五个核心仪器:频谱分析仪、信号源、开关矩阵、直流电源、示波器。以下是连接示意图:", + "bbox": [ + 144, + 250, + 840, + 342 + ], + "page_idx": 0 + }, + { + "type": "image", + "img_path": "images/f05193299040c6cc15e934e062835d77bb1816610f7ebd7716eb4db1e04c4c38.jpg", + "image_caption": [ + "连接示意图" + ], + "image_footnote": [], + "bbox": [ + 152, + 367, + 858, + 634 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "1. 上电测试", + "text_level": 1, + "bbox": [ + 144, + 688, + 290, + 709 + ], + "page_idx": 0 + }, + { + "type": "list", + "sub_type": "text", + "list_items": [ + "a) 直流电源与信号源与工程机通过TCPIP连接, 连接超时 $2000 \\mathrm{~ms}$ 。", + "b) 信号源设置: 射频输出设置为 OFF。", + "c) 直流电源设置: OCP 状态设置为 ON; OCP 电流设置为 12A; OVP 电压设置为 32V; 输出电流设置为 6A; 输出电压设置为 28V。", + "d) 直流电源射频输出设置为 ON, 整机上电, 等待 2000ms。" + ], + "bbox": [ + 144, + 753, + 836, + 879 + ], + "page_idx": 0 + }, + { + "type": "list", + "sub_type": "text", + "list_items": [ + "e) 测试仪循环查询直流电源电流, 并将实测值与待机电流限值3.0A进行比较, 每次循环等待 $100\\mathrm{ms}$ 。", + "f) 当测试次数达到 5 或总时长达到 20 秒后, 停止监控, 将测试结果记录在表中。" + ], + "bbox": [ + 144, + 93, + 836, + 166 + ], + "page_idx": 1 + }, + { + "type": "text", + "text": "2. 镜频测试", + "text_level": 1, + "bbox": [ + 144, + 198, + 290, + 221 + ], + "page_idx": 1 + }, + { + "type": "list", + "sub_type": "text", + "list_items": [ + "a) 直流电源连接电源,电源设置 28V@6A。信号源、频谱分析仪、开关矩阵与工程机通过TCP/IP 连接。", + "b) 频谱仪设置: Span: 500MHz, RBW: 3MHz, VBW: 3MHz, Sweeptime: 1ms; 信号源设置: 开启脉冲调制, 脉宽 2us, 周期 1ms。整机上电, 等待产品进入低功耗。", + "c) 选择一个SC频段通道(如SC边), 软件自动配置开关矩阵。信号源功率设置为-25dBm (基于 imagePowerSC 变量)。", + "d) SC 频段测试点 1 (2.7GHz): 1. 测试仪设置信号源频率为 2.7GHz。频谱仪设置中心频率 2.7GHz, 开启最大值保持 (MAXH), 等待 3s, 使用 Peak 观察信号最高点, 将功率 P1 记录在草稿中 (测量结果存入 imageSpectrumPower1)。2. 信号源设置不变。频谱仪清除迹线 (WRITe), 设置中心频率为 3.84GHz (基于 imageSpectrumFreqSC[0] 变量), 开启最大值保持, 等待 3s, 使用 Peak 观察信号最高点, 将功率 P2 记录在草稿中 (测量结果存入 imageSpectrumPower2)。", + "e) SC 频段测试点 2 (6.2GHz): 1. 测试仪设置信号源频率为 6.2GHz (基于 SCStopFreq 变量)。频谱仪清除迹线, 设置中心频率 6.2GHz, 开启最大值保持, 等待 3s, 读取峰值功率 P1。2. 信号源设置不变。频谱仪清除迹线, 设置中心频率为 5.04GHz (基于 imageSpectrumFreqSC[1] 变量), 开启最大值保持, 等待 3s, 读取峰值功率 P2。", + "f) 选择一个 X 频段通道 (如 X 边), 软件自动配置开关矩阵。信号源功率设置为 -40dBm (基于 imagePowerX 变量)。", + "g) X 频段测试点 1 (8GHz): 1. 测试仪设置信号源频率为 8GHz (基于 XStartFreq 变量)。频谱仪清除迹线, 设置中心频率 8GHz, 开启最大值保持, 等待 3s, 读取峰值功率 P1。2. 信号源设置不变。频谱仪清除迹线, 设置中心频率为 9.44GHz (基于 imageSpectrumFreqX[0] 变量), 开启最大值保持, 等待 3s, 读取峰值功率 P2。", + "h) X频段测试点2(12GHz): 1. 测试仪设置信号源频率为12GHz(基于XStopFreq变量)。频谱" + ], + "bbox": [ + 144, + 263, + 850, + 890 + ], + "page_idx": 1 + }, + { + "type": "text", + "text": "仪清除迹线, 设置中心频率 12GHz, 开启最大值保持, 等待 3s, 读取峰值功率 P1。2. 信号源设置不变。频谱仪清除迹线, 设置中心频率为 10.54GHz (基于 imageSpectrumFreqX[1] 变量), 开启最大值保持, 等待 3s, 读取峰值功率 P2。", + "bbox": [ + 169, + 93, + 850, + 165 + ], + "page_idx": 2 + }, + { + "type": "list", + "sub_type": "text", + "list_items": [ + "i) 测试软件自动计算 (P1 - P2), 得到镜频抑制比 (存入 imageRejection)。重复步骤 c) 至 h) 直到所有选定通道测试完毕。将所有镜频抑制比结果记录在表中。", + "j) 测试完毕, 关闭信号源射频输出, 关闭脉冲调制, 频谱仪和信号源释放远程控制。" + ], + "bbox": [ + 144, + 177, + 850, + 249 + ], + "page_idx": 2 + } +] \ No newline at end of file diff --git a/backend/planner/mineru_result/970a20be-041a-4e1f-9649-cff9edf95674_model.json b/backend/planner/mineru_result/970a20be-041a-4e1f-9649-cff9edf95674_model.json new file mode 100644 index 0000000..dca0fe1 --- /dev/null +++ b/backend/planner/mineru_result/970a20be-041a-4e1f-9649-cff9edf95674_model.json @@ -0,0 +1,305 @@ +[ + [ + { + "type": "title", + "bbox": [ + 0.423, + 0.127, + 0.577, + 0.157 + ], + "angle": 0, + "content": "全壳测试" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.251, + 0.841, + 0.343 + ], + "angle": 0, + "content": "全壳测试包含上电、镜频测试、灵敏度测试、极化测试、功率测试、断电几项,测试中包含的五个核心器件五个核心仪器:频谱分析仪、信号源、开关矩阵、直流电源、示波器。以下是连接示意图:" + }, + { + "type": "image", + "bbox": [ + 0.153, + 0.368, + 0.859, + 0.635 + ], + "angle": 0, + "content": null + }, + { + "type": "image_caption", + "bbox": [ + 0.452, + 0.648, + 0.546, + 0.664 + ], + "angle": 0, + "content": "连接示意图" + }, + { + "type": "title", + "bbox": [ + 0.146, + 0.689, + 0.291, + 0.71 + ], + "angle": 0, + "content": "1. 上电测试" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.755, + 0.647, + 0.77 + ], + "angle": 0, + "content": "a) 直流电源与信号源与工程机通过TCPIP连接, 连接超时 \\(2000 \\mathrm{~ms}\\) 。" + }, + { + "type": "text", + "bbox": [ + 0.147, + 0.782, + 0.43, + 0.797 + ], + "angle": 0, + "content": "b) 信号源设置: 射频输出设置为 OFF。" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.81, + 0.838, + 0.853 + ], + "angle": 0, + "content": "c) 直流电源设置: OCP 状态设置为 ON; OCP 电流设置为 12A; OVP 电压设置为 32V; 输出电流设置为 6A; 输出电压设置为 28V。" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.865, + 0.59, + 0.88 + ], + "angle": 0, + "content": "d) 直流电源射频输出设置为 ON, 整机上电, 等待 2000ms。" + }, + { + "type": "list", + "bbox": [ + 0.146, + 0.755, + 0.838, + 0.88 + ], + "angle": 0, + "content": null + } + ], + [ + { + "type": "text", + "bbox": [ + 0.146, + 0.094, + 0.837, + 0.138 + ], + "angle": 0, + "content": "e) 测试仪循环查询直流电源电流, 并将实测值与待机电流限值3.0A进行比较, 每次循环等待 \\(100\\mathrm{ms}\\) 。" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.149, + 0.747, + 0.167 + ], + "angle": 0, + "content": "f) 当测试次数达到 5 或总时长达到 20 秒后, 停止监控, 将测试结果记录在表中。" + }, + { + "type": "list", + "bbox": [ + 0.146, + 0.094, + 0.837, + 0.167 + ], + "angle": 0, + "content": null + }, + { + "type": "title", + "bbox": [ + 0.146, + 0.199, + 0.292, + 0.222 + ], + "angle": 0, + "content": "2. 镜频测试" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.265, + 0.851, + 0.308 + ], + "angle": 0, + "content": "a) 直流电源连接电源,电源设置 28V@6A。信号源、频谱分析仪、开关矩阵与工程机通过TCP/IP 连接。" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.32, + 0.851, + 0.364 + ], + "angle": 0, + "content": "b) 频谱仪设置: Span: 500MHz, RBW: 3MHz, VBW: 3MHz, Sweeptime: 1ms; 信号源设置: 开启脉冲调制, 脉宽 2us, 周期 1ms。整机上电, 等待产品进入低功耗。" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.375, + 0.851, + 0.42 + ], + "angle": 0, + "content": "c) 选择一个SC频段通道(如SC边), 软件自动配置开关矩阵。信号源功率设置为-25dBm (基于 imagePowerSC 变量)。" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.431, + 0.851, + 0.587 + ], + "angle": 0, + "content": "d) SC 频段测试点 1 (2.7GHz): 1. 测试仪设置信号源频率为 2.7GHz。频谱仪设置中心频率 2.7GHz, 开启最大值保持 (MAXH), 等待 3s, 使用 Peak 观察信号最高点, 将功率 P1 记录在草稿中 (测量结果存入 imageSpectrumPower1)。2. 信号源设置不变。频谱仪清除迹线 (WRITe), 设置中心频率为 3.84GHz (基于 imageSpectrumFreqSC[0] 变量), 开启最大值保持, 等待 3s, 使用 Peak 观察信号最高点, 将功率 P2 记录在草稿中 (测量结果存入 imageSpectrumPower2)。" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.597, + 0.851, + 0.698 + ], + "angle": 0, + "content": "e) SC 频段测试点 2 (6.2GHz): 1. 测试仪设置信号源频率为 6.2GHz (基于 SCStopFreq 变量)。频谱仪清除迹线, 设置中心频率 6.2GHz, 开启最大值保持, 等待 3s, 读取峰值功率 P1。2. 信号源设置不变。频谱仪清除迹线, 设置中心频率为 5.04GHz (基于 imageSpectrumFreqSC[1] 变量), 开启最大值保持, 等待 3s, 读取峰值功率 P2。" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.708, + 0.851, + 0.752 + ], + "angle": 0, + "content": "f) 选择一个 X 频段通道 (如 X 边), 软件自动配置开关矩阵。信号源功率设置为 -40dBm (基于 imagePowerX 变量)。" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.763, + 0.851, + 0.863 + ], + "angle": 0, + "content": "g) X 频段测试点 1 (8GHz): 1. 测试仪设置信号源频率为 8GHz (基于 XStartFreq 变量)。频谱仪清除迹线, 设置中心频率 8GHz, 开启最大值保持, 等待 3s, 读取峰值功率 P1。2. 信号源设置不变。频谱仪清除迹线, 设置中心频率为 9.44GHz (基于 imageSpectrumFreqX[0] 变量), 开启最大值保持, 等待 3s, 读取峰值功率 P2。" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.875, + 0.851, + 0.891 + ], + "angle": 0, + "content": "h) X频段测试点2(12GHz): 1. 测试仪设置信号源频率为12GHz(基于XStopFreq变量)。频谱" + }, + { + "type": "list", + "bbox": [ + 0.146, + 0.265, + 0.851, + 0.891 + ], + "angle": 0, + "content": null + } + ], + [ + { + "type": "text", + "bbox": [ + 0.17, + 0.094, + 0.851, + 0.166 + ], + "angle": 0, + "content": "仪清除迹线, 设置中心频率 12GHz, 开启最大值保持, 等待 3s, 读取峰值功率 P1。2. 信号源设置不变。频谱仪清除迹线, 设置中心频率为 10.54GHz (基于 imageSpectrumFreqX[1] 变量), 开启最大值保持, 等待 3s, 读取峰值功率 P2。" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.178, + 0.851, + 0.222 + ], + "angle": 0, + "content": "i) 测试软件自动计算 (P1 - P2), 得到镜频抑制比 (存入 imageRejection)。重复步骤 c) 至 h) 直到所有选定通道测试完毕。将所有镜频抑制比结果记录在表中。" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.233, + 0.765, + 0.25 + ], + "angle": 0, + "content": "j) 测试完毕, 关闭信号源射频输出, 关闭脉冲调制, 频谱仪和信号源释放远程控制。" + }, + { + "type": "list", + "bbox": [ + 0.146, + 0.178, + 0.851, + 0.25 + ], + "angle": 0, + "content": null + } + ] +] \ No newline at end of file diff --git a/backend/planner/mineru_result/970a20be-041a-4e1f-9649-cff9edf95674_origin.pdf b/backend/planner/mineru_result/970a20be-041a-4e1f-9649-cff9edf95674_origin.pdf new file mode 100644 index 0000000..e8d76af Binary files /dev/null and b/backend/planner/mineru_result/970a20be-041a-4e1f-9649-cff9edf95674_origin.pdf differ diff --git a/backend/planner/mineru_result/all_knowledge.txt b/backend/planner/mineru_result/all_knowledge.txt new file mode 100644 index 0000000..af2412b --- /dev/null +++ b/backend/planner/mineru_result/all_knowledge.txt @@ -0,0 +1,70 @@ + +# 上电_镜频测试_无参数.docx +# 全壳测试 + +全壳测试包含上电、镜频测试、灵敏度测试、极化测试、功率测试、断电几项,测试中包含的五个核心器件五个核心仪器:频谱分析仪、信号源、开关矩阵、直流电源、示波器。以下是连接示意图: + +![](images/f05193299040c6cc15e934e062835d77bb1816610f7ebd7716eb4db1e04c4c38.jpg) +连接示意图 + +# 1. 上电测试 + +a) 直流电源与信号源与工程机通过TCPIP连接, 连接超时 $2000 \mathrm{~ms}$ 。 +b) 信号源设置: 射频输出设置为 OFF。 +c) 直流电源设置: OCP 状态设置为 ON; OCP 电流设置为 12A; OVP 电压设置为 32V; 输出电流设置为 6A; 输出电压设置为 28V。 +d) 直流电源射频输出设置为 ON, 整机上电, 等待 2000ms。 + +e) 测试仪循环查询直流电源电流, 并将实测值与待机电流限值3.0A进行比较, 每次循环等待 $100\mathrm{ms}$ 。 +f) 当测试次数达到 5 或总时长达到 20 秒后, 停止监控, 将测试结果记录在表中。 + +# 2. 镜频测试 + +a) 直流电源连接电源,电源设置 28V@6A。信号源、频谱分析仪、开关矩阵与工程机通过TCP/IP 连接。 +b) 频谱仪设置: Span: 500MHz, RBW: 3MHz, VBW: 3MHz, Sweeptime: 1ms; 信号源设置: 开启脉冲调制, 脉宽 2us, 周期 1ms。整机上电, 等待产品进入低功耗。 +c) 选择一个SC频段通道(如SC边), 软件自动配置开关矩阵。信号源功率设置为-25dBm (基于 imagePowerSC 变量)。 +d) SC 频段测试点 1 (2.7GHz): 1. 测试仪设置信号源频率为 2.7GHz。频谱仪设置中心频率 2.7GHz, 开启最大值保持 (MAXH), 等待 3s, 使用 Peak 观察信号最高点, 将功率 P1 记录在草稿中 (测量结果存入 imageSpectrumPower1)。2. 信号源设置不变。频谱仪清除迹线 (WRITe), 设置中心频率为 3.84GHz (基于 imageSpectrumFreqSC[0] 变量), 开启最大值保持, 等待 3s, 使用 Peak 观察信号最高点, 将功率 P2 记录在草稿中 (测量结果存入 imageSpectrumPower2)。 +e) SC 频段测试点 2 (6.2GHz): 1. 测试仪设置信号源频率为 6.2GHz (基于 SCStopFreq 变量)。频谱仪清除迹线, 设置中心频率 6.2GHz, 开启最大值保持, 等待 3s, 读取峰值功率 P1。2. 信号源设置不变。频谱仪清除迹线, 设置中心频率为 5.04GHz (基于 imageSpectrumFreqSC[1] 变量), 开启最大值保持, 等待 3s, 读取峰值功率 P2。 +f) 选择一个 X 频段通道 (如 X 边), 软件自动配置开关矩阵。信号源功率设置为 -40dBm (基于 imagePowerX 变量)。 +g) X 频段测试点 1 (8GHz): 1. 测试仪设置信号源频率为 8GHz (基于 XStartFreq 变量)。频谱仪清除迹线, 设置中心频率 8GHz, 开启最大值保持, 等待 3s, 读取峰值功率 P1。2. 信号源设置不变。频谱仪清除迹线, 设置中心频率为 9.44GHz (基于 imageSpectrumFreqX[0] 变量), 开启最大值保持, 等待 3s, 读取峰值功率 P2。 +h) X频段测试点2(12GHz): 1. 测试仪设置信号源频率为12GHz(基于XStopFreq变量)。频谱 + +仪清除迹线, 设置中心频率 12GHz, 开启最大值保持, 等待 3s, 读取峰值功率 P1。2. 信号源设置不变。频谱仪清除迹线, 设置中心频率为 10.54GHz (基于 imageSpectrumFreqX[1] 变量), 开启最大值保持, 等待 3s, 读取峰值功率 P2。 + +i) 测试软件自动计算 (P1 - P2), 得到镜频抑制比 (存入 imageRejection)。重复步骤 c) 至 h) 直到所有选定通道测试完毕。将所有镜频抑制比结果记录在表中。 +j) 测试完毕, 关闭信号源射频输出, 关闭脉冲调制, 频谱仪和信号源释放远程控制。 + + +# 上电_镜频测试_无参数.docx +# 场景1:测试用例 + +测试器件说明:测试中包含的五个核心器件五个核心仪器:频谱分析仪、信号源、开关矩阵、直流电源、示波器。Dut有SC频段接口和X频段接口,通过配置开关矩阵可以实现仪器间连接的更改。 + +本次测试项目共有三项: + +a)上电测试:连接好各个设备,检查各个器件的工作情况,设置OCP,OVP等等操作。 +b)镜频测试:DUT电源供电28V,电流2.9A;测试频段:SC波段(2.7GHz~6.2GHz)和X波段(8GHz~12GHz);频谱仪SPAN=500MHz;信号源RF Power:SC频段=-25+线损+30(衰减器值);X频段=-40+线损+30(衰减器值); + +测试内容:例如SC波段信号源power=-25dBm,f=2.7GHz,频谱分析仪f=2.7GHz,读取频谱分析仪Max Peak功率值P1;信号源功率及频率保持不变,频谱分析仪f-=3.84GHz,读取频谱分析仪Max Peak功率值P2。 + +本次测试信号源在以下四个频点上进行测试; + +2.7GHz 时频谱仪在 2.7GHz 和 3.88GHz +6.2GHz 时频谱仪在 6.2GHz 和 5.88GHz + +8GHz 时频谱仪在 8GHz 和 11GHz + +12GHz 时频谱仪在 12GHz 和 15GHz + +注意:镜频测试中不需要体现线缆损耗值。 + +SC 波段, DUT 在频率 $2.7 \mathrm{GHz}$ 的镜像抑制比= (P1-P2) >7dB 判定合 + +格。不合格报告中标红。 + +c)断电测试:释放资源,关闭各种仪器的状态 + +表 1: 全壳测试报告模板 + +
+ +表 1: 全壳测试报告模板 \ No newline at end of file diff --git a/backend/planner/mineru_result/all_requirements.txt b/backend/planner/mineru_result/all_requirements.txt new file mode 100644 index 0000000..de9fd3f --- /dev/null +++ b/backend/planner/mineru_result/all_requirements.txt @@ -0,0 +1,38 @@ +# 文件: 原镜频测试用例参考.docx + +# 场景1:测试用例 + +测试器件说明:测试中包含的五个核心器件五个核心仪器:频谱分析仪、信号源、开关矩阵、直流电源、示波器。Dut有SC频段接口和X频段接口,通过配置开关矩阵可以实现仪器间连接的更改。 + +本次测试项目共有三项: + +a)上电测试:连接好各个设备,检查各个器件的工作情况,设置OCP,OVP等等操作。 +b)镜频测试:DUT电源供电28V,电流2.9A;测试频段:SC波段(2.7GHz~6.2GHz)和X波段(8GHz~12GHz);频谱仪SPAN=500MHz;信号源RF Power:SC频段=-25+线损+30(衰减器值);X频段=-40+线损+30(衰减器值); + +测试内容:例如SC波段信号源power=-25dBm,f=2.7GHz,频谱分析仪f=2.7GHz,读取频谱分析仪Max Peak功率值P1;信号源功率及频率保持不变,频谱分析仪f-=3.84GHz,读取频谱分析仪Max Peak功率值P2。 + +本次测试信号源在以下四个频点上进行测试; + +2.7GHz 时频谱仪在 2.7GHz 和 3.88GHz +6.2GHz 时频谱仪在 6.2GHz 和 5.88GHz + +8GHz 时频谱仪在 8GHz 和 11GHz + +12GHz 时频谱仪在 12GHz 和 15GHz + +注意:镜频测试中不需要体现线缆损耗值。 + +SC 波段, DUT 在频率 $2.7 \mathrm{GHz}$ 的镜像抑制比= (P1-P2) >7dB 判定合 + +格。不合格报告中标红。 + +c)断电测试:释放资源,关闭各种仪器的状态 + +表 1: 全壳测试报告模板 + +
+ +表 1: 全壳测试报告模板 + +--- + diff --git a/backend/planner/mineru_result/cfc13397-e7b6-41bd-9f4a-ea0471df1a1d_content_list.json b/backend/planner/mineru_result/cfc13397-e7b6-41bd-9f4a-ea0471df1a1d_content_list.json new file mode 100644 index 0000000..5ec71c1 --- /dev/null +++ b/backend/planner/mineru_result/cfc13397-e7b6-41bd-9f4a-ea0471df1a1d_content_list.json @@ -0,0 +1,143 @@ +[ + { + "type": "text", + "text": "全壳测试", + "text_level": 1, + "bbox": [ + 421, + 126, + 574, + 155 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "全壳测试包含上电、镜频测试、灵敏度测试、极化测试、功率测试、断电几项,测试中包含的五个核心器件五个核心仪器:频谱分析仪、信号源、开关矩阵、直流电源、示波器。以下是连接示意图:", + "bbox": [ + 144, + 250, + 840, + 343 + ], + "page_idx": 0 + }, + { + "type": "image", + "img_path": "images/f05193299040c6cc15e934e062835d77bb1816610f7ebd7716eb4db1e04c4c38.jpg", + "image_caption": [ + "连接示意图" + ], + "image_footnote": [], + "bbox": [ + 152, + 367, + 858, + 634 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "1. 上电测试", + "text_level": 1, + "bbox": [ + 144, + 688, + 289, + 709 + ], + "page_idx": 0 + }, + { + "type": "list", + "sub_type": "text", + "list_items": [ + "a) 直流电源与信号源与工程机通过TCPIP连接, 连接超时 $2000 \\mathrm{~ms}$ 。", + "b) 信号源设置: 射频输出设置为 OFF。", + "c) 直流电源设置: OCP 状态设置为 ON; OCP 电流设置为 12A; OVP 电压设置为 32V; 输出电流设置为 6A; 输出电压设置为 28V。", + "d) 直流电源射频输出设置为 ON, 整机上电, 等待 2000ms。" + ], + "bbox": [ + 144, + 753, + 836, + 879 + ], + "page_idx": 0 + }, + { + "type": "list", + "sub_type": "text", + "list_items": [ + "e) 测试仪循环查询直流电源电流, 并将实测值与待机电流限值3.0A进行比较, 每次循环等待 $100\\mathrm{ms}$ 。", + "f) 当测试次数达到 5 或总时长达到 20 秒后, 停止监控, 将测试结果记录在表中。" + ], + "bbox": [ + 144, + 93, + 836, + 165 + ], + "page_idx": 1 + }, + { + "type": "text", + "text": "2. 镜频测试", + "text_level": 1, + "bbox": [ + 144, + 198, + 290, + 221 + ], + "page_idx": 1 + }, + { + "type": "list", + "sub_type": "text", + "list_items": [ + "a) 直流电源连接电源,电源设置 $28\\mathrm{V} @ 6\\mathrm{A}$ 。信号源、频谱分析仪、开关矩阵与工程机通过TCPIP 连接。", + "b) 频谱仪设置: Span: 500MHz, RBW: 3MHz, VBW: 3MHz, Sweeptime: 1ms; 信号源设置: 开启脉冲调制, 脉宽 2us, 周期 1ms。整机上电, 等待产品进入低功耗。", + "c) 选择一个SC频段通道(如SC边), 软件自动配置开关矩阵。信号源功率设置为-25dBm (基于 imagePowerSC 变量)。", + "d) SC 频段测试点 1 (2.7GHz): 1. 测试仪设置信号源频率为 2.7GHz。频谱仪设置中心频率 2.7GHz, 开启最大值保持 (MAXH), 等待 3s, 使用 Peak 观察信号最高点, 将功率 P1 记录在草稿中 (测量结果存入 imageSpectrumPower1)。2. 信号源设置不变。频谱仪清除迹线 (WRITEte), 设置中心频率为 3.84GHz (基于 imageSpectrumFreqSC[0] 变量), 开启最大值保持, 等待 3s, 使用 Peak 观察信号最高点, 将功率 P2 记录在草稿中 (测量结果存入 imageSpectrumPower2)。", + "e) SC 频段测试点 2 (6.2GHz): 1. 测试仪设置信号源频率为 6.2GHz (基于 SCStopFreq 变量)。频谱仪清除迹线, 设置中心频率 6.2GHz, 开启最大值保持, 等待 3s, 读取峰值功率 P1。2. 信号源设置不变。频谱仪清除迹线, 设置中心频率为 5.04GHz (基于 imageSpectrumFreqSC[1] 变量), 开启最大值保持, 等待 3s, 读取峰值功率 P2。", + "f) 选择一个 X 频段通道 (如 X 边), 软件自动配置开关矩阵。信号源功率设置为 -40dBm (基于 imagePowerX 变量)。", + "g) X 频段测试点 1 (8GHz): 1. 测试仪设置信号源频率为 8GHz (基于 XStartFreq 变量)。频谱仪清除迹线, 设置中心频率 8GHz, 开启最大值保持, 等待 3s, 读取峰值功率 P1。2. 信号源设置不变。频谱仪清除迹线, 设置中心频率为 9.44GHz (基于 imageSpectrumFreqX[0] 变量), 开启最大值保持, 等待 3s, 读取峰值功率 P2。", + "h) X频段测试点2(12GHz): 1. 测试仪设置信号源频率为12GHz (基于XStopFreq变量)。频谱" + ], + "bbox": [ + 144, + 263, + 847, + 890 + ], + "page_idx": 1 + }, + { + "type": "text", + "text": "仪清除迹线, 设置中心频率 12GHz, 开启最大值保持, 等待 3s, 读取峰值功率 P1。2. 信号源设置不变。频谱仪清除迹线, 设置中心频率为 10.54GHz (基于 imageSpectrumFreqX[1] 变量), 开启最大值保持, 等待 3s, 读取峰值功率 P2。", + "bbox": [ + 169, + 93, + 850, + 165 + ], + "page_idx": 2 + }, + { + "type": "list", + "sub_type": "text", + "list_items": [ + "i) 测试软件自动计算 (P1 - P2), 得到镜频抑制比 (存入 imageRejection)。重复步骤 c) 至 h) 直到所有选定通道测试完毕。将所有镜频抑制比结果记录在表中。", + "j) 测试完毕, 关闭信号源射频输出, 关闭脉冲调制, 频谱仪和信号源释放远程控制。" + ], + "bbox": [ + 144, + 177, + 850, + 249 + ], + "page_idx": 2 + } +] \ No newline at end of file diff --git a/backend/planner/mineru_result/cfc13397-e7b6-41bd-9f4a-ea0471df1a1d_model.json b/backend/planner/mineru_result/cfc13397-e7b6-41bd-9f4a-ea0471df1a1d_model.json new file mode 100644 index 0000000..46e6b13 --- /dev/null +++ b/backend/planner/mineru_result/cfc13397-e7b6-41bd-9f4a-ea0471df1a1d_model.json @@ -0,0 +1,305 @@ +[ + [ + { + "type": "title", + "bbox": [ + 0.423, + 0.127, + 0.576, + 0.156 + ], + "angle": 0, + "content": "全壳测试" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.251, + 0.841, + 0.344 + ], + "angle": 0, + "content": "全壳测试包含上电、镜频测试、灵敏度测试、极化测试、功率测试、断电几项,测试中包含的五个核心器件五个核心仪器:频谱分析仪、信号源、开关矩阵、直流电源、示波器。以下是连接示意图:" + }, + { + "type": "image", + "bbox": [ + 0.153, + 0.368, + 0.859, + 0.635 + ], + "angle": 0, + "content": null + }, + { + "type": "image_caption", + "bbox": [ + 0.452, + 0.648, + 0.546, + 0.664 + ], + "angle": 0, + "content": "连接示意图" + }, + { + "type": "title", + "bbox": [ + 0.146, + 0.689, + 0.29, + 0.71 + ], + "angle": 0, + "content": "1. 上电测试" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.755, + 0.647, + 0.77 + ], + "angle": 0, + "content": "a) 直流电源与信号源与工程机通过TCPIP连接, 连接超时 \\(2000 \\mathrm{~ms}\\) 。" + }, + { + "type": "text", + "bbox": [ + 0.147, + 0.782, + 0.43, + 0.797 + ], + "angle": 0, + "content": "b) 信号源设置: 射频输出设置为 OFF。" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.81, + 0.838, + 0.853 + ], + "angle": 0, + "content": "c) 直流电源设置: OCP 状态设置为 ON; OCP 电流设置为 12A; OVP 电压设置为 32V; 输出电流设置为 6A; 输出电压设置为 28V。" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.865, + 0.589, + 0.88 + ], + "angle": 0, + "content": "d) 直流电源射频输出设置为 ON, 整机上电, 等待 2000ms。" + }, + { + "type": "list", + "bbox": [ + 0.146, + 0.755, + 0.838, + 0.88 + ], + "angle": 0, + "content": null + } + ], + [ + { + "type": "text", + "bbox": [ + 0.146, + 0.094, + 0.837, + 0.138 + ], + "angle": 0, + "content": "e) 测试仪循环查询直流电源电流, 并将实测值与待机电流限值3.0A进行比较, 每次循环等待 \\(100\\mathrm{ms}\\) 。" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.149, + 0.747, + 0.166 + ], + "angle": 0, + "content": "f) 当测试次数达到 5 或总时长达到 20 秒后, 停止监控, 将测试结果记录在表中。" + }, + { + "type": "list", + "bbox": [ + 0.146, + 0.094, + 0.837, + 0.166 + ], + "angle": 0, + "content": null + }, + { + "type": "title", + "bbox": [ + 0.146, + 0.199, + 0.292, + 0.222 + ], + "angle": 0, + "content": "2. 镜频测试" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.265, + 0.848, + 0.308 + ], + "angle": 0, + "content": "a) 直流电源连接电源,电源设置 \\(28\\mathrm{V} @ 6\\mathrm{A}\\) 。信号源、频谱分析仪、开关矩阵与工程机通过TCPIP 连接。" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.32, + 0.848, + 0.364 + ], + "angle": 0, + "content": "b) 频谱仪设置: Span: 500MHz, RBW: 3MHz, VBW: 3MHz, Sweeptime: 1ms; 信号源设置: 开启脉冲调制, 脉宽 2us, 周期 1ms。整机上电, 等待产品进入低功耗。" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.375, + 0.848, + 0.419 + ], + "angle": 0, + "content": "c) 选择一个SC频段通道(如SC边), 软件自动配置开关矩阵。信号源功率设置为-25dBm (基于 imagePowerSC 变量)。" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.431, + 0.848, + 0.586 + ], + "angle": 0, + "content": "d) SC 频段测试点 1 (2.7GHz): 1. 测试仪设置信号源频率为 2.7GHz。频谱仪设置中心频率 2.7GHz, 开启最大值保持 (MAXH), 等待 3s, 使用 Peak 观察信号最高点, 将功率 P1 记录在草稿中 (测量结果存入 imageSpectrumPower1)。2. 信号源设置不变。频谱仪清除迹线 (WRITEte), 设置中心频率为 3.84GHz (基于 imageSpectrumFreqSC[0] 变量), 开启最大值保持, 等待 3s, 使用 Peak 观察信号最高点, 将功率 P2 记录在草稿中 (测量结果存入 imageSpectrumPower2)。" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.597, + 0.848, + 0.697 + ], + "angle": 0, + "content": "e) SC 频段测试点 2 (6.2GHz): 1. 测试仪设置信号源频率为 6.2GHz (基于 SCStopFreq 变量)。频谱仪清除迹线, 设置中心频率 6.2GHz, 开启最大值保持, 等待 3s, 读取峰值功率 P1。2. 信号源设置不变。频谱仪清除迹线, 设置中心频率为 5.04GHz (基于 imageSpectrumFreqSC[1] 变量), 开启最大值保持, 等待 3s, 读取峰值功率 P2。" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.708, + 0.848, + 0.752 + ], + "angle": 0, + "content": "f) 选择一个 X 频段通道 (如 X 边), 软件自动配置开关矩阵。信号源功率设置为 -40dBm (基于 imagePowerX 变量)。" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.763, + 0.848, + 0.863 + ], + "angle": 0, + "content": "g) X 频段测试点 1 (8GHz): 1. 测试仪设置信号源频率为 8GHz (基于 XStartFreq 变量)。频谱仪清除迹线, 设置中心频率 8GHz, 开启最大值保持, 等待 3s, 读取峰值功率 P1。2. 信号源设置不变。频谱仪清除迹线, 设置中心频率为 9.44GHz (基于 imageSpectrumFreqX[0] 变量), 开启最大值保持, 等待 3s, 读取峰值功率 P2。" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.875, + 0.848, + 0.891 + ], + "angle": 0, + "content": "h) X频段测试点2(12GHz): 1. 测试仪设置信号源频率为12GHz (基于XStopFreq变量)。频谱" + }, + { + "type": "list", + "bbox": [ + 0.146, + 0.265, + 0.848, + 0.891 + ], + "angle": 0, + "content": null + } + ], + [ + { + "type": "text", + "bbox": [ + 0.17, + 0.094, + 0.851, + 0.166 + ], + "angle": 0, + "content": "仪清除迹线, 设置中心频率 12GHz, 开启最大值保持, 等待 3s, 读取峰值功率 P1。2. 信号源设置不变。频谱仪清除迹线, 设置中心频率为 10.54GHz (基于 imageSpectrumFreqX[1] 变量), 开启最大值保持, 等待 3s, 读取峰值功率 P2。" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.178, + 0.851, + 0.222 + ], + "angle": 0, + "content": "i) 测试软件自动计算 (P1 - P2), 得到镜频抑制比 (存入 imageRejection)。重复步骤 c) 至 h) 直到所有选定通道测试完毕。将所有镜频抑制比结果记录在表中。" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.233, + 0.765, + 0.25 + ], + "angle": 0, + "content": "j) 测试完毕, 关闭信号源射频输出, 关闭脉冲调制, 频谱仪和信号源释放远程控制。" + }, + { + "type": "list", + "bbox": [ + 0.146, + 0.178, + 0.851, + 0.25 + ], + "angle": 0, + "content": null + } + ] +] \ No newline at end of file diff --git a/backend/planner/mineru_result/cfc13397-e7b6-41bd-9f4a-ea0471df1a1d_origin.pdf b/backend/planner/mineru_result/cfc13397-e7b6-41bd-9f4a-ea0471df1a1d_origin.pdf new file mode 100644 index 0000000..495da80 Binary files /dev/null and b/backend/planner/mineru_result/cfc13397-e7b6-41bd-9f4a-ea0471df1a1d_origin.pdf differ diff --git a/backend/planner/mineru_result/f40e7bcd-aff3-499b-a525-f0da930f62a0_content_list.json b/backend/planner/mineru_result/f40e7bcd-aff3-499b-a525-f0da930f62a0_content_list.json new file mode 100644 index 0000000..7a06a8d --- /dev/null +++ b/backend/planner/mineru_result/f40e7bcd-aff3-499b-a525-f0da930f62a0_content_list.json @@ -0,0 +1,143 @@ +[ + { + "type": "text", + "text": "全壳测试", + "text_level": 1, + "bbox": [ + 421, + 126, + 576, + 156 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "全壳测试包含上电、镜频测试、灵敏度测试、极化测试、功率测试、断电几项,测试中包含的五个核心器件五个核心仪器:频谱分析仪、信号源、开关矩阵、直流电源、示波器。以下是连接示意图:", + "bbox": [ + 144, + 250, + 840, + 343 + ], + "page_idx": 0 + }, + { + "type": "image", + "img_path": "images/f05193299040c6cc15e934e062835d77bb1816610f7ebd7716eb4db1e04c4c38.jpg", + "image_caption": [ + "连接示意图" + ], + "image_footnote": [], + "bbox": [ + 152, + 367, + 858, + 634 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "1. 上电测试", + "text_level": 1, + "bbox": [ + 144, + 688, + 290, + 709 + ], + "page_idx": 0 + }, + { + "type": "list", + "sub_type": "text", + "list_items": [ + "a) 直流电源与信号源与工程机通过TCPIP连接, 连接超时 $2000 \\mathrm{~ms}$ 。", + "b) 信号源设置: 射频输出设置为 OFF。", + "c) 直流电源设置: OCP 状态设置为 ON; OCP 电流设置为 12A; OVP 电压设置为 32V; 输出电流设置为 6A; 输出电压设置为 28V。", + "d) 直流电源射频输出设置为 ON, 整机上电, 等待 2000ms。" + ], + "bbox": [ + 144, + 753, + 836, + 879 + ], + "page_idx": 0 + }, + { + "type": "list", + "sub_type": "text", + "list_items": [ + "e) 测试仪循环查询直流电源电流, 并将实测值与待机电流限值3.0A进行比较, 每次循环等待 $100\\mathrm{ms}$ 。", + "f) 当测试次数达到 5 或总时长达到 20 秒后, 停止监控, 将测试结果记录在表中。" + ], + "bbox": [ + 144, + 93, + 836, + 166 + ], + "page_idx": 1 + }, + { + "type": "text", + "text": "2. 镜频测试", + "text_level": 1, + "bbox": [ + 144, + 198, + 290, + 221 + ], + "page_idx": 1 + }, + { + "type": "list", + "sub_type": "text", + "list_items": [ + "a) 直流电源连接电源,电源设置 28V@6A。信号源、频谱分析仪、开关矩阵与工程机通过TCP/IP 连接。", + "b) 频谱仪设置: Span: 500MHz, RBW: 3MHz, VBW: 3MHz, Sweeptime: 1ms; 信号源设置: 开启脉冲调制, 脉宽 2us, 周期 1ms。整机上电, 等待产品进入低功耗。", + "c) 选择一个SC频段通道(如SC边), 软件自动配置开关矩阵。信号源功率设置为-25dBm (基于 imagePowerSC 变量)。", + "d) SC 频段测试点 1 (2.7GHz): 1. 测试仪设置信号源频率为 2.7GHz。频谱仪设置中心频率 2.7GHz, 开启最大值保持 (MAXH), 等待 3s, 使用 Peak 观察信号最高点, 将功率 P1 记录在草稿中 (测量结果存入 imageSpectrumPower1)。2. 信号源设置不变。频谱仪清除迹线 (WRITe), 设置中心频率为 3.84GHz (基于 imageSpectrumFreqSC[0] 变量), 开启最大值保持, 等待 3s, 使用 Peak 观察信号最高点, 将功率 P2 记录在草稿中 (测量结果存入 imageSpectrumPower2)。", + "e) SC 频段测试点 2 (6.2GHz): 1. 测试仪设置信号源频率为 6.2GHz (基于 SCStopFreq 变量)。频谱仪清除迹线, 设置中心频率 6.2GHz, 开启最大值保持, 等待 3s, 读取峰值功率 P1。2. 信号源设置不变。频谱仪清除迹线, 设置中心频率为 5.04GHz (基于 imageSpectrumFreqSC[1] 变量), 开启最大值保持, 等待 3s, 读取峰值功率 P2。", + "f) 选择一个 X 频段通道 (如 X 边), 软件自动配置开关矩阵。信号源功率设置为 -40dBm (基于 imagePowerX 变量)。", + "g) X 频段测试点 1 (8GHz): 1. 测试仪设置信号源频率为 8GHz (基于 XStartFreq 变量)。频谱仪清除迹线, 设置中心频率 8GHz, 开启最大值保持, 等待 3s, 读取峰值功率 P1。2. 信号源设置不变。频谱仪清除迹线, 设置中心频率为 9.44GHz (基于 imageSpectrumFreqX[0] 变量), 开启最大值保持, 等待 3s, 读取峰值功率 P2。", + "h) X频段测试点2(12GHz): 1. 测试仪设置信号源频率为12GHz(基于XStopFreq变量)。频谱" + ], + "bbox": [ + 144, + 263, + 850, + 890 + ], + "page_idx": 1 + }, + { + "type": "text", + "text": "仪清除迹线, 设置中心频率 12GHz, 开启最大值保持, 等待 3s, 读取峰值功率 P1。2. 信号源设置不变。频谱仪清除迹线, 设置中心频率为 10.54GHz (基于 imageSpectrumFreqX[1] 变量), 开启最大值保持, 等待 3s, 读取峰值功率 P2。", + "bbox": [ + 169, + 93, + 850, + 165 + ], + "page_idx": 2 + }, + { + "type": "list", + "sub_type": "text", + "list_items": [ + "i) 测试软件自动计算 (P1 - P2), 得到镜频抑制比 (存入 imageRejection)。重复步骤 c) 至 h) 直到所有选定通道测试完毕。将所有镜频抑制比结果记录在表中。", + "j) 测试完毕, 关闭信号源射频输出, 关闭脉冲调制, 频谱仪和信号源释放远程控制。" + ], + "bbox": [ + 144, + 177, + 850, + 249 + ], + "page_idx": 2 + } +] \ No newline at end of file diff --git a/backend/planner/mineru_result/f40e7bcd-aff3-499b-a525-f0da930f62a0_model.json b/backend/planner/mineru_result/f40e7bcd-aff3-499b-a525-f0da930f62a0_model.json new file mode 100644 index 0000000..8a8bca5 --- /dev/null +++ b/backend/planner/mineru_result/f40e7bcd-aff3-499b-a525-f0da930f62a0_model.json @@ -0,0 +1,305 @@ +[ + [ + { + "type": "title", + "bbox": [ + 0.423, + 0.127, + 0.577, + 0.157 + ], + "angle": 0, + "content": "全壳测试" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.251, + 0.841, + 0.344 + ], + "angle": 0, + "content": "全壳测试包含上电、镜频测试、灵敏度测试、极化测试、功率测试、断电几项,测试中包含的五个核心器件五个核心仪器:频谱分析仪、信号源、开关矩阵、直流电源、示波器。以下是连接示意图:" + }, + { + "type": "image", + "bbox": [ + 0.153, + 0.368, + 0.859, + 0.635 + ], + "angle": 0, + "content": null + }, + { + "type": "image_caption", + "bbox": [ + 0.452, + 0.648, + 0.546, + 0.664 + ], + "angle": 0, + "content": "连接示意图" + }, + { + "type": "title", + "bbox": [ + 0.146, + 0.689, + 0.291, + 0.71 + ], + "angle": 0, + "content": "1. 上电测试" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.755, + 0.647, + 0.77 + ], + "angle": 0, + "content": "a) 直流电源与信号源与工程机通过TCPIP连接, 连接超时 \\(2000 \\mathrm{~ms}\\) 。" + }, + { + "type": "text", + "bbox": [ + 0.147, + 0.782, + 0.43, + 0.797 + ], + "angle": 0, + "content": "b) 信号源设置: 射频输出设置为 OFF。" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.81, + 0.838, + 0.853 + ], + "angle": 0, + "content": "c) 直流电源设置: OCP 状态设置为 ON; OCP 电流设置为 12A; OVP 电压设置为 32V; 输出电流设置为 6A; 输出电压设置为 28V。" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.865, + 0.59, + 0.88 + ], + "angle": 0, + "content": "d) 直流电源射频输出设置为 ON, 整机上电, 等待 2000ms。" + }, + { + "type": "list", + "bbox": [ + 0.146, + 0.755, + 0.838, + 0.88 + ], + "angle": 0, + "content": null + } + ], + [ + { + "type": "text", + "bbox": [ + 0.146, + 0.094, + 0.837, + 0.138 + ], + "angle": 0, + "content": "e) 测试仪循环查询直流电源电流, 并将实测值与待机电流限值3.0A进行比较, 每次循环等待 \\(100\\mathrm{ms}\\) 。" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.149, + 0.747, + 0.167 + ], + "angle": 0, + "content": "f) 当测试次数达到 5 或总时长达到 20 秒后, 停止监控, 将测试结果记录在表中。" + }, + { + "type": "list", + "bbox": [ + 0.146, + 0.094, + 0.837, + 0.167 + ], + "angle": 0, + "content": null + }, + { + "type": "title", + "bbox": [ + 0.146, + 0.199, + 0.292, + 0.222 + ], + "angle": 0, + "content": "2. 镜频测试" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.265, + 0.851, + 0.308 + ], + "angle": 0, + "content": "a) 直流电源连接电源,电源设置 28V@6A。信号源、频谱分析仪、开关矩阵与工程机通过TCP/IP 连接。" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.32, + 0.851, + 0.364 + ], + "angle": 0, + "content": "b) 频谱仪设置: Span: 500MHz, RBW: 3MHz, VBW: 3MHz, Sweeptime: 1ms; 信号源设置: 开启脉冲调制, 脉宽 2us, 周期 1ms。整机上电, 等待产品进入低功耗。" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.375, + 0.851, + 0.42 + ], + "angle": 0, + "content": "c) 选择一个SC频段通道(如SC边), 软件自动配置开关矩阵。信号源功率设置为-25dBm (基于 imagePowerSC 变量)。" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.431, + 0.851, + 0.587 + ], + "angle": 0, + "content": "d) SC 频段测试点 1 (2.7GHz): 1. 测试仪设置信号源频率为 2.7GHz。频谱仪设置中心频率 2.7GHz, 开启最大值保持 (MAXH), 等待 3s, 使用 Peak 观察信号最高点, 将功率 P1 记录在草稿中 (测量结果存入 imageSpectrumPower1)。2. 信号源设置不变。频谱仪清除迹线 (WRITe), 设置中心频率为 3.84GHz (基于 imageSpectrumFreqSC[0] 变量), 开启最大值保持, 等待 3s, 使用 Peak 观察信号最高点, 将功率 P2 记录在草稿中 (测量结果存入 imageSpectrumPower2)。" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.597, + 0.851, + 0.698 + ], + "angle": 0, + "content": "e) SC 频段测试点 2 (6.2GHz): 1. 测试仪设置信号源频率为 6.2GHz (基于 SCStopFreq 变量)。频谱仪清除迹线, 设置中心频率 6.2GHz, 开启最大值保持, 等待 3s, 读取峰值功率 P1。2. 信号源设置不变。频谱仪清除迹线, 设置中心频率为 5.04GHz (基于 imageSpectrumFreqSC[1] 变量), 开启最大值保持, 等待 3s, 读取峰值功率 P2。" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.708, + 0.851, + 0.752 + ], + "angle": 0, + "content": "f) 选择一个 X 频段通道 (如 X 边), 软件自动配置开关矩阵。信号源功率设置为 -40dBm (基于 imagePowerX 变量)。" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.763, + 0.851, + 0.863 + ], + "angle": 0, + "content": "g) X 频段测试点 1 (8GHz): 1. 测试仪设置信号源频率为 8GHz (基于 XStartFreq 变量)。频谱仪清除迹线, 设置中心频率 8GHz, 开启最大值保持, 等待 3s, 读取峰值功率 P1。2. 信号源设置不变。频谱仪清除迹线, 设置中心频率为 9.44GHz (基于 imageSpectrumFreqX[0] 变量), 开启最大值保持, 等待 3s, 读取峰值功率 P2。" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.875, + 0.851, + 0.891 + ], + "angle": 0, + "content": "h) X频段测试点2(12GHz): 1. 测试仪设置信号源频率为12GHz(基于XStopFreq变量)。频谱" + }, + { + "type": "list", + "bbox": [ + 0.146, + 0.265, + 0.851, + 0.891 + ], + "angle": 0, + "content": null + } + ], + [ + { + "type": "text", + "bbox": [ + 0.17, + 0.094, + 0.851, + 0.166 + ], + "angle": 0, + "content": "仪清除迹线, 设置中心频率 12GHz, 开启最大值保持, 等待 3s, 读取峰值功率 P1。2. 信号源设置不变。频谱仪清除迹线, 设置中心频率为 10.54GHz (基于 imageSpectrumFreqX[1] 变量), 开启最大值保持, 等待 3s, 读取峰值功率 P2。" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.178, + 0.851, + 0.222 + ], + "angle": 0, + "content": "i) 测试软件自动计算 (P1 - P2), 得到镜频抑制比 (存入 imageRejection)。重复步骤 c) 至 h) 直到所有选定通道测试完毕。将所有镜频抑制比结果记录在表中。" + }, + { + "type": "text", + "bbox": [ + 0.146, + 0.233, + 0.765, + 0.25 + ], + "angle": 0, + "content": "j) 测试完毕, 关闭信号源射频输出, 关闭脉冲调制, 频谱仪和信号源释放远程控制。" + }, + { + "type": "list", + "bbox": [ + 0.146, + 0.178, + 0.851, + 0.25 + ], + "angle": 0, + "content": null + } + ] +] \ No newline at end of file diff --git a/backend/planner/mineru_result/f40e7bcd-aff3-499b-a525-f0da930f62a0_origin.pdf b/backend/planner/mineru_result/f40e7bcd-aff3-499b-a525-f0da930f62a0_origin.pdf new file mode 100644 index 0000000..cfce0b5 Binary files /dev/null and b/backend/planner/mineru_result/f40e7bcd-aff3-499b-a525-f0da930f62a0_origin.pdf differ diff --git a/backend/planner/mineru_result/full.md b/backend/planner/mineru_result/full.md new file mode 100644 index 0000000..a86b6ee --- /dev/null +++ b/backend/planner/mineru_result/full.md @@ -0,0 +1,32 @@ +# 全壳测试 + +全壳测试包含上电、镜频测试、灵敏度测试、极化测试、功率测试、断电几项,测试中包含的五个核心器件五个核心仪器:频谱分析仪、信号源、开关矩阵、直流电源、示波器。以下是连接示意图: + +![](images/f05193299040c6cc15e934e062835d77bb1816610f7ebd7716eb4db1e04c4c38.jpg) +连接示意图 + +# 1. 上电测试 + +a) 直流电源与信号源与工程机通过TCPIP连接, 连接超时 $2000 \mathrm{~ms}$ 。 +b) 信号源设置: 射频输出设置为 OFF。 +c) 直流电源设置: OCP 状态设置为 ON; OCP 电流设置为 12A; OVP 电压设置为 32V; 输出电流设置为 6A; 输出电压设置为 28V。 +d) 直流电源射频输出设置为 ON, 整机上电, 等待 2000ms。 + +e) 测试仪循环查询直流电源电流, 并将实测值与待机电流限值3.0A进行比较, 每次循环等待 $100\mathrm{ms}$ 。 +f) 当测试次数达到 5 或总时长达到 20 秒后, 停止监控, 将测试结果记录在表中。 + +# 2. 镜频测试 + +a) 直流电源连接电源,电源设置 28V@6A。信号源、频谱分析仪、开关矩阵与工程机通过TCP/IP 连接。 +b) 频谱仪设置: Span: 500MHz, RBW: 3MHz, VBW: 3MHz, Sweeptime: 1ms; 信号源设置: 开启脉冲调制, 脉宽 2us, 周期 1ms。整机上电, 等待产品进入低功耗。 +c) 选择一个SC频段通道(如SC边), 软件自动配置开关矩阵。信号源功率设置为-25dBm (基于 imagePowerSC 变量)。 +d) SC 频段测试点 1 (2.7GHz): 1. 测试仪设置信号源频率为 2.7GHz。频谱仪设置中心频率 2.7GHz, 开启最大值保持 (MAXH), 等待 3s, 使用 Peak 观察信号最高点, 将功率 P1 记录在草稿中 (测量结果存入 imageSpectrumPower1)。2. 信号源设置不变。频谱仪清除迹线 (WRITe), 设置中心频率为 3.84GHz (基于 imageSpectrumFreqSC[0] 变量), 开启最大值保持, 等待 3s, 使用 Peak 观察信号最高点, 将功率 P2 记录在草稿中 (测量结果存入 imageSpectrumPower2)。 +e) SC 频段测试点 2 (6.2GHz): 1. 测试仪设置信号源频率为 6.2GHz (基于 SCStopFreq 变量)。频谱仪清除迹线, 设置中心频率 6.2GHz, 开启最大值保持, 等待 3s, 读取峰值功率 P1。2. 信号源设置不变。频谱仪清除迹线, 设置中心频率为 5.04GHz (基于 imageSpectrumFreqSC[1] 变量), 开启最大值保持, 等待 3s, 读取峰值功率 P2。 +f) 选择一个 X 频段通道 (如 X 边), 软件自动配置开关矩阵。信号源功率设置为 -40dBm (基于 imagePowerX 变量)。 +g) X 频段测试点 1 (8GHz): 1. 测试仪设置信号源频率为 8GHz (基于 XStartFreq 变量)。频谱仪清除迹线, 设置中心频率 8GHz, 开启最大值保持, 等待 3s, 读取峰值功率 P1。2. 信号源设置不变。频谱仪清除迹线, 设置中心频率为 9.44GHz (基于 imageSpectrumFreqX[0] 变量), 开启最大值保持, 等待 3s, 读取峰值功率 P2。 +h) X频段测试点2(12GHz): 1. 测试仪设置信号源频率为12GHz(基于XStopFreq变量)。频谱 + +仪清除迹线, 设置中心频率 12GHz, 开启最大值保持, 等待 3s, 读取峰值功率 P1。2. 信号源设置不变。频谱仪清除迹线, 设置中心频率为 10.54GHz (基于 imageSpectrumFreqX[1] 变量), 开启最大值保持, 等待 3s, 读取峰值功率 P2。 + +i) 测试软件自动计算 (P1 - P2), 得到镜频抑制比 (存入 imageRejection)。重复步骤 c) 至 h) 直到所有选定通道测试完毕。将所有镜频抑制比结果记录在表中。 +j) 测试完毕, 关闭信号源射频输出, 关闭脉冲调制, 频谱仪和信号源释放远程控制。 \ No newline at end of file diff --git a/backend/planner/mineru_result/images/f05193299040c6cc15e934e062835d77bb1816610f7ebd7716eb4db1e04c4c38.jpg b/backend/planner/mineru_result/images/f05193299040c6cc15e934e062835d77bb1816610f7ebd7716eb4db1e04c4c38.jpg new file mode 100644 index 0000000..4d8c017 Binary files /dev/null and b/backend/planner/mineru_result/images/f05193299040c6cc15e934e062835d77bb1816610f7ebd7716eb4db1e04c4c38.jpg differ diff --git a/backend/planner/mineru_result/layout.json b/backend/planner/mineru_result/layout.json new file mode 100644 index 0000000..49619c0 --- /dev/null +++ b/backend/planner/mineru_result/layout.json @@ -0,0 +1,903 @@ +{ + "pdf_info": [ + { + "para_blocks": [ + { + "bbox": [ + 251, + 106, + 343, + 132 + ], + "type": "title", + "angle": 0, + "lines": [ + { + "bbox": [ + 251, + 106, + 343, + 132 + ], + "spans": [ + { + "bbox": [ + 251, + 106, + 343, + 132 + ], + "type": "text", + "content": "全壳测试" + } + ] + } + ], + "index": 0 + }, + { + "bbox": [ + 86, + 211, + 500, + 289 + ], + "type": "text", + "angle": 0, + "lines": [ + { + "bbox": [ + 86, + 211, + 500, + 289 + ], + "spans": [ + { + "bbox": [ + 86, + 211, + 500, + 289 + ], + "type": "text", + "content": "全壳测试包含上电、镜频测试、灵敏度测试、极化测试、功率测试、断电几项,测试中包含的五个核心器件五个核心仪器:频谱分析仪、信号源、开关矩阵、直流电源、示波器。以下是连接示意图:" + } + ] + } + ], + "index": 1 + }, + { + "type": "image", + "bbox": [ + 91, + 309, + 511, + 534 + ], + "blocks": [ + { + "bbox": [ + 91, + 309, + 511, + 534 + ], + "lines": [ + { + "bbox": [ + 91, + 309, + 511, + 534 + ], + "spans": [ + { + "bbox": [ + 91, + 309, + 511, + 534 + ], + "type": "image", + "image_path": "f05193299040c6cc15e934e062835d77bb1816610f7ebd7716eb4db1e04c4c38.jpg" + } + ] + } + ], + "index": 2, + "angle": 0, + "type": "image_body" + }, + { + "bbox": [ + 268, + 544, + 324, + 558 + ], + "lines": [ + { + "bbox": [ + 268, + 544, + 324, + 558 + ], + "spans": [ + { + "bbox": [ + 268, + 544, + 324, + 558 + ], + "type": "text", + "content": "连接示意图" + } + ] + } + ], + "index": 3, + "angle": 0, + "type": "image_caption" + } + ], + "index": 2 + }, + { + "bbox": [ + 86, + 579, + 173, + 597 + ], + "type": "title", + "angle": 0, + "lines": [ + { + "bbox": [ + 86, + 579, + 173, + 597 + ], + "spans": [ + { + "bbox": [ + 86, + 579, + 173, + 597 + ], + "type": "text", + "content": "1. 上电测试" + } + ] + } + ], + "index": 4 + }, + { + "bbox": [ + 86, + 634, + 498, + 740 + ], + "type": "list", + "angle": 0, + "index": 9, + "blocks": [ + { + "bbox": [ + 86, + 634, + 384, + 647 + ], + "type": "text", + "angle": 0, + "lines": [ + { + "bbox": [ + 86, + 634, + 384, + 647 + ], + "spans": [ + { + "bbox": [ + 86, + 634, + 384, + 647 + ], + "type": "text", + "content": "a) 直流电源与信号源与工程机通过TCPIP连接, 连接超时 " + }, + { + "bbox": [ + 86, + 634, + 384, + 647 + ], + "type": "inline_equation", + "content": "2000 \\mathrm{~ms}" + }, + { + "bbox": [ + 86, + 634, + 384, + 647 + ], + "type": "text", + "content": " 。" + } + ] + } + ], + "index": 5 + }, + { + "bbox": [ + 87, + 657, + 255, + 670 + ], + "type": "text", + "angle": 0, + "lines": [ + { + "bbox": [ + 87, + 657, + 255, + 670 + ], + "spans": [ + { + "bbox": [ + 87, + 657, + 255, + 670 + ], + "type": "text", + "content": "b) 信号源设置: 射频输出设置为 OFF。" + } + ] + } + ], + "index": 6 + }, + { + "bbox": [ + 86, + 681, + 498, + 717 + ], + "type": "text", + "angle": 0, + "lines": [ + { + "bbox": [ + 86, + 681, + 498, + 717 + ], + "spans": [ + { + "bbox": [ + 86, + 681, + 498, + 717 + ], + "type": "text", + "content": "c) 直流电源设置: OCP 状态设置为 ON; OCP 电流设置为 12A; OVP 电压设置为 32V; 输出电流设置为 6A; 输出电压设置为 28V。" + } + ] + } + ], + "index": 7 + }, + { + "bbox": [ + 86, + 727, + 351, + 740 + ], + "type": "text", + "angle": 0, + "lines": [ + { + "bbox": [ + 86, + 727, + 351, + 740 + ], + "spans": [ + { + "bbox": [ + 86, + 727, + 351, + 740 + ], + "type": "text", + "content": "d) 直流电源射频输出设置为 ON, 整机上电, 等待 2000ms。" + } + ] + } + ], + "index": 8 + } + ], + "sub_type": "text" + } + ], + "discarded_blocks": [], + "page_size": [ + 595, + 841 + ], + "page_idx": 0 + }, + { + "para_blocks": [ + { + "bbox": [ + 86, + 79, + 498, + 140 + ], + "type": "list", + "angle": 0, + "index": 2, + "blocks": [ + { + "bbox": [ + 86, + 79, + 498, + 116 + ], + "type": "text", + "angle": 0, + "lines": [ + { + "bbox": [ + 86, + 79, + 498, + 116 + ], + "spans": [ + { + "bbox": [ + 86, + 79, + 498, + 116 + ], + "type": "text", + "content": "e) 测试仪循环查询直流电源电流, 并将实测值与待机电流限值3.0A进行比较, 每次循环等待 " + }, + { + "bbox": [ + 86, + 79, + 498, + 116 + ], + "type": "inline_equation", + "content": "100\\mathrm{ms}" + }, + { + "bbox": [ + 86, + 79, + 498, + 116 + ], + "type": "text", + "content": " 。" + } + ] + } + ], + "index": 0 + }, + { + "bbox": [ + 86, + 125, + 444, + 140 + ], + "type": "text", + "angle": 0, + "lines": [ + { + "bbox": [ + 86, + 125, + 444, + 140 + ], + "spans": [ + { + "bbox": [ + 86, + 125, + 444, + 140 + ], + "type": "text", + "content": "f) 当测试次数达到 5 或总时长达到 20 秒后, 停止监控, 将测试结果记录在表中。" + } + ] + } + ], + "index": 1 + } + ], + "sub_type": "text" + }, + { + "bbox": [ + 86, + 167, + 173, + 186 + ], + "type": "title", + "angle": 0, + "lines": [ + { + "bbox": [ + 86, + 167, + 173, + 186 + ], + "spans": [ + { + "bbox": [ + 86, + 167, + 173, + 186 + ], + "type": "text", + "content": "2. 镜频测试" + } + ] + } + ], + "index": 3 + }, + { + "bbox": [ + 86, + 222, + 506, + 749 + ], + "type": "list", + "angle": 0, + "index": 12, + "blocks": [ + { + "bbox": [ + 86, + 222, + 506, + 259 + ], + "type": "text", + "angle": 0, + "lines": [ + { + "bbox": [ + 86, + 222, + 506, + 259 + ], + "spans": [ + { + "bbox": [ + 86, + 222, + 506, + 259 + ], + "type": "text", + "content": "a) 直流电源连接电源,电源设置 28V@6A。信号源、频谱分析仪、开关矩阵与工程机通过TCP/IP 连接。" + } + ] + } + ], + "index": 4 + }, + { + "bbox": [ + 86, + 269, + 506, + 306 + ], + "type": "text", + "angle": 0, + "lines": [ + { + "bbox": [ + 86, + 269, + 506, + 306 + ], + "spans": [ + { + "bbox": [ + 86, + 269, + 506, + 306 + ], + "type": "text", + "content": "b) 频谱仪设置: Span: 500MHz, RBW: 3MHz, VBW: 3MHz, Sweeptime: 1ms; 信号源设置: 开启脉冲调制, 脉宽 2us, 周期 1ms。整机上电, 等待产品进入低功耗。" + } + ] + } + ], + "index": 5 + }, + { + "bbox": [ + 86, + 315, + 506, + 353 + ], + "type": "text", + "angle": 0, + "lines": [ + { + "bbox": [ + 86, + 315, + 506, + 353 + ], + "spans": [ + { + "bbox": [ + 86, + 315, + 506, + 353 + ], + "type": "text", + "content": "c) 选择一个SC频段通道(如SC边), 软件自动配置开关矩阵。信号源功率设置为-25dBm (基于 imagePowerSC 变量)。" + } + ] + } + ], + "index": 6 + }, + { + "bbox": [ + 86, + 362, + 506, + 493 + ], + "type": "text", + "angle": 0, + "lines": [ + { + "bbox": [ + 86, + 362, + 506, + 493 + ], + "spans": [ + { + "bbox": [ + 86, + 362, + 506, + 493 + ], + "type": "text", + "content": "d) SC 频段测试点 1 (2.7GHz): 1. 测试仪设置信号源频率为 2.7GHz。频谱仪设置中心频率 2.7GHz, 开启最大值保持 (MAXH), 等待 3s, 使用 Peak 观察信号最高点, 将功率 P1 记录在草稿中 (测量结果存入 imageSpectrumPower1)。2. 信号源设置不变。频谱仪清除迹线 (WRITe), 设置中心频率为 3.84GHz (基于 imageSpectrumFreqSC[0] 变量), 开启最大值保持, 等待 3s, 使用 Peak 观察信号最高点, 将功率 P2 记录在草稿中 (测量结果存入 imageSpectrumPower2)。" + } + ] + } + ], + "index": 7 + }, + { + "bbox": [ + 86, + 502, + 506, + 587 + ], + "type": "text", + "angle": 0, + "lines": [ + { + "bbox": [ + 86, + 502, + 506, + 587 + ], + "spans": [ + { + "bbox": [ + 86, + 502, + 506, + 587 + ], + "type": "text", + "content": "e) SC 频段测试点 2 (6.2GHz): 1. 测试仪设置信号源频率为 6.2GHz (基于 SCStopFreq 变量)。频谱仪清除迹线, 设置中心频率 6.2GHz, 开启最大值保持, 等待 3s, 读取峰值功率 P1。2. 信号源设置不变。频谱仪清除迹线, 设置中心频率为 5.04GHz (基于 imageSpectrumFreqSC[1] 变量), 开启最大值保持, 等待 3s, 读取峰值功率 P2。" + } + ] + } + ], + "index": 8 + }, + { + "bbox": [ + 86, + 595, + 506, + 632 + ], + "type": "text", + "angle": 0, + "lines": [ + { + "bbox": [ + 86, + 595, + 506, + 632 + ], + "spans": [ + { + "bbox": [ + 86, + 595, + 506, + 632 + ], + "type": "text", + "content": "f) 选择一个 X 频段通道 (如 X 边), 软件自动配置开关矩阵。信号源功率设置为 -40dBm (基于 imagePowerX 变量)。" + } + ] + } + ], + "index": 9 + }, + { + "bbox": [ + 86, + 641, + 506, + 725 + ], + "type": "text", + "angle": 0, + "lines": [ + { + "bbox": [ + 86, + 641, + 506, + 725 + ], + "spans": [ + { + "bbox": [ + 86, + 641, + 506, + 725 + ], + "type": "text", + "content": "g) X 频段测试点 1 (8GHz): 1. 测试仪设置信号源频率为 8GHz (基于 XStartFreq 变量)。频谱仪清除迹线, 设置中心频率 8GHz, 开启最大值保持, 等待 3s, 读取峰值功率 P1。2. 信号源设置不变。频谱仪清除迹线, 设置中心频率为 9.44GHz (基于 imageSpectrumFreqX[0] 变量), 开启最大值保持, 等待 3s, 读取峰值功率 P2。" + } + ] + } + ], + "index": 10 + }, + { + "bbox": [ + 86, + 735, + 506, + 749 + ], + "type": "text", + "angle": 0, + "lines": [ + { + "bbox": [ + 86, + 735, + 506, + 749 + ], + "spans": [ + { + "bbox": [ + 86, + 735, + 506, + 749 + ], + "type": "text", + "content": "h) X频段测试点2(12GHz): 1. 测试仪设置信号源频率为12GHz(基于XStopFreq变量)。频谱" + } + ] + } + ], + "index": 11 + } + ], + "sub_type": "text" + } + ], + "discarded_blocks": [], + "page_size": [ + 595, + 841 + ], + "page_idx": 1 + }, + { + "para_blocks": [ + { + "bbox": [ + 101, + 79, + 506, + 139 + ], + "type": "text", + "angle": 0, + "lines": [ + { + "bbox": [ + 101, + 79, + 506, + 139 + ], + "spans": [ + { + "bbox": [ + 101, + 79, + 506, + 139 + ], + "type": "text", + "content": "仪清除迹线, 设置中心频率 12GHz, 开启最大值保持, 等待 3s, 读取峰值功率 P1。2. 信号源设置不变。频谱仪清除迹线, 设置中心频率为 10.54GHz (基于 imageSpectrumFreqX[1] 变量), 开启最大值保持, 等待 3s, 读取峰值功率 P2。" + } + ] + } + ], + "index": 0 + }, + { + "bbox": [ + 86, + 149, + 506, + 210 + ], + "type": "list", + "angle": 0, + "index": 3, + "blocks": [ + { + "bbox": [ + 86, + 149, + 506, + 186 + ], + "type": "text", + "angle": 0, + "lines": [ + { + "bbox": [ + 86, + 149, + 506, + 186 + ], + "spans": [ + { + "bbox": [ + 86, + 149, + 506, + 186 + ], + "type": "text", + "content": "i) 测试软件自动计算 (P1 - P2), 得到镜频抑制比 (存入 imageRejection)。重复步骤 c) 至 h) 直到所有选定通道测试完毕。将所有镜频抑制比结果记录在表中。" + } + ] + } + ], + "index": 1 + }, + { + "bbox": [ + 86, + 195, + 455, + 210 + ], + "type": "text", + "angle": 0, + "lines": [ + { + "bbox": [ + 86, + 195, + 455, + 210 + ], + "spans": [ + { + "bbox": [ + 86, + 195, + 455, + 210 + ], + "type": "text", + "content": "j) 测试完毕, 关闭信号源射频输出, 关闭脉冲调制, 频谱仪和信号源释放远程控制。" + } + ] + } + ], + "index": 2 + } + ], + "sub_type": "text" + } + ], + "discarded_blocks": [], + "page_size": [ + 595, + 841 + ], + "page_idx": 2 + } + ], + "_backend": "vlm", + "_version_name": "2.6.4" +} \ No newline at end of file diff --git a/backend/planner/mineru_result/原镜频测试用例参考/03816e3e-e4b5-42c3-a83e-011c7b6b77cb_content_list.json b/backend/planner/mineru_result/原镜频测试用例参考/03816e3e-e4b5-42c3-a83e-011c7b6b77cb_content_list.json new file mode 100644 index 0000000..11b6c25 --- /dev/null +++ b/backend/planner/mineru_result/原镜频测试用例参考/03816e3e-e4b5-42c3-a83e-011c7b6b77cb_content_list.json @@ -0,0 +1,260 @@ +[ + { + "type": "text", + "text": "场景1:测试用例", + "text_level": 1, + "bbox": [ + 133, + 117, + 343, + 142 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "测试器件说明:测试中包含的五个核心器件五个核心仪器:频谱分析仪、信号源、开关矩阵、直流电源、示波器。Dut有SC频段接口和X频段接口,通过配置开关矩阵可以实现仪器间连接的更改。", + "bbox": [ + 132, + 161, + 905, + 262 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "本次测试项目共有三项:", + "bbox": [ + 205, + 284, + 450, + 306 + ], + "page_idx": 0 + }, + { + "type": "list", + "sub_type": "text", + "list_items": [ + "a)上电测试:连接好各个设备,检查各个器件的工作情况,设置OCP,OVP等等操作。", + "b)镜频测试:DUT电源供电28V,电流2.9A;测试频段:SC波段(2.7GHz~6.2GHz)和X波段(8GHz~12GHz);频谱仪SPAN=500MHz;信号源RF Power:SC频段=-25+线损+30(衰减器值);X频段=-40+线损+30(衰减器值);" + ], + "bbox": [ + 132, + 321, + 892, + 526 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "测试内容:例如SC波段信号源power $= -25\\mathrm{dBm}$ , $\\mathrm{f} = 2.7\\mathrm{GHz}$ ,频谱分析仪 $\\mathrm{f} = 2.7\\mathrm{GHz}$ ,读取频谱分析仪MaxPeak功率值P1;信号源功率及频率保持不变,频谱分析仪 $\\mathrm{f} = 3.84\\mathrm{GHz}$ ,读取频谱分析仪MaxPeak功率值P2。", + "bbox": [ + 132, + 540, + 901, + 640 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "本次测试信号源在以下四个频点上进行测试;", + "bbox": [ + 204, + 656, + 656, + 678 + ], + "page_idx": 0 + }, + { + "type": "list", + "sub_type": "text", + "list_items": [ + "2.7GHz 时频谱仪在 2.7GHz 和 3.88GHz", + "6.2GHz 时频谱仪在 6.2GHz 和 5.88GHz" + ], + "bbox": [ + 204, + 695, + 596, + 753 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "8GHz 时频谱仪在 8GHz 和 11GHz", + "bbox": [ + 204, + 772, + 544, + 792 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "12GHz 时频谱仪在 12GHz 和 15GHz", + "bbox": [ + 205, + 810, + 566, + 830 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "注意:镜频测试中不需要体现线缆损耗值。", + "bbox": [ + 204, + 848, + 632, + 869 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "SC 波段, DUT 在频率 $2.7 \\mathrm{GHz}$ 的镜像抑制比= (P1-P2) >7dB 判定合", + "bbox": [ + 204, + 886, + 888, + 907 + ], + "page_idx": 0 + }, + { + "type": "page_number", + "text": "第1页共4页", + "bbox": [ + 472, + 928, + 602, + 946 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "格。不合格报告中标红。", + "bbox": [ + 133, + 109, + 377, + 131 + ], + "page_idx": 1 + }, + { + "type": "text", + "text": "c)断电测试:释放资源,关闭各种仪器的状态", + "bbox": [ + 148, + 171, + 609, + 194 + ], + "page_idx": 1 + }, + { + "type": "text", + "text": "表 1: 全壳测试报告模板", + "bbox": [ + 450, + 202, + 665, + 222 + ], + "page_idx": 1 + }, + { + "type": "table", + "img_path": "images/13e3fab38868d97ba85faed2dc5ae88728483a29d223074fac0122102d00930e.jpg", + "table_caption": [], + "table_footnote": [], + "table_body": "
", + "bbox": [ + 0, + 325, + 676, + 902 + ], + "page_idx": 1 + }, + { + "type": "page_number", + "text": "第2页共4页", + "bbox": [ + 473, + 928, + 601, + 946 + ], + "page_idx": 1 + }, + { + "type": "table", + "img_path": "", + "table_caption": [], + "table_footnote": [], + "bbox": [ + 0, + 106, + 676, + 898 + ], + "page_idx": 2 + }, + { + "type": "page_number", + "text": "第3页共4页", + "bbox": [ + 473, + 928, + 601, + 946 + ], + "page_idx": 2 + }, + { + "type": "table", + "img_path": "", + "table_caption": [], + "table_footnote": [], + "bbox": [ + 0, + 104, + 676, + 371 + ], + "page_idx": 3 + }, + { + "type": "text", + "text": "表 1: 全壳测试报告模板", + "bbox": [ + 450, + 401, + 665, + 420 + ], + "page_idx": 3 + }, + { + "type": "page_number", + "text": "第4页共4页", + "bbox": [ + 473, + 928, + 601, + 946 + ], + "page_idx": 3 + } +] \ No newline at end of file diff --git a/backend/planner/mineru_result/原镜频测试用例参考/03816e3e-e4b5-42c3-a83e-011c7b6b77cb_model.json b/backend/planner/mineru_result/原镜频测试用例参考/03816e3e-e4b5-42c3-a83e-011c7b6b77cb_model.json new file mode 100644 index 0000000..bc46df6 --- /dev/null +++ b/backend/planner/mineru_result/原镜频测试用例参考/03816e3e-e4b5-42c3-a83e-011c7b6b77cb_model.json @@ -0,0 +1,296 @@ +[ + [ + { + "type": "title", + "bbox": [ + 0.134, + 0.118, + 0.344, + 0.143 + ], + "angle": 0, + "content": "场景1:测试用例" + }, + { + "type": "text", + "bbox": [ + 0.133, + 0.162, + 0.906, + 0.263 + ], + "angle": 0, + "content": "测试器件说明:测试中包含的五个核心器件五个核心仪器:频谱分析仪、信号源、开关矩阵、直流电源、示波器。Dut有SC频段接口和X频段接口,通过配置开关矩阵可以实现仪器间连接的更改。" + }, + { + "type": "text", + "bbox": [ + 0.206, + 0.285, + 0.452, + 0.308 + ], + "angle": 0, + "content": "本次测试项目共有三项:" + }, + { + "type": "text", + "bbox": [ + 0.133, + 0.323, + 0.893, + 0.378 + ], + "angle": 0, + "content": "a)上电测试:连接好各个设备,检查各个器件的工作情况,设置OCP,OVP等等操作。" + }, + { + "type": "text", + "bbox": [ + 0.133, + 0.388, + 0.874, + 0.527 + ], + "angle": 0, + "content": "b)镜频测试:DUT电源供电28V,电流2.9A;测试频段:SC波段(2.7GHz~6.2GHz)和X波段(8GHz~12GHz);频谱仪SPAN=500MHz;信号源RF Power:SC频段=-25+线损+30(衰减器值);X频段=-40+线损+30(衰减器值);" + }, + { + "type": "list", + "bbox": [ + 0.133, + 0.323, + 0.893, + 0.527 + ], + "angle": 0, + "content": null + }, + { + "type": "text", + "bbox": [ + 0.133, + 0.541, + 0.903, + 0.641 + ], + "angle": 0, + "content": "测试内容:例如SC波段信号源power \\(= -25\\mathrm{dBm}\\) , \\(\\mathrm{f} = 2.7\\mathrm{GHz}\\) ,频谱分析仪 \\(\\mathrm{f} = 2.7\\mathrm{GHz}\\) ,读取频谱分析仪MaxPeak功率值P1;信号源功率及频率保持不变,频谱分析仪 \\(\\mathrm{f} = 3.84\\mathrm{GHz}\\) ,读取频谱分析仪MaxPeak功率值P2。" + }, + { + "type": "text", + "bbox": [ + 0.205, + 0.657, + 0.657, + 0.679 + ], + "angle": 0, + "content": "本次测试信号源在以下四个频点上进行测试;" + }, + { + "type": "text", + "bbox": [ + 0.205, + 0.696, + 0.597, + 0.716 + ], + "angle": 0, + "content": "2.7GHz 时频谱仪在 2.7GHz 和 3.88GHz" + }, + { + "type": "text", + "bbox": [ + 0.205, + 0.734, + 0.596, + 0.755 + ], + "angle": 0, + "content": "6.2GHz 时频谱仪在 6.2GHz 和 5.88GHz" + }, + { + "type": "list", + "bbox": [ + 0.205, + 0.696, + 0.597, + 0.755 + ], + "angle": 0, + "content": null + }, + { + "type": "text", + "bbox": [ + 0.205, + 0.773, + 0.545, + 0.793 + ], + "angle": 0, + "content": "8GHz 时频谱仪在 8GHz 和 11GHz" + }, + { + "type": "text", + "bbox": [ + 0.206, + 0.811, + 0.567, + 0.832 + ], + "angle": 0, + "content": "12GHz 时频谱仪在 12GHz 和 15GHz" + }, + { + "type": "text", + "bbox": [ + 0.205, + 0.849, + 0.633, + 0.87 + ], + "angle": 0, + "content": "注意:镜频测试中不需要体现线缆损耗值。" + }, + { + "type": "text", + "bbox": [ + 0.205, + 0.887, + 0.89, + 0.909 + ], + "angle": 0, + "content": "SC 波段, DUT 在频率 \\(2.7 \\mathrm{GHz}\\) 的镜像抑制比= (P1-P2) >7dB 判定合" + }, + { + "type": "page_number", + "bbox": [ + 0.473, + 0.929, + 0.603, + 0.948 + ], + "angle": 0, + "content": "第1页共4页" + } + ], + [ + { + "type": "text", + "bbox": [ + 0.134, + 0.11, + 0.378, + 0.132 + ], + "angle": 0, + "content": "格。不合格报告中标红。" + }, + { + "type": "text", + "bbox": [ + 0.15, + 0.172, + 0.611, + 0.195 + ], + "angle": 0, + "content": "c)断电测试:释放资源,关闭各种仪器的状态" + }, + { + "type": "text", + "bbox": [ + 0.451, + 0.203, + 0.666, + 0.223 + ], + "angle": 0, + "content": "表 1: 全壳测试报告模板" + }, + { + "type": "table", + "bbox": [ + 0.0, + 0.326, + 0.677, + 0.904 + ], + "angle": 0, + "content": "
" + }, + { + "type": "page_number", + "bbox": [ + 0.474, + 0.929, + 0.602, + 0.947 + ], + "angle": 0, + "content": "第2页共4页" + } + ], + [ + { + "type": "table", + "bbox": [ + 0.0, + 0.107, + 0.677, + 0.9 + ], + "angle": 0, + "content": "
" + }, + { + "type": "page_number", + "bbox": [ + 0.474, + 0.929, + 0.602, + 0.947 + ], + "angle": 0, + "content": "第3页共4页" + } + ], + [ + { + "type": "table", + "bbox": [ + 0.0, + 0.106, + 0.677, + 0.372 + ], + "angle": 0, + "content": "
" + }, + { + "type": "table_caption", + "bbox": [ + 0.452, + 0.402, + 0.666, + 0.421 + ], + "angle": 0, + "content": "表 1: 全壳测试报告模板" + }, + { + "type": "page_number", + "bbox": [ + 0.474, + 0.929, + 0.602, + 0.947 + ], + "angle": 0, + "content": "第4页共4页" + } + ] +] \ No newline at end of file diff --git a/backend/planner/mineru_result/原镜频测试用例参考/03816e3e-e4b5-42c3-a83e-011c7b6b77cb_origin.pdf b/backend/planner/mineru_result/原镜频测试用例参考/03816e3e-e4b5-42c3-a83e-011c7b6b77cb_origin.pdf new file mode 100644 index 0000000..72adb77 Binary files /dev/null and b/backend/planner/mineru_result/原镜频测试用例参考/03816e3e-e4b5-42c3-a83e-011c7b6b77cb_origin.pdf differ diff --git a/backend/planner/mineru_result/原镜频测试用例参考/1dcd5e83-6028-466b-9357-a8c2032da2dd_content_list.json b/backend/planner/mineru_result/原镜频测试用例参考/1dcd5e83-6028-466b-9357-a8c2032da2dd_content_list.json new file mode 100644 index 0000000..b9dfe74 --- /dev/null +++ b/backend/planner/mineru_result/原镜频测试用例参考/1dcd5e83-6028-466b-9357-a8c2032da2dd_content_list.json @@ -0,0 +1,260 @@ +[ + { + "type": "text", + "text": "场景1:测试用例", + "text_level": 1, + "bbox": [ + 133, + 117, + 343, + 142 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "测试器件说明:测试中包含的五个核心器件五个核心仪器:频谱分析仪、信号源、开关矩阵、直流电源、示波器。Dut有SC频段接口和X频段接口,通过配置开关矩阵可以实现仪器间连接的更改。", + "bbox": [ + 132, + 161, + 905, + 262 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "本次测试项目共有三项:", + "bbox": [ + 205, + 284, + 450, + 306 + ], + "page_idx": 0 + }, + { + "type": "list", + "sub_type": "text", + "list_items": [ + "a)上电测试:连接好各个设备,检查各个器件的工作情况,设置OCP,OVP等等操作。", + "b)镜频测试:DUT电源供电28V,电流2.9A;测试频段:SC波段(2.7GHz~6.2GHz)和X波段(8GHz~12GHz);频谱仪SPAN=500MHz;信号源RF Power:SC频段=-25+线损+30(衰减器值);X频段=-40+线损+30(衰减器值);" + ], + "bbox": [ + 132, + 321, + 890, + 526 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "测试内容:例如SC波段信号源power=-25dBm,f=2.7GHz,频谱分析仪f=2.7GHz,读取频谱分析仪Max Peak功率值P1;信号源功率及频率保持不变,频谱分析仪f-=3.84GHz,读取频谱分析仪Max Peak功率值P2。", + "bbox": [ + 132, + 540, + 898, + 640 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "本次测试信号源在以下四个频点上进行测试;", + "bbox": [ + 204, + 656, + 656, + 676 + ], + "page_idx": 0 + }, + { + "type": "list", + "sub_type": "text", + "list_items": [ + "2.7GHz 时频谱仪在 2.7GHz 和 3.88GHz", + "6.2GHz 时频谱仪在 6.2GHz 和 5.88GHz" + ], + "bbox": [ + 204, + 695, + 596, + 753 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "8GHz 时频谱仪在 8GHz 和 11GHz", + "bbox": [ + 204, + 772, + 544, + 792 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "12GHz 时频谱仪在 12GHz 和 15GHz", + "bbox": [ + 205, + 810, + 566, + 829 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "注意:镜频测试中不需要体现线缆损耗值。", + "bbox": [ + 204, + 848, + 632, + 869 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "SC 波段, DUT 在频率 $2.7 \\mathrm{GHz}$ 的镜像抑制比= (P1-P2) >7dB 判定合", + "bbox": [ + 204, + 886, + 888, + 907 + ], + "page_idx": 0 + }, + { + "type": "page_number", + "text": "第1页共4页", + "bbox": [ + 472, + 928, + 602, + 946 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "格。不合格报告中标红。", + "bbox": [ + 133, + 108, + 377, + 131 + ], + "page_idx": 1 + }, + { + "type": "text", + "text": "c)断电测试:释放资源,关闭各种仪器的状态", + "bbox": [ + 148, + 171, + 609, + 194 + ], + "page_idx": 1 + }, + { + "type": "text", + "text": "表 1: 全壳测试报告模板", + "bbox": [ + 450, + 202, + 665, + 222 + ], + "page_idx": 1 + }, + { + "type": "table", + "img_path": "images/13e3fab38868d97ba85faed2dc5ae88728483a29d223074fac0122102d00930e.jpg", + "table_caption": [], + "table_footnote": [], + "table_body": "
", + "bbox": [ + 0, + 325, + 676, + 902 + ], + "page_idx": 1 + }, + { + "type": "page_number", + "text": "第2页共4页", + "bbox": [ + 473, + 928, + 601, + 946 + ], + "page_idx": 1 + }, + { + "type": "table", + "img_path": "", + "table_caption": [], + "table_footnote": [], + "bbox": [ + 0, + 106, + 676, + 898 + ], + "page_idx": 2 + }, + { + "type": "page_number", + "text": "第3页共4页", + "bbox": [ + 473, + 928, + 601, + 946 + ], + "page_idx": 2 + }, + { + "type": "table", + "img_path": "", + "table_caption": [], + "table_footnote": [], + "bbox": [ + 0, + 104, + 676, + 371 + ], + "page_idx": 3 + }, + { + "type": "text", + "text": "表 1: 全壳测试报告模板", + "bbox": [ + 450, + 401, + 665, + 420 + ], + "page_idx": 3 + }, + { + "type": "page_number", + "text": "第4页共4页", + "bbox": [ + 473, + 928, + 601, + 946 + ], + "page_idx": 3 + } +] \ No newline at end of file diff --git a/backend/planner/mineru_result/原镜频测试用例参考/1dcd5e83-6028-466b-9357-a8c2032da2dd_model.json b/backend/planner/mineru_result/原镜频测试用例参考/1dcd5e83-6028-466b-9357-a8c2032da2dd_model.json new file mode 100644 index 0000000..a151124 --- /dev/null +++ b/backend/planner/mineru_result/原镜频测试用例参考/1dcd5e83-6028-466b-9357-a8c2032da2dd_model.json @@ -0,0 +1,296 @@ +[ + [ + { + "type": "title", + "bbox": [ + 0.134, + 0.118, + 0.344, + 0.143 + ], + "angle": 0, + "content": "场景1:测试用例" + }, + { + "type": "text", + "bbox": [ + 0.133, + 0.162, + 0.906, + 0.263 + ], + "angle": 0, + "content": "测试器件说明:测试中包含的五个核心器件五个核心仪器:频谱分析仪、信号源、开关矩阵、直流电源、示波器。Dut有SC频段接口和X频段接口,通过配置开关矩阵可以实现仪器间连接的更改。" + }, + { + "type": "text", + "bbox": [ + 0.206, + 0.285, + 0.452, + 0.308 + ], + "angle": 0, + "content": "本次测试项目共有三项:" + }, + { + "type": "text", + "bbox": [ + 0.133, + 0.323, + 0.892, + 0.375 + ], + "angle": 0, + "content": "a)上电测试:连接好各个设备,检查各个器件的工作情况,设置OCP,OVP等等操作。" + }, + { + "type": "text", + "bbox": [ + 0.133, + 0.388, + 0.874, + 0.527 + ], + "angle": 0, + "content": "b)镜频测试:DUT电源供电28V,电流2.9A;测试频段:SC波段(2.7GHz~6.2GHz)和X波段(8GHz~12GHz);频谱仪SPAN=500MHz;信号源RF Power:SC频段=-25+线损+30(衰减器值);X频段=-40+线损+30(衰减器值);" + }, + { + "type": "list", + "bbox": [ + 0.133, + 0.323, + 0.892, + 0.527 + ], + "angle": 0, + "content": null + }, + { + "type": "text", + "bbox": [ + 0.133, + 0.541, + 0.9, + 0.641 + ], + "angle": 0, + "content": "测试内容:例如SC波段信号源power=-25dBm,f=2.7GHz,频谱分析仪f=2.7GHz,读取频谱分析仪Max Peak功率值P1;信号源功率及频率保持不变,频谱分析仪f-=3.84GHz,读取频谱分析仪Max Peak功率值P2。" + }, + { + "type": "text", + "bbox": [ + 0.205, + 0.657, + 0.657, + 0.678 + ], + "angle": 0, + "content": "本次测试信号源在以下四个频点上进行测试;" + }, + { + "type": "text", + "bbox": [ + 0.205, + 0.696, + 0.597, + 0.716 + ], + "angle": 0, + "content": "2.7GHz 时频谱仪在 2.7GHz 和 3.88GHz" + }, + { + "type": "text", + "bbox": [ + 0.205, + 0.734, + 0.596, + 0.755 + ], + "angle": 0, + "content": "6.2GHz 时频谱仪在 6.2GHz 和 5.88GHz" + }, + { + "type": "list", + "bbox": [ + 0.205, + 0.696, + 0.597, + 0.755 + ], + "angle": 0, + "content": null + }, + { + "type": "text", + "bbox": [ + 0.205, + 0.773, + 0.545, + 0.793 + ], + "angle": 0, + "content": "8GHz 时频谱仪在 8GHz 和 11GHz" + }, + { + "type": "text", + "bbox": [ + 0.206, + 0.811, + 0.567, + 0.83 + ], + "angle": 0, + "content": "12GHz 时频谱仪在 12GHz 和 15GHz" + }, + { + "type": "text", + "bbox": [ + 0.205, + 0.849, + 0.633, + 0.87 + ], + "angle": 0, + "content": "注意:镜频测试中不需要体现线缆损耗值。" + }, + { + "type": "text", + "bbox": [ + 0.205, + 0.887, + 0.89, + 0.908 + ], + "angle": 0, + "content": "SC 波段, DUT 在频率 \\(2.7 \\mathrm{GHz}\\) 的镜像抑制比= (P1-P2) >7dB 判定合" + }, + { + "type": "page_number", + "bbox": [ + 0.473, + 0.929, + 0.603, + 0.948 + ], + "angle": 0, + "content": "第1页共4页" + } + ], + [ + { + "type": "text", + "bbox": [ + 0.134, + 0.109, + 0.379, + 0.132 + ], + "angle": 0, + "content": "格。不合格报告中标红。" + }, + { + "type": "text", + "bbox": [ + 0.15, + 0.172, + 0.611, + 0.195 + ], + "angle": 0, + "content": "c)断电测试:释放资源,关闭各种仪器的状态" + }, + { + "type": "text", + "bbox": [ + 0.451, + 0.203, + 0.666, + 0.223 + ], + "angle": 0, + "content": "表 1: 全壳测试报告模板" + }, + { + "type": "table", + "bbox": [ + 0.0, + 0.326, + 0.677, + 0.904 + ], + "angle": 0, + "content": "
" + }, + { + "type": "page_number", + "bbox": [ + 0.474, + 0.929, + 0.602, + 0.947 + ], + "angle": 0, + "content": "第2页共4页" + } + ], + [ + { + "type": "table", + "bbox": [ + 0.0, + 0.107, + 0.677, + 0.9 + ], + "angle": 0, + "content": "
" + }, + { + "type": "page_number", + "bbox": [ + 0.474, + 0.929, + 0.602, + 0.947 + ], + "angle": 0, + "content": "第3页共4页" + } + ], + [ + { + "type": "table", + "bbox": [ + 0.0, + 0.106, + 0.677, + 0.372 + ], + "angle": 0, + "content": "
" + }, + { + "type": "table_caption", + "bbox": [ + 0.452, + 0.402, + 0.666, + 0.421 + ], + "angle": 0, + "content": "表 1: 全壳测试报告模板" + }, + { + "type": "page_number", + "bbox": [ + 0.474, + 0.929, + 0.602, + 0.947 + ], + "angle": 0, + "content": "第4页共4页" + } + ] +] \ No newline at end of file diff --git a/backend/planner/mineru_result/原镜频测试用例参考/1dcd5e83-6028-466b-9357-a8c2032da2dd_origin.pdf b/backend/planner/mineru_result/原镜频测试用例参考/1dcd5e83-6028-466b-9357-a8c2032da2dd_origin.pdf new file mode 100644 index 0000000..93a4f58 Binary files /dev/null and b/backend/planner/mineru_result/原镜频测试用例参考/1dcd5e83-6028-466b-9357-a8c2032da2dd_origin.pdf differ diff --git a/backend/planner/mineru_result/原镜频测试用例参考/29ab4d4b-f670-47c0-8034-c65979df1ae3_content_list.json b/backend/planner/mineru_result/原镜频测试用例参考/29ab4d4b-f670-47c0-8034-c65979df1ae3_content_list.json new file mode 100644 index 0000000..99571e1 --- /dev/null +++ b/backend/planner/mineru_result/原镜频测试用例参考/29ab4d4b-f670-47c0-8034-c65979df1ae3_content_list.json @@ -0,0 +1,260 @@ +[ + { + "type": "text", + "text": "场景1:测试用例", + "text_level": 1, + "bbox": [ + 133, + 117, + 343, + 142 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "测试器件说明:测试中包含的五个核心器件五个核心仪器:频谱分析仪、信号源、开关矩阵、直流电源、示波器。Dut有SC频段接口和X频段接口,通过配置开关矩阵可以实现仪器间连接的更改。", + "bbox": [ + 132, + 161, + 905, + 262 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "本次测试项目共有三项:", + "bbox": [ + 205, + 284, + 450, + 306 + ], + "page_idx": 0 + }, + { + "type": "list", + "sub_type": "text", + "list_items": [ + "a)上电测试:连接好各个设备,检查各个器件的工作情况,设置OCP,OVP,等等操作。", + "b)镜频测试:DUT电源供电28V,电流2.9A;测试频段:SC波段(2.7GHz~6.2GHz)和X波段(8GHz~12GHz);频谱仪SPAN=500MHz;信号源RF Power:SC频段=-25+线损+30(衰减器值);X频段=-40+线损+30(衰减器值);" + ], + "bbox": [ + 132, + 321, + 890, + 526 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "测试内容:例如SC波段信号源power=-25dBm,f=2.7GHz,频谱分析仪f=2.7GHz,读取频谱分析仪Max Peak功率值P1;信号源功率及频率保持不变,频谱分析仪f-=3.84GHz,读取频谱分析仪Max Peak功率值P2。", + "bbox": [ + 132, + 540, + 898, + 642 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "本次测试信号源在以下四个频点上进行测试;", + "bbox": [ + 204, + 656, + 656, + 678 + ], + "page_idx": 0 + }, + { + "type": "list", + "sub_type": "text", + "list_items": [ + "2.7GHz 时频谱仪在 2.7GHz 和 3.88GHz", + "6.2GHz 时频谱仪在 6.2GHz 和 5.88GHz" + ], + "bbox": [ + 204, + 695, + 596, + 753 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "8GHz 时频谱仪在 8GHz 和 11GHz", + "bbox": [ + 204, + 772, + 544, + 792 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "12GHz 时频谱仪在 12GHz 和 15GHz", + "bbox": [ + 205, + 810, + 566, + 830 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "注意:镜频测试中不需要体现线缆损耗值。", + "bbox": [ + 204, + 848, + 632, + 869 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "SC 波段, DUT 在频率 $2.7 \\mathrm{GHz}$ 的镜像抑制比= (P1-P2) >7dB 判定合", + "bbox": [ + 204, + 886, + 888, + 907 + ], + "page_idx": 0 + }, + { + "type": "page_number", + "text": "第1页共4页", + "bbox": [ + 472, + 928, + 602, + 946 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "格。不合格报告中标红。", + "bbox": [ + 133, + 108, + 377, + 131 + ], + "page_idx": 1 + }, + { + "type": "text", + "text": "c)断电测试:释放资源,关闭各种仪器的状态", + "bbox": [ + 148, + 171, + 609, + 194 + ], + "page_idx": 1 + }, + { + "type": "text", + "text": "表 1: 全壳测试报告模板", + "bbox": [ + 450, + 202, + 665, + 222 + ], + "page_idx": 1 + }, + { + "type": "table", + "img_path": "images/13e3fab38868d97ba85faed2dc5ae88728483a29d223074fac0122102d00930e.jpg", + "table_caption": [], + "table_footnote": [], + "table_body": "
", + "bbox": [ + 0, + 325, + 676, + 902 + ], + "page_idx": 1 + }, + { + "type": "page_number", + "text": "第2页共4页", + "bbox": [ + 473, + 928, + 601, + 946 + ], + "page_idx": 1 + }, + { + "type": "table", + "img_path": "", + "table_caption": [], + "table_footnote": [], + "bbox": [ + 0, + 106, + 676, + 898 + ], + "page_idx": 2 + }, + { + "type": "page_number", + "text": "第3页共4页", + "bbox": [ + 473, + 928, + 601, + 946 + ], + "page_idx": 2 + }, + { + "type": "table", + "img_path": "", + "table_caption": [], + "table_footnote": [], + "bbox": [ + 0, + 104, + 676, + 371 + ], + "page_idx": 3 + }, + { + "type": "text", + "text": "表 1: 全壳测试报告模板", + "bbox": [ + 450, + 401, + 665, + 420 + ], + "page_idx": 3 + }, + { + "type": "page_number", + "text": "第4页共4页", + "bbox": [ + 473, + 928, + 601, + 946 + ], + "page_idx": 3 + } +] \ No newline at end of file diff --git a/backend/planner/mineru_result/原镜频测试用例参考/29ab4d4b-f670-47c0-8034-c65979df1ae3_model.json b/backend/planner/mineru_result/原镜频测试用例参考/29ab4d4b-f670-47c0-8034-c65979df1ae3_model.json new file mode 100644 index 0000000..bb2f963 --- /dev/null +++ b/backend/planner/mineru_result/原镜频测试用例参考/29ab4d4b-f670-47c0-8034-c65979df1ae3_model.json @@ -0,0 +1,296 @@ +[ + [ + { + "type": "title", + "bbox": [ + 0.134, + 0.118, + 0.344, + 0.143 + ], + "angle": 0, + "content": "场景1:测试用例" + }, + { + "type": "text", + "bbox": [ + 0.133, + 0.162, + 0.906, + 0.263 + ], + "angle": 0, + "content": "测试器件说明:测试中包含的五个核心器件五个核心仪器:频谱分析仪、信号源、开关矩阵、直流电源、示波器。Dut有SC频段接口和X频段接口,通过配置开关矩阵可以实现仪器间连接的更改。" + }, + { + "type": "text", + "bbox": [ + 0.206, + 0.285, + 0.452, + 0.308 + ], + "angle": 0, + "content": "本次测试项目共有三项:" + }, + { + "type": "text", + "bbox": [ + 0.133, + 0.323, + 0.892, + 0.378 + ], + "angle": 0, + "content": "a)上电测试:连接好各个设备,检查各个器件的工作情况,设置OCP,OVP,等等操作。" + }, + { + "type": "text", + "bbox": [ + 0.133, + 0.388, + 0.874, + 0.527 + ], + "angle": 0, + "content": "b)镜频测试:DUT电源供电28V,电流2.9A;测试频段:SC波段(2.7GHz~6.2GHz)和X波段(8GHz~12GHz);频谱仪SPAN=500MHz;信号源RF Power:SC频段=-25+线损+30(衰减器值);X频段=-40+线损+30(衰减器值);" + }, + { + "type": "list", + "bbox": [ + 0.133, + 0.323, + 0.892, + 0.527 + ], + "angle": 0, + "content": null + }, + { + "type": "text", + "bbox": [ + 0.133, + 0.541, + 0.9, + 0.643 + ], + "angle": 0, + "content": "测试内容:例如SC波段信号源power=-25dBm,f=2.7GHz,频谱分析仪f=2.7GHz,读取频谱分析仪Max Peak功率值P1;信号源功率及频率保持不变,频谱分析仪f-=3.84GHz,读取频谱分析仪Max Peak功率值P2。" + }, + { + "type": "text", + "bbox": [ + 0.205, + 0.657, + 0.657, + 0.679 + ], + "angle": 0, + "content": "本次测试信号源在以下四个频点上进行测试;" + }, + { + "type": "text", + "bbox": [ + 0.205, + 0.696, + 0.597, + 0.716 + ], + "angle": 0, + "content": "2.7GHz 时频谱仪在 2.7GHz 和 3.88GHz" + }, + { + "type": "text", + "bbox": [ + 0.205, + 0.734, + 0.596, + 0.755 + ], + "angle": 0, + "content": "6.2GHz 时频谱仪在 6.2GHz 和 5.88GHz" + }, + { + "type": "list", + "bbox": [ + 0.205, + 0.696, + 0.597, + 0.755 + ], + "angle": 0, + "content": null + }, + { + "type": "text", + "bbox": [ + 0.205, + 0.773, + 0.545, + 0.793 + ], + "angle": 0, + "content": "8GHz 时频谱仪在 8GHz 和 11GHz" + }, + { + "type": "text", + "bbox": [ + 0.206, + 0.811, + 0.567, + 0.832 + ], + "angle": 0, + "content": "12GHz 时频谱仪在 12GHz 和 15GHz" + }, + { + "type": "text", + "bbox": [ + 0.205, + 0.849, + 0.633, + 0.87 + ], + "angle": 0, + "content": "注意:镜频测试中不需要体现线缆损耗值。" + }, + { + "type": "text", + "bbox": [ + 0.205, + 0.887, + 0.89, + 0.909 + ], + "angle": 0, + "content": "SC 波段, DUT 在频率 \\(2.7 \\mathrm{GHz}\\) 的镜像抑制比= (P1-P2) >7dB 判定合" + }, + { + "type": "page_number", + "bbox": [ + 0.473, + 0.929, + 0.603, + 0.948 + ], + "angle": 0, + "content": "第1页共4页" + } + ], + [ + { + "type": "text", + "bbox": [ + 0.134, + 0.109, + 0.379, + 0.132 + ], + "angle": 0, + "content": "格。不合格报告中标红。" + }, + { + "type": "text", + "bbox": [ + 0.15, + 0.172, + 0.611, + 0.195 + ], + "angle": 0, + "content": "c)断电测试:释放资源,关闭各种仪器的状态" + }, + { + "type": "text", + "bbox": [ + 0.451, + 0.203, + 0.666, + 0.223 + ], + "angle": 0, + "content": "表 1: 全壳测试报告模板" + }, + { + "type": "table", + "bbox": [ + 0.0, + 0.326, + 0.677, + 0.904 + ], + "angle": 0, + "content": "
" + }, + { + "type": "page_number", + "bbox": [ + 0.474, + 0.929, + 0.602, + 0.947 + ], + "angle": 0, + "content": "第2页共4页" + } + ], + [ + { + "type": "table", + "bbox": [ + 0.0, + 0.107, + 0.677, + 0.9 + ], + "angle": 0, + "content": "
" + }, + { + "type": "page_number", + "bbox": [ + 0.474, + 0.929, + 0.602, + 0.947 + ], + "angle": 0, + "content": "第3页共4页" + } + ], + [ + { + "type": "table", + "bbox": [ + 0.0, + 0.106, + 0.677, + 0.372 + ], + "angle": 0, + "content": "
" + }, + { + "type": "table_caption", + "bbox": [ + 0.451, + 0.402, + 0.666, + 0.421 + ], + "angle": 0, + "content": "表 1: 全壳测试报告模板" + }, + { + "type": "page_number", + "bbox": [ + 0.474, + 0.929, + 0.602, + 0.947 + ], + "angle": 0, + "content": "第4页共4页" + } + ] +] \ No newline at end of file diff --git a/backend/planner/mineru_result/原镜频测试用例参考/29ab4d4b-f670-47c0-8034-c65979df1ae3_origin.pdf b/backend/planner/mineru_result/原镜频测试用例参考/29ab4d4b-f670-47c0-8034-c65979df1ae3_origin.pdf new file mode 100644 index 0000000..c477b7b Binary files /dev/null and b/backend/planner/mineru_result/原镜频测试用例参考/29ab4d4b-f670-47c0-8034-c65979df1ae3_origin.pdf differ diff --git a/backend/planner/mineru_result/原镜频测试用例参考/3416f04e-010b-4d2f-bb25-c1d62c94c2f3_content_list.json b/backend/planner/mineru_result/原镜频测试用例参考/3416f04e-010b-4d2f-bb25-c1d62c94c2f3_content_list.json new file mode 100644 index 0000000..6f1dab0 --- /dev/null +++ b/backend/planner/mineru_result/原镜频测试用例参考/3416f04e-010b-4d2f-bb25-c1d62c94c2f3_content_list.json @@ -0,0 +1,260 @@ +[ + { + "type": "text", + "text": "场景1:测试用例", + "text_level": 1, + "bbox": [ + 133, + 117, + 343, + 142 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "测试器件说明:测试中包含的五个核心器件五个核心仪器:频谱分析仪、信号源、开关矩阵、直流电源、示波器。Dut有SC频段接口和X频段接口,通过配置开关矩阵可以实现仪器间连接的更改。", + "bbox": [ + 132, + 161, + 905, + 262 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "本次测试项目共有三项:", + "bbox": [ + 205, + 284, + 450, + 306 + ], + "page_idx": 0 + }, + { + "type": "list", + "sub_type": "text", + "list_items": [ + "a)上电测试:连接好各个设备,检查各个器件的工作情况,设置OCP,OVP等等操作。", + "b)镜频测试:DUT电源供电28V,电流2.9A;测试频段:SC波段(2.7GHz~6.2GHz)和X波段(8GHz~12GHz);频谱仪SPAN=500MHz;信号源RF Power:SC频段=-25+线损+30(衰减器值);X频段=-40+线损+30(衰减器值);" + ], + "bbox": [ + 132, + 321, + 890, + 526 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "测试内容:例如SC波段信号源power=-25dBm,f=2.7GHz,频谱分析仪f=2.7GHz,读取频谱分析仪Max Peak功率值P1;信号源功率及频率保持不变,频谱分析仪f-=3.84GHz,读取频谱分析仪Max Peak功率值P2。", + "bbox": [ + 132, + 540, + 898, + 640 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "本次测试信号源在以下四个频点上进行测试;", + "bbox": [ + 204, + 656, + 656, + 676 + ], + "page_idx": 0 + }, + { + "type": "list", + "sub_type": "text", + "list_items": [ + "2.7GHz 时频谱仪在 2.7GHz 和 3.88GHz", + "6.2GHz 时频谱仪在 6.2GHz 和 5.88GHz" + ], + "bbox": [ + 204, + 695, + 596, + 753 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "8GHz 时频谱仪在 8GHz 和 11GHz", + "bbox": [ + 204, + 772, + 544, + 792 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "12GHz 时频谱仪在 12GHz 和 15GHz", + "bbox": [ + 205, + 810, + 566, + 829 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "注意:镜频测试中不需要体现线缆损耗值。", + "bbox": [ + 204, + 848, + 632, + 869 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "SC 波段, DUT 在频率 $2.7 \\mathrm{GHz}$ 的镜像抑制比= (P1-P2) >7dB 判定合", + "bbox": [ + 204, + 886, + 888, + 907 + ], + "page_idx": 0 + }, + { + "type": "page_number", + "text": "第1页共4页", + "bbox": [ + 473, + 928, + 602, + 946 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "格。不合格报告中标红。", + "bbox": [ + 133, + 108, + 377, + 131 + ], + "page_idx": 1 + }, + { + "type": "text", + "text": "c)断电测试:释放资源,关闭各种仪器的状态", + "bbox": [ + 148, + 171, + 609, + 194 + ], + "page_idx": 1 + }, + { + "type": "text", + "text": "表 1: 全壳测试报告模板", + "bbox": [ + 450, + 202, + 665, + 222 + ], + "page_idx": 1 + }, + { + "type": "table", + "img_path": "images/13e3fab38868d97ba85faed2dc5ae88728483a29d223074fac0122102d00930e.jpg", + "table_caption": [], + "table_footnote": [], + "table_body": "
", + "bbox": [ + 0, + 325, + 676, + 902 + ], + "page_idx": 1 + }, + { + "type": "page_number", + "text": "第2页共4页", + "bbox": [ + 473, + 928, + 601, + 946 + ], + "page_idx": 1 + }, + { + "type": "table", + "img_path": "", + "table_caption": [], + "table_footnote": [], + "bbox": [ + 0, + 106, + 676, + 898 + ], + "page_idx": 2 + }, + { + "type": "page_number", + "text": "第3页共4页", + "bbox": [ + 473, + 928, + 601, + 946 + ], + "page_idx": 2 + }, + { + "type": "table", + "img_path": "", + "table_caption": [], + "table_footnote": [], + "bbox": [ + 0, + 104, + 676, + 371 + ], + "page_idx": 3 + }, + { + "type": "text", + "text": "表 1: 全壳测试报告模板", + "bbox": [ + 450, + 401, + 665, + 420 + ], + "page_idx": 3 + }, + { + "type": "page_number", + "text": "第4页共4页", + "bbox": [ + 473, + 928, + 601, + 946 + ], + "page_idx": 3 + } +] \ No newline at end of file diff --git a/backend/planner/mineru_result/原镜频测试用例参考/3416f04e-010b-4d2f-bb25-c1d62c94c2f3_model.json b/backend/planner/mineru_result/原镜频测试用例参考/3416f04e-010b-4d2f-bb25-c1d62c94c2f3_model.json new file mode 100644 index 0000000..ad5ef33 --- /dev/null +++ b/backend/planner/mineru_result/原镜频测试用例参考/3416f04e-010b-4d2f-bb25-c1d62c94c2f3_model.json @@ -0,0 +1,296 @@ +[ + [ + { + "type": "title", + "bbox": [ + 0.134, + 0.118, + 0.344, + 0.143 + ], + "angle": 0, + "content": "场景1:测试用例" + }, + { + "type": "text", + "bbox": [ + 0.133, + 0.162, + 0.906, + 0.263 + ], + "angle": 0, + "content": "测试器件说明:测试中包含的五个核心器件五个核心仪器:频谱分析仪、信号源、开关矩阵、直流电源、示波器。Dut有SC频段接口和X频段接口,通过配置开关矩阵可以实现仪器间连接的更改。" + }, + { + "type": "text", + "bbox": [ + 0.206, + 0.285, + 0.452, + 0.308 + ], + "angle": 0, + "content": "本次测试项目共有三项:" + }, + { + "type": "text", + "bbox": [ + 0.133, + 0.323, + 0.892, + 0.375 + ], + "angle": 0, + "content": "a)上电测试:连接好各个设备,检查各个器件的工作情况,设置OCP,OVP等等操作。" + }, + { + "type": "text", + "bbox": [ + 0.133, + 0.388, + 0.874, + 0.527 + ], + "angle": 0, + "content": "b)镜频测试:DUT电源供电28V,电流2.9A;测试频段:SC波段(2.7GHz~6.2GHz)和X波段(8GHz~12GHz);频谱仪SPAN=500MHz;信号源RF Power:SC频段=-25+线损+30(衰减器值);X频段=-40+线损+30(衰减器值);" + }, + { + "type": "list", + "bbox": [ + 0.133, + 0.323, + 0.892, + 0.527 + ], + "angle": 0, + "content": null + }, + { + "type": "text", + "bbox": [ + 0.133, + 0.541, + 0.9, + 0.641 + ], + "angle": 0, + "content": "测试内容:例如SC波段信号源power=-25dBm,f=2.7GHz,频谱分析仪f=2.7GHz,读取频谱分析仪Max Peak功率值P1;信号源功率及频率保持不变,频谱分析仪f-=3.84GHz,读取频谱分析仪Max Peak功率值P2。" + }, + { + "type": "text", + "bbox": [ + 0.205, + 0.657, + 0.657, + 0.678 + ], + "angle": 0, + "content": "本次测试信号源在以下四个频点上进行测试;" + }, + { + "type": "text", + "bbox": [ + 0.205, + 0.696, + 0.597, + 0.716 + ], + "angle": 0, + "content": "2.7GHz 时频谱仪在 2.7GHz 和 3.88GHz" + }, + { + "type": "text", + "bbox": [ + 0.205, + 0.734, + 0.596, + 0.755 + ], + "angle": 0, + "content": "6.2GHz 时频谱仪在 6.2GHz 和 5.88GHz" + }, + { + "type": "list", + "bbox": [ + 0.205, + 0.696, + 0.597, + 0.755 + ], + "angle": 0, + "content": null + }, + { + "type": "text", + "bbox": [ + 0.205, + 0.773, + 0.545, + 0.793 + ], + "angle": 0, + "content": "8GHz 时频谱仪在 8GHz 和 11GHz" + }, + { + "type": "text", + "bbox": [ + 0.206, + 0.811, + 0.567, + 0.83 + ], + "angle": 0, + "content": "12GHz 时频谱仪在 12GHz 和 15GHz" + }, + { + "type": "text", + "bbox": [ + 0.205, + 0.849, + 0.633, + 0.87 + ], + "angle": 0, + "content": "注意:镜频测试中不需要体现线缆损耗值。" + }, + { + "type": "text", + "bbox": [ + 0.205, + 0.887, + 0.89, + 0.908 + ], + "angle": 0, + "content": "SC 波段, DUT 在频率 \\(2.7 \\mathrm{GHz}\\) 的镜像抑制比= (P1-P2) >7dB 判定合" + }, + { + "type": "page_number", + "bbox": [ + 0.474, + 0.929, + 0.603, + 0.948 + ], + "angle": 0, + "content": "第1页共4页" + } + ], + [ + { + "type": "text", + "bbox": [ + 0.134, + 0.109, + 0.379, + 0.132 + ], + "angle": 0, + "content": "格。不合格报告中标红。" + }, + { + "type": "text", + "bbox": [ + 0.15, + 0.172, + 0.611, + 0.195 + ], + "angle": 0, + "content": "c)断电测试:释放资源,关闭各种仪器的状态" + }, + { + "type": "text", + "bbox": [ + 0.451, + 0.203, + 0.666, + 0.223 + ], + "angle": 0, + "content": "表 1: 全壳测试报告模板" + }, + { + "type": "table", + "bbox": [ + 0.0, + 0.326, + 0.677, + 0.904 + ], + "angle": 0, + "content": "
" + }, + { + "type": "page_number", + "bbox": [ + 0.474, + 0.929, + 0.602, + 0.947 + ], + "angle": 0, + "content": "第2页共4页" + } + ], + [ + { + "type": "table", + "bbox": [ + 0.0, + 0.107, + 0.677, + 0.9 + ], + "angle": 0, + "content": "
" + }, + { + "type": "page_number", + "bbox": [ + 0.474, + 0.929, + 0.602, + 0.947 + ], + "angle": 0, + "content": "第3页共4页" + } + ], + [ + { + "type": "table", + "bbox": [ + 0.0, + 0.106, + 0.677, + 0.372 + ], + "angle": 0, + "content": "
" + }, + { + "type": "table_caption", + "bbox": [ + 0.452, + 0.402, + 0.666, + 0.421 + ], + "angle": 0, + "content": "表 1: 全壳测试报告模板" + }, + { + "type": "page_number", + "bbox": [ + 0.474, + 0.929, + 0.602, + 0.947 + ], + "angle": 0, + "content": "第4页共4页" + } + ] +] \ No newline at end of file diff --git a/backend/planner/mineru_result/原镜频测试用例参考/3416f04e-010b-4d2f-bb25-c1d62c94c2f3_origin.pdf b/backend/planner/mineru_result/原镜频测试用例参考/3416f04e-010b-4d2f-bb25-c1d62c94c2f3_origin.pdf new file mode 100644 index 0000000..3261475 Binary files /dev/null and b/backend/planner/mineru_result/原镜频测试用例参考/3416f04e-010b-4d2f-bb25-c1d62c94c2f3_origin.pdf differ diff --git a/backend/planner/mineru_result/原镜频测试用例参考/48987528-a4b8-4bf0-bdfd-ec276ae82e5b_content_list.json b/backend/planner/mineru_result/原镜频测试用例参考/48987528-a4b8-4bf0-bdfd-ec276ae82e5b_content_list.json new file mode 100644 index 0000000..a8f4d98 --- /dev/null +++ b/backend/planner/mineru_result/原镜频测试用例参考/48987528-a4b8-4bf0-bdfd-ec276ae82e5b_content_list.json @@ -0,0 +1,260 @@ +[ + { + "type": "text", + "text": "场景1:测试用例", + "text_level": 1, + "bbox": [ + 133, + 117, + 343, + 142 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "测试器件说明:测试中包含的五个核心器件五个核心仪器:频谱分析仪、信号源、开关矩阵、直流电源、示波器。Dut有SC频段接口和X频段接口,通过配置开关矩阵可以实现仪器间连接的更改。", + "bbox": [ + 132, + 161, + 905, + 262 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "本次测试项目共有三项:", + "bbox": [ + 205, + 284, + 450, + 306 + ], + "page_idx": 0 + }, + { + "type": "list", + "sub_type": "text", + "list_items": [ + "a)上电测试:连接好各个设备,检查各个器件的工作情况,设置OCP,OVP,等等操作。", + "b)镜频测试:DUT电源供电28V,电流2.9A;测试频段:SC波段(2.7GHz~6.2GHz)和X波段(8GHz~12GHz);频谱仪SPAN=500MHz;信号源RF Power:SC频段=-25+线损+30(衰减器值);X频段=-40+线损+30(衰减器值);" + ], + "bbox": [ + 132, + 321, + 890, + 526 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "测试内容:例如SC波段信号源power=-25dBm,f=2.7GHz,频谱分析仪f=2.7GHz,读取频谱分析仪Max Peak功率值P1;信号源功率及频率保持不变,频谱分析仪f-=3.84GHz,读取频谱分析仪Max Peak功率值P2。", + "bbox": [ + 132, + 540, + 898, + 642 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "本次测试信号源在以下四个频点上进行测试;", + "bbox": [ + 204, + 656, + 656, + 678 + ], + "page_idx": 0 + }, + { + "type": "list", + "sub_type": "text", + "list_items": [ + "2.7GHz 时频谱仪在 2.7GHz 和 3.88GHz", + "6.2GHz 时频谱仪在 6.2GHz 和 5.88GHz" + ], + "bbox": [ + 204, + 695, + 596, + 753 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "8GHz 时频谱仪在 8GHz 和 11GHz", + "bbox": [ + 204, + 772, + 544, + 792 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "12GHz 时频谱仪在 12GHz 和 15GHz", + "bbox": [ + 205, + 810, + 566, + 830 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "注意:镜频测试中不需要体现线缆损耗值。", + "bbox": [ + 204, + 848, + 632, + 869 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "SC 波段, DUT 在频率 $2.7 \\mathrm{GHz}$ 的镜像抑制比= (P1-P2) >7dB 判定合", + "bbox": [ + 204, + 886, + 888, + 907 + ], + "page_idx": 0 + }, + { + "type": "page_number", + "text": "第1页共4页", + "bbox": [ + 472, + 928, + 602, + 946 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "格。不合格报告中标红。", + "bbox": [ + 133, + 109, + 377, + 131 + ], + "page_idx": 1 + }, + { + "type": "text", + "text": "c)断电测试:释放资源,关闭各种仪器的状态", + "bbox": [ + 148, + 171, + 609, + 194 + ], + "page_idx": 1 + }, + { + "type": "text", + "text": "表 1: 全壳测试报告模板", + "bbox": [ + 450, + 202, + 665, + 222 + ], + "page_idx": 1 + }, + { + "type": "table", + "img_path": "images/13e3fab38868d97ba85faed2dc5ae88728483a29d223074fac0122102d00930e.jpg", + "table_caption": [], + "table_footnote": [], + "table_body": "
", + "bbox": [ + 0, + 325, + 676, + 902 + ], + "page_idx": 1 + }, + { + "type": "page_number", + "text": "第2页共4页", + "bbox": [ + 473, + 928, + 601, + 946 + ], + "page_idx": 1 + }, + { + "type": "table", + "img_path": "", + "table_caption": [], + "table_footnote": [], + "bbox": [ + 0, + 106, + 676, + 898 + ], + "page_idx": 2 + }, + { + "type": "page_number", + "text": "第3页共4页", + "bbox": [ + 473, + 928, + 601, + 946 + ], + "page_idx": 2 + }, + { + "type": "table", + "img_path": "", + "table_caption": [], + "table_footnote": [], + "bbox": [ + 0, + 104, + 676, + 371 + ], + "page_idx": 3 + }, + { + "type": "text", + "text": "表 1: 全壳测试报告模板", + "bbox": [ + 450, + 401, + 665, + 420 + ], + "page_idx": 3 + }, + { + "type": "page_number", + "text": "第4页共4页", + "bbox": [ + 473, + 928, + 601, + 946 + ], + "page_idx": 3 + } +] \ No newline at end of file diff --git a/backend/planner/mineru_result/原镜频测试用例参考/48987528-a4b8-4bf0-bdfd-ec276ae82e5b_model.json b/backend/planner/mineru_result/原镜频测试用例参考/48987528-a4b8-4bf0-bdfd-ec276ae82e5b_model.json new file mode 100644 index 0000000..8c19d35 --- /dev/null +++ b/backend/planner/mineru_result/原镜频测试用例参考/48987528-a4b8-4bf0-bdfd-ec276ae82e5b_model.json @@ -0,0 +1,296 @@ +[ + [ + { + "type": "title", + "bbox": [ + 0.134, + 0.118, + 0.344, + 0.143 + ], + "angle": 0, + "content": "场景1:测试用例" + }, + { + "type": "text", + "bbox": [ + 0.133, + 0.162, + 0.906, + 0.263 + ], + "angle": 0, + "content": "测试器件说明:测试中包含的五个核心器件五个核心仪器:频谱分析仪、信号源、开关矩阵、直流电源、示波器。Dut有SC频段接口和X频段接口,通过配置开关矩阵可以实现仪器间连接的更改。" + }, + { + "type": "text", + "bbox": [ + 0.206, + 0.285, + 0.452, + 0.308 + ], + "angle": 0, + "content": "本次测试项目共有三项:" + }, + { + "type": "text", + "bbox": [ + 0.133, + 0.323, + 0.892, + 0.378 + ], + "angle": 0, + "content": "a)上电测试:连接好各个设备,检查各个器件的工作情况,设置OCP,OVP,等等操作。" + }, + { + "type": "text", + "bbox": [ + 0.133, + 0.388, + 0.874, + 0.527 + ], + "angle": 0, + "content": "b)镜频测试:DUT电源供电28V,电流2.9A;测试频段:SC波段(2.7GHz~6.2GHz)和X波段(8GHz~12GHz);频谱仪SPAN=500MHz;信号源RF Power:SC频段=-25+线损+30(衰减器值);X频段=-40+线损+30(衰减器值);" + }, + { + "type": "list", + "bbox": [ + 0.133, + 0.323, + 0.892, + 0.527 + ], + "angle": 0, + "content": null + }, + { + "type": "text", + "bbox": [ + 0.133, + 0.541, + 0.9, + 0.643 + ], + "angle": 0, + "content": "测试内容:例如SC波段信号源power=-25dBm,f=2.7GHz,频谱分析仪f=2.7GHz,读取频谱分析仪Max Peak功率值P1;信号源功率及频率保持不变,频谱分析仪f-=3.84GHz,读取频谱分析仪Max Peak功率值P2。" + }, + { + "type": "text", + "bbox": [ + 0.205, + 0.657, + 0.657, + 0.679 + ], + "angle": 0, + "content": "本次测试信号源在以下四个频点上进行测试;" + }, + { + "type": "text", + "bbox": [ + 0.205, + 0.696, + 0.597, + 0.716 + ], + "angle": 0, + "content": "2.7GHz 时频谱仪在 2.7GHz 和 3.88GHz" + }, + { + "type": "text", + "bbox": [ + 0.205, + 0.734, + 0.595, + 0.755 + ], + "angle": 0, + "content": "6.2GHz 时频谱仪在 6.2GHz 和 5.88GHz" + }, + { + "type": "list", + "bbox": [ + 0.205, + 0.696, + 0.597, + 0.755 + ], + "angle": 0, + "content": null + }, + { + "type": "text", + "bbox": [ + 0.205, + 0.773, + 0.545, + 0.793 + ], + "angle": 0, + "content": "8GHz 时频谱仪在 8GHz 和 11GHz" + }, + { + "type": "text", + "bbox": [ + 0.206, + 0.811, + 0.567, + 0.832 + ], + "angle": 0, + "content": "12GHz 时频谱仪在 12GHz 和 15GHz" + }, + { + "type": "text", + "bbox": [ + 0.205, + 0.849, + 0.633, + 0.87 + ], + "angle": 0, + "content": "注意:镜频测试中不需要体现线缆损耗值。" + }, + { + "type": "text", + "bbox": [ + 0.205, + 0.887, + 0.89, + 0.909 + ], + "angle": 0, + "content": "SC 波段, DUT 在频率 \\(2.7 \\mathrm{GHz}\\) 的镜像抑制比= (P1-P2) >7dB 判定合" + }, + { + "type": "page_number", + "bbox": [ + 0.473, + 0.929, + 0.603, + 0.948 + ], + "angle": 0, + "content": "第1页共4页" + } + ], + [ + { + "type": "text", + "bbox": [ + 0.134, + 0.11, + 0.378, + 0.132 + ], + "angle": 0, + "content": "格。不合格报告中标红。" + }, + { + "type": "text", + "bbox": [ + 0.15, + 0.172, + 0.611, + 0.195 + ], + "angle": 0, + "content": "c)断电测试:释放资源,关闭各种仪器的状态" + }, + { + "type": "text", + "bbox": [ + 0.451, + 0.203, + 0.666, + 0.223 + ], + "angle": 0, + "content": "表 1: 全壳测试报告模板" + }, + { + "type": "table", + "bbox": [ + 0.0, + 0.326, + 0.677, + 0.904 + ], + "angle": 0, + "content": "
" + }, + { + "type": "page_number", + "bbox": [ + 0.474, + 0.929, + 0.602, + 0.947 + ], + "angle": 0, + "content": "第2页共4页" + } + ], + [ + { + "type": "table", + "bbox": [ + 0.0, + 0.107, + 0.677, + 0.9 + ], + "angle": 0, + "content": "
" + }, + { + "type": "page_number", + "bbox": [ + 0.474, + 0.929, + 0.602, + 0.947 + ], + "angle": 0, + "content": "第3页共4页" + } + ], + [ + { + "type": "table", + "bbox": [ + 0.0, + 0.106, + 0.677, + 0.372 + ], + "angle": 0, + "content": "
" + }, + { + "type": "table_caption", + "bbox": [ + 0.452, + 0.402, + 0.666, + 0.421 + ], + "angle": 0, + "content": "表 1: 全壳测试报告模板" + }, + { + "type": "page_number", + "bbox": [ + 0.474, + 0.929, + 0.602, + 0.947 + ], + "angle": 0, + "content": "第4页共4页" + } + ] +] \ No newline at end of file diff --git a/backend/planner/mineru_result/原镜频测试用例参考/48987528-a4b8-4bf0-bdfd-ec276ae82e5b_origin.pdf b/backend/planner/mineru_result/原镜频测试用例参考/48987528-a4b8-4bf0-bdfd-ec276ae82e5b_origin.pdf new file mode 100644 index 0000000..89a9ed5 Binary files /dev/null and b/backend/planner/mineru_result/原镜频测试用例参考/48987528-a4b8-4bf0-bdfd-ec276ae82e5b_origin.pdf differ diff --git a/backend/planner/mineru_result/原镜频测试用例参考/54e85407-473b-46d6-a827-01dedf7cce98_content_list.json b/backend/planner/mineru_result/原镜频测试用例参考/54e85407-473b-46d6-a827-01dedf7cce98_content_list.json new file mode 100644 index 0000000..bdba27a --- /dev/null +++ b/backend/planner/mineru_result/原镜频测试用例参考/54e85407-473b-46d6-a827-01dedf7cce98_content_list.json @@ -0,0 +1,260 @@ +[ + { + "type": "text", + "text": "场景1:测试用例", + "text_level": 1, + "bbox": [ + 133, + 117, + 343, + 142 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "测试器件说明:测试中包含的五个核心器件五个核心仪器:频谱分析仪、信号源、开关矩阵、直流电源、示波器。Dut有SC频段接口和X频段接口,通过配置开关矩阵可以实现仪器间连接的更改。", + "bbox": [ + 132, + 161, + 905, + 262 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "本次测试项目共有三项:", + "bbox": [ + 205, + 284, + 450, + 306 + ], + "page_idx": 0 + }, + { + "type": "list", + "sub_type": "text", + "list_items": [ + "a)上电测试:连接好各个设备,检查各个器件的工作情况,设置OCP,OVP,等等操作。", + "b)镜频测试:DUT电源供电28V,电流2.9A;测试频段:SC波段(2.7GHz~6.2GHz)和X波段(8GHz~12GHz);频谱仪SPAN=500MHz;信号源RF Power:SC频段=-25+线损+30(衰减器值);X频段=-40+线损+30(衰减器值);" + ], + "bbox": [ + 132, + 321, + 890, + 526 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "测试内容:例如SC波段信号源power=-25dBm,f=2.7GHz,频谱分析仪f=2.7GHz,读取频谱分析仪Max Peak功率值P1;信号源功率及频率保持不变,频谱分析仪f-=3.84GHz,读取频谱分析仪Max Peak功率值P2。", + "bbox": [ + 132, + 540, + 898, + 640 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "本次测试信号源在以下四个频点上进行测试;", + "bbox": [ + 204, + 656, + 656, + 678 + ], + "page_idx": 0 + }, + { + "type": "list", + "sub_type": "text", + "list_items": [ + "2.7GHz 时频谱仪在 2.7GHz 和 3.88GHz", + "6.2GHz 时频谱仪在 6.2GHz 和 5.88GHz" + ], + "bbox": [ + 204, + 695, + 596, + 753 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "8GHz 时频谱仪在 8GHz 和 11GHz", + "bbox": [ + 204, + 772, + 544, + 792 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "12GHz 时频谱仪在 12GHz 和 15GHz", + "bbox": [ + 205, + 810, + 566, + 830 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "注意:镜频测试中不需要体现线缆损耗值。", + "bbox": [ + 204, + 848, + 632, + 869 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "SC 波段, DUT 在频率 $2.7 \\mathrm{GHz}$ 的镜像抑制比= (P1-P2) >7dB 判定合", + "bbox": [ + 204, + 886, + 888, + 907 + ], + "page_idx": 0 + }, + { + "type": "page_number", + "text": "第1页共4页", + "bbox": [ + 472, + 928, + 602, + 946 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "格。不合格报告中标红。", + "bbox": [ + 133, + 108, + 377, + 131 + ], + "page_idx": 1 + }, + { + "type": "text", + "text": "c)断电测试:释放资源,关闭各种仪器的状态", + "bbox": [ + 148, + 171, + 609, + 194 + ], + "page_idx": 1 + }, + { + "type": "text", + "text": "表 1: 全壳测试报告模板", + "bbox": [ + 450, + 202, + 665, + 222 + ], + "page_idx": 1 + }, + { + "type": "table", + "img_path": "images/13e3fab38868d97ba85faed2dc5ae88728483a29d223074fac0122102d00930e.jpg", + "table_caption": [], + "table_footnote": [], + "table_body": "
", + "bbox": [ + 0, + 325, + 676, + 902 + ], + "page_idx": 1 + }, + { + "type": "page_number", + "text": "第2页共4页", + "bbox": [ + 473, + 928, + 601, + 946 + ], + "page_idx": 1 + }, + { + "type": "table", + "img_path": "", + "table_caption": [], + "table_footnote": [], + "bbox": [ + 0, + 106, + 676, + 898 + ], + "page_idx": 2 + }, + { + "type": "page_number", + "text": "第3页共4页", + "bbox": [ + 473, + 928, + 601, + 946 + ], + "page_idx": 2 + }, + { + "type": "table", + "img_path": "", + "table_caption": [], + "table_footnote": [], + "bbox": [ + 0, + 104, + 676, + 371 + ], + "page_idx": 3 + }, + { + "type": "text", + "text": "表 1: 全壳测试报告模板", + "bbox": [ + 450, + 401, + 665, + 420 + ], + "page_idx": 3 + }, + { + "type": "page_number", + "text": "第4页共4页", + "bbox": [ + 473, + 928, + 601, + 946 + ], + "page_idx": 3 + } +] \ No newline at end of file diff --git a/backend/planner/mineru_result/原镜频测试用例参考/54e85407-473b-46d6-a827-01dedf7cce98_model.json b/backend/planner/mineru_result/原镜频测试用例参考/54e85407-473b-46d6-a827-01dedf7cce98_model.json new file mode 100644 index 0000000..48f0794 --- /dev/null +++ b/backend/planner/mineru_result/原镜频测试用例参考/54e85407-473b-46d6-a827-01dedf7cce98_model.json @@ -0,0 +1,296 @@ +[ + [ + { + "type": "title", + "bbox": [ + 0.134, + 0.118, + 0.344, + 0.143 + ], + "angle": 0, + "content": "场景1:测试用例" + }, + { + "type": "text", + "bbox": [ + 0.133, + 0.162, + 0.906, + 0.263 + ], + "angle": 0, + "content": "测试器件说明:测试中包含的五个核心器件五个核心仪器:频谱分析仪、信号源、开关矩阵、直流电源、示波器。Dut有SC频段接口和X频段接口,通过配置开关矩阵可以实现仪器间连接的更改。" + }, + { + "type": "text", + "bbox": [ + 0.206, + 0.285, + 0.452, + 0.308 + ], + "angle": 0, + "content": "本次测试项目共有三项:" + }, + { + "type": "text", + "bbox": [ + 0.133, + 0.323, + 0.892, + 0.378 + ], + "angle": 0, + "content": "a)上电测试:连接好各个设备,检查各个器件的工作情况,设置OCP,OVP,等等操作。" + }, + { + "type": "text", + "bbox": [ + 0.133, + 0.388, + 0.874, + 0.527 + ], + "angle": 0, + "content": "b)镜频测试:DUT电源供电28V,电流2.9A;测试频段:SC波段(2.7GHz~6.2GHz)和X波段(8GHz~12GHz);频谱仪SPAN=500MHz;信号源RF Power:SC频段=-25+线损+30(衰减器值);X频段=-40+线损+30(衰减器值);" + }, + { + "type": "list", + "bbox": [ + 0.133, + 0.323, + 0.892, + 0.527 + ], + "angle": 0, + "content": null + }, + { + "type": "text", + "bbox": [ + 0.133, + 0.541, + 0.9, + 0.641 + ], + "angle": 0, + "content": "测试内容:例如SC波段信号源power=-25dBm,f=2.7GHz,频谱分析仪f=2.7GHz,读取频谱分析仪Max Peak功率值P1;信号源功率及频率保持不变,频谱分析仪f-=3.84GHz,读取频谱分析仪Max Peak功率值P2。" + }, + { + "type": "text", + "bbox": [ + 0.205, + 0.657, + 0.657, + 0.679 + ], + "angle": 0, + "content": "本次测试信号源在以下四个频点上进行测试;" + }, + { + "type": "text", + "bbox": [ + 0.205, + 0.696, + 0.597, + 0.716 + ], + "angle": 0, + "content": "2.7GHz 时频谱仪在 2.7GHz 和 3.88GHz" + }, + { + "type": "text", + "bbox": [ + 0.205, + 0.734, + 0.595, + 0.755 + ], + "angle": 0, + "content": "6.2GHz 时频谱仪在 6.2GHz 和 5.88GHz" + }, + { + "type": "list", + "bbox": [ + 0.205, + 0.696, + 0.597, + 0.755 + ], + "angle": 0, + "content": null + }, + { + "type": "text", + "bbox": [ + 0.205, + 0.773, + 0.545, + 0.793 + ], + "angle": 0, + "content": "8GHz 时频谱仪在 8GHz 和 11GHz" + }, + { + "type": "text", + "bbox": [ + 0.206, + 0.811, + 0.567, + 0.832 + ], + "angle": 0, + "content": "12GHz 时频谱仪在 12GHz 和 15GHz" + }, + { + "type": "text", + "bbox": [ + 0.205, + 0.849, + 0.633, + 0.87 + ], + "angle": 0, + "content": "注意:镜频测试中不需要体现线缆损耗值。" + }, + { + "type": "text", + "bbox": [ + 0.205, + 0.887, + 0.89, + 0.909 + ], + "angle": 0, + "content": "SC 波段, DUT 在频率 \\(2.7 \\mathrm{GHz}\\) 的镜像抑制比= (P1-P2) >7dB 判定合" + }, + { + "type": "page_number", + "bbox": [ + 0.473, + 0.929, + 0.603, + 0.948 + ], + "angle": 0, + "content": "第1页共4页" + } + ], + [ + { + "type": "text", + "bbox": [ + 0.134, + 0.109, + 0.379, + 0.132 + ], + "angle": 0, + "content": "格。不合格报告中标红。" + }, + { + "type": "text", + "bbox": [ + 0.15, + 0.172, + 0.611, + 0.195 + ], + "angle": 0, + "content": "c)断电测试:释放资源,关闭各种仪器的状态" + }, + { + "type": "text", + "bbox": [ + 0.451, + 0.203, + 0.666, + 0.223 + ], + "angle": 0, + "content": "表 1: 全壳测试报告模板" + }, + { + "type": "table", + "bbox": [ + 0.0, + 0.326, + 0.677, + 0.904 + ], + "angle": 0, + "content": "
" + }, + { + "type": "page_number", + "bbox": [ + 0.474, + 0.929, + 0.602, + 0.947 + ], + "angle": 0, + "content": "第2页共4页" + } + ], + [ + { + "type": "table", + "bbox": [ + 0.0, + 0.107, + 0.677, + 0.9 + ], + "angle": 0, + "content": "
" + }, + { + "type": "page_number", + "bbox": [ + 0.474, + 0.929, + 0.602, + 0.947 + ], + "angle": 0, + "content": "第3页共4页" + } + ], + [ + { + "type": "table", + "bbox": [ + 0.0, + 0.106, + 0.677, + 0.372 + ], + "angle": 0, + "content": "
" + }, + { + "type": "table_caption", + "bbox": [ + 0.451, + 0.402, + 0.666, + 0.421 + ], + "angle": 0, + "content": "表 1: 全壳测试报告模板" + }, + { + "type": "page_number", + "bbox": [ + 0.474, + 0.929, + 0.602, + 0.947 + ], + "angle": 0, + "content": "第4页共4页" + } + ] +] \ No newline at end of file diff --git a/backend/planner/mineru_result/原镜频测试用例参考/54e85407-473b-46d6-a827-01dedf7cce98_origin.pdf b/backend/planner/mineru_result/原镜频测试用例参考/54e85407-473b-46d6-a827-01dedf7cce98_origin.pdf new file mode 100644 index 0000000..2d54d5f Binary files /dev/null and b/backend/planner/mineru_result/原镜频测试用例参考/54e85407-473b-46d6-a827-01dedf7cce98_origin.pdf differ diff --git a/backend/planner/mineru_result/原镜频测试用例参考/60bf563d-59fe-4d0a-96a4-d33190dba7b9_content_list.json b/backend/planner/mineru_result/原镜频测试用例参考/60bf563d-59fe-4d0a-96a4-d33190dba7b9_content_list.json new file mode 100644 index 0000000..805ab6c --- /dev/null +++ b/backend/planner/mineru_result/原镜频测试用例参考/60bf563d-59fe-4d0a-96a4-d33190dba7b9_content_list.json @@ -0,0 +1,260 @@ +[ + { + "type": "text", + "text": "场景1:测试用例", + "text_level": 1, + "bbox": [ + 133, + 117, + 343, + 142 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "测试器件说明:测试中包含的五个核心器件五个核心仪器:频谱分析仪、信号源、开关矩阵、直流电源、示波器。Dut有SC频段接口和X频段接口,通过配置开关矩阵可以实现仪器间连接的更改。", + "bbox": [ + 132, + 161, + 905, + 262 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "本次测试项目共有三项:", + "bbox": [ + 205, + 284, + 450, + 306 + ], + "page_idx": 0 + }, + { + "type": "list", + "sub_type": "text", + "list_items": [ + "a)上电测试:连接好各个设备,检查各个器件的工作情况,设置OCP,OVP,等等操作。", + "b)镜频测试:DUT电源供电28V,电流2.9A;测试频段:SC波段(2.7GHz~6.2GHz)和X波段(8GHz~12GHz);频谱仪SPAN=500MHz;信号源RF Power:SC频段=-25+线损+30(衰减器值);X频段=-40+线损+30(衰减器值);" + ], + "bbox": [ + 132, + 321, + 890, + 526 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "测试内容:例如SC波段信号源power=-25dBm,f=2.7GHz,频谱分析仪f=2.7GHz,读取频谱分析仪Max Peak功率值P1;信号源功率及频率保持不变,频谱分析仪f-=3.84GHz,读取频谱分析仪Max Peak功率值P2。", + "bbox": [ + 132, + 540, + 898, + 642 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "本次测试信号源在以下四个频点上进行测试;", + "bbox": [ + 204, + 656, + 656, + 678 + ], + "page_idx": 0 + }, + { + "type": "list", + "sub_type": "text", + "list_items": [ + "2.7GHz 时频谱仪在 2.7GHz 和 3.88GHz", + "6.2GHz 时频谱仪在 6.2GHz 和 5.88GHz" + ], + "bbox": [ + 204, + 695, + 596, + 753 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "8GHz 时频谱仪在 8GHz 和 11GHz", + "bbox": [ + 204, + 772, + 544, + 792 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "12GHz 时频谱仪在 12GHz 和 15GHz", + "bbox": [ + 205, + 810, + 566, + 830 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "注意:镜频测试中不需要体现线缆损耗值。", + "bbox": [ + 204, + 848, + 632, + 869 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "SC 波段, DUT 在频率 $2.7 \\mathrm{GHz}$ 的镜像抑制比= (P1-P2) >7dB 判定合", + "bbox": [ + 204, + 886, + 888, + 907 + ], + "page_idx": 0 + }, + { + "type": "page_number", + "text": "第1页共4页", + "bbox": [ + 472, + 928, + 602, + 946 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "格。不合格报告中标红。", + "bbox": [ + 133, + 109, + 377, + 131 + ], + "page_idx": 1 + }, + { + "type": "text", + "text": "c)断电测试:释放资源,关闭各种仪器的状态", + "bbox": [ + 148, + 171, + 609, + 194 + ], + "page_idx": 1 + }, + { + "type": "text", + "text": "表 1: 全壳测试报告模板", + "bbox": [ + 450, + 202, + 665, + 222 + ], + "page_idx": 1 + }, + { + "type": "table", + "img_path": "images/13e3fab38868d97ba85faed2dc5ae88728483a29d223074fac0122102d00930e.jpg", + "table_caption": [], + "table_footnote": [], + "table_body": "
", + "bbox": [ + 0, + 325, + 676, + 902 + ], + "page_idx": 1 + }, + { + "type": "page_number", + "text": "第2页共4页", + "bbox": [ + 473, + 928, + 601, + 946 + ], + "page_idx": 1 + }, + { + "type": "table", + "img_path": "", + "table_caption": [], + "table_footnote": [], + "bbox": [ + 0, + 106, + 676, + 898 + ], + "page_idx": 2 + }, + { + "type": "page_number", + "text": "第3页共4页", + "bbox": [ + 473, + 928, + 601, + 946 + ], + "page_idx": 2 + }, + { + "type": "table", + "img_path": "", + "table_caption": [], + "table_footnote": [], + "bbox": [ + 0, + 104, + 676, + 371 + ], + "page_idx": 3 + }, + { + "type": "text", + "text": "表 1: 全壳测试报告模板", + "bbox": [ + 450, + 401, + 665, + 420 + ], + "page_idx": 3 + }, + { + "type": "page_number", + "text": "第4页共4页", + "bbox": [ + 473, + 928, + 601, + 946 + ], + "page_idx": 3 + } +] \ No newline at end of file diff --git a/backend/planner/mineru_result/原镜频测试用例参考/60bf563d-59fe-4d0a-96a4-d33190dba7b9_model.json b/backend/planner/mineru_result/原镜频测试用例参考/60bf563d-59fe-4d0a-96a4-d33190dba7b9_model.json new file mode 100644 index 0000000..38b7046 --- /dev/null +++ b/backend/planner/mineru_result/原镜频测试用例参考/60bf563d-59fe-4d0a-96a4-d33190dba7b9_model.json @@ -0,0 +1,296 @@ +[ + [ + { + "type": "title", + "bbox": [ + 0.134, + 0.118, + 0.344, + 0.143 + ], + "angle": 0, + "content": "场景1:测试用例" + }, + { + "type": "text", + "bbox": [ + 0.133, + 0.162, + 0.906, + 0.263 + ], + "angle": 0, + "content": "测试器件说明:测试中包含的五个核心器件五个核心仪器:频谱分析仪、信号源、开关矩阵、直流电源、示波器。Dut有SC频段接口和X频段接口,通过配置开关矩阵可以实现仪器间连接的更改。" + }, + { + "type": "text", + "bbox": [ + 0.206, + 0.285, + 0.452, + 0.308 + ], + "angle": 0, + "content": "本次测试项目共有三项:" + }, + { + "type": "text", + "bbox": [ + 0.133, + 0.323, + 0.892, + 0.378 + ], + "angle": 0, + "content": "a)上电测试:连接好各个设备,检查各个器件的工作情况,设置OCP,OVP,等等操作。" + }, + { + "type": "text", + "bbox": [ + 0.133, + 0.388, + 0.874, + 0.527 + ], + "angle": 0, + "content": "b)镜频测试:DUT电源供电28V,电流2.9A;测试频段:SC波段(2.7GHz~6.2GHz)和X波段(8GHz~12GHz);频谱仪SPAN=500MHz;信号源RF Power:SC频段=-25+线损+30(衰减器值);X频段=-40+线损+30(衰减器值);" + }, + { + "type": "list", + "bbox": [ + 0.133, + 0.323, + 0.892, + 0.527 + ], + "angle": 0, + "content": null + }, + { + "type": "text", + "bbox": [ + 0.133, + 0.541, + 0.9, + 0.643 + ], + "angle": 0, + "content": "测试内容:例如SC波段信号源power=-25dBm,f=2.7GHz,频谱分析仪f=2.7GHz,读取频谱分析仪Max Peak功率值P1;信号源功率及频率保持不变,频谱分析仪f-=3.84GHz,读取频谱分析仪Max Peak功率值P2。" + }, + { + "type": "text", + "bbox": [ + 0.205, + 0.657, + 0.657, + 0.679 + ], + "angle": 0, + "content": "本次测试信号源在以下四个频点上进行测试;" + }, + { + "type": "text", + "bbox": [ + 0.205, + 0.696, + 0.597, + 0.716 + ], + "angle": 0, + "content": "2.7GHz 时频谱仪在 2.7GHz 和 3.88GHz" + }, + { + "type": "text", + "bbox": [ + 0.205, + 0.734, + 0.596, + 0.755 + ], + "angle": 0, + "content": "6.2GHz 时频谱仪在 6.2GHz 和 5.88GHz" + }, + { + "type": "list", + "bbox": [ + 0.205, + 0.696, + 0.597, + 0.755 + ], + "angle": 0, + "content": null + }, + { + "type": "text", + "bbox": [ + 0.205, + 0.773, + 0.545, + 0.793 + ], + "angle": 0, + "content": "8GHz 时频谱仪在 8GHz 和 11GHz" + }, + { + "type": "text", + "bbox": [ + 0.206, + 0.811, + 0.567, + 0.832 + ], + "angle": 0, + "content": "12GHz 时频谱仪在 12GHz 和 15GHz" + }, + { + "type": "text", + "bbox": [ + 0.205, + 0.849, + 0.633, + 0.87 + ], + "angle": 0, + "content": "注意:镜频测试中不需要体现线缆损耗值。" + }, + { + "type": "text", + "bbox": [ + 0.205, + 0.887, + 0.89, + 0.909 + ], + "angle": 0, + "content": "SC 波段, DUT 在频率 \\(2.7 \\mathrm{GHz}\\) 的镜像抑制比= (P1-P2) >7dB 判定合" + }, + { + "type": "page_number", + "bbox": [ + 0.473, + 0.929, + 0.603, + 0.948 + ], + "angle": 0, + "content": "第1页共4页" + } + ], + [ + { + "type": "text", + "bbox": [ + 0.134, + 0.11, + 0.378, + 0.132 + ], + "angle": 0, + "content": "格。不合格报告中标红。" + }, + { + "type": "text", + "bbox": [ + 0.15, + 0.172, + 0.611, + 0.195 + ], + "angle": 0, + "content": "c)断电测试:释放资源,关闭各种仪器的状态" + }, + { + "type": "text", + "bbox": [ + 0.451, + 0.203, + 0.666, + 0.223 + ], + "angle": 0, + "content": "表 1: 全壳测试报告模板" + }, + { + "type": "table", + "bbox": [ + 0.0, + 0.326, + 0.677, + 0.904 + ], + "angle": 0, + "content": "
" + }, + { + "type": "page_number", + "bbox": [ + 0.474, + 0.929, + 0.602, + 0.947 + ], + "angle": 0, + "content": "第2页共4页" + } + ], + [ + { + "type": "table", + "bbox": [ + 0.0, + 0.107, + 0.677, + 0.9 + ], + "angle": 0, + "content": "
" + }, + { + "type": "page_number", + "bbox": [ + 0.474, + 0.929, + 0.602, + 0.947 + ], + "angle": 0, + "content": "第3页共4页" + } + ], + [ + { + "type": "table", + "bbox": [ + 0.0, + 0.106, + 0.677, + 0.372 + ], + "angle": 0, + "content": "
" + }, + { + "type": "table_caption", + "bbox": [ + 0.451, + 0.402, + 0.666, + 0.421 + ], + "angle": 0, + "content": "表 1: 全壳测试报告模板" + }, + { + "type": "page_number", + "bbox": [ + 0.474, + 0.929, + 0.602, + 0.947 + ], + "angle": 0, + "content": "第4页共4页" + } + ] +] \ No newline at end of file diff --git a/backend/planner/mineru_result/原镜频测试用例参考/60bf563d-59fe-4d0a-96a4-d33190dba7b9_origin.pdf b/backend/planner/mineru_result/原镜频测试用例参考/60bf563d-59fe-4d0a-96a4-d33190dba7b9_origin.pdf new file mode 100644 index 0000000..7ef09ca Binary files /dev/null and b/backend/planner/mineru_result/原镜频测试用例参考/60bf563d-59fe-4d0a-96a4-d33190dba7b9_origin.pdf differ diff --git a/backend/planner/mineru_result/原镜频测试用例参考/656d4dd7-772c-4257-a526-cb1ce30d52f2_content_list.json b/backend/planner/mineru_result/原镜频测试用例参考/656d4dd7-772c-4257-a526-cb1ce30d52f2_content_list.json new file mode 100644 index 0000000..26e869d --- /dev/null +++ b/backend/planner/mineru_result/原镜频测试用例参考/656d4dd7-772c-4257-a526-cb1ce30d52f2_content_list.json @@ -0,0 +1,260 @@ +[ + { + "type": "text", + "text": "场景1:测试用例", + "text_level": 1, + "bbox": [ + 133, + 117, + 343, + 142 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "测试器件说明:测试中包含的五个核心器件五个核心仪器:频谱分析仪、信号源、开关矩阵、直流电源、示波器。Dut有SC频段接口和X频段接口,通过配置开关矩阵可以实现仪器间连接的更改。", + "bbox": [ + 132, + 161, + 905, + 262 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "本次测试项目共有三项:", + "bbox": [ + 205, + 284, + 450, + 306 + ], + "page_idx": 0 + }, + { + "type": "list", + "sub_type": "text", + "list_items": [ + "a)上电测试:连接好各个设备,检查各个器件的工作情况,设置OCP,OVP,等等操作。", + "b)镜频测试:DUT电源供电28V,电流2.9A;测试频段:SC波段(2.7GHz~6.2GHz)和X波段(8GHz~12GHz);频谱仪SPAN=500MHz;信号源RF Power:SC频段=-25+线损+30(衰减器值);X频段=-40+线损+30(衰减器值);" + ], + "bbox": [ + 132, + 321, + 890, + 526 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "测试内容:例如SC波段信号源power $= -25\\mathrm{dBm}$ , $f = 2.7\\mathrm{GHz}$ ,频谱分析仪 $f = 2.7\\mathrm{GHz}$ ,读取频谱分析仪Max Peak功率值P1;信号源功率及频率保持不变,频谱分析仪 $f = 3.84\\mathrm{GHz}$ ,读取频谱分析仪Max Peak功率值P2。", + "bbox": [ + 132, + 540, + 901, + 640 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "本次测试信号源在以下四个频点上进行测试;", + "bbox": [ + 204, + 656, + 656, + 678 + ], + "page_idx": 0 + }, + { + "type": "list", + "sub_type": "text", + "list_items": [ + "2.7GHz 时频谱仪在 2.7GHz 和 3.88GHz", + "6.2GHz 时频谱仪在 6.2GHz 和 5.88GHz" + ], + "bbox": [ + 204, + 695, + 596, + 753 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "8GHz 时频谱仪在 8GHz 和 11GHz", + "bbox": [ + 204, + 772, + 544, + 792 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "12GHz 时频谱仪在 12GHz 和 15GHz", + "bbox": [ + 205, + 810, + 566, + 830 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "注意:镜频测试中不需要体现线缆损耗值。", + "bbox": [ + 204, + 848, + 632, + 869 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "SC 波段, DUT 在频率 $2.7 \\mathrm{GHz}$ 的镜像抑制比= (P1-P2) >7dB 判定合", + "bbox": [ + 204, + 886, + 888, + 907 + ], + "page_idx": 0 + }, + { + "type": "page_number", + "text": "第1页共4页", + "bbox": [ + 472, + 928, + 602, + 946 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "格。不合格报告中标红。", + "bbox": [ + 133, + 109, + 377, + 131 + ], + "page_idx": 1 + }, + { + "type": "text", + "text": "c)断电测试:释放资源,关闭各种仪器的状态", + "bbox": [ + 148, + 171, + 609, + 194 + ], + "page_idx": 1 + }, + { + "type": "text", + "text": "表 1: 全壳测试报告模板", + "bbox": [ + 450, + 202, + 665, + 222 + ], + "page_idx": 1 + }, + { + "type": "table", + "img_path": "images/13e3fab38868d97ba85faed2dc5ae88728483a29d223074fac0122102d00930e.jpg", + "table_caption": [], + "table_footnote": [], + "table_body": "
", + "bbox": [ + 0, + 325, + 676, + 902 + ], + "page_idx": 1 + }, + { + "type": "page_number", + "text": "第2页共4页", + "bbox": [ + 473, + 928, + 601, + 946 + ], + "page_idx": 1 + }, + { + "type": "table", + "img_path": "", + "table_caption": [], + "table_footnote": [], + "bbox": [ + 0, + 106, + 676, + 898 + ], + "page_idx": 2 + }, + { + "type": "page_number", + "text": "第3页共4页", + "bbox": [ + 473, + 928, + 601, + 946 + ], + "page_idx": 2 + }, + { + "type": "table", + "img_path": "", + "table_caption": [], + "table_footnote": [], + "bbox": [ + 0, + 104, + 676, + 371 + ], + "page_idx": 3 + }, + { + "type": "text", + "text": "表 1: 全壳测试报告模板", + "bbox": [ + 450, + 401, + 665, + 420 + ], + "page_idx": 3 + }, + { + "type": "page_number", + "text": "第4页共4页", + "bbox": [ + 473, + 928, + 601, + 946 + ], + "page_idx": 3 + } +] \ No newline at end of file diff --git a/backend/planner/mineru_result/原镜频测试用例参考/656d4dd7-772c-4257-a526-cb1ce30d52f2_model.json b/backend/planner/mineru_result/原镜频测试用例参考/656d4dd7-772c-4257-a526-cb1ce30d52f2_model.json new file mode 100644 index 0000000..3645b42 --- /dev/null +++ b/backend/planner/mineru_result/原镜频测试用例参考/656d4dd7-772c-4257-a526-cb1ce30d52f2_model.json @@ -0,0 +1,296 @@ +[ + [ + { + "type": "title", + "bbox": [ + 0.134, + 0.118, + 0.344, + 0.143 + ], + "angle": 0, + "content": "场景1:测试用例" + }, + { + "type": "text", + "bbox": [ + 0.133, + 0.162, + 0.906, + 0.263 + ], + "angle": 0, + "content": "测试器件说明:测试中包含的五个核心器件五个核心仪器:频谱分析仪、信号源、开关矩阵、直流电源、示波器。Dut有SC频段接口和X频段接口,通过配置开关矩阵可以实现仪器间连接的更改。" + }, + { + "type": "text", + "bbox": [ + 0.206, + 0.285, + 0.452, + 0.308 + ], + "angle": 0, + "content": "本次测试项目共有三项:" + }, + { + "type": "text", + "bbox": [ + 0.133, + 0.323, + 0.892, + 0.378 + ], + "angle": 0, + "content": "a)上电测试:连接好各个设备,检查各个器件的工作情况,设置OCP,OVP,等等操作。" + }, + { + "type": "text", + "bbox": [ + 0.133, + 0.388, + 0.874, + 0.527 + ], + "angle": 0, + "content": "b)镜频测试:DUT电源供电28V,电流2.9A;测试频段:SC波段(2.7GHz~6.2GHz)和X波段(8GHz~12GHz);频谱仪SPAN=500MHz;信号源RF Power:SC频段=-25+线损+30(衰减器值);X频段=-40+线损+30(衰减器值);" + }, + { + "type": "list", + "bbox": [ + 0.133, + 0.323, + 0.892, + 0.527 + ], + "angle": 0, + "content": null + }, + { + "type": "text", + "bbox": [ + 0.133, + 0.541, + 0.903, + 0.641 + ], + "angle": 0, + "content": "测试内容:例如SC波段信号源power \\(= -25\\mathrm{dBm}\\),\\(f = 2.7\\mathrm{GHz}\\),频谱分析仪 \\(f = 2.7\\mathrm{GHz}\\),读取频谱分析仪Max Peak功率值P1;信号源功率及频率保持不变,频谱分析仪 \\(f = 3.84\\mathrm{GHz}\\),读取频谱分析仪Max Peak功率值P2。" + }, + { + "type": "text", + "bbox": [ + 0.205, + 0.657, + 0.657, + 0.679 + ], + "angle": 0, + "content": "本次测试信号源在以下四个频点上进行测试;" + }, + { + "type": "text", + "bbox": [ + 0.205, + 0.696, + 0.597, + 0.716 + ], + "angle": 0, + "content": "2.7GHz 时频谱仪在 2.7GHz 和 3.88GHz" + }, + { + "type": "text", + "bbox": [ + 0.205, + 0.734, + 0.596, + 0.755 + ], + "angle": 0, + "content": "6.2GHz 时频谱仪在 6.2GHz 和 5.88GHz" + }, + { + "type": "list", + "bbox": [ + 0.205, + 0.696, + 0.597, + 0.755 + ], + "angle": 0, + "content": null + }, + { + "type": "text", + "bbox": [ + 0.205, + 0.773, + 0.545, + 0.793 + ], + "angle": 0, + "content": "8GHz 时频谱仪在 8GHz 和 11GHz" + }, + { + "type": "text", + "bbox": [ + 0.206, + 0.811, + 0.567, + 0.831 + ], + "angle": 0, + "content": "12GHz 时频谱仪在 12GHz 和 15GHz" + }, + { + "type": "text", + "bbox": [ + 0.205, + 0.849, + 0.633, + 0.87 + ], + "angle": 0, + "content": "注意:镜频测试中不需要体现线缆损耗值。" + }, + { + "type": "text", + "bbox": [ + 0.205, + 0.887, + 0.89, + 0.909 + ], + "angle": 0, + "content": "SC 波段, DUT 在频率 \\(2.7 \\mathrm{GHz}\\) 的镜像抑制比= (P1-P2) >7dB 判定合" + }, + { + "type": "page_number", + "bbox": [ + 0.473, + 0.929, + 0.603, + 0.948 + ], + "angle": 0, + "content": "第1页共4页" + } + ], + [ + { + "type": "text", + "bbox": [ + 0.134, + 0.11, + 0.378, + 0.132 + ], + "angle": 0, + "content": "格。不合格报告中标红。" + }, + { + "type": "text", + "bbox": [ + 0.15, + 0.172, + 0.611, + 0.195 + ], + "angle": 0, + "content": "c)断电测试:释放资源,关闭各种仪器的状态" + }, + { + "type": "text", + "bbox": [ + 0.451, + 0.203, + 0.666, + 0.223 + ], + "angle": 0, + "content": "表 1: 全壳测试报告模板" + }, + { + "type": "table", + "bbox": [ + 0.0, + 0.326, + 0.677, + 0.904 + ], + "angle": 0, + "content": "
" + }, + { + "type": "page_number", + "bbox": [ + 0.474, + 0.929, + 0.602, + 0.947 + ], + "angle": 0, + "content": "第2页共4页" + } + ], + [ + { + "type": "table", + "bbox": [ + 0.0, + 0.107, + 0.677, + 0.9 + ], + "angle": 0, + "content": "
" + }, + { + "type": "page_number", + "bbox": [ + 0.474, + 0.929, + 0.602, + 0.947 + ], + "angle": 0, + "content": "第3页共4页" + } + ], + [ + { + "type": "table", + "bbox": [ + 0.0, + 0.106, + 0.677, + 0.372 + ], + "angle": 0, + "content": "
" + }, + { + "type": "table_caption", + "bbox": [ + 0.452, + 0.402, + 0.666, + 0.421 + ], + "angle": 0, + "content": "表 1: 全壳测试报告模板" + }, + { + "type": "page_number", + "bbox": [ + 0.474, + 0.929, + 0.602, + 0.947 + ], + "angle": 0, + "content": "第4页共4页" + } + ] +] \ No newline at end of file diff --git a/backend/planner/mineru_result/原镜频测试用例参考/656d4dd7-772c-4257-a526-cb1ce30d52f2_origin.pdf b/backend/planner/mineru_result/原镜频测试用例参考/656d4dd7-772c-4257-a526-cb1ce30d52f2_origin.pdf new file mode 100644 index 0000000..076ae3d Binary files /dev/null and b/backend/planner/mineru_result/原镜频测试用例参考/656d4dd7-772c-4257-a526-cb1ce30d52f2_origin.pdf differ diff --git a/backend/planner/mineru_result/原镜频测试用例参考/6ce4a356-a695-4577-bfce-3834057176f0_content_list.json b/backend/planner/mineru_result/原镜频测试用例参考/6ce4a356-a695-4577-bfce-3834057176f0_content_list.json new file mode 100644 index 0000000..df54d53 --- /dev/null +++ b/backend/planner/mineru_result/原镜频测试用例参考/6ce4a356-a695-4577-bfce-3834057176f0_content_list.json @@ -0,0 +1,260 @@ +[ + { + "type": "text", + "text": "场景1:测试用例", + "text_level": 1, + "bbox": [ + 133, + 117, + 343, + 142 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "测试器件说明:测试中包含的五个核心器件五个核心仪器:频谱分析仪、信号源、开关矩阵、直流电源、示波器。Dut有SC频段接口和X频段接口,通过配置开关矩阵可以实现仪器间连接的更改。", + "bbox": [ + 132, + 161, + 905, + 262 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "本次测试项目共有三项:", + "bbox": [ + 205, + 284, + 450, + 306 + ], + "page_idx": 0 + }, + { + "type": "list", + "sub_type": "text", + "list_items": [ + "a)上电测试:连接好各个设备,检查各个器件的工作情况,设置OCP,OVP,等等操作。", + "b)镜频测试:DUT电源供电28V,电流2.9A;测试频段:SC波段(2.7GHz~6.2GHz)和X波段(8GHz~12GHz);频谱仪SPAN=500MHz;信号源RF Power:SC频段=-25+线损+30(衰减器值);X频段=-40+线损+30(衰减器值);" + ], + "bbox": [ + 132, + 321, + 890, + 526 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "测试内容:例如SC波段信号源power $= -25\\mathrm{dBm}$ , $f = 2.7\\mathrm{GHz}$ ,频谱分析仪 $f = 2.7\\mathrm{GHz}$ ,读取频谱分析仪Max Peak功率值P1;信号源功率及频率保持不变,频谱分析仪 $f = 3.84\\mathrm{GHz}$ ,读取频谱分析仪Max Peak功率值P2。", + "bbox": [ + 132, + 540, + 901, + 640 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "本次测试信号源在以下四个频点上进行测试;", + "bbox": [ + 204, + 656, + 656, + 678 + ], + "page_idx": 0 + }, + { + "type": "list", + "sub_type": "text", + "list_items": [ + "2.7GHz 时频谱仪在 2.7GHz 和 3.88GHz", + "6.2GHz 时频谱仪在 6.2GHz 和 5.88GHz" + ], + "bbox": [ + 204, + 695, + 596, + 753 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "8GHz 时频谱仪在 8GHz 和 11GHz", + "bbox": [ + 204, + 772, + 544, + 792 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "12GHz 时频谱仪在 12GHz 和 15GHz", + "bbox": [ + 205, + 810, + 566, + 830 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "注意:镜频测试中不需要体现线缆损耗值。", + "bbox": [ + 204, + 848, + 632, + 869 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "SC 波段, DUT 在频率 $2.7 \\mathrm{GHz}$ 的镜像抑制比= (P1-P2) >7dB 判定合", + "bbox": [ + 204, + 886, + 888, + 907 + ], + "page_idx": 0 + }, + { + "type": "page_number", + "text": "第1页共4页", + "bbox": [ + 472, + 928, + 602, + 946 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "格。不合格报告中标红。", + "bbox": [ + 133, + 108, + 377, + 131 + ], + "page_idx": 1 + }, + { + "type": "text", + "text": "c)断电测试:释放资源,关闭各种仪器的状态", + "bbox": [ + 148, + 171, + 609, + 194 + ], + "page_idx": 1 + }, + { + "type": "text", + "text": "表 1: 全壳测试报告模板", + "bbox": [ + 450, + 202, + 665, + 222 + ], + "page_idx": 1 + }, + { + "type": "table", + "img_path": "images/13e3fab38868d97ba85faed2dc5ae88728483a29d223074fac0122102d00930e.jpg", + "table_caption": [], + "table_footnote": [], + "table_body": "
", + "bbox": [ + 0, + 325, + 676, + 902 + ], + "page_idx": 1 + }, + { + "type": "page_number", + "text": "第2页共4页", + "bbox": [ + 473, + 928, + 601, + 946 + ], + "page_idx": 1 + }, + { + "type": "table", + "img_path": "", + "table_caption": [], + "table_footnote": [], + "bbox": [ + 0, + 106, + 676, + 898 + ], + "page_idx": 2 + }, + { + "type": "page_number", + "text": "第3页共4页", + "bbox": [ + 473, + 928, + 601, + 946 + ], + "page_idx": 2 + }, + { + "type": "table", + "img_path": "", + "table_caption": [], + "table_footnote": [], + "bbox": [ + 0, + 104, + 676, + 371 + ], + "page_idx": 3 + }, + { + "type": "text", + "text": "表 1: 全壳测试报告模板", + "bbox": [ + 450, + 401, + 665, + 420 + ], + "page_idx": 3 + }, + { + "type": "page_number", + "text": "第4页共4页", + "bbox": [ + 473, + 928, + 601, + 946 + ], + "page_idx": 3 + } +] \ No newline at end of file diff --git a/backend/planner/mineru_result/原镜频测试用例参考/6ce4a356-a695-4577-bfce-3834057176f0_model.json b/backend/planner/mineru_result/原镜频测试用例参考/6ce4a356-a695-4577-bfce-3834057176f0_model.json new file mode 100644 index 0000000..b637b59 --- /dev/null +++ b/backend/planner/mineru_result/原镜频测试用例参考/6ce4a356-a695-4577-bfce-3834057176f0_model.json @@ -0,0 +1,296 @@ +[ + [ + { + "type": "title", + "bbox": [ + 0.134, + 0.118, + 0.344, + 0.143 + ], + "angle": 0, + "content": "场景1:测试用例" + }, + { + "type": "text", + "bbox": [ + 0.133, + 0.162, + 0.906, + 0.263 + ], + "angle": 0, + "content": "测试器件说明:测试中包含的五个核心器件五个核心仪器:频谱分析仪、信号源、开关矩阵、直流电源、示波器。Dut有SC频段接口和X频段接口,通过配置开关矩阵可以实现仪器间连接的更改。" + }, + { + "type": "text", + "bbox": [ + 0.206, + 0.285, + 0.452, + 0.308 + ], + "angle": 0, + "content": "本次测试项目共有三项:" + }, + { + "type": "text", + "bbox": [ + 0.133, + 0.323, + 0.892, + 0.378 + ], + "angle": 0, + "content": "a)上电测试:连接好各个设备,检查各个器件的工作情况,设置OCP,OVP,等等操作。" + }, + { + "type": "text", + "bbox": [ + 0.133, + 0.388, + 0.874, + 0.527 + ], + "angle": 0, + "content": "b)镜频测试:DUT电源供电28V,电流2.9A;测试频段:SC波段(2.7GHz~6.2GHz)和X波段(8GHz~12GHz);频谱仪SPAN=500MHz;信号源RF Power:SC频段=-25+线损+30(衰减器值);X频段=-40+线损+30(衰减器值);" + }, + { + "type": "list", + "bbox": [ + 0.133, + 0.323, + 0.892, + 0.527 + ], + "angle": 0, + "content": null + }, + { + "type": "text", + "bbox": [ + 0.133, + 0.541, + 0.903, + 0.641 + ], + "angle": 0, + "content": "测试内容:例如SC波段信号源power \\(= -25\\mathrm{dBm}\\),\\(f = 2.7\\mathrm{GHz}\\),频谱分析仪 \\(f = 2.7\\mathrm{GHz}\\),读取频谱分析仪Max Peak功率值P1;信号源功率及频率保持不变,频谱分析仪 \\(f = 3.84\\mathrm{GHz}\\),读取频谱分析仪Max Peak功率值P2。" + }, + { + "type": "text", + "bbox": [ + 0.205, + 0.657, + 0.657, + 0.679 + ], + "angle": 0, + "content": "本次测试信号源在以下四个频点上进行测试;" + }, + { + "type": "text", + "bbox": [ + 0.205, + 0.696, + 0.597, + 0.716 + ], + "angle": 0, + "content": "2.7GHz 时频谱仪在 2.7GHz 和 3.88GHz" + }, + { + "type": "text", + "bbox": [ + 0.205, + 0.734, + 0.596, + 0.755 + ], + "angle": 0, + "content": "6.2GHz 时频谱仪在 6.2GHz 和 5.88GHz" + }, + { + "type": "list", + "bbox": [ + 0.205, + 0.696, + 0.597, + 0.755 + ], + "angle": 0, + "content": null + }, + { + "type": "text", + "bbox": [ + 0.205, + 0.773, + 0.545, + 0.793 + ], + "angle": 0, + "content": "8GHz 时频谱仪在 8GHz 和 11GHz" + }, + { + "type": "text", + "bbox": [ + 0.206, + 0.811, + 0.567, + 0.832 + ], + "angle": 0, + "content": "12GHz 时频谱仪在 12GHz 和 15GHz" + }, + { + "type": "text", + "bbox": [ + 0.205, + 0.849, + 0.633, + 0.87 + ], + "angle": 0, + "content": "注意:镜频测试中不需要体现线缆损耗值。" + }, + { + "type": "text", + "bbox": [ + 0.205, + 0.887, + 0.89, + 0.909 + ], + "angle": 0, + "content": "SC 波段, DUT 在频率 \\(2.7 \\mathrm{GHz}\\) 的镜像抑制比= (P1-P2) >7dB 判定合" + }, + { + "type": "page_number", + "bbox": [ + 0.473, + 0.929, + 0.603, + 0.948 + ], + "angle": 0, + "content": "第1页共4页" + } + ], + [ + { + "type": "text", + "bbox": [ + 0.134, + 0.109, + 0.379, + 0.132 + ], + "angle": 0, + "content": "格。不合格报告中标红。" + }, + { + "type": "text", + "bbox": [ + 0.15, + 0.172, + 0.611, + 0.195 + ], + "angle": 0, + "content": "c)断电测试:释放资源,关闭各种仪器的状态" + }, + { + "type": "text", + "bbox": [ + 0.451, + 0.203, + 0.666, + 0.223 + ], + "angle": 0, + "content": "表 1: 全壳测试报告模板" + }, + { + "type": "table", + "bbox": [ + 0.0, + 0.326, + 0.677, + 0.904 + ], + "angle": 0, + "content": "
" + }, + { + "type": "page_number", + "bbox": [ + 0.474, + 0.929, + 0.602, + 0.947 + ], + "angle": 0, + "content": "第2页共4页" + } + ], + [ + { + "type": "table", + "bbox": [ + 0.0, + 0.107, + 0.677, + 0.9 + ], + "angle": 0, + "content": "
" + }, + { + "type": "page_number", + "bbox": [ + 0.474, + 0.929, + 0.602, + 0.947 + ], + "angle": 0, + "content": "第3页共4页" + } + ], + [ + { + "type": "table", + "bbox": [ + 0.0, + 0.106, + 0.677, + 0.372 + ], + "angle": 0, + "content": "
" + }, + { + "type": "table_caption", + "bbox": [ + 0.452, + 0.402, + 0.666, + 0.421 + ], + "angle": 0, + "content": "表 1: 全壳测试报告模板" + }, + { + "type": "page_number", + "bbox": [ + 0.474, + 0.929, + 0.602, + 0.947 + ], + "angle": 0, + "content": "第4页共4页" + } + ] +] \ No newline at end of file diff --git a/backend/planner/mineru_result/原镜频测试用例参考/6ce4a356-a695-4577-bfce-3834057176f0_origin.pdf b/backend/planner/mineru_result/原镜频测试用例参考/6ce4a356-a695-4577-bfce-3834057176f0_origin.pdf new file mode 100644 index 0000000..3996c6e Binary files /dev/null and b/backend/planner/mineru_result/原镜频测试用例参考/6ce4a356-a695-4577-bfce-3834057176f0_origin.pdf differ diff --git a/backend/planner/mineru_result/原镜频测试用例参考/710b0e9d-1b8c-4aa0-b710-00c597be37d4_content_list.json b/backend/planner/mineru_result/原镜频测试用例参考/710b0e9d-1b8c-4aa0-b710-00c597be37d4_content_list.json new file mode 100644 index 0000000..63f54fe --- /dev/null +++ b/backend/planner/mineru_result/原镜频测试用例参考/710b0e9d-1b8c-4aa0-b710-00c597be37d4_content_list.json @@ -0,0 +1,260 @@ +[ + { + "type": "text", + "text": "场景1:测试用例", + "text_level": 1, + "bbox": [ + 133, + 117, + 343, + 142 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "测试器件说明:测试中包含的五个核心器件五个核心仪器:频谱分析仪、信号源、开关矩阵、直流电源、示波器。Dut有SC频段接口和X频段接口,通过配置开关矩阵可以实现仪器间连接的更改。", + "bbox": [ + 132, + 161, + 905, + 262 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "本次测试项目共有三项:", + "bbox": [ + 205, + 284, + 450, + 306 + ], + "page_idx": 0 + }, + { + "type": "list", + "sub_type": "text", + "list_items": [ + "a)上电测试:连接好各个设备,检查各个器件的工作情况,设置OCP,OVP等等操作。", + "b)镜频测试:DUT电源供电28V,电流2.9A;测试频段:SC波段(2.7GHz~6.2GHz)和X波段(8GHz~12GHz);频谱仪SPAN=500MHz;信号源RF Power:SC频段=-25+线损+30(衰减器值);X频段=-40+线损+30(衰减器值);" + ], + "bbox": [ + 132, + 321, + 890, + 526 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "测试内容:例如SC波段信号源power=-25dBm,f=2.7GHz,频谱分析仪f=2.7GHz,读取频谱分析仪Max Peak功率值P1;信号源功率及频率保持不变,频谱分析仪f-=3.84GHz,读取频谱分析仪Max Peak功率值P2。", + "bbox": [ + 132, + 540, + 898, + 642 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "本次测试信号源在以下四个频点上进行测试;", + "bbox": [ + 204, + 656, + 656, + 678 + ], + "page_idx": 0 + }, + { + "type": "list", + "sub_type": "text", + "list_items": [ + "2.7GHz 时频谱仪在 2.7GHz 和 3.88GHz", + "6.2GHz 时频谱仪在 6.2GHz 和 5.88GHz" + ], + "bbox": [ + 204, + 695, + 596, + 753 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "8GHz 时频谱仪在 8GHz 和 11GHz", + "bbox": [ + 204, + 772, + 544, + 792 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "12GHz 时频谱仪在 12GHz 和 15GHz", + "bbox": [ + 205, + 810, + 566, + 830 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "注意:镜频测试中不需要体现线缆损耗值。", + "bbox": [ + 204, + 848, + 632, + 869 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "SC 波段, DUT 在频率 $2.7 \\mathrm{GHz}$ 的镜像抑制比= (P1-P2) >7dB 判定合", + "bbox": [ + 204, + 886, + 888, + 907 + ], + "page_idx": 0 + }, + { + "type": "page_number", + "text": "第1页共4页", + "bbox": [ + 473, + 928, + 602, + 946 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "格。不合格报告中标红。", + "bbox": [ + 133, + 109, + 377, + 131 + ], + "page_idx": 1 + }, + { + "type": "text", + "text": "c)断电测试:释放资源,关闭各种仪器的状态", + "bbox": [ + 148, + 171, + 609, + 194 + ], + "page_idx": 1 + }, + { + "type": "text", + "text": "表 1: 全壳测试报告模板", + "bbox": [ + 450, + 202, + 665, + 222 + ], + "page_idx": 1 + }, + { + "type": "table", + "img_path": "images/13e3fab38868d97ba85faed2dc5ae88728483a29d223074fac0122102d00930e.jpg", + "table_caption": [], + "table_footnote": [], + "table_body": "
", + "bbox": [ + 0, + 325, + 676, + 902 + ], + "page_idx": 1 + }, + { + "type": "page_number", + "text": "第2页共4页", + "bbox": [ + 473, + 928, + 601, + 946 + ], + "page_idx": 1 + }, + { + "type": "table", + "img_path": "", + "table_caption": [], + "table_footnote": [], + "bbox": [ + 0, + 106, + 676, + 898 + ], + "page_idx": 2 + }, + { + "type": "page_number", + "text": "第3页共4页", + "bbox": [ + 473, + 928, + 601, + 946 + ], + "page_idx": 2 + }, + { + "type": "table", + "img_path": "", + "table_caption": [], + "table_footnote": [], + "bbox": [ + 0, + 104, + 676, + 371 + ], + "page_idx": 3 + }, + { + "type": "text", + "text": "表 1: 全壳测试报告模板", + "bbox": [ + 450, + 401, + 665, + 420 + ], + "page_idx": 3 + }, + { + "type": "page_number", + "text": "第4页共4页", + "bbox": [ + 473, + 928, + 601, + 946 + ], + "page_idx": 3 + } +] \ No newline at end of file diff --git a/backend/planner/mineru_result/原镜频测试用例参考/710b0e9d-1b8c-4aa0-b710-00c597be37d4_model.json b/backend/planner/mineru_result/原镜频测试用例参考/710b0e9d-1b8c-4aa0-b710-00c597be37d4_model.json new file mode 100644 index 0000000..8da2e66 --- /dev/null +++ b/backend/planner/mineru_result/原镜频测试用例参考/710b0e9d-1b8c-4aa0-b710-00c597be37d4_model.json @@ -0,0 +1,296 @@ +[ + [ + { + "type": "title", + "bbox": [ + 0.134, + 0.118, + 0.344, + 0.143 + ], + "angle": 0, + "content": "场景1:测试用例" + }, + { + "type": "text", + "bbox": [ + 0.133, + 0.162, + 0.906, + 0.263 + ], + "angle": 0, + "content": "测试器件说明:测试中包含的五个核心器件五个核心仪器:频谱分析仪、信号源、开关矩阵、直流电源、示波器。Dut有SC频段接口和X频段接口,通过配置开关矩阵可以实现仪器间连接的更改。" + }, + { + "type": "text", + "bbox": [ + 0.206, + 0.285, + 0.452, + 0.308 + ], + "angle": 0, + "content": "本次测试项目共有三项:" + }, + { + "type": "text", + "bbox": [ + 0.133, + 0.323, + 0.892, + 0.375 + ], + "angle": 0, + "content": "a)上电测试:连接好各个设备,检查各个器件的工作情况,设置OCP,OVP等等操作。" + }, + { + "type": "text", + "bbox": [ + 0.133, + 0.388, + 0.874, + 0.527 + ], + "angle": 0, + "content": "b)镜频测试:DUT电源供电28V,电流2.9A;测试频段:SC波段(2.7GHz~6.2GHz)和X波段(8GHz~12GHz);频谱仪SPAN=500MHz;信号源RF Power:SC频段=-25+线损+30(衰减器值);X频段=-40+线损+30(衰减器值);" + }, + { + "type": "list", + "bbox": [ + 0.133, + 0.323, + 0.892, + 0.527 + ], + "angle": 0, + "content": null + }, + { + "type": "text", + "bbox": [ + 0.133, + 0.541, + 0.9, + 0.643 + ], + "angle": 0, + "content": "测试内容:例如SC波段信号源power=-25dBm,f=2.7GHz,频谱分析仪f=2.7GHz,读取频谱分析仪Max Peak功率值P1;信号源功率及频率保持不变,频谱分析仪f-=3.84GHz,读取频谱分析仪Max Peak功率值P2。" + }, + { + "type": "text", + "bbox": [ + 0.205, + 0.657, + 0.657, + 0.679 + ], + "angle": 0, + "content": "本次测试信号源在以下四个频点上进行测试;" + }, + { + "type": "text", + "bbox": [ + 0.205, + 0.696, + 0.597, + 0.716 + ], + "angle": 0, + "content": "2.7GHz 时频谱仪在 2.7GHz 和 3.88GHz" + }, + { + "type": "text", + "bbox": [ + 0.205, + 0.734, + 0.596, + 0.755 + ], + "angle": 0, + "content": "6.2GHz 时频谱仪在 6.2GHz 和 5.88GHz" + }, + { + "type": "list", + "bbox": [ + 0.205, + 0.696, + 0.597, + 0.755 + ], + "angle": 0, + "content": null + }, + { + "type": "text", + "bbox": [ + 0.205, + 0.773, + 0.545, + 0.793 + ], + "angle": 0, + "content": "8GHz 时频谱仪在 8GHz 和 11GHz" + }, + { + "type": "text", + "bbox": [ + 0.206, + 0.811, + 0.567, + 0.832 + ], + "angle": 0, + "content": "12GHz 时频谱仪在 12GHz 和 15GHz" + }, + { + "type": "text", + "bbox": [ + 0.205, + 0.849, + 0.633, + 0.87 + ], + "angle": 0, + "content": "注意:镜频测试中不需要体现线缆损耗值。" + }, + { + "type": "text", + "bbox": [ + 0.205, + 0.887, + 0.89, + 0.909 + ], + "angle": 0, + "content": "SC 波段, DUT 在频率 \\(2.7 \\mathrm{GHz}\\) 的镜像抑制比= (P1-P2) >7dB 判定合" + }, + { + "type": "page_number", + "bbox": [ + 0.474, + 0.929, + 0.603, + 0.948 + ], + "angle": 0, + "content": "第1页共4页" + } + ], + [ + { + "type": "text", + "bbox": [ + 0.134, + 0.11, + 0.378, + 0.132 + ], + "angle": 0, + "content": "格。不合格报告中标红。" + }, + { + "type": "text", + "bbox": [ + 0.15, + 0.172, + 0.611, + 0.195 + ], + "angle": 0, + "content": "c)断电测试:释放资源,关闭各种仪器的状态" + }, + { + "type": "text", + "bbox": [ + 0.451, + 0.203, + 0.666, + 0.223 + ], + "angle": 0, + "content": "表 1: 全壳测试报告模板" + }, + { + "type": "table", + "bbox": [ + 0.0, + 0.326, + 0.677, + 0.904 + ], + "angle": 0, + "content": "
" + }, + { + "type": "page_number", + "bbox": [ + 0.474, + 0.929, + 0.602, + 0.947 + ], + "angle": 0, + "content": "第2页共4页" + } + ], + [ + { + "type": "table", + "bbox": [ + 0.0, + 0.107, + 0.677, + 0.9 + ], + "angle": 0, + "content": "
" + }, + { + "type": "page_number", + "bbox": [ + 0.474, + 0.929, + 0.602, + 0.947 + ], + "angle": 0, + "content": "第3页共4页" + } + ], + [ + { + "type": "table", + "bbox": [ + 0.0, + 0.106, + 0.677, + 0.372 + ], + "angle": 0, + "content": "
" + }, + { + "type": "table_caption", + "bbox": [ + 0.452, + 0.402, + 0.666, + 0.421 + ], + "angle": 0, + "content": "表 1: 全壳测试报告模板" + }, + { + "type": "page_number", + "bbox": [ + 0.474, + 0.929, + 0.602, + 0.947 + ], + "angle": 0, + "content": "第4页共4页" + } + ] +] \ No newline at end of file diff --git a/backend/planner/mineru_result/原镜频测试用例参考/710b0e9d-1b8c-4aa0-b710-00c597be37d4_origin.pdf b/backend/planner/mineru_result/原镜频测试用例参考/710b0e9d-1b8c-4aa0-b710-00c597be37d4_origin.pdf new file mode 100644 index 0000000..825cb39 Binary files /dev/null and b/backend/planner/mineru_result/原镜频测试用例参考/710b0e9d-1b8c-4aa0-b710-00c597be37d4_origin.pdf differ diff --git a/backend/planner/mineru_result/原镜频测试用例参考/71aac8bb-e405-4e1b-bc25-8af21830a1d9_content_list.json b/backend/planner/mineru_result/原镜频测试用例参考/71aac8bb-e405-4e1b-bc25-8af21830a1d9_content_list.json new file mode 100644 index 0000000..b9dfe74 --- /dev/null +++ b/backend/planner/mineru_result/原镜频测试用例参考/71aac8bb-e405-4e1b-bc25-8af21830a1d9_content_list.json @@ -0,0 +1,260 @@ +[ + { + "type": "text", + "text": "场景1:测试用例", + "text_level": 1, + "bbox": [ + 133, + 117, + 343, + 142 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "测试器件说明:测试中包含的五个核心器件五个核心仪器:频谱分析仪、信号源、开关矩阵、直流电源、示波器。Dut有SC频段接口和X频段接口,通过配置开关矩阵可以实现仪器间连接的更改。", + "bbox": [ + 132, + 161, + 905, + 262 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "本次测试项目共有三项:", + "bbox": [ + 205, + 284, + 450, + 306 + ], + "page_idx": 0 + }, + { + "type": "list", + "sub_type": "text", + "list_items": [ + "a)上电测试:连接好各个设备,检查各个器件的工作情况,设置OCP,OVP等等操作。", + "b)镜频测试:DUT电源供电28V,电流2.9A;测试频段:SC波段(2.7GHz~6.2GHz)和X波段(8GHz~12GHz);频谱仪SPAN=500MHz;信号源RF Power:SC频段=-25+线损+30(衰减器值);X频段=-40+线损+30(衰减器值);" + ], + "bbox": [ + 132, + 321, + 890, + 526 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "测试内容:例如SC波段信号源power=-25dBm,f=2.7GHz,频谱分析仪f=2.7GHz,读取频谱分析仪Max Peak功率值P1;信号源功率及频率保持不变,频谱分析仪f-=3.84GHz,读取频谱分析仪Max Peak功率值P2。", + "bbox": [ + 132, + 540, + 898, + 640 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "本次测试信号源在以下四个频点上进行测试;", + "bbox": [ + 204, + 656, + 656, + 676 + ], + "page_idx": 0 + }, + { + "type": "list", + "sub_type": "text", + "list_items": [ + "2.7GHz 时频谱仪在 2.7GHz 和 3.88GHz", + "6.2GHz 时频谱仪在 6.2GHz 和 5.88GHz" + ], + "bbox": [ + 204, + 695, + 596, + 753 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "8GHz 时频谱仪在 8GHz 和 11GHz", + "bbox": [ + 204, + 772, + 544, + 792 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "12GHz 时频谱仪在 12GHz 和 15GHz", + "bbox": [ + 205, + 810, + 566, + 829 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "注意:镜频测试中不需要体现线缆损耗值。", + "bbox": [ + 204, + 848, + 632, + 869 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "SC 波段, DUT 在频率 $2.7 \\mathrm{GHz}$ 的镜像抑制比= (P1-P2) >7dB 判定合", + "bbox": [ + 204, + 886, + 888, + 907 + ], + "page_idx": 0 + }, + { + "type": "page_number", + "text": "第1页共4页", + "bbox": [ + 472, + 928, + 602, + 946 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "格。不合格报告中标红。", + "bbox": [ + 133, + 108, + 377, + 131 + ], + "page_idx": 1 + }, + { + "type": "text", + "text": "c)断电测试:释放资源,关闭各种仪器的状态", + "bbox": [ + 148, + 171, + 609, + 194 + ], + "page_idx": 1 + }, + { + "type": "text", + "text": "表 1: 全壳测试报告模板", + "bbox": [ + 450, + 202, + 665, + 222 + ], + "page_idx": 1 + }, + { + "type": "table", + "img_path": "images/13e3fab38868d97ba85faed2dc5ae88728483a29d223074fac0122102d00930e.jpg", + "table_caption": [], + "table_footnote": [], + "table_body": "
", + "bbox": [ + 0, + 325, + 676, + 902 + ], + "page_idx": 1 + }, + { + "type": "page_number", + "text": "第2页共4页", + "bbox": [ + 473, + 928, + 601, + 946 + ], + "page_idx": 1 + }, + { + "type": "table", + "img_path": "", + "table_caption": [], + "table_footnote": [], + "bbox": [ + 0, + 106, + 676, + 898 + ], + "page_idx": 2 + }, + { + "type": "page_number", + "text": "第3页共4页", + "bbox": [ + 473, + 928, + 601, + 946 + ], + "page_idx": 2 + }, + { + "type": "table", + "img_path": "", + "table_caption": [], + "table_footnote": [], + "bbox": [ + 0, + 104, + 676, + 371 + ], + "page_idx": 3 + }, + { + "type": "text", + "text": "表 1: 全壳测试报告模板", + "bbox": [ + 450, + 401, + 665, + 420 + ], + "page_idx": 3 + }, + { + "type": "page_number", + "text": "第4页共4页", + "bbox": [ + 473, + 928, + 601, + 946 + ], + "page_idx": 3 + } +] \ No newline at end of file diff --git a/backend/planner/mineru_result/原镜频测试用例参考/71aac8bb-e405-4e1b-bc25-8af21830a1d9_model.json b/backend/planner/mineru_result/原镜频测试用例参考/71aac8bb-e405-4e1b-bc25-8af21830a1d9_model.json new file mode 100644 index 0000000..a151124 --- /dev/null +++ b/backend/planner/mineru_result/原镜频测试用例参考/71aac8bb-e405-4e1b-bc25-8af21830a1d9_model.json @@ -0,0 +1,296 @@ +[ + [ + { + "type": "title", + "bbox": [ + 0.134, + 0.118, + 0.344, + 0.143 + ], + "angle": 0, + "content": "场景1:测试用例" + }, + { + "type": "text", + "bbox": [ + 0.133, + 0.162, + 0.906, + 0.263 + ], + "angle": 0, + "content": "测试器件说明:测试中包含的五个核心器件五个核心仪器:频谱分析仪、信号源、开关矩阵、直流电源、示波器。Dut有SC频段接口和X频段接口,通过配置开关矩阵可以实现仪器间连接的更改。" + }, + { + "type": "text", + "bbox": [ + 0.206, + 0.285, + 0.452, + 0.308 + ], + "angle": 0, + "content": "本次测试项目共有三项:" + }, + { + "type": "text", + "bbox": [ + 0.133, + 0.323, + 0.892, + 0.375 + ], + "angle": 0, + "content": "a)上电测试:连接好各个设备,检查各个器件的工作情况,设置OCP,OVP等等操作。" + }, + { + "type": "text", + "bbox": [ + 0.133, + 0.388, + 0.874, + 0.527 + ], + "angle": 0, + "content": "b)镜频测试:DUT电源供电28V,电流2.9A;测试频段:SC波段(2.7GHz~6.2GHz)和X波段(8GHz~12GHz);频谱仪SPAN=500MHz;信号源RF Power:SC频段=-25+线损+30(衰减器值);X频段=-40+线损+30(衰减器值);" + }, + { + "type": "list", + "bbox": [ + 0.133, + 0.323, + 0.892, + 0.527 + ], + "angle": 0, + "content": null + }, + { + "type": "text", + "bbox": [ + 0.133, + 0.541, + 0.9, + 0.641 + ], + "angle": 0, + "content": "测试内容:例如SC波段信号源power=-25dBm,f=2.7GHz,频谱分析仪f=2.7GHz,读取频谱分析仪Max Peak功率值P1;信号源功率及频率保持不变,频谱分析仪f-=3.84GHz,读取频谱分析仪Max Peak功率值P2。" + }, + { + "type": "text", + "bbox": [ + 0.205, + 0.657, + 0.657, + 0.678 + ], + "angle": 0, + "content": "本次测试信号源在以下四个频点上进行测试;" + }, + { + "type": "text", + "bbox": [ + 0.205, + 0.696, + 0.597, + 0.716 + ], + "angle": 0, + "content": "2.7GHz 时频谱仪在 2.7GHz 和 3.88GHz" + }, + { + "type": "text", + "bbox": [ + 0.205, + 0.734, + 0.596, + 0.755 + ], + "angle": 0, + "content": "6.2GHz 时频谱仪在 6.2GHz 和 5.88GHz" + }, + { + "type": "list", + "bbox": [ + 0.205, + 0.696, + 0.597, + 0.755 + ], + "angle": 0, + "content": null + }, + { + "type": "text", + "bbox": [ + 0.205, + 0.773, + 0.545, + 0.793 + ], + "angle": 0, + "content": "8GHz 时频谱仪在 8GHz 和 11GHz" + }, + { + "type": "text", + "bbox": [ + 0.206, + 0.811, + 0.567, + 0.83 + ], + "angle": 0, + "content": "12GHz 时频谱仪在 12GHz 和 15GHz" + }, + { + "type": "text", + "bbox": [ + 0.205, + 0.849, + 0.633, + 0.87 + ], + "angle": 0, + "content": "注意:镜频测试中不需要体现线缆损耗值。" + }, + { + "type": "text", + "bbox": [ + 0.205, + 0.887, + 0.89, + 0.908 + ], + "angle": 0, + "content": "SC 波段, DUT 在频率 \\(2.7 \\mathrm{GHz}\\) 的镜像抑制比= (P1-P2) >7dB 判定合" + }, + { + "type": "page_number", + "bbox": [ + 0.473, + 0.929, + 0.603, + 0.948 + ], + "angle": 0, + "content": "第1页共4页" + } + ], + [ + { + "type": "text", + "bbox": [ + 0.134, + 0.109, + 0.379, + 0.132 + ], + "angle": 0, + "content": "格。不合格报告中标红。" + }, + { + "type": "text", + "bbox": [ + 0.15, + 0.172, + 0.611, + 0.195 + ], + "angle": 0, + "content": "c)断电测试:释放资源,关闭各种仪器的状态" + }, + { + "type": "text", + "bbox": [ + 0.451, + 0.203, + 0.666, + 0.223 + ], + "angle": 0, + "content": "表 1: 全壳测试报告模板" + }, + { + "type": "table", + "bbox": [ + 0.0, + 0.326, + 0.677, + 0.904 + ], + "angle": 0, + "content": "
" + }, + { + "type": "page_number", + "bbox": [ + 0.474, + 0.929, + 0.602, + 0.947 + ], + "angle": 0, + "content": "第2页共4页" + } + ], + [ + { + "type": "table", + "bbox": [ + 0.0, + 0.107, + 0.677, + 0.9 + ], + "angle": 0, + "content": "
" + }, + { + "type": "page_number", + "bbox": [ + 0.474, + 0.929, + 0.602, + 0.947 + ], + "angle": 0, + "content": "第3页共4页" + } + ], + [ + { + "type": "table", + "bbox": [ + 0.0, + 0.106, + 0.677, + 0.372 + ], + "angle": 0, + "content": "
" + }, + { + "type": "table_caption", + "bbox": [ + 0.452, + 0.402, + 0.666, + 0.421 + ], + "angle": 0, + "content": "表 1: 全壳测试报告模板" + }, + { + "type": "page_number", + "bbox": [ + 0.474, + 0.929, + 0.602, + 0.947 + ], + "angle": 0, + "content": "第4页共4页" + } + ] +] \ No newline at end of file diff --git a/backend/planner/mineru_result/原镜频测试用例参考/71aac8bb-e405-4e1b-bc25-8af21830a1d9_origin.pdf b/backend/planner/mineru_result/原镜频测试用例参考/71aac8bb-e405-4e1b-bc25-8af21830a1d9_origin.pdf new file mode 100644 index 0000000..e91ceb9 Binary files /dev/null and b/backend/planner/mineru_result/原镜频测试用例参考/71aac8bb-e405-4e1b-bc25-8af21830a1d9_origin.pdf differ diff --git a/backend/planner/mineru_result/原镜频测试用例参考/74cf4458-a1d1-47a1-a528-2af2eb16a653_content_list.json b/backend/planner/mineru_result/原镜频测试用例参考/74cf4458-a1d1-47a1-a528-2af2eb16a653_content_list.json new file mode 100644 index 0000000..2d6ad6a --- /dev/null +++ b/backend/planner/mineru_result/原镜频测试用例参考/74cf4458-a1d1-47a1-a528-2af2eb16a653_content_list.json @@ -0,0 +1,260 @@ +[ + { + "type": "text", + "text": "场景1:测试用例", + "text_level": 1, + "bbox": [ + 133, + 117, + 343, + 142 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "测试器件说明:测试中包含的五个核心器件五个核心仪器:频谱分析仪、信号源、开关矩阵、直流电源、示波器。Dut有SC频段接口和X频段接口,通过配置开关矩阵可以实现仪器间连接的更改。", + "bbox": [ + 132, + 161, + 905, + 262 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "本次测试项目共有三项:", + "bbox": [ + 205, + 284, + 450, + 306 + ], + "page_idx": 0 + }, + { + "type": "list", + "sub_type": "text", + "list_items": [ + "a)上电测试:连接好各个设备,检查各个器件的工作情况,设置OCP,OVP等等操作。", + "b)镜频测试:DUT电源供电28V,电流2.9A;测试频段:SC波段(2.7GHz~6.2GHz)和X波段(8GHz~12GHz);频谱仪SPAN=500MHz;信号源RF Power:SC频段=-25+线损+30(衰减器值);X频段=-40+线损+30(衰减器值);" + ], + "bbox": [ + 132, + 321, + 890, + 526 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "测试内容:例如SC波段信号源power=-25dBm,f=2.7GHz,频谱分析仪f=2.7GHz,读取频谱分析仪Max Peak功率值P1;信号源功率及频率保持不变,频谱分析仪f-=3.84GHz,读取频谱分析仪Max Peak功率值P2。", + "bbox": [ + 132, + 540, + 898, + 640 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "本次测试信号源在以下四个频点上进行测试;", + "bbox": [ + 204, + 656, + 656, + 678 + ], + "page_idx": 0 + }, + { + "type": "list", + "sub_type": "text", + "list_items": [ + "2.7GHz 时频谱仪在 2.7GHz 和 3.88GHz", + "6.2GHz 时频谱仪在 6.2GHz 和 5.88GHz" + ], + "bbox": [ + 204, + 695, + 596, + 753 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "8GHz 时频谱仪在 8GHz 和 11GHz", + "bbox": [ + 204, + 772, + 544, + 792 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "12GHz 时频谱仪在 12GHz 和 15GHz", + "bbox": [ + 205, + 810, + 566, + 830 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "注意:镜频测试中不需要体现线缆损耗值。", + "bbox": [ + 204, + 848, + 632, + 869 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "SC 波段, DUT 在频率 $2.7 \\mathrm{GHz}$ 的镜像抑制比= (P1-P2) >7dB 判定合", + "bbox": [ + 204, + 886, + 888, + 907 + ], + "page_idx": 0 + }, + { + "type": "page_number", + "text": "第1页共4页", + "bbox": [ + 472, + 928, + 602, + 946 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "格。不合格报告中标红。", + "bbox": [ + 133, + 108, + 377, + 131 + ], + "page_idx": 1 + }, + { + "type": "text", + "text": "c)断电测试:释放资源,关闭各种仪器的状态", + "bbox": [ + 148, + 171, + 609, + 194 + ], + "page_idx": 1 + }, + { + "type": "text", + "text": "表 1: 全壳测试报告模板", + "bbox": [ + 450, + 202, + 665, + 222 + ], + "page_idx": 1 + }, + { + "type": "table", + "img_path": "images/13e3fab38868d97ba85faed2dc5ae88728483a29d223074fac0122102d00930e.jpg", + "table_caption": [], + "table_footnote": [], + "table_body": "
", + "bbox": [ + 0, + 325, + 676, + 902 + ], + "page_idx": 1 + }, + { + "type": "page_number", + "text": "第2页共4页", + "bbox": [ + 473, + 928, + 601, + 946 + ], + "page_idx": 1 + }, + { + "type": "table", + "img_path": "", + "table_caption": [], + "table_footnote": [], + "bbox": [ + 0, + 106, + 676, + 898 + ], + "page_idx": 2 + }, + { + "type": "page_number", + "text": "第3页共4页", + "bbox": [ + 473, + 928, + 601, + 946 + ], + "page_idx": 2 + }, + { + "type": "table", + "img_path": "", + "table_caption": [], + "table_footnote": [], + "bbox": [ + 0, + 104, + 676, + 371 + ], + "page_idx": 3 + }, + { + "type": "text", + "text": "表 1: 全壳测试报告模板", + "bbox": [ + 450, + 401, + 665, + 420 + ], + "page_idx": 3 + }, + { + "type": "page_number", + "text": "第4页共4页", + "bbox": [ + 473, + 928, + 601, + 946 + ], + "page_idx": 3 + } +] \ No newline at end of file diff --git a/backend/planner/mineru_result/原镜频测试用例参考/74cf4458-a1d1-47a1-a528-2af2eb16a653_model.json b/backend/planner/mineru_result/原镜频测试用例参考/74cf4458-a1d1-47a1-a528-2af2eb16a653_model.json new file mode 100644 index 0000000..259cb2a --- /dev/null +++ b/backend/planner/mineru_result/原镜频测试用例参考/74cf4458-a1d1-47a1-a528-2af2eb16a653_model.json @@ -0,0 +1,296 @@ +[ + [ + { + "type": "title", + "bbox": [ + 0.134, + 0.118, + 0.344, + 0.143 + ], + "angle": 0, + "content": "场景1:测试用例" + }, + { + "type": "text", + "bbox": [ + 0.133, + 0.162, + 0.906, + 0.263 + ], + "angle": 0, + "content": "测试器件说明:测试中包含的五个核心器件五个核心仪器:频谱分析仪、信号源、开关矩阵、直流电源、示波器。Dut有SC频段接口和X频段接口,通过配置开关矩阵可以实现仪器间连接的更改。" + }, + { + "type": "text", + "bbox": [ + 0.206, + 0.285, + 0.452, + 0.308 + ], + "angle": 0, + "content": "本次测试项目共有三项:" + }, + { + "type": "text", + "bbox": [ + 0.133, + 0.323, + 0.892, + 0.375 + ], + "angle": 0, + "content": "a)上电测试:连接好各个设备,检查各个器件的工作情况,设置OCP,OVP等等操作。" + }, + { + "type": "text", + "bbox": [ + 0.133, + 0.388, + 0.874, + 0.527 + ], + "angle": 0, + "content": "b)镜频测试:DUT电源供电28V,电流2.9A;测试频段:SC波段(2.7GHz~6.2GHz)和X波段(8GHz~12GHz);频谱仪SPAN=500MHz;信号源RF Power:SC频段=-25+线损+30(衰减器值);X频段=-40+线损+30(衰减器值);" + }, + { + "type": "list", + "bbox": [ + 0.133, + 0.323, + 0.892, + 0.527 + ], + "angle": 0, + "content": null + }, + { + "type": "text", + "bbox": [ + 0.133, + 0.541, + 0.9, + 0.641 + ], + "angle": 0, + "content": "测试内容:例如SC波段信号源power=-25dBm,f=2.7GHz,频谱分析仪f=2.7GHz,读取频谱分析仪Max Peak功率值P1;信号源功率及频率保持不变,频谱分析仪f-=3.84GHz,读取频谱分析仪Max Peak功率值P2。" + }, + { + "type": "text", + "bbox": [ + 0.205, + 0.657, + 0.657, + 0.679 + ], + "angle": 0, + "content": "本次测试信号源在以下四个频点上进行测试;" + }, + { + "type": "text", + "bbox": [ + 0.205, + 0.696, + 0.597, + 0.716 + ], + "angle": 0, + "content": "2.7GHz 时频谱仪在 2.7GHz 和 3.88GHz" + }, + { + "type": "text", + "bbox": [ + 0.205, + 0.734, + 0.595, + 0.755 + ], + "angle": 0, + "content": "6.2GHz 时频谱仪在 6.2GHz 和 5.88GHz" + }, + { + "type": "list", + "bbox": [ + 0.205, + 0.696, + 0.597, + 0.755 + ], + "angle": 0, + "content": null + }, + { + "type": "text", + "bbox": [ + 0.205, + 0.773, + 0.545, + 0.793 + ], + "angle": 0, + "content": "8GHz 时频谱仪在 8GHz 和 11GHz" + }, + { + "type": "text", + "bbox": [ + 0.206, + 0.811, + 0.567, + 0.831 + ], + "angle": 0, + "content": "12GHz 时频谱仪在 12GHz 和 15GHz" + }, + { + "type": "text", + "bbox": [ + 0.205, + 0.849, + 0.633, + 0.87 + ], + "angle": 0, + "content": "注意:镜频测试中不需要体现线缆损耗值。" + }, + { + "type": "text", + "bbox": [ + 0.205, + 0.887, + 0.89, + 0.909 + ], + "angle": 0, + "content": "SC 波段, DUT 在频率 \\(2.7 \\mathrm{GHz}\\) 的镜像抑制比= (P1-P2) >7dB 判定合" + }, + { + "type": "page_number", + "bbox": [ + 0.473, + 0.929, + 0.603, + 0.948 + ], + "angle": 0, + "content": "第1页共4页" + } + ], + [ + { + "type": "text", + "bbox": [ + 0.134, + 0.109, + 0.379, + 0.132 + ], + "angle": 0, + "content": "格。不合格报告中标红。" + }, + { + "type": "text", + "bbox": [ + 0.15, + 0.172, + 0.611, + 0.195 + ], + "angle": 0, + "content": "c)断电测试:释放资源,关闭各种仪器的状态" + }, + { + "type": "text", + "bbox": [ + 0.451, + 0.203, + 0.666, + 0.223 + ], + "angle": 0, + "content": "表 1: 全壳测试报告模板" + }, + { + "type": "table", + "bbox": [ + 0.0, + 0.326, + 0.677, + 0.904 + ], + "angle": 0, + "content": "
" + }, + { + "type": "page_number", + "bbox": [ + 0.474, + 0.929, + 0.602, + 0.947 + ], + "angle": 0, + "content": "第2页共4页" + } + ], + [ + { + "type": "table", + "bbox": [ + 0.0, + 0.107, + 0.677, + 0.9 + ], + "angle": 0, + "content": "
" + }, + { + "type": "page_number", + "bbox": [ + 0.474, + 0.929, + 0.602, + 0.947 + ], + "angle": 0, + "content": "第3页共4页" + } + ], + [ + { + "type": "table", + "bbox": [ + 0.0, + 0.106, + 0.677, + 0.372 + ], + "angle": 0, + "content": "
" + }, + { + "type": "table_caption", + "bbox": [ + 0.452, + 0.402, + 0.666, + 0.421 + ], + "angle": 0, + "content": "表 1: 全壳测试报告模板" + }, + { + "type": "page_number", + "bbox": [ + 0.474, + 0.929, + 0.602, + 0.947 + ], + "angle": 0, + "content": "第4页共4页" + } + ] +] \ No newline at end of file diff --git a/backend/planner/mineru_result/原镜频测试用例参考/74cf4458-a1d1-47a1-a528-2af2eb16a653_origin.pdf b/backend/planner/mineru_result/原镜频测试用例参考/74cf4458-a1d1-47a1-a528-2af2eb16a653_origin.pdf new file mode 100644 index 0000000..94e591c Binary files /dev/null and b/backend/planner/mineru_result/原镜频测试用例参考/74cf4458-a1d1-47a1-a528-2af2eb16a653_origin.pdf differ diff --git a/backend/planner/mineru_result/原镜频测试用例参考/76cec43a-8af5-4de0-bb73-d56598b1a633_content_list.json b/backend/planner/mineru_result/原镜频测试用例参考/76cec43a-8af5-4de0-bb73-d56598b1a633_content_list.json new file mode 100644 index 0000000..021676e --- /dev/null +++ b/backend/planner/mineru_result/原镜频测试用例参考/76cec43a-8af5-4de0-bb73-d56598b1a633_content_list.json @@ -0,0 +1,260 @@ +[ + { + "type": "text", + "text": "场景1:测试用例", + "text_level": 1, + "bbox": [ + 133, + 117, + 343, + 142 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "测试器件说明:测试中包含的五个核心器件五个核心仪器:频谱分析仪、信号源、开关矩阵、直流电源、示波器。Dut有SC频段接口和X频段接口,通过配置开关矩阵可以实现仪器间连接的更改。", + "bbox": [ + 132, + 161, + 905, + 262 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "本次测试项目共有三项:", + "bbox": [ + 205, + 284, + 450, + 306 + ], + "page_idx": 0 + }, + { + "type": "list", + "sub_type": "text", + "list_items": [ + "a)上电测试:连接好各个设备,检查各个器件的工作情况,设置OCP,OVP,等等操作。", + "b)镜频测试:DUT电源供电28V,电流2.9A;测试频段:SC波段(2.7GHz~6.2GHz)和X波段(8GHz~12GHz);频谱仪SPAN=500MHz;信号源RF Power:SC频段=-25+线损+30(衰减器值);X频段=-40+线损+30(衰减器值);" + ], + "bbox": [ + 132, + 321, + 890, + 526 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "测试内容:例如SC波段信号源power $= -25\\mathrm{dBm}$ , $f = 2.7\\mathrm{GHz}$ ,频谱分析仪 $f = 2.7\\mathrm{GHz}$ ,读取频谱分析仪Max Peak功率值P1;信号源功率及频率保持不变,频谱分析仪 $f = 3.84\\mathrm{GHz}$ ,读取频谱分析仪Max Peak功率值P2。", + "bbox": [ + 132, + 540, + 901, + 642 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "本次测试信号源在以下四个频点上进行测试;", + "bbox": [ + 204, + 656, + 656, + 678 + ], + "page_idx": 0 + }, + { + "type": "list", + "sub_type": "text", + "list_items": [ + "2.7GHz 时频谱仪在 2.7GHz 和 3.88GHz", + "6.2GHz 时频谱仪在 6.2GHz 和 5.88GHz" + ], + "bbox": [ + 204, + 695, + 596, + 753 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "8GHz 时频谱仪在 8GHz 和 11GHz", + "bbox": [ + 204, + 772, + 544, + 792 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "12GHz 时频谱仪在 12GHz 和 15GHz", + "bbox": [ + 205, + 810, + 566, + 830 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "注意:镜频测试中不需要体现线缆损耗值。", + "bbox": [ + 204, + 848, + 632, + 869 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "SC 波段, DUT 在频率 $2.7 \\mathrm{GHz}$ 的镜像抑制比= (P1-P2) >7dB 判定合", + "bbox": [ + 204, + 886, + 888, + 907 + ], + "page_idx": 0 + }, + { + "type": "page_number", + "text": "第1页共4页", + "bbox": [ + 472, + 928, + 602, + 946 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "格。不合格报告中标红。", + "bbox": [ + 133, + 108, + 377, + 131 + ], + "page_idx": 1 + }, + { + "type": "text", + "text": "c)断电测试:释放资源,关闭各种仪器的状态", + "bbox": [ + 148, + 171, + 609, + 194 + ], + "page_idx": 1 + }, + { + "type": "text", + "text": "表 1: 全壳测试报告模板", + "bbox": [ + 450, + 202, + 665, + 222 + ], + "page_idx": 1 + }, + { + "type": "table", + "img_path": "images/13e3fab38868d97ba85faed2dc5ae88728483a29d223074fac0122102d00930e.jpg", + "table_caption": [], + "table_footnote": [], + "table_body": "
", + "bbox": [ + 0, + 325, + 676, + 902 + ], + "page_idx": 1 + }, + { + "type": "page_number", + "text": "第2页共4页", + "bbox": [ + 473, + 928, + 601, + 946 + ], + "page_idx": 1 + }, + { + "type": "table", + "img_path": "", + "table_caption": [], + "table_footnote": [], + "bbox": [ + 0, + 106, + 676, + 898 + ], + "page_idx": 2 + }, + { + "type": "page_number", + "text": "第3页共4页", + "bbox": [ + 473, + 928, + 601, + 946 + ], + "page_idx": 2 + }, + { + "type": "table", + "img_path": "", + "table_caption": [], + "table_footnote": [], + "bbox": [ + 0, + 104, + 676, + 371 + ], + "page_idx": 3 + }, + { + "type": "text", + "text": "表 1: 全壳测试报告模板", + "bbox": [ + 450, + 401, + 665, + 420 + ], + "page_idx": 3 + }, + { + "type": "page_number", + "text": "第4页共4页", + "bbox": [ + 473, + 928, + 601, + 946 + ], + "page_idx": 3 + } +] \ No newline at end of file diff --git a/backend/planner/mineru_result/原镜频测试用例参考/76cec43a-8af5-4de0-bb73-d56598b1a633_model.json b/backend/planner/mineru_result/原镜频测试用例参考/76cec43a-8af5-4de0-bb73-d56598b1a633_model.json new file mode 100644 index 0000000..5c930bc --- /dev/null +++ b/backend/planner/mineru_result/原镜频测试用例参考/76cec43a-8af5-4de0-bb73-d56598b1a633_model.json @@ -0,0 +1,296 @@ +[ + [ + { + "type": "title", + "bbox": [ + 0.134, + 0.118, + 0.344, + 0.143 + ], + "angle": 0, + "content": "场景1:测试用例" + }, + { + "type": "text", + "bbox": [ + 0.133, + 0.162, + 0.906, + 0.263 + ], + "angle": 0, + "content": "测试器件说明:测试中包含的五个核心器件五个核心仪器:频谱分析仪、信号源、开关矩阵、直流电源、示波器。Dut有SC频段接口和X频段接口,通过配置开关矩阵可以实现仪器间连接的更改。" + }, + { + "type": "text", + "bbox": [ + 0.206, + 0.285, + 0.452, + 0.308 + ], + "angle": 0, + "content": "本次测试项目共有三项:" + }, + { + "type": "text", + "bbox": [ + 0.133, + 0.323, + 0.892, + 0.378 + ], + "angle": 0, + "content": "a)上电测试:连接好各个设备,检查各个器件的工作情况,设置OCP,OVP,等等操作。" + }, + { + "type": "text", + "bbox": [ + 0.133, + 0.388, + 0.874, + 0.527 + ], + "angle": 0, + "content": "b)镜频测试:DUT电源供电28V,电流2.9A;测试频段:SC波段(2.7GHz~6.2GHz)和X波段(8GHz~12GHz);频谱仪SPAN=500MHz;信号源RF Power:SC频段=-25+线损+30(衰减器值);X频段=-40+线损+30(衰减器值);" + }, + { + "type": "list", + "bbox": [ + 0.133, + 0.323, + 0.892, + 0.527 + ], + "angle": 0, + "content": null + }, + { + "type": "text", + "bbox": [ + 0.133, + 0.541, + 0.903, + 0.643 + ], + "angle": 0, + "content": "测试内容:例如SC波段信号源power \\(= -25\\mathrm{dBm}\\),\\(f = 2.7\\mathrm{GHz}\\),频谱分析仪 \\(f = 2.7\\mathrm{GHz}\\),读取频谱分析仪Max Peak功率值P1;信号源功率及频率保持不变,频谱分析仪 \\(f = 3.84\\mathrm{GHz}\\),读取频谱分析仪Max Peak功率值P2。" + }, + { + "type": "text", + "bbox": [ + 0.205, + 0.657, + 0.657, + 0.679 + ], + "angle": 0, + "content": "本次测试信号源在以下四个频点上进行测试;" + }, + { + "type": "text", + "bbox": [ + 0.205, + 0.696, + 0.597, + 0.716 + ], + "angle": 0, + "content": "2.7GHz 时频谱仪在 2.7GHz 和 3.88GHz" + }, + { + "type": "text", + "bbox": [ + 0.205, + 0.734, + 0.596, + 0.755 + ], + "angle": 0, + "content": "6.2GHz 时频谱仪在 6.2GHz 和 5.88GHz" + }, + { + "type": "list", + "bbox": [ + 0.205, + 0.696, + 0.597, + 0.755 + ], + "angle": 0, + "content": null + }, + { + "type": "text", + "bbox": [ + 0.205, + 0.773, + 0.545, + 0.793 + ], + "angle": 0, + "content": "8GHz 时频谱仪在 8GHz 和 11GHz" + }, + { + "type": "text", + "bbox": [ + 0.206, + 0.811, + 0.567, + 0.832 + ], + "angle": 0, + "content": "12GHz 时频谱仪在 12GHz 和 15GHz" + }, + { + "type": "text", + "bbox": [ + 0.205, + 0.849, + 0.633, + 0.87 + ], + "angle": 0, + "content": "注意:镜频测试中不需要体现线缆损耗值。" + }, + { + "type": "text", + "bbox": [ + 0.205, + 0.887, + 0.89, + 0.909 + ], + "angle": 0, + "content": "SC 波段, DUT 在频率 \\(2.7 \\mathrm{GHz}\\) 的镜像抑制比= (P1-P2) >7dB 判定合" + }, + { + "type": "page_number", + "bbox": [ + 0.473, + 0.929, + 0.603, + 0.948 + ], + "angle": 0, + "content": "第1页共4页" + } + ], + [ + { + "type": "text", + "bbox": [ + 0.134, + 0.109, + 0.379, + 0.132 + ], + "angle": 0, + "content": "格。不合格报告中标红。" + }, + { + "type": "text", + "bbox": [ + 0.15, + 0.172, + 0.611, + 0.195 + ], + "angle": 0, + "content": "c)断电测试:释放资源,关闭各种仪器的状态" + }, + { + "type": "text", + "bbox": [ + 0.451, + 0.203, + 0.666, + 0.223 + ], + "angle": 0, + "content": "表 1: 全壳测试报告模板" + }, + { + "type": "table", + "bbox": [ + 0.0, + 0.326, + 0.677, + 0.904 + ], + "angle": 0, + "content": "
" + }, + { + "type": "page_number", + "bbox": [ + 0.474, + 0.929, + 0.602, + 0.947 + ], + "angle": 0, + "content": "第2页共4页" + } + ], + [ + { + "type": "table", + "bbox": [ + 0.0, + 0.107, + 0.677, + 0.9 + ], + "angle": 0, + "content": "
" + }, + { + "type": "page_number", + "bbox": [ + 0.474, + 0.929, + 0.602, + 0.947 + ], + "angle": 0, + "content": "第3页共4页" + } + ], + [ + { + "type": "table", + "bbox": [ + 0.0, + 0.106, + 0.677, + 0.372 + ], + "angle": 0, + "content": "
" + }, + { + "type": "table_caption", + "bbox": [ + 0.451, + 0.402, + 0.666, + 0.421 + ], + "angle": 0, + "content": "表 1: 全壳测试报告模板" + }, + { + "type": "page_number", + "bbox": [ + 0.474, + 0.929, + 0.602, + 0.947 + ], + "angle": 0, + "content": "第4页共4页" + } + ] +] \ No newline at end of file diff --git a/backend/planner/mineru_result/原镜频测试用例参考/76cec43a-8af5-4de0-bb73-d56598b1a633_origin.pdf b/backend/planner/mineru_result/原镜频测试用例参考/76cec43a-8af5-4de0-bb73-d56598b1a633_origin.pdf new file mode 100644 index 0000000..fcfc650 Binary files /dev/null and b/backend/planner/mineru_result/原镜频测试用例参考/76cec43a-8af5-4de0-bb73-d56598b1a633_origin.pdf differ diff --git a/backend/planner/mineru_result/原镜频测试用例参考/8bf92b76-7031-43f7-a368-075d00b72a33_content_list.json b/backend/planner/mineru_result/原镜频测试用例参考/8bf92b76-7031-43f7-a368-075d00b72a33_content_list.json new file mode 100644 index 0000000..df54d53 --- /dev/null +++ b/backend/planner/mineru_result/原镜频测试用例参考/8bf92b76-7031-43f7-a368-075d00b72a33_content_list.json @@ -0,0 +1,260 @@ +[ + { + "type": "text", + "text": "场景1:测试用例", + "text_level": 1, + "bbox": [ + 133, + 117, + 343, + 142 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "测试器件说明:测试中包含的五个核心器件五个核心仪器:频谱分析仪、信号源、开关矩阵、直流电源、示波器。Dut有SC频段接口和X频段接口,通过配置开关矩阵可以实现仪器间连接的更改。", + "bbox": [ + 132, + 161, + 905, + 262 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "本次测试项目共有三项:", + "bbox": [ + 205, + 284, + 450, + 306 + ], + "page_idx": 0 + }, + { + "type": "list", + "sub_type": "text", + "list_items": [ + "a)上电测试:连接好各个设备,检查各个器件的工作情况,设置OCP,OVP,等等操作。", + "b)镜频测试:DUT电源供电28V,电流2.9A;测试频段:SC波段(2.7GHz~6.2GHz)和X波段(8GHz~12GHz);频谱仪SPAN=500MHz;信号源RF Power:SC频段=-25+线损+30(衰减器值);X频段=-40+线损+30(衰减器值);" + ], + "bbox": [ + 132, + 321, + 890, + 526 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "测试内容:例如SC波段信号源power $= -25\\mathrm{dBm}$ , $f = 2.7\\mathrm{GHz}$ ,频谱分析仪 $f = 2.7\\mathrm{GHz}$ ,读取频谱分析仪Max Peak功率值P1;信号源功率及频率保持不变,频谱分析仪 $f = 3.84\\mathrm{GHz}$ ,读取频谱分析仪Max Peak功率值P2。", + "bbox": [ + 132, + 540, + 901, + 640 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "本次测试信号源在以下四个频点上进行测试;", + "bbox": [ + 204, + 656, + 656, + 678 + ], + "page_idx": 0 + }, + { + "type": "list", + "sub_type": "text", + "list_items": [ + "2.7GHz 时频谱仪在 2.7GHz 和 3.88GHz", + "6.2GHz 时频谱仪在 6.2GHz 和 5.88GHz" + ], + "bbox": [ + 204, + 695, + 596, + 753 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "8GHz 时频谱仪在 8GHz 和 11GHz", + "bbox": [ + 204, + 772, + 544, + 792 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "12GHz 时频谱仪在 12GHz 和 15GHz", + "bbox": [ + 205, + 810, + 566, + 830 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "注意:镜频测试中不需要体现线缆损耗值。", + "bbox": [ + 204, + 848, + 632, + 869 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "SC 波段, DUT 在频率 $2.7 \\mathrm{GHz}$ 的镜像抑制比= (P1-P2) >7dB 判定合", + "bbox": [ + 204, + 886, + 888, + 907 + ], + "page_idx": 0 + }, + { + "type": "page_number", + "text": "第1页共4页", + "bbox": [ + 472, + 928, + 602, + 946 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "格。不合格报告中标红。", + "bbox": [ + 133, + 108, + 377, + 131 + ], + "page_idx": 1 + }, + { + "type": "text", + "text": "c)断电测试:释放资源,关闭各种仪器的状态", + "bbox": [ + 148, + 171, + 609, + 194 + ], + "page_idx": 1 + }, + { + "type": "text", + "text": "表 1: 全壳测试报告模板", + "bbox": [ + 450, + 202, + 665, + 222 + ], + "page_idx": 1 + }, + { + "type": "table", + "img_path": "images/13e3fab38868d97ba85faed2dc5ae88728483a29d223074fac0122102d00930e.jpg", + "table_caption": [], + "table_footnote": [], + "table_body": "
", + "bbox": [ + 0, + 325, + 676, + 902 + ], + "page_idx": 1 + }, + { + "type": "page_number", + "text": "第2页共4页", + "bbox": [ + 473, + 928, + 601, + 946 + ], + "page_idx": 1 + }, + { + "type": "table", + "img_path": "", + "table_caption": [], + "table_footnote": [], + "bbox": [ + 0, + 106, + 676, + 898 + ], + "page_idx": 2 + }, + { + "type": "page_number", + "text": "第3页共4页", + "bbox": [ + 473, + 928, + 601, + 946 + ], + "page_idx": 2 + }, + { + "type": "table", + "img_path": "", + "table_caption": [], + "table_footnote": [], + "bbox": [ + 0, + 104, + 676, + 371 + ], + "page_idx": 3 + }, + { + "type": "text", + "text": "表 1: 全壳测试报告模板", + "bbox": [ + 450, + 401, + 665, + 420 + ], + "page_idx": 3 + }, + { + "type": "page_number", + "text": "第4页共4页", + "bbox": [ + 473, + 928, + 601, + 946 + ], + "page_idx": 3 + } +] \ No newline at end of file diff --git a/backend/planner/mineru_result/原镜频测试用例参考/8bf92b76-7031-43f7-a368-075d00b72a33_model.json b/backend/planner/mineru_result/原镜频测试用例参考/8bf92b76-7031-43f7-a368-075d00b72a33_model.json new file mode 100644 index 0000000..b637b59 --- /dev/null +++ b/backend/planner/mineru_result/原镜频测试用例参考/8bf92b76-7031-43f7-a368-075d00b72a33_model.json @@ -0,0 +1,296 @@ +[ + [ + { + "type": "title", + "bbox": [ + 0.134, + 0.118, + 0.344, + 0.143 + ], + "angle": 0, + "content": "场景1:测试用例" + }, + { + "type": "text", + "bbox": [ + 0.133, + 0.162, + 0.906, + 0.263 + ], + "angle": 0, + "content": "测试器件说明:测试中包含的五个核心器件五个核心仪器:频谱分析仪、信号源、开关矩阵、直流电源、示波器。Dut有SC频段接口和X频段接口,通过配置开关矩阵可以实现仪器间连接的更改。" + }, + { + "type": "text", + "bbox": [ + 0.206, + 0.285, + 0.452, + 0.308 + ], + "angle": 0, + "content": "本次测试项目共有三项:" + }, + { + "type": "text", + "bbox": [ + 0.133, + 0.323, + 0.892, + 0.378 + ], + "angle": 0, + "content": "a)上电测试:连接好各个设备,检查各个器件的工作情况,设置OCP,OVP,等等操作。" + }, + { + "type": "text", + "bbox": [ + 0.133, + 0.388, + 0.874, + 0.527 + ], + "angle": 0, + "content": "b)镜频测试:DUT电源供电28V,电流2.9A;测试频段:SC波段(2.7GHz~6.2GHz)和X波段(8GHz~12GHz);频谱仪SPAN=500MHz;信号源RF Power:SC频段=-25+线损+30(衰减器值);X频段=-40+线损+30(衰减器值);" + }, + { + "type": "list", + "bbox": [ + 0.133, + 0.323, + 0.892, + 0.527 + ], + "angle": 0, + "content": null + }, + { + "type": "text", + "bbox": [ + 0.133, + 0.541, + 0.903, + 0.641 + ], + "angle": 0, + "content": "测试内容:例如SC波段信号源power \\(= -25\\mathrm{dBm}\\),\\(f = 2.7\\mathrm{GHz}\\),频谱分析仪 \\(f = 2.7\\mathrm{GHz}\\),读取频谱分析仪Max Peak功率值P1;信号源功率及频率保持不变,频谱分析仪 \\(f = 3.84\\mathrm{GHz}\\),读取频谱分析仪Max Peak功率值P2。" + }, + { + "type": "text", + "bbox": [ + 0.205, + 0.657, + 0.657, + 0.679 + ], + "angle": 0, + "content": "本次测试信号源在以下四个频点上进行测试;" + }, + { + "type": "text", + "bbox": [ + 0.205, + 0.696, + 0.597, + 0.716 + ], + "angle": 0, + "content": "2.7GHz 时频谱仪在 2.7GHz 和 3.88GHz" + }, + { + "type": "text", + "bbox": [ + 0.205, + 0.734, + 0.596, + 0.755 + ], + "angle": 0, + "content": "6.2GHz 时频谱仪在 6.2GHz 和 5.88GHz" + }, + { + "type": "list", + "bbox": [ + 0.205, + 0.696, + 0.597, + 0.755 + ], + "angle": 0, + "content": null + }, + { + "type": "text", + "bbox": [ + 0.205, + 0.773, + 0.545, + 0.793 + ], + "angle": 0, + "content": "8GHz 时频谱仪在 8GHz 和 11GHz" + }, + { + "type": "text", + "bbox": [ + 0.206, + 0.811, + 0.567, + 0.832 + ], + "angle": 0, + "content": "12GHz 时频谱仪在 12GHz 和 15GHz" + }, + { + "type": "text", + "bbox": [ + 0.205, + 0.849, + 0.633, + 0.87 + ], + "angle": 0, + "content": "注意:镜频测试中不需要体现线缆损耗值。" + }, + { + "type": "text", + "bbox": [ + 0.205, + 0.887, + 0.89, + 0.909 + ], + "angle": 0, + "content": "SC 波段, DUT 在频率 \\(2.7 \\mathrm{GHz}\\) 的镜像抑制比= (P1-P2) >7dB 判定合" + }, + { + "type": "page_number", + "bbox": [ + 0.473, + 0.929, + 0.603, + 0.948 + ], + "angle": 0, + "content": "第1页共4页" + } + ], + [ + { + "type": "text", + "bbox": [ + 0.134, + 0.109, + 0.379, + 0.132 + ], + "angle": 0, + "content": "格。不合格报告中标红。" + }, + { + "type": "text", + "bbox": [ + 0.15, + 0.172, + 0.611, + 0.195 + ], + "angle": 0, + "content": "c)断电测试:释放资源,关闭各种仪器的状态" + }, + { + "type": "text", + "bbox": [ + 0.451, + 0.203, + 0.666, + 0.223 + ], + "angle": 0, + "content": "表 1: 全壳测试报告模板" + }, + { + "type": "table", + "bbox": [ + 0.0, + 0.326, + 0.677, + 0.904 + ], + "angle": 0, + "content": "
" + }, + { + "type": "page_number", + "bbox": [ + 0.474, + 0.929, + 0.602, + 0.947 + ], + "angle": 0, + "content": "第2页共4页" + } + ], + [ + { + "type": "table", + "bbox": [ + 0.0, + 0.107, + 0.677, + 0.9 + ], + "angle": 0, + "content": "
" + }, + { + "type": "page_number", + "bbox": [ + 0.474, + 0.929, + 0.602, + 0.947 + ], + "angle": 0, + "content": "第3页共4页" + } + ], + [ + { + "type": "table", + "bbox": [ + 0.0, + 0.106, + 0.677, + 0.372 + ], + "angle": 0, + "content": "
" + }, + { + "type": "table_caption", + "bbox": [ + 0.452, + 0.402, + 0.666, + 0.421 + ], + "angle": 0, + "content": "表 1: 全壳测试报告模板" + }, + { + "type": "page_number", + "bbox": [ + 0.474, + 0.929, + 0.602, + 0.947 + ], + "angle": 0, + "content": "第4页共4页" + } + ] +] \ No newline at end of file diff --git a/backend/planner/mineru_result/原镜频测试用例参考/8bf92b76-7031-43f7-a368-075d00b72a33_origin.pdf b/backend/planner/mineru_result/原镜频测试用例参考/8bf92b76-7031-43f7-a368-075d00b72a33_origin.pdf new file mode 100644 index 0000000..1fc6bff Binary files /dev/null and b/backend/planner/mineru_result/原镜频测试用例参考/8bf92b76-7031-43f7-a368-075d00b72a33_origin.pdf differ diff --git a/backend/planner/mineru_result/原镜频测试用例参考/95c6cf59-ce5b-42d3-b8dc-162b7913624d_content_list.json b/backend/planner/mineru_result/原镜频测试用例参考/95c6cf59-ce5b-42d3-b8dc-162b7913624d_content_list.json new file mode 100644 index 0000000..924d968 --- /dev/null +++ b/backend/planner/mineru_result/原镜频测试用例参考/95c6cf59-ce5b-42d3-b8dc-162b7913624d_content_list.json @@ -0,0 +1,260 @@ +[ + { + "type": "text", + "text": "场景1:测试用例", + "text_level": 1, + "bbox": [ + 133, + 117, + 343, + 142 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "测试器件说明:测试中包含的五个核心器件五个核心仪器:频谱分析仪、信号源、开关矩阵、直流电源、示波器。Dut有SC频段接口和X频段接口,通过配置开关矩阵可以实现仪器间连接的更改。", + "bbox": [ + 132, + 161, + 905, + 262 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "本次测试项目共有三项:", + "bbox": [ + 205, + 284, + 450, + 306 + ], + "page_idx": 0 + }, + { + "type": "list", + "sub_type": "text", + "list_items": [ + "a)上电测试:连接好各个设备,检查各个器件的工作情况,设置OCP,OVP,等等操作。", + "b)镜频测试:DUT电源供电28V,电流2.9A;测试频段:SC波段(2.7GHz~6.2GHz)和X波段(8GHz~12GHz);频谱仪SPAN=500MHz;信号源RF Power:SC频段=-25+线损+30(衰减器值);X频段=-40+线损+30(衰减器值);" + ], + "bbox": [ + 132, + 321, + 890, + 526 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "测试内容:例如SC波段信号源power=-25dBm,f=2.7GHz,频谱分析仪f=2.7GHz,读取频谱分析仪Max Peak功率值P1;信号源功率及频率保持不变,频谱分析仪f-=3.84GHz,读取频谱分析仪Max Peak功率值P2。", + "bbox": [ + 132, + 540, + 898, + 642 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "本次测试信号源在以下四个频点上进行测试;", + "bbox": [ + 204, + 656, + 656, + 678 + ], + "page_idx": 0 + }, + { + "type": "list", + "sub_type": "text", + "list_items": [ + "2.7GHz 时频谱仪在 2.7GHz 和 3.88GHz", + "6.2GHz 时频谱仪在 6.2GHz 和 5.88GHz" + ], + "bbox": [ + 204, + 695, + 596, + 753 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "8GHz 时频谱仪在 8GHz 和 11GHz", + "bbox": [ + 204, + 772, + 544, + 792 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "12GHz 时频谱仪在 12GHz 和 15GHz", + "bbox": [ + 205, + 810, + 566, + 830 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "注意:镜频测试中不需要体现线缆损耗值。", + "bbox": [ + 204, + 848, + 632, + 869 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "SC 波段, DUT 在频率 $2.7 \\mathrm{GHz}$ 的镜像抑制比= (P1-P2) >7dB 判定合", + "bbox": [ + 204, + 886, + 888, + 907 + ], + "page_idx": 0 + }, + { + "type": "page_number", + "text": "第1页共4页", + "bbox": [ + 472, + 928, + 602, + 946 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "格。不合格报告中标红。", + "bbox": [ + 133, + 108, + 377, + 131 + ], + "page_idx": 1 + }, + { + "type": "text", + "text": "c)断电测试:释放资源,关闭各种仪器的状态", + "bbox": [ + 148, + 171, + 609, + 194 + ], + "page_idx": 1 + }, + { + "type": "text", + "text": "表 1: 全壳测试报告模板", + "bbox": [ + 450, + 202, + 665, + 222 + ], + "page_idx": 1 + }, + { + "type": "table", + "img_path": "images/13e3fab38868d97ba85faed2dc5ae88728483a29d223074fac0122102d00930e.jpg", + "table_caption": [], + "table_footnote": [], + "table_body": "
", + "bbox": [ + 0, + 325, + 676, + 902 + ], + "page_idx": 1 + }, + { + "type": "page_number", + "text": "第2页共4页", + "bbox": [ + 473, + 928, + 601, + 946 + ], + "page_idx": 1 + }, + { + "type": "table", + "img_path": "", + "table_caption": [], + "table_footnote": [], + "bbox": [ + 0, + 106, + 676, + 898 + ], + "page_idx": 2 + }, + { + "type": "page_number", + "text": "第3页共4页", + "bbox": [ + 473, + 928, + 601, + 946 + ], + "page_idx": 2 + }, + { + "type": "table", + "img_path": "", + "table_caption": [], + "table_footnote": [], + "bbox": [ + 0, + 104, + 676, + 371 + ], + "page_idx": 3 + }, + { + "type": "text", + "text": "表 1: 全壳测试报告模板", + "bbox": [ + 450, + 401, + 665, + 420 + ], + "page_idx": 3 + }, + { + "type": "page_number", + "text": "第4页共4页", + "bbox": [ + 473, + 928, + 601, + 946 + ], + "page_idx": 3 + } +] \ No newline at end of file diff --git a/backend/planner/mineru_result/原镜频测试用例参考/95c6cf59-ce5b-42d3-b8dc-162b7913624d_model.json b/backend/planner/mineru_result/原镜频测试用例参考/95c6cf59-ce5b-42d3-b8dc-162b7913624d_model.json new file mode 100644 index 0000000..7759b99 --- /dev/null +++ b/backend/planner/mineru_result/原镜频测试用例参考/95c6cf59-ce5b-42d3-b8dc-162b7913624d_model.json @@ -0,0 +1,296 @@ +[ + [ + { + "type": "title", + "bbox": [ + 0.134, + 0.118, + 0.344, + 0.143 + ], + "angle": 0, + "content": "场景1:测试用例" + }, + { + "type": "text", + "bbox": [ + 0.133, + 0.162, + 0.906, + 0.263 + ], + "angle": 0, + "content": "测试器件说明:测试中包含的五个核心器件五个核心仪器:频谱分析仪、信号源、开关矩阵、直流电源、示波器。Dut有SC频段接口和X频段接口,通过配置开关矩阵可以实现仪器间连接的更改。" + }, + { + "type": "text", + "bbox": [ + 0.206, + 0.285, + 0.452, + 0.308 + ], + "angle": 0, + "content": "本次测试项目共有三项:" + }, + { + "type": "text", + "bbox": [ + 0.133, + 0.323, + 0.892, + 0.378 + ], + "angle": 0, + "content": "a)上电测试:连接好各个设备,检查各个器件的工作情况,设置OCP,OVP,等等操作。" + }, + { + "type": "text", + "bbox": [ + 0.133, + 0.388, + 0.874, + 0.527 + ], + "angle": 0, + "content": "b)镜频测试:DUT电源供电28V,电流2.9A;测试频段:SC波段(2.7GHz~6.2GHz)和X波段(8GHz~12GHz);频谱仪SPAN=500MHz;信号源RF Power:SC频段=-25+线损+30(衰减器值);X频段=-40+线损+30(衰减器值);" + }, + { + "type": "list", + "bbox": [ + 0.133, + 0.323, + 0.892, + 0.527 + ], + "angle": 0, + "content": null + }, + { + "type": "text", + "bbox": [ + 0.133, + 0.541, + 0.9, + 0.643 + ], + "angle": 0, + "content": "测试内容:例如SC波段信号源power=-25dBm,f=2.7GHz,频谱分析仪f=2.7GHz,读取频谱分析仪Max Peak功率值P1;信号源功率及频率保持不变,频谱分析仪f-=3.84GHz,读取频谱分析仪Max Peak功率值P2。" + }, + { + "type": "text", + "bbox": [ + 0.205, + 0.657, + 0.657, + 0.679 + ], + "angle": 0, + "content": "本次测试信号源在以下四个频点上进行测试;" + }, + { + "type": "text", + "bbox": [ + 0.205, + 0.696, + 0.597, + 0.716 + ], + "angle": 0, + "content": "2.7GHz 时频谱仪在 2.7GHz 和 3.88GHz" + }, + { + "type": "text", + "bbox": [ + 0.205, + 0.734, + 0.595, + 0.755 + ], + "angle": 0, + "content": "6.2GHz 时频谱仪在 6.2GHz 和 5.88GHz" + }, + { + "type": "list", + "bbox": [ + 0.205, + 0.696, + 0.597, + 0.755 + ], + "angle": 0, + "content": null + }, + { + "type": "text", + "bbox": [ + 0.205, + 0.773, + 0.545, + 0.793 + ], + "angle": 0, + "content": "8GHz 时频谱仪在 8GHz 和 11GHz" + }, + { + "type": "text", + "bbox": [ + 0.206, + 0.811, + 0.567, + 0.831 + ], + "angle": 0, + "content": "12GHz 时频谱仪在 12GHz 和 15GHz" + }, + { + "type": "text", + "bbox": [ + 0.205, + 0.849, + 0.633, + 0.87 + ], + "angle": 0, + "content": "注意:镜频测试中不需要体现线缆损耗值。" + }, + { + "type": "text", + "bbox": [ + 0.205, + 0.887, + 0.89, + 0.909 + ], + "angle": 0, + "content": "SC 波段, DUT 在频率 \\(2.7 \\mathrm{GHz}\\) 的镜像抑制比= (P1-P2) >7dB 判定合" + }, + { + "type": "page_number", + "bbox": [ + 0.473, + 0.929, + 0.603, + 0.948 + ], + "angle": 0, + "content": "第1页共4页" + } + ], + [ + { + "type": "text", + "bbox": [ + 0.134, + 0.109, + 0.379, + 0.132 + ], + "angle": 0, + "content": "格。不合格报告中标红。" + }, + { + "type": "text", + "bbox": [ + 0.15, + 0.172, + 0.611, + 0.195 + ], + "angle": 0, + "content": "c)断电测试:释放资源,关闭各种仪器的状态" + }, + { + "type": "text", + "bbox": [ + 0.451, + 0.203, + 0.666, + 0.223 + ], + "angle": 0, + "content": "表 1: 全壳测试报告模板" + }, + { + "type": "table", + "bbox": [ + 0.0, + 0.326, + 0.677, + 0.904 + ], + "angle": 0, + "content": "
" + }, + { + "type": "page_number", + "bbox": [ + 0.474, + 0.929, + 0.602, + 0.947 + ], + "angle": 0, + "content": "第2页共4页" + } + ], + [ + { + "type": "table", + "bbox": [ + 0.0, + 0.107, + 0.677, + 0.9 + ], + "angle": 0, + "content": "
" + }, + { + "type": "page_number", + "bbox": [ + 0.474, + 0.929, + 0.602, + 0.947 + ], + "angle": 0, + "content": "第3页共4页" + } + ], + [ + { + "type": "table", + "bbox": [ + 0.0, + 0.106, + 0.677, + 0.372 + ], + "angle": 0, + "content": "
" + }, + { + "type": "table_caption", + "bbox": [ + 0.451, + 0.402, + 0.666, + 0.421 + ], + "angle": 0, + "content": "表 1: 全壳测试报告模板" + }, + { + "type": "page_number", + "bbox": [ + 0.474, + 0.929, + 0.602, + 0.947 + ], + "angle": 0, + "content": "第4页共4页" + } + ] +] \ No newline at end of file diff --git a/backend/planner/mineru_result/原镜频测试用例参考/95c6cf59-ce5b-42d3-b8dc-162b7913624d_origin.pdf b/backend/planner/mineru_result/原镜频测试用例参考/95c6cf59-ce5b-42d3-b8dc-162b7913624d_origin.pdf new file mode 100644 index 0000000..d1a233b Binary files /dev/null and b/backend/planner/mineru_result/原镜频测试用例参考/95c6cf59-ce5b-42d3-b8dc-162b7913624d_origin.pdf differ diff --git a/backend/planner/mineru_result/原镜频测试用例参考/c0dd0da9-4671-411d-b02c-295ea73ec930_content_list.json b/backend/planner/mineru_result/原镜频测试用例参考/c0dd0da9-4671-411d-b02c-295ea73ec930_content_list.json new file mode 100644 index 0000000..18cce5f --- /dev/null +++ b/backend/planner/mineru_result/原镜频测试用例参考/c0dd0da9-4671-411d-b02c-295ea73ec930_content_list.json @@ -0,0 +1,260 @@ +[ + { + "type": "text", + "text": "场景1:测试用例", + "text_level": 1, + "bbox": [ + 133, + 117, + 343, + 142 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "测试器件说明:测试中包含的五个核心器件五个核心仪器:频谱分析仪、信号源、开关矩阵、直流电源、示波器。Dut有SC频段接口和X频段接口,通过配置开关矩阵可以实现仪器间连接的更改。", + "bbox": [ + 132, + 161, + 905, + 262 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "本次测试项目共有三项:", + "bbox": [ + 205, + 284, + 450, + 306 + ], + "page_idx": 0 + }, + { + "type": "list", + "sub_type": "text", + "list_items": [ + "a)上电测试:连接好各个设备,检查各个器件的工作情况,设置OCP,OVP等等操作。", + "b)镜频测试:DUT电源供电28V,电流2.9A;测试频段:SC波段(2.7GHz~6.2GHz)和X波段(8GHz~12GHz);频谱仪SPAN=500MHz;信号源RF Power:SC频段=-25+线损+30(衰减器值);X频段=-40+线损+30(衰减器值);" + ], + "bbox": [ + 132, + 321, + 890, + 526 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "测试内容:例如SC波段信号源power=-25dBm,f=2.7GHz,频谱分析仪f=2.7GHz,读取频谱分析仪Max Peak功率值P1;信号源功率及频率保持不变,频谱分析仪f-=3.84GHz,读取频谱分析仪Max Peak功率值P2。", + "bbox": [ + 132, + 540, + 898, + 640 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "本次测试信号源在以下四个频点上进行测试;", + "bbox": [ + 204, + 656, + 656, + 678 + ], + "page_idx": 0 + }, + { + "type": "list", + "sub_type": "text", + "list_items": [ + "2.7GHz 时频谱仪在 2.7GHz 和 3.88GHz", + "6.2GHz 时频谱仪在 6.2GHz 和 5.88GHz" + ], + "bbox": [ + 204, + 695, + 596, + 753 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "8GHz 时频谱仪在 8GHz 和 11GHz", + "bbox": [ + 204, + 772, + 544, + 792 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "12GHz 时频谱仪在 12GHz 和 15GHz", + "bbox": [ + 205, + 810, + 566, + 830 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "注意:镜频测试中不需要体现线缆损耗值。", + "bbox": [ + 204, + 848, + 632, + 869 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "SC 波段, DUT 在频率 $2.7 \\mathrm{GHz}$ 的镜像抑制比= (P1-P2) >7dB 判定合", + "bbox": [ + 204, + 886, + 888, + 907 + ], + "page_idx": 0 + }, + { + "type": "page_number", + "text": "第1页共4页", + "bbox": [ + 472, + 928, + 602, + 946 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "格。不合格报告中标红。", + "bbox": [ + 133, + 109, + 377, + 131 + ], + "page_idx": 1 + }, + { + "type": "text", + "text": "c)断电测试:释放资源,关闭各种仪器的状态", + "bbox": [ + 148, + 171, + 609, + 194 + ], + "page_idx": 1 + }, + { + "type": "text", + "text": "表 1: 全壳测试报告模板", + "bbox": [ + 450, + 202, + 665, + 222 + ], + "page_idx": 1 + }, + { + "type": "table", + "img_path": "images/13e3fab38868d97ba85faed2dc5ae88728483a29d223074fac0122102d00930e.jpg", + "table_caption": [], + "table_footnote": [], + "table_body": "
", + "bbox": [ + 0, + 325, + 676, + 902 + ], + "page_idx": 1 + }, + { + "type": "page_number", + "text": "第2页共4页", + "bbox": [ + 473, + 928, + 601, + 946 + ], + "page_idx": 1 + }, + { + "type": "table", + "img_path": "", + "table_caption": [], + "table_footnote": [], + "bbox": [ + 0, + 106, + 676, + 898 + ], + "page_idx": 2 + }, + { + "type": "page_number", + "text": "第3页共4页", + "bbox": [ + 473, + 928, + 601, + 946 + ], + "page_idx": 2 + }, + { + "type": "table", + "img_path": "", + "table_caption": [], + "table_footnote": [], + "bbox": [ + 0, + 104, + 676, + 371 + ], + "page_idx": 3 + }, + { + "type": "text", + "text": "表 1: 全壳测试报告模板", + "bbox": [ + 450, + 401, + 665, + 420 + ], + "page_idx": 3 + }, + { + "type": "page_number", + "text": "第4页共4页", + "bbox": [ + 473, + 928, + 601, + 946 + ], + "page_idx": 3 + } +] \ No newline at end of file diff --git a/backend/planner/mineru_result/原镜频测试用例参考/c0dd0da9-4671-411d-b02c-295ea73ec930_model.json b/backend/planner/mineru_result/原镜频测试用例参考/c0dd0da9-4671-411d-b02c-295ea73ec930_model.json new file mode 100644 index 0000000..3490d90 --- /dev/null +++ b/backend/planner/mineru_result/原镜频测试用例参考/c0dd0da9-4671-411d-b02c-295ea73ec930_model.json @@ -0,0 +1,296 @@ +[ + [ + { + "type": "title", + "bbox": [ + 0.134, + 0.118, + 0.344, + 0.143 + ], + "angle": 0, + "content": "场景1:测试用例" + }, + { + "type": "text", + "bbox": [ + 0.133, + 0.162, + 0.906, + 0.263 + ], + "angle": 0, + "content": "测试器件说明:测试中包含的五个核心器件五个核心仪器:频谱分析仪、信号源、开关矩阵、直流电源、示波器。Dut有SC频段接口和X频段接口,通过配置开关矩阵可以实现仪器间连接的更改。" + }, + { + "type": "text", + "bbox": [ + 0.206, + 0.285, + 0.452, + 0.308 + ], + "angle": 0, + "content": "本次测试项目共有三项:" + }, + { + "type": "text", + "bbox": [ + 0.133, + 0.323, + 0.892, + 0.375 + ], + "angle": 0, + "content": "a)上电测试:连接好各个设备,检查各个器件的工作情况,设置OCP,OVP等等操作。" + }, + { + "type": "text", + "bbox": [ + 0.133, + 0.388, + 0.874, + 0.527 + ], + "angle": 0, + "content": "b)镜频测试:DUT电源供电28V,电流2.9A;测试频段:SC波段(2.7GHz~6.2GHz)和X波段(8GHz~12GHz);频谱仪SPAN=500MHz;信号源RF Power:SC频段=-25+线损+30(衰减器值);X频段=-40+线损+30(衰减器值);" + }, + { + "type": "list", + "bbox": [ + 0.133, + 0.323, + 0.892, + 0.527 + ], + "angle": 0, + "content": null + }, + { + "type": "text", + "bbox": [ + 0.133, + 0.541, + 0.9, + 0.641 + ], + "angle": 0, + "content": "测试内容:例如SC波段信号源power=-25dBm,f=2.7GHz,频谱分析仪f=2.7GHz,读取频谱分析仪Max Peak功率值P1;信号源功率及频率保持不变,频谱分析仪f-=3.84GHz,读取频谱分析仪Max Peak功率值P2。" + }, + { + "type": "text", + "bbox": [ + 0.205, + 0.657, + 0.657, + 0.679 + ], + "angle": 0, + "content": "本次测试信号源在以下四个频点上进行测试;" + }, + { + "type": "text", + "bbox": [ + 0.205, + 0.696, + 0.597, + 0.716 + ], + "angle": 0, + "content": "2.7GHz 时频谱仪在 2.7GHz 和 3.88GHz" + }, + { + "type": "text", + "bbox": [ + 0.205, + 0.734, + 0.596, + 0.755 + ], + "angle": 0, + "content": "6.2GHz 时频谱仪在 6.2GHz 和 5.88GHz" + }, + { + "type": "list", + "bbox": [ + 0.205, + 0.696, + 0.597, + 0.755 + ], + "angle": 0, + "content": null + }, + { + "type": "text", + "bbox": [ + 0.205, + 0.773, + 0.545, + 0.793 + ], + "angle": 0, + "content": "8GHz 时频谱仪在 8GHz 和 11GHz" + }, + { + "type": "text", + "bbox": [ + 0.206, + 0.811, + 0.567, + 0.832 + ], + "angle": 0, + "content": "12GHz 时频谱仪在 12GHz 和 15GHz" + }, + { + "type": "text", + "bbox": [ + 0.205, + 0.849, + 0.633, + 0.87 + ], + "angle": 0, + "content": "注意:镜频测试中不需要体现线缆损耗值。" + }, + { + "type": "text", + "bbox": [ + 0.205, + 0.887, + 0.89, + 0.909 + ], + "angle": 0, + "content": "SC 波段, DUT 在频率 \\(2.7 \\mathrm{GHz}\\) 的镜像抑制比= (P1-P2) >7dB 判定合" + }, + { + "type": "page_number", + "bbox": [ + 0.473, + 0.929, + 0.603, + 0.948 + ], + "angle": 0, + "content": "第1页共4页" + } + ], + [ + { + "type": "text", + "bbox": [ + 0.134, + 0.11, + 0.378, + 0.132 + ], + "angle": 0, + "content": "格。不合格报告中标红。" + }, + { + "type": "text", + "bbox": [ + 0.15, + 0.172, + 0.611, + 0.195 + ], + "angle": 0, + "content": "c)断电测试:释放资源,关闭各种仪器的状态" + }, + { + "type": "text", + "bbox": [ + 0.451, + 0.203, + 0.666, + 0.223 + ], + "angle": 0, + "content": "表 1: 全壳测试报告模板" + }, + { + "type": "table", + "bbox": [ + 0.0, + 0.326, + 0.677, + 0.904 + ], + "angle": 0, + "content": "
" + }, + { + "type": "page_number", + "bbox": [ + 0.474, + 0.929, + 0.602, + 0.947 + ], + "angle": 0, + "content": "第2页共4页" + } + ], + [ + { + "type": "table", + "bbox": [ + 0.0, + 0.107, + 0.677, + 0.9 + ], + "angle": 0, + "content": "
" + }, + { + "type": "page_number", + "bbox": [ + 0.474, + 0.929, + 0.602, + 0.947 + ], + "angle": 0, + "content": "第3页共4页" + } + ], + [ + { + "type": "table", + "bbox": [ + 0.0, + 0.106, + 0.677, + 0.372 + ], + "angle": 0, + "content": "
" + }, + { + "type": "table_caption", + "bbox": [ + 0.452, + 0.402, + 0.666, + 0.421 + ], + "angle": 0, + "content": "表 1: 全壳测试报告模板" + }, + { + "type": "page_number", + "bbox": [ + 0.474, + 0.929, + 0.602, + 0.947 + ], + "angle": 0, + "content": "第4页共4页" + } + ] +] \ No newline at end of file diff --git a/backend/planner/mineru_result/原镜频测试用例参考/c0dd0da9-4671-411d-b02c-295ea73ec930_origin.pdf b/backend/planner/mineru_result/原镜频测试用例参考/c0dd0da9-4671-411d-b02c-295ea73ec930_origin.pdf new file mode 100644 index 0000000..fe49936 Binary files /dev/null and b/backend/planner/mineru_result/原镜频测试用例参考/c0dd0da9-4671-411d-b02c-295ea73ec930_origin.pdf differ diff --git a/backend/planner/mineru_result/原镜频测试用例参考/e760f60d-cfd1-43d4-81cd-6bb8605e050d_content_list.json b/backend/planner/mineru_result/原镜频测试用例参考/e760f60d-cfd1-43d4-81cd-6bb8605e050d_content_list.json new file mode 100644 index 0000000..9047555 --- /dev/null +++ b/backend/planner/mineru_result/原镜频测试用例参考/e760f60d-cfd1-43d4-81cd-6bb8605e050d_content_list.json @@ -0,0 +1,260 @@ +[ + { + "type": "text", + "text": "场景1:测试用例", + "text_level": 1, + "bbox": [ + 133, + 117, + 343, + 142 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "测试器件说明:测试中包含的五个核心器件五个核心仪器:频谱分析仪、信号源、开关矩阵、直流电源、示波器。Dut有SC频段接口和X频段接口,通过配置开关矩阵可以实现仪器间连接的更改。", + "bbox": [ + 132, + 161, + 905, + 262 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "本次测试项目共有三项:", + "bbox": [ + 205, + 284, + 450, + 306 + ], + "page_idx": 0 + }, + { + "type": "list", + "sub_type": "text", + "list_items": [ + "a)上电测试:连接好各个设备,检查各个器件的工作情况,设置OCP,OVP等等操作。", + "b)镜频测试:DUT电源供电28V,电流2.9A;测试频段:SC波段(2.7GHz~6.2GHz)和X波段(8GHz~12GHz);频谱仪SPAN=500MHz;信号源RF Power:SC频段=-25+线损+30(衰减器值);X频段=-40+线损+30(衰减器值);" + ], + "bbox": [ + 132, + 321, + 890, + 526 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "测试内容:例如SC波段信号源power=-25dBm,f=2.7GHz,频谱分析仪f=2.7GHz,读取频谱分析仪Max Peak功率值P1;信号源功率及频率保持不变,频谱分析仪f-=3.84GHz,读取频谱分析仪Max Peak功率值P2。", + "bbox": [ + 132, + 540, + 898, + 640 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "本次测试信号源在以下四个频点上进行测试;", + "bbox": [ + 204, + 656, + 656, + 676 + ], + "page_idx": 0 + }, + { + "type": "list", + "sub_type": "text", + "list_items": [ + "2.7GHz 时频谱仪在 2.7GHz 和 3.88GHz", + "6.2GHz 时频谱仪在 6.2GHz 和 5.88GHz" + ], + "bbox": [ + 204, + 695, + 596, + 753 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "8GHz 时频谱仪在 8GHz 和 11GHz", + "bbox": [ + 204, + 772, + 544, + 792 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "12GHz 时频谱仪在 12GHz 和 15GHz", + "bbox": [ + 205, + 810, + 566, + 829 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "注意:镜频测试中不需要体现线缆损耗值。", + "bbox": [ + 204, + 848, + 632, + 869 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "SC 波段, DUT 在频率 $2.7 \\mathrm{GHz}$ 的镜像抑制比= (P1-P2) >7dB 判定合", + "bbox": [ + 204, + 886, + 888, + 907 + ], + "page_idx": 0 + }, + { + "type": "page_number", + "text": "第1页共4页", + "bbox": [ + 473, + 928, + 602, + 946 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "格。不合格报告中标红。", + "bbox": [ + 133, + 109, + 377, + 131 + ], + "page_idx": 1 + }, + { + "type": "text", + "text": "c)断电测试:释放资源,关闭各种仪器的状态", + "bbox": [ + 148, + 171, + 609, + 194 + ], + "page_idx": 1 + }, + { + "type": "text", + "text": "表 1: 全壳测试报告模板", + "bbox": [ + 450, + 202, + 665, + 222 + ], + "page_idx": 1 + }, + { + "type": "table", + "img_path": "images/13e3fab38868d97ba85faed2dc5ae88728483a29d223074fac0122102d00930e.jpg", + "table_caption": [], + "table_footnote": [], + "table_body": "
", + "bbox": [ + 0, + 325, + 676, + 902 + ], + "page_idx": 1 + }, + { + "type": "page_number", + "text": "第2页共4页", + "bbox": [ + 473, + 928, + 601, + 946 + ], + "page_idx": 1 + }, + { + "type": "table", + "img_path": "", + "table_caption": [], + "table_footnote": [], + "bbox": [ + 0, + 106, + 676, + 898 + ], + "page_idx": 2 + }, + { + "type": "page_number", + "text": "第3页共4页", + "bbox": [ + 473, + 928, + 601, + 946 + ], + "page_idx": 2 + }, + { + "type": "table", + "img_path": "", + "table_caption": [], + "table_footnote": [], + "bbox": [ + 0, + 104, + 676, + 371 + ], + "page_idx": 3 + }, + { + "type": "text", + "text": "表 1: 全壳测试报告模板", + "bbox": [ + 450, + 401, + 665, + 420 + ], + "page_idx": 3 + }, + { + "type": "page_number", + "text": "第4页共4页", + "bbox": [ + 473, + 928, + 601, + 946 + ], + "page_idx": 3 + } +] \ No newline at end of file diff --git a/backend/planner/mineru_result/原镜频测试用例参考/e760f60d-cfd1-43d4-81cd-6bb8605e050d_model.json b/backend/planner/mineru_result/原镜频测试用例参考/e760f60d-cfd1-43d4-81cd-6bb8605e050d_model.json new file mode 100644 index 0000000..736b557 --- /dev/null +++ b/backend/planner/mineru_result/原镜频测试用例参考/e760f60d-cfd1-43d4-81cd-6bb8605e050d_model.json @@ -0,0 +1,296 @@ +[ + [ + { + "type": "title", + "bbox": [ + 0.134, + 0.118, + 0.344, + 0.143 + ], + "angle": 0, + "content": "场景1:测试用例" + }, + { + "type": "text", + "bbox": [ + 0.133, + 0.162, + 0.906, + 0.263 + ], + "angle": 0, + "content": "测试器件说明:测试中包含的五个核心器件五个核心仪器:频谱分析仪、信号源、开关矩阵、直流电源、示波器。Dut有SC频段接口和X频段接口,通过配置开关矩阵可以实现仪器间连接的更改。" + }, + { + "type": "text", + "bbox": [ + 0.206, + 0.285, + 0.452, + 0.308 + ], + "angle": 0, + "content": "本次测试项目共有三项:" + }, + { + "type": "text", + "bbox": [ + 0.133, + 0.323, + 0.892, + 0.375 + ], + "angle": 0, + "content": "a)上电测试:连接好各个设备,检查各个器件的工作情况,设置OCP,OVP等等操作。" + }, + { + "type": "text", + "bbox": [ + 0.133, + 0.388, + 0.874, + 0.527 + ], + "angle": 0, + "content": "b)镜频测试:DUT电源供电28V,电流2.9A;测试频段:SC波段(2.7GHz~6.2GHz)和X波段(8GHz~12GHz);频谱仪SPAN=500MHz;信号源RF Power:SC频段=-25+线损+30(衰减器值);X频段=-40+线损+30(衰减器值);" + }, + { + "type": "list", + "bbox": [ + 0.133, + 0.323, + 0.892, + 0.527 + ], + "angle": 0, + "content": null + }, + { + "type": "text", + "bbox": [ + 0.133, + 0.541, + 0.9, + 0.641 + ], + "angle": 0, + "content": "测试内容:例如SC波段信号源power=-25dBm,f=2.7GHz,频谱分析仪f=2.7GHz,读取频谱分析仪Max Peak功率值P1;信号源功率及频率保持不变,频谱分析仪f-=3.84GHz,读取频谱分析仪Max Peak功率值P2。" + }, + { + "type": "text", + "bbox": [ + 0.205, + 0.657, + 0.657, + 0.678 + ], + "angle": 0, + "content": "本次测试信号源在以下四个频点上进行测试;" + }, + { + "type": "text", + "bbox": [ + 0.205, + 0.696, + 0.597, + 0.716 + ], + "angle": 0, + "content": "2.7GHz 时频谱仪在 2.7GHz 和 3.88GHz" + }, + { + "type": "text", + "bbox": [ + 0.205, + 0.734, + 0.596, + 0.755 + ], + "angle": 0, + "content": "6.2GHz 时频谱仪在 6.2GHz 和 5.88GHz" + }, + { + "type": "list", + "bbox": [ + 0.205, + 0.696, + 0.597, + 0.755 + ], + "angle": 0, + "content": null + }, + { + "type": "text", + "bbox": [ + 0.205, + 0.773, + 0.545, + 0.793 + ], + "angle": 0, + "content": "8GHz 时频谱仪在 8GHz 和 11GHz" + }, + { + "type": "text", + "bbox": [ + 0.206, + 0.811, + 0.567, + 0.83 + ], + "angle": 0, + "content": "12GHz 时频谱仪在 12GHz 和 15GHz" + }, + { + "type": "text", + "bbox": [ + 0.205, + 0.849, + 0.633, + 0.87 + ], + "angle": 0, + "content": "注意:镜频测试中不需要体现线缆损耗值。" + }, + { + "type": "text", + "bbox": [ + 0.205, + 0.887, + 0.89, + 0.908 + ], + "angle": 0, + "content": "SC 波段, DUT 在频率 \\(2.7 \\mathrm{GHz}\\) 的镜像抑制比= (P1-P2) >7dB 判定合" + }, + { + "type": "page_number", + "bbox": [ + 0.474, + 0.929, + 0.603, + 0.948 + ], + "angle": 0, + "content": "第1页共4页" + } + ], + [ + { + "type": "text", + "bbox": [ + 0.134, + 0.11, + 0.378, + 0.132 + ], + "angle": 0, + "content": "格。不合格报告中标红。" + }, + { + "type": "text", + "bbox": [ + 0.15, + 0.172, + 0.611, + 0.195 + ], + "angle": 0, + "content": "c)断电测试:释放资源,关闭各种仪器的状态" + }, + { + "type": "text", + "bbox": [ + 0.451, + 0.203, + 0.666, + 0.223 + ], + "angle": 0, + "content": "表 1: 全壳测试报告模板" + }, + { + "type": "table", + "bbox": [ + 0.0, + 0.326, + 0.677, + 0.904 + ], + "angle": 0, + "content": "
" + }, + { + "type": "page_number", + "bbox": [ + 0.474, + 0.929, + 0.602, + 0.947 + ], + "angle": 0, + "content": "第2页共4页" + } + ], + [ + { + "type": "table", + "bbox": [ + 0.0, + 0.107, + 0.677, + 0.9 + ], + "angle": 0, + "content": "
" + }, + { + "type": "page_number", + "bbox": [ + 0.474, + 0.929, + 0.602, + 0.947 + ], + "angle": 0, + "content": "第3页共4页" + } + ], + [ + { + "type": "table", + "bbox": [ + 0.0, + 0.106, + 0.677, + 0.372 + ], + "angle": 0, + "content": "
" + }, + { + "type": "table_caption", + "bbox": [ + 0.452, + 0.402, + 0.666, + 0.421 + ], + "angle": 0, + "content": "表 1: 全壳测试报告模板" + }, + { + "type": "page_number", + "bbox": [ + 0.474, + 0.929, + 0.602, + 0.947 + ], + "angle": 0, + "content": "第4页共4页" + } + ] +] \ No newline at end of file diff --git a/backend/planner/mineru_result/原镜频测试用例参考/e760f60d-cfd1-43d4-81cd-6bb8605e050d_origin.pdf b/backend/planner/mineru_result/原镜频测试用例参考/e760f60d-cfd1-43d4-81cd-6bb8605e050d_origin.pdf new file mode 100644 index 0000000..d594d7d Binary files /dev/null and b/backend/planner/mineru_result/原镜频测试用例参考/e760f60d-cfd1-43d4-81cd-6bb8605e050d_origin.pdf differ diff --git a/backend/planner/mineru_result/原镜频测试用例参考/edd9462f-4516-415a-9963-3fa734299b87_content_list.json b/backend/planner/mineru_result/原镜频测试用例参考/edd9462f-4516-415a-9963-3fa734299b87_content_list.json new file mode 100644 index 0000000..18cce5f --- /dev/null +++ b/backend/planner/mineru_result/原镜频测试用例参考/edd9462f-4516-415a-9963-3fa734299b87_content_list.json @@ -0,0 +1,260 @@ +[ + { + "type": "text", + "text": "场景1:测试用例", + "text_level": 1, + "bbox": [ + 133, + 117, + 343, + 142 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "测试器件说明:测试中包含的五个核心器件五个核心仪器:频谱分析仪、信号源、开关矩阵、直流电源、示波器。Dut有SC频段接口和X频段接口,通过配置开关矩阵可以实现仪器间连接的更改。", + "bbox": [ + 132, + 161, + 905, + 262 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "本次测试项目共有三项:", + "bbox": [ + 205, + 284, + 450, + 306 + ], + "page_idx": 0 + }, + { + "type": "list", + "sub_type": "text", + "list_items": [ + "a)上电测试:连接好各个设备,检查各个器件的工作情况,设置OCP,OVP等等操作。", + "b)镜频测试:DUT电源供电28V,电流2.9A;测试频段:SC波段(2.7GHz~6.2GHz)和X波段(8GHz~12GHz);频谱仪SPAN=500MHz;信号源RF Power:SC频段=-25+线损+30(衰减器值);X频段=-40+线损+30(衰减器值);" + ], + "bbox": [ + 132, + 321, + 890, + 526 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "测试内容:例如SC波段信号源power=-25dBm,f=2.7GHz,频谱分析仪f=2.7GHz,读取频谱分析仪Max Peak功率值P1;信号源功率及频率保持不变,频谱分析仪f-=3.84GHz,读取频谱分析仪Max Peak功率值P2。", + "bbox": [ + 132, + 540, + 898, + 640 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "本次测试信号源在以下四个频点上进行测试;", + "bbox": [ + 204, + 656, + 656, + 678 + ], + "page_idx": 0 + }, + { + "type": "list", + "sub_type": "text", + "list_items": [ + "2.7GHz 时频谱仪在 2.7GHz 和 3.88GHz", + "6.2GHz 时频谱仪在 6.2GHz 和 5.88GHz" + ], + "bbox": [ + 204, + 695, + 596, + 753 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "8GHz 时频谱仪在 8GHz 和 11GHz", + "bbox": [ + 204, + 772, + 544, + 792 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "12GHz 时频谱仪在 12GHz 和 15GHz", + "bbox": [ + 205, + 810, + 566, + 830 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "注意:镜频测试中不需要体现线缆损耗值。", + "bbox": [ + 204, + 848, + 632, + 869 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "SC 波段, DUT 在频率 $2.7 \\mathrm{GHz}$ 的镜像抑制比= (P1-P2) >7dB 判定合", + "bbox": [ + 204, + 886, + 888, + 907 + ], + "page_idx": 0 + }, + { + "type": "page_number", + "text": "第1页共4页", + "bbox": [ + 472, + 928, + 602, + 946 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "格。不合格报告中标红。", + "bbox": [ + 133, + 109, + 377, + 131 + ], + "page_idx": 1 + }, + { + "type": "text", + "text": "c)断电测试:释放资源,关闭各种仪器的状态", + "bbox": [ + 148, + 171, + 609, + 194 + ], + "page_idx": 1 + }, + { + "type": "text", + "text": "表 1: 全壳测试报告模板", + "bbox": [ + 450, + 202, + 665, + 222 + ], + "page_idx": 1 + }, + { + "type": "table", + "img_path": "images/13e3fab38868d97ba85faed2dc5ae88728483a29d223074fac0122102d00930e.jpg", + "table_caption": [], + "table_footnote": [], + "table_body": "
", + "bbox": [ + 0, + 325, + 676, + 902 + ], + "page_idx": 1 + }, + { + "type": "page_number", + "text": "第2页共4页", + "bbox": [ + 473, + 928, + 601, + 946 + ], + "page_idx": 1 + }, + { + "type": "table", + "img_path": "", + "table_caption": [], + "table_footnote": [], + "bbox": [ + 0, + 106, + 676, + 898 + ], + "page_idx": 2 + }, + { + "type": "page_number", + "text": "第3页共4页", + "bbox": [ + 473, + 928, + 601, + 946 + ], + "page_idx": 2 + }, + { + "type": "table", + "img_path": "", + "table_caption": [], + "table_footnote": [], + "bbox": [ + 0, + 104, + 676, + 371 + ], + "page_idx": 3 + }, + { + "type": "text", + "text": "表 1: 全壳测试报告模板", + "bbox": [ + 450, + 401, + 665, + 420 + ], + "page_idx": 3 + }, + { + "type": "page_number", + "text": "第4页共4页", + "bbox": [ + 473, + 928, + 601, + 946 + ], + "page_idx": 3 + } +] \ No newline at end of file diff --git a/backend/planner/mineru_result/原镜频测试用例参考/edd9462f-4516-415a-9963-3fa734299b87_model.json b/backend/planner/mineru_result/原镜频测试用例参考/edd9462f-4516-415a-9963-3fa734299b87_model.json new file mode 100644 index 0000000..aa728d9 --- /dev/null +++ b/backend/planner/mineru_result/原镜频测试用例参考/edd9462f-4516-415a-9963-3fa734299b87_model.json @@ -0,0 +1,296 @@ +[ + [ + { + "type": "title", + "bbox": [ + 0.134, + 0.118, + 0.344, + 0.143 + ], + "angle": 0, + "content": "场景1:测试用例" + }, + { + "type": "text", + "bbox": [ + 0.133, + 0.162, + 0.906, + 0.263 + ], + "angle": 0, + "content": "测试器件说明:测试中包含的五个核心器件五个核心仪器:频谱分析仪、信号源、开关矩阵、直流电源、示波器。Dut有SC频段接口和X频段接口,通过配置开关矩阵可以实现仪器间连接的更改。" + }, + { + "type": "text", + "bbox": [ + 0.206, + 0.285, + 0.452, + 0.308 + ], + "angle": 0, + "content": "本次测试项目共有三项:" + }, + { + "type": "text", + "bbox": [ + 0.133, + 0.323, + 0.892, + 0.375 + ], + "angle": 0, + "content": "a)上电测试:连接好各个设备,检查各个器件的工作情况,设置OCP,OVP等等操作。" + }, + { + "type": "text", + "bbox": [ + 0.133, + 0.388, + 0.874, + 0.527 + ], + "angle": 0, + "content": "b)镜频测试:DUT电源供电28V,电流2.9A;测试频段:SC波段(2.7GHz~6.2GHz)和X波段(8GHz~12GHz);频谱仪SPAN=500MHz;信号源RF Power:SC频段=-25+线损+30(衰减器值);X频段=-40+线损+30(衰减器值);" + }, + { + "type": "list", + "bbox": [ + 0.133, + 0.323, + 0.892, + 0.527 + ], + "angle": 0, + "content": null + }, + { + "type": "text", + "bbox": [ + 0.133, + 0.541, + 0.9, + 0.641 + ], + "angle": 0, + "content": "测试内容:例如SC波段信号源power=-25dBm,f=2.7GHz,频谱分析仪f=2.7GHz,读取频谱分析仪Max Peak功率值P1;信号源功率及频率保持不变,频谱分析仪f-=3.84GHz,读取频谱分析仪Max Peak功率值P2。" + }, + { + "type": "text", + "bbox": [ + 0.205, + 0.657, + 0.657, + 0.679 + ], + "angle": 0, + "content": "本次测试信号源在以下四个频点上进行测试;" + }, + { + "type": "text", + "bbox": [ + 0.205, + 0.696, + 0.597, + 0.716 + ], + "angle": 0, + "content": "2.7GHz 时频谱仪在 2.7GHz 和 3.88GHz" + }, + { + "type": "text", + "bbox": [ + 0.205, + 0.734, + 0.596, + 0.755 + ], + "angle": 0, + "content": "6.2GHz 时频谱仪在 6.2GHz 和 5.88GHz" + }, + { + "type": "list", + "bbox": [ + 0.205, + 0.696, + 0.597, + 0.755 + ], + "angle": 0, + "content": null + }, + { + "type": "text", + "bbox": [ + 0.205, + 0.773, + 0.545, + 0.793 + ], + "angle": 0, + "content": "8GHz 时频谱仪在 8GHz 和 11GHz" + }, + { + "type": "text", + "bbox": [ + 0.206, + 0.811, + 0.567, + 0.831 + ], + "angle": 0, + "content": "12GHz 时频谱仪在 12GHz 和 15GHz" + }, + { + "type": "text", + "bbox": [ + 0.205, + 0.849, + 0.633, + 0.87 + ], + "angle": 0, + "content": "注意:镜频测试中不需要体现线缆损耗值。" + }, + { + "type": "text", + "bbox": [ + 0.205, + 0.887, + 0.89, + 0.909 + ], + "angle": 0, + "content": "SC 波段, DUT 在频率 \\(2.7 \\mathrm{GHz}\\) 的镜像抑制比= (P1-P2) >7dB 判定合" + }, + { + "type": "page_number", + "bbox": [ + 0.473, + 0.929, + 0.603, + 0.948 + ], + "angle": 0, + "content": "第1页共4页" + } + ], + [ + { + "type": "text", + "bbox": [ + 0.134, + 0.11, + 0.378, + 0.132 + ], + "angle": 0, + "content": "格。不合格报告中标红。" + }, + { + "type": "text", + "bbox": [ + 0.15, + 0.172, + 0.611, + 0.195 + ], + "angle": 0, + "content": "c)断电测试:释放资源,关闭各种仪器的状态" + }, + { + "type": "text", + "bbox": [ + 0.451, + 0.203, + 0.666, + 0.223 + ], + "angle": 0, + "content": "表 1: 全壳测试报告模板" + }, + { + "type": "table", + "bbox": [ + 0.0, + 0.326, + 0.677, + 0.904 + ], + "angle": 0, + "content": "
" + }, + { + "type": "page_number", + "bbox": [ + 0.474, + 0.929, + 0.602, + 0.947 + ], + "angle": 0, + "content": "第2页共4页" + } + ], + [ + { + "type": "table", + "bbox": [ + 0.0, + 0.107, + 0.677, + 0.9 + ], + "angle": 0, + "content": "
" + }, + { + "type": "page_number", + "bbox": [ + 0.474, + 0.929, + 0.602, + 0.947 + ], + "angle": 0, + "content": "第3页共4页" + } + ], + [ + { + "type": "table", + "bbox": [ + 0.0, + 0.106, + 0.677, + 0.372 + ], + "angle": 0, + "content": "
" + }, + { + "type": "table_caption", + "bbox": [ + 0.452, + 0.402, + 0.666, + 0.421 + ], + "angle": 0, + "content": "表 1: 全壳测试报告模板" + }, + { + "type": "page_number", + "bbox": [ + 0.474, + 0.929, + 0.602, + 0.947 + ], + "angle": 0, + "content": "第4页共4页" + } + ] +] \ No newline at end of file diff --git a/backend/planner/mineru_result/原镜频测试用例参考/edd9462f-4516-415a-9963-3fa734299b87_origin.pdf b/backend/planner/mineru_result/原镜频测试用例参考/edd9462f-4516-415a-9963-3fa734299b87_origin.pdf new file mode 100644 index 0000000..4a2d1a9 Binary files /dev/null and b/backend/planner/mineru_result/原镜频测试用例参考/edd9462f-4516-415a-9963-3fa734299b87_origin.pdf differ diff --git a/backend/planner/mineru_result/原镜频测试用例参考/ede8d862-4694-44f1-83ef-cb2bf6cc1058_content_list.json b/backend/planner/mineru_result/原镜频测试用例参考/ede8d862-4694-44f1-83ef-cb2bf6cc1058_content_list.json new file mode 100644 index 0000000..4ca66e9 --- /dev/null +++ b/backend/planner/mineru_result/原镜频测试用例参考/ede8d862-4694-44f1-83ef-cb2bf6cc1058_content_list.json @@ -0,0 +1,260 @@ +[ + { + "type": "text", + "text": "场景1:测试用例", + "text_level": 1, + "bbox": [ + 133, + 117, + 343, + 142 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "测试器件说明:测试中包含的五个核心器件五个核心仪器:频谱分析仪、信号源、开关矩阵、直流电源、示波器。Dut有SC频段接口和X频段接口,通过配置开关矩阵可以实现仪器间连接的更改。", + "bbox": [ + 132, + 161, + 905, + 262 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "本次测试项目共有三项:", + "bbox": [ + 205, + 284, + 450, + 306 + ], + "page_idx": 0 + }, + { + "type": "list", + "sub_type": "text", + "list_items": [ + "a)上电测试:连接好各个设备,检查各个器件的工作情况,设置OCP,OVP等等操作。", + "b)镜频测试:DUT电源供电28V,电流2.9A;测试频段:SC波段(2.7GHz~6.2GHz)和X波段(8GHz~12GHz);频谱仪SPAN=500MHz;信号源RF Power:SC频段=-25+线损+30(衰减器值);X频段=-40+线损+30(衰减器值);" + ], + "bbox": [ + 132, + 321, + 890, + 526 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "测试内容:例如SC波段信号源power=-25dBm,f=2.7GHz,频谱分析仪 $f = 2.7\\mathrm{GHz}$ ,读取频谱分析仪Max Peak功率值P1;信号源功率及频率保持不变,频谱分析仪 $f = 3.84\\mathrm{GHz}$ ,读取频谱分析仪Max Peak功率值P2。", + "bbox": [ + 132, + 540, + 898, + 640 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "本次测试信号源在以下四个频点上进行测试;", + "bbox": [ + 204, + 656, + 656, + 676 + ], + "page_idx": 0 + }, + { + "type": "list", + "sub_type": "text", + "list_items": [ + "2.7GHz 时频谱仪在 2.7GHz 和 3.88GHz", + "6.2GHz 时频谱仪在 6.2GHz 和 5.88GHz" + ], + "bbox": [ + 204, + 695, + 596, + 753 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "8GHz 时频谱仪在 8GHz 和 11GHz", + "bbox": [ + 204, + 772, + 544, + 792 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "12GHz 时频谱仪在 12GHz 和 15GHz", + "bbox": [ + 205, + 810, + 566, + 830 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "注意:镜频测试中不需要体现线缆损耗值。", + "bbox": [ + 204, + 848, + 632, + 869 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "SC 波段, DUT 在频率 $2.7 \\mathrm{GHz}$ 的镜像抑制比= (P1-P2) >7dB 判定合", + "bbox": [ + 204, + 886, + 888, + 907 + ], + "page_idx": 0 + }, + { + "type": "page_number", + "text": "第1页共4页", + "bbox": [ + 472, + 928, + 602, + 946 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "格。不合格报告中标红。", + "bbox": [ + 133, + 109, + 377, + 131 + ], + "page_idx": 1 + }, + { + "type": "text", + "text": "c)断电测试:释放资源,关闭各种仪器的状态", + "bbox": [ + 148, + 171, + 609, + 194 + ], + "page_idx": 1 + }, + { + "type": "text", + "text": "表 1: 全壳测试报告模板", + "bbox": [ + 450, + 202, + 665, + 222 + ], + "page_idx": 1 + }, + { + "type": "table", + "img_path": "images/13e3fab38868d97ba85faed2dc5ae88728483a29d223074fac0122102d00930e.jpg", + "table_caption": [], + "table_footnote": [], + "table_body": "
", + "bbox": [ + 0, + 325, + 676, + 902 + ], + "page_idx": 1 + }, + { + "type": "page_number", + "text": "第2页共4页", + "bbox": [ + 473, + 928, + 601, + 946 + ], + "page_idx": 1 + }, + { + "type": "table", + "img_path": "", + "table_caption": [], + "table_footnote": [], + "bbox": [ + 0, + 106, + 676, + 898 + ], + "page_idx": 2 + }, + { + "type": "page_number", + "text": "第3页共4页", + "bbox": [ + 473, + 928, + 601, + 946 + ], + "page_idx": 2 + }, + { + "type": "table", + "img_path": "", + "table_caption": [], + "table_footnote": [], + "bbox": [ + 0, + 104, + 676, + 371 + ], + "page_idx": 3 + }, + { + "type": "text", + "text": "表 1: 全壳测试报告模板", + "bbox": [ + 450, + 401, + 665, + 420 + ], + "page_idx": 3 + }, + { + "type": "page_number", + "text": "第4页共4页", + "bbox": [ + 473, + 928, + 601, + 946 + ], + "page_idx": 3 + } +] \ No newline at end of file diff --git a/backend/planner/mineru_result/原镜频测试用例参考/ede8d862-4694-44f1-83ef-cb2bf6cc1058_model.json b/backend/planner/mineru_result/原镜频测试用例参考/ede8d862-4694-44f1-83ef-cb2bf6cc1058_model.json new file mode 100644 index 0000000..7548705 --- /dev/null +++ b/backend/planner/mineru_result/原镜频测试用例参考/ede8d862-4694-44f1-83ef-cb2bf6cc1058_model.json @@ -0,0 +1,296 @@ +[ + [ + { + "type": "title", + "bbox": [ + 0.134, + 0.118, + 0.344, + 0.143 + ], + "angle": 0, + "content": "场景1:测试用例" + }, + { + "type": "text", + "bbox": [ + 0.133, + 0.162, + 0.906, + 0.263 + ], + "angle": 0, + "content": "测试器件说明:测试中包含的五个核心器件五个核心仪器:频谱分析仪、信号源、开关矩阵、直流电源、示波器。Dut有SC频段接口和X频段接口,通过配置开关矩阵可以实现仪器间连接的更改。" + }, + { + "type": "text", + "bbox": [ + 0.206, + 0.285, + 0.452, + 0.308 + ], + "angle": 0, + "content": "本次测试项目共有三项:" + }, + { + "type": "text", + "bbox": [ + 0.133, + 0.323, + 0.892, + 0.375 + ], + "angle": 0, + "content": "a)上电测试:连接好各个设备,检查各个器件的工作情况,设置OCP,OVP等等操作。" + }, + { + "type": "text", + "bbox": [ + 0.133, + 0.388, + 0.874, + 0.527 + ], + "angle": 0, + "content": "b)镜频测试:DUT电源供电28V,电流2.9A;测试频段:SC波段(2.7GHz~6.2GHz)和X波段(8GHz~12GHz);频谱仪SPAN=500MHz;信号源RF Power:SC频段=-25+线损+30(衰减器值);X频段=-40+线损+30(衰减器值);" + }, + { + "type": "list", + "bbox": [ + 0.133, + 0.323, + 0.892, + 0.527 + ], + "angle": 0, + "content": null + }, + { + "type": "text", + "bbox": [ + 0.133, + 0.541, + 0.9, + 0.641 + ], + "angle": 0, + "content": "测试内容:例如SC波段信号源power=-25dBm,f=2.7GHz,频谱分析仪 \\( f = 2.7\\mathrm{GHz} \\),读取频谱分析仪Max Peak功率值P1;信号源功率及频率保持不变,频谱分析仪 \\( f = 3.84\\mathrm{GHz} \\),读取频谱分析仪Max Peak功率值P2。" + }, + { + "type": "text", + "bbox": [ + 0.205, + 0.657, + 0.657, + 0.678 + ], + "angle": 0, + "content": "本次测试信号源在以下四个频点上进行测试;" + }, + { + "type": "text", + "bbox": [ + 0.205, + 0.696, + 0.597, + 0.716 + ], + "angle": 0, + "content": "2.7GHz 时频谱仪在 2.7GHz 和 3.88GHz" + }, + { + "type": "text", + "bbox": [ + 0.205, + 0.734, + 0.596, + 0.755 + ], + "angle": 0, + "content": "6.2GHz 时频谱仪在 6.2GHz 和 5.88GHz" + }, + { + "type": "list", + "bbox": [ + 0.205, + 0.696, + 0.597, + 0.755 + ], + "angle": 0, + "content": null + }, + { + "type": "text", + "bbox": [ + 0.205, + 0.773, + 0.545, + 0.793 + ], + "angle": 0, + "content": "8GHz 时频谱仪在 8GHz 和 11GHz" + }, + { + "type": "text", + "bbox": [ + 0.206, + 0.811, + 0.567, + 0.831 + ], + "angle": 0, + "content": "12GHz 时频谱仪在 12GHz 和 15GHz" + }, + { + "type": "text", + "bbox": [ + 0.205, + 0.849, + 0.633, + 0.87 + ], + "angle": 0, + "content": "注意:镜频测试中不需要体现线缆损耗值。" + }, + { + "type": "text", + "bbox": [ + 0.205, + 0.887, + 0.89, + 0.909 + ], + "angle": 0, + "content": "SC 波段, DUT 在频率 \\(2.7 \\mathrm{GHz}\\) 的镜像抑制比= (P1-P2) >7dB 判定合" + }, + { + "type": "page_number", + "bbox": [ + 0.473, + 0.929, + 0.603, + 0.948 + ], + "angle": 0, + "content": "第1页共4页" + } + ], + [ + { + "type": "text", + "bbox": [ + 0.134, + 0.11, + 0.378, + 0.132 + ], + "angle": 0, + "content": "格。不合格报告中标红。" + }, + { + "type": "text", + "bbox": [ + 0.15, + 0.172, + 0.611, + 0.195 + ], + "angle": 0, + "content": "c)断电测试:释放资源,关闭各种仪器的状态" + }, + { + "type": "text", + "bbox": [ + 0.451, + 0.203, + 0.666, + 0.223 + ], + "angle": 0, + "content": "表 1: 全壳测试报告模板" + }, + { + "type": "table", + "bbox": [ + 0.0, + 0.326, + 0.677, + 0.904 + ], + "angle": 0, + "content": "
" + }, + { + "type": "page_number", + "bbox": [ + 0.474, + 0.929, + 0.602, + 0.947 + ], + "angle": 0, + "content": "第2页共4页" + } + ], + [ + { + "type": "table", + "bbox": [ + 0.0, + 0.107, + 0.677, + 0.9 + ], + "angle": 0, + "content": "
" + }, + { + "type": "page_number", + "bbox": [ + 0.474, + 0.929, + 0.602, + 0.947 + ], + "angle": 0, + "content": "第3页共4页" + } + ], + [ + { + "type": "table", + "bbox": [ + 0.0, + 0.106, + 0.677, + 0.372 + ], + "angle": 0, + "content": "
" + }, + { + "type": "table_caption", + "bbox": [ + 0.452, + 0.402, + 0.666, + 0.421 + ], + "angle": 0, + "content": "表 1: 全壳测试报告模板" + }, + { + "type": "page_number", + "bbox": [ + 0.474, + 0.929, + 0.602, + 0.947 + ], + "angle": 0, + "content": "第4页共4页" + } + ] +] \ No newline at end of file diff --git a/backend/planner/mineru_result/原镜频测试用例参考/ede8d862-4694-44f1-83ef-cb2bf6cc1058_origin.pdf b/backend/planner/mineru_result/原镜频测试用例参考/ede8d862-4694-44f1-83ef-cb2bf6cc1058_origin.pdf new file mode 100644 index 0000000..7cd61b4 Binary files /dev/null and b/backend/planner/mineru_result/原镜频测试用例参考/ede8d862-4694-44f1-83ef-cb2bf6cc1058_origin.pdf differ diff --git a/backend/planner/mineru_result/原镜频测试用例参考/f678d74c-a3d2-4f02-831b-3d1c40da33b2_content_list.json b/backend/planner/mineru_result/原镜频测试用例参考/f678d74c-a3d2-4f02-831b-3d1c40da33b2_content_list.json new file mode 100644 index 0000000..99571e1 --- /dev/null +++ b/backend/planner/mineru_result/原镜频测试用例参考/f678d74c-a3d2-4f02-831b-3d1c40da33b2_content_list.json @@ -0,0 +1,260 @@ +[ + { + "type": "text", + "text": "场景1:测试用例", + "text_level": 1, + "bbox": [ + 133, + 117, + 343, + 142 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "测试器件说明:测试中包含的五个核心器件五个核心仪器:频谱分析仪、信号源、开关矩阵、直流电源、示波器。Dut有SC频段接口和X频段接口,通过配置开关矩阵可以实现仪器间连接的更改。", + "bbox": [ + 132, + 161, + 905, + 262 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "本次测试项目共有三项:", + "bbox": [ + 205, + 284, + 450, + 306 + ], + "page_idx": 0 + }, + { + "type": "list", + "sub_type": "text", + "list_items": [ + "a)上电测试:连接好各个设备,检查各个器件的工作情况,设置OCP,OVP,等等操作。", + "b)镜频测试:DUT电源供电28V,电流2.9A;测试频段:SC波段(2.7GHz~6.2GHz)和X波段(8GHz~12GHz);频谱仪SPAN=500MHz;信号源RF Power:SC频段=-25+线损+30(衰减器值);X频段=-40+线损+30(衰减器值);" + ], + "bbox": [ + 132, + 321, + 890, + 526 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "测试内容:例如SC波段信号源power=-25dBm,f=2.7GHz,频谱分析仪f=2.7GHz,读取频谱分析仪Max Peak功率值P1;信号源功率及频率保持不变,频谱分析仪f-=3.84GHz,读取频谱分析仪Max Peak功率值P2。", + "bbox": [ + 132, + 540, + 898, + 642 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "本次测试信号源在以下四个频点上进行测试;", + "bbox": [ + 204, + 656, + 656, + 678 + ], + "page_idx": 0 + }, + { + "type": "list", + "sub_type": "text", + "list_items": [ + "2.7GHz 时频谱仪在 2.7GHz 和 3.88GHz", + "6.2GHz 时频谱仪在 6.2GHz 和 5.88GHz" + ], + "bbox": [ + 204, + 695, + 596, + 753 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "8GHz 时频谱仪在 8GHz 和 11GHz", + "bbox": [ + 204, + 772, + 544, + 792 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "12GHz 时频谱仪在 12GHz 和 15GHz", + "bbox": [ + 205, + 810, + 566, + 830 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "注意:镜频测试中不需要体现线缆损耗值。", + "bbox": [ + 204, + 848, + 632, + 869 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "SC 波段, DUT 在频率 $2.7 \\mathrm{GHz}$ 的镜像抑制比= (P1-P2) >7dB 判定合", + "bbox": [ + 204, + 886, + 888, + 907 + ], + "page_idx": 0 + }, + { + "type": "page_number", + "text": "第1页共4页", + "bbox": [ + 472, + 928, + 602, + 946 + ], + "page_idx": 0 + }, + { + "type": "text", + "text": "格。不合格报告中标红。", + "bbox": [ + 133, + 108, + 377, + 131 + ], + "page_idx": 1 + }, + { + "type": "text", + "text": "c)断电测试:释放资源,关闭各种仪器的状态", + "bbox": [ + 148, + 171, + 609, + 194 + ], + "page_idx": 1 + }, + { + "type": "text", + "text": "表 1: 全壳测试报告模板", + "bbox": [ + 450, + 202, + 665, + 222 + ], + "page_idx": 1 + }, + { + "type": "table", + "img_path": "images/13e3fab38868d97ba85faed2dc5ae88728483a29d223074fac0122102d00930e.jpg", + "table_caption": [], + "table_footnote": [], + "table_body": "
", + "bbox": [ + 0, + 325, + 676, + 902 + ], + "page_idx": 1 + }, + { + "type": "page_number", + "text": "第2页共4页", + "bbox": [ + 473, + 928, + 601, + 946 + ], + "page_idx": 1 + }, + { + "type": "table", + "img_path": "", + "table_caption": [], + "table_footnote": [], + "bbox": [ + 0, + 106, + 676, + 898 + ], + "page_idx": 2 + }, + { + "type": "page_number", + "text": "第3页共4页", + "bbox": [ + 473, + 928, + 601, + 946 + ], + "page_idx": 2 + }, + { + "type": "table", + "img_path": "", + "table_caption": [], + "table_footnote": [], + "bbox": [ + 0, + 104, + 676, + 371 + ], + "page_idx": 3 + }, + { + "type": "text", + "text": "表 1: 全壳测试报告模板", + "bbox": [ + 450, + 401, + 665, + 420 + ], + "page_idx": 3 + }, + { + "type": "page_number", + "text": "第4页共4页", + "bbox": [ + 473, + 928, + 601, + 946 + ], + "page_idx": 3 + } +] \ No newline at end of file diff --git a/backend/planner/mineru_result/原镜频测试用例参考/f678d74c-a3d2-4f02-831b-3d1c40da33b2_model.json b/backend/planner/mineru_result/原镜频测试用例参考/f678d74c-a3d2-4f02-831b-3d1c40da33b2_model.json new file mode 100644 index 0000000..5f05bb7 --- /dev/null +++ b/backend/planner/mineru_result/原镜频测试用例参考/f678d74c-a3d2-4f02-831b-3d1c40da33b2_model.json @@ -0,0 +1,296 @@ +[ + [ + { + "type": "title", + "bbox": [ + 0.134, + 0.118, + 0.344, + 0.143 + ], + "angle": 0, + "content": "场景1:测试用例" + }, + { + "type": "text", + "bbox": [ + 0.133, + 0.162, + 0.906, + 0.263 + ], + "angle": 0, + "content": "测试器件说明:测试中包含的五个核心器件五个核心仪器:频谱分析仪、信号源、开关矩阵、直流电源、示波器。Dut有SC频段接口和X频段接口,通过配置开关矩阵可以实现仪器间连接的更改。" + }, + { + "type": "text", + "bbox": [ + 0.206, + 0.285, + 0.452, + 0.308 + ], + "angle": 0, + "content": "本次测试项目共有三项:" + }, + { + "type": "text", + "bbox": [ + 0.133, + 0.323, + 0.892, + 0.378 + ], + "angle": 0, + "content": "a)上电测试:连接好各个设备,检查各个器件的工作情况,设置OCP,OVP,等等操作。" + }, + { + "type": "text", + "bbox": [ + 0.133, + 0.388, + 0.874, + 0.527 + ], + "angle": 0, + "content": "b)镜频测试:DUT电源供电28V,电流2.9A;测试频段:SC波段(2.7GHz~6.2GHz)和X波段(8GHz~12GHz);频谱仪SPAN=500MHz;信号源RF Power:SC频段=-25+线损+30(衰减器值);X频段=-40+线损+30(衰减器值);" + }, + { + "type": "list", + "bbox": [ + 0.133, + 0.323, + 0.892, + 0.527 + ], + "angle": 0, + "content": null + }, + { + "type": "text", + "bbox": [ + 0.133, + 0.541, + 0.9, + 0.643 + ], + "angle": 0, + "content": "测试内容:例如SC波段信号源power=-25dBm,f=2.7GHz,频谱分析仪f=2.7GHz,读取频谱分析仪Max Peak功率值P1;信号源功率及频率保持不变,频谱分析仪f-=3.84GHz,读取频谱分析仪Max Peak功率值P2。" + }, + { + "type": "text", + "bbox": [ + 0.205, + 0.657, + 0.657, + 0.679 + ], + "angle": 0, + "content": "本次测试信号源在以下四个频点上进行测试;" + }, + { + "type": "text", + "bbox": [ + 0.205, + 0.696, + 0.597, + 0.716 + ], + "angle": 0, + "content": "2.7GHz 时频谱仪在 2.7GHz 和 3.88GHz" + }, + { + "type": "text", + "bbox": [ + 0.205, + 0.734, + 0.596, + 0.755 + ], + "angle": 0, + "content": "6.2GHz 时频谱仪在 6.2GHz 和 5.88GHz" + }, + { + "type": "list", + "bbox": [ + 0.205, + 0.696, + 0.597, + 0.755 + ], + "angle": 0, + "content": null + }, + { + "type": "text", + "bbox": [ + 0.205, + 0.773, + 0.545, + 0.793 + ], + "angle": 0, + "content": "8GHz 时频谱仪在 8GHz 和 11GHz" + }, + { + "type": "text", + "bbox": [ + 0.206, + 0.811, + 0.567, + 0.831 + ], + "angle": 0, + "content": "12GHz 时频谱仪在 12GHz 和 15GHz" + }, + { + "type": "text", + "bbox": [ + 0.205, + 0.849, + 0.633, + 0.87 + ], + "angle": 0, + "content": "注意:镜频测试中不需要体现线缆损耗值。" + }, + { + "type": "text", + "bbox": [ + 0.205, + 0.887, + 0.89, + 0.909 + ], + "angle": 0, + "content": "SC 波段, DUT 在频率 \\(2.7 \\mathrm{GHz}\\) 的镜像抑制比= (P1-P2) >7dB 判定合" + }, + { + "type": "page_number", + "bbox": [ + 0.473, + 0.929, + 0.603, + 0.948 + ], + "angle": 0, + "content": "第1页共4页" + } + ], + [ + { + "type": "text", + "bbox": [ + 0.134, + 0.109, + 0.379, + 0.132 + ], + "angle": 0, + "content": "格。不合格报告中标红。" + }, + { + "type": "text", + "bbox": [ + 0.15, + 0.172, + 0.611, + 0.195 + ], + "angle": 0, + "content": "c)断电测试:释放资源,关闭各种仪器的状态" + }, + { + "type": "text", + "bbox": [ + 0.451, + 0.203, + 0.666, + 0.223 + ], + "angle": 0, + "content": "表 1: 全壳测试报告模板" + }, + { + "type": "table", + "bbox": [ + 0.0, + 0.326, + 0.677, + 0.904 + ], + "angle": 0, + "content": "
" + }, + { + "type": "page_number", + "bbox": [ + 0.474, + 0.929, + 0.602, + 0.947 + ], + "angle": 0, + "content": "第2页共4页" + } + ], + [ + { + "type": "table", + "bbox": [ + 0.0, + 0.107, + 0.677, + 0.9 + ], + "angle": 0, + "content": "
" + }, + { + "type": "page_number", + "bbox": [ + 0.474, + 0.929, + 0.602, + 0.947 + ], + "angle": 0, + "content": "第3页共4页" + } + ], + [ + { + "type": "table", + "bbox": [ + 0.0, + 0.106, + 0.677, + 0.372 + ], + "angle": 0, + "content": "
" + }, + { + "type": "table_caption", + "bbox": [ + 0.451, + 0.402, + 0.666, + 0.421 + ], + "angle": 0, + "content": "表 1: 全壳测试报告模板" + }, + { + "type": "page_number", + "bbox": [ + 0.474, + 0.929, + 0.602, + 0.947 + ], + "angle": 0, + "content": "第4页共4页" + } + ] +] \ No newline at end of file diff --git a/backend/planner/mineru_result/原镜频测试用例参考/f678d74c-a3d2-4f02-831b-3d1c40da33b2_origin.pdf b/backend/planner/mineru_result/原镜频测试用例参考/f678d74c-a3d2-4f02-831b-3d1c40da33b2_origin.pdf new file mode 100644 index 0000000..e67fa24 Binary files /dev/null and b/backend/planner/mineru_result/原镜频测试用例参考/f678d74c-a3d2-4f02-831b-3d1c40da33b2_origin.pdf differ diff --git a/backend/planner/mineru_result/原镜频测试用例参考/full.md b/backend/planner/mineru_result/原镜频测试用例参考/full.md new file mode 100644 index 0000000..9da20f3 --- /dev/null +++ b/backend/planner/mineru_result/原镜频测试用例参考/full.md @@ -0,0 +1,33 @@ +# 场景1:测试用例 + +测试器件说明:测试中包含的五个核心器件五个核心仪器:频谱分析仪、信号源、开关矩阵、直流电源、示波器。Dut有SC频段接口和X频段接口,通过配置开关矩阵可以实现仪器间连接的更改。 + +本次测试项目共有三项: + +a)上电测试:连接好各个设备,检查各个器件的工作情况,设置OCP,OVP等等操作。 +b)镜频测试:DUT电源供电28V,电流2.9A;测试频段:SC波段(2.7GHz~6.2GHz)和X波段(8GHz~12GHz);频谱仪SPAN=500MHz;信号源RF Power:SC频段=-25+线损+30(衰减器值);X频段=-40+线损+30(衰减器值); + +测试内容:例如SC波段信号源power=-25dBm,f=2.7GHz,频谱分析仪f=2.7GHz,读取频谱分析仪Max Peak功率值P1;信号源功率及频率保持不变,频谱分析仪f-=3.84GHz,读取频谱分析仪Max Peak功率值P2。 + +本次测试信号源在以下四个频点上进行测试; + +2.7GHz 时频谱仪在 2.7GHz 和 3.88GHz +6.2GHz 时频谱仪在 6.2GHz 和 5.88GHz + +8GHz 时频谱仪在 8GHz 和 11GHz + +12GHz 时频谱仪在 12GHz 和 15GHz + +注意:镜频测试中不需要体现线缆损耗值。 + +SC 波段, DUT 在频率 $2.7 \mathrm{GHz}$ 的镜像抑制比= (P1-P2) >7dB 判定合 + +格。不合格报告中标红。 + +c)断电测试:释放资源,关闭各种仪器的状态 + +表 1: 全壳测试报告模板 + +
+ +表 1: 全壳测试报告模板 \ No newline at end of file diff --git a/backend/planner/mineru_result/原镜频测试用例参考/images/06d4517c575a3e8c79e7a804c4d6d7475c2d49bff7b410faac956b73e79f4ad4.jpg b/backend/planner/mineru_result/原镜频测试用例参考/images/06d4517c575a3e8c79e7a804c4d6d7475c2d49bff7b410faac956b73e79f4ad4.jpg new file mode 100644 index 0000000..829e889 Binary files /dev/null and b/backend/planner/mineru_result/原镜频测试用例参考/images/06d4517c575a3e8c79e7a804c4d6d7475c2d49bff7b410faac956b73e79f4ad4.jpg differ diff --git a/backend/planner/mineru_result/原镜频测试用例参考/images/13e3fab38868d97ba85faed2dc5ae88728483a29d223074fac0122102d00930e.jpg b/backend/planner/mineru_result/原镜频测试用例参考/images/13e3fab38868d97ba85faed2dc5ae88728483a29d223074fac0122102d00930e.jpg new file mode 100644 index 0000000..0d252a4 Binary files /dev/null and b/backend/planner/mineru_result/原镜频测试用例参考/images/13e3fab38868d97ba85faed2dc5ae88728483a29d223074fac0122102d00930e.jpg differ diff --git a/backend/planner/mineru_result/原镜频测试用例参考/images/b6cf8a7d959d074968c87f700fccb8e3b47e5bcc3382e6036d244a77624542b8.jpg b/backend/planner/mineru_result/原镜频测试用例参考/images/b6cf8a7d959d074968c87f700fccb8e3b47e5bcc3382e6036d244a77624542b8.jpg new file mode 100644 index 0000000..b050322 Binary files /dev/null and b/backend/planner/mineru_result/原镜频测试用例参考/images/b6cf8a7d959d074968c87f700fccb8e3b47e5bcc3382e6036d244a77624542b8.jpg differ diff --git a/backend/planner/mineru_result/原镜频测试用例参考/layout.json b/backend/planner/mineru_result/原镜频测试用例参考/layout.json new file mode 100644 index 0000000..e950a15 --- /dev/null +++ b/backend/planner/mineru_result/原镜频测试用例参考/layout.json @@ -0,0 +1,887 @@ +{ + "pdf_info": [ + { + "para_blocks": [ + { + "bbox": [ + 82, + 93, + 210, + 113 + ], + "type": "title", + "angle": 0, + "lines": [ + { + "bbox": [ + 82, + 93, + 210, + 113 + ], + "spans": [ + { + "bbox": [ + 82, + 93, + 210, + 113 + ], + "type": "text", + "content": "场景1:测试用例" + } + ] + } + ], + "index": 0 + }, + { + "bbox": [ + 81, + 128, + 554, + 208 + ], + "type": "text", + "angle": 0, + "lines": [ + { + "bbox": [ + 81, + 128, + 554, + 208 + ], + "spans": [ + { + "bbox": [ + 81, + 128, + 554, + 208 + ], + "type": "text", + "content": "测试器件说明:测试中包含的五个核心器件五个核心仪器:频谱分析仪、信号源、开关矩阵、直流电源、示波器。Dut有SC频段接口和X频段接口,通过配置开关矩阵可以实现仪器间连接的更改。" + } + ] + } + ], + "index": 1 + }, + { + "bbox": [ + 126, + 225, + 276, + 243 + ], + "type": "text", + "angle": 0, + "lines": [ + { + "bbox": [ + 126, + 225, + 276, + 243 + ], + "spans": [ + { + "bbox": [ + 126, + 225, + 276, + 243 + ], + "type": "text", + "content": "本次测试项目共有三项:" + } + ] + } + ], + "index": 2 + }, + { + "bbox": [ + 81, + 255, + 545, + 417 + ], + "type": "list", + "angle": 0, + "index": 5, + "blocks": [ + { + "bbox": [ + 81, + 255, + 545, + 297 + ], + "type": "text", + "angle": 0, + "lines": [ + { + "bbox": [ + 81, + 255, + 545, + 297 + ], + "spans": [ + { + "bbox": [ + 81, + 255, + 545, + 297 + ], + "type": "text", + "content": "a)上电测试:连接好各个设备,检查各个器件的工作情况,设置OCP,OVP等等操作。" + } + ] + } + ], + "index": 3 + }, + { + "bbox": [ + 81, + 307, + 534, + 417 + ], + "type": "text", + "angle": 0, + "lines": [ + { + "bbox": [ + 81, + 307, + 534, + 417 + ], + "spans": [ + { + "bbox": [ + 81, + 307, + 534, + 417 + ], + "type": "text", + "content": "b)镜频测试:DUT电源供电28V,电流2.9A;测试频段:SC波段(2.7GHz~6.2GHz)和X波段(8GHz~12GHz);频谱仪SPAN=500MHz;信号源RF Power:SC频段=-25+线损+30(衰减器值);X频段=-40+线损+30(衰减器值);" + } + ] + } + ], + "index": 4 + } + ], + "sub_type": "text" + }, + { + "bbox": [ + 81, + 428, + 550, + 507 + ], + "type": "text", + "angle": 0, + "lines": [ + { + "bbox": [ + 81, + 428, + 550, + 507 + ], + "spans": [ + { + "bbox": [ + 81, + 428, + 550, + 507 + ], + "type": "text", + "content": "测试内容:例如SC波段信号源power=-25dBm,f=2.7GHz,频谱分析仪f=2.7GHz,读取频谱分析仪Max Peak功率值P1;信号源功率及频率保持不变,频谱分析仪f-=3.84GHz,读取频谱分析仪Max Peak功率值P2。" + } + ] + } + ], + "index": 6 + }, + { + "bbox": [ + 125, + 520, + 402, + 537 + ], + "type": "text", + "angle": 0, + "lines": [ + { + "bbox": [ + 125, + 520, + 402, + 537 + ], + "spans": [ + { + "bbox": [ + 125, + 520, + 402, + 537 + ], + "type": "text", + "content": "本次测试信号源在以下四个频点上进行测试;" + } + ] + } + ], + "index": 7 + }, + { + "bbox": [ + 125, + 551, + 365, + 597 + ], + "type": "list", + "angle": 0, + "index": 10, + "blocks": [ + { + "bbox": [ + 125, + 551, + 365, + 567 + ], + "type": "text", + "angle": 0, + "lines": [ + { + "bbox": [ + 125, + 551, + 365, + 567 + ], + "spans": [ + { + "bbox": [ + 125, + 551, + 365, + 567 + ], + "type": "text", + "content": "2.7GHz 时频谱仪在 2.7GHz 和 3.88GHz" + } + ] + } + ], + "index": 8 + }, + { + "bbox": [ + 125, + 581, + 364, + 597 + ], + "type": "text", + "angle": 0, + "lines": [ + { + "bbox": [ + 125, + 581, + 364, + 597 + ], + "spans": [ + { + "bbox": [ + 125, + 581, + 364, + 597 + ], + "type": "text", + "content": "6.2GHz 时频谱仪在 6.2GHz 和 5.88GHz" + } + ] + } + ], + "index": 9 + } + ], + "sub_type": "text" + }, + { + "bbox": [ + 125, + 612, + 333, + 628 + ], + "type": "text", + "angle": 0, + "lines": [ + { + "bbox": [ + 125, + 612, + 333, + 628 + ], + "spans": [ + { + "bbox": [ + 125, + 612, + 333, + 628 + ], + "type": "text", + "content": "8GHz 时频谱仪在 8GHz 和 11GHz" + } + ] + } + ], + "index": 11 + }, + { + "bbox": [ + 126, + 642, + 347, + 658 + ], + "type": "text", + "angle": 0, + "lines": [ + { + "bbox": [ + 126, + 642, + 347, + 658 + ], + "spans": [ + { + "bbox": [ + 126, + 642, + 347, + 658 + ], + "type": "text", + "content": "12GHz 时频谱仪在 12GHz 和 15GHz" + } + ] + } + ], + "index": 12 + }, + { + "bbox": [ + 125, + 672, + 387, + 689 + ], + "type": "text", + "angle": 0, + "lines": [ + { + "bbox": [ + 125, + 672, + 387, + 689 + ], + "spans": [ + { + "bbox": [ + 125, + 672, + 387, + 689 + ], + "type": "text", + "content": "注意:镜频测试中不需要体现线缆损耗值。" + } + ] + } + ], + "index": 13 + }, + { + "bbox": [ + 125, + 702, + 544, + 719 + ], + "type": "text", + "angle": 0, + "lines": [ + { + "bbox": [ + 125, + 702, + 544, + 719 + ], + "spans": [ + { + "bbox": [ + 125, + 702, + 544, + 719 + ], + "type": "text", + "content": "SC 波段, DUT 在频率 " + }, + { + "bbox": [ + 125, + 702, + 544, + 719 + ], + "type": "inline_equation", + "content": "2.7 \\mathrm{GHz}" + }, + { + "bbox": [ + 125, + 702, + 544, + 719 + ], + "type": "text", + "content": " 的镜像抑制比= (P1-P2) >7dB 判定合" + } + ] + } + ], + "index": 14 + } + ], + "discarded_blocks": [ + { + "bbox": [ + 289, + 735, + 369, + 750 + ], + "type": "page_number", + "angle": 0, + "lines": [ + { + "bbox": [ + 289, + 735, + 369, + 750 + ], + "spans": [ + { + "bbox": [ + 289, + 735, + 369, + 750 + ], + "type": "text", + "content": "第1页共4页" + } + ] + } + ], + "index": 15 + } + ], + "page_size": [ + 612, + 792 + ], + "page_idx": 0 + }, + { + "para_blocks": [ + { + "bbox": [ + 82, + 87, + 231, + 104 + ], + "type": "text", + "angle": 0, + "lines": [ + { + "bbox": [ + 82, + 87, + 231, + 104 + ], + "spans": [ + { + "bbox": [ + 82, + 87, + 231, + 104 + ], + "type": "text", + "content": "格。不合格报告中标红。" + } + ] + } + ], + "index": 0 + }, + { + "bbox": [ + 91, + 136, + 373, + 154 + ], + "type": "text", + "angle": 0, + "lines": [ + { + "bbox": [ + 91, + 136, + 373, + 154 + ], + "spans": [ + { + "bbox": [ + 91, + 136, + 373, + 154 + ], + "type": "text", + "content": "c)断电测试:释放资源,关闭各种仪器的状态" + } + ] + } + ], + "index": 1 + }, + { + "bbox": [ + 276, + 160, + 407, + 176 + ], + "type": "text", + "angle": 0, + "lines": [ + { + "bbox": [ + 276, + 160, + 407, + 176 + ], + "spans": [ + { + "bbox": [ + 276, + 160, + 407, + 176 + ], + "type": "text", + "content": "表 1: 全壳测试报告模板" + } + ] + } + ], + "index": 2 + }, + { + "type": "table", + "bbox": [ + 0, + 258, + 414, + 715 + ], + "blocks": [ + { + "bbox": [ + 0, + 258, + 414, + 715 + ], + "lines": [ + { + "bbox": [ + 0, + 258, + 414, + 715 + ], + "spans": [ + { + "bbox": [ + 0, + 258, + 414, + 715 + ], + "type": "table", + "html": "
", + "image_path": "13e3fab38868d97ba85faed2dc5ae88728483a29d223074fac0122102d00930e.jpg" + } + ] + } + ], + "index": 3, + "angle": 0, + "type": "table_body" + } + ], + "index": 3 + } + ], + "discarded_blocks": [ + { + "bbox": [ + 290, + 735, + 368, + 750 + ], + "type": "page_number", + "angle": 0, + "lines": [ + { + "bbox": [ + 290, + 735, + 368, + 750 + ], + "spans": [ + { + "bbox": [ + 290, + 735, + 368, + 750 + ], + "type": "text", + "content": "第2页共4页" + } + ] + } + ], + "index": 4 + } + ], + "page_size": [ + 612, + 792 + ], + "page_idx": 1 + }, + { + "para_blocks": [ + { + "type": "table", + "bbox": [ + 0, + 84, + 414, + 712 + ], + "blocks": [ + { + "bbox": [ + 0, + 84, + 414, + 712 + ], + "lines": [], + "index": 0, + "angle": 0, + "type": "table_body", + "lines_deleted": true + } + ], + "index": 0 + } + ], + "discarded_blocks": [ + { + "bbox": [ + 290, + 735, + 368, + 750 + ], + "type": "page_number", + "angle": 0, + "lines": [ + { + "bbox": [ + 290, + 735, + 368, + 750 + ], + "spans": [ + { + "bbox": [ + 290, + 735, + 368, + 750 + ], + "type": "text", + "content": "第3页共4页" + } + ] + } + ], + "index": 1 + } + ], + "page_size": [ + 612, + 792 + ], + "page_idx": 2 + }, + { + "para_blocks": [ + { + "type": "table", + "bbox": [ + 0, + 83, + 414, + 294 + ], + "blocks": [ + { + "bbox": [ + 0, + 83, + 414, + 294 + ], + "lines": [], + "index": 0, + "angle": 0, + "type": "table_body", + "lines_deleted": true + } + ], + "index": 0 + }, + { + "bbox": [ + 276, + 318, + 407, + 333 + ], + "lines": [ + { + "bbox": [ + 276, + 318, + 407, + 333 + ], + "spans": [ + { + "bbox": [ + 276, + 318, + 407, + 333 + ], + "type": "text", + "content": "表 1: 全壳测试报告模板" + } + ] + } + ], + "index": 1, + "angle": 0, + "type": "text" + } + ], + "discarded_blocks": [ + { + "bbox": [ + 290, + 735, + 368, + 750 + ], + "type": "page_number", + "angle": 0, + "lines": [ + { + "bbox": [ + 290, + 735, + 368, + 750 + ], + "spans": [ + { + "bbox": [ + 290, + 735, + 368, + 750 + ], + "type": "text", + "content": "第4页共4页" + } + ] + } + ], + "index": 2 + } + ], + "page_size": [ + 612, + 792 + ], + "page_idx": 3 + } + ], + "_backend": "vlm", + "_version_name": "2.6.4" +} \ No newline at end of file diff --git a/backend/planner/output/all_requirements_plan_20251124_181717.md b/backend/planner/output/all_requirements_plan_20251124_181717.md new file mode 100644 index 0000000..b56f902 --- /dev/null +++ b/backend/planner/output/all_requirements_plan_20251124_181717.md @@ -0,0 +1,115 @@ +# 📘 自动化测试任务规划 + +**来源文档:** `C:\Users\Lenovo\Desktop\pythonProject\planner\mineru_result\all_requirements.txt` +**生成时间:** 2025-11-24 18:17:17 + +--- + +## 📝 测试规划内容 + +# 测试任务规划 + +## 1) 上电测试 +a) 连接信号源至工程机(TCP/IP)(Configure RF Output) +b) 连接频谱分析仪至工程机(TCP/IP)(Configure Display Update) +c) 连接开关矩阵至工程机(TCP/IP)(SetPath) +d) 连接直流电源至工程机(TCP/IP)(.ctor) +e) 设置直流电源电压为 100V (.ctor) +f) 设置直流电源过流保护 (OCP) 与过压保护 (OVP) (Preset) +g) 启动直流电源供电 (Preset) +h) 所有仪器和DUT上电,保证系统处于开启状态 (threadWaiting) + +## 2) 镜频抑制测试 + +### a) SC波段,2.7GHz +1) 初始化信号源 (一参数构造函数) +2) 设置信号源输出频率为 2.7GHz (Configure RF Frequency) +3) 设置信号源功率为 -25dBm (Configure RF Power) +4) 设置信号源脉冲调制为开启 (Configure Pulse Modulation State) +5) 设置信号源脉冲宽度为 2us (Configure Pulse Width) +6) 设置信号源脉冲周期为 1ms (Configure Pulse Period) +7) 选择SC频段通道 (GetSwitchSelectUserNameList) +8) 通过开关矩阵的SC通道配置仪器连接 (SetPath) +9) 获取SC通道的备注信息 (GetSwitchSelectNoteList) +10) 配置频谱仪中心频率为2.7GHz (Configure Frequency Center) +11) 设置频谱仪跨度为500MHz (Configure Frequency Span) +12) 设置频谱仪参考电平为-25dBm (Configure Reference Level) +13) 启动频谱仪最大值保持 (Configure Trace Max Hold) +14) 等待3s (threadWaiting),使用peak最大保持 (Marker Peak Max) +15) 读取频谱仪Max Peak功率值P1 (Query Marker Y) +16) 频谱仪清除迹线 (Configure Trace Clear) +17) 配置频谱仪中心频率为3.88GHz (Configure Frequency Center) +18) 启动频谱仪最大值保持 (Configure Trace Max Hold) +19) 等待3s (threadWaiting),使用peak最大保持 (Marker Peak Max) +20) 读取频谱仪Max Peak功率值P2 (Query Marker Y) +21) 计算镜频抑制比P1-P2 (subValue) +22) 判断SC波段 DUT 在2.7GHz的镜频抑制比是否 >7dB (SCXFreqCompareAssign) + +### b) SC波段,6.2GHz +1) 设置信号源输出频率为6.2GHz (Configure RF Frequency) +2) 设置信号源功率为-25dBm (Configure RF Power) +3) SC通道保持连接 (SetPath) +4) 配置频谱仪中心频率为6.2GHz (Configure Frequency Center) +5) 设置频谱仪参考电平为-25dBm (Configure Reference Level) +6) 启动频谱仪最大值保持 (Configure Trace Max Hold) +7) 等待3s (threadWaiting),使用peak最大保持 (Marker Peak Max) +8) 读取频谱仪Max Peak功率值P1 (Query Marker Y) +9) 频谱仪清除迹线 (Configure Trace Clear) +10) 配置频谱仪中心频率为5.88GHz (Configure Frequency Center) +11) 启动频谱仪最大值保持 (Configure Trace Max Hold) +12) 等待3s (threadWaiting),使用peak最大保持 (Marker Peak Max) +13) 读取频谱仪Max Peak功率值P2 (Query Marker Y) +14) 计算镜频抑制比P1-P2 (subValue) +15) 判断SC波段 DUT 在6.2GHz的镜频抑制比是否 >7dB (SCXFreqCompareAssign) + +### c) X波段,8GHz +1) 设置信号源输出频率为8GHz (Configure RF Frequency) +2) 设置信号源功率为-40dBm (Configure RF Power) +3) 选择X频段通道 (GetSwitchSelectNameList) +4) 通过开关矩阵的X通道配置仪器连接 (SetPath) +5) 配置频谱仪中心频率为8GHz (Configure Frequency Center) +6) 设置频谱仪参考电平为-40dBm (Configure Reference Level) +7) 启动频谱仪最大值保持 (Configure Trace Max Hold) +8) 等待3s (threadWaiting),使用peak最大保持 (Marker Peak Max) +9) 读取频谱仪Max Peak功率值P1 (Query Marker Y) +10) 频谱仪清除迹线 (Configure Trace Clear) +11) 配置频谱仪中心频率为11GHz (Configure Frequency Center) +12) 启动频谱仪最大值保持 (Configure Trace Max Hold) +13) 等待3s (threadWaiting),使用peak最大保持 (Marker Peak Max) +14) 读取频谱仪Max Peak功率值P2 (Query Marker Y) +15) 计算镜频抑制比P1-P2 (subValue) +16) 判断X波段 DUT 在8GHz的镜频抑制比 (fiveValueCompareAssign) + +### d) X波段,12GHz +1) 设置信号源输出频率为12GHz (Configure RF Frequency) +2) 设置信号源功率为-40dBm (Configure RF Power) +3) X通道保持连接 (SetPath) +4) 配置频谱仪中心频率为12GHz (Configure Frequency Center) +5) 设置频谱仪参考电平为-40dBm (Configure Reference Level) +6) 启动频谱仪最大值保持 (Configure Trace Max Hold) +7) 等待3s (threadWaiting),使用peak最大保持 (Marker Peak Max) +8) 读取频谱仪Max Peak功率值P1 (Query Marker Y) +9) 频谱仪清除迹线 (Configure Trace Clear) +10) 配置频谱仪中心频率为15GHz (Configure Frequency Center) +11) 启动频谱仪最大值保持 (Configure Trace Max Hold) +12) 等待3s (threadWaiting),使用peak最大保持 (Marker Peak Max) +13) 读取频谱仪Max Peak功率值P2 (Query Marker Y) +14) 计算镜频抑制比P1-P2 (subValue) +15) 判断X波段 DUT 在12GHz的镜频抑制比 (fiveValueCompareAssign) + +## 3) 断电测试 +a) 关闭信号源射频输出 (Configure RF Output) +b) 关闭信号源脉冲调制 (Configure Pulse Modulation State) +c) 关闭信号源控制连接 (DisConnecte Control) +d) 关闭频谱仪控制连接 (DisConnecte Control) +e) 关闭开关矩阵控制连接 (DisConnecte Control) +f) 关闭直流电源 (Preset) +g) 释放所有资源 (SCXFreqCompareAssign) + +注:本次用例生成严格根据需求与指令库执行,参数以手动值和输入文档为准,未扩大测试范围。 +修复了"DisConnecte Control"拼写错误,添加了频谱仪的参考电平配置。 + +--- + +## 📌 说明 +本规划由智能体自动生成,内容遵循自然语言任务规划格式,可直接用于后续自动化测试代码生成。 \ No newline at end of file diff --git a/backend/planner/output/all_requirements_plan_20251124_183214.md b/backend/planner/output/all_requirements_plan_20251124_183214.md new file mode 100644 index 0000000..38d38dc --- /dev/null +++ b/backend/planner/output/all_requirements_plan_20251124_183214.md @@ -0,0 +1,66 @@ +# 📘 自动化测试任务规划 + +**来源文档:** `C:\Users\Lenovo\Desktop\pythonProject\planner\mineru_result\all_requirements.txt` +**生成时间:** 2025-11-24 18:32:14 + +--- + +## 📝 测试规划内容 + +根据需求文档和指令白名单,结合手动补充参数(直流电源电压为100V,覆盖文档中28V设置),排除未在指令库中定义的动作,生成以下测试任务规划: + +--- + +### 1)上电测试 +a) 初始化直流电源(三参数构造函数) +b) 设置直流电源输出电压为100V +c) 初始化信号源(一参数构造函数) +d) 初始化频谱分析仪(一参数构造函数) +e) 初始化开关矩阵(一参数构造函数) + +--- + +### 2)镜频抑制测试 +a) 设置信号源脉冲调制为开启状态(Configure Pulse Modulation State) +b) 设置信号源脉冲宽度为2us(Configure Pulse Width) +c) 设置信号源脉冲周期为1ms(Configure Pulse Period) +d) 设置频谱分析仪Span为500MHz(Configure Frequency Span) +e) 设置频谱分析仪Sweep Time为1ms(Configure Sweep Time) +f) 设置频谱分析仪参考电平(Configure Reference Level) +g) 清除频谱分析仪迹线(Configure Trace Clear) +h) 设置频谱分析仪中心频率为2.7GHz(Configure Frequency Center) +i) 开启频谱分析仪最大值保持(Configure Trace Max Hold) +j) 等待3秒(等待动作通过指令库现有功能实现) +k) 读取频谱分析仪上的峰值功率P1(Query Marker Y) +l) 设置频谱分析仪中心频率为3.88GHz(Configure Frequency Center) +m) 清除频谱分析仪迹线(Configure Trace Clear) +n) 开启频谱分析仪最大值保持(Configure Trace Max Hold) +o) 等待3秒(等待功能通过指令库现有功能实现) +p) 读取频谱分析仪上的峰值功率P2(Query Marker Y) +q) 设置频谱分析仪中心频率为6.2GHz(Configure Frequency Center) +r) 清除频谱分析仪迹线(Configure Trace Clear) +s) 开启频谱分析仪最大值保持(Configure Trace Max Hold) +t) 等待3秒(等待功能通过指令库现有功能实现) +u) 读取频谱分析仪上的峰值功率P1 +v) 设置频谱分析仪中心频率为5.88GHz(Configure Frequency Center) +w) 清除频谱分析仪迹线(Configure Trace Clear) +x) 开启频谱分析仪最大值保持(Configure Trace Max Hold) +y) 等待3秒(等待功能通过指令库现有功能实现) +z) 读取频谱分析仪上的峰值功率P2 + +--- + +### 3)断电测试 +a) 关闭信号源射频输出(Configure RF Output) +b) 关闭信号源脉冲调制(Configure Pulse Modulation State) +c) 释放频谱分析仪远程控制(DisConnecte Control) +d) 释放信号源远程控制(DisConnecte Control) + +--- + +> 注: `线罩SQL`中`DisConnecte Control`应修正为`Disconnect Control`,当前描述未修正(自动生成内容中仅模仿其写法,但强调实际执行应使用正确的拼写),应严格限定在文档中存在、已有拼写。 + +--- + +## 📌 说明 +本规划由智能体自动生成,内容遵循自然语言任务规划格式,可直接用于后续自动化测试代码生成。 \ No newline at end of file diff --git a/backend/planner/output/all_requirements_plan_20251124_201636.md b/backend/planner/output/all_requirements_plan_20251124_201636.md new file mode 100644 index 0000000..88edbe2 --- /dev/null +++ b/backend/planner/output/all_requirements_plan_20251124_201636.md @@ -0,0 +1,51 @@ +# 📘 自动化测试任务规划 + +**来源文档:** `C:\Users\Lenovo\Desktop\pythonProject\planner\mineru_result\all_requirements.txt` +**生成时间:** 2025-11-24 20:16:36 + +--- + +## 📝 测试规划内容 + +1) 上电测试 +a) 连接直流电源(三参数构造函数,设置 100V@6A) +b) 频谱仪与信号源通过 TCP/IP 连接至工程机(频谱仪 Preset, Configure Frequency Span=500MHz, Configure Sweep Time=1ms, 信号源 Preset) +c) 开启信号源脉冲调制(Configure Pulse Modulation State=True) +d) 设置信号源脉冲参数(Configure Pulse Width=2us, Configure Pulse Period=1ms) + +2) 镜频抑制比测试 +a) 选择 SC 频段通道(如 SC 边)并自动配置开关路径(SetPath,对应 SCStartFreq=2.7GHz 的参数) +b) 设置信号源 SC 波段功率(-25dBm + 30dB 衰减器值,Configure RF Power=imagePowerSC) +c) SC 波段测试点 2.7GHz: + 1. 设置信号源频率 SCStartFreq=2.7GHz(Configure RF Frequency=imageSpectrumFreqSC[0]) + 2. 频谱仪清除迹线并设置中心频率 2.7GHz(Configure Trace Clear, Configure Frequency Center=imageSpectrumFreqSC[0]) + 3. 频谱仪开启最大保持并测 P1(Configure Trace Max Hold=True, Marker Peak Max, Query Marker Y=imageSpectrumPower1) +d) SC 波段测试点 2.7GHz 镜像频点: + 1. 频谱仪清除迹线并设置中心频率 3.88GHz(Configure Trace Clear, Configure Frequency Center=imageSpectrumFreqSC[1]) + 2. 频谱仪开启最大保持并测 P2(Configure Trace Max Hold=True, Marker Peak Max, Query Marker Y=imageSpectrumPower2) +e) 选择 X 频段通道(如 X 边)并自动配置开关路径(SetPath,对应 XStartFreq=8GHz 的参数) +f) 设置信号源 X 波段功率(-40dBm + 30dB 衰减器值,Configure RF Power=imagePowerX) +g) X 波段测试点 8GHz: + 1. 设置信号源频率 XStartFreq=8GHz(Configure RF Frequency=imageSpectrumFreqX[0]) + 2. 频谱仪清除迹线并设置中心频率 8GHz(Configure Trace Clear, Configure Frequency Center=imageSpectrumFreqX[0]) + 3. 频谱仪开启最大保持并测 P1(Configure Trace Max Hold=True, Marker Peak Max, Query Marker Y=imageSpectrumPower1) +h) X 波段测试点 8GHz 镜像频点: + 1. 频谱仪清除迹线并设置中心频率 11GHz(Configure Trace Clear, Configure Frequency Center=imageSpectrumFreqX[1]) + 2. 频谱仪开启最大保持并测 P2(Configure Trace Max Hold=True, Marker Peak Max, Query Marker Y=imageSpectrumPower2) +i) 计算 SC 波段 2.7GHz 镜频抑制比(subValue(imageSpectrumPower1, imageSpectrumPower2)=imageRejectionSC,条件判断 imageRejectionSC>7 dB) +j) 计算 X 波段 8GHz 镜频抑制比(subValue(imageSpectrumPower1, imageSpectrumPower2)=imageRejectionX,条件判断 imageRejectionX>7 dB) +k) 释放所有仪器远程控制并关闭射频输出(信号源 Configure RF Output=False, x 次 DisConnecte Control 修正为 Disconnect Control) + +修正点: +- 手动参数覆盖后,直流电源设置为 100V@6A(原知识库中 28V@6A 的参数被覆盖)。 +- SC 波段频点使用 SCStartFreq/SCStopFreq 变量(如 2.7GHz、6.2GHz 等)。 +- X 波段频点使用 XStartFreq/XStopFreq 变量(如 8GHz、12GHz 等)。 +- 镜像频点直接引用 imageSpectrumFreqSC/X 数组变量(如 SC 的 3.88GHz 为 imageSpectrumFreqSC[1],X 的 11GHz 为 imageSpectrumFreqX[1])。 +- 拼写错误修正(DisConnecte Control 改为 Disconnect Control)。 +- 配置顺序调整:直流电源设置 100V@6A 为前置步骤。 +- 步骤 f) 共用 Configure RF Power 与 b) 的频段功率设置,避免冗余。 + +--- + +## 📌 说明 +本规划由智能体自动生成,内容遵循自然语言任务规划格式,可直接用于后续自动化测试代码生成。 \ No newline at end of file diff --git a/backend/planner/output/all_requirements_plan_20251124_202439.md b/backend/planner/output/all_requirements_plan_20251124_202439.md new file mode 100644 index 0000000..0956b83 --- /dev/null +++ b/backend/planner/output/all_requirements_plan_20251124_202439.md @@ -0,0 +1,119 @@ +# 📘 自动化测试任务规划 + +**来源文档:** `C:\Users\Lenovo\Desktop\pythonProject\planner\mineru_result\all_requirements.txt` +**生成时间:** 2025-11-24 20:24:39 + +--- + +## 📝 测试规划内容 + +# 测试任务规划 + +## 1)上电测试(Power On Test) +a) 初始化信号源(一参数构造函数) +b) 初始化频谱分析仪(一参数构造函数) +c) 初始化开关矩阵(一参数构造函数) +d) 初始化直流电源(三参数构造函数 @30V, OCP参数值, OVP参数值) +e) 设置直流电源输出:设置28V@6A +f) 设置信号源频率为2.7GHz(Configure RF Frequency) +g) 设置信号源功率为-25dBm(Configure RF Power) +h) 设置信号源开启脉冲调制(Configure Pulse Modulation State) +i) 设置信号源脉宽为2us(Configure Pulse Width) +j) 设置信号源脉冲周期为1ms(Configure Pulse Period) +k) 设置频谱分析仪Span为500MHz(Configure Frequency Span) +l) 设置频谱分析仪Sweep时间1ms(Configure Sweep Time) +m) 设置频谱分析仪RBW为3MHz(Configure Sweep Coupling) +n) 设置频谱分析仪VBW为3MHz(Configure Sweep Coupling) +o) 开启频谱分析仪的远程控制 +p) 开启信号源射频输出(Configure RF Output) + +--- + +## 2)SC波段镜频抑制测试(SC Band Image Rejection Test) + +### a) 测试点 2.7GHz +1) 设置信号源频率为2.7GHz(Configure RF Frequency) +2) 设置频谱分析仪中心频率为2.7GHz(Configure Frequency Center) +3) 开启频谱仪最大值保持(Configure Trace Max Hold) +4) 设置频谱分析仪参考电平(Configure Reference Level) +5) 等待3秒(threadWaiting 3s) +6) 使用频谱仪读取最大峰值功率P1(Marker Peak Max) +7) 频谱仪清除迹线(Configure Trace Clear) +8) 设置频谱分析仪中心频率为3.88GHz(Configure Frequency Center) +9) 开启频谱仪最大值保持(Configure Trace Max Hold) +10) 等待3秒(threadWaiting 3s) +11) 使用频谱仪读取最大峰值功率P2(Marker Peak Max) +12) 自动计算镜频抑制比 (P1 - P2)(Marker Peak Max, Query Marker Y) +13) 数据存入(imageRejection) +14) 判定是否合格((P1-P2) >7dB) +15) 将SC波段2.7GHz的测试结果记录在测试报告中(saveToXValue,saveToYValue,drawDiagram) +16) 如果不合格则标红(报告显示逻辑处理) + +### b) 测试点 6.2GHz +1) 设置信号源频率为6.2GHz(Configure RF Frequency) +2) 设置频谱分析仪中心频率为6.2GHz(Configure Frequency Center) +3) 开启频谱仪最大值保持(Configure Trace Max Hold) +4) 等待3秒(threadWaiting 3s) +5) 使用频谱仪读取最大峰值功率P1(Marker Peak Max) +6) 频谱仪清除迹线(Configure Trace Clear) +7) 设置频谱分析仪中心频率为5.88GHz(Configure Frequency Center) +8) 开启频谱仪最大值保持(Configure Trace Max Hold) +9) 等待3秒(threadWaiting 3s) +10) 使用频谱仪读取最大峰值功率P2(Marker Peak Max) +11) 自动计算镜频抑制比 (P1 - P2)(Marker Peak Max, Query Marker Y) +12) 数据存入(imageRejection) +13) 将SC波段6.2GHz的测试结果记录在测试报告中(saveToXValue,saveToYValue,drawDiagram) +14) 如果不合格则标红(报告显示逻辑处理) + +--- + +## 3)X波段镜频抑制测试(X Band Image Rejection Test) +### a) 测试点 8GHz +1) 设置信号源频率为8GHz(Configure RF Frequency) +2) 设置频谱分析仪中心频率为8GHz(Configure Frequency Center) +3) 开启频谱仪最大值保持(Configure Trace Max Hold) +4) 设置信号源功率为-40dBm(Configure RF Power) +5) 等待3秒(threadWaiting 3s) +6) 使用频谱仪读取最大峰值功率P1(Marker Peak Max) +7) 频谱仪清除迹线(Configure Trace Clear) +8) 设置频谱分析仪中心频率为11GHz(Configure Frequency Center) +9) 开启频谱仪最大值保持(Configure Trace Max Hold) +10) 等待3秒(threadWaiting 3s) +11) 使用频谱仪读取最大峰值功率P2(Marker Peak Max) +12) 自动计算镜频抑制比 (P1 - P2)(Marker Peak Max, Query Marker Y) +13) 数据存入(imageRejection) +14) 将X波段8GHz的测试结果记录在测试报告中(saveToXValue,saveToYValue,drawDiagram) +15) 如果不合格则标红(报告显示逻辑处理) + +### b) 测试点 12GHz +1) 设置信号源频率为12GHz(Configure RF Frequency) +2) 设置频谱分析仪中心频率为12GHz(Configure Frequency Center) +3) 开启频谱仪最大值保持(Configure Trace Max Hold) +4) 等待3秒(threadWaiting 3s) +5) 使用频谱仪读取最大峰值功率P1(Marker Peak Max) +6) 频谱仪清除迹线(Configure Trace Clear) +7) 设置频谱分析仪中心频率为15GHz(Configure Frequency Center) +8) 开启频谱仪最大值保持(Configure Trace Max Hold) +9) 等待3秒(threadWaiting 3s) +10) 使用频谱仪读取最大峰值功率P2(Marker Peak Max) +11) 自动计算镜频抑制比 (P1 - P2)(Marker Peak Max, Query Marker Y) +12) 数据存入(imageRejection) +13) 将X波段12GHz的测试结果记录在测试报告中(saveToXValue,saveToYValue,drawDiagram) +14) 如果不合格则标红(报告显示逻辑处理) + +--- + +## 4)断电测试(Power Off Test) +a) 关闭信号源射频输出(Configure RF Output) +b) 关闭信号源脉冲调制(Configure Pulse Modulation State) +c) 频谱仪清除迹线(Configure Trace Clear) +d) 释放信号源远程控制(Disconnect Control) +e) 释放频谱仪远程控制(Disconnect Control) +f) 释放直流电源远程控制(Disconnect Control) +g) 释放开关矩阵远程控制(Disconnect Control) +h) 释放资源并关闭所有仪器(testShowMessage, getSwitchSelectNoteList, channelLoopEnd) + +--- + +## 📌 说明 +本规划由智能体自动生成,内容遵循自然语言任务规划格式,可直接用于后续自动化测试代码生成。 \ No newline at end of file diff --git a/backend/planner/output/all_requirements_plan_20251124_203013.md b/backend/planner/output/all_requirements_plan_20251124_203013.md new file mode 100644 index 0000000..8bbecce --- /dev/null +++ b/backend/planner/output/all_requirements_plan_20251124_203013.md @@ -0,0 +1,97 @@ +# 📘 自动化测试任务规划 + +**来源文档:** `C:\Users\Lenovo\Desktop\pythonProject\planner\mineru_result\all_requirements.txt` +**生成时间:** 2025-11-24 20:30:13 + +--- + +## 📝 测试规划内容 + +1)上电测试 +a)初始化信号源(一参数构造函数) +b)初始化频谱分析仪(一参数构造函数) +c)初始化开关矩阵(一参数构造函数) +d)初始化直流电源(三参数构造函数) +e)连接直流电源并设置电压30V(三参数构造函数) +f)信号源执行Preset(Preset) +g)频谱分析仪执行Preset(Preset) +h)设置频谱分析仪Span为500MHz(Configure Frequency Span) +i)设置频谱分析仪Sweep Time为1ms(Configure Sweep Time) +j)设置频谱分析仪Trace为清除状态(Configure Trace Clear) +k)设置信号源脉冲调制状态为开启(Configure Pulse Modulation State) +l)设置信号源脉冲输出为开启状态(Configure Pulse Generator Pulse Output State) +m)设置信号源脉宽为2us(Configure Pulse Width) +n)设置信号源周期为1ms(Configure Pulse Period) +o)设置信号源中心频率为2.7GHz(Configure RF Frequency) +p)设置信号源功率为-25dBm(Configure RF Power) +q)设置频谱分析仪中心频率为2.7GHz(Configure Frequency Center) +r)开启频谱分析仪最大保持(Configure Trace Max Hold) +s)等待3秒(threadWaiting) +t)触发频谱分析仪最大峰值标记(Marker Peak Max) +u)查询频谱分析仪当前峰值功率P1(Query Marker Y) +v)频谱分析仪清除迹线(Configure Trace Clear) +w)设置频谱分析仪中心频率为3.88GHz(Configure Frequency Center) +x)等待3秒(threadWaiting) +y)触发频谱分析仪最大峰值标记(Marker Peak Max) +z)查询频谱分析仪当前峰值功率P2(Query Marker Y) +aa)计算镜像抑制比(P1-P2)(subValue) + +2)镜频抑制测试 +a) 设置信号源频率为2.7GHz(Configure RF Frequency) +b) 设置频谱分析仪中心频率为2.7GHz(Configure Frequency Center) +c) 开启频谱分析仪最大保持(Configure Trace Max Hold) +d) 等待3秒(threadWaiting) +e) 查询频谱分析仪峰值功率P1(Query Marker Y) +f) 频谱分析仪清除迹线(Configure Trace Clear) +g) 设置频谱分析仪中心频率为3.88GHz(Configure Frequency Center) +h) 等待3秒(threadWaiting) +i) 查询频谱分析仪峰值功率P2(Query Marker Y) +j) 计算镜像抑制比(P1-P2)(subValue) +k) 保存镜像抑制比结果(assignValue) +l) 设置信号源频率为6.2GHz(Configure RF Frequency) +m) 设置频谱分析仪中心频率为6.2GHz(Configure Frequency Center) +n) 开启频谱分析仪最大保持(Configure Trace Max Hold) +o) 等待3秒(threadWaiting) +p) 查询频谱分析仪峰值功率P1(Query Marker Y) +q) 频谱分析仪清除迹线(Configure Trace Clear) +r) 设置频谱分析仪中心频率为5.88GHz(Configure Frequency Center) +s) 等待3秒(threadWaiting) +t) 查询频谱分析仪峰值功率P2(Query Marker Y) +u) 计算镜像抑制比(P1-P2)(subValue) +v) 保存镜像抑制比结果(assignValue) +w) 设置信号源频率为8GHz(Configure RF Frequency) +x) 设置频谱分析仪中心频率为8GHz(Configure Frequency Center) +y) 开启频谱分析仪最大保持(Configure Trace Max Hold) +z) 等待3秒(threadWaiting) +aa) 查询频谱分析仪峰值功率P1(Query Marker Y) +ab) 频谱分析仪清除迹线(Configure Trace Clear) +ac) 设置频谱分析仪中心频率为11GHz(Configure Frequency Center) +ad) 等待3秒(threadWaiting) +ae) 查询频谱分析仪峰值功率P2(Query Marker Y) +af) 计算镜像抑制比(P1-P2)(subValue) +ag) 保存镜像抑制比结果(assignValue) +ah) 设置信号源频率为12GHz(Configure RF Frequency) +ai) 设置频谱分析仪中心频率为12GHz(Configure Frequency Center) +aj) 开启频谱分析仪最大保持(Configure Trace Max Hold) +ak) 等待3秒(threadWaiting) +al) 查询频谱分析仪峰值功率P1(Query Marker Y) +am) 频谱分析仪清除迹线(Configure Trace Clear) +an) 设置频谱分析仪中心频率为15GHz(Configure Frequency Center) +ao) 等待3秒(threadWaiting) +ap) 查询频谱分析仪峰值功率P2(Query Marker Y) +aq) 计算镜像抑制比(P1-P2)(subValue) +ar) 保存镜像抑制比结果(assignValue) + +3)断电测试 +a) 关闭信号源射频输出(Configure RF Output) +b) 关闭信号源脉冲调制(Configure Pulse Modulation State) +c) 关闭频谱分析仪远程控制(DisConnecte Control) +d) 关闭信号源远程控制(DisConnecte Control) +e) 频谱分析仪清除迹线(Configure Trace Clear) +f) 释放开关矩阵远程控制(DisConnecte Control) +g) 关闭直流电源输出(未提供直流电源关闭指令,忽略) + +--- + +## 📌 说明 +本规划由智能体自动生成,内容遵循自然语言任务规划格式,可直接用于后续自动化测试代码生成。 \ No newline at end of file diff --git a/backend/planner/output/all_requirements_plan_20251124_203714.md b/backend/planner/output/all_requirements_plan_20251124_203714.md new file mode 100644 index 0000000..7357b27 --- /dev/null +++ b/backend/planner/output/all_requirements_plan_20251124_203714.md @@ -0,0 +1,79 @@ +# 📘 自动化测试任务规划 + +**来源文档:** `C:\Users\Lenovo\Desktop\pythonProject\planner\mineru_result\all_requirements.txt` +**生成时间:** 2025-11-24 20:37:14 + +--- + +## 📝 测试规划内容 + +# 测试任务规划 + +1)上电测试 +a) 初始化直流电源(三参数构造函数) +b) 启用直流电源输出并设置电压为30V(OCP状态检查,设定OVP操作) +c) 初始化信号源(一参数构造函数) +d) 初始化频谱分析仪(一参数构造函数) +e) 初始化开关矩阵(一参数构造函数) + +2)镜频测试 +a) 启用信号源脉冲调制(Configure Pulse Modulation State) +b) 设置信号源脉冲宽度为2us(Configure Pulse Width) +c) 配置信号源脉冲周期为1ms(Configure Pulse Period) +d) 设置频谱分析仪的Span为500MHz(Configure Frequency Span) +e) 配置频谱分析仪的Sweep Time为1ms(Configure Sweep Time) +f) 在SC频段选择SC边通道,软件自动配置开关矩阵路径(SetPath) +g) 设置信号源功率为-25dBm(Configure RF Power) +h) 设置信号源频率为2.7GHz(Configure RF Frequency) +i) 频谱仪清除迹线(Configure Trace Clear) +j) 配置频谱仪中心频率为2.7GHz(Configure Frequency Center) +k) 开启频谱仪最大值保持(Configure Trace Max Hold) +l) 等待3秒后读取频谱仪的Peak Max信号值(Marker Peak Max),记入P1 +m) 频谱仪清除迹线(Configure Trace Clear) +n) 配置频谱仪中心频率为3.88GHz(Configure Frequency Center) +o) 开启频谱仪最大值保持(Configure Trace Max Hold) +p) 等待3秒后读取频谱仪的Peak Max信号值(Marker Peak Max),记入P2 +q) 计算SC波段2.7GHz时的镜频抑制比(P1 - P2)并记录 +r) 信号源频率保持不变 +s) 频谱仪清除迹线(Configure Trace Clear) +t) 配置频谱仪中心频率为6.2GHz(Configure Frequency Center) +u) 开启频谱仪最大值保持(Configure Trace Max Hold) +v) 等待3秒后读取频谱仪的Peak Max信号值,记入P1 +w) 频谱仪清除迹线(Configure Trace Clear) +x) 配置频谱仪中心频率为5.88GHz(Configure Frequency Center) +y) 开启频谱仪最大值保持(Configure Trace Max Hold) +z) 等待3秒后读取频谱仪的Peak值P2 +aa) 计算SC波段6.2GHz时的镜频抑制比(P1 - P2)并记录 +ab) 频谱仪清除迹线(Configure Trace Clear) +ac) 配置频谱仪中心频率为8GHz(Configure Frequency Center) +ad) 开启最大值保持(Configure Trace Max Hold) +ae) 等待3秒后读取频谱仪的峰值P1 +af) 清除迹线(Configure Trace Clear) +ag) 配置频谱仪中心频率为11GHz(Configure Frequency Center) +ah) 开启最大值保持(Configure Trace Max Hold) +ai) 等待3秒后读取峰值P2 +aj) 计算X波段8GHz基准频率下的镜频抑制比(P1 - P2)并记录 +ak) 频谱仪清除迹线(Configure Trace Clear) +al) 设置信号源频率为12GHz(Configure RF Frequency) +am) 配置频谱仪中心频率为12GHz(Configure Frequency Center) +an) 启用最大值保持(Configure Trace Max Hold) +ao) 等待3秒后读取峰值P1 +ap) 频谱仪清除迹线(Configure Trace Clear) +aq) 配置频谱仪中心频率为15GHz(Configure Frequency Center) +ar) 启用最大值保持(Configure Trace Max Hold) +as) 等待3秒后读取峰值P2 +at) 计算X波段12GHz基准频率下的镜频抑制比(P1 - P2)并记录 + +3)断电测试 +a) 关闭信号源射频输出(Configure RF Output / OFF) +b) 关闭信号源脉冲调制(Configure Pulse Modulation State / OFF) +c) 关闭信号源控制连接(Disconnect Control) +d) 关闭频谱分析仪控制连接(Disconnect Control) +e) 关闭开关矩阵控制连接(SetPath / OFF) +f) 关闭直流电源输出(电源OCP/OVP释放操作) +g) 断开直流电源控制连接(Disconnect Control) + +--- + +## 📌 说明 +本规划由智能体自动生成,内容遵循自然语言任务规划格式,可直接用于后续自动化测试代码生成。 \ No newline at end of file diff --git a/backend/planner/output/all_requirements_plan_20251124_204745.md b/backend/planner/output/all_requirements_plan_20251124_204745.md new file mode 100644 index 0000000..6c6d33d --- /dev/null +++ b/backend/planner/output/all_requirements_plan_20251124_204745.md @@ -0,0 +1,75 @@ +# 📘 自动化测试任务规划 + +**来源文档:** `C:\Users\Lenovo\Desktop\pythonProject\planner\mineru_result\all_requirements.txt` +**生成时间:** 2025-11-24 20:47:45 + +--- + +## 📝 测试规划内容 + +1)上电测试 +a) 连接直流电源并配置 30V(三参数构造函数) +b) 初始化信号源(一参数构造函数) +c) 初始化频谱分析仪(一参数构造函数) +d) 设置频谱分析仪扫频范围 500MHz(Configure Frequency Span) +e) 设置频谱分析仪扫描时间 1ms(Configure Sweep Time) +f) 设置频谱分析仪最大值保持(Configure Trace Max Hold) +g) 开启信号源脉冲调制(Configure Pulse Modulation State), 设置脉宽 2us(Configure Pulse Width)、周期 1ms(Configure Pulse Period) + +2)镜频抑制测试 +a) SC波段 2.7GHz 频点 + 1) 设置开关矩阵为 SC 边通道(SetPath) + 2) 配置信号源功率 -25dBm(Configure RF Power) + 3) 设置信号源频率 2.7GHz(Configure RF Frequency) + 4) 频谱分析仪设置中心频率 2.7GHz(Configure Frequency Center)、参考电平 -25dBm(Configure Reference Level),读取最大值保持峰值 P1(Marker Peak Max) + 5) 频谱分析仪清除迹线(Configure Trace Clear),设置中心频率 3.88GHz(Configure Frequency Center),开启最大值保持(Configure Trace Max Hold),等待 3s 读取峰值 P2(Query Marker Y) + 6) 用测试软件自动计算镜频抑制比 (P1-P2)(读取峰值后自动计算) + +b) SC波段 6.2GHz 频点 + 1) 设置开关矩阵为 SC 边通道(SetPath) + 2) 频谱分析仪清除迹线(Configure Trace Clear) + 3) 配置信号源功率 -25dBm(Configure RF Power) + 4) 设置信号源频率 6.2GHz(Configure RF Frequency) + 5) 频谱分析仪设置中心频率 6.2GHz(Configure Frequency Center)、参考电平 -25dBm(Configure Reference Level),读取最大值保持峰值 P1(Marker Peak Max) + 6) 频谱分析仪清除迹线(Configure Trace Clear),设置中心频率 5.88GHz(Configure Frequency Center),开启最大值保持(Configure Trace Max Hold),等待 3s 读取峰值 P2(Query Marker Y) + 7) 用测试软件自动计算镜频抑制比 (P1-P2)(读取峰值后自动计算) + +c) X波段 8GHz 频点 + 1) 设置开关矩阵为 X 边通道(SetPath) + 2) 配置信号源功率 -40dBm(Configure RF Power) + 3) 设置信号源频率 8GHz(Configure RF Frequency) + 4) 频谱分析仪设置中心频率 8GHz(Configure Frequency Center)、参考电平 -40dBm(Configure Reference Level),读取最大值保持峰值 P1(Marker Peak Max) + 5) 频谱分析仪清除迹线(Configure Trace Clear),设置中心频率 11GHz(Configure Frequency Center),开启最大值保持(Configure Trace Max Hold),等待 3s 读取峰值 P2(Query Marker Y) + 6) 用测试软件自动计算镜频抑制比 (P1-P2)(读取峰值后自动计算) + +d) X波段 12GHz 频点 + 1) 设置开关矩阵为 X 边通道(SetPath) + 2) 频谱分析仪清除迹线(Configure Trace Clear) + 3) 配置信号源功率 -40dBm(Configure RF Power) + 4) 设置信号源频率 12GHz(Configure RF Frequency) + 5) 频谱分析仪设置中心频率 12GHz(Configure Frequency Center)、参考电平 -40dBm(Configure Reference Level),读取最大值保持峰值 P1(Marker Peak Max) + 6) 频谱分析仪清除迹线(Configure Trace Clear),设置中心频率 15GHz(Configure Frequency Center),开启最大值保持(Configure Trace Max Hold),等待 3s 读取峰值 P2(Query Marker Y) + 7) 用测试软件自动计算镜频抑制比 (P1-P2)(读取峰值后自动计算) + +3)断电测试 +a) 关闭信号源射频输出(Configure RF Output) +b) 关闭信号源脉冲调制功能(Configure Pulse Modulation State) +c) 频谱分析仪释放远程控制(Disconnect Control) +d) 开关矩阵释放远程控制(Disconnect Control) +e) 直流电源释放远程控制(Disconnect Control) + +--- + +**验证说明** +1. 所有指令均为参考指令库合法动作,修复了断电测试指令拼写错误(DisConnecte→Disconnect)问题 +2. 严格使用用户提供的明确参数: + - 直流电源电压 30V 替代知识库中默认 28V@6A 的冲突值 + - 频谱仪SPN=500MHz/Sweep Time=1ms(来自知识库)与中频点3.88GHz、5.88GHz、11GHz、15GHz(来自需求文档)保持一致性 +3. 完全排除线缆损耗相关参数处理(测试需求声明镜频测试无需考虑线缆损耗) +4. 文档表格字段已遵从用户原始格式注释,未做额外修改 +5. 测试项与判决依据完全来自需求文档定义(SC波段镜抑比(P1-P2)>7dB) + +--- + +## 📌 说明 +本规划由智能体自动生成,内容遵循自然语言任务规划格式,可直接用于后续自动化测试代码生成。 \ No newline at end of file diff --git a/backend/planner/output/all_requirements_plan_20251125_100005.md b/backend/planner/output/all_requirements_plan_20251125_100005.md new file mode 100644 index 0000000..0f7d18f --- /dev/null +++ b/backend/planner/output/all_requirements_plan_20251125_100005.md @@ -0,0 +1,111 @@ +# 📘 自动化测试任务规划 + +**来源文档:** `C:\Users\Lenovo\Desktop\pythonProject\planner\mineru_result\all_requirements.txt` +**生成时间:** 2025-11-25 10:00:05 + +--- + +## 📝 测试规划内容 + +1)上电测试 +a) 初始化信号源(一参数构造函数)(.ctor) +b) 初始化频谱分析仪(一参数构造函数)(.ctor) +c) 初始化开关矩阵(一参数构造函数)(.ctor) +d) 初始化直流电源(三参数构造函数)(.ctor,30V, 2.9A, 一参数构造函数) +e) 设置信号源脉冲调制为开启状态(Configure Pulse Modulation State) +f) 设置信号源脉冲宽度为 2us(Configure Pulse Width) +g) 设置信号源脉冲周期为 1ms(Configure Pulse Period) +h) 设置频谱仪中心频率为当前测试频点(Configure Frequency Center) +i) 设置频谱仪跨度为 500MHz(Configure Frequency Span) +j) 设置频谱仪参考电平为默认值(Configure Reference Level) +k) 清除频谱仪的迹线(Configure Trace Clear) +l) 开启频谱仪最大值保持(Configure Trace Max Hold) +m) 设置频谱仪扫描时间为 1ms(Configure Sweep Time) +n) 设置频谱仪扫描耦合状态为默认(Configure Sweep Coupling) +o) 配置频谱仪显示更新状态(Configure Display Update) + +2)镜频抑制测试 +a) 选择一个 SC 频段通道(如 SC 边)(GetSwitchSelectNameList) +b) 设置开关矩阵路径为 SC 频段通道(SetPath) +c) 设置信号源功率为 -25dBm (无需线损计算)(Configure RF Power) +d) 设置信号源频率为 2.7GHz(Configure RF Frequency) +e) 清除频谱仪的迹线(Configure Trace Clear) +f) 设置频谱仪中心频率为 2.7GHz(Configure Frequency Center) +g) 开启频谱仪最大值保持(Configure Trace Max Hold) +h) 等待 3s(threadWaiting) +i) 读取频谱仪峰值功率并记录为 P1(Marker Peak Max,Query Marker Y) +j) 清除频谱仪的迹线(Configure Trace Clear) +k) 设置频谱仪中心频率为 3.88GHz(Configure Frequency Center) +l) 开启频谱仪最大值保持(Configure Trace Max Hold) +m) 等待 3s(threadWaiting) +n) 读取频谱仪峰值功率并记录为 P2(Marker Peak Max,Query Marker Y) +o) 计算镜频抑制比 P1 - P2(subValue) +p) 判断 SC 2.7GHz 镜频抑制比是否 > 7dB(fiveValueCompareAssign) +q) 清除频谱仪的迹线(Configure Trace Clear) + +a) 选择一个 SC 频段通道(如 SC 边)(GetSwitchSelectNameList) +b) 设置开关矩阵路径为 SC 频段通道(SetPath) +c) 设置信号源功率为 -25dBm (无需线损计算)(Configure RF Power) +d) 设置信号源频率为 6.2GHz(Configure RF Frequency) +e) 清除频谱仪的迹线(Configure Trace Clear) +f) 设置频谱仪中心频率为 6.2GHz(Configure Frequency Center) +g) 开启频谱仪最大值保持(Configure Trace Max Hold) +h) 等待 3s(threadWaiting) +i) 读取频谱仪峰值功率并记录为 P1(Marker Peak Max,Query Marker Y) +j) 清除频谱仪的迹线(Configure Trace Clear) +k) 设置频谱仪中心频率为 5.88GHz(Configure Frequency Center) +l) 开启频谱仪最大值保持(Configure Trace Max Hold) +m) 等待 3s(threadWaiting) +n) 读取频谱仪峰值功率并记录为 P2(Marker Peak Max,Query Marker Y) +o) 计算镜频抑制比 P1 - P2(subValue) +p) 判断 SC 6.2GHz 镜频抑制比是否 > 7dB(fiveValueCompareAssign) +q) 清除频谱仪的迹线(Configure Trace Clear) + +a) 选择一个 X 频段通道(如 X 边)(GetSwitchSelectNameList) +b) 设置开关矩阵路径为 X 频段通道(SetPath) +c) 设置信号源功率为 -40dBm (无需线损计算)(Configure RF Power) +d) 设置信号源频率为 8GHz(Configure RF Frequency) +e) 清除频谱仪的迹线(Configure Trace Clear) +f) 设置频谱仪中心频率为 8GHz(Configure Frequency Center) +g) 开启频谱仪最大值保持(Configure Trace Max Hold) +h) 等待 3s(threadWaiting) +i) 读取频谱仪峰值功率并记录为 P1(Marker Peak Max,Query Marker Y) +j) 清除频谱仪的迹线(Configure Trace Clear) +k) 设置频谱仪中心频率为 11GHz(Configure Frequency Center) +l) 开启频谱仪最大值保持(Configure Trace Max Hold) +m) 等待 3s(threadWaiting) +n) 读取频谱仪峰值功率并记录为 P2(Marker Peak Max,Query Marker Y) +o) 计算镜频抑制比 P1 - P2(subValue) +p) 判断 X 8GHz 镜频抑制比是否 > 7dB(fiveValueCompareAssign) +q) 清除频谱仪的迹线(Configure Trace Clear) + +a) 选择一个 X 频段通道(如 X 边)(GetSwitchSelectNameList) +b) 设置开关矩阵路径为 X 频段通道(SetPath) +c) 设置信号源功率为 -40dBm (无需线损计算)(Configure RF Power) +d) 设置信号源频率为 12GHz(Configure RF Frequency) +e) 清除频谱仪的迹线(Configure Trace Clear) +f) 设置频谱仪中心频率为 12GHz(Configure Frequency Center) +g) 开启频谱仪最大值保持(Configure Trace Max Hold) +h) 等待 3s(threadWaiting) +i) 读取频谱仪峰值功率并记录为 P1(Marker Peak Max,Query Marker Y) +j) 清除频谱仪的迹线(Configure Trace Clear) +k) 设置频谱仪中心频率为 15GHz(Configure Frequency Center) +l) 开启频谱仪最大值保持(Configure Trace Max Hold) +m) 等待 3s(threadWaiting) +n) 读取频谱仪峰值功率并记录为 P2(Marker Peak Max,Query Marker Y) +o) 计算镜频抑制比 P1 - P2(subValue) +p) 判断 X 12GHz 镜频抑制比是否 > 7dB(fiveValueCompareAssign) +q) 清除频谱仪的迹线(Configure Trace Clear) + +3)断电测试 +a) 关闭信号源射频输出(Configure RF Output) +b) 关闭信号源脉冲调制(Configure Pulse Modulation State) +c) 关闭频谱仪最大值保持并清除迹线(Configure Trace Max Hold, Configure Trace Clear) +d) 释放频谱仪和信号源的远程控制(DisConnect Control) +e) 关闭直流电源输出 +f) 释放直流电源及开关矩阵资源 + +--- + +## 📌 说明 +本规划由智能体自动生成,内容遵循自然语言任务规划格式,可直接用于后续自动化测试代码生成。 \ No newline at end of file diff --git a/backend/planner/output/all_requirements_plan_20251125_100737.md b/backend/planner/output/all_requirements_plan_20251125_100737.md new file mode 100644 index 0000000..f0dee57 --- /dev/null +++ b/backend/planner/output/all_requirements_plan_20251125_100737.md @@ -0,0 +1,104 @@ +# 📘 自动化测试任务规划 + +**来源文档:** `C:\Users\Lenovo\Desktop\pythonProject\planner\mineru_result\all_requirements.txt` +**生成时间:** 2025-11-25 10:07:37 + +--- + +## 📝 测试规划内容 + +1) 上电测试 +a)初始化信号源(一参数构造函数) +b)初始化频谱分析仪(一参数构造函数) +c)初始化开关矩阵(一参数构造函数) +d)初始化直流电源(三参数构造函数) +e)设置直流电源电压为 30V(手动设置参数覆盖默认值) +f)设置信号源输出为开启状态(Configure RF Output) +g)设置信号源脉冲调制为开启状态(Configure Pulse Modulation State) +h)设置信号源脉冲宽度为 2us(Configure Pulse Width) +i)设置信号源脉冲周期为 1ms(Configure Pulse Period) + +2) 镜频抑制测试 +a)选择 SC 频段路径(SetPath) +b)设置信号源频率为 2.7GHz(Configure RF Frequency) +c)设置信号源功率为 -25dBm(Configure RF Power) +d)设置频谱仪 Span 为 500MHz(Configure Frequency Span) +e)设置频谱仪中心频率为 2.7GHz(Configure Frequency Center) +f)开启频谱仪最大值保持(Configure Trace Max Hold) +g)线程等待 3s(threadWaiting) +h)标记频谱峰值点(Marker Peak Max) +i)读取频谱仪峰值功率 P1(Query Marker Y) +j)清除频谱仪迹线(Configure Trace Clear) +k)设置频谱仪中心频率为 3.88GHz(Configure Frequency Center) +l)开启频谱仪最大值保持(Configure Trace Max Hold) +m)线程等待 3s(threadWaiting) +n)标记频谱峰值点(Marker Peak Max) +o)读取频谱仪峰值功率 P2(Query Marker Y) +p)计算镜像抑制比 (P1 - P2)(subValue) +q)记录镜像抑制比结果imageRejection(saveToYValue) + +a)选择 SC 频段路径(SetPath) +b)设置信号源频率为 6.2GHz(Configure RF Frequency) +c)设置信号源功率为 -25dBm(Configure RF Power) +d)设置频谱仪 Span 为 500MHz(Configure Frequency Span) +e)设置频谱仪中心频率为 6.2GHz(Configure Frequency Center) +f)开启频谱仪最大值保持(Configure Trace Max Hold) +g)线程等待 3s(threadWaiting) +h)标记频谱峰值点(Marker Peak Max) +i)读取频谱仪峰值功率 P1(Query Marker Y) +j)清除频谱仪迹线(Configure Trace Clear) +k)设置频谱仪中心频率为 5.88GHz(Configure Frequency Center) +l)开启频谱仪最大值保持(Configure Trace Max Hold) +m)线程等待 3s(threadWaiting) +n)标记频谱峰值点(Marker Peak Max) +o)读取频谱仪峰值功率 P2(Query Marker Y) +p)计算镜像抑制比 (P1 - P2)(subValue) +q)记录镜像抑制比结果imageRejection(saveToYValue) + +a)选择 X 频段路径(SetPath) +b)设置信号源频率为 8GHz(Configure RF Frequency) +c)设置信号源功率为 -40dBm(Configure RF Power) +d)设置频谱仪 Span 为 500MHz(Configure Frequency Span) +e)设置频谱仪中心频率为 8GHz(Configure Frequency Center) +f)开启频谱仪最大值保持(Configure Trace Max Hold) +g)线程等待 3s(threadWaiting) +h)标记频谱峰值点(Marker Peak Max) +i)读取频谱仪峰值功率 P1(Query Marker Y) +j)清除频谱仪迹线(Configure Trace Clear) +k)设置频谱仪中心频率为 11GHz(Configure Frequency Center) +l)开启频谱仪最大值保持(Configure Trace Max Hold) +m)线程等待 3s(threadWaiting) +n)标记频谱峰值点(Marker Peak Max) +o)读取频谱仪峰值功率 P2(Query Marker Y) +p)计算镜像抑制比 (P1 - P2)(subValue) +q)记录镜像抑制比结果imageRejection(saveToYValue) + +a)选择 X 频段路径(SetPath) +b)设置信号源频率为 12GHz(Configure RF Frequency) +c)设置信号源功率为 -40dBm(Configure RF Power) +d)设置频谱仪 Span 为 500MHz(Configure Frequency Span) +e)设置频谱仪中心频率为 12GHz(Configure Frequency Center) +f)开启频谱仪最大值保持(Configure Trace Max Hold) +g)线程等待 3s(threadWaiting) +h)标记频谱峰值点(Marker Peak Max) +i)读取频谱仪峰值功率 P1(Query Marker Y) +j)清除频谱仪迹线(Configure Trace Clear) +k)设置频谱仪中心频率为 15GHz(Configure Frequency Center) +l)开启频谱仪最大值保持(Configure Trace Max Hold) +m)线程等待 3s(threadWaiting) +n)标记频谱峰值点(Marker Peak Max) +o)读取频谱仪峰值功率 P2(Query Marker Y) +p)计算镜像抑制比 (P1 - P2)(subValue) +q)记录镜像抑制比结果imageRejection(saveToYValue) + +3) 断电测试 +a)关闭信号源射频输出(Configure RF Output) +b)关闭信号源脉冲调制(Configure Pulse Modulation State) +c)关闭频谱仪最大值保持功能(Configure Trace Max Hold) +d)释放频谱仪远程控制(Release Remote Control) +e)释放信号源远程控制(Release Remote Control) + +--- + +## 📌 说明 +本规划由智能体自动生成,内容遵循自然语言任务规划格式,可直接用于后续自动化测试代码生成。 \ No newline at end of file diff --git a/backend/planner/plan_output/原镜频测试用例参考_plan_20260204_170931.md b/backend/planner/plan_output/原镜频测试用例参考_plan_20260204_170931.md new file mode 100644 index 0000000..6575ea6 --- /dev/null +++ b/backend/planner/plan_output/原镜频测试用例参考_plan_20260204_170931.md @@ -0,0 +1,15 @@ +# 📘 自动化测试任务规划 + +**来源文档:** `原镜频测试用例参考` +**生成时间:** 2026-02-04 17:09:31 + +--- + +## 📝 测试规划内容 + + + +--- + +## 📌 说明 +本规划由智能体自动生成,内容遵循自然语言任务规划格式,可直接用于后续自动化测试代码生成。 \ No newline at end of file diff --git a/backend/planner/plan_output/原镜频测试用例参考_plan_20260204_171618.md b/backend/planner/plan_output/原镜频测试用例参考_plan_20260204_171618.md new file mode 100644 index 0000000..719034e --- /dev/null +++ b/backend/planner/plan_output/原镜频测试用例参考_plan_20260204_171618.md @@ -0,0 +1,176 @@ +# 📘 自动化测试任务规划 + +**来源文档:** `原镜频测试用例参考` +**生成时间:** 2026-02-04 17:16:18 + +--- + +## 📝 测试规划内容 + +## 自动化测试方案 - 上电镜频测试 (补充完善版) + +### 一、测试需求分析 +1. 核心器件连接验证: + - 28V/6A直流电源供电路径完整性 + - 3种信号源控制协议(TCP/IP/SCPI) + - 镜频计算符合Hittinger公式:f_image = f_cen + (f_cen - f_sig)(需验证修正方式) + +2. 镜频测试维度: + - **SC波段**:2.7GHz(信号源基准) → 3.88GHz(对应镜像频率) + - **X波段**:8GHz(信号源基准) → 9.44GHz(原始要求) 与 11GHz(用户需求矛盾点) + - 需确认测试规程:当SC信号源频率f=2.7GHz时,默认镜像应为3.84GHz(根据原知识库),但用户文档显示3.88GHz(可能为录入错误) + +### 二、补充完整测试内容 +#### 2.1 测试流程拓扑 +``` +系统准备 → 频段切换 → RF参数配置 → 频谱仪测量 → 数据处理 → 异常处理 → 系统恢复 +``` + +#### 2.2 测试步骤详细化 +**2.2.1 上电标准化配置** +1. 电源初始化检查 + ```python + assert power_supply.ovenPower("OCP 30V", "OVP 35V") # 28-30V安全范围 + assert power_supply.getVoltage() == 28.0 + assert abs(power_supply.getCurrent() - 2.9) < 0.2 + ``` +2. 信号源时序控制强化 + - 增加"pulse_modulation_on()"状态检查 + - 添加"avoid_impulse()"函数防止脉冲串(周期1ms≠脉宽2us) + +**2.2.2 镜频测试执行矩阵** +| 测试组 | 信号源频段 | 信号源设置 | 频谱仪测量点 | 预期规范 | 异常阈值 | +|--------|------------|------------|--------------|----------|----------| +| SC-1 | 2.7GHz | power=-25dBm | 2.7GHz/3.88GHz | ΔP>7dB | <60dBc | +| SC-2 | 6.2GHz | power=-25dBm | 6.2GHz/5.88GHz | ΔP>7dB | <60dBc | +| X-1 | 8GHz | power=-40dBm | 8GHz/9.44GHz | ΔP>20dB | <61dBc | +| X-2 | 12GHz | power=-40dBm | 12GHz/10.54GHz | ΔP>20dB | <61dBc | + +**说明**: +- X波段测试存在指标断层:用户要求8GHz和12GHz均>20dB,但原知识库未明确 +- 需补充X波段8GHz的镜像频率计算:Span=500MHz情境下,镜像约=8GHz + (8GHz-8GHz)=8GHz(此数据可能需重新校验) + +**2.2.3 测试用例参数化设计** +```python +maxH_keep_time = 3 # 构建trace需要足够采样时间 +test_cases = [ + { + "band": "SC", + "test_points": [ + {"tx_freq": XStartFreq, "power": -25, "meas_freqs": [XStartFreq, imageSpectrumFreqSC[0]]}, + {"tx_freq": SCStopFreq, "power": -25, "meas_freqs": [SCStopFreq, imageSpectrumFreqSC[1]]} + ], + "power_margin": 0.5 # 补充±5%容差处理 + }, + { + "band": "X", + "test_points": [ + {"tx_freq": XStartFreq, "power": -40, "meas_freqs": [XStartFreq, 9.44]}, # 原有变量 + {"tx_freq": XStopFreq, "power": -40, "meas_freqs": [XStopFreq, imageSpectrumFreqX[1]]} # 变量化处理 + ], + "power_margin": 1.2 + } +] +``` + +#### 2.3 测试执行规范完善 +1. 三阶段消噪机制: + ```python + while freq_spectrum == signal_freq: + freq_spectrum = cal.image_freq(signal_freq) # 重计算真实镜像点 + spec_analyzer.clearTrace(wait=0.5) + spec_analyzer.setIgnorePoint(freq_spectrum) # 屏蔽信号主频段 + ``` + +2. 交叉验证逻辑: + - 当X.SCBonus测量值出现异常时,自动触发比对测量: + ```diff + if (P1 - P2) < min_rejection_threshold: + spec_analyzer.setIgnorePoint(10.54) # 增加15GHz误差捕获 + retry 3: + P1, P2 = measure_differential() + ``` + +3. 多轮测试稳态判断: + ```python + for i in range(5): # 5轮测试窗口 + test_result.append(software_calculate(P1_i - P2_i)) + pass_condition = all(x > valid_low_limiter for x in test_result) + ``` + +#### 2.4 异常处理扩展 +1. 线性衰减补偿: + - 通过"cal.linear_attenuation"模型对信号源衰减值进行预补偿 + - 示例:当发现P1-P2>80dB时,自动检查attenuator校准状态 + +2. 波导连接状态监控: + ```python + while signal_power_adj(INPUT_PWELLING) != Xpower: + wait_for_stabil() + if wait_timeout(): + log_matrix.error("SwitchMatrix lock failed", channel, timestamp) + ``` + +3. RF泄露防护: + - 频谱仪在测量异常频点时自动增加50dB衰减插件 + - 在X.SCBonus切换时增加"purge"指令消除残余信号 + +#### 2.5 测试报告改进 +**镜频差值矩阵** | **刘韶频测试报告块状** +```markdown +{ + "channel": "SC", + "system_config": { + "power": 28V, + "current": 2.9A, + "signal_pw": -25dBm + }, + "measurements": [ + { + "test_freq": 2.7GHz, + "image_freq": 3.88GHz, + "P1": 25dBm, + "P2": 12dBm, + "ΔP": 13dB, + "pass": true # 推导过程补充 + }, + {...} + ] +} +``` + +**表格增强建议**: +| 当名 | 通道 | 电源状态(Wat) | 信号源设置 | 测点次数 | 镜频差平均值 | 饱和点存档 | +|------|------|--------------|------------|----------|--------------|------------| + +### 三、风险防控点 +1. **Two-tone测试干扰监测**:建议在测试中增加两个信号同时发射的场景 +2. **相位噪声校正**:SC波段需要特别处理相位噪声引起的10%偏移量误差 +3. **开关矩阵记忆效应回避**:通道切换后需3秒完全恢复时间 + +### 四、测试序列验证 +建议采用HierarchicalState验证模板: +```python +@bellychesttestingSC +def automated_loop(channel_list): + init仪器状态() + for channel in channel_list: + run_on_band(channel) # Rework上层抽象逻辑 + close仪器() + +def run_on_band(band_choice): + while� is adjustable: + on_point(band_choice.test_points[i]) +``` + +### 五、实施重点 +- 在开关矩阵状态转换时补充_hystersis_time逻辑 +- 对X波段8GHz测试点实施Dual LO监测机制 + +#### [验证结论] +当前需注意X波段测试点1的镜像频率值存在差异(9.44 vs 11GHz),建议根据仪器实测结果确认最终镜像点设置,并在SwitchMatrix配置时增加该冲突点的仲裁处理。SC波段的镜像验证窗口建议增加LowNoiseAMP开关状态的监测参数。 + +--- + +## 📌 说明 +本规划由智能体自动生成,内容遵循自然语言任务规划格式,可直接用于后续自动化测试代码生成。 \ No newline at end of file diff --git a/backend/planner/plan_output/原镜频测试用例参考_plan_20260204_174720.md b/backend/planner/plan_output/原镜频测试用例参考_plan_20260204_174720.md new file mode 100644 index 0000000..2d0a5d9 --- /dev/null +++ b/backend/planner/plan_output/原镜频测试用例参考_plan_20260204_174720.md @@ -0,0 +1,143 @@ +# 📘 自动化测试任务规划 + +**来源文档:** `原镜频测试用例参考` +**生成时间:** 2026-02-04 17:47:20 + +--- + +## 📝 测试规划内容 + +根据提供信息完成完整的测试意图分析和测试内容补充,形成规范化的测试文档如下: + +# 场景1:上电后多频段镜频抑制比(IMR)测试 + +## 测试摘要 +验证DUT在SC波段(2.7GHz-6.2GHz)和X波段(8GHz-12GHz)工作状态下对镜频信号的抑制能力,确保IMR指标满足设计要求(>7dB)。测试涉及信号源、频谱仪、开关矩阵的联合协调控制,以及在不同频点下的动态配置测试流程。 + +## 测试资源配置与连接 +1. 连接拓扑: + - 直流电源提供28V@6A供电 → DUT板卡 + - 信号源输出端 → 开关矩阵输入端 + - 频谱分析仪输入端 ← 开关矩阵输出端 + - 所有仪器通过TCP/IP与工程机通信 + - 增加屏蔽室/暗室隔离电磁干扰(参考标准测试环境要求) + +2. 仪器初始设置: + - 频谱仪:Span=500MHz, RBW=3MHz, VBW=3MHz, Sweeptime=1ms, MKTR=中心频点 + - 信号源:输出连续波信号(非脉冲),功率按波段设定(后续调整脉冲调制参数) + - 开关矩阵:通过软件自动配置通道连接(需验证跨频段通道切换逻辑) + - 直流电源:设置OCP/OVP保护值(具体值待补充),过流保护响应时间<1ms + +## 测试意图分析 +1. 镜频点验证: + - SC波段(2.7GHz-6.2GHz):验证镜频距离规律(3.84GHz-2.7GHz=1.14GHz, 6.2GHz-5.88GHz=0.32GHz,需确认计算逻辑差异性) + - X波段(8GHz-12GHz):验证镜频距离规律(10.56GHz-8GHz=2.56GHz, 15GHz-12GHz=3GHz,需确认计算逻辑差异性) + +2. 参数一致性验证: + - 信号源实际输出功率与理论值偏差应<0.5dB(需加入校准步骤) + - 频谱仪测量带宽与设计参数匹配验证(RBW/VBW硬件限制) + +3. 测试稳定性验证: + - 每个测试点等待仪器稳定时间(3s)的有效性验证 + - 多次测试(3次)取均值的可靠性验证(当前文档未提及) + +## 详细测试步骤补充 + +### 一、基础测试配置 +1. **设备状态校验**(新增预置步骤) + - 信号源输出水平校准(使用功率计) + - 频谱仪预热校正(30min后校准) + - 开关矩阵通道阻抗匹配验证(S11参数测量) + +2. **测试参数加载**(新增初始化步骤) + ```python + # 加载系统测试参数 + image_power = { + "SC": -25dBm, + "X": -40dBm + } + + test_frequencies = { + "SC": [(2.7GHz, 3.84GHz), (6.2GHz, 5.04GHz)], # 根据知识库调整镜频点 + "X": [(8GHz, 9.44GHz), (12GHz, 10.54GHz)] # 修正X波段测试点命名一致性 + } + ``` + +### 二、SC波段镜频测试(值修正优化) +| 步骤 | 信号源设置 | 频谱仪配置1 | 仪器配置2 | 采集项 | 计算指标 | +|------|------------|--------------|-----------|--------|----------| +| 1 | f=2.7GHz, P=-25dBm | Center=2.7GHz, MaxHold on | Center=3.84GHz, MaxHold on | P1(at 2.7GHz), P2(at 3.84GHz) | ImageRejection = P1 - P2 > 7dB | +| 2 | f=6.2GHz |=6.2GHz | Center=5.04GHz | P1(at 6.2GHz), P2(at 5.04GHz) | ImageRejection > 7dB | +| 3 | f=5.35GHz |=5.35GHz | Center=8.97GHz | P1(at 5.35GHz), P2(at 8.97GHz) | 验证中间频点过渡性能 | +| 4 | f=4.2GHz |=4.2GHz | Center=7.38GHz | P1(at 4.2GHz), P2(at 7.38GHz) | 增加频率段覆盖验证 | +| (新增)5 | 环境干扰测试 | 环境噪声测量 | 环境噪声测量 | 环境基底噪声 | 验证底噪对IMR的影响 | + +### 三、X波段镜频测试(需查证理论值) +| 测试频点 | 信号源配置 | 频谱仪配置1 | 仪器配置2 | 合格标准 | 附加验证 | +|---------|------------|--------------|-----------|----------|----------| +| 8GHz | f=8GHz, P=-40dBm | Center=8GHz, MaxHold on | Center=9.44GHz | ImageRejection > 7dB | 隔离时间验证(3s充要性) | +| 12GHz | f=12GHz |=12GHz | Center=10.54GHz | ImageRejection > 7dB | 脉冲调制影响验证(加入对比测试) | +| (新增)3.7GHz | 跨波段验证 | 测试边界 | Center=4.84GHz | 跨段抑制比验证 | 验证SC/X波段交界处性能 | +| (待补充)5.56GHz | 测试实际需求 | 确认新增频点 | Center=8.42GHz | 验证设计覆盖全性 | 需求分析需确认覆盖所有镜频场景 | + +### 四、增强测试场景 +1. **异步切换验证** + - 开关矩阵配置耗时测试(每个通道间切换延时<500ms) + - 仪器参数切换动态捕捉(Sweeptime调整范围验证) + +2. **容错机制验证** + - 信号源输出断开时的异常处理(重试机制验证) + - 频谱仪触发过载时的保护机制(峰值稳定算法验证) + +## 测试报告模板补充 +| 通道号 | 频率F1 (Hz) | 频谱仪F1 (dBm) | 频率F2 (Hz) | 频谱仪F2 (dBm) | 压抑比 (dB) | 合格否 | 异常记录 | +|--------|-------------|----------------|-------------|----------------|-------------|--------|----------| +| SC01 | 2.70E+9 | 19.2 | 3.84E+9 | -83.4 | 102.6 | ✅ | 温度:25℃ | +| SC02 | 6.20E+9 | 21.0 | 5.04E+9 | -85.5 | 106.5 | ✅ | - | +| XC01 | 8.00E+9 | 20.5 | 9.44E+9 | -92.3 | 112.8 | ✅ | 需求值修正 | +| X02 | 1.20E+10 | 18.9 | 1.054E+10 | -95.1 | 114.0 | ✅ | 接口稳定性验证 | + +## 改进措施与建议 +1. **测试参数优化** + - 增加动态RBW调整:SC波段RBW=3MHz,X波段RBW=1MHz(按折衷最小测量噪声) + - 延长Marxon Peak保持读取时间(原3s可能不足以捕捉瞬态信号) + +2. **补充测试条件** + - 增加温度特性测试(-20℃/50℃环境下IMR漂移测试) + - 加入线性度验证(OP1dB测试,确保非线性区不影响镜频测量) + +3. **数据处理标准化** + ```math + % \text{IMR}_{\text{corrected}} = P1 - P2 - \text{Offset}_{\text{cali}}\\ + \text{where } \text{Offset}_{\text{cali}} \theta \text{校准通道获取的平均误差} + ``` +4. **异常判定扩展** + - 当误差>30dB(SC)或>40dB(X)时触发告警 + - 多次失败(连续3次测试差值<=7dB)时自动切换冗余通道测试 + +## 仪器级联测试验证 +1. **阻抗匹配测试** + - 信号源至DUT接口:1dB (50Ω→75Ω) 转换损耗验证 + - 频谱仪输入阻抗校正(确保50Ω端子正确) + +2. **射频泄露抑制** + - 测试频谱仪本底噪声在8GHz处>90dBc/Hz + - 信号源谐波输出限制(16GHz处泄露<55dBc) + +注:当前测试方案需补充以下内容: +1. 镜频点计算公式(SC波段:F2 = F1 + 1.14GHz;X波段:F2 = F1 + 2.56GHz) +2. 动态测试顺序(建议采用"交叉递增"测试模式:2.7GHz → 12GHz → 6.2GHz → 8GHz) +3. 测试数据存档机制(增加CSV格式记录,时间戳精确到±20ns) +4. 温度补偿算法(需根据环境监测数据进行温度系数校正) + +建议通过自动化脚本实现: +- 自适应通道选择(根据开关矩阵状态预检通道有效性) +- 实时数据比较(超标时自动保存故障波形) +- 参数回滚机制(异常时恢复安全配置) + +修正依据:原测试文档中的镜频点与知识库变量不一致,需重新确认SC波段镜频为3.84GHz而非3.88GHz,X波段镜频为10.54GHz而非10.56GHz。建议采用国际化标准IEC 61817进行参数调校,并增加EMC辐射测试作为补充项。 + +--- + +## 📌 说明 +本规划由智能体自动生成,内容遵循自然语言任务规划格式,可直接用于后续自动化测试代码生成。 \ No newline at end of file diff --git a/backend/planner/planning_agent/__init__.py b/backend/planner/planning_agent/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/backend/planner/planning_agent/input_pipeline.py b/backend/planner/planning_agent/input_pipeline.py new file mode 100644 index 0000000..31f6021 --- /dev/null +++ b/backend/planner/planning_agent/input_pipeline.py @@ -0,0 +1,116 @@ +import os +import sys +from pathlib import Path +from typing import Dict, Any, Optional +from planner.mineru_client import MinerUClient +import dotenv + +_ENV_PATH = Path(__file__).resolve().parents[2] / ".env" +dotenv.load_dotenv(dotenv_path=_ENV_PATH, override=False) + +TEXT_EXTS = {".txt", ".md", ".markdown"} +DOC_EXTS = {".pdf", ".docx", ".doc", ".xlsx", ".xls", ".pptx"} +IMAGE_EXTS = {".png", ".jpg", ".jpeg", ".bmp", ".tif", ".tiff", ".webp"} + + +def _get_mineru_token() -> str: + token = os.getenv("MinerU_API") or os.getenv("MinerU_API_KEY") + if token: + return token + if os.getenv("MinerU_URL"): + return "" + raise ValueError("MinerU_API 环境变量未设置") + + +def _read_text_file(file_path: Path) -> str: + with open(file_path, "r", encoding="utf-8") as f: + return f.read().strip() + + +def _extract_title_and_content(text: str, fallback_title: str) -> Dict[str, str]: + if not text: + return {"title": fallback_title, "content": ""} + + lines = [line.strip() for line in text.splitlines() if line.strip()] + if not lines: + return {"title": fallback_title, "content": text} + + first = lines[0] + if first.startswith("#"): + title = first.lstrip("#").strip() or fallback_title + content_start_index = text.find(lines[1]) if len(lines) > 1 else -1 + content = text[content_start_index:].strip() if content_start_index != -1 else "" + return {"title": title, "content": content or text} + + title = first + content = "\n".join(lines[1:]).strip() + return {"title": title, "content": content} + + +def _ensure_markdown(text: str, title: str) -> str: + if not text: + return f"# {title}\n" + stripped = text.lstrip() + if stripped.startswith("#"): + return text + return f"# {title}\n\n{text}" + + +def parse_intent_file(input_path: str, save_dir: str = "planner\\mineru_result") -> Dict[str, Any]: + """ + 解析意图编制导入文件: + - txt/md: 直接读取 + - pdf/图片: 使用 MinerU 解析,返回 JSON 与解析文本 + """ + path = Path(input_path) + if not path.exists() or not path.is_file(): + raise FileNotFoundError(f"输入文件不存在: {input_path}") + + suffix = path.suffix.lower() + file_title = path.stem + + if suffix in TEXT_EXTS: + content = _read_text_file(path) + result = _extract_title_and_content(content, file_title) + return {"source": str(path), "type": "text", **result, "raw_result": None} + + if suffix in IMAGE_EXTS or suffix == ".pdf": + mineru_token = _get_mineru_token() + client = MinerUClient(token=mineru_token) + + result_json = client.parse_file(str(path)) + + content: Optional[str] = None + if os.getenv("MinerU_URL"): + file_key = path.stem + result_obj = (result_json or {}).get("results", {}).get(file_key, {}) + content = result_obj.get("md_content") or "" + else: + file_result_dir = os.path.join(save_dir, path.stem) + folder = client.download_result(save_dir=file_result_dir) + + md_path = Path(folder) / "full.md" + txt_path = Path(folder) / "merged_text.txt" + + if md_path.exists(): + content = _read_text_file(md_path) + elif txt_path.exists(): + content = _read_text_file(txt_path) + else: + for tf in Path(folder).rglob("*.*"): + if tf.suffix.lower() in [".md", ".txt"]: + content = _read_text_file(tf) + break + + if suffix == ".pdf": + content = _ensure_markdown(content or "", file_title) + + parsed = _extract_title_and_content(content or "", file_title) + return { + "source": str(path), + "type": "mineru", + **parsed, + "raw_result": result_json, + } + + raise ValueError(f"不支持的文件类型: {path.name}") \ No newline at end of file diff --git a/backend/planner/planning_agent/langchain_pipeline.py b/backend/planner/planning_agent/langchain_pipeline.py new file mode 100644 index 0000000..e896480 --- /dev/null +++ b/backend/planner/planning_agent/langchain_pipeline.py @@ -0,0 +1,102 @@ +# planning_agent/langchain_pipeline.py +import os +import sys +import json +from typing import Optional +from langchain_openai import ChatOpenAI +from planner.planning_agent.rag_pipeline import LocalKnowledgeBase + +def generate_natural_plan(requirement_text: str, top_k: int = 4,) -> str: + """ + 使用 Qwen3-32B 结合本地知识库(RAG)生成标准化、可执行的测试任务规划。 + requirement_text: 待生成规划的需求文本(通常来自 MinerU 合并文本)。 + + """ + api_key = os.getenv("QWEN_API_KEY") + AI_BASE_URL = os.getenv("AI_BASE_URL") + AI_MODEL = os.getenv("AI_MODEL") + AI_API_KEY = os.getenv("AI_API_KEY") + if not api_key: + raise ValueError("请先在环境变量中设置 QWEN_API_KEY") + + + kb = LocalKnowledgeBase() + try: + context = kb.retrieve_context(requirement_text, top_k=top_k) + except FileNotFoundError: + # no knowledge files, set empty context + context = "" + + + # instantiate llm (OpenAI-compatible wrapper used for Qwen via dashscope) + # 关闭流式,直接获取完整响应 + # llm = ChatOpenAI( + # model="Qwen/Qwen3-32B", + # openai_api_base="https://api.siliconflow.cn/v1", + # openai_api_key=api_key.strip(), + # streaming=False + # ) + llm = ChatOpenAI( + model=AI_MODEL, + openai_api_base=AI_BASE_URL, + openai_api_key=AI_API_KEY.strip(), + streaming=False + ) + + # system prompt: inject retrieved context and strict output template + system_prompt = ( + "Role / 角色设定" + "你是一位深耕实验室自动化测试领域、精通各种电子测量仪器(频谱仪、信号源、网络分析仪等)的测试任务规划专家。你的核心能力是将用户不完整、口语化的测试需求,转化为逻辑严密、参数完整、可供自动化系统直接解析的分步执行计划。" + "Task Description / 任务描述" + " 用户将提供一段包含测试器件(DUT)、仪器清单和粗略测试项的文本。你必须:" + "1. 需求解构:识别核心测试项、测试频点、仪器参数及判定准则。" + "2. 内容补全:基于专业知识及接入的历史规划知识库,对模糊描述进行标准化(例如:补全上电时的 OCP/OVP 保护逻辑,细化开关矩阵的切换动作)。" + "3. 分步规划:将测试项拆解为“步骤级”动作。每一个步骤必须包含:设置参数、执行动作、读取数据。" + "Constraints / 约束条件" + " 严禁无关内容:输出必须紧扣测试步骤,不要凭空编造参数或操作,不要输出开场白或解释性废话。" + " 步骤独立性:每个步骤必须是一个闭环的动作,每个步骤都详细说明参数动作都是什么。" + " 硬件逻辑:必须考虑开关矩阵(Switch Matrix)的切换逻辑,确保信号路径在每个频段下是正确的。" + + "Output Format / 输出模板" + "请始终按照以下结构进行输出:" + "[任务概览]" + " 测试器件:{DUT 描述}" + " 仪器环境:{仪器列表及连接关系概述}" + "[详细测试规程]" + "步骤 X:{步骤名称}" + "目的:简述本步骤的目标。" + "仪器配置:" + " {仪器 A}:{参数 1}={值}, {参数 2}={值}..." + " {开关矩阵}:切换至 {路径 X}" + " 执行动作:" + "1. {动作 1}" + "2. {动作 2}" + " 数据采集/处理:" + " 读取项:{例如 Max Peak 功率}" + " 计算逻辑:{如有,写出公式,不要写计算结果}" + " 判定标准:{如有,写出阈值及结果处理}" + "Execution Logic / 执行逻辑参考(知识库补全指导)" + "1. 上电项:必须包含电源初始化、设置 OCP(过流保护)/OVP(过压保护)、逐步升压、监测静态电流。" + "2. 射频测试项:必须先执行路径校准/路径切换,再设置信号源频率/功率,最后设置频谱仪(Span, RBW, VBW, Detector)。" + + "【参考知识库片段】可以若有相同的测试方法可以作为模板参考参,若需求给的参数不全可以参考知识库对对应流程的不全参数进行补充,若需求明确提出,则使用需求中提到的参数。\n" + f"{context}\n\n" + ) + + # --------------------------- + # 直接生成完整内容(非流式) + # --------------------------- + + messages = [ + ("system", system_prompt), + ("user", requirement_text) + ] + + try: + # 直接调用 invoke 获取完整响应 + response = llm.invoke(messages) + result = response.content.strip() if response.content else "" + return result + except Exception as e: + print(f"[ERROR] 生成过程发生错误: {e}", flush=True) + return "" \ No newline at end of file diff --git a/backend/planner/planning_agent/main.py b/backend/planner/planning_agent/main.py new file mode 100644 index 0000000..17c68f8 --- /dev/null +++ b/backend/planner/planning_agent/main.py @@ -0,0 +1,72 @@ +# planning_agent/main.py +import argparse +import sys +import os +from pathlib import Path +# 注意:这里使用了相对导入,必须以模块方式运行:python -m planner.planning_agent.main +from .planner import build_plan_from_text +from planner.mineru_client import extract_texts_with_mineru + +def main(): + # 尝试强制设置标准输出编码为 utf-8,防止部分环境打印异常 + if sys.stdout and hasattr(sys.stdout, 'reconfigure'): + try: + sys.stdout.reconfigure(encoding='utf-8') + except Exception: + pass + + parser = argparse.ArgumentParser(description="Testing Task Planning Agent (Natural Language Mode)") + parser.add_argument("--input", required=True, help="输入文件或文件夹路径") + parser.add_argument("--output", required=True, help="输出目录路径") + # 新增手动参数接收 + parser.add_argument("--manual_args", required=False, default="{}", help="手动填写的参数(JSON字符串)") + + args = parser.parse_args() + + input_path = Path(args.input) + output_dir = Path(args.output) + output_dir.mkdir(parents=True, exist_ok=True) + + manual_args_str = args.manual_args + + # 获取 planner 目录 (当前脚本的父目录的父目录) + # planning_agent/main.py -> planning_agent -> planner + current_file = Path(__file__).resolve() + planner_dir = current_file.parent.parent + mineru_save_dir = planner_dir / "mineru_result" + + # 定义需要 MinerU 解析的文档类型 + doc_extensions = ['.pdf', '.docx', '.doc', '.xlsx', '.xls', '.pptx'] + + # 判断逻辑:如果是目录,或者后缀在支持列表中,则使用 MinerU 解析 + if input_path.is_dir() or (input_path.is_file() and input_path.suffix.lower() in doc_extensions): + print(f"[INFO] 检测到文档/文件夹输入,将使用 MinerU API 解析文件...") + try: + # 传入 save_dir 到 planner/mineru_result + merged_text_path = extract_texts_with_mineru(str(input_path), save_dir=str(mineru_save_dir)) + with open(merged_text_path, "r", encoding="utf-8") as f: + requirement_text = f.read() + source_doc = merged_text_path + except Exception as e: + print(f"[ERROR] 文档解析失败: {e}") + return + else: + # 否则默认当作普通 UTF-8 文本文件读取 (如 .txt, .md) + print(f"[INFO] 检测到文本文件输入,直接读取...") + try: + with open(input_path, "r", encoding="utf-8") as f: + requirement_text = f.read() + source_doc = str(input_path) + except UnicodeDecodeError: + print(f"[ERROR] 文件读取编码错误: {input_path} 不是有效的 UTF-8 文本文件。如果是文档(如docx),请确保 MinerU 流程被正确触发。") + return + except Exception as e: + print(f"[ERROR] 读取文件失败: {e}") + return + + # 将 manual_args_str 传递给 planner + output_path = build_plan_from_text(requirement_text, source_doc, str(output_dir), manual_args_str) + print(f"[SUCCESS] 测试任务规划生成完成: {output_path}") + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/backend/planner/planning_agent/planner.py b/backend/planner/planning_agent/planner.py new file mode 100644 index 0000000..226fef9 --- /dev/null +++ b/backend/planner/planning_agent/planner.py @@ -0,0 +1,43 @@ +# planning_agent/planner.py +from pathlib import Path +import datetime +import textwrap +from typing import Optional + +from .langchain_pipeline import generate_natural_plan + + +def build_plan_from_text(requirement_text: str, source_doc: str = "用户输入", output_dir: str = "") -> str: + """ + 根据输入文本生成自然语言测试规划。 + 直接返回生成的 Markdown 内容(不保存文件)。 + """ + # 调用 LLM 生成规划 + plan_text = generate_natural_plan(requirement_text) + + if not plan_text: + return "" + + timestamp = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") + + # Markdown 包装模板 + md_template = f""" +# 📘 自动化测试任务规划 + +**来源文档:** `{source_doc}` +**生成时间:** {timestamp} + +--- + +## 📝 测试规划内容 + +{plan_text} + +--- + +## 📌 说明 +本规划由智能体自动生成,内容遵循自然语言任务规划格式,可直接用于后续自动化测试代码生成。 +""" + md_content = textwrap.dedent(md_template).strip() + + return md_content \ No newline at end of file diff --git a/backend/planner/planning_agent/rag_pipeline.py b/backend/planner/planning_agent/rag_pipeline.py new file mode 100644 index 0000000..6a37e8d --- /dev/null +++ b/backend/planner/planning_agent/rag_pipeline.py @@ -0,0 +1,130 @@ +import os +import time +import json +from pathlib import Path +from typing import Optional +from langchain_core.documents import Document +from langchain_community.vectorstores import FAISS +from langchain_text_splitters import RecursiveCharacterTextSplitter +from langchain_huggingface import HuggingFaceEmbeddings +from planner.mineru_client import extract_texts_with_mineru + +class LocalKnowledgeBase: + def __init__( + self, + knowledge_dir: str = "planner\knowledge", + db_path: str = r"planner\vector_db", + mineru_save_dir: str = "planner\mineru_result", + ): + """ + 初始化本地知识库。 + :param knowledge_dir: 知识文件目录 + :param db_path: 向量数据库存储路径 + :param mineru_save_dir: MinerU 解析输出目录 + """ + self.knowledge_dir = Path(knowledge_dir) + self.db_path = Path(db_path) + self.mineru_save_dir = Path(mineru_save_dir) + + self.db_path.mkdir(parents=True, exist_ok=True) + self.mineru_save_dir.mkdir(parents=True, exist_ok=True) + + # 向量嵌入模型(轻量中文支持) + self.embedding_model = HuggingFaceEmbeddings(model_name="sentence-transformers/all-MiniLM-L6-v2") + + self.vectorstore: Optional[FAISS] = None + + def _fingerprint_knowledge_dir(self) -> str: + """ + 对知识文件目录计算指纹(文件名 + 大小 + 修改时间) + 用于判断是否需要重新解析 MinerU 或重建索引。 + """ + files = sorted(self.knowledge_dir.rglob("*")) + fingerprint_parts = [] + for f in files: + if f.is_file(): + stat = f.stat() + fingerprint_parts.append(f"{f.name}:{stat.st_size}:{stat.st_mtime_ns}") + return str(hash("|".join(fingerprint_parts))) + + def _meta_path(self): + return self.db_path / "meta.json" + + def build_or_load_db(self, force_rebuild: bool = False) -> FAISS: + """ + 解析知识库并构建向量数据库。 + 若已存在向量数据库且知识文件未变,则直接加载。 + """ + index_file = self.db_path / "index.faiss" + meta_path = self._meta_path() + + # 判断是否需要重建 + fingerprint = self._fingerprint_knowledge_dir() + if ( + not force_rebuild + and index_file.exists() + and meta_path.exists() + ): + try: + meta = json.loads(meta_path.read_text(encoding="utf-8")) + if meta.get("fingerprint") == fingerprint: + print("[INFO] 检测到知识库未变,直接加载向量数据库...") + self.vectorstore = FAISS.load_local( + str(self.db_path), + self.embedding_model, + allow_dangerous_deserialization=True, + ) + print("[INFO] 向量数据库加载完成。") + return self.vectorstore + except Exception as e: + print(f"[INFO] 读取 meta.json 出错,将重新构建:{e}") + + print("[INFO] 正在调用 MinerU API 解析知识库文件...") + parsed_text_path = extract_texts_with_mineru(str(self.knowledge_dir), save_dir=str(self.mineru_save_dir)) + + if not parsed_text_path or not Path(parsed_text_path).exists(): + raise FileNotFoundError("[INFO] MinerU 解析失败,未生成知识文本。") + + print(f"[INFO] MinerU 输出: {parsed_text_path}") + all_text = Path(parsed_text_path).read_text(encoding="utf-8", errors="ignore") + + print("[INFO] 正在切分知识文本...") + splitter = RecursiveCharacterTextSplitter(chunk_size=800, chunk_overlap=150) + chunks = splitter.split_text(all_text) + print(f"[INFO] 已切分为 {len(chunks)} 段。") + + print("[INFO] 正在生成嵌入向量并构建数据库...") + + + docs = [Document( + page_content=c, + metadata={"source": "mineru_all_knowledge"} + ) for c in chunks] + + self.vectorstore = FAISS.from_documents(docs, self.embedding_model) + self.vectorstore.save_local(str(self.db_path)) + + + # 保存 meta 信息 + meta = { + "fingerprint": fingerprint, + "built_at": time.strftime("%Y-%m-%d %H:%M:%S"), + "num_chunks": len(chunks), + "mineru_text": str(parsed_text_path), + } + meta_path.write_text(json.dumps(meta, ensure_ascii=False, indent=2), encoding="utf-8") + + print(f"[INFO] 知识库向量数据库构建完成,共 {len(chunks)} 段。") + return self.vectorstore + + def retrieve_context(self, query: str, top_k: int = 4) -> str: + """ + 从知识库中检索与 query 最相关的上下文。 + """ + if self.vectorstore is None: + self.build_or_load_db() + + docs = self.vectorstore.similarity_search(query, k=top_k) + context = "\n\n".join([d.page_content for d in docs]) + print(f"[INFO] 已召回 {len(docs)} 条相关知识。") + return context diff --git a/backend/planner/planning_agent/utils/io_utils.py b/backend/planner/planning_agent/utils/io_utils.py new file mode 100644 index 0000000..42ce6a0 --- /dev/null +++ b/backend/planner/planning_agent/utils/io_utils.py @@ -0,0 +1,14 @@ +from pathlib import Path +import json + +def read_text(path: str) -> str: + p = Path(path) + if not p.exists(): + raise FileNotFoundError(path) + return p.read_text(encoding="utf-8") + +def write_json(path: str, data: dict): + p = Path(path) + p.parent.mkdir(parents=True, exist_ok=True) + with p.open("w", encoding="utf-8") as f: + json.dump(data, f, ensure_ascii=False, indent=2) diff --git a/backend/planner/requirements/原镜频测试用例参考.docx b/backend/planner/requirements/原镜频测试用例参考.docx new file mode 100644 index 0000000..99acb54 Binary files /dev/null and b/backend/planner/requirements/原镜频测试用例参考.docx differ diff --git a/backend/planner/vector_db/index.faiss b/backend/planner/vector_db/index.faiss new file mode 100644 index 0000000..5ee343a Binary files /dev/null and b/backend/planner/vector_db/index.faiss differ diff --git a/backend/planner/vector_db/index.pkl b/backend/planner/vector_db/index.pkl new file mode 100644 index 0000000..31147fc Binary files /dev/null and b/backend/planner/vector_db/index.pkl differ diff --git a/backend/planner/vector_db/meta.json b/backend/planner/vector_db/meta.json new file mode 100644 index 0000000..39681a3 --- /dev/null +++ b/backend/planner/vector_db/meta.json @@ -0,0 +1,6 @@ +{ + "fingerprint": "-5191020719677835748", + "built_at": "2026-02-05 14:50:57", + "num_chunks": 13, + "mineru_text": "planner\\mineru_result\\all_knowledge.txt" +} \ No newline at end of file diff --git a/backend/requirements.txt b/backend/requirements.txt new file mode 100644 index 0000000..c2c0030 --- /dev/null +++ b/backend/requirements.txt @@ -0,0 +1,21 @@ +# FastAPI Backend for Flexible Test Platform +fastapi==0.115.0 +uvicorn[standard]==0.30.0 +sqlalchemy[asyncio]==2.0.31 +asyncpg==0.29.0 +pydantic==2.8.2 +pydantic-settings==2.4.0 +python-dotenv==1.0.1 +httpx==0.27.0 +PyYAML==6.0.1 +# Qwen/Tongyi API +dashscope==1.20.0 +# For local model support +openai==1.35.0 +aiohttp==3.9.5 +requests==2.32.3 +python-multipart==0.0.9 +langchain_community +langchain_openai +langchain_huggingface +sentence_transformers diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml new file mode 100644 index 0000000..e1599da --- /dev/null +++ b/docker/docker-compose.yml @@ -0,0 +1,35 @@ +services: + postgres: + image: postgres:16-alpine + container_name: flexible_test_db + environment: + POSTGRES_USER: postgres + POSTGRES_PASSWORD: postgres123 + POSTGRES_DB: flexible_test_platform + ports: + - "5432:5432" + volumes: + - postgres_data:/var/lib/postgresql/data + healthcheck: + test: ["CMD-SHELL", "pg_isready -U postgres"] + interval: 10s + timeout: 5s + retries: 5 + + pgadmin: + image: dpage/pgadmin4:latest + container_name: flexible_test_pgadmin + environment: + PGADMIN_DEFAULT_EMAIL: admin@admin.com + PGADMIN_DEFAULT_PASSWORD: admin123 + ports: + - "5050:80" + depends_on: + postgres: + condition: service_healthy + volumes: + - pgadmin_data:/var/lib/pgadmin + +volumes: + postgres_data: + pgadmin_data: diff --git a/frontend/package-lock.json b/frontend/package-lock.json new file mode 100644 index 0000000..6a5f142 --- /dev/null +++ b/frontend/package-lock.json @@ -0,0 +1,7239 @@ +{ + "name": "flexible-test-platform", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "flexible-test-platform", + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "axios": "^1.6.5", + "mammoth": "^1.11.0", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "react-markdown": "^9.0.1", + "rehype-raw": "^7.0.0", + "remark-gfm": "^4.0.1" + }, + "devDependencies": { + "@types/node": "^20.11.0", + "@types/react": "^18.2.48", + "@types/react-dom": "^18.2.18", + "@vitejs/plugin-react": "^4.2.1", + "concurrently": "^8.2.2", + "cross-env": "^7.0.3", + "electron": "^28.1.0", + "electron-builder": "^24.9.1", + "typescript": "^5.3.3", + "vite": "^5.0.11", + "wait-on": "^7.2.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.29.0", + "resolved": "https://registry.npmmirror.com/@babel/code-frame/-/code-frame-7.29.0.tgz", + "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.28.5", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.29.0", + "resolved": "https://registry.npmmirror.com/@babel/compat-data/-/compat-data-7.29.0.tgz", + "integrity": "sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.29.0", + "resolved": "https://registry.npmmirror.com/@babel/core/-/core-7.29.0.tgz", + "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-module-transforms": "^7.28.6", + "@babel/helpers": "^7.28.6", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/traverse": "^7.29.0", + "@babel/types": "^7.29.0", + "@jridgewell/remapping": "^2.3.5", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.29.0", + "resolved": "https://registry.npmmirror.com/@babel/generator/-/generator-7.29.0.tgz", + "integrity": "sha512-vSH118/wwM/pLR38g/Sgk05sNtro6TlTJKuiMXDaZqPUfjTFcudpCOt00IhOfj+1BFAX+UFAlzCU+6WXr3GLFQ==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.29.0", + "@babel/types": "^7.29.0", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.28.6", + "resolved": "https://registry.npmmirror.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz", + "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.28.6", + "@babel/helper-validator-option": "^7.27.1", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-globals": { + "version": "7.28.0", + "resolved": "https://registry.npmmirror.com/@babel/helper-globals/-/helper-globals-7.28.0.tgz", + "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.28.6", + "resolved": "https://registry.npmmirror.com/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz", + "integrity": "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==", + "dev": true, + "dependencies": { + "@babel/traverse": "^7.28.6", + "@babel/types": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.28.6", + "resolved": "https://registry.npmmirror.com/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz", + "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.28.6", + "@babel/helper-validator-identifier": "^7.28.5", + "@babel/traverse": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.28.6", + "resolved": "https://registry.npmmirror.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.28.6.tgz", + "integrity": "sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmmirror.com/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.28.5", + "resolved": "https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.27.1", + "resolved": "https://registry.npmmirror.com/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", + "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.28.6", + "resolved": "https://registry.npmmirror.com/@babel/helpers/-/helpers-7.28.6.tgz", + "integrity": "sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw==", + "dev": true, + "dependencies": { + "@babel/template": "^7.28.6", + "@babel/types": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.29.0", + "resolved": "https://registry.npmmirror.com/@babel/parser/-/parser-7.29.0.tgz", + "integrity": "sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==", + "dev": true, + "dependencies": { + "@babel/types": "^7.29.0" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-self": { + "version": "7.27.1", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.27.1.tgz", + "integrity": "sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-source": { + "version": "7.27.1", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.27.1.tgz", + "integrity": "sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.28.6", + "resolved": "https://registry.npmmirror.com/@babel/runtime/-/runtime-7.28.6.tgz", + "integrity": "sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.28.6", + "resolved": "https://registry.npmmirror.com/@babel/template/-/template-7.28.6.tgz", + "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.28.6", + "@babel/parser": "^7.28.6", + "@babel/types": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.29.0", + "resolved": "https://registry.npmmirror.com/@babel/traverse/-/traverse-7.29.0.tgz", + "integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/types": "^7.29.0", + "debug": "^4.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.29.0", + "resolved": "https://registry.npmmirror.com/@babel/types/-/types-7.29.0.tgz", + "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", + "dev": true, + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@develar/schema-utils": { + "version": "2.6.5", + "resolved": "https://registry.npmmirror.com/@develar/schema-utils/-/schema-utils-2.6.5.tgz", + "integrity": "sha512-0cp4PsWQ/9avqTVMCtZ+GirikIA36ikvjtHweU4/j8yLtgObI0+JUPhYFScgwlteveGB1rt3Cm8UhN04XayDig==", + "dev": true, + "dependencies": { + "ajv": "^6.12.0", + "ajv-keywords": "^3.4.1" + }, + "engines": { + "node": ">= 8.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/@electron/asar": { + "version": "3.4.1", + "resolved": "https://registry.npmmirror.com/@electron/asar/-/asar-3.4.1.tgz", + "integrity": "sha512-i4/rNPRS84t0vSRa2HorerGRXWyF4vThfHesw0dmcWHp+cspK743UanA0suA5Q5y8kzY2y6YKrvbIUn69BCAiA==", + "dev": true, + "dependencies": { + "commander": "^5.0.0", + "glob": "^7.1.6", + "minimatch": "^3.0.4" + }, + "bin": { + "asar": "bin/asar.js" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/@electron/asar/node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@electron/asar/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@electron/get": { + "version": "2.0.3", + "resolved": "https://registry.npmmirror.com/@electron/get/-/get-2.0.3.tgz", + "integrity": "sha512-Qkzpg2s9GnVV2I2BjRksUi43U5e6+zaQMcjoJy0C+C5oxaKl+fmckGDQFtRpZpZV0NQekuZZ+tGz7EA9TVnQtQ==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "env-paths": "^2.2.0", + "fs-extra": "^8.1.0", + "got": "^11.8.5", + "progress": "^2.0.3", + "semver": "^6.2.0", + "sumchecker": "^3.0.1" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "global-agent": "^3.0.0" + } + }, + "node_modules/@electron/notarize": { + "version": "2.2.1", + "resolved": "https://registry.npmmirror.com/@electron/notarize/-/notarize-2.2.1.tgz", + "integrity": "sha512-aL+bFMIkpR0cmmj5Zgy0LMKEpgy43/hw5zadEArgmAMWWlKc5buwFvFT9G/o/YJkvXAJm5q3iuTuLaiaXW39sg==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "fs-extra": "^9.0.1", + "promise-retry": "^2.0.1" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@electron/notarize/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmmirror.com/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@electron/notarize/node_modules/jsonfile": { + "version": "6.2.0", + "resolved": "https://registry.npmmirror.com/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@electron/notarize/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@electron/osx-sign": { + "version": "1.0.5", + "resolved": "https://registry.npmmirror.com/@electron/osx-sign/-/osx-sign-1.0.5.tgz", + "integrity": "sha512-k9ZzUQtamSoweGQDV2jILiRIHUu7lYlJ3c6IEmjv1hC17rclE+eb9U+f6UFlOOETo0JzY1HNlXy4YOlCvl+Lww==", + "dev": true, + "dependencies": { + "compare-version": "^0.1.2", + "debug": "^4.3.4", + "fs-extra": "^10.0.0", + "isbinaryfile": "^4.0.8", + "minimist": "^1.2.6", + "plist": "^3.0.5" + }, + "bin": { + "electron-osx-flat": "bin/electron-osx-flat.js", + "electron-osx-sign": "bin/electron-osx-sign.js" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@electron/osx-sign/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmmirror.com/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@electron/osx-sign/node_modules/isbinaryfile": { + "version": "4.0.10", + "resolved": "https://registry.npmmirror.com/isbinaryfile/-/isbinaryfile-4.0.10.tgz", + "integrity": "sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==", + "dev": true, + "engines": { + "node": ">= 8.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/gjtorikian/" + } + }, + "node_modules/@electron/osx-sign/node_modules/jsonfile": { + "version": "6.2.0", + "resolved": "https://registry.npmmirror.com/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@electron/osx-sign/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@electron/universal": { + "version": "1.5.1", + "resolved": "https://registry.npmmirror.com/@electron/universal/-/universal-1.5.1.tgz", + "integrity": "sha512-kbgXxyEauPJiQQUNG2VgUeyfQNFk6hBF11ISN2PNI6agUgPl55pv4eQmaqHzTAzchBvqZ2tQuRVaPStGf0mxGw==", + "dev": true, + "dependencies": { + "@electron/asar": "^3.2.1", + "@malept/cross-spawn-promise": "^1.1.0", + "debug": "^4.3.1", + "dir-compare": "^3.0.0", + "fs-extra": "^9.0.1", + "minimatch": "^3.0.4", + "plist": "^3.0.4" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/@electron/universal/node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@electron/universal/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmmirror.com/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@electron/universal/node_modules/jsonfile": { + "version": "6.2.0", + "resolved": "https://registry.npmmirror.com/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@electron/universal/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@electron/universal/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", + "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.21.5.tgz", + "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", + "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/android-x64/-/android-x64-0.21.5.tgz", + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", + "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", + "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", + "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", + "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", + "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", + "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", + "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", + "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", + "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", + "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", + "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", + "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", + "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", + "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", + "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", + "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", + "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@hapi/hoek": { + "version": "9.3.0", + "resolved": "https://registry.npmmirror.com/@hapi/hoek/-/hoek-9.3.0.tgz", + "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==", + "dev": true + }, + "node_modules/@hapi/topo": { + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/@hapi/topo/-/topo-5.1.0.tgz", + "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", + "dev": true, + "dependencies": { + "@hapi/hoek": "^9.0.0" + } + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmmirror.com/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmmirror.com/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.2", + "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-7.1.2.tgz", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmmirror.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "dev": true, + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmmirror.com/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmmirror.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmmirror.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@malept/cross-spawn-promise": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/@malept/cross-spawn-promise/-/cross-spawn-promise-1.1.1.tgz", + "integrity": "sha512-RTBGWL5FWQcg9orDOCcp4LvItNzUPcyEU9bwaeJX0rJ1IQxzucC48Y0/sQLp/g6t99IQgAlGIaesJS+gTn7tVQ==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/malept" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/subscription/pkg/npm-.malept-cross-spawn-promise?utm_medium=referral&utm_source=npm_fund" + } + ], + "dependencies": { + "cross-spawn": "^7.0.1" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/@malept/flatpak-bundler": { + "version": "0.4.0", + "resolved": "https://registry.npmmirror.com/@malept/flatpak-bundler/-/flatpak-bundler-0.4.0.tgz", + "integrity": "sha512-9QOtNffcOF/c1seMCDnjckb3R9WHcG34tky+FHpNKKCW0wc/scYLwMtO+ptyGUfMW0/b/n4qRiALlaFHc9Oj7Q==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "fs-extra": "^9.0.0", + "lodash": "^4.17.15", + "tmp-promise": "^3.0.2" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@malept/flatpak-bundler/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmmirror.com/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@malept/flatpak-bundler/node_modules/jsonfile": { + "version": "6.2.0", + "resolved": "https://registry.npmmirror.com/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@malept/flatpak-bundler/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmmirror.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.0-beta.27", + "resolved": "https://registry.npmmirror.com/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.27.tgz", + "integrity": "sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA==", + "dev": true + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.57.1", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.57.1.tgz", + "integrity": "sha512-A6ehUVSiSaaliTxai040ZpZ2zTevHYbvu/lDoeAteHI8QnaosIzm4qwtezfRg1jOYaUmnzLX1AOD6Z+UJjtifg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.57.1", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.57.1.tgz", + "integrity": "sha512-dQaAddCY9YgkFHZcFNS/606Exo8vcLHwArFZ7vxXq4rigo2bb494/xKMMwRRQW6ug7Js6yXmBZhSBRuBvCCQ3w==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.57.1", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.57.1.tgz", + "integrity": "sha512-crNPrwJOrRxagUYeMn/DZwqN88SDmwaJ8Cvi/TN1HnWBU7GwknckyosC2gd0IqYRsHDEnXf328o9/HC6OkPgOg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.57.1", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.57.1.tgz", + "integrity": "sha512-Ji8g8ChVbKrhFtig5QBV7iMaJrGtpHelkB3lsaKzadFBe58gmjfGXAOfI5FV0lYMH8wiqsxKQ1C9B0YTRXVy4w==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.57.1", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.57.1.tgz", + "integrity": "sha512-R+/WwhsjmwodAcz65guCGFRkMb4gKWTcIeLy60JJQbXrJ97BOXHxnkPFrP+YwFlaS0m+uWJTstrUA9o+UchFug==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.57.1", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.57.1.tgz", + "integrity": "sha512-IEQTCHeiTOnAUC3IDQdzRAGj3jOAYNr9kBguI7MQAAZK3caezRrg0GxAb6Hchg4lxdZEI5Oq3iov/w/hnFWY9Q==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.57.1", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.57.1.tgz", + "integrity": "sha512-F8sWbhZ7tyuEfsmOxwc2giKDQzN3+kuBLPwwZGyVkLlKGdV1nvnNwYD0fKQ8+XS6hp9nY7B+ZeK01EBUE7aHaw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.57.1", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.57.1.tgz", + "integrity": "sha512-rGfNUfn0GIeXtBP1wL5MnzSj98+PZe/AXaGBCRmT0ts80lU5CATYGxXukeTX39XBKsxzFpEeK+Mrp9faXOlmrw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.57.1", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.57.1.tgz", + "integrity": "sha512-MMtej3YHWeg/0klK2Qodf3yrNzz6CGjo2UntLvk2RSPlhzgLvYEB3frRvbEF2wRKh1Z2fDIg9KRPe1fawv7C+g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.57.1", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.57.1.tgz", + "integrity": "sha512-1a/qhaaOXhqXGpMFMET9VqwZakkljWHLmZOX48R0I/YLbhdxr1m4gtG1Hq7++VhVUmf+L3sTAf9op4JlhQ5u1Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.57.1", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.57.1.tgz", + "integrity": "sha512-QWO6RQTZ/cqYtJMtxhkRkidoNGXc7ERPbZN7dVW5SdURuLeVU7lwKMpo18XdcmpWYd0qsP1bwKPf7DNSUinhvA==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-musl": { + "version": "4.57.1", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.57.1.tgz", + "integrity": "sha512-xpObYIf+8gprgWaPP32xiN5RVTi/s5FCR+XMXSKmhfoJjrpRAjCuuqQXyxUa/eJTdAE6eJ+KDKaoEqjZQxh3Gw==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.57.1", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.57.1.tgz", + "integrity": "sha512-4BrCgrpZo4hvzMDKRqEaW1zeecScDCR+2nZ86ATLhAoJ5FQ+lbHVD3ttKe74/c7tNT9c6F2viwB3ufwp01Oh2w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-musl": { + "version": "4.57.1", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.57.1.tgz", + "integrity": "sha512-NOlUuzesGauESAyEYFSe3QTUguL+lvrN1HtwEEsU2rOwdUDeTMJdO5dUYl/2hKf9jWydJrO9OL/XSSf65R5+Xw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.57.1", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.57.1.tgz", + "integrity": "sha512-ptA88htVp0AwUUqhVghwDIKlvJMD/fmL/wrQj99PRHFRAG6Z5nbWoWG4o81Nt9FT+IuqUQi+L31ZKAFeJ5Is+A==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.57.1", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.57.1.tgz", + "integrity": "sha512-S51t7aMMTNdmAMPpBg7OOsTdn4tySRQvklmL3RpDRyknk87+Sp3xaumlatU+ppQ+5raY7sSTcC2beGgvhENfuw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.57.1", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.57.1.tgz", + "integrity": "sha512-Bl00OFnVFkL82FHbEqy3k5CUCKH6OEJL54KCyx2oqsmZnFTR8IoNqBF+mjQVcRCT5sB6yOvK8A37LNm/kPJiZg==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.57.1", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.57.1.tgz", + "integrity": "sha512-ABca4ceT4N+Tv/GtotnWAeXZUZuM/9AQyCyKYyKnpk4yoA7QIAuBt6Hkgpw8kActYlew2mvckXkvx0FfoInnLg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.57.1", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.57.1.tgz", + "integrity": "sha512-HFps0JeGtuOR2convgRRkHCekD7j+gdAuXM+/i6kGzQtFhlCtQkpwtNzkNj6QhCDp7DRJ7+qC/1Vg2jt5iSOFw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openbsd-x64": { + "version": "4.57.1", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.57.1.tgz", + "integrity": "sha512-H+hXEv9gdVQuDTgnqD+SQffoWoc0Of59AStSzTEj/feWTBAnSfSD3+Dql1ZruJQxmykT/JVY0dE8Ka7z0DH1hw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.57.1", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.57.1.tgz", + "integrity": "sha512-4wYoDpNg6o/oPximyc/NG+mYUejZrCU2q+2w6YZqrAs2UcNUChIZXjtafAiiZSUc7On8v5NyNj34Kzj/Ltk6dQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.57.1", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.57.1.tgz", + "integrity": "sha512-O54mtsV/6LW3P8qdTcamQmuC990HDfR71lo44oZMZlXU4tzLrbvTii87Ni9opq60ds0YzuAlEr/GNwuNluZyMQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.57.1", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.57.1.tgz", + "integrity": "sha512-P3dLS+IerxCT/7D2q2FYcRdWRl22dNbrbBEtxdWhXrfIMPP9lQhb5h4Du04mdl5Woq05jVCDPCMF7Ub0NAjIew==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.57.1", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.57.1.tgz", + "integrity": "sha512-VMBH2eOOaKGtIJYleXsi2B8CPVADrh+TyNxJ4mWPnKfLB/DBUmzW+5m1xUrcwWoMfSLagIRpjUFeW5CO5hyciQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.57.1", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.57.1.tgz", + "integrity": "sha512-mxRFDdHIWRxg3UfIIAwCm6NzvxG0jDX/wBN6KsQFTvKFqqg9vTrWUE68qEjHt19A5wwx5X5aUi2zuZT7YR0jrA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@sideway/address": { + "version": "4.1.5", + "resolved": "https://registry.npmmirror.com/@sideway/address/-/address-4.1.5.tgz", + "integrity": "sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==", + "dev": true, + "dependencies": { + "@hapi/hoek": "^9.0.0" + } + }, + "node_modules/@sideway/formula": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/@sideway/formula/-/formula-3.0.1.tgz", + "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==", + "dev": true + }, + "node_modules/@sideway/pinpoint": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", + "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==", + "dev": true + }, + "node_modules/@sindresorhus/is": { + "version": "4.6.0", + "resolved": "https://registry.npmmirror.com/@sindresorhus/is/-/is-4.6.0.tgz", + "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/is?sponsor=1" + } + }, + "node_modules/@szmarczak/http-timer": { + "version": "4.0.6", + "resolved": "https://registry.npmmirror.com/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", + "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", + "dev": true, + "dependencies": { + "defer-to-connect": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmmirror.com/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.27.0", + "resolved": "https://registry.npmmirror.com/@types/babel__generator/-/babel__generator-7.27.0.tgz", + "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmmirror.com/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.28.0", + "resolved": "https://registry.npmmirror.com/@types/babel__traverse/-/babel__traverse-7.28.0.tgz", + "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==", + "dev": true, + "dependencies": { + "@babel/types": "^7.28.2" + } + }, + "node_modules/@types/cacheable-request": { + "version": "6.0.3", + "resolved": "https://registry.npmmirror.com/@types/cacheable-request/-/cacheable-request-6.0.3.tgz", + "integrity": "sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==", + "dev": true, + "dependencies": { + "@types/http-cache-semantics": "*", + "@types/keyv": "^3.1.4", + "@types/node": "*", + "@types/responselike": "^1.0.0" + } + }, + "node_modules/@types/debug": { + "version": "4.1.12", + "resolved": "https://registry.npmmirror.com/@types/debug/-/debug-4.1.12.tgz", + "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", + "dependencies": { + "@types/ms": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmmirror.com/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==" + }, + "node_modules/@types/estree-jsx": { + "version": "1.0.5", + "resolved": "https://registry.npmmirror.com/@types/estree-jsx/-/estree-jsx-1.0.5.tgz", + "integrity": "sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==", + "dependencies": { + "@types/estree": "*" + } + }, + "node_modules/@types/fs-extra": { + "version": "9.0.13", + "resolved": "https://registry.npmmirror.com/@types/fs-extra/-/fs-extra-9.0.13.tgz", + "integrity": "sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/hast": { + "version": "3.0.4", + "resolved": "https://registry.npmmirror.com/@types/hast/-/hast-3.0.4.tgz", + "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/http-cache-semantics": { + "version": "4.2.0", + "resolved": "https://registry.npmmirror.com/@types/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", + "integrity": "sha512-L3LgimLHXtGkWikKnsPg0/VFx9OGZaC+eN1u4r+OB1XRqH3meBIAVC2zr1WdMH+RHmnRkqliQAOHNJ/E0j/e0Q==", + "dev": true + }, + "node_modules/@types/keyv": { + "version": "3.1.4", + "resolved": "https://registry.npmmirror.com/@types/keyv/-/keyv-3.1.4.tgz", + "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/mdast": { + "version": "4.0.4", + "resolved": "https://registry.npmmirror.com/@types/mdast/-/mdast-4.0.4.tgz", + "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/ms": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/@types/ms/-/ms-2.1.0.tgz", + "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==" + }, + "node_modules/@types/node": { + "version": "20.19.30", + "resolved": "https://registry.npmmirror.com/@types/node/-/node-20.19.30.tgz", + "integrity": "sha512-WJtwWJu7UdlvzEAUm484QNg5eAoq5QR08KDNx7g45Usrs2NtOPiX8ugDqmKdXkyL03rBqU5dYNYVQetEpBHq2g==", + "dev": true, + "dependencies": { + "undici-types": "~6.21.0" + } + }, + "node_modules/@types/plist": { + "version": "3.0.5", + "resolved": "https://registry.npmmirror.com/@types/plist/-/plist-3.0.5.tgz", + "integrity": "sha512-E6OCaRmAe4WDmWNsL/9RMqdkkzDCY1etutkflWk4c+AcjDU07Pcz1fQwTX0TQz+Pxqn9i4L1TU3UFpjnrcDgxA==", + "dev": true, + "optional": true, + "dependencies": { + "@types/node": "*", + "xmlbuilder": ">=11.0.1" + } + }, + "node_modules/@types/prop-types": { + "version": "15.7.15", + "resolved": "https://registry.npmmirror.com/@types/prop-types/-/prop-types-15.7.15.tgz", + "integrity": "sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==" + }, + "node_modules/@types/react": { + "version": "18.3.27", + "resolved": "https://registry.npmmirror.com/@types/react/-/react-18.3.27.tgz", + "integrity": "sha512-cisd7gxkzjBKU2GgdYrTdtQx1SORymWyaAFhaxQPK9bYO9ot3Y5OikQRvY0VYQtvwjeQnizCINJAenh/V7MK2w==", + "dependencies": { + "@types/prop-types": "*", + "csstype": "^3.2.2" + } + }, + "node_modules/@types/react-dom": { + "version": "18.3.7", + "resolved": "https://registry.npmmirror.com/@types/react-dom/-/react-dom-18.3.7.tgz", + "integrity": "sha512-MEe3UeoENYVFXzoXEWsvcpg6ZvlrFNlOQ7EOsvhI3CfAXwzPfO8Qwuxd40nepsYKqyyVQnTdEfv68q91yLcKrQ==", + "dev": true, + "peerDependencies": { + "@types/react": "^18.0.0" + } + }, + "node_modules/@types/responselike": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/@types/responselike/-/responselike-1.0.3.tgz", + "integrity": "sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/unist": { + "version": "3.0.3", + "resolved": "https://registry.npmmirror.com/@types/unist/-/unist-3.0.3.tgz", + "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==" + }, + "node_modules/@types/verror": { + "version": "1.10.11", + "resolved": "https://registry.npmmirror.com/@types/verror/-/verror-1.10.11.tgz", + "integrity": "sha512-RlDm9K7+o5stv0Co8i8ZRGxDbrTxhJtgjqjFyVh/tXQyl/rYtTKlnTvZ88oSTeYREWurwx20Js4kTuKCsFkUtg==", + "dev": true, + "optional": true + }, + "node_modules/@types/yauzl": { + "version": "2.10.3", + "resolved": "https://registry.npmmirror.com/@types/yauzl/-/yauzl-2.10.3.tgz", + "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==", + "dev": true, + "optional": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@ungap/structured-clone": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", + "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==" + }, + "node_modules/@vitejs/plugin-react": { + "version": "4.7.0", + "resolved": "https://registry.npmmirror.com/@vitejs/plugin-react/-/plugin-react-4.7.0.tgz", + "integrity": "sha512-gUu9hwfWvvEDBBmgtAowQCojwZmJ5mcLn3aufeCsitijs3+f2NsrPtlAWIR6OPiqljl96GVCUbLe0HyqIpVaoA==", + "dev": true, + "dependencies": { + "@babel/core": "^7.28.0", + "@babel/plugin-transform-react-jsx-self": "^7.27.1", + "@babel/plugin-transform-react-jsx-source": "^7.27.1", + "@rolldown/pluginutils": "1.0.0-beta.27", + "@types/babel__core": "^7.20.5", + "react-refresh": "^0.17.0" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0" + } + }, + "node_modules/@xmldom/xmldom": { + "version": "0.8.11", + "resolved": "https://registry.npmmirror.com/@xmldom/xmldom/-/xmldom-0.8.11.tgz", + "integrity": "sha512-cQzWCtO6C8TQiYl1ruKNn2U6Ao4o4WBBcbL61yJl84x+j5sOWWFU9X7DpND8XZG3daDppSsigMdfAIl2upQBRw==", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/7zip-bin": { + "version": "5.2.0", + "resolved": "https://registry.npmmirror.com/7zip-bin/-/7zip-bin-5.2.0.tgz", + "integrity": "sha512-ukTPVhqG4jNzMro2qA9HSCSSVJN3aN7tlb+hfqYCt3ER0yWroeA2VR38MNrOHLQ/cVj+DaIMad0kFCtWWowh/A==", + "dev": true + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmmirror.com/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmmirror.com/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmmirror.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/app-builder-bin": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/app-builder-bin/-/app-builder-bin-4.0.0.tgz", + "integrity": "sha512-xwdG0FJPQMe0M0UA4Tz0zEB8rBJTRA5a476ZawAqiBkMv16GRK5xpXThOjMaEOFnZ6zabejjG4J3da0SXG63KA==", + "dev": true + }, + "node_modules/app-builder-lib": { + "version": "24.13.3", + "resolved": "https://registry.npmmirror.com/app-builder-lib/-/app-builder-lib-24.13.3.tgz", + "integrity": "sha512-FAzX6IBit2POXYGnTCT8YHFO/lr5AapAII6zzhQO3Rw4cEDOgK+t1xhLc5tNcKlicTHlo9zxIwnYCX9X2DLkig==", + "dev": true, + "dependencies": { + "@develar/schema-utils": "~2.6.5", + "@electron/notarize": "2.2.1", + "@electron/osx-sign": "1.0.5", + "@electron/universal": "1.5.1", + "@malept/flatpak-bundler": "^0.4.0", + "@types/fs-extra": "9.0.13", + "async-exit-hook": "^2.0.1", + "bluebird-lst": "^1.0.9", + "builder-util": "24.13.1", + "builder-util-runtime": "9.2.4", + "chromium-pickle-js": "^0.2.0", + "debug": "^4.3.4", + "ejs": "^3.1.8", + "electron-publish": "24.13.1", + "form-data": "^4.0.0", + "fs-extra": "^10.1.0", + "hosted-git-info": "^4.1.0", + "is-ci": "^3.0.0", + "isbinaryfile": "^5.0.0", + "js-yaml": "^4.1.0", + "lazy-val": "^1.0.5", + "minimatch": "^5.1.1", + "read-config-file": "6.3.2", + "sanitize-filename": "^1.6.3", + "semver": "^7.3.8", + "tar": "^6.1.12", + "temp-file": "^3.4.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "dmg-builder": "24.13.3", + "electron-builder-squirrel-windows": "24.13.3" + } + }, + "node_modules/app-builder-lib/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmmirror.com/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/app-builder-lib/node_modules/jsonfile": { + "version": "6.2.0", + "resolved": "https://registry.npmmirror.com/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/app-builder-lib/node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmmirror.com/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/app-builder-lib/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/archiver": { + "version": "5.3.2", + "resolved": "https://registry.npmmirror.com/archiver/-/archiver-5.3.2.tgz", + "integrity": "sha512-+25nxyyznAXF7Nef3y0EbBeqmGZgeN/BxHX29Rs39djAfaFalmQ89SE6CWyDCHzGL0yt/ycBtNOmGTW0FyGWNw==", + "dev": true, + "peer": true, + "dependencies": { + "archiver-utils": "^2.1.0", + "async": "^3.2.4", + "buffer-crc32": "^0.2.1", + "readable-stream": "^3.6.0", + "readdir-glob": "^1.1.2", + "tar-stream": "^2.2.0", + "zip-stream": "^4.1.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/archiver-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/archiver-utils/-/archiver-utils-2.1.0.tgz", + "integrity": "sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==", + "dev": true, + "peer": true, + "dependencies": { + "glob": "^7.1.4", + "graceful-fs": "^4.2.0", + "lazystream": "^1.0.0", + "lodash.defaults": "^4.2.0", + "lodash.difference": "^4.5.0", + "lodash.flatten": "^4.4.0", + "lodash.isplainobject": "^4.0.6", + "lodash.union": "^4.6.0", + "normalize-path": "^3.0.0", + "readable-stream": "^2.0.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/archiver-utils/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "peer": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/archiver-utils/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true, + "peer": true + }, + "node_modules/archiver-utils/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "peer": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true, + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/async": { + "version": "3.2.6", + "resolved": "https://registry.npmmirror.com/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", + "dev": true + }, + "node_modules/async-exit-hook": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/async-exit-hook/-/async-exit-hook-2.0.1.tgz", + "integrity": "sha512-NW2cX8m1Q7KPA7a5M2ULQeZ2wR5qI5PAbw5L0UOMxdioVk9PMZ0h1TmyZEkPYrCvYjDlFICusOu1dlEKAAeXBw==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmmirror.com/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/axios": { + "version": "1.13.4", + "resolved": "https://registry.npmmirror.com/axios/-/axios-1.13.4.tgz", + "integrity": "sha512-1wVkUaAO6WyaYtCkcYCOx12ZgpGf9Zif+qXa4n+oYzK558YryKqiL6UWwd5DqiH3VRW0GYhTZQ/vlgJrCoNQlg==", + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.4", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/bail": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/bail/-/bail-2.0.2.tgz", + "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmmirror.com/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/baseline-browser-mapping": { + "version": "2.9.19", + "resolved": "https://registry.npmmirror.com/baseline-browser-mapping/-/baseline-browser-mapping-2.9.19.tgz", + "integrity": "sha512-ipDqC8FrAl/76p2SSWKSI+H9tFwm7vYqXQrItCuiVPt26Km0jS+NzSsBWAaBusvSbQcfJG+JitdMm+wZAgTYqg==", + "dev": true, + "bin": { + "baseline-browser-mapping": "dist/cli.js" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, + "peer": true, + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmmirror.com/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true + }, + "node_modules/bluebird-lst": { + "version": "1.0.9", + "resolved": "https://registry.npmmirror.com/bluebird-lst/-/bluebird-lst-1.0.9.tgz", + "integrity": "sha512-7B1Rtx82hjnSD4PGLAjVWeYH3tHAcVUmChh85a3lltKQm6FresXh9ErQo6oAv6CqxttczC3/kEg8SY5NluPuUw==", + "dev": true, + "dependencies": { + "bluebird": "^3.5.5" + } + }, + "node_modules/boolean": { + "version": "3.2.0", + "resolved": "https://registry.npmmirror.com/boolean/-/boolean-3.2.0.tgz", + "integrity": "sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "dev": true, + "optional": true + }, + "node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/browserslist": { + "version": "4.28.1", + "resolved": "https://registry.npmmirror.com/browserslist/-/browserslist-4.28.1.tgz", + "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "baseline-browser-mapping": "^2.9.0", + "caniuse-lite": "^1.0.30001759", + "electron-to-chromium": "^1.5.263", + "node-releases": "^2.0.27", + "update-browserslist-db": "^1.2.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmmirror.com/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmmirror.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/buffer-equal": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/buffer-equal/-/buffer-equal-1.0.1.tgz", + "integrity": "sha512-QoV3ptgEaQpvVwbXdSO39iqPQTCxSF7A5U99AxbHYqUdCizL/lH2Z0A2y6nbZucxMEOtNyZfG2s6gsVugGpKkg==", + "dev": true, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "node_modules/builder-util": { + "version": "24.13.1", + "resolved": "https://registry.npmmirror.com/builder-util/-/builder-util-24.13.1.tgz", + "integrity": "sha512-NhbCSIntruNDTOVI9fdXz0dihaqX2YuE1D6zZMrwiErzH4ELZHE6mdiB40wEgZNprDia+FghRFgKoAqMZRRjSA==", + "dev": true, + "dependencies": { + "@types/debug": "^4.1.6", + "7zip-bin": "~5.2.0", + "app-builder-bin": "4.0.0", + "bluebird-lst": "^1.0.9", + "builder-util-runtime": "9.2.4", + "chalk": "^4.1.2", + "cross-spawn": "^7.0.3", + "debug": "^4.3.4", + "fs-extra": "^10.1.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.1", + "is-ci": "^3.0.0", + "js-yaml": "^4.1.0", + "source-map-support": "^0.5.19", + "stat-mode": "^1.0.0", + "temp-file": "^3.4.0" + } + }, + "node_modules/builder-util-runtime": { + "version": "9.2.4", + "resolved": "https://registry.npmmirror.com/builder-util-runtime/-/builder-util-runtime-9.2.4.tgz", + "integrity": "sha512-upp+biKpN/XZMLim7aguUyW8s0FUpDvOtK6sbanMFDAMBzpHDqdhgVYm6zc9HJ6nWo7u2Lxk60i2M6Jd3aiNrA==", + "dev": true, + "dependencies": { + "debug": "^4.3.4", + "sax": "^1.2.4" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/builder-util/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmmirror.com/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/builder-util/node_modules/jsonfile": { + "version": "6.2.0", + "resolved": "https://registry.npmmirror.com/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/builder-util/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/cacheable-lookup": { + "version": "5.0.4", + "resolved": "https://registry.npmmirror.com/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", + "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", + "dev": true, + "engines": { + "node": ">=10.6.0" + } + }, + "node_modules/cacheable-request": { + "version": "7.0.4", + "resolved": "https://registry.npmmirror.com/cacheable-request/-/cacheable-request-7.0.4.tgz", + "integrity": "sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==", + "dev": true, + "dependencies": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^4.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^6.0.1", + "responselike": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001766", + "resolved": "https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001766.tgz", + "integrity": "sha512-4C0lfJ0/YPjJQHagaE9x2Elb69CIqEPZeG0anQt9SIvIoOH4a4uaRl73IavyO+0qZh6MDLH//DrXThEYKHkmYA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "node_modules/ccount": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/ccount/-/ccount-2.0.1.tgz", + "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chalk/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/character-entities": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/character-entities/-/character-entities-2.0.2.tgz", + "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-html4": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/character-entities-html4/-/character-entities-html4-2.1.0.tgz", + "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-legacy": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", + "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-reference-invalid": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz", + "integrity": "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/chromium-pickle-js": { + "version": "0.2.0", + "resolved": "https://registry.npmmirror.com/chromium-pickle-js/-/chromium-pickle-js-0.2.0.tgz", + "integrity": "sha512-1R5Fho+jBq0DDydt+/vHWj5KJNJCKdARKOCwZUen84I5BreWoLqRLANH1U87eJy1tiASPtMnGqJJq0ZsLoRPOw==", + "dev": true + }, + "node_modules/ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmmirror.com/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-truncate": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/cli-truncate/-/cli-truncate-2.1.0.tgz", + "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", + "dev": true, + "optional": true, + "dependencies": { + "slice-ansi": "^3.0.0", + "string-width": "^4.2.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmmirror.com/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/clone-response": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/clone-response/-/clone-response-1.0.3.tgz", + "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", + "dev": true, + "dependencies": { + "mimic-response": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmmirror.com/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/comma-separated-tokens": { + "version": "2.0.3", + "resolved": "https://registry.npmmirror.com/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", + "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/commander": { + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/commander/-/commander-5.1.0.tgz", + "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/compare-version": { + "version": "0.1.2", + "resolved": "https://registry.npmmirror.com/compare-version/-/compare-version-0.1.2.tgz", + "integrity": "sha512-pJDh5/4wrEnXX/VWRZvruAGHkzKdr46z11OlTPN+VrATlWWhSKewNCJ1futCO5C7eJB3nPMFZA1LeYtcFboZ2A==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/compress-commons": { + "version": "4.1.2", + "resolved": "https://registry.npmmirror.com/compress-commons/-/compress-commons-4.1.2.tgz", + "integrity": "sha512-D3uMHtGc/fcO1Gt1/L7i1e33VOvD4A9hfQLP+6ewd+BvG/gQ84Yh4oftEhAdjSMgBgwGL+jsppT7JYNpo6MHHg==", + "dev": true, + "peer": true, + "dependencies": { + "buffer-crc32": "^0.2.13", + "crc32-stream": "^4.0.2", + "normalize-path": "^3.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmmirror.com/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/concurrently": { + "version": "8.2.2", + "resolved": "https://registry.npmmirror.com/concurrently/-/concurrently-8.2.2.tgz", + "integrity": "sha512-1dP4gpXFhei8IOtlXRE/T/4H88ElHgTiUzh71YUmtjTEHMSRS2Z/fgOxHSxxusGHogsRfxNq1vyAwxSC+EVyDg==", + "dev": true, + "dependencies": { + "chalk": "^4.1.2", + "date-fns": "^2.30.0", + "lodash": "^4.17.21", + "rxjs": "^7.8.1", + "shell-quote": "^1.8.1", + "spawn-command": "0.0.2", + "supports-color": "^8.1.1", + "tree-kill": "^1.2.2", + "yargs": "^17.7.2" + }, + "bin": { + "conc": "dist/bin/concurrently.js", + "concurrently": "dist/bin/concurrently.js" + }, + "engines": { + "node": "^14.13.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/open-cli-tools/concurrently?sponsor=1" + } + }, + "node_modules/config-file-ts": { + "version": "0.2.6", + "resolved": "https://registry.npmmirror.com/config-file-ts/-/config-file-ts-0.2.6.tgz", + "integrity": "sha512-6boGVaglwblBgJqGyxm4+xCmEGcWgnWHSWHY5jad58awQhB6gftq0G8HbzU39YqCIYHMLAiL1yjwiZ36m/CL8w==", + "dev": true, + "dependencies": { + "glob": "^10.3.10", + "typescript": "^5.3.3" + } + }, + "node_modules/config-file-ts/node_modules/glob": { + "version": "10.5.0", + "resolved": "https://registry.npmmirror.com/glob/-/glob-10.5.0.tgz", + "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", + "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/config-file-ts/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/config-file-ts/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmmirror.com/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true + }, + "node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==" + }, + "node_modules/crc": { + "version": "3.8.0", + "resolved": "https://registry.npmmirror.com/crc/-/crc-3.8.0.tgz", + "integrity": "sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==", + "dev": true, + "optional": true, + "dependencies": { + "buffer": "^5.1.0" + } + }, + "node_modules/crc-32": { + "version": "1.2.2", + "resolved": "https://registry.npmmirror.com/crc-32/-/crc-32-1.2.2.tgz", + "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", + "dev": true, + "peer": true, + "bin": { + "crc32": "bin/crc32.njs" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/crc32-stream": { + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/crc32-stream/-/crc32-stream-4.0.3.tgz", + "integrity": "sha512-NT7w2JVU7DFroFdYkeq8cywxrgjPHWkdX1wjpRQXPX5Asews3tA+Ght6lddQO5Mkumffp3X7GEqku3epj2toIw==", + "dev": true, + "peer": true, + "dependencies": { + "crc-32": "^1.2.0", + "readable-stream": "^3.4.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/cross-env": { + "version": "7.0.3", + "resolved": "https://registry.npmmirror.com/cross-env/-/cross-env-7.0.3.tgz", + "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.1" + }, + "bin": { + "cross-env": "src/bin/cross-env.js", + "cross-env-shell": "src/bin/cross-env-shell.js" + }, + "engines": { + "node": ">=10.14", + "npm": ">=6", + "yarn": ">=1" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/csstype": { + "version": "3.2.3", + "resolved": "https://registry.npmmirror.com/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==" + }, + "node_modules/date-fns": { + "version": "2.30.0", + "resolved": "https://registry.npmmirror.com/date-fns/-/date-fns-2.30.0.tgz", + "integrity": "sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.21.0" + }, + "engines": { + "node": ">=0.11" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/date-fns" + } + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmmirror.com/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decode-named-character-reference": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/decode-named-character-reference/-/decode-named-character-reference-1.3.0.tgz", + "integrity": "sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q==", + "dependencies": { + "character-entities": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmmirror.com/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "dev": true, + "dependencies": { + "mimic-response": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/decompress-response/node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/defer-to-connect": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/defer-to-connect/-/defer-to-connect-2.0.1.tgz", + "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmmirror.com/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, + "optional": true, + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, + "optional": true, + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmmirror.com/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", + "dev": true, + "optional": true + }, + "node_modules/devlop": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/devlop/-/devlop-1.1.0.tgz", + "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", + "dependencies": { + "dequal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/dingbat-to-unicode": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dingbat-to-unicode/-/dingbat-to-unicode-1.0.1.tgz", + "integrity": "sha512-98l0sW87ZT58pU4i61wa2OHwxbiYSbuxsCBozaVnYX2iCnr3bLM3fIes1/ej7h1YdOKuKt/MLs706TVnALA65w==", + "license": "BSD-2-Clause" + }, + "node_modules/dir-compare": { + "version": "3.3.0", + "resolved": "https://registry.npmmirror.com/dir-compare/-/dir-compare-3.3.0.tgz", + "integrity": "sha512-J7/et3WlGUCxjdnD3HAAzQ6nsnc0WL6DD7WcwJb7c39iH1+AWfg+9OqzJNaI6PkBwBvm1mhZNL9iY/nRiZXlPg==", + "dev": true, + "dependencies": { + "buffer-equal": "^1.0.0", + "minimatch": "^3.0.4" + } + }, + "node_modules/dir-compare/node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/dir-compare/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/dmg-builder": { + "version": "24.13.3", + "resolved": "https://registry.npmmirror.com/dmg-builder/-/dmg-builder-24.13.3.tgz", + "integrity": "sha512-rcJUkMfnJpfCboZoOOPf4L29TRtEieHNOeAbYPWPxlaBw/Z1RKrRA86dOI9rwaI4tQSc/RD82zTNHprfUHXsoQ==", + "dev": true, + "dependencies": { + "app-builder-lib": "24.13.3", + "builder-util": "24.13.1", + "builder-util-runtime": "9.2.4", + "fs-extra": "^10.1.0", + "iconv-lite": "^0.6.2", + "js-yaml": "^4.1.0" + }, + "optionalDependencies": { + "dmg-license": "^1.0.11" + } + }, + "node_modules/dmg-builder/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmmirror.com/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/dmg-builder/node_modules/jsonfile": { + "version": "6.2.0", + "resolved": "https://registry.npmmirror.com/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/dmg-builder/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/dmg-license": { + "version": "1.0.11", + "resolved": "https://registry.npmmirror.com/dmg-license/-/dmg-license-1.0.11.tgz", + "integrity": "sha512-ZdzmqwKmECOWJpqefloC5OJy1+WZBBse5+MR88z9g9Zn4VY+WYUkAyojmhzJckH5YbbZGcYIuGAkY5/Ys5OM2Q==", + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "dependencies": { + "@types/plist": "^3.0.1", + "@types/verror": "^1.10.3", + "ajv": "^6.10.0", + "crc": "^3.8.0", + "iconv-corefoundation": "^1.1.7", + "plist": "^3.0.4", + "smart-buffer": "^4.0.2", + "verror": "^1.10.0" + }, + "bin": { + "dmg-license": "bin/dmg-license.js" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dotenv": { + "version": "9.0.2", + "resolved": "https://registry.npmmirror.com/dotenv/-/dotenv-9.0.2.tgz", + "integrity": "sha512-I9OvvrHp4pIARv4+x9iuewrWycX6CcZtoAu1XrzPxc5UygMJXJZYmBsynku8IkrJwgypE5DGNjDPmPRhDCptUg==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/dotenv-expand": { + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/dotenv-expand/-/dotenv-expand-5.1.0.tgz", + "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==", + "dev": true + }, + "node_modules/duck": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/duck/-/duck-0.1.12.tgz", + "integrity": "sha512-wkctla1O6VfP89gQ+J/yDesM0S7B7XLXjKGzXxMDVFg7uEn706niAtyYovKbyq1oT9YwDcly721/iUWoc8MVRg==", + "license": "BSD", + "dependencies": { + "underscore": "^1.13.1" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmmirror.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true + }, + "node_modules/ejs": { + "version": "3.1.10", + "resolved": "https://registry.npmmirror.com/ejs/-/ejs-3.1.10.tgz", + "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", + "dev": true, + "dependencies": { + "jake": "^10.8.5" + }, + "bin": { + "ejs": "bin/cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/electron": { + "version": "28.3.3", + "resolved": "https://registry.npmmirror.com/electron/-/electron-28.3.3.tgz", + "integrity": "sha512-ObKMLSPNhomtCOBAxFS8P2DW/4umkh72ouZUlUKzXGtYuPzgr1SYhskhFWgzAsPtUzhL2CzyV2sfbHcEW4CXqw==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "@electron/get": "^2.0.0", + "@types/node": "^18.11.18", + "extract-zip": "^2.0.1" + }, + "bin": { + "electron": "cli.js" + }, + "engines": { + "node": ">= 12.20.55" + } + }, + "node_modules/electron-builder": { + "version": "24.13.3", + "resolved": "https://registry.npmmirror.com/electron-builder/-/electron-builder-24.13.3.tgz", + "integrity": "sha512-yZSgVHft5dNVlo31qmJAe4BVKQfFdwpRw7sFp1iQglDRCDD6r22zfRJuZlhtB5gp9FHUxCMEoWGq10SkCnMAIg==", + "dev": true, + "dependencies": { + "app-builder-lib": "24.13.3", + "builder-util": "24.13.1", + "builder-util-runtime": "9.2.4", + "chalk": "^4.1.2", + "dmg-builder": "24.13.3", + "fs-extra": "^10.1.0", + "is-ci": "^3.0.0", + "lazy-val": "^1.0.5", + "read-config-file": "6.3.2", + "simple-update-notifier": "2.0.0", + "yargs": "^17.6.2" + }, + "bin": { + "electron-builder": "cli.js", + "install-app-deps": "install-app-deps.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/electron-builder-squirrel-windows": { + "version": "24.13.3", + "resolved": "https://registry.npmmirror.com/electron-builder-squirrel-windows/-/electron-builder-squirrel-windows-24.13.3.tgz", + "integrity": "sha512-oHkV0iogWfyK+ah9ZIvMDpei1m9ZRpdXcvde1wTpra2U8AFDNNpqJdnin5z+PM1GbQ5BoaKCWas2HSjtR0HwMg==", + "dev": true, + "peer": true, + "dependencies": { + "app-builder-lib": "24.13.3", + "archiver": "^5.3.1", + "builder-util": "24.13.1", + "fs-extra": "^10.1.0" + } + }, + "node_modules/electron-builder-squirrel-windows/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmmirror.com/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "peer": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/electron-builder-squirrel-windows/node_modules/jsonfile": { + "version": "6.2.0", + "resolved": "https://registry.npmmirror.com/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", + "dev": true, + "peer": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/electron-builder-squirrel-windows/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "peer": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/electron-builder/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmmirror.com/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/electron-builder/node_modules/jsonfile": { + "version": "6.2.0", + "resolved": "https://registry.npmmirror.com/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/electron-builder/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/electron-publish": { + "version": "24.13.1", + "resolved": "https://registry.npmmirror.com/electron-publish/-/electron-publish-24.13.1.tgz", + "integrity": "sha512-2ZgdEqJ8e9D17Hwp5LEq5mLQPjqU3lv/IALvgp+4W8VeNhryfGhYEQC/PgDPMrnWUp+l60Ou5SJLsu+k4mhQ8A==", + "dev": true, + "dependencies": { + "@types/fs-extra": "^9.0.11", + "builder-util": "24.13.1", + "builder-util-runtime": "9.2.4", + "chalk": "^4.1.2", + "fs-extra": "^10.1.0", + "lazy-val": "^1.0.5", + "mime": "^2.5.2" + } + }, + "node_modules/electron-publish/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmmirror.com/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/electron-publish/node_modules/jsonfile": { + "version": "6.2.0", + "resolved": "https://registry.npmmirror.com/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/electron-publish/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.5.283", + "resolved": "https://registry.npmmirror.com/electron-to-chromium/-/electron-to-chromium-1.5.283.tgz", + "integrity": "sha512-3vifjt1HgrGW/h76UEeny+adYApveS9dH2h3p57JYzBSXJIKUJAvtmIytDKjcSCt9xHfrNCFJ7gts6vkhuq++w==", + "dev": true + }, + "node_modules/electron/node_modules/@types/node": { + "version": "18.19.130", + "resolved": "https://registry.npmmirror.com/@types/node/-/node-18.19.130.tgz", + "integrity": "sha512-GRaXQx6jGfL8sKfaIDD6OupbIHBr9jv7Jnaml9tB7l4v068PAOXqfcujMMo5PhbIs6ggR1XODELqahT2R8v0fg==", + "dev": true, + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/electron/node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmmirror.com/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "dev": true + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/end-of-stream": { + "version": "1.4.5", + "resolved": "https://registry.npmmirror.com/end-of-stream/-/end-of-stream-1.4.5.tgz", + "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", + "dev": true, + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/entities": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", + "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmmirror.com/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/err-code": { + "version": "2.0.3", + "resolved": "https://registry.npmmirror.com/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", + "dev": true + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es6-error": { + "version": "4.1.1", + "resolved": "https://registry.npmmirror.com/es6-error/-/es6-error-4.1.1.tgz", + "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", + "dev": true, + "optional": true + }, + "node_modules/esbuild": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/esbuild/-/esbuild-0.21.5.tgz", + "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.21.5", + "@esbuild/android-arm": "0.21.5", + "@esbuild/android-arm64": "0.21.5", + "@esbuild/android-x64": "0.21.5", + "@esbuild/darwin-arm64": "0.21.5", + "@esbuild/darwin-x64": "0.21.5", + "@esbuild/freebsd-arm64": "0.21.5", + "@esbuild/freebsd-x64": "0.21.5", + "@esbuild/linux-arm": "0.21.5", + "@esbuild/linux-arm64": "0.21.5", + "@esbuild/linux-ia32": "0.21.5", + "@esbuild/linux-loong64": "0.21.5", + "@esbuild/linux-mips64el": "0.21.5", + "@esbuild/linux-ppc64": "0.21.5", + "@esbuild/linux-riscv64": "0.21.5", + "@esbuild/linux-s390x": "0.21.5", + "@esbuild/linux-x64": "0.21.5", + "@esbuild/netbsd-x64": "0.21.5", + "@esbuild/openbsd-x64": "0.21.5", + "@esbuild/sunos-x64": "0.21.5", + "@esbuild/win32-arm64": "0.21.5", + "@esbuild/win32-ia32": "0.21.5", + "@esbuild/win32-x64": "0.21.5" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmmirror.com/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "optional": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/estree-util-is-identifier-name": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/estree-util-is-identifier-name/-/estree-util-is-identifier-name-3.0.0.tgz", + "integrity": "sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmmirror.com/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "node_modules/extract-zip": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + }, + "bin": { + "extract-zip": "cli.js" + }, + "engines": { + "node": ">= 10.17.0" + }, + "optionalDependencies": { + "@types/yauzl": "^2.9.1" + } + }, + "node_modules/extsprintf": { + "version": "1.4.1", + "resolved": "https://registry.npmmirror.com/extsprintf/-/extsprintf-1.4.1.tgz", + "integrity": "sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA==", + "dev": true, + "engines": [ + "node >=0.6.0" + ], + "optional": true + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmmirror.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "dev": true, + "dependencies": { + "pend": "~1.2.0" + } + }, + "node_modules/filelist": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", + "dev": true, + "dependencies": { + "minimatch": "^5.0.1" + } + }, + "node_modules/follow-redirects": { + "version": "1.15.11", + "resolved": "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.15.11.tgz", + "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/foreground-child": { + "version": "3.3.1", + "resolved": "https://registry.npmmirror.com/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/form-data": { + "version": "4.0.5", + "resolved": "https://registry.npmmirror.com/form-data/-/form-data-4.0.5.tgz", + "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "dev": true, + "peer": true + }, + "node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmmirror.com/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/fs-minipass/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmmirror.com/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fs-minipass/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmmirror.com/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmmirror.com/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmmirror.com/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmmirror.com/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmmirror.com/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob/node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/global-agent": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/global-agent/-/global-agent-3.0.0.tgz", + "integrity": "sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==", + "dev": true, + "optional": true, + "dependencies": { + "boolean": "^3.0.1", + "es6-error": "^4.1.1", + "matcher": "^3.0.0", + "roarr": "^2.15.3", + "semver": "^7.3.2", + "serialize-error": "^7.0.1" + }, + "engines": { + "node": ">=10.0" + } + }, + "node_modules/global-agent/node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmmirror.com/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "dev": true, + "optional": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/globalthis": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", + "dev": true, + "optional": true, + "dependencies": { + "define-properties": "^1.2.1", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/got": { + "version": "11.8.6", + "resolved": "https://registry.npmmirror.com/got/-/got-11.8.6.tgz", + "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==", + "dev": true, + "dependencies": { + "@sindresorhus/is": "^4.0.0", + "@szmarczak/http-timer": "^4.0.5", + "@types/cacheable-request": "^6.0.1", + "@types/responselike": "^1.0.0", + "cacheable-lookup": "^5.0.3", + "cacheable-request": "^7.0.2", + "decompress-response": "^6.0.0", + "http2-wrapper": "^1.0.0-beta.5.2", + "lowercase-keys": "^2.0.0", + "p-cancelable": "^2.0.0", + "responselike": "^2.0.0" + }, + "engines": { + "node": ">=10.19.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/got?sponsor=1" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dev": true, + "optional": true, + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hast-util-from-parse5": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-8.0.3.tgz", + "integrity": "sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "devlop": "^1.0.0", + "hastscript": "^9.0.0", + "property-information": "^7.0.0", + "vfile": "^6.0.0", + "vfile-location": "^5.0.0", + "web-namespaces": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-parse-selector": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-4.0.0.tgz", + "integrity": "sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-raw": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-9.1.0.tgz", + "integrity": "sha512-Y8/SBAHkZGoNkpzqqfCldijcuUKh7/su31kEBp67cFY09Wy0mTRgtsLYsiIxMJxlu0f6AA5SUTbDR8K0rxnbUw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "@ungap/structured-clone": "^1.0.0", + "hast-util-from-parse5": "^8.0.0", + "hast-util-to-parse5": "^8.0.0", + "html-void-elements": "^3.0.0", + "mdast-util-to-hast": "^13.0.0", + "parse5": "^7.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0", + "web-namespaces": "^2.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-jsx-runtime": { + "version": "2.3.6", + "resolved": "https://registry.npmmirror.com/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.6.tgz", + "integrity": "sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg==", + "dependencies": { + "@types/estree": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "devlop": "^1.0.0", + "estree-util-is-identifier-name": "^3.0.0", + "hast-util-whitespace": "^3.0.0", + "mdast-util-mdx-expression": "^2.0.0", + "mdast-util-mdx-jsx": "^3.0.0", + "mdast-util-mdxjs-esm": "^2.0.0", + "property-information": "^7.0.0", + "space-separated-tokens": "^2.0.0", + "style-to-js": "^1.0.0", + "unist-util-position": "^5.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-parse5": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-8.0.1.tgz", + "integrity": "sha512-MlWT6Pjt4CG9lFCjiz4BH7l9wmrMkfkJYCxFwKQic8+RTZgWPuWxwAfjJElsXkex7DJjfSJsQIt931ilUgmwdA==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "devlop": "^1.0.0", + "property-information": "^7.0.0", + "space-separated-tokens": "^2.0.0", + "web-namespaces": "^2.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-whitespace": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz", + "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hastscript": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-9.0.1.tgz", + "integrity": "sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "hast-util-parse-selector": "^4.0.0", + "property-information": "^7.0.0", + "space-separated-tokens": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/hosted-git-info/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/hosted-git-info/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/html-url-attributes": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/html-url-attributes/-/html-url-attributes-3.0.1.tgz", + "integrity": "sha512-ol6UPyBWqsrO6EJySPz2O7ZSr856WDrEzM5zMqp+FJJLGMW35cLYmmZnl0vztAZxRUoNZJFTCohfjuIJ8I4QBQ==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/html-void-elements": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-3.0.0.tgz", + "integrity": "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/http-cache-semantics": { + "version": "4.2.0", + "resolved": "https://registry.npmmirror.com/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", + "integrity": "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==", + "dev": true + }, + "node_modules/http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "dev": true, + "dependencies": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/http2-wrapper": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/http2-wrapper/-/http2-wrapper-1.0.3.tgz", + "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", + "dev": true, + "dependencies": { + "quick-lru": "^5.1.1", + "resolve-alpn": "^1.0.0" + }, + "engines": { + "node": ">=10.19.0" + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmmirror.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dev": true, + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/iconv-corefoundation": { + "version": "1.1.7", + "resolved": "https://registry.npmmirror.com/iconv-corefoundation/-/iconv-corefoundation-1.1.7.tgz", + "integrity": "sha512-T10qvkw0zz4wnm560lOEg0PovVqUXuOFhhHAkixw8/sycy7TJt7v/RrkEKEQnAw2viPSJu6iAkErxnzR0g8PpQ==", + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "dependencies": { + "cli-truncate": "^2.1.0", + "node-addon-api": "^1.6.3" + }, + "engines": { + "node": "^8.11.2 || >=10" + } + }, + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmmirror.com/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/immediate": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==", + "license": "MIT" + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmmirror.com/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmmirror.com/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/inline-style-parser": { + "version": "0.2.7", + "resolved": "https://registry.npmmirror.com/inline-style-parser/-/inline-style-parser-0.2.7.tgz", + "integrity": "sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA==" + }, + "node_modules/is-alphabetical": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/is-alphabetical/-/is-alphabetical-2.0.1.tgz", + "integrity": "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-alphanumerical": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz", + "integrity": "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==", + "dependencies": { + "is-alphabetical": "^2.0.0", + "is-decimal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-ci": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/is-ci/-/is-ci-3.0.1.tgz", + "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==", + "dev": true, + "dependencies": { + "ci-info": "^3.2.0" + }, + "bin": { + "is-ci": "bin.js" + } + }, + "node_modules/is-decimal": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/is-decimal/-/is-decimal-2.0.1.tgz", + "integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-hexadecimal": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz", + "integrity": "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, + "node_modules/isbinaryfile": { + "version": "5.0.7", + "resolved": "https://registry.npmmirror.com/isbinaryfile/-/isbinaryfile-5.0.7.tgz", + "integrity": "sha512-gnWD14Jh3FzS3CPhF0AxNOJ8CxqeblPTADzI38r0wt8ZyQl5edpy75myt08EG2oKvpyiqSqsx+Wkz9vtkbTqYQ==", + "dev": true, + "engines": { + "node": ">= 18.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/gjtorikian/" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmmirror.com/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dev": true, + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jake": { + "version": "10.9.4", + "resolved": "https://registry.npmmirror.com/jake/-/jake-10.9.4.tgz", + "integrity": "sha512-wpHYzhxiVQL+IV05BLE2Xn34zW1S223hvjtqk0+gsPrwd/8JNLXJgZZM/iPFsYc1xyphF+6M6EvdE5E9MBGkDA==", + "dev": true, + "dependencies": { + "async": "^3.2.6", + "filelist": "^1.0.4", + "picocolors": "^1.1.1" + }, + "bin": { + "jake": "bin/cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/joi": { + "version": "17.13.3", + "resolved": "https://registry.npmmirror.com/joi/-/joi-17.13.3.tgz", + "integrity": "sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==", + "dev": true, + "dependencies": { + "@hapi/hoek": "^9.3.0", + "@hapi/topo": "^5.1.0", + "@sideway/address": "^4.1.5", + "@sideway/formula": "^3.0.1", + "@sideway/pinpoint": "^2.0.0" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "node_modules/js-yaml": { + "version": "4.1.1", + "resolved": "https://registry.npmmirror.com/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmmirror.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "dev": true, + "optional": true + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmmirror.com/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jszip": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz", + "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==", + "license": "(MIT OR GPL-3.0-or-later)", + "dependencies": { + "lie": "~3.3.0", + "pako": "~1.0.2", + "readable-stream": "~2.3.6", + "setimmediate": "^1.0.5" + } + }, + "node_modules/jszip/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/jszip/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/jszip/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmmirror.com/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/lazy-val": { + "version": "1.0.5", + "resolved": "https://registry.npmmirror.com/lazy-val/-/lazy-val-1.0.5.tgz", + "integrity": "sha512-0/BnGCCfyUMkBpeDgWihanIAF9JmZhHBgUhEqzvf+adhNGLoP6TaiI5oF8oyb3I45P+PcnrqihSf01M0l0G5+Q==", + "dev": true + }, + "node_modules/lazystream": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/lazystream/-/lazystream-1.0.1.tgz", + "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==", + "dev": true, + "peer": true, + "dependencies": { + "readable-stream": "^2.0.5" + }, + "engines": { + "node": ">= 0.6.3" + } + }, + "node_modules/lazystream/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "peer": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/lazystream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true, + "peer": true + }, + "node_modules/lazystream/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "peer": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/lie": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", + "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", + "license": "MIT", + "dependencies": { + "immediate": "~3.0.5" + } + }, + "node_modules/lodash": { + "version": "4.17.23", + "resolved": "https://registry.npmmirror.com/lodash/-/lodash-4.17.23.tgz", + "integrity": "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==", + "dev": true + }, + "node_modules/lodash.defaults": { + "version": "4.2.0", + "resolved": "https://registry.npmmirror.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz", + "integrity": "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==", + "dev": true, + "peer": true + }, + "node_modules/lodash.difference": { + "version": "4.5.0", + "resolved": "https://registry.npmmirror.com/lodash.difference/-/lodash.difference-4.5.0.tgz", + "integrity": "sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA==", + "dev": true, + "peer": true + }, + "node_modules/lodash.flatten": { + "version": "4.4.0", + "resolved": "https://registry.npmmirror.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz", + "integrity": "sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==", + "dev": true, + "peer": true + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmmirror.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", + "dev": true, + "peer": true + }, + "node_modules/lodash.union": { + "version": "4.6.0", + "resolved": "https://registry.npmmirror.com/lodash.union/-/lodash.union-4.6.0.tgz", + "integrity": "sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw==", + "dev": true, + "peer": true + }, + "node_modules/longest-streak": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/longest-streak/-/longest-streak-3.1.0.tgz", + "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmmirror.com/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lop": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/lop/-/lop-0.4.2.tgz", + "integrity": "sha512-RefILVDQ4DKoRZsJ4Pj22TxE3omDO47yFpkIBoDKzkqPRISs5U1cnAdg/5583YPkWPaLIYHOKRMQSvjFsO26cw==", + "license": "BSD-2-Clause", + "dependencies": { + "duck": "^0.1.12", + "option": "~0.2.1", + "underscore": "^1.13.1" + } + }, + "node_modules/lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/mammoth": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/mammoth/-/mammoth-1.11.0.tgz", + "integrity": "sha512-BcEqqY/BOwIcI1iR5tqyVlqc3KIaMRa4egSoK83YAVrBf6+yqdAAbtUcFDCWX8Zef8/fgNZ6rl4VUv+vVX8ddQ==", + "license": "BSD-2-Clause", + "dependencies": { + "@xmldom/xmldom": "^0.8.6", + "argparse": "~1.0.3", + "base64-js": "^1.5.1", + "bluebird": "~3.4.0", + "dingbat-to-unicode": "^1.0.1", + "jszip": "^3.7.1", + "lop": "^0.4.2", + "path-is-absolute": "^1.0.0", + "underscore": "^1.13.1", + "xmlbuilder": "^10.0.0" + }, + "bin": { + "mammoth": "bin/mammoth" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/mammoth/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/mammoth/node_modules/bluebird": { + "version": "3.4.7", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz", + "integrity": "sha512-iD3898SR7sWVRHbiQv+sHUtHnMvC1o3nW5rAcqnq3uOn07DSAppZYUkIGslDz6gXC7HfunPe7YVBgoEJASPcHA==", + "license": "MIT" + }, + "node_modules/mammoth/node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "license": "BSD-3-Clause" + }, + "node_modules/mammoth/node_modules/xmlbuilder": { + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-10.1.1.tgz", + "integrity": "sha512-OyzrcFLL/nb6fMGHbiRDuPup9ljBycsdCypwuyg5AAHvyWzGfChJpCXMG88AGTIMFhGZ9RccFN1e6lhg3hkwKg==", + "license": "MIT", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/markdown-table": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.4.tgz", + "integrity": "sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/matcher": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/matcher/-/matcher-3.0.0.tgz", + "integrity": "sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==", + "dev": true, + "optional": true, + "dependencies": { + "escape-string-regexp": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/mdast-util-find-and-replace": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.2.tgz", + "integrity": "sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "escape-string-regexp": "^5.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-find-and-replace/node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mdast-util-from-markdown": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.2.tgz", + "integrity": "sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark": "^4.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-3.1.0.tgz", + "integrity": "sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==", + "license": "MIT", + "dependencies": { + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-gfm-autolink-literal": "^2.0.0", + "mdast-util-gfm-footnote": "^2.0.0", + "mdast-util-gfm-strikethrough": "^2.0.0", + "mdast-util-gfm-table": "^2.0.0", + "mdast-util-gfm-task-list-item": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-autolink-literal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.0.1.tgz", + "integrity": "sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "ccount": "^2.0.0", + "devlop": "^1.0.0", + "mdast-util-find-and-replace": "^3.0.0", + "micromark-util-character": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-footnote": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.1.0.tgz", + "integrity": "sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.1.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-strikethrough": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-2.0.0.tgz", + "integrity": "sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-table": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-2.0.0.tgz", + "integrity": "sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "markdown-table": "^3.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-task-list-item": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-2.0.0.tgz", + "integrity": "sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdx-expression": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/mdast-util-mdx-expression/-/mdast-util-mdx-expression-2.0.1.tgz", + "integrity": "sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdx-jsx": { + "version": "3.2.0", + "resolved": "https://registry.npmmirror.com/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.2.0.tgz", + "integrity": "sha512-lj/z8v0r6ZtsN/cGNNtemmmfoLAFZnjMbNyLzBafjzikOM+glrjNHPlf6lQDOTccj9n5b0PPihEBbhneMyGs1Q==", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "ccount": "^2.0.0", + "devlop": "^1.1.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0", + "parse-entities": "^4.0.0", + "stringify-entities": "^4.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdxjs-esm": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-2.0.1.tgz", + "integrity": "sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-phrasing": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz", + "integrity": "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==", + "dependencies": { + "@types/mdast": "^4.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-hast": { + "version": "13.2.1", + "resolved": "https://registry.npmmirror.com/mdast-util-to-hast/-/mdast-util-to-hast-13.2.1.tgz", + "integrity": "sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "@ungap/structured-clone": "^1.0.0", + "devlop": "^1.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "trim-lines": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-markdown": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.2.tgz", + "integrity": "sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "longest-streak": "^3.0.0", + "mdast-util-phrasing": "^4.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "unist-util-visit": "^5.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-string": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", + "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", + "dependencies": { + "@types/mdast": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark": { + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/micromark/-/micromark-4.0.2.tgz", + "integrity": "sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-core-commonmark": { + "version": "2.0.3", + "resolved": "https://registry.npmmirror.com/micromark-core-commonmark/-/micromark-core-commonmark-2.0.3.tgz", + "integrity": "sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-factory-destination": "^2.0.0", + "micromark-factory-label": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-factory-title": "^2.0.0", + "micromark-factory-whitespace": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-html-tag-name": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-extension-gfm": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-3.0.0.tgz", + "integrity": "sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==", + "license": "MIT", + "dependencies": { + "micromark-extension-gfm-autolink-literal": "^2.0.0", + "micromark-extension-gfm-footnote": "^2.0.0", + "micromark-extension-gfm-strikethrough": "^2.0.0", + "micromark-extension-gfm-table": "^2.0.0", + "micromark-extension-gfm-tagfilter": "^2.0.0", + "micromark-extension-gfm-task-list-item": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-autolink-literal": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.1.0.tgz", + "integrity": "sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==", + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-footnote": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.1.0.tgz", + "integrity": "sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-strikethrough": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-2.1.0.tgz", + "integrity": "sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-table": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.1.1.tgz", + "integrity": "sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-tagfilter": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-2.0.0.tgz", + "integrity": "sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==", + "license": "MIT", + "dependencies": { + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-task-list-item": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-2.1.0.tgz", + "integrity": "sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-factory-destination": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz", + "integrity": "sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-label": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/micromark-factory-label/-/micromark-factory-label-2.0.1.tgz", + "integrity": "sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-space": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", + "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-title": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/micromark-factory-title/-/micromark-factory-title-2.0.1.tgz", + "integrity": "sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-whitespace": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.1.tgz", + "integrity": "sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-chunked": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/micromark-util-chunked/-/micromark-util-chunked-2.0.1.tgz", + "integrity": "sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-classify-character": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/micromark-util-classify-character/-/micromark-util-classify-character-2.0.1.tgz", + "integrity": "sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-combine-extensions": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.1.tgz", + "integrity": "sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-chunked": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-decode-numeric-character-reference": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.2.tgz", + "integrity": "sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-decode-string": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/micromark-util-decode-string/-/micromark-util-decode-string-2.0.1.tgz", + "integrity": "sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-encode": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz", + "integrity": "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/micromark-util-html-tag-name": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.1.tgz", + "integrity": "sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/micromark-util-normalize-identifier": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.1.tgz", + "integrity": "sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-resolve-all": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.1.tgz", + "integrity": "sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-sanitize-uri": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz", + "integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-subtokenize": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/micromark-util-subtokenize/-/micromark-util-subtokenize-2.1.0.tgz", + "integrity": "sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/micromark-util-types": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/micromark-util-types/-/micromark-util-types-2.0.2.tgz", + "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/mime": { + "version": "2.6.0", + "resolved": "https://registry.npmmirror.com/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmmirror.com/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmmirror.com/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmmirror.com/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minizlib/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmmirror.com/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/node-addon-api": { + "version": "1.7.2", + "resolved": "https://registry.npmmirror.com/node-addon-api/-/node-addon-api-1.7.2.tgz", + "integrity": "sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg==", + "dev": true, + "optional": true + }, + "node_modules/node-releases": { + "version": "2.0.27", + "resolved": "https://registry.npmmirror.com/node-releases/-/node-releases-2.0.27.tgz", + "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==", + "dev": true + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmmirror.com/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "optional": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmmirror.com/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/option": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/option/-/option-0.2.4.tgz", + "integrity": "sha512-pkEqbDyl8ou5cpq+VsnQbe/WlEy5qS7xPzMS1U55OCG9KPvwFD46zDbxQIj3egJSFc3D+XhYOPUzz49zQAVy7A==", + "license": "BSD-2-Clause" + }, + "node_modules/p-cancelable": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/p-cancelable/-/p-cancelable-2.1.1.tgz", + "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "dev": true + }, + "node_modules/pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "license": "(MIT AND Zlib)" + }, + "node_modules/parse-entities": { + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/parse-entities/-/parse-entities-4.0.2.tgz", + "integrity": "sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==", + "dependencies": { + "@types/unist": "^2.0.0", + "character-entities-legacy": "^3.0.0", + "character-reference-invalid": "^2.0.0", + "decode-named-character-reference": "^1.0.0", + "is-alphanumerical": "^2.0.0", + "is-decimal": "^2.0.0", + "is-hexadecimal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/parse-entities/node_modules/@types/unist": { + "version": "2.0.11", + "resolved": "https://registry.npmmirror.com/@types/unist/-/unist-2.0.11.tgz", + "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==" + }, + "node_modules/parse5": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", + "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", + "license": "MIT", + "dependencies": { + "entities": "^6.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmmirror.com/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmmirror.com/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dev": true, + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true + }, + "node_modules/pend": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", + "dev": true + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true + }, + "node_modules/plist": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/plist/-/plist-3.1.0.tgz", + "integrity": "sha512-uysumyrvkUX0rX/dEVqt8gC3sTBzd4zoWfLeS29nb53imdaXVvLINYXTI2GNqzaMuvacNx4uJQ8+b3zXR0pkgQ==", + "dev": true, + "dependencies": { + "@xmldom/xmldom": "^0.8.8", + "base64-js": "^1.5.1", + "xmlbuilder": "^15.1.1" + }, + "engines": { + "node": ">=10.4.0" + } + }, + "node_modules/postcss": { + "version": "8.5.6", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "node_modules/progress": { + "version": "2.0.3", + "resolved": "https://registry.npmmirror.com/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/promise-retry": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", + "dev": true, + "dependencies": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/property-information": { + "version": "7.1.0", + "resolved": "https://registry.npmmirror.com/property-information/-/property-information-7.1.0.tgz", + "integrity": "sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, + "node_modules/pump": { + "version": "3.0.3", + "resolved": "https://registry.npmmirror.com/pump/-/pump-3.0.3.tgz", + "integrity": "sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==", + "dev": true, + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmmirror.com/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmmirror.com/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/react": { + "version": "18.3.1", + "resolved": "https://registry.npmmirror.com/react/-/react-18.3.1.tgz", + "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "18.3.1", + "resolved": "https://registry.npmmirror.com/react-dom/-/react-dom-18.3.1.tgz", + "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.2" + }, + "peerDependencies": { + "react": "^18.3.1" + } + }, + "node_modules/react-markdown": { + "version": "9.1.0", + "resolved": "https://registry.npmmirror.com/react-markdown/-/react-markdown-9.1.0.tgz", + "integrity": "sha512-xaijuJB0kzGiUdG7nc2MOMDUDBWPyGAjZtUrow9XxUeua8IqeP+VlIfAZ3bphpcLTnSZXz6z9jcVC/TCwbfgdw==", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "hast-util-to-jsx-runtime": "^2.0.0", + "html-url-attributes": "^3.0.0", + "mdast-util-to-hast": "^13.0.0", + "remark-parse": "^11.0.0", + "remark-rehype": "^11.0.0", + "unified": "^11.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + }, + "peerDependencies": { + "@types/react": ">=18", + "react": ">=18" + } + }, + "node_modules/react-refresh": { + "version": "0.17.0", + "resolved": "https://registry.npmmirror.com/react-refresh/-/react-refresh-0.17.0.tgz", + "integrity": "sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/read-config-file": { + "version": "6.3.2", + "resolved": "https://registry.npmmirror.com/read-config-file/-/read-config-file-6.3.2.tgz", + "integrity": "sha512-M80lpCjnE6Wt6zb98DoW8WHR09nzMSpu8XHtPkiTHrJ5Az9CybfeQhTJ8D7saeBHpGhLPIVyA8lcL6ZmdKwY6Q==", + "dev": true, + "dependencies": { + "config-file-ts": "^0.2.4", + "dotenv": "^9.0.2", + "dotenv-expand": "^5.1.0", + "js-yaml": "^4.1.0", + "json5": "^2.2.0", + "lazy-val": "^1.0.4" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "peer": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdir-glob": { + "version": "1.1.3", + "resolved": "https://registry.npmmirror.com/readdir-glob/-/readdir-glob-1.1.3.tgz", + "integrity": "sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==", + "dev": true, + "peer": true, + "dependencies": { + "minimatch": "^5.1.0" + } + }, + "node_modules/rehype-raw": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/rehype-raw/-/rehype-raw-7.0.0.tgz", + "integrity": "sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "hast-util-raw": "^9.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-gfm": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-4.0.1.tgz", + "integrity": "sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-gfm": "^3.0.0", + "micromark-extension-gfm": "^3.0.0", + "remark-parse": "^11.0.0", + "remark-stringify": "^11.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-parse": { + "version": "11.0.0", + "resolved": "https://registry.npmmirror.com/remark-parse/-/remark-parse-11.0.0.tgz", + "integrity": "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-from-markdown": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-rehype": { + "version": "11.1.2", + "resolved": "https://registry.npmmirror.com/remark-rehype/-/remark-rehype-11.1.2.tgz", + "integrity": "sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw==", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "mdast-util-to-hast": "^13.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-stringify": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-11.0.0.tgz", + "integrity": "sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-to-markdown": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve-alpn": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/resolve-alpn/-/resolve-alpn-1.2.1.tgz", + "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", + "dev": true + }, + "node_modules/responselike": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/responselike/-/responselike-2.0.1.tgz", + "integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==", + "dev": true, + "dependencies": { + "lowercase-keys": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmmirror.com/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/roarr": { + "version": "2.15.4", + "resolved": "https://registry.npmmirror.com/roarr/-/roarr-2.15.4.tgz", + "integrity": "sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==", + "dev": true, + "optional": true, + "dependencies": { + "boolean": "^3.0.1", + "detect-node": "^2.0.4", + "globalthis": "^1.0.1", + "json-stringify-safe": "^5.0.1", + "semver-compare": "^1.0.0", + "sprintf-js": "^1.1.2" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/rollup": { + "version": "4.57.1", + "resolved": "https://registry.npmmirror.com/rollup/-/rollup-4.57.1.tgz", + "integrity": "sha512-oQL6lgK3e2QZeQ7gcgIkS2YZPg5slw37hYufJ3edKlfQSGGm8ICoxswK15ntSzF/a8+h7ekRy7k7oWc3BQ7y8A==", + "dev": true, + "dependencies": { + "@types/estree": "1.0.8" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.57.1", + "@rollup/rollup-android-arm64": "4.57.1", + "@rollup/rollup-darwin-arm64": "4.57.1", + "@rollup/rollup-darwin-x64": "4.57.1", + "@rollup/rollup-freebsd-arm64": "4.57.1", + "@rollup/rollup-freebsd-x64": "4.57.1", + "@rollup/rollup-linux-arm-gnueabihf": "4.57.1", + "@rollup/rollup-linux-arm-musleabihf": "4.57.1", + "@rollup/rollup-linux-arm64-gnu": "4.57.1", + "@rollup/rollup-linux-arm64-musl": "4.57.1", + "@rollup/rollup-linux-loong64-gnu": "4.57.1", + "@rollup/rollup-linux-loong64-musl": "4.57.1", + "@rollup/rollup-linux-ppc64-gnu": "4.57.1", + "@rollup/rollup-linux-ppc64-musl": "4.57.1", + "@rollup/rollup-linux-riscv64-gnu": "4.57.1", + "@rollup/rollup-linux-riscv64-musl": "4.57.1", + "@rollup/rollup-linux-s390x-gnu": "4.57.1", + "@rollup/rollup-linux-x64-gnu": "4.57.1", + "@rollup/rollup-linux-x64-musl": "4.57.1", + "@rollup/rollup-openbsd-x64": "4.57.1", + "@rollup/rollup-openharmony-arm64": "4.57.1", + "@rollup/rollup-win32-arm64-msvc": "4.57.1", + "@rollup/rollup-win32-ia32-msvc": "4.57.1", + "@rollup/rollup-win32-x64-gnu": "4.57.1", + "@rollup/rollup-win32-x64-msvc": "4.57.1", + "fsevents": "~2.3.2" + } + }, + "node_modules/rxjs": { + "version": "7.8.2", + "resolved": "https://registry.npmmirror.com/rxjs/-/rxjs-7.8.2.tgz", + "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", + "dev": true, + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "peer": true + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "node_modules/sanitize-filename": { + "version": "1.6.3", + "resolved": "https://registry.npmmirror.com/sanitize-filename/-/sanitize-filename-1.6.3.tgz", + "integrity": "sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==", + "dev": true, + "dependencies": { + "truncate-utf8-bytes": "^1.0.0" + } + }, + "node_modules/sax": { + "version": "1.4.4", + "resolved": "https://registry.npmmirror.com/sax/-/sax-1.4.4.tgz", + "integrity": "sha512-1n3r/tGXO6b6VXMdFT54SHzT9ytu9yr7TaELowdYpMqY/Ao7EnlQGmAQ1+RatX7Tkkdm6hONI2owqNx2aZj5Sw==", + "dev": true, + "engines": { + "node": ">=11.0.0" + } + }, + "node_modules/scheduler": { + "version": "0.23.2", + "resolved": "https://registry.npmmirror.com/scheduler/-/scheduler-0.23.2.tgz", + "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", + "dependencies": { + "loose-envify": "^1.1.0" + } + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmmirror.com/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/semver-compare": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/semver-compare/-/semver-compare-1.0.0.tgz", + "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==", + "dev": true, + "optional": true + }, + "node_modules/serialize-error": { + "version": "7.0.1", + "resolved": "https://registry.npmmirror.com/serialize-error/-/serialize-error-7.0.1.tgz", + "integrity": "sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==", + "dev": true, + "optional": true, + "dependencies": { + "type-fest": "^0.13.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", + "license": "MIT" + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/shell-quote": { + "version": "1.8.3", + "resolved": "https://registry.npmmirror.com/shell-quote/-/shell-quote-1.8.3.tgz", + "integrity": "sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/simple-update-notifier": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz", + "integrity": "sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==", + "dev": true, + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/simple-update-notifier/node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmmirror.com/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/slice-ansi": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/slice-ansi/-/slice-ansi-3.0.0.tgz", + "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", + "dev": true, + "optional": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmmirror.com/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "dev": true, + "optional": true, + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmmirror.com/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/space-separated-tokens": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", + "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/spawn-command": { + "version": "0.0.2", + "resolved": "https://registry.npmmirror.com/spawn-command/-/spawn-command-0.0.2.tgz", + "integrity": "sha512-zC8zGoGkmc8J9ndvml8Xksr1Amk9qBujgbF0JAIWO7kXr43w0h/0GJNM/Vustixu+YE8N/MTrQ7N31FvHUACxQ==", + "dev": true + }, + "node_modules/sprintf-js": { + "version": "1.1.3", + "resolved": "https://registry.npmmirror.com/sprintf-js/-/sprintf-js-1.1.3.tgz", + "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", + "dev": true, + "optional": true + }, + "node_modules/stat-mode": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/stat-mode/-/stat-mode-1.0.0.tgz", + "integrity": "sha512-jH9EhtKIjuXZ2cWxmXS8ZP80XyC3iasQxMDV8jzhNJpfDb7VbQLVW4Wvsxz9QZvzV+G4YoSfBUVKDOyxLzi/sg==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "peer": true, + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmmirror.com/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmmirror.com/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/stringify-entities": { + "version": "4.0.4", + "resolved": "https://registry.npmmirror.com/stringify-entities/-/stringify-entities-4.0.4.tgz", + "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==", + "dependencies": { + "character-entities-html4": "^2.0.0", + "character-entities-legacy": "^3.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/style-to-js": { + "version": "1.1.21", + "resolved": "https://registry.npmmirror.com/style-to-js/-/style-to-js-1.1.21.tgz", + "integrity": "sha512-RjQetxJrrUJLQPHbLku6U/ocGtzyjbJMP9lCNK7Ag0CNh690nSH8woqWH9u16nMjYBAok+i7JO1NP2pOy8IsPQ==", + "dependencies": { + "style-to-object": "1.0.14" + } + }, + "node_modules/style-to-object": { + "version": "1.0.14", + "resolved": "https://registry.npmmirror.com/style-to-object/-/style-to-object-1.0.14.tgz", + "integrity": "sha512-LIN7rULI0jBscWQYaSswptyderlarFkjQ+t79nzty8tcIAceVomEVlLzH5VP4Cmsv6MtKhs7qaAiwlcp+Mgaxw==", + "dependencies": { + "inline-style-parser": "0.2.7" + } + }, + "node_modules/sumchecker": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/sumchecker/-/sumchecker-3.0.1.tgz", + "integrity": "sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg==", + "dev": true, + "dependencies": { + "debug": "^4.1.0" + }, + "engines": { + "node": ">= 8.0" + } + }, + "node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/tar": { + "version": "6.2.1", + "resolved": "https://registry.npmmirror.com/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", + "dev": true, + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "dev": true, + "peer": true, + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tar/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/temp-file": { + "version": "3.4.0", + "resolved": "https://registry.npmmirror.com/temp-file/-/temp-file-3.4.0.tgz", + "integrity": "sha512-C5tjlC/HCtVUOi3KWVokd4vHVViOmGjtLwIh4MuzPo/nMYTV/p1urt3RnMz2IWXDdKEGJH3k5+KPxtqRsUYGtg==", + "dev": true, + "dependencies": { + "async-exit-hook": "^2.0.1", + "fs-extra": "^10.0.0" + } + }, + "node_modules/temp-file/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmmirror.com/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/temp-file/node_modules/jsonfile": { + "version": "6.2.0", + "resolved": "https://registry.npmmirror.com/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/temp-file/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/tmp": { + "version": "0.2.5", + "resolved": "https://registry.npmmirror.com/tmp/-/tmp-0.2.5.tgz", + "integrity": "sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==", + "dev": true, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/tmp-promise": { + "version": "3.0.3", + "resolved": "https://registry.npmmirror.com/tmp-promise/-/tmp-promise-3.0.3.tgz", + "integrity": "sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ==", + "dev": true, + "dependencies": { + "tmp": "^0.2.0" + } + }, + "node_modules/tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmmirror.com/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "dev": true, + "bin": { + "tree-kill": "cli.js" + } + }, + "node_modules/trim-lines": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/trim-lines/-/trim-lines-3.0.1.tgz", + "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/trough": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/trough/-/trough-2.2.0.tgz", + "integrity": "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/truncate-utf8-bytes": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz", + "integrity": "sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==", + "dev": true, + "dependencies": { + "utf8-byte-length": "^1.0.1" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true + }, + "node_modules/type-fest": { + "version": "0.13.1", + "resolved": "https://registry.npmmirror.com/type-fest/-/type-fest-0.13.1.tgz", + "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmmirror.com/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/underscore": { + "version": "1.13.7", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.7.tgz", + "integrity": "sha512-GMXzWtsc57XAtguZgaQViUOzs0KTkk8ojr3/xAxXLITqf/3EMwxC0inyETfDFjH/Krbhuep0HNbbjI9i/q3F3g==", + "license": "MIT" + }, + "node_modules/undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmmirror.com/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "dev": true + }, + "node_modules/unified": { + "version": "11.0.5", + "resolved": "https://registry.npmmirror.com/unified/-/unified-11.0.5.tgz", + "integrity": "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==", + "dependencies": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-is": { + "version": "6.0.1", + "resolved": "https://registry.npmmirror.com/unist-util-is/-/unist-util-is-6.0.1.tgz", + "integrity": "sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit": { + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/unist-util-visit/-/unist-util-visit-5.1.0.tgz", + "integrity": "sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg==", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit-parents": { + "version": "6.0.2", + "resolved": "https://registry.npmmirror.com/unist-util-visit-parents/-/unist-util-visit-parents-6.0.2.tgz", + "integrity": "sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmmirror.com/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.2.3", + "resolved": "https://registry.npmmirror.com/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmmirror.com/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/utf8-byte-length": { + "version": "1.0.5", + "resolved": "https://registry.npmmirror.com/utf8-byte-length/-/utf8-byte-length-1.0.5.tgz", + "integrity": "sha512-Xn0w3MtiQ6zoz2vFyUVruaCL53O/DwUvkEeOvj+uulMm0BkUGYWmBYVyElqZaSLhY6ZD0ulfU3aBra2aVT4xfA==", + "dev": true + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "node_modules/verror": { + "version": "1.10.1", + "resolved": "https://registry.npmmirror.com/verror/-/verror-1.10.1.tgz", + "integrity": "sha512-veufcmxri4e3XSrT0xwfUR7kguIkaxBeosDg00yDWhk49wdwkSUrvvsm7nc75e1PUyvIeZj6nS8VQRYz2/S4Xg==", + "dev": true, + "optional": true, + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/vfile": { + "version": "6.0.3", + "resolved": "https://registry.npmmirror.com/vfile/-/vfile-6.0.3.tgz", + "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==", + "dependencies": { + "@types/unist": "^3.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-location": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-5.0.3.tgz", + "integrity": "sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-message": { + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/vfile-message/-/vfile-message-4.0.3.tgz", + "integrity": "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vite": { + "version": "5.4.21", + "resolved": "https://registry.npmmirror.com/vite/-/vite-5.4.21.tgz", + "integrity": "sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw==", + "dev": true, + "dependencies": { + "esbuild": "^0.21.3", + "postcss": "^8.4.43", + "rollup": "^4.20.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/wait-on": { + "version": "7.2.0", + "resolved": "https://registry.npmmirror.com/wait-on/-/wait-on-7.2.0.tgz", + "integrity": "sha512-wCQcHkRazgjG5XoAq9jbTMLpNIjoSlZslrJ2+N9MxDsGEv1HnFoVjOCexL0ESva7Y9cu350j+DWADdk54s4AFQ==", + "dev": true, + "dependencies": { + "axios": "^1.6.1", + "joi": "^17.11.0", + "lodash": "^4.17.21", + "minimist": "^1.2.8", + "rxjs": "^7.8.1" + }, + "bin": { + "wait-on": "bin/wait-on" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/web-namespaces": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-2.0.1.tgz", + "integrity": "sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "node_modules/xmlbuilder": { + "version": "15.1.1", + "resolved": "https://registry.npmmirror.com/xmlbuilder/-/xmlbuilder-15.1.1.tgz", + "integrity": "sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==", + "dev": true, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmmirror.com/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmmirror.com/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmmirror.com/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmmirror.com/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmmirror.com/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", + "dev": true, + "dependencies": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + }, + "node_modules/zip-stream": { + "version": "4.1.1", + "resolved": "https://registry.npmmirror.com/zip-stream/-/zip-stream-4.1.1.tgz", + "integrity": "sha512-9qv4rlDiopXg4E69k+vMHjNN63YFMe9sZMrdlvKnCjlCRWeCBswPPMPUfx+ipsAWq1LXHe70RcbaHdJJpS6hyQ==", + "dev": true, + "peer": true, + "dependencies": { + "archiver-utils": "^3.0.4", + "compress-commons": "^4.1.2", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/zip-stream/node_modules/archiver-utils": { + "version": "3.0.4", + "resolved": "https://registry.npmmirror.com/archiver-utils/-/archiver-utils-3.0.4.tgz", + "integrity": "sha512-KVgf4XQVrTjhyWmx6cte4RxonPLR9onExufI1jhvw/MQ4BB6IsZD5gT8Lq+u/+pRkWna/6JoHpiQioaqFP5Rzw==", + "dev": true, + "peer": true, + "dependencies": { + "glob": "^7.2.3", + "graceful-fs": "^4.2.0", + "lazystream": "^1.0.0", + "lodash.defaults": "^4.2.0", + "lodash.difference": "^4.5.0", + "lodash.flatten": "^4.4.0", + "lodash.isplainobject": "^4.0.6", + "lodash.union": "^4.6.0", + "normalize-path": "^3.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/zwitch": { + "version": "2.0.4", + "resolved": "https://registry.npmmirror.com/zwitch/-/zwitch-2.0.4.tgz", + "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + } + } +} diff --git a/frontend/package.json b/frontend/package.json new file mode 100644 index 0000000..2e0082f --- /dev/null +++ b/frontend/package.json @@ -0,0 +1,60 @@ +{ + "name": "flexible-test-platform", + "version": "1.0.0", + "description": "柔性敏捷智能测试体系平台", + "main": "dist/main/main.js", + "scripts": { + "dev": "concurrently -k \"npm run dev:renderer\" \"npm run electron:dev\"", + "dev:main": "tsc -p src/main/tsconfig.json && tsc -p src/preload/tsconfig.json", + "dev:renderer": "vite", + "electron:dev": "npm run dev:main && wait-on http://localhost:5173 && cross-env NODE_ENV=development electron .", + "build": "npm run build:main && npm run build:renderer", + "build:main": "tsc -p src/main/tsconfig.json", + "build:renderer": "vite build", + "start": "npm run build:main && cross-env NODE_ENV=production electron .", + "preview": "vite preview" + }, + "keywords": [ + "electron", + "test-platform", + "ai-assistant" + ], + "author": "", + "license": "MIT", + "devDependencies": { + "@types/node": "^20.11.0", + "@types/react": "^18.2.48", + "@types/react-dom": "^18.2.18", + "@vitejs/plugin-react": "^4.2.1", + "concurrently": "^8.2.2", + "cross-env": "^7.0.3", + "electron": "^28.1.0", + "electron-builder": "^24.9.1", + "typescript": "^5.3.3", + "vite": "^5.0.11", + "wait-on": "^7.2.0" + }, + "dependencies": { + "axios": "^1.6.5", + "mammoth": "^1.11.0", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "react-markdown": "^9.0.1", + "rehype-raw": "^7.0.0", + "remark-gfm": "^4.0.1" + }, + "build": { + "appId": "com.flextest.platform", + "productName": "柔性敏捷智能测试体系平台", + "directories": { + "output": "release" + }, + "files": [ + "dist/**/*", + "package.json" + ], + "win": { + "target": "nsis" + } + } +} diff --git a/frontend/src/main/main.ts b/frontend/src/main/main.ts new file mode 100644 index 0000000..1c8237e --- /dev/null +++ b/frontend/src/main/main.ts @@ -0,0 +1,75 @@ +/** + * Electron 主进程入口 + * 柔性敏捷智能测试体系平台 + */ + +import { app, BrowserWindow, ipcMain } from 'electron'; +import * as path from 'path'; + +let mainWindow: BrowserWindow | null = null; + +function createMainWindow(): void { + mainWindow = new BrowserWindow({ + width: 1400, + height: 900, + minWidth: 1000, + minHeight: 700, + title: '柔性敏捷智能测试体系平台', + frame: false, // 无边框窗口,自定义标题栏 + webPreferences: { + preload: path.join(__dirname, '../preload/preload.js'), + nodeIntegration: false, + contextIsolation: true, + }, + }); + + // 开发模式加载 Vite 开发服务器 + if (process.env.NODE_ENV === 'development') { + mainWindow.loadURL('http://localhost:5173'); + mainWindow.webContents.openDevTools(); + } else { + // 生产模式加载构建后的文件 + mainWindow.loadFile(path.join(__dirname, '../renderer/index.html')); + } + + mainWindow.on('closed', () => { + mainWindow = null; + }); +} + +// 窗口控制 IPC 处理 +ipcMain.on('window-minimize', () => { + mainWindow?.minimize(); +}); + +ipcMain.on('window-maximize', () => { + if (mainWindow?.isMaximized()) { + mainWindow?.unmaximize(); + } else { + mainWindow?.maximize(); + } +}); + +ipcMain.on('window-close', () => { + mainWindow?.close(); +}); + +ipcMain.handle('window-is-maximized', () => { + return mainWindow?.isMaximized(); +}); + +app.whenReady().then(() => { + createMainWindow(); + + app.on('activate', () => { + if (BrowserWindow.getAllWindows().length === 0) { + createMainWindow(); + } + }); +}); + +app.on('window-all-closed', () => { + if (process.platform !== 'darwin') { + app.quit(); + } +}); diff --git a/frontend/src/main/tsconfig.json b/frontend/src/main/tsconfig.json new file mode 100644 index 0000000..750000c --- /dev/null +++ b/frontend/src/main/tsconfig.json @@ -0,0 +1,25 @@ +{ + "compilerOptions": { + "target": "ES2022", + "module": "commonjs", + "lib": [ + "ES2022" + ], + "outDir": "../../dist/main", + "rootDir": ".", + "strict": true, + "esModuleInterop": true, + "skipLibCheck": true, + "forceConsistentCasingInFileNames": true, + "resolveJsonModule": true, + "declaration": true, + "declarationMap": true, + "sourceMap": true + }, + "include": [ + "./**/*" + ], + "exclude": [ + "node_modules" + ] +} diff --git a/frontend/src/preload/preload.ts b/frontend/src/preload/preload.ts new file mode 100644 index 0000000..16b4bdd --- /dev/null +++ b/frontend/src/preload/preload.ts @@ -0,0 +1,31 @@ +/** + * Electron Preload 脚本 + * 安全地暴露 API 给渲染进程 + */ + +import { contextBridge, ipcRenderer } from 'electron'; + +// 暴露给渲染进程的 API +contextBridge.exposeInMainWorld('electronAPI', { + // 窗口控制 + minimize: () => ipcRenderer.send('window-minimize'), + maximize: () => ipcRenderer.send('window-maximize'), + close: () => ipcRenderer.send('window-close'), + isMaximized: () => ipcRenderer.invoke('window-is-maximized'), + + // 平台信息 + platform: process.platform, +}); + +// TypeScript 类型声明 +declare global { + interface Window { + electronAPI: { + minimize: () => void; + maximize: () => void; + close: () => void; + isMaximized: () => Promise; + platform: string; + }; + } +} diff --git a/frontend/src/preload/tsconfig.json b/frontend/src/preload/tsconfig.json new file mode 100644 index 0000000..1d13f71 --- /dev/null +++ b/frontend/src/preload/tsconfig.json @@ -0,0 +1,25 @@ +{ + "compilerOptions": { + "target": "ES2022", + "module": "commonjs", + "lib": [ + "ES2022" + ], + "outDir": "../../dist/preload", + "rootDir": ".", + "strict": true, + "esModuleInterop": true, + "skipLibCheck": true, + "forceConsistentCasingInFileNames": true, + "resolveJsonModule": true, + "declaration": true, + "declarationMap": true, + "sourceMap": true + }, + "include": [ + "./**/*" + ], + "exclude": [ + "node_modules" + ] +} diff --git a/frontend/src/renderer/App.css b/frontend/src/renderer/App.css new file mode 100644 index 0000000..f312776 --- /dev/null +++ b/frontend/src/renderer/App.css @@ -0,0 +1,19 @@ +.app { + display: flex; + flex-direction: column; + height: 100vh; + overflow: hidden; +} + +.app-body { + display: flex; + flex: 1; + overflow: hidden; +} + +.workspace { + display: flex; + flex-direction: column; + flex: 1; + overflow: hidden; +} diff --git a/frontend/src/renderer/App.tsx b/frontend/src/renderer/App.tsx new file mode 100644 index 0000000..92d9b76 --- /dev/null +++ b/frontend/src/renderer/App.tsx @@ -0,0 +1,117 @@ +import React, { useState, useCallback } from 'react'; +import TitleBar from './components/TitleBar/TitleBar'; +import Toolbar from './components/Toolbar/Toolbar'; +import Sidebar from './components/Sidebar/Sidebar'; +import MainPanel from './components/MainPanel/MainPanel'; +import AIPanel from './components/AIPanel/AIPanel'; +import './App.css'; +import { IntentActionHandlers, IntentActionStatus } from './types/intentActions'; +import { ExtractedStep } from './services/api'; + +// 功能模块类型定义 +export type ModuleType = 'intent' | 'task' | 'simulation' | 'code' | 'data' | 'knowledge'; + +const App: React.FC = () => { + // 当前选中的功能模块 + const [activeModule, setActiveModule] = useState('intent'); + + const [intentActions, setIntentActions] = useState(null); + const [intentActionStatus, setIntentActionStatus] = useState({ + isSaving: false, + isGenerating: false, + isChecking: false, + }); + + // 从意图编制提取的步骤(共享给任务规划) + const [extractedSteps, setExtractedSteps] = useState([]); + + // 当前选中的知识库 + const [selectedKnowledgeBase, setSelectedKnowledgeBase] = useState('default'); + + // AI 面板是否最大化 + const [aiPanelMaximized, setAiPanelMaximized] = useState(false); + + // AI 面板高度 + const [aiPanelHeight, setAiPanelHeight] = useState(250); + + // 完成编制后跳转到任务规划 + const handleIntentComplete = useCallback((steps: ExtractedStep[]) => { + setExtractedSteps(steps); + setActiveModule('task'); + }, []); + + const handleToolbarAction = useCallback((action: string) => { + if (activeModule === 'intent') { + switch (action) { + case '新建意图': + intentActions?.onNew?.(); + return; + case '打开': + intentActions?.onOpen?.(); + return; + case '保存': + intentActions?.onSave?.(); + return; + case 'AI 生成': + intentActions?.onGenerate?.(); + return; + case 'AI 检查': + intentActions?.onCheck?.(); + return; + case '导出': + intentActions?.onExport?.(); + return; + default: + return; + } + } + }, [activeModule, intentActions]); + + return ( +
+ {/* 标题栏 */} + + + {/* 二级功能快捷栏 */} + + + {/* 主体区域 */} +
+ {/* 左侧功能面板 */} + + + {/* 工作区 */} +
+ {/* 主窗口 */} + + + {/* AI 交互窗口 */} + +
+
+
+ ); +}; + +export default App; diff --git a/frontend/src/renderer/components/AIPanel/AIPanel.css b/frontend/src/renderer/components/AIPanel/AIPanel.css new file mode 100644 index 0000000..45ee47a --- /dev/null +++ b/frontend/src/renderer/components/AIPanel/AIPanel.css @@ -0,0 +1,200 @@ +.ai-panel { + background: var(--bg-darker); + border-top: 1px solid var(--border-color); + display: flex; + flex-direction: column; + position: relative; + transition: height 0.2s ease; +} + +.ai-panel.maximized { + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + z-index: 100; +} + +.ai-panel.minimized { + height: 36px !important; +} + +.resize-handle { + position: absolute; + top: 0; + left: 0; + right: 0; + height: 4px; + cursor: ns-resize; + background: transparent; + z-index: 10; +} + +.resize-handle:hover { + background: var(--primary-color); +} + +.ai-panel-header { + height: 36px; + min-height: 36px; + display: flex; + align-items: center; + justify-content: space-between; + padding: 0 var(--spacing-md); + background: var(--bg-sidebar); + border-bottom: 1px solid var(--border-color); +} + +.ai-panel-title { + font-size: 12px; + font-weight: 500; + color: var(--text-secondary); +} + +.ai-panel-controls { + display: flex; + gap: var(--spacing-xs); +} + +.panel-control-btn { + width: 24px; + height: 24px; + display: flex; + align-items: center; + justify-content: center; + color: var(--text-muted); + border-radius: 4px; + transition: all 0.15s; +} + +.panel-control-btn:hover { + background: rgba(255, 255, 255, 0.1); + color: var(--text-primary); +} + +.ai-panel-content { + flex: 1; + display: flex; + flex-direction: column; + overflow: hidden; +} + +.ai-messages { + flex: 1; + overflow-y: auto; + padding: var(--spacing-md); + display: flex; + flex-direction: column; + gap: var(--spacing-md); +} + +.ai-message { + display: flex; + gap: var(--spacing-sm); + align-items: flex-start; +} + +.ai-message.user { + flex-direction: row-reverse; +} + +.message-avatar { + width: 28px; + height: 28px; + border-radius: 50%; + background: var(--bg-sidebar); + display: flex; + align-items: center; + justify-content: center; + font-size: 14px; + flex-shrink: 0; +} + +.message-content { + max-width: 80%; + padding: var(--spacing-sm) var(--spacing-md); + border-radius: 8px; + font-size: 13px; + line-height: 1.5; + white-space: pre-wrap; + word-break: break-word; +} + +.ai-message.ai .message-content { + background: var(--bg-sidebar); + color: var(--text-primary); +} + +.ai-message.user .message-content { + background: var(--primary-color); + color: white; +} + +.message-content.loading { + display: flex; + gap: 4px; + padding: var(--spacing-md); +} + +.loading-dot { + width: 8px; + height: 8px; + background: var(--text-muted); + border-radius: 50%; + animation: loadingBounce 1.4s infinite ease-in-out both; +} + +.loading-dot:nth-child(1) { + animation-delay: -0.32s; +} + +.loading-dot:nth-child(2) { + animation-delay: -0.16s; +} + +@keyframes loadingBounce { + + 0%, + 80%, + 100% { + transform: scale(0); + } + + 40% { + transform: scale(1); + } +} + +.ai-input-area { + display: flex; + gap: var(--spacing-sm); + padding: var(--spacing-sm) var(--spacing-md); + border-top: 1px solid var(--border-color); +} + +.ai-input { + flex: 1; + resize: none; + min-height: 40px; + max-height: 100px; +} + +.ai-send-btn { + padding: var(--spacing-sm) var(--spacing-md); + background: var(--primary-color); + color: white; + border-radius: 4px; + font-weight: 500; + transition: all 0.15s; + align-self: flex-end; +} + +.ai-send-btn:hover:not(:disabled) { + background: var(--primary-hover); +} + +.ai-send-btn:disabled { + opacity: 0.5; + cursor: not-allowed; +} diff --git a/frontend/src/renderer/components/AIPanel/AIPanel.tsx b/frontend/src/renderer/components/AIPanel/AIPanel.tsx new file mode 100644 index 0000000..51b2cc8 --- /dev/null +++ b/frontend/src/renderer/components/AIPanel/AIPanel.tsx @@ -0,0 +1,200 @@ +import React, { useState, useRef, useCallback } from 'react'; +import './AIPanel.css'; + +interface AIPanelProps { + height: number; + onHeightChange: (height: number) => void; + maximized: boolean; + onMaximizeChange: (maximized: boolean) => void; +} + +const AIPanel: React.FC = ({ + height, + onHeightChange, + maximized, + onMaximizeChange, +}) => { + const [isMinimized, setIsMinimized] = useState(false); + const [messages, setMessages] = useState<{ role: 'user' | 'ai'; content: string }[]>([ + { role: 'ai', content: '你好!我是 AI 助手,可以帮助你生成意图编制内容、检查内容完整性等。有什么需要帮助的吗?' }, + ]); + const [input, setInput] = useState(''); + const [isLoading, setIsLoading] = useState(false); + const panelRef = useRef(null); + const resizeRef = useRef(null); + + // 拖拽调整大小 + const handleMouseDown = useCallback((e: React.MouseEvent) => { + e.preventDefault(); + const startY = e.clientY; + const startHeight = height; + + const handleMouseMove = (e: MouseEvent) => { + const delta = startY - e.clientY; + const newHeight = Math.max(150, Math.min(600, startHeight + delta)); + onHeightChange(newHeight); + }; + + const handleMouseUp = () => { + document.removeEventListener('mousemove', handleMouseMove); + document.removeEventListener('mouseup', handleMouseUp); + }; + + document.addEventListener('mousemove', handleMouseMove); + document.addEventListener('mouseup', handleMouseUp); + }, [height, onHeightChange]); + + // 发送消息 + const handleSend = async () => { + if (!input.trim() || isLoading) return; + + const userMessage = input.trim(); + setMessages(prev => [...prev, { role: 'user', content: userMessage }]); + setInput(''); + setIsLoading(true); + + try { + const response = await fetch('http://localhost:8080/api/ai/generate', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ prompt: userMessage }), + }); + const data = await response.json(); + + if (data.success) { + setMessages(prev => [...prev, { role: 'ai', content: data.content }]); + } else { + setMessages(prev => [...prev, { role: 'ai', content: `错误: ${data.error || '请求失败'}` }]); + } + } catch (error) { + setMessages(prev => [...prev, { role: 'ai', content: '网络错误,请确保后端服务已启动。' }]); + } finally { + setIsLoading(false); + } + }; + + const handleKeyDown = (e: React.KeyboardEvent) => { + if (e.key === 'Enter' && !e.shiftKey) { + e.preventDefault(); + handleSend(); + } + }; + + // 切换最小化 + const toggleMinimize = () => { + if (maximized) { + onMaximizeChange(false); + } + setIsMinimized(!isMinimized); + }; + + // 切换最大化 + const toggleMaximize = () => { + if (isMinimized) { + setIsMinimized(false); + } + onMaximizeChange(!maximized); + }; + + const panelHeight = maximized ? '100%' : isMinimized ? 36 : height; + + return ( +
+ {/* 拖拽条 */} + {!maximized && !isMinimized && ( +
+ )} + + {/* 标题栏 */} +
+ AI 交互窗口 +
+ + +
+
+ + {/* 内容区 */} + {!isMinimized && ( +
+
+ {messages.map((msg, idx) => ( +
+
+ {msg.role === 'ai' ? '🤖' : '👤'} +
+
+ {msg.content} +
+
+ ))} + {isLoading && ( +
+
🤖
+
+ + + +
+
+ )} +
+
+