# CM Workflow 项目级配置模板。
# 复制到代码项目根目录的 .cm-workflow.yml 后按需修改。
# 这里只写角色、适配器、模型别名和策略；不要写 API Key、Token、Cookie 或密码。
version: 1

project:
  type: auto                         # auto | java-backend | web-frontend | custom
  workflow: cm-default               # cm-default | java-backend | web-frontend

# 安装时可声明用户默认；cm-init 优先继承，未声明才问。cm-runtime 可随时切换。
# codex | claude | both。不写时回退用户级 runtimes.yml；两级都没有才是未声明。
runtimes:
  available: both

# 四个预设（按 available 选一个，把下面 coder / reviewer 两块覆盖到 roles 里）。
# 预设只决定「自动派发时想用谁」；你在哪个工具里敲命令，永远不会被拦。
# 注意：声明了另一端不等于会自动调用它——当前运行时之外的 adapter 只记为
# declared-adapter，cm-check 会把这类角色标出来。
#
# codex-only ：coder codex-cli / reviewer codex-cli（审查用同一工具的全新上下文，仍是独立审查）
# claude-only：coder claude-cli / reviewer claude-cli（同上）
# codex-codes：coder codex-cli / reviewer claude-cli（大额度写代码，另一家审）
# claude-codes：coder claude-cli / reviewer codex-cli（反过来）
# both 时 coder 与 reviewer 不能落在同一家，否则 cm-check 报错。

roles:
  analyst:
    adapter: current-ai              # current-ai | claude-api | openai-compatible | ...
    model: default
    source: local                     # local | subscription | api | none (browser is external_expert-only)
  planner:
    adapter: current-ai
    model: default
    source: local
    # 使用 openai-compatible 时必须同时改为 source: api；地址/密钥/启用只从 CM_OPENAI_COMPATIBLE_* 环境变量读取。
  coder:
    adapter: current-ai
    model: default
    source: local
  tester:
    adapter: local
    model: none
    source: local
  reviewer:
    adapter: current-ai
    model: default
    source: local
    # v1 不支持 reviewer 使用 openai-compatible；N4 必须走本地独立审查通道。
  browser_qa:
    adapter: browser
    model: none
    source: local
  external_expert:
    adapter: external-browser
    model: chatgpt-pro
    source: browser
    enabled: true
    activation: explicit             # persistent config is explicit only; AUTO is invocation-scoped
    model_policy: pro-extra-high-high-skip

policies:
  tests:
    - logic
    - commands
    - browser
  generate_cases: true
  auto_fix: explicit                 # explicit | never | auto
  delivery: draft-mr                 # diff | branch | draft-mr；push/MR 仍需本次明确授权
