Skip to content

feat(BetterGI): 一条龙配置区文案统一为配置组并新增录制标签页 - #653

Merged
ClozyA merged 22 commits into
AUTO-MAS-Project:devfrom
TCddddd:feat/bettergi-onedragon-queue-opt
Sep 14, 2026
Merged

feat(BetterGI): 一条龙配置区文案统一为配置组并新增录制标签页#653
ClozyA merged 22 commits into
AUTO-MAS-Project:devfrom
TCddddd:feat/bettergi-onedragon-queue-opt

Conversation

@TCddddd

@TCddddd TCddddd commented Sep 10, 2026

Copy link
Copy Markdown
Contributor

概述

把 BetterGI 一条龙配置区的口径统一到「配置组」,并新增「录制」标签页,让 BetterGI 的键鼠脚本(KeyMouseScript)能像其他来源一样加入队列。

主要改动

  • 文案统一:「添加到一条龙」→「添加配置组」、「清空一条龙」→「清空」;按钮组改为「打开脚本仓库 / 打开脚本目录 / 打开路径目录」与「打开BetterGI / 打开录制目录 / 打开配置组目录」
  • 新增「录制」标签页:来源为 {RootPath}/User/KeyMouseScript,黄色标签,支持点击加入、Shift 区间多选与空目录提示
  • 后端新增 keyMouseScriptDir 目录解析、/bettergi/key-mouse-scripts 候选接口,并把 keymouse 纳入步骤来源白名单

Sourcery 摘要

通过支持可加入队列的键盘鼠标录制脚本,并统一相关术语,扩展 BetterGI 配置组管理功能。

新功能:

  • 添加“录制”选项卡,用于列出 BetterGI KeyMouseScript 录制文件并支持队列选择,包括范围选择和空目录提示。
  • 通过后端 API 提供 BetterGI 录制脚本候选项及录制目录信息。
  • 支持将键鼠录制脚本作为一条龙/配置组队列来源。

增强:

  • 统一 BetterGI 一条龙界面中围绕配置组、脚本、路径和录制内容的术语及目录操作。
  • 为所有受支持的语言添加录制队列条目的本地化标签和视觉样式。

杂项:

  • 更新 BetterGI 配置组和录制工作流变更对应的更新日志及项目版本。
Original summary in English

Sourcery 摘要

扩展 BetterGI 配置组管理功能,支持可加入队列的键鼠录制,并统一相关术语。

新功能:

  • 添加 BetterGI 录制标签页,用于列出 KeyMouseScript 录制内容并支持队列选择,包括范围选择和空目录提示。
  • 通过后端 API 提供 BetterGI 录制候选项和录制目录信息。
  • 支持将键鼠录制作为 BetterGI 队列的一等来源,并通过为每位用户生成的配置组执行。

Bug 修复:

  • 防止已加入队列的录制内容以重复的自定义配置组条目出现。
  • 确保已加入队列的录制内容包含可执行的 KeyMouse 项目,并继续显示在配置组项目编辑器中。

改进:

  • 在界面和支持的语言环境中,统一围绕配置组、脚本、路径和录制内容的 BetterGI 术语及目录操作。
  • 在 BetterGI 工作流中添加独立的录制标签、样式、只读项目展示和录制文件夹访问功能。

文档:

  • 在更新日志中记录 BetterGI 配置组术语更新和录制标签页支持。

杂项:

  • 更新 BetterGI 配置组和录制工作流变更对应的项目版本。
Original summary in English

Sourcery 摘要

统一 BetterGI 配置组术语,并在队列管理和执行过程中全面添加录制支持。

新功能:

  • 添加 BetterGI 录制选项卡,列出 KeyMouseScript 录制内容,并支持队列选择、范围选择以及空文件夹提示。
  • 通过后端 API 提供 BetterGI 录制候选项和录制目录信息。
  • 允许键盘和鼠标录制作为队列来源,与脚本、路径和配置组并列运行。

错误修复:

  • 防止队列中的录制内容以重复的自定义配置组条目显示。
  • 确保队列中的录制内容与其 KeyMouse 项目一起执行,并且仍可在配置组项目编辑器中查看。

改进:

  • 在受支持的语言环境中,围绕配置组、脚本、路径和录制内容统一 BetterGI 队列术语和目录操作。
  • 为录制条目显示专用样式,并采用只读的项目编辑行为。

文档:

  • 在更新日志中记录 BetterGI 配置组术语更新和录制选项卡支持。

日常维护:

  • 更新 BetterGI 配置组和录制工作流变更对应的项目版本。
Original summary in English

Sourcery 摘要

扩展 BetterGI 配置组队列管理,新增一流的键盘和鼠标录制支持,并统一相关术语。

新功能:

  • 新增 BetterGI 录制标签页,用于列出 KeyMouseScript 文件,并支持队列选择、范围选择和空目录提示。
  • 通过 BetterGI API 提供录制候选项和录制目录信息,并支持将录制内容作为可执行队列来源。

