Files
chromebox_10th_audio_driver/scripts/render_bmad_help_zh_cn.py
2026-04-04 20:52:05 +08:00

307 lines
14 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env python3
# 根据 _bmad/_config/bmad-help.csv 与下行中文说明表,生成仓库根目录 bmad-help.zh-CN.md
from __future__ import annotations
import csv
from pathlib import Path
REPO = Path(__file__).resolve().parents[1]
CSV_PATH = REPO / "_bmad" / "_config" / "bmad-help.csv"
OUT_PATH = REPO / "bmad-help.zh-CN.md"
MODULE_ZH = {
"BMad Builder": "BMad 构建器",
"BMad Method": "BMad 方法",
"Core": "核心",
"Creative Intelligence Suite": "创意智能套件CIS",
"Game Dev Studio": "游戏开发工作室GDS",
"Test Architecture Enterprise": "测试架构企业版TEA",
"Web Design Studio": "网页设计工作室WDS",
}
PHASE_ZH = {
"anytime": "随时",
"1-analysis": "阶段 1 · 分析",
"2-planning": "阶段 2 · 规划",
"3-solutioning": "阶段 3 · 方案设计",
"4-implementation": "阶段 4 · 实现",
"0-learning": "阶段 0 · 学习",
"1-preproduction": "前期制作",
"2-design": "设计",
"3-technical": "技术",
"4-production": "制作",
"gametest": "游戏测试",
"0-wds-pitch": "WDS · 宣讲/对齐",
"0-wds-agents": "WDS · 唤醒代理",
"1-wds-strategy": "WDS · 策略",
"2-wds-design": "WDS · 设计",
"3-wds-build": "WDS · 构建/验证",
}
# 与 CSV 行顺序一致(共 114 行对应「sequence」列的中文说明空原文由脚本行号对应空序列行
ZH_BY_ROW = [
"通过对话式梳理,创建、编辑或重建 Agent 技能。",
"对既有 Agent 做质量分析:结构、内聚、提示词工艺与改进空间。",
"安装或更新 BMad Builder 模块配置与帮助条目。",
"头脑风暴并规划 BMad 模块:创意、架构与构建计划。",
"将模块基础设施脚手架化为可安装的 BMad 模块技能。",
"检查模块结构是否完整、准确,且能力均已正确注册。",
"创建、编辑或重建工作流或工具型技能。",
"对既有工作流/技能做质量分析:结构、效率与改进空间。",
"将任意技能转换为符合 BMad 的成果导向形态,并生成前后对比 HTML 报告。",
"详细描述需求,由代理按文档最佳实践撰写;可多轮对话并子流程做调研/审阅。",
"若发现文档惯例缺失,把你的偏好写入代理记忆中的 documentation-standards.md。",
"根据描述生成 Mermaid 图;未指定类型时会建议合适的图类。",
"对照文档规范与最佳实践审查指定文档,按优先级给出可执行的改进建议。",
"为复杂概念撰写清晰技术说明,附示例与图示。",
"专家引导,使用一种或多种技法进行项目头脑风暴。",
"确保 PRD、UX、架构与 Epic/Story 彼此对齐。",
"故事循环:若有问题退回 DS通过后进入下一 CS或 Epic 完成时走 ER。",
"在重大变更时纠偏:可能建议重来、更新 PRD、重做架构/冲刺规划或修正 Epic 与 Story。",
"引导式产出技术决策文档(架构)。",
"在架构文档CA之后创建 Epic 与用户故事。",
"专家引导完成产品需求文档PRD",
"故事循环起点:准备冲刺计划中「下一个」待做 Story或指定 Epic/Story。",
"在开发开始前校验 Story 是否就绪、完整。",
"落实 UX 方案;若项目以 UI 为主,强烈建议使用。",
"故事循环:执行 Story 实现与测试,经 CR如需修复回到 DS。",
"分析现有项目并产出可用文档。",
"行业领域深度研究、专业术语与知识沉淀。",
"在通过 PRD 校验流程后,编辑并改进指定路径的 PRD。",
"扫描代码库生成精简、面向 LLM 的 project-context.md棕地项目尤其重要。",
"市场、竞品、客户需求与趋势分析。",
"引导式厘清产品创意与核心价值。",
"为已实现代码生成自动化 API 与 E2E 测试;非代码评审或 Story 校验(请用 CR",
"统一「意图进、代码出」:澄清、实现、审阅与交付展示。",
"可选:在 Epic 结束时回顾成果与经验,规划下一 Epic重大问题考虑走 CC。",
"启动实现阶段:生成实现代理将按序执行的冲刺计划。",
"随时总结 Sprint 状态并路由到下一工作流。",
"技术可行性、架构选项与实现路径研究。",
"在创建 PRDCP之后校验 PRD 质量。",
"在创意早期或思路卡住时做头脑风暴。",
"生成节省 token 的蒸馏文,保留供下游 LLM 使用的关键信息。",
"成稿后润色正文表达。",
"当文档由多段子流程拼成或结构需加强时,做结构性编辑审阅。",
"判断当前所处 BMad 流程位置并回答问题;推荐下一步技能与调用方式。",
"在不加载全部文件的前提下为目录生成/更新索引,便于掌握文档地图。",
"编排多代理/多视角讨论与协作。",
"在定稿前做对抗性质量审查;其他模块的代码审也可自动调用,亦适用于文档。",
"与对抗审搭配,从边界场景做正交补充,重方法而非「挑刺态度」。",
"当单份文档过大(常为 >500 行)时拆分为可管理片段。",
"用一种或多种技法主持头脑风暴会话。",
"以同理心驱动的人本设计流程指导。",
"识别颠覆机会并设计商业模式创新。",
"运用系统化问题解决方法拆解复杂挑战。",
"用成熟叙事框架与技巧撰写故事/叙述。",
"快速游戏原型,验证机制与创意。",
"在游戏语境下主持头脑风暴。",
"在投产前确保 GDD、UX、架构与 Epic/Story 对齐。",
"对标记为「待评审」的 Story 做干净上下文的 QA 代码审查。",
"游戏开发冲刺偏离路线时进行纠偏。",
"依据 GDD 需求创建 Epic 与 Story 列表,作为开发规格驱动。",
"交互式游戏简报,引导用户明确游戏愿景。",
"撰写游戏设计文档 GDD机制、系统、进度与实现指引。",
"为剧情向游戏撰写叙事文档:结构、人物弧与世界观。",
"从 GDD 或从零撰写 PRD供 bmad-assist 等外部工具使用。",
"为开发代理准备上下文充分的 Story。",
"落实游戏 UX/UI若 UI 是核心,强烈建议使用。",
"执行 Dev Story按任务与测试实现。",
"分析现有游戏项目并产出文档。",
"游戏产业领域深度研究与术语沉淀。",
"搭建 E2E 测试基础设施脚手架。",
"改进并增强既有 PRD。",
"产出可伸缩游戏架构:引擎、系统、网络与技术设计。",
"生成适配所选智能体工具一致性的 project-context.md。",
"游戏市场、竞品与玩家需求分析。",
"设计性能测试策略。",
"撰写结构化试玩/测试计划。",
"兼顾游戏特性的灵活开发流程。",
"实验性一体化快捷流:单工作流内完成澄清、计划、实现、审阅与展示。",
"小需求、小改动、简单应用/工具,无需冗长规划。",
"在游戏开发 Epic 完成后组织团队回顾。",
"由 Epic 文件生成或更新 sprint-status.yaml。",
"查看冲刺进度、暴露风险并给出下一步行动建议。",
"游戏引擎选项与实现路径的技术可行性研究。",
"生成自动化游戏测试。",
"设计覆盖流程与质量要求的游戏测试场景。",
"为 Unity / Unreal / Godot 等项目初始化游戏测试框架架构。",
"评审测试质量与覆盖。",
"按外部工具兼容标准校验 PRD。",
"TEA 学院:通过 7 次课讲授测试基础(含进度与证书相关产出)。",
"生成失败用例TDD 红灯阶段)。",
"扩展自动化测试覆盖。",
"配置 CI/CD 质量流水线。",
"初始化生产级测试框架脚手架。",
"非功能需求NFR评估。",
"基于风险的测试规划。",
"质量审计0100 分制)。",
"覆盖度可追溯与质量门禁决策。",
"带设计日志与浏览器验证的迭代「构建—验证」循环。",
"干系人共识 pitch 与服务协议;若做自有产品可跳过。",
"详细规格前的快速视觉草图探索;直接场景可跳过。",
"逐页逐元素记录设计决策,开发可直接据此实现。",
"校验规格完整并打包为 DD yaml供开发交接。",
"管理组件库与设计令牌;设计系统模式为「无」时跳过。",
"第 34 阶段 UX 设计师代理 Freya检查前置条件并给出下一步。",
"从规格抽取可复用模式为组件定义;无设计系统时跳过。",
"治理代理 Idun访谈组织以配置 Agent Space 与权限模型。",
"以「人设 + 目标 + 结果」定义用户旅程,并与触发图驱动力关联。",
"平台、设备、集成与约束等技术边界;简单落地页可跳过。",
"持续改进:反馈 → 触发图 → 规格 → 代码 → 验证。",
"定义产品愿景、定位与成功标准,设计决策应可追溯至此。",
"第 12 阶段战略分析师代理 Saga扫描仓库并建议下一步。",
"跨界面串联用户旅程与入口、过渡、异常路径;简单场景可跳过。",
"将业务目标映射到用户心理:人设、功能与驱动力打分。",
"在真实用户环境中做可用性测试与回顾式出声思考。",
"将规格转为带样式的 HTML 原型,可与 Figma 往返。",
]
def _is_arg_cell(s: str) -> bool:
"""CSV 部分行在 phase 前插入了 [path] / {-H:...} 等参数列。"""
if not s:
return False
if s == "[path]":
return True
if s.startswith("{-H") or s.startswith("{--"):
return True
if s.startswith("{description:"):
return True
return False
def phase_token(r: list[str]) -> str:
if r[5]:
return r[7] or ""
if _is_arg_cell(r[6] or ""):
return r[7] or ""
return r[6] or ""
def phase_display(r: list[str]) -> str:
p = phase_token(r)
if not p or p in ("true", "false"):
return ""
return PHASE_ZH.get(p, p)
def prereq_display(r: list[str]) -> str:
if r[5]:
cand = r[12]
elif _is_arg_cell(r[6] or ""):
cand = r[8] or ""
else:
cand = r[7] or ""
if not cand or cand in ("true", "false"):
return ""
return cand
def required_gate(r: list[str]) -> str:
if r[5]:
return r[13]
if _is_arg_cell(r[6] or ""):
return r[13]
return r[12]
def output_display(r: list[str]) -> str:
if r[5]:
loc, out = r[14], r[15]
elif _is_arg_cell(r[6] or ""):
loc, out = r[14], r[15]
else:
loc, out = r[13], r[14]
parts = [x.replace("|", " · ") for x in (loc, out) if x]
return " / ".join(parts) if parts else ""
def main() -> None:
with CSV_PATH.open(newline="", encoding="utf-8") as f:
rows = list(csv.reader(f))[1:]
if len(rows) != len(ZH_BY_ROW):
raise SystemExit(f"行数不匹配: CSV {len(rows)} vs ZH {len(ZH_BY_ROW)}")
by_mod: dict[str, list[list[str]]] = {}
for r in rows:
by_mod.setdefault(r[0], []).append(r)
lines: list[str] = [
"# BMad 帮助目录(中文版)",
"",
"本文档由 [`_bmad/_config/bmad-help.csv`](_bmad/_config/bmad-help.csv) 翻译并整理,便于中文读者检索 **菜单码**、**技能** 与用途。",
"",
"技能调用方式(斜杠命令 / 自然语言等)以本机 `npx bmad-method install` 与 Cursor 集成为准。",
"",
"## 表列说明",
"",
"| 列 | 含义 |",
"| --- | --- |",
"| **码** | 菜单快捷码(不同模块下可能重复,以技能名列区分) |",
"| **显示名称** | CSV 英文显示名(与上游一致,便于对照) |",
"| **技能** | 技能标识 / 工作流名 |",
"| **说明** | 对「sequence」列的中文释义 |",
"| **阶段** | 工作流阶段或触发时机(`anytime` 等为随时) |",
"| **前置** | 建议先完成的技能或条件CSV 中错位字段已尽量还原) |",
"| **必选** | 是否后期阶段强制项(`true` / `false` |",
"| **产出** | 主要输出位置或产物类型(保留英文路径占位符) |",
"",
"---",
"",
]
idx = 0
for mod in [
"BMad Builder",
"BMad Method",
"Core",
"Creative Intelligence Suite",
"Game Dev Studio",
"Test Architecture Enterprise",
"Web Design Studio",
]:
mrows = by_mod.get(mod)
if not mrows:
continue
lines.append(f"## {MODULE_ZH.get(mod, mod)}")
lines.append("")
lines.append(
"| 码 | 显示名称 | 技能 | 说明 | 阶段 | 前置 | 必选 | 产出 |"
)
lines.append("| --- | --- | --- | --- | --- | --- | --- | --- |")
for r in mrows:
zh = ZH_BY_ROW[idx]
idx += 1
req = required_gate(r)
lines.append(
"| {code} | {name} | `{skill}` | {desc} | {phase} | {pre} | {req} | {out} |".format(
code=r[3].replace("|", "\\|"),
name=r[2].replace("|", "\\|"),
skill=r[1].replace("|", "\\|"),
desc=zh.replace("|", "\\|"),
phase=phase_display(r).replace("|", "\\|"),
pre=prereq_display(r).replace("|", "\\|"),
req=req.replace("|", "\\|"),
out=output_display(r).replace("|", "\\|"),
)
)
lines.append("")
if idx != len(rows):
raise SystemExit(f"索引错误: 写了 {idx} 行,预期 {len(rows)}")
lines.append("---")
lines.append("")
lines.append(
"*生成脚本:[`scripts/render_bmad_help_zh_cn.py`](scripts/render_bmad_help_zh_cn.py)(修改译文表后重新运行以更新本文档。)*"
)
lines.append("")
OUT_PATH.write_text("\n".join(lines), encoding="utf-8")
print(f"Wrote {OUT_PATH}")
if __name__ == "__main__":
main()