feat(bettergi): BetterGI 一条龙队列可视化配置 - #579
Conversation
BetterGI 鐢ㄦ埛缂栬緫椤电殑涓€鏉¢緳閰嶇疆鍖洪噸鏋勪负鍙鍖栭槦鍒楋細 - 宸︽爮闃熷垪鏀寔鎷栨嫿鎺掑簭銆佸惎鐢ㄥ紑鍏炽€佸彸閿Щ鍑轰笌涓€閿竻绌?- 娣诲姞閰嶇疆缁勬敮鎸佸€欓€夌偣鍑?鍒嗗彿鎵归噺杈撳叆锛屽彲閲嶅鍔犲叆锛堟瘡琛岀嫭绔嬪疄渚嬶級 - 鏂板銆屼綋鍔涗綔鎴樸€嶄笓椤归」锛氬惎鐢ㄦ椂鑷姩鍏抽棴骞跺喕缁撳埛鍙栫被瀹樻柟缁勶紝鍏抽棴鍚庢寜璁板繂鎭㈠ - 鍐呯疆/浣撳姏/鑷畾涔夐厤缃粍浠ャ€岄粯璁?涓撻」/鑷畾涔夈€嶅墠缂€ tag 鍖哄垎
…to feat/bettergi-adapter-resin-battle
- 队列行/详情/候选 tag 统一配色(默认=灰、专项=紫、自定义&JS=蓝、路径=绿,浅底深字) - 队列多选修复:Shift 区间选择以 uid 锚点,普通点击保留锚点 - 默认一条龙顺序调整并同步模板 TaskOrder/后端单一来源 - 体力作战冻结名单补充「自动幽境危战」 - 添加配置组弹窗输入改为标签输入(彩色气泡+回车/分号提交+未知名称拼写检查) - 新增任务设置:右栏按 BGI 一条龙 JSON 字段分组展示/编辑并写回 per-user 副本(含设置读写 API)
- yarn openapi 生成 BetterGIOneDragonSettingsIn/Out 模型与 BetterGiService 的类型化 get/save 方法 - 手写 settings composable 改为调用生成的 BetterGiService,消除旁路
- 自动秘境补 SundayEverySelectedValue / SundayWeeklySelectedValue(每日/每周模式的选择序号) - 每条内置龙右栏追加公共「完成后操作」CompletionAction(BGI 为全局卡,非任务专属) - 依据 BGI OneDragonFlowPage.xaml 核对字段归属(领奖树脂/分解圣遗物/奖励识别属 BGI 全局 config,不在一条龙 JSON,暂不接入)
- 首领讨伐「选择首领」改为二级连列弹窗(地区 → 首领 Boss), 首领候选按 BetterGI AutoBossData.CountryToBosses 分组(41 个,无至冬) - 「选择战斗策略」复用已有策略弹窗:顶部通用策略与右栏字段共用一套候选 - 讨伐目标字段顺序调整为:选择首领 → 切换队伍 → 战斗策略 - 设置面板支持 strategy/boss 字段类型(点击输入框弹窗单选) - 首领候选展示「首领名称-地区」,value 保持首领名语义
- 基于 BGI 全局 config.json 物化/还原幽境危战刷取策略与树脂次数设置 - 队列行启停开关、批量操作与标签展示细化 - 同步 res/version.json changelog
解决冲突: - frontend/src/i18n/locales/zh-CN.ts:4 处 BetterGI 文案保留本分支的可视化队列/独立配置新文案 - res/version.json:保留双方 changelog 条目
…into feat/bettergi-onedragon-config
更正说明此前评论把 审查结论需要修改后再合并。 本 PR 的 BetterGI 队列 UI 目前没有把拖拽排序和重复队列项写入后端执行模型;此外,新增 per-user 文件接口直接使用未经校验的用户 ID/配置名拼接路径,存在路径穿越和跨用户/跨脚本访问风险。 以下结论基于 PR 常规审查(
|
- 新增 OneDragon.Queue 持久化可视化队列(顺序/成员/同名重复实例),运行时按队列重建一条龙 TaskOrder,为空时保持旧行为 - 前端队列拖拽/添加/移除/清空落库,加载时优先恢复持久化队列 - per-user 接口统一校验 userId 归属(UUID + UserData)与 configName 路径边界,防越权与目录穿越 - 任务收尾关闭游戏改为直接强制结束,失败原因落日志并推送调度台(拒绝访问时给出权限指引) - 每周秘境数据源文档与实现对齐(仅官方 tp.json) - PR changelog 合并为一条,移除误提交的本地草稿文件
- 按最新后端 openapi 重新生成 src/api:OneDragon 模型新增 Queue 持久化队列字段 - BetterGI 部分接口 userId 改为必填(带默认值),秘境/配置组接口描述与实现对齐 - 新建用户默认表单补 Queue,与后端默认值一致(空队列回退旧顺序行为)
…lan 鐨?weeklyDomain/weeklyLeyLine 宓屽骞跺洖鏄捐繕鍘燂紙鍓嶇闆舵敼鍔級锛宮ain.js 鎸夊綋澶╂槦鏈熷彇鍊肩洿浼狅紝绉樺褰撳ぉ鏃犻厤缃垯璺宠繃锛涗慨澶嶇┖ Plan 鎴栦粎鏈?weekly 鏃?merge 涓㈠け鏁版嵁鐨?bug
- 修复右栏保存/回显端点把 configName 当组名传给 Plan 路由,导致每日/每周秘境、每日/每周地脉花的 StrategyName/leyLineDailyEnabled/team/country/周表键被静默丢弃:请求新增 groupName 字段,保存与回显均按内置组名路由 - 修复执行层 JS 读不到 Plan:manifest 声明 settings_ui(BGI 按 settings.json 字段白名单注入 jsScriptSettingsObject),Plan 以 JSON 字符串注入规避 .NET 对象包装;main.js 日志改走注入 logger(masLog),地脉花策略调用加存在性守卫 - 幽境危战右栏:标签改名「刷取设置」,队伍/策略优先级改为右栏优先、通用兜底(AutoProxy 物化顺序对调);执行层接入面板策略 strategyName - 首领讨伐右栏:「讨伐目标」改名「刷取设置」并并入原「战斗细节」四项 - 新用户空白默认:种子模板队列顺序与前端 ONE_DRAGON_GROUPS 对齐(尘歌壶提前),每周地脉花执行开关默认全关,每日地脉花缺省开启(回显与执行层缺省语义对齐),幽境面板缺失副本时返回固定标准默认(不再回退可能被污染的 BGI 现状)
…l process - _run_plan_combat fail_markers previously contained [ERR]/task-exec-exception, which set done_event immediately and finally force-killed BGI while it was still recovering and running remaining tasks. - _switch_account switch_group_fail had the same issue; fixed its misleading comment. - In BGI, [ERR]/task-exec-exception are per-task recoverable exceptions caught by TaskRunner (no rethrow); the config-group / one-dragon still reaches its done line. Align with _BGI_BUILTIN_FATAL (never treat [ERR] as fatal) and main check_log: keep only truly fatal markers (config-group task failure / task start failure / [FTL]); stalls covered by outer timeout.
… group - Plan / 鎵ц灞?now accept suffix-named steps (e.g. 鑷姩绉樺-鍓湰A) so the same combat type can run multiple times with different per-instance settings. - build_combat_steps no longer dedups by name; each enabled combat step (resolved to base name) is an independent instance carrying its own uid/settings. - one_dragon_plan: add _resolve_base_name (base-name normalization) used by validate_step_settings, merge/extract_rightbar_into_plan, is_combat_group, and the weekly struct helpers. - MASOneDragon/main.js: dispatchCombat / shouldRunToday / step routing resolve to base name, executing each suffixed instance with its own settings. - AutoProxy: _exclude now uses base names so suffixed combat groups are correctly filtered out of the native one-dragon run (no duplicate execution). - Remove TEMP PROBE block from main.js (verification deferred; probe must not enter repo).
- 前端队列与用户编辑页支持同一战斗组多实例独立保存与回显 - 执行层 main.js 按实例名分发到对应 Plan 步骤 - 修复 maxArtifactStar 跨组同步误建 base 幽境步骤的隐患 - res/version.json 补充用户可见 changelog
- 执行层排序支持队列条目 planUid 精确绑定 Plan 实例,同名多实例(自动秘境×3)的左栏拖拽顺序可逐实例生效;队列解析保留 planUid - 执行层超时改为空闲超时(日志静默 300s 判卡死),移除固定 900s 墙钟,多实例长任务不再被误杀 - 执行层失败不再中止任务:记录警告并继续一条龙日常,避免战斗异常连坐吞掉日常收益 - MAS_PLAN_FAIL / MAS_STEP_FAIL 纳入失败判定,执行层 JS 失败不再被「配置组执行结束」误判为成功 - 幽境危战按 BGI 官方 Param 源码修正:移除无效的 maxArtifactStar 透传(前端面板/后端白名单与映射/执行层),策略改为直接调用 setCombatStrategyPath(副作用写入 CombatScriptBagPath),改用无参构造保留全局默认策略 - 组开关保存失败时回滚本地状态并提示,消除界面与后端静默脱节
fastapi_mcp 的 resolve_schema_references 对互相 $ref 引用的模型会无限展开 (A→B→A…),递归约 1000 层即 RecursionError,导致整个后台初始化失败 (MainTimer / 通知管理器等后续服务全部跳过)。 - 加载 fastapi_mcp 后替换为带深度上限(96 层)的同逻辑实现, 超限的 $ref 原样保留,仅影响 MCP 工具 schema 展示完整度 - 同时替换 utils 与 convert 两处按名绑定的函数引用 - 移除启动脚本中的 AUTO_MAS_ENABLE_MCP=0,恢复 MCP 默认开启
- 路径 B 下把队列里出现的战斗组从原生一条龙副本剔除,队列开关同时管住执行层与原生一条龙两侧 - 原生副本已无启用任务时跳过启动原生一条龙的阶段,避免 BetterGI 空跑不退出、任务一直结束不了 - 保存用户配置时按队列清理 Plan 中不再被引用的战斗实例 - res/version.json 的 BetterGI 条目收敛为一条
…gon-config # Conflicts: # app/api/scripts.py # app/models/schema.py # app/task/BetterGI/ScriptConfig.py # frontend/src/api/services/Service.ts # frontend/src/i18n/locales/en-US.ts # frontend/src/i18n/locales/ja-JP.ts # frontend/src/i18n/locales/zh-CN.ts # res/version.json
- 合并 upstream/dev 时冲突区被 dev 的 ZZZ-OD 端点占据,补回 /bettergi/one-dragon/settings、/bettergi/one-dragon/plan/step-enabled、/bettergi/global-domain/settings、/bettergi/global-stygian/settings、/bettergi/domain-catalog、/bettergi/script-group/save - 前端 src/api 由 openapi 生成器基于本地后端重新生成,未手改生成文件
- /user/update 恢复「队列为唯一真相源」逻辑:保存队列时同步清理 Plan 中不再被引用的战斗实例 - /bettergi/one-dragon/custom-groups 恢复 userId 参数,用户独立配置下按 per-user 副本读取自定义组 - 前端对齐重新生成后的接口:修正一条龙步骤启用接口名、补齐 OneDragon 的 Plan 与 UseExecutionLayer 默认值 - src/api 由 openapi 生成器重新生成
CHANGELOG.md 是唯一手写来源,res/version.json 等由它生成。此前该条目被直接手改进 version.json,导致 CI「检查 CHANGELOG.md 与生成物一致」失败。现把条目补回 CHANGELOG.md 的 v5.5.0-beta.3 新增分类,并运行 scripts/changelog.py sync 重新生成 version.json,使检查通过。
BetterGI 用户配置面板(一条龙队列可视化、配置组设置、秘境选择器、方案配置) 在 frontend 中新增了一批 edit.bettergi* 翻译键,但三个语言包(zh-CN / en-US / ja-JP)此前均未补,导致界面直接显示原始 key 字符串。 - 补全 93 个缺失的 bettergi* 键(覆盖 BetterGIUserEdit / BettergiGroupProjectBody / BettergiDragonGroupSettings 三处组件用到的全部 edit.* 键,已验证三语言包均 0 缺失) - 修正英文值中一处未转义的单引号(bettergiDuplicateTip),避免 TS 语法错误 验证方式:脚本扫描三个 BetterGI 组件的全部 edit.* 键,三语言包均 0 缺失, 三个语言包括号配平正常。
主要改动
res/version.jsonBetterGI changelog 条目。校验
py_compile通过oxlint0 erroryarn typecheck通过