错误修复:

  • 防止已加入队列的录制内容以重复的自定义配置组形式出现,并确保它们与对应的 KeyMouse 项目一起执行。

增强功能:

  • 在支持的语言中,围绕配置组、脚本、路径和录制内容,统一 BetterGI 队列术语和目录操作相关表述。
  • 支持独立处理重复的自定义队列项,并在配置编辑器中以只读方式显示录制项目。
  • 改进对包含注释或格式较为宽松的脚本设置文件的兼容性。

文档:

  • 在变更日志中记录 BetterGI 配置组术语更新和录制标签页支持。

杂项:

  • 更新项目版本,以适配 BetterGI 配置组和录制工作流的变更。
Original summary in English

Sourcery 摘要

扩展 BetterGI 队列管理功能,支持可执行的键盘和鼠标录制,并统一配置组术语。

新功能:

  • 新增 BetterGI 录制选项卡,用于列出 KeyMouseScript 录制内容,支持队列选择和范围选择,并提供空目录状态。
  • 通过后端 API 提供 BetterGI 录制候选项和录制目录信息。
  • 支持将录制内容作为一等 BetterGI 队列来源,与脚本、路径和配置组并列运行。

错误修复:

  • 防止已加入队列的录制内容以重复的自定义配置组条目显示,并确保其与对应的 KeyMouse 项目一起执行。
  • 修复多个 BetterGI 执行工作流问题,包括直接控制执行层处理、首次使用时的账号切换,以及每日代理限制重置。

改进:

  • 在受支持的语言环境中,围绕配置组、脚本、路径和录制内容统一 BetterGI 队列术语及目录操作。
  • 支持按实例隔离的队列设置,并在配置组编辑器中以只读方式显示录制项目。
  • 改进对包含注释或格式较为宽松的脚本设置文件的兼容性。

文档:

  • 在变更日志中记录 BetterGI 配置组术语更新和录制选项卡支持。

杂项:

  • 更新项目版本,以适配 BetterGI 队列和录制工作流的变更。
Original summary in English

Sourcery 摘要

扩展 BetterGI 配置组队列管理,新增一流的键盘和鼠标录制支持,并统一相关术语。

新功能:

  • 添加 BetterGI 录制选项卡,用于列出 KeyMouseScript 录制内容,并支持队列选择、范围选择、空目录反馈以及访问录制文件夹。
  • 通过相应的 API 和配置组执行流程,支持将键盘和鼠标录制作为可执行的 BetterGI 队列来源。

错误修复:

  • 防止排队中的录制内容以重复的自定义配置组形式出现,并确保其与对应的 KeyMouse 项目一起执行。
  • 修复多个 BetterGI 执行流程问题,包括直接控制模式处理、首次使用时的账号切换以及每日代理限制重置。

改进:

  • 在界面和受支持的本地化语言中,统一围绕配置组、脚本、路径和录制内容的 BetterGI 术语。
  • 改进单实例队列设置、只读录制项目显示、配置组实例化,以及对带注释或格式较为宽松的脚本设置文件的兼容性。

文档:

  • 在更新日志中记录 BetterGI 配置组术语更新和录制选项卡支持。

杂项:

  • 更新项目版本,以适配 BetterGI 队列和录制流程的变更。
Original summary in English

Summary by Sourcery

Extend BetterGI configuration-group queue management with first-class keyboard-and-mouse recording support and unified terminology.

New Features:

  • Add a BetterGI recording tab that lists KeyMouseScript recordings and supports queue selection, range selection, empty-directory feedback, and recording-folder access.
  • Support keyboard-and-mouse recordings as executable BetterGI queue sources through the corresponding API and configuration-group execution flow.

Bug Fixes:

  • Prevent queued recordings from appearing as duplicate custom configuration groups and ensure they execute with their KeyMouse projects.
  • Fix several BetterGI execution workflow issues, including direct-control mode handling, first-use account switching, and daily proxy-limit resets.

Enhancements:

  • Standardize BetterGI terminology around configuration groups, scripts, paths, and recordings across the interface and supported locales.
  • Improve per-instance queue settings, read-only recording project display, configuration-group materialization, and compatibility with commented or loosely formatted script settings files.

Documentation:

  • Document the BetterGI configuration-group terminology updates and recording-tab support in the changelog.

Chores:

  • Update the project version for the BetterGI queue and recording workflow changes.

@sourcery-ai

sourcery-ai Bot commented Sep 10, 2026

Copy link
Copy Markdown

审查者指南

本 PR 将 BetterGI 一条龙配置区统一为“配置组”口径,并通过后端新增录制键鼠脚本扫描/API、扩展 keymouse 队列类型,配合前端录制标签页、选择交互、目录入口、黄色来源标识及多语言文案,使 KeyMouseScript 能像其他来源一样加入执行队列。

