@genee/omp-opsx-addon 0.3.0 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -63,6 +63,15 @@ tiers:
63
63
  # 可选:role → tier 期望
64
64
  role_tiers:
65
65
  planner: top
66
+
67
+ # 可选:OMP 内置/自定义 model role → tier 期望(或 skip 排除)
68
+ # 仅影响 /pick-model 后 session 覆盖写入哪些模型;合法值 tiny/low/mid/high/top/skip
69
+ model_role_tiers:
70
+ advisor: skip
71
+ plan: skip
72
+ tiny: skip
73
+ vision: skip # vision 固定 high 档候选,仅 skip 有效(见下文)
74
+ task: low
66
75
  ```
67
76
 
68
77
  ---
@@ -73,6 +82,79 @@ role_tiers:
73
82
 
74
83
  决策日志打印到 stderr:`[omp-opsx-addon] planner → anthropic/claude-opus-4-6 (tier=top, gap=0, remaining=0.80)`
75
84
 
85
+
86
+ ### 子 agent 模型落点:session-scoped modelRoles
87
+
88
+ `/pick-model <selector>` / `refresh` / `reset` 应用选择结果时,插件**不**再按 agent 名写
89
+ `task.agentModelOverrides`,而是写 OMP session 运行时覆盖
90
+ `settings.overrideModelRoles({ …全 role… })`——覆盖**宿主当前已知的全部 model role**
91
+ (10 个内置 role + 自定义 role:`getKnownRoleIds` 从 cycleOrder/modelRoles/modelTags 汇总):
92
+
93
+ - 每个 role 跟随一个 tier 的选中模型;同一 tier 的多个 role 共用同一个模型(同候选集
94
+ 排序结果唯一)。mid/high 复用 opsx 4 role 的选择(coder→mid、reviewer→high),
95
+ tiny/low/top 在同一过滤候选集上补选。
96
+ - **内置 role 默认 tier 映射**:
97
+
98
+ | role | tier | 触发场景 |
99
+ | --- | --- | --- |
100
+ | `tiny` | tiny | 极小任务 |
101
+ | `smol` | mid | scout 等快速任务 |
102
+ | `task` | mid | task 工具委派的全能力子 agent(与 scout 同档,防能力倒挂) |
103
+ | `commit` | low | AI commit |
104
+ | `default` | high | 主会话 / reviewer |
105
+ | `designer` | high | designer agent |
106
+ | `vision` | high | `/vision`、图像输入(**能力门控**,见下) |
107
+ | `slow` | top | 深度思考 |
108
+ | `plan` | top | plan mode |
109
+ | `advisor` | top | advisor 会话 |
110
+
111
+ **激活语义**:advisor/plan/tiny 等默认未配置的 role 被写入覆盖后,**只在对应功能真正
112
+ 触发时**(plan mode、advisor 会话、auto-thinking、AI commit、`/vision`)才会解析到
113
+ selector 模型;功能不触发就不产生消耗。覆盖 session 结束即还原。
114
+ - **自定义 role**(cycleOrder/modelTags 里出现、不在内置表中的 role)默认跟随 `high`,
115
+ 并一次性 warn 提示可用 `model_role_tiers` 调档或排除。
116
+ - **`model_role_tiers`(opsx.yml)**:OMP role 名 → `tiny/low/mid/high/top` 或 `skip`,
117
+ 覆盖上表默认值;自定义 role 也可配。`skip` 是唯一逃生舱——该 role **不写** session
118
+ 覆盖、保留你的 config 值(默认策略是全量覆盖,包含 config 里的 `modelRoles.*` 钉值,
119
+ 不做「自动跳过钉值」)。**例外:`vision` role 固定使用 high 档候选**(仅在具备 image
120
+ 能力的模型中挑选,见下条),`model_role_tiers.vision` **仅 `skip` 生效**——配
121
+ `top/low/…` 等其他 tier 值会被静默接受但**不改变其选档**(仍按 high 档选图像模型)。
122
+ 保守配置示例:
123
+
124
+ ```yaml
125
+ model_role_tiers:
126
+ advisor: skip # 不想让 advisor 会话走 selector 模型
127
+ plan: skip # plan mode 保留 config 钉值
128
+ tiny: skip # 无 tiny 档模型时避免回落
129
+ vision: skip # 不覆盖 vision(vision 固定 high 档选图像模型,仅 skip 有效)
130
+ task: low # 显式降档
131
+ ```
132
+
133
+ - **vision 能力门控**:vision 候选**固定按 high 档**、只从声明 `input` 含 `image` 的模型
134
+ 中挑选(不按 `model_role_tiers.vision` 的 tier 值选档,该键仅 `skip` 有效);当前选择里
135
+ 没有图像模型时,vision role **不写覆盖**(warn 汇总为 `vision(capability)`,绝不写入
136
+ 纯文本模型),vision 功能回落 config/default。恢复手段:换一个含图像模型的 selector
137
+ 或用 `model_allowlist` 纳入图像模型;**`model_role_tiers.vision` 改 tier 绕不过门控、
138
+ 也不改选档**。
139
+ - **auto role 的 agent 定义**在 `.omp/agents/*.md` frontmatter 注入带引号的 tier alias
140
+ (coder `model: "@smol"`,其余三者 `model: "@default"`);task 工具经 modelRoles 解析。
141
+ - 因此**所有经 role 解析的 agent 都跟随切换**——包括插件未枚举的 OMP 内置/bundled/
142
+ project agent(例如内置 scout 走 `smol`,`/pick-model` selector/refresh/reset 后
143
+ scout 自动换到选中模型)。
144
+ - auto role 与 omp-alias(如 `slow`,值无 `/`)的 dispatch 提示词**不传 `model=`**,
145
+ 由 frontmatter alias 声明式接管;pinned 具体 provider/model 仍显式传 model,行为不变。
146
+ - 某 tier 补选没有可用模型(候选耗尽/allowlist 全过滤)时,该 tier 的各 role 不写覆盖、
147
+ warn 汇总(`no-pick`),命令不中断;无任何模型时计划为空,与既有「模型注册表不可用」
148
+ 分支一致。
149
+ - 覆盖为 **session 作用域、不写盘**:`overrideModelRoles` 只写 runtime overlay,
150
+ session 结束即还原;不会修改你的 `~/.omp/agent/config.yml`。每次应用前先
151
+ `clearOverride('modelRoles')`,避免上一 selector 的旧 role 值残留;`reset` 重算无约束
152
+ 默认并覆盖(**不清空**,否则回落 config 硬钉)。
153
+
154
+ > **手动清理建议**:若全局 `~/.omp/agent/config.yml` 里有 `modelRoles.smol` 钉在会耗尽的
155
+ > 套餐模型(scout 会一直打它直到被 session 覆盖压过),或 `task.agentModelOverrides` 残留
156
+ > 已删除的 `tester` 等 key,可手动删除这些钉值;插件运行期间会以 session 空串中和 per-agent
157
+ > 钉值,但不改动你的配置文件。
76
158
  ---
77
159
 
78
160
  ## 开发