用途:把用户的图文问题描述自动整理成 GitHub Issue 草稿,并在用户明确要求“提交/发布/一键提交”时提交到固定仓库: https://github.com/iOfficeAI/AionUi
- 不修 bug,不读取仓库代码;只做“整理 +(可选)发布提交”。
- 目标仓库固定:
iOfficeAI/AionUi。 - 默认提交方式:Skill(本地脚本 + Playwright)。
- 用户显式要求 MCP,或 Skill 失败且用户仍坚持发布:切换 MCP(Chrome DevTools MCP)。
- Issue Draft(markdown,字段齐全)
- Publish Plan(说明将用 skill/mcp + 关键参数)
- 若用户明确要发布:输出“开始发布”,并在发布后输出 issue URL;否则最后问一句:
现在发布提交吗?
- 模板选择:用户明确“功能建议/需求/希望增加” → feature request;否则默认 bug report。
- 标题:中英双语(中文优先),一句话、短、明确。
- 附件:列出用户提供的截图/录屏/日志路径;本最简分支脚本不自动上传(需要上传请用 MCP 或提示用户手动上传)。
- 不编造事实:不能凭空补充版本号、平台、复现步骤等“事实性信息”。可以做结构化整理与措辞优化。
- 允许推测:若为了可读性需要补充“可能原因/可能范围/建议排查”,必须显式标注为 【推测】,并且不要把推测写入 work_order.json 的事实字段里。
- platform:若用户没说,先不追问,默认用
"auto"(由脚本在运行时推断并写回为模板可选值) - version:必填字段。尽量从用户描述/截图/日志中提取;提取不到则进行最小问询获取。
- 仅当用户明确要求“忽略版本/按最新版本/就填 latest 强行提交”时,才默认填
latest(并在 Draft 中标注 【推测/未确认】)
- 仅当用户明确要求“忽略版本/按最新版本/就填 latest 强行提交”时,才默认填
- bug_description:精炼描述(必填)
- steps_to_reproduce:编号步骤(必填)
- expected_behavior:期望结果(必填)
- actual_behavior:若用户未单独描述,默认同 bug_description
- additional_context:可选
- feature_description(必填)
- problem_statement(必填)
- proposed_solution(必填)
- feature_category:尽量命中模板 options;不确定选
Other - additional_context:可选
- 未明确发布:只输出草稿并确认是否发布。
- 明确发布:生成
work_order.json并调用 Skill。 - 只有在“阻塞必填信息完全缺失且无法合理默认”时才问 1~2 个问题(否则直接发布)。
- 发布前预览:在正式生成 work_order.json 前,先输出一次 Issue Draft + Publish Plan 作为预览给用户看:
- 用户明确“现在就提交/立刻发布”:预览后 直接触发 skill/mcp 提交(预览不是确认门槛)
- 用户明确“先预览/先别提交/我看一下再提交”:只输出预览并等待用户修改点,再触发提交
- Bug 的
version(必填):若无法从用户描述/截图中提取,先问 1 次版本号(例如“关于页版本号是多少?”)。- 若用户明确要求忽略版本或强行按最新提交 → 填
latest并标注 【推测/未确认】,继续提交
- 若用户明确要求忽略版本或强行按最新提交 → 填
- 复现步骤/期望:若用户描述太抽象导致无法写成可执行步骤/可验证期望,再追问 1 个关键问题。
- 默认:
submit_method = "skill" - 用户明确要求:
submit_method = "mcp"(即使 skill 可用也按用户要求走 MCP) - Skill 失败且用户仍要求发布:自动切到 MCP 完成提交(不要让用户在 skill/mcp 之间反复二选一)
- Skill(Playwright):启动独立的 Chromium 进程,user-data-dir 为
~/.config/AionUi/chromium_user_data/,与用户日常浏览器完全隔离,互不影响。提交完成后自动关闭整个浏览器进程。 - MCP(Chrome DevTools):通过 CDP 启动一个新的 Chrome 实例(非用户日常浏览器)。启动时自带一个
about:blank空白标签页,new_page会再开一个目标页面(共两个 tab)。用户可以看到操作过程。已知限制:close_page只能关闭目标标签页,about:blank和浏览器窗口本身会残留,需用户手动关闭。
- 无论走 Skill 还是 MCP,都先生成
work_order.json,作为统一的结构化数据源。 - 字段必须对齐
assets/templates/*.yml的 YAMLid;schema 见references/work_order_schema.md。 - 固定字段(总是生成):
owner_repo:iOfficeAI/AionUiproject_url:https://github.com/iOfficeAI/AionUiissue_type:bug或featuretitleattachments: 文件路径数组(可为空)issue_number:""issue_url:""
- Bug:
- 推荐
platform: "auto" version:必填。优先写入用户提供的真实版本号;若无法获取则最小问询;仅在用户明确要求忽略版本/按最新提交时才用latest(并在 Draft 中标注为 【推测/未确认】)
- 推荐
- Feature:
- 不要生成 bug-only 字段(例如
platform/version/actual_behavior)
- 不要生成 bug-only 字段(例如
work_order.json的issue_number/issue_url用于防止重复提交:- 若其中任一已存在,Skill 侧会直接跳过提交(除非显式传
--force)。 - Agent 在对话层也要避免把“已提交返回的 issue URL”当成新输入再次触发提交。
- 若其中任一已存在,Skill 侧会直接跳过提交(除非显式传
- 需要“再提交一次”(新 issue)时:
- 推荐:生成一个新的
work_order.json - 或者:清空旧
work_order.json的issue_number/issue_url,或在你明确知道后果时使用--force
- 推荐:生成一个新的
目标:在浏览器里完成 Issue Form 提交(不依赖本地 Playwright 脚本)。
- MCP 路径同样从
work_order.json读取字段值(Agent 应先生成 work_order.json,再逐字段填入浏览器)。 - 字段映射关系(work_order.json key → 表单 label):
- Bug:
title→ Title,platform→ Platform(下拉),version→ AionUi Version,bug_description→ Bug Description,steps_to_reproduce→ Steps to Reproduce,expected_behavior→ Expected Behavior,actual_behavior→ Actual Behavior,additional_context→ Additional Context - Feature:
title→ Title,feature_description→ Feature Description,problem_statement→ Problem Statement,proposed_solution→ Proposed Solution,feature_category→ Feature Category(下拉),additional_context→ Additional Context
- Bug:
- 打开:
{{project_url}}/issues/new?template=bug_report.yml(或feature_request.yml) - 未登录则提示用户在浏览器中完成 GitHub 登录,等待页面跳转回 Issue Form
- 等待表单加载完成(标志:出现 "Add a title" 输入框)
- 从
work_order.json读取各字段值,按上述映射逐个填入表单:- 文本字段:使用 fill 工具
- 下拉字段(Platform / Feature Category):先 click 打开下拉菜单,再 click 选中目标选项
- 校验必填非空 → 点击 Create 按钮
- 等待页面 URL 变为
/issues/\d+格式,确认提交成功 - 回传最终 issue URL,并写回
work_order.json的issue_number/issue_url - 提交成功后等待约 10 秒,让用户确认提交结果,然后关闭标签页(close_page)。注意:MCP 无法自动关闭浏览器窗口本身,需提示用户手动关闭残留的浏览器窗口
- Skill 失败:回传失败原因 + 本地
artifacts/路径(截图/HTML/run.log)。 - 用户仍坚持发布:切换 MCP 完成提交。