将 BetterGI 录制脚本添加到队列的时序图

sequenceDiagram
    participant User
    participant BetterGIUserEdit
    participant BetterGiService
    participant API as get_bettergi_key_mouse_scripts_api
    participant OneDragon as list_key_mouse_scripts

    User->>BetterGIUserEdit: 打开添加配置组对话框
    BetterGIUserEdit->>BetterGiService: getBettergiKeyMouseScriptsApiApiScriptsBettergiKeyMouseScriptsGet(scriptId)
    BetterGiService->>API: GET /bettergi/key-mouse-scripts
    API->>OneDragon: list_key_mouse_scripts(root)
    OneDragon-->>API: KeyMouseScript JSON 文件名
    API-->>BetterGiService: ComboBoxOut 候选项
    BetterGiService-->>BetterGIUserEdit: 录制候选项
    User->>BetterGIUserEdit: 点击或使用 Shift 选择录制脚本
    BetterGIUserEdit-->>BetterGIUserEdit: 将 keymouse 项添加到队列
Loading

文件级变更

变更 详情 文件
扩展 BetterGI 后端对录制键鼠脚本的目录解析、候选查询和队列类型支持。
  • 新增 KeyMouseScript 目录常量及实时扫描 JSON 脚本名的工具函数。
  • 新增录制脚本候选 API,并在目录信息响应中返回录制目录。
  • 将 keymouse 纳入一条龙步骤模型、解析逻辑和计划步骤白名单。
app/api/scripts.py
app/models/schema.py
app/task/BetterGI/tools/one_dragon.py
app/task/BetterGI/tools/one_dragon_plan.py
在 BetterGI 配置编辑界面新增录制标签页,使键鼠脚本可按现有来源加入一条龙队列。
  • 加载并展示 KeyMouseScript 候选,支持点击选择、Shift 区间多选、队列去重状态和空目录提示。
  • 为录制来源增加黄色标签样式及队列/候选展示类型映射。
  • 新增打开录制目录入口,并接入后端返回的目录路径。
frontend/src/views/EditView/User/BetterGIUserEdit.vue
统一 BetterGI 一条龙配置区的术语和目录操作文案,并补充多语言录制相关翻译。
  • 将添加、清空及配置组/路径/BetterGI 目录按钮改为新的口径。
  • 新增录制标签、来源类型和空目录提示的中英文、日文、中文文案。
frontend/src/i18n/locales/en-US.ts
frontend/src/i18n/locales/ja-JP.ts
frontend/src/i18n/locales/zh-CN.ts
记录本次 BetterGI 功能变更并更新版本资源。
  • 在变更日志中注明配置组文案统一和录制标签页能力。
  • 更新版本信息。
CHANGELOG.md
res/version.json

可能关联的 issue

  • #未知:PR 属于该 issue 中 BetterGI 专项适配和 BGI 计划能力的具体实现。

提示和命令

与 Sourcery 交互

  • 触发新的审查: 在 pull request 中评论 @sourcery-ai review
  • 继续讨论: 直接回复 Sourcery 的审查评论。
  • 从审查评论生成 GitHub issue: 回复审查评论,请 Sourcery 根据该评论创建 issue。你也可以在审查评论中回复 @sourcery-ai issue,以根据该评论创建 issue。
  • 生成 pull request 标题: 在 pull request 标题的任意位置写入 @sourcery-ai,即可随时生成标题。你也可以在 pull request 中评论 @sourcery-ai title,以随时生成或重新生成标题。
  • 生成 pull request 摘要: 在 pull request 正文的任意位置写入 @sourcery-ai summary,即可在指定位置随时生成 PR 摘要。你也可以在 pull request 中评论 @sourcery-ai summary,以随时生成或重新生成摘要。
  • 生成审查者指南: 在 pull request 中评论 @sourcery-ai guide,即可随时生成或重新生成审查者指南。
  • 解决所有 Sourcery 评论: 在 pull request 中评论 @sourcery-ai resolve,即可解决所有 Sourcery 评论。如果你已经处理完所有评论且不想再看到它们,这会很有用。
  • 忽略所有 Sourcery 审查: 在 pull request 中评论 @sourcery-ai dismiss,即可忽略所有现有的 Sourcery 审查。如果你想从新的审查开始,这尤其有用——别忘了评论 @sourcery-ai review 来触发新的审查!

自定义使用体验

访问你的控制面板以:

  • 启用或禁用审查功能,例如 Sourcery 生成的 pull request 摘要、审查者指南等。
  • 更改审查语言。
  • 添加、删除或编辑自定义审查说明。
  • 调整其他审查设置。

获取帮助

Original review guide in English

Reviewer's Guide

本 PR 将 BetterGI 一条龙配置区统一为“配置组”口径,并通过后端新增录制键鼠脚本扫描/API、扩展 keymouse 队列类型,配合前端录制标签页、选择交互、目录入口、黄色来源标识及多语言文案,使 KeyMouseScript 能像其他来源一样加入执行队列。

