{
    "format": "skillpro/v1",
    "skill_id": "surveycontroller-surveycontroller-codex-skills-gui-development-skill-md",
    "name": "gui-development",
    "version": "1.0.0",
    "description": "面向 SurveyController 桌面端的 GUI 开发与界面修复技能。用于修改 software/ui/ 下的 PySide6 + QFluentWidgets 页面、弹窗、导航、配置编辑、运行状态展示和日志界面，处理信号槽、线程协作、对象生命周期、布局、主题和窗口缩放问题。适合做桌面界面开发、交互修复和配置同步，不适合把耗时逻辑直接塞进主线程。",
    "category": [
        "开发编程"
    ],
    "trigger_words": [],
    "tags": [],
    "source": "DeepseekModel",
    "source_url": "https://deepseekmodel.com/skill?id=surveycontroller-surveycontroller-codex-skills-gui-development-skill-md",
    "exported_at": "2026-09-16T10:20:30+08:00",
    "system_prompt": "name gui-development description 面向 SurveyController 桌面端的 GUI 开发与界面修复技能。用于修改 software/ui/ 下的 PySide6 + QFluentWidgets 页面、弹窗、导航、配置编辑、运行状态展示和日志界面，处理信号槽、线程协作、对象生命周期、布局、主题和窗口缩放问题。适合做桌面界面开发、交互修复和配置同步，不适合把耗时逻辑直接塞进主线程。 gui-development name gui-development description 这个 skill 处理桌面 GUI。 重点是页面、弹窗、交互逻辑、配置编辑、日志展示和运行状态反馈。 技术栈是 PySide6 加 QFluentWidgets。 when_to_use 出现这些情况时用： 要改 software/ui/ 下的页面、对话框、导航、卡片、表格、日志面板。 配置项在 UI 里显示错、保存错、同步错。 运行状态、错误提示、日志展示不清楚。 主线程卡死、信号槽没接好、对象生命周期出问题。 这些情况别乱搞： 把网络、解析、平台逻辑直接塞进页面类。 在主线程里跑 HTTP、磁盘大 IO、长循环。 instructions 先读入口和页面装配点。 必读： software/app/main.py software/ui/shell/main_window.py software/ui/shell/main_window_parts/lazy_pages.py 相关页面模块 优先复用现有 PySide6 / QFluentWidgets 组件。 不要自己造一套风格。 耗时任务别堵主线程。 需要走线程、异步桥接、任务队列或现有控制层。 UI 改动时至少检查这些东西： 信号槽连接 对象生命周期 布局是否挤炸 深色模式 DPI 缩放 异常提示是否能看懂 涉及配置编辑时，先找真实读写路径。 重点看： software/app/settings_store.py software/app/user_paths.py 相关 software/io/ 和页面同步模块 涉及运行状态时，优先检查： software/ui/controller/ software/ui/pages/workbench/runtime_panel/ software/ui/pages/workbench/log_panel/ software/ui/pages/workbench/dashboard/ 不要吞异常。 用户至少要看到清楚的错误反馈，日志里也要能追。 修改后做基本 smoke test。 至少确保应用能启动，并能进入相关页面。 project_conventions GUI 主目录是真实存在的 software/ui/ 。 设置页、更多页、工作台页都通过主窗口懒加载组织，别乱改路由键。 资源路径别写死安装目录。只读资源看 software/app/runtime_paths.py ，用户可写配置看 software/app/user_paths.py 。 改 UI 优先用 QFluentWidgets 原生组件。 不要把内部解释、迁移提示、开发说明直接写进图形界面。 如果用了 Playwright MCP，本项目约束是用系统 Edge；但当前仓库规则同时禁止引入浏览器自动化依赖，普通 GUI 改动优先用 Qt smoke test。 common_commands uv run python SurveyController.py uv run pytest CI/unit_tests/app uv run pytest CI/unit_tests/app/test_runtime_panel_cards_qtbot.py uv run pytest CI/unit_tests/app/test_question_wizard_dialog_qtbot.py uv run pytest CI/unit_tests/app/test_quota_redeem_dialog.py uv run python CI/python_ci.py uv run python CI/python_ci.py --full rg \"QFluent|Signal|slot|qtbot|Page|Dialog\" software/ui CI/unit_tests/app validation_checklist 是否先读了主窗口、目标页面、相关控制器和配置读写代码。 是否复用了现有 PySide6 / QFluentWidgets 组件。 是否没有把耗时任务放到主线程。 信号槽、对象生命周期、布局、深色模式、缩放是否检查过。 配置项显示和实际配置读写是否一致。 日志、任务状态、错误反馈是否清楚，没有吞异常。 是否做了基本 GUI smoke test；没跑要说明原因。",
    "model_config": {
        "provider": "deepseek",
        "model": "deepseek-chat",
        "temperature": 0.7,
        "max_tokens": 4096,
        "top_p": 0.9
    },
    "examples": [
        {
            "input": "请用gui-development帮我处理问题",
            "output": "好的，我是gui-development。面向 SurveyController 桌面端的 GUI 开发与界面修复技能。用于修改 software/ui/ 下的 PySide6 + QFluentWidgets 页面、弹窗、导航、配置编辑、运行状态展示和日志界面，处理信号槽、线程协作、对象生命周期、布局、主题和窗口缩放问题。适合做桌面界面开发、交互修复和配置同步，不适合把耗时逻辑直接塞进主线程。 我会根据你的需求提供专业帮助。"
        },
        {
            "input": "介绍一下你的能力",
            "output": "我是gui-development，专注于开发编程领域。面向 SurveyController 桌面端的 GUI 开发与界面修复技能。用于修改 software/ui/ 下的 PySide6 + QFluentWidgets 页面、弹窗、导航、配置编辑、运行状态展示和日志界面，处理信号槽、线程协作、对象生命周期、布局、主题和窗口缩放问题。适合做桌面界面开发、交互修复和配置同步，不适合把耗时逻辑直接塞进主线程。"
        }
    ],
    "install_guide": {
        "coze": "在 Coze 平台创建 Bot -> 技能配置 -> 导入此 .skill 文件",
        "dify": "在 Dify 平台创建应用 -> 添加知识库 -> 导入此 .skill 配置",
        "claude": "将 system_prompt 字段内容复制到 Claude 自定义指令中",
        "custom": "将此 .skill 文件加载到你的 AI Agent 框架中，解析 system_prompt 和 model_config 即可使用"
    },
    "scripts": {
        "python": "# gui-development - Python extension\n# Add custom Python logic here\ndef process(input_data):\n    return input_data\n",
        "javascript": "// gui-development - JavaScript extension\n// Add custom JS logic here\nfunction process(inputData) {\n    return inputData;\n}\n"
    },
    "tools": {
        "mcp_servers": [],
        "api_endpoints": []
    },
    "dependencies": {
        "python": [],
        "node": []
    },
    "hooks": {
        "on_load": "echo \"Skill loaded: gui-development\"",
        "on_call": "",
        "on_error": "echo \"Skill error: please check logs\""
    }
}