Sequence diagram for adding BetterGI recording scripts to the queue

sequenceDiagram
    participant User
    participant BetterGIUserEdit
    participant BetterGiService
    participant API as get_bettergi_key_mouse_scripts_api
    participant OneDragon as list_key_mouse_scripts

    User->>BetterGIUserEdit: Open add config group dialog
    BetterGIUserEdit->>BetterGiService: getBettergiKeyMouseScriptsApiApiScriptsBettergiKeyMouseScriptsGet(scriptId)
    BetterGiService->>API: GET /bettergi/key-mouse-scripts
    API->>OneDragon: list_key_mouse_scripts(root)
    OneDragon-->>API: KeyMouseScript JSON filenames
    API-->>BetterGiService: ComboBoxOut candidates
    BetterGiService-->>BetterGIUserEdit: Recording candidates
    User->>BetterGIUserEdit: Click or Shift-select recording scripts
    BetterGIUserEdit-->>BetterGIUserEdit: Add keymouse items to queue
Loading

File-Level Changes

Change Details Files
扩展 BetterGI 后端对录制键鼠脚本的目录解析、候选查询和队列类型支持。
  • 新增 KeyMouseScript 目录常量及实时扫描 JSON 脚本名的工具函数。
  • 新增录制脚本候选 API,并在目录信息响应中返回录制目录。
  • 将 keymouse 纳入一条龙步骤模型、解析逻辑和计划步骤白名单。
app/api/scripts.py
app/models/schema.py
app/task/BetterGI/tools/one_dragon.py
app/task/BetterGI/tools/one_dragon_plan.py
在 BetterGI 配置编辑界面新增录制标签页,使键鼠脚本可按现有来源加入一条龙队列。
  • 加载并展示 KeyMouseScript 候选,支持点击选择、Shift 区间多选、队列去重状态和空目录提示。
  • 为录制来源增加黄色标签样式及队列/候选展示类型映射。
  • 新增打开录制目录入口,并接入后端返回的目录路径。
frontend/src/views/EditView/User/BetterGIUserEdit.vue
统一 BetterGI 一条龙配置区的术语和目录操作文案,并补充多语言录制相关翻译。
  • 将添加、清空及配置组/路径/BetterGI 目录按钮改为新的口径。
  • 新增录制标签、来源类型和空目录提示的中英文、日文、中文文案。
frontend/src/i18n/locales/en-US.ts
frontend/src/i18n/locales/ja-JP.ts
frontend/src/i18n/locales/zh-CN.ts
记录本次 BetterGI 功能变更并更新版本资源。
  • 在变更日志中注明配置组文案统一和录制标签页能力。
  • 更新版本信息。
CHANGELOG.md
res/version.json

Possibly linked issues

  • #未知: PR属于该 issue 中 BetterGI 专项适配和 BGI 计划能力的具体实现。

Tips and commands

Interacting with Sourcery

  • Trigger a new review: Comment @sourcery-ai review on the pull request.
  • Continue discussions: Reply directly to Sourcery's review comments.
  • Generate a GitHub issue from a review comment: Ask Sourcery to create an
    issue from a review comment by replying to it. You can also reply to a
    review comment with @sourcery-ai issue to create an issue from it.
  • Generate a pull request title: Write @sourcery-ai anywhere in the pull
    request title to generate a title at any time. You can also comment
    @sourcery-ai title on the pull request to (re-)generate the title at any time.
  • Generate a pull request summary: Write @sourcery-ai summary anywhere in
    the pull request body to generate a PR summary at any time exactly where you
    want it. You can also comment @sourcery-ai summary on the pull request to
    (re-)generate the summary at any time.
  • Generate reviewer's guide: Comment @sourcery-ai guide on the pull
    request to (re-)generate the reviewer's guide at any time.
  • Resolve all Sourcery comments: Comment @sourcery-ai resolve on the
    pull request to resolve all Sourcery comments. Useful if you've already
    addressed all the comments and don't want to see them anymore.
  • Dismiss all Sourcery reviews: Comment @sourcery-ai dismiss on the pull
    request to dismiss all existing Sourcery reviews. Especially useful if you
    want to start fresh with a new review - don't forget to comment
    @sourcery-ai review to trigger a new review!

Customizing Your Experience

Access your dashboard to:

  • Enable or disable review features such as the Sourcery-generated pull request
    summary, the reviewer's guide, and others.
  • Change the review language.
  • Add, remove or edit custom review instructions.
  • Adjust other review settings.

Getting Help

@sourcery-ai sourcery-ai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

您好——我发现了 2 个问题

面向 AI Agent 的提示
请处理本次代码审查中的评论:

## 单独评论

### 评论 1
<location path="frontend/src/views/EditView/User/BetterGIUserEdit.vue" line_range="3173-3175" />
<code_context>
+const loadKeyMouseScripts = async () => {
+  try {
+    const resp =
+      await BetterGiService.getBettergiKeyMouseScriptsApiApiScriptsBettergiKeyMouseScriptsGet(
+        scriptId
+      )
+    keyMouseOptions.value = (resp.data || [])
+      .filter((item): item is ComboBoxItem & { label: string; value: string } =>
</code_context>
<issue_to_address>
**issue (bug_risk):** 前端引用了新添加的 `getBettergiKeyMouseScriptsApiApiScriptsBettergiKeyMouseScriptsGet` 服务方法和 `keyMouseScriptDir` 响应属性,但已提交的生成文件 `BetterGiService``BetterGIScriptDirsOut` 中都没有定义这两项,因此 TypeScript 构建会失败。

**建议修复:** 重新生成并提交前端 OpenAPI 服务和模型文件,或者手动添加该端点和响应属性。
</issue_to_address>

### 评论 2
<location path="frontend/src/views/EditView/User/BetterGIUserEdit.vue" line_range="3194-3196" />
<code_context>
 const buildCandidates = () => {
+  // 录制 标签页候选:KeyMouseScript 目录下的键鼠脚本(与其他标签页一样可加入队列)
+  addModal.keyMouseCandidates = keyMouseOptions.value.map(opt => ({
+    kind: 'keymouse' as const,
+    key: opt.value,
+  }))
   // addToGroupMode(配置组内添加脚本)只允许可执行的 JS 脚本目录与地图追踪路径;
   // 原有自定义组(custom)不写入配置组 projects,故 JS脚本 标签仅列 js 候选。
</code_context>
<issue_to_address>
**issue (broader_impact):** 新添加的录制行会以 `keymouse` 类型持久化,但 `readStoredQueue` 只保留 `js``pathing``scriptgroup`;重新打开编辑器后,它会进入 `resolveStoredRowKind`,并被恢复为 `custom`,从而丢失录制源的身份信息,导致后续保存队列时写入错误的类型。

**触发条件:** 用户重新加载或重新打开包含队列录制脚本的编辑器时。

**建议修复:**`readStoredQueue` 中保留 `rec.kind === 'keymouse'`,并在其他已存储行类型推断和序列化路径中加入对 keymouse 的支持。
</issue_to_address>

Sourcery 评估

需要人工审查。 请先处理 2 个发现的问题;此外,新的录制条目可以被添加到单条龙队列并持久化,而错误的类型或名称可能导致自动化运行错误的脚本,或无法运行。回滚会移除该功能,但已保存的队列条目可能仍然存在,需要修正或重新生成。

阻塞性发现:frontend/src/views/EditView/User/BetterGIUserEdit.vue:3175frontend/src/views/EditView/User/BetterGIUserEdit.vue:3196


Sourcery 对开源项目免费——如果您喜欢我们的审查结果,请考虑分享 ✨
Original comment in English

Hey - I've found 2 issues

Prompt for AI Agents
Please address the comments from this code review:

## Individual Comments

### Comment 1
<location path="frontend/src/views/EditView/User/BetterGIUserEdit.vue" line_range="3173-3175" />
<code_context>
+const loadKeyMouseScripts = async () => {
+  try {
+    const resp =
+      await BetterGiService.getBettergiKeyMouseScriptsApiApiScriptsBettergiKeyMouseScriptsGet(
+        scriptId
+      )
+    keyMouseOptions.value = (resp.data || [])
+      .filter((item): item is ComboBoxItem & { label: string; value: string } =>
</code_context>
<issue_to_address>
**issue (bug_risk):** The frontend references the newly added `getBettergiKeyMouseScriptsApiApiScriptsBettergiKeyMouseScriptsGet` service method and `keyMouseScriptDir` response property, but the committed generated `BetterGiService` and `BetterGIScriptDirsOut` files do not define either one, so the TypeScript build fails.

**Suggested fix:** Regenerate and commit the frontend OpenAPI service and model files, or add the endpoint and response property manually.
</issue_to_address>

### Comment 2
<location path="frontend/src/views/EditView/User/BetterGIUserEdit.vue" line_range="3194-3196" />
<code_context>
 const buildCandidates = () => {
+  // 录制 标签页候选:KeyMouseScript 目录下的键鼠脚本(与其他标签页一样可加入队列)
+  addModal.keyMouseCandidates = keyMouseOptions.value.map(opt => ({
+    kind: 'keymouse' as const,
+    key: opt.value,
+  }))
   // addToGroupMode(配置组内添加脚本)只允许可执行的 JS 脚本目录与地图追踪路径;
   // 原有自定义组(custom)不写入配置组 projects,故 JS脚本 标签仅列 js 候选。
</code_context>
<issue_to_address>
**issue (broader_impact):** A newly added recording row is persisted with kind `keymouse`, but `readStoredQueue` only preserves `js`, `pathing`, and `scriptgroup`; after reopening the editor it falls through to `resolveStoredRowKind` and is restored as `custom`, losing the recording source identity and causing a later queue save to write the wrong kind.

**Triggers:** When a user reloads or reopens an editor containing a recording script in the queue.

**Suggested fix:** Preserve `rec.kind === 'keymouse'` in `readStoredQueue`, and include keymouse in any other stored-row kind inference and serialization paths.
</issue_to_address>

Sourcery assessment

Needs a human reviewer. 2 findings to address first, and the new recording entries can be added to and persisted in a one-dragon queue, and an incorrect kind or name could make the automation run the wrong script or fail to run. Reverting removes the feature, but already-saved queue entries may remain and would need to be corrected or regenerated.

Blocking findings: frontend/src/views/EditView/User/BetterGIUserEdit.vue:3175, frontend/src/views/EditView/User/BetterGIUserEdit.vue:3196


Sourcery is free for open source - if you like our reviews please consider sharing them ✨

Comment thread frontend/src/views/EditView/User/BetterGIUserEdit.vue
Comment thread frontend/src/views/EditView/User/BetterGIUserEdit.vue
TCddddd and others added 8 commits September 10, 2026 21:09
- 四类自定义项(配置组/录制/脚本/路径)统一物化为 MAS-{短id}-自定义配置组{N},前后名彻底解耦
- 新增自定义项执行层:经 --startGroups 逐个直连执行物化组,并从原生槽位剔除避免重复执行
- 修复含路径分隔符的路线名触发「配置组名非法」导致任务异常中断
- 修复 Pathing 项目 name/folderName 重复拼接导致路线文件找不到(DirectoryNotFoundException)
- 引用 BGI 已有配置组时以实配为底稿物化,四类行为一致
- 自定义组多实例:按「组名-{行uid}」区分,开关与设置各自独立(对齐战斗组实例机制)
- 物化改为逐 uid 进行(不再按名去重),同名多实例各自生成独立配置组
- 内置组不写实例名:BGI 只认内置基名,写实例名会导致任务不可识别与重复执行
- 右栏设置按实例名存 per-user 副本,非首实例未编辑时继承基名内容
- 修复含路径分隔符的路线名触发「配置组名非法」导致任务异常中断
- 修复 Pathing 项目 name/folderName 均填完整路径导致路线文件找不到
- 修复 settings.json 含 // 与 /* *\/ 注释时解析失败致设置项全空(JSONC 容错)
- 修复多选项以全角逗号存储时已存值无法回显;复选框字符串值误判为已勾选
- 控件类型改为按结构推断(有 options 出下拉、default 为布尔出开关),不再只认字面量
新用户无持久化队列时 initDragonList 走 else 分支从内置组重建行,但未回显
Plan 启用态,导致战斗项恒为默认开启、关闭后刷新即回弹;手动加一项使队列
非空后走 if 分支才会正确显示(即此 bug 的表象)。

在 else 分支补充与 readStoredQueue 一致的回显:战斗组按步骤名查 Plan 启用态,
自定义组缺省按管理表回退。
- 直控模式(非用户独立配置)下禁用执行层与自定义项执行层,只按所选实配名裸跑 BGI 一条龙,避免残留配置触发路径 B 执行层。
- 一条龙名称输入框的 @change 未同步回 formData,导致直控模式下名称改不动。
- 切换账号脚本本地缺失(首次使用/误删)时临时开启「命令行运行前同步更新」,修复首次启动切号失败。
- 单日代理次数的跨日重置从 main_task 前移到 check 入口,修复昨日跑满上限的用户次日被永久跳过(对齐 ZzzOd)。
@1w1w11w1

Copy link
Copy Markdown
Contributor

下面按功能把 BetterGI 模块现状与项目专项适配规范(.agents/skills/mas-script-specialized-adapter/references/blackbox-boundary.md)的冲突逐条列出,供参考。需要说明的是:这些做法在模块里已经存在一段时间,本 PR 沿用了同一套实现,不是本 PR 引入的方向。

1. 一条龙编排(Plan / 队列 / CustomGroups / 右栏字段映射)

  • 现状:MAS 侧维护一套 {kind, uid, settings} 计划模型,并用字段映射表 + weekly 嵌套重组落到 BGI。
  • 上游:Core/Config/OneDragonFlowConfig.cs 本身就是这套结构——TaskEnabledList / TaskOrder / TaskDefinitions(注释写明「用于支持同名任务重复添加」),PartyName / DomainName / WeeklyDomainEnabled / AutoBoss* / DailyRewardPartyName 等任务参数也在同一文件里。
  • 冲突:规范要求上游已有的能力只复用、不重建;「同一任务多实例」并不是上游缺失的能力。

2. 路径 B 自编排执行层

  • 现状:res/templates/BetterGI/MASOneDragon/main.js 自排顺序、按星期分发、调用 dispatcher.runAutoXxxTask,配合 MAS一条龙 配置组与 MAS_STEP_* / MAS_PLAN_* 标记判定成败。
  • 上游:配置组本身就是调度载体(Core/Script/Group/ScriptGroup.cs 类注释「调度器 配置组」),ScriptGroupProject.Schedule 已支持执行周期(非枚举值即 Cron);判定面是 OneDragonFlowViewModel 的收尾行。
  • 冲突:执行编排与成败判定都落在 MAS 侧,而上游已经具备;此外 JS 执行 API 未对外文档化(Docs/api/README.md 为「暂无」),属于依赖未文档化的实现。

3. 配置组构造

  • 现状:_default_script_group_config() 复刻了上游 PathingPartyConfig 的字段集。
  • 上游:Core/Script/Group/ScriptGroupConfig.cs 实际只有 PathingConfig / ShellConfig / EnableShellConfig,默认值由 C# new() 兜底。
  • 冲突:在上游私有格式之上维护了一份默认值模板,上游增字段时不会报错,只会静默漂移。

4. per-user 物化与命名

  • 现状:ensure_keymouse_groups() / materialize_user_script_groups() 生成 MAS-{短id}-… 副本并改写一条龙引用。
  • 参照:MAA / M9A 是 data/{script}/{uid}/ConfigFile 存档 + 运行前注入、结束按基线 diff 回写(MAA/AutoProxy.pyM9A/AutoProxy.py)。
  • 冲突:MAS 自建了一套实例命名与引用改写规则。

5. 右栏任务设置面板

  • 现状:MAS 侧再次暴露了上游的原生任务参数。
  • 冲突:与规范的推进顺序冲突——用户的操作步骤没有减少,相当于把上游配置面板搬了一份,并且字段会随后续版本漂移。

6. 队列来源与周期语义(本 PR 改动集中处)

  • 现状:StepKind 增加 keymouseCUSTOM_EXEC_KINDS 扩到 js/pathing/scriptgroup/keymouse,沿用第 1、2 条的模型。
  • 冲突:ScriptGroupProject.Schedule 已有执行周期语义;队列来源类型属于 MAS 自建模型,会随上游扩展持续跟进。

7. 上游私有数据的读写

  • 现状:scan_domain_catalog() 解析 tp.json 建立秘境目录;全局 config.json 叶子直写(队伍/策略/秘境/幽境段),运行结束后还原。
  • 冲突:前者读取上游资源文件内部结构,按规范需要走「例外」条件评估;后者宜收缩到最少字段,优先由上游 GUI 承载。

TCddddd and others added 11 commits September 13, 2026 09:46
BetterGI 一条龙「添加配置组」弹窗的「JS脚本」标签页按真实来源归类,
仅 custom 来源配置组入列,已加入一条龙的路径与录制项不再误显示。
打开「添加配置组」弹窗会把路径/录制名误写入 OneDragon.CustomGroups,
并被 appendCustomRows 监听器当成自定义配置组自动补进一条龙队列;
addToDragon 不再把路径/录制写入 CustomGroups,initDragonList 与
appendCustomRows 仅镜像真实 custom 来源。
打开弹窗时 loadCustomGroupsFromBettergi() 会把 BetterGI 现有自定义组直接合并进管理表,触发监听器把整批组自动塞进一条龙队列。现改为仅作弹窗候选展示(JS脚本 标签页),用户显式确认才写入管理表并入队。

loadUser / 首次开启总开关 仍按需合并,属有意加载行为,保持不变。
one_dragon_plan.py 第 49 行用 Literal[...] 定义类型别名 StepKind,但仅从 typing 导入了 Any,未导入 Literal。该赋值在模块加载时即求值,导致导入模块时抛 NameError,编辑页点击配置组(如默认配置组)触发的 API 请求失败。

补充 `from typing import Literal` 并登记 CHANGELOG。
仅对 kind=scriptgroup 的配置组落地(用户确认先做 A):
- 右侧栏项目编辑器工具栏新增「清空」按钮,带二次确认,一键移除当前配置组全部脚本项目并落库(复用 persistProjects)。
- 「添加脚本」此前已复用「添加配置组」弹窗:addToGroupMode 冻结「配置组」标签、仅 JS脚本/地图追踪/录制 三标签可加入、所选项依次追加到脚本队列末尾,本次无需改动。
- clearProjects 经 BettergiGroupProjectBody / BettergiGroupProjectEditor 两级 defineExpose 透出。
- 补充中/英/日 i18n 文案,登记 CHANGELOG。
将「添加脚本 / 移除脚本 / 清空」工具栏从仅 scriptgroup 扩展到录制(keymouse) 类真实配置组:
- BettergiGroupProjectBody 放宽 isKeyMouse 只读限制(selectable、工具栏 v-if、行点击多选均放开),keymouse 与 scriptgroup 同样可编辑增删清空。
- openAddScriptToGroup 允许 sel.kind==='keymouse' 打开复用弹窗(冻结配置组标签、仅 JS脚本/地图追踪/录制 可加入)。
- js/路径 为独立单脚本、无对应 ScriptGroup json,维持原只读单项目展示,不开放工具栏(避免写入不存在的配置组破坏数据)。
- 登记 CHANGELOG。
js/路径 以 per-user ScriptGroup 副本充当可编辑配置组,复用既有的「添加脚本 / 移除脚本 / 清空」:
- BettergiGroupProjectBody 的 isScriptGroup 扩展含 js/pathing(与 scriptgroup/keymouse 同视为可编辑配置组)。
- reload() 对 js/pathing 改调详情 API;无 per-user 副本时合成一个带 type/status/schedule 的可保存单项目(pathing 按相对路径解析 folderName/name,与 toScriptGroupProjectRow 一致)。
- openAddScriptToGroup 放行 js/pathing(弹窗冻结配置组标签、JS脚本/地图追踪/录制 三标签可加入)。
- 后端 get/save script-group 走 per-user 副本、运行时 materialize_user_script_groups 对四类一视同仁,故无需改后端、无需切换队列 kind:未编辑的 js/路径 仍按独立单脚本执行,编辑后即落盘多项目配置组由运行时物化。
- 登记 CHANGELOG。
未编辑的独立 JS 脚本或地图追踪路线误点「清空脚本」会被清空为不执行任何内容的空组;现这类独立项在加入其它脚本(成为真正配置组)前禁用清空与移除,仅「添加脚本」可将其纳入配置组。
TCddddd and others added 2 commits September 14, 2026 19:13
- 撤回 CHANGELOG.md 与 res/version.json 的改动:普通 PR 不得改这两个生成物,它们只由发版 PR 更新;顺带消除合并 dev 时撞出的重复「### 修复」小节
- 新增 changelog.d/653.feat.md:把本 PR 的用户可见改动概括为一句
@ClozyA
ClozyA merged commit 61e83e5 into AUTO-MAS-Project:dev Sep 14, 2026
3 checks passed
ClozyA pushed a commit that referenced this pull request Sep 14, 2026
## 概述

BetterGI 专项新增「队伍配置」:可在「任务配置」下方为不同战斗场景分别指定队伍与战斗策略,战斗任务运行时按当前场景自动选用对应队伍。

## 主要改动

- 新增「队伍配置」区域,可按自动秘境 / 自动地脉花 / 自动首领讨伐三类场景分别指派队伍与战斗策略
- 队伍条目支持排序、启用与停用、复制与删除,并可为每条填写备注
- 队伍与策略候选取自脚本自身的配置,战斗时按当前场景自动选用;留空则沿用原有取值链(右栏 per-任务 → 顶部通用队伍)

## 说明

本分支 stacked 在 #653 之上(一条龙配置区文案统一为配置组、新增录制标签页)。#653 合并后本 PR
会自动收窄为「队伍配置」,当前 diff 中的其余部分即 #653 的内容。

## Sourcery 摘要

为 BetterGI 增加可按战斗场景自动选择队伍与战斗策略的配置能力。

新功能:
- 为 BetterGI 增加按自动秘境、自动地脉花和自动首领讨伐场景配置队伍及战斗策略的功能。
- 提供队伍配置管理界面,支持启停、排序、复制、删除、备注和场景条件编辑。
- 在战斗运行时根据实际场景自动匹配队伍,并在多个队伍命中时随机选择且保持本次运行结果稳定。

增强功能:
- 将场景选中的队伍和策略提升为高于任务及每周配置的运行时优先级,同时保留原有配置作为未命中时的回退链。
- 增加 BetterGI 自动战斗策略目录的路径解析和打开入口,并完善相关多语言文案。

测试:
- 新增队伍场景解析、精确匹配、周配置还原、禁用过滤、随机选择和运行时覆盖等测试。

<details>
<summary>Original summary in English</summary>

## Summary by Sourcery

为 BetterGI 增加可按战斗场景自动选择队伍与战斗策略的配置能力。

New Features:
- 为 BetterGI 增加按自动秘境、自动地脉花和自动首领讨伐场景配置队伍及战斗策略的功能。
- 提供队伍配置管理界面,支持启停、排序、复制、删除、备注和场景条件编辑。
- 在战斗运行时根据实际场景自动匹配队伍,并在多个队伍命中时随机选择且保持本次运行结果稳定。

Enhancements:
- 将场景选中的队伍和策略提升为高于任务及每周配置的运行时优先级,同时保留原有配置作为未命中时的回退链。
- 增加 BetterGI 自动战斗策略目录的路径解析和打开入口,并完善相关多语言文案。

Tests:
- 新增队伍场景解析、精确匹配、周配置还原、禁用过滤、随机选择和运行时覆盖等测试。

</details>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants