oh-my-opencode-slim 2.1.1 → 2.2.1
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.ja-JP.md +113 -118
- package/README.ko-KR.md +141 -123
- package/README.md +102 -145
- package/README.zh-CN.md +112 -118
- package/dist/agents/index.d.ts +0 -4
- package/dist/cli/index.js +57 -20
- package/dist/cli/providers.d.ts +11 -4
- package/dist/config/constants.d.ts +11 -1
- package/dist/config/schema.d.ts +680 -2
- package/dist/config/strip-orchestrator-model.d.ts +9 -0
- package/dist/hooks/command-hook-utils.d.ts +5 -0
- package/dist/hooks/foreground-fallback/index.d.ts +40 -28
- package/dist/hooks/image-hook.d.ts +1 -0
- package/dist/hooks/index.d.ts +1 -1
- package/dist/index.js +1992 -455
- package/dist/interview/document.d.ts +2 -1
- package/dist/interview/ui.d.ts +0 -1
- package/dist/multiplexer/cmux/close-policy.d.ts +20 -0
- package/dist/multiplexer/cmux/index.d.ts +102 -0
- package/dist/multiplexer/cmux/session-lifecycle.d.ts +92 -0
- package/dist/multiplexer/cmux/session-state.d.ts +45 -0
- package/dist/multiplexer/factory.d.ts +0 -9
- package/dist/multiplexer/herdr/index.d.ts +2 -0
- package/dist/multiplexer/index.d.ts +3 -1
- package/dist/multiplexer/session-manager.d.ts +10 -2
- package/dist/multiplexer/shared.d.ts +8 -1
- package/dist/multiplexer/types.d.ts +5 -2
- package/dist/multiplexer/zellij/index.d.ts +1 -1
- package/dist/tools/smartfetch/utils.d.ts +3 -1
- package/dist/tui-state.d.ts +5 -5
- package/dist/tui.js +87 -27
- package/dist/utils/escape-html.d.ts +1 -0
- package/dist/utils/frontmatter.d.ts +6 -0
- package/dist/utils/index.d.ts +1 -1
- package/dist/utils/logger.d.ts +0 -2
- package/oh-my-opencode-slim.schema.json +717 -2
- package/package.json +1 -1
- package/src/skills/clonedeps/SKILL.md +32 -29
- package/src/skills/codemap.md +5 -3
- package/src/skills/deepwork/SKILL.md +17 -6
- package/src/skills/verification-planning/SKILL.md +102 -0
- package/src/skills/worktrees/SKILL.md +14 -7
- package/src/skills/release-smoke-test/SKILL.md +0 -159
package/README.zh-CN.md
CHANGED
|
@@ -22,30 +22,32 @@
|
|
|
22
22
|
|
|
23
23
|
</div>
|
|
24
24
|
|
|
25
|
-
---
|
|
26
|
-
|
|
27
25
|
## 什么是该插件?
|
|
28
26
|
|
|
29
27
|
oh-my-opencode-slim 是一个用于 OpenCode 的智能体编排插件。它内置了一支专业的智能体团队,可以在同一个编排者(Orchestrator)下,完成侦察代码库、查询最新文档、审查架构、处理 UI 工作以及执行范围明确的实现任务。
|
|
30
28
|
|
|
31
|
-
其核心理念非常简单:与其强迫单个模型做所有事情,本插件会将工作的每个部分路由到最适合它的智能体,从而平衡**质量、速度和成本**。
|
|
32
|
-
|
|
33
|
-
要了解智能体本身,请参阅 **[认识众神殿](#meet-the-pantheon)**。如需了解完整特性集,请参阅下方的 **[特性与工作流](#features-and-workflows)**。
|
|
29
|
+
其核心理念非常简单:与其强迫单个模型做所有事情,本插件会将工作的每个部分路由到最适合它的智能体,从而平衡**质量、速度和成本**。Orchestrator 负责规划工作图,将专家作为后台任务派发,并在继续前整合它们的结果。
|
|
34
30
|
|
|
35
|
-
###
|
|
31
|
+
### ✨ 亮点
|
|
36
32
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
33
|
+
- **[七位专业智能体](#meet-the-pantheon)** —— Orchestrator、Explorer、Oracle、Council、Librarian、Designer 和 Fixer。每部分工作都会交给最适合的智能体;可跨任意提供商混用任意模型。
|
|
34
|
+
- **[后台编排](docs/background-orchestration.md)** —— Orchestrator 将专家作为后台任务派发、跟踪并整合结果后再继续;默认并行工作。
|
|
35
|
+
- **[内置 Skills](#skills)** —— 如 `deepwork`、`codemap`、`verification-planning` 和 `reflect` 等基于提示词的工作流,按智能体分配。
|
|
36
|
+
- **[Council](docs/council.md)** —— 使用 `@council` 针对同一问题并行运行多个模型,并综合为一个答案。
|
|
37
|
+
- **[Companion](docs/companion.md)** —— 可选的浮动桌面窗口,显示哪些智能体正在运行,包括并行后台专家。
|
|
38
|
+
- **[多路复用器集成](docs/multiplexer-integration.md)** —— 在 Tmux、Zellij、Herdr 或 cmux 窗格中实时观察智能体工作。
|
|
39
|
+
- **[预设切换](docs/preset-switching.md)** —— 使用 `/preset` 在运行时更换整支团队的模型。
|
|
40
|
+
- **[代码智能工具](docs/tools.md)** —— LSP 工具、支持 25 种语言的 AST 感知搜索,以及用于 Web 搜索、文档和 GitHub 代码搜索的内置 MCP。
|
|
41
|
+
- **[完全可定制](docs/configuration.md)** —— 自定义智能体、提示词覆盖、按智能体控制的 Skill/MCP 权限,以及[项目本地定制](docs/project-local-customization.md)。
|
|
42
42
|
|
|
43
|
-
|
|
43
|
+
### OpenAI GPT-5.6
|
|
44
44
|
|
|
45
45
|
<p align="center">
|
|
46
|
-
<
|
|
46
|
+
<img src="img/openai-gpt-5-6-pantheon.jpeg" alt="OpenAI GPT-5.6 众神殿:Terra、Sol 和 Luna" width="100%">
|
|
47
47
|
</p>
|
|
48
48
|
|
|
49
|
+
默认的 [OpenAI 预设](docs/openai-preset.md) 将 Terra 映射为 Orchestrator、Sol 映射为 Oracle、Luna 映射为快速专家通道。
|
|
50
|
+
|
|
49
51
|
### 用户怎么说
|
|
50
52
|
|
|
51
53
|
> “任务管理轻松从 5/10 提升到了 8-9/10。Orchestrator 会派出
|
|
@@ -134,7 +136,7 @@ bun run build
|
|
|
134
136
|
> **建议**了解后台编排的工作原理。**[编排者提示词 (Orchestrator prompt)](https://github.com/alvinunreal/oh-my-opencode-slim/blob/master/src/agents/orchestrator.ts#L28)** 包含调度规则、专家路由逻辑,以及何时应把工作分配给后台智能体的阈值。您始终可以通过以下方式手动委派任务:`@智能体名称 <任务内容>`
|
|
135
137
|
|
|
136
138
|
> [!TIP]
|
|
137
|
-
> 由于后台智能体现在是默认工作流,**强烈建议**启用并配置 **[Multiplexer Integration](docs/multiplexer-integration.md)**。它会自动在专用的 Tmux、Zellij 或
|
|
139
|
+
> 由于后台智能体现在是默认工作流,**强烈建议**启用并配置 **[Multiplexer Integration](docs/multiplexer-integration.md)**。它会自动在专用的 Tmux、Zellij、Herdr 或 cmux 窗格中打开每个智能体,让您在 Orchestrator 继续协调会话时,实时跟进各个专家智能体的工作。
|
|
138
140
|
|
|
139
141
|
默认生成的配置包含 `openai` 和 `opencode-go` 两个预设:
|
|
140
142
|
|
|
@@ -152,20 +154,29 @@ bun run build
|
|
|
152
154
|
"fixer": { "model": "openai/gpt-5.6-luna", "variant": "medium", "skills": [], "mcps": [] }
|
|
153
155
|
},
|
|
154
156
|
"opencode-go": {
|
|
155
|
-
"orchestrator": { "model": "opencode-go/
|
|
157
|
+
"orchestrator": { "model": "opencode-go/minimax-m3", "variant": "max", "skills": [ "*" ], "mcps": [ "*", "!context7" ] },
|
|
156
158
|
"oracle": { "model": "opencode-go/qwen3.7-max", "variant": "max", "skills": ["simplify"], "mcps": [] },
|
|
157
|
-
"librarian": { "model": "opencode-go/deepseek-v4-flash", "skills": [], "mcps": [ "websearch", "context7", "gh_grep" ] },
|
|
158
|
-
"explorer": { "model": "opencode-go/deepseek-v4-flash", "skills": [], "mcps": [] },
|
|
159
|
+
"librarian": { "model": "opencode-go/deepseek-v4-flash", "variant": "high", "skills": [], "mcps": [ "websearch", "context7", "gh_grep" ] },
|
|
160
|
+
"explorer": { "model": "opencode-go/deepseek-v4-flash", "variant": "max", "skills": [], "mcps": [] },
|
|
159
161
|
"designer": { "model": "opencode-go/kimi-k2.7-code", "variant": "medium", "skills": [], "mcps": [] },
|
|
160
|
-
"fixer": { "model": "opencode-go/deepseek-v4-flash", "variant": "high", "skills": [], "mcps": [] }
|
|
162
|
+
"fixer": { "model": "opencode-go/deepseek-v4-flash", "variant": "high", "skills": [], "mcps": [] },
|
|
163
|
+
"observer": { "model": "opencode-go/mimo-v2.5", "variant": "max", "skills": [], "mcps": [] }
|
|
161
164
|
}
|
|
162
165
|
}
|
|
163
166
|
}
|
|
164
167
|
```
|
|
165
168
|
|
|
169
|
+
### 预设文档
|
|
170
|
+
|
|
171
|
+
- **[OpenAI 预设](docs/openai-preset.md)** —— 默认生成的预设;所有智能体均使用 OpenAI 模型。
|
|
172
|
+
- **[OpenCode Go 预设](docs/opencode-go-preset.md)** —— 智能体使用 OpenCode Go 模型;由于其 Orchestrator 模型不支持多模态,因此启用 Observer 进行视觉分析。
|
|
173
|
+
- **[作者的预设](docs/authors-preset.md)** —— 作者日常使用的精确配置,包含第三方 Skills。
|
|
174
|
+
- **[$30 预设](docs/thirty-dollars-preset.md)** —— 围绕 Codex Plus 和 GitHub Copilot Pro 构建的混合服务商方案,每月约 30 美元。
|
|
175
|
+
- **[OpenCode Zen 免费预设](docs/opencode-zen-free-preset.md)** —— 所有智能体均使用 opencode 免费模型;无需使用费用。
|
|
176
|
+
|
|
166
177
|
### 针对其他服务商
|
|
167
178
|
|
|
168
|
-
|
|
179
|
+
要使用自定义模型提供商或混合服务商配置,请参阅完整参考 **[配置](docs/configuration.md)**。
|
|
169
180
|
|
|
170
181
|
### ✅ 验证您的安装
|
|
171
182
|
|
|
@@ -190,91 +201,6 @@ ping all agents
|
|
|
190
201
|
|
|
191
202
|
---
|
|
192
203
|
|
|
193
|
-
### V2 新功能
|
|
194
|
-
|
|
195
|
-
V2 将 oh-my-opencode-slim 变成了以调度器为核心的多智能体工作流系统。Orchestrator 专注于规划、委派、结果整合与验证,而专家智能体在各自的工作通道中完成任务。
|
|
196
|
-
|
|
197
|
-
- **[后台智能体](#后台智能体)** - Orchestrator 现在会把专家作为后台任务派发,跟踪任务/会话 ID,等待完成事件,并在继续之前整合结果。
|
|
198
|
-
- **[Companion](#companion)** - 可选的浮动桌面窗口会显示当前活跃的智能体,包括并行运行的后台专家。
|
|
199
|
-
- **[Deepwork](#deepwork)** - 面向大型、多文件、高风险或分阶段编码工作的结构化工作流,使用持久化计划文件和 Oracle 评审关卡。
|
|
200
|
-
- **[Reflect](#reflect)** - 回顾重复出现的工作模式,并建议可复用的 skill、智能体、命令、配置规则、提示词规则或项目 playbook。
|
|
201
|
-
- **[Worktrees](#worktrees)** - 将 Git worktree 作为隔离编码通道管理,并为复杂、高风险或并行任务提供安全协议。
|
|
202
|
-
- **[oh-my-opencode-slim Skill](#oh-my-opencode-slim-skill)** - 随包提供的配置技能,可安全调优模型、提示词、自定义智能体、MCP 访问、预设和插件行为。
|
|
203
|
-
|
|
204
|
-
#### 后台智能体
|
|
205
|
-
|
|
206
|
-
V2 将后台专家作为默认心智模型:Orchestrator 规划工作图,启动合适的智能体,避免重叠的写入所有权,并在处理终端任务结果后再继续行动。
|
|
207
|
-
|
|
208
|
-
完整调度模型见 **[后台编排](docs/v2-background-orchestration.md)**。
|
|
209
|
-
|
|
210
|
-
#### Companion
|
|
211
|
-
|
|
212
|
-
可选 Companion 是一个用于展示实时智能体活动的浮动桌面状态窗口。它显示当前会话状态和活跃智能体,让后台工作一目了然。
|
|
213
|
-
|
|
214
|
-
<div align="center">
|
|
215
|
-
<img src="img/companion.gif" alt="Companion showing active agents" width="600">
|
|
216
|
-
<p><i>左下角视觉伴侣。</i></p>
|
|
217
|
-
</div>
|
|
218
|
-
|
|
219
|
-
交互式安装期间,安装器会询问是否启用 Companion,并默认选择 `no`。自动化安装可显式启用:
|
|
220
|
-
|
|
221
|
-
```bash
|
|
222
|
-
bunx oh-my-opencode-slim@latest install --companion=yes
|
|
223
|
-
```
|
|
224
|
-
|
|
225
|
-
配置、位置、尺寸和安装详情见 **[Companion](docs/companion.md)**。
|
|
226
|
-
|
|
227
|
-
#### Deepwork
|
|
228
|
-
|
|
229
|
-
Deepwork 适用于重型编码会话:大范围重构、多阶段功能、高风险架构变更,或需要持久计划的工作。它会创建本地 markdown 进度文件,使用 Oracle 评审关卡,并保持实现阶段结构化。
|
|
230
|
-
|
|
231
|
-
启动方式:
|
|
232
|
-
|
|
233
|
-
```text
|
|
234
|
-
/deepwork <heavy coding task>
|
|
235
|
-
```
|
|
236
|
-
|
|
237
|
-
何时使用以及工作流如何运行,请参阅 **[Skills](docs/skills.md#deepwork)**。
|
|
238
|
-
|
|
239
|
-
#### Reflect
|
|
240
|
-
|
|
241
|
-
Reflect 帮助 Orchestrator 从重复出现的工作流摩擦中学习。它会回顾近期工作和现有资产,然后建议最小且有用的改进:skill、自定义智能体、命令、配置规则、提示词规则、MCP 权限变更或项目 playbook。如果证据不足,它应建议什么都不创建。
|
|
242
|
-
|
|
243
|
-
直接使用:
|
|
244
|
-
|
|
245
|
-
```text
|
|
246
|
-
/reflect
|
|
247
|
-
/reflect release workflow and checks
|
|
248
|
-
```
|
|
249
|
-
|
|
250
|
-
也可以使用自然语言提示:
|
|
251
|
-
|
|
252
|
-
```text
|
|
253
|
-
reflect on my recent workflows
|
|
254
|
-
find repeated work worth turning into reusable instructions
|
|
255
|
-
```
|
|
256
|
-
|
|
257
|
-
完整工作流和安全规则见 **[Skills](docs/skills.md#reflect)**。
|
|
258
|
-
|
|
259
|
-
#### Worktrees
|
|
260
|
-
|
|
261
|
-
Worktrees 将 Git worktree 作为安全、隔离的编码通道管理,默认位于 `.slim/worktrees/<slug>/`。Orchestrator 负责这些通道的生命周期,在 `.slim/worktrees.json` 中跟踪状态,在通道内调度专家智能体,并在修改 Git 状态前要求明确确认。
|
|
262
|
-
|
|
263
|
-
安全协议见 **[Skills](docs/skills.md#worktrees)**。
|
|
264
|
-
|
|
265
|
-
#### oh-my-opencode-slim Skill
|
|
266
|
-
|
|
267
|
-
内置的 `oh-my-opencode-slim` skill 可帮助 Orchestrator 配置和改进插件本身。可用于模型调优、自定义智能体、提示词覆盖、skill/MCP 权限、预设、可选智能体、后台编排以及反复出现的工作流摩擦。
|
|
268
|
-
|
|
269
|
-
<div align="center">
|
|
270
|
-
<img src="img/oh-my-opencode-skill.png" alt="oh-my-opencode-slim skill in use" width="600">
|
|
271
|
-
<p><i>让内置技能帮助调优和改进你的智能体设置。</i></p>
|
|
272
|
-
</div>
|
|
273
|
-
|
|
274
|
-
示例和安全规则见 **[Skills](docs/skills.md#oh-my-opencode-slim)**。
|
|
275
|
-
|
|
276
|
-
---
|
|
277
|
-
|
|
278
204
|
<a id="meet-the-pantheon"></a>
|
|
279
205
|
|
|
280
206
|
## 🏛️ 认识众神殿
|
|
@@ -308,12 +234,12 @@ Worktrees 将 Git worktree 作为安全、隔离的编码通道管理,默认
|
|
|
308
234
|
</tr>
|
|
309
235
|
<tr>
|
|
310
236
|
<td colspan="2">
|
|
311
|
-
<b>推荐模型:</b> <code>openai/gpt-5.6-terra (medium)</code> <code>anthropic/claude-opus-4
|
|
237
|
+
<b>推荐模型:</b> <code>openai/gpt-5.6-terra (medium)</code> <code>anthropic/claude-fable-5</code> <code>anthropic/claude-opus-4-8</code>
|
|
312
238
|
</td>
|
|
313
239
|
</tr>
|
|
314
240
|
<tr>
|
|
315
241
|
<td colspan="2">
|
|
316
|
-
<b>模型选用指南:</b>
|
|
242
|
+
<b>模型选用指南:</b> 选择您最强的规划和判断模型。Orchestrator 是工作流管理者:它规划工作、调度后台专家、整合结果并验证产出,因此相比单纯的工作吞吐量,它更需要可靠的指令遵循能力和高层次的技术判断力。
|
|
317
243
|
</td>
|
|
318
244
|
</tr>
|
|
319
245
|
</table>
|
|
@@ -349,12 +275,12 @@ Worktrees 将 Git worktree 作为安全、隔离的编码通道管理,默认
|
|
|
349
275
|
</tr>
|
|
350
276
|
<tr>
|
|
351
277
|
<td colspan="2">
|
|
352
|
-
<b>推荐模型:</b> <
|
|
278
|
+
<b>推荐模型:</b> <code>openai/gpt-5.3-codex</code> <code>cerebras/zai-glm-4.7</code> <code>fireworks-ai/accounts/fireworks/routers/kimi-k2p6-turbo</code>
|
|
353
279
|
</td>
|
|
354
280
|
</tr>
|
|
355
281
|
<tr>
|
|
356
282
|
<td colspan="2">
|
|
357
|
-
<b>模型选用指南:</b> 选择快速、低成本的模型。Explorer
|
|
283
|
+
<b>模型选用指南:</b> 选择快速、低成本的模型。Explorer 处理宽泛的侦察工作,因此速度和效率通常比使用最强推理模型更重要。
|
|
358
284
|
</td>
|
|
359
285
|
</tr>
|
|
360
286
|
</table>
|
|
@@ -390,7 +316,7 @@ Worktrees 将 Git worktree 作为安全、隔离的编码通道管理,默认
|
|
|
390
316
|
</tr>
|
|
391
317
|
<tr>
|
|
392
318
|
<td colspan="2">
|
|
393
|
-
<b>推荐模型:</b> <code>openai/gpt-5.6-sol (
|
|
319
|
+
<b>推荐模型:</b> <code>openai/gpt-5.6-sol (xhigh)</code> <code>anthropic/claude-fable-5</code> <code>anthropic/claude-opus-4-8 (xhigh)</code>
|
|
394
320
|
</td>
|
|
395
321
|
</tr>
|
|
396
322
|
<tr>
|
|
@@ -480,7 +406,7 @@ Worktrees 将 Git worktree 作为安全、隔离的编码通道管理,默认
|
|
|
480
406
|
</tr>
|
|
481
407
|
<tr>
|
|
482
408
|
<td colspan="2">
|
|
483
|
-
<b>推荐模型:</b> <
|
|
409
|
+
<b>推荐模型:</b> <code>openai/gpt-5.3-codex</code> <code>cerebras/zai-glm-4.7</code> <code>fireworks-ai/accounts/fireworks/routers/kimi-k2p6-turbo</code>
|
|
484
410
|
</td>
|
|
485
411
|
</tr>
|
|
486
412
|
<tr>
|
|
@@ -521,7 +447,7 @@ Worktrees 将 Git worktree 作为安全、隔离的编码通道管理,默认
|
|
|
521
447
|
</tr>
|
|
522
448
|
<tr>
|
|
523
449
|
<td colspan="2">
|
|
524
|
-
<b>推荐模型:</b> <code>google/gemini-3.
|
|
450
|
+
<b>推荐模型:</b> <code>google/gemini-3.5-flash</code> <code>moonshotai/kimi-k2.7-code</code>
|
|
525
451
|
</td>
|
|
526
452
|
</tr>
|
|
527
453
|
<tr>
|
|
@@ -562,12 +488,12 @@ Worktrees 将 Git worktree 作为安全、隔离的编码通道管理,默认
|
|
|
562
488
|
</tr>
|
|
563
489
|
<tr>
|
|
564
490
|
<td colspan="2">
|
|
565
|
-
<b>推荐模型:</b> <code>openai/gpt-5.6-luna (medium)</code>
|
|
491
|
+
<b>推荐模型:</b> <code>openai/gpt-5.6-luna (medium)</code> <code>anthropic/claude-sonnet-4-6</code>
|
|
566
492
|
</td>
|
|
567
493
|
</tr>
|
|
568
494
|
<tr>
|
|
569
495
|
<td colspan="2">
|
|
570
|
-
<b>模型选用指南:</b>
|
|
496
|
+
<b>模型选用指南:</b> 为范围明确的实现工作选择可靠的编程模型。Fixer 从 Orchestrator 接收具体计划或受限指令,因此很适合高效完成执行任务和直接的代码变更。
|
|
571
497
|
</td>
|
|
572
498
|
</tr>
|
|
573
499
|
</table>
|
|
@@ -579,7 +505,7 @@ Worktrees 将 Git worktree 作为安全、隔离的编码通道管理,默认
|
|
|
579
505
|
### Observer:静默的见证者
|
|
580
506
|
|
|
581
507
|
> [!NOTE]
|
|
582
|
-
> **为什么要独立出一个智能体?** 如果您的 Orchestrator 模型不是多模态模型,可以启用 Observer
|
|
508
|
+
> **为什么要独立出一个智能体?** 如果您的 Orchestrator 模型不是多模态模型,可以启用 Observer 来处理图像、屏幕截图和其他视觉文件。Observer 默认是禁用的,它在无需您更改核心推理模型的情况下,为 Orchestrator 赋予了专用的多模态读取能力。只需在您的配置中设置 `disabled_agents: []` 并指定一个 `observer` 模型即可。自带的 `opencode-go` 安装预设会自动执行此操作,因为其 GLM Orchestrator 不是多模态模型。省略 `image_routing` 会保留现有的条件式 Observer 行为。仅在启用 Observer 时设置 `image_routing: "auto"`,或设为 `"direct"` 以始终将图片附件直接传给 Orchestrator。
|
|
583
509
|
|
|
584
510
|
<table>
|
|
585
511
|
<tr>
|
|
@@ -593,7 +519,7 @@ Worktrees 将 Git worktree 作为安全、隔离的编码通道管理,默认
|
|
|
593
519
|
|
|
594
520
|
- 图像、屏幕截图、图表 → `read` 工具(原生图像支持)
|
|
595
521
|
- PDF 和二进制文档 → `read` 工具(文本 + 结构提取)
|
|
596
|
-
- **默认禁用** -- 通过设置 `"disabled_agents": []` 和配置具有视觉能力的模型来启用;若使用 `--preset=opencode-go` 预设安装,将自动使用 `opencode-go/
|
|
522
|
+
- **默认禁用** -- 通过设置 `"disabled_agents": []` 和配置具有视觉能力的模型来启用;若使用 `--preset=opencode-go` 预设安装,将自动使用 `opencode-go/mimo-v2.5` 启用它。启用时,图片附件默认会路由至 Observer;设置 `"image_routing": "direct"` 可将其保留给 Orchestrator。
|
|
597
523
|
|
|
598
524
|
</td>
|
|
599
525
|
</tr>
|
|
@@ -616,6 +542,50 @@ Worktrees 将 Git worktree 作为安全、隔离的编码通道管理,默认
|
|
|
616
542
|
|
|
617
543
|
---
|
|
618
544
|
|
|
545
|
+
<a id="skills"></a>
|
|
546
|
+
|
|
547
|
+
## 🧩 Skills
|
|
548
|
+
|
|
549
|
+
Skills 是注入智能体系统提示词的、基于提示词的指令,用于引导决策、工作流和工具使用。与 MCP(运行中的服务器)不同,Skill 不运行任何进程——它是智能体在任务需要时激活的专用操作手册。安装程序内置八个 Skill,并在插件自动更新时保持更新;本地自定义内容会被保留。
|
|
550
|
+
|
|
551
|
+
| Skill | 用途 | 默认智能体 | 调用方式 |
|
|
552
|
+
|:-----:|------|------------|----------|
|
|
553
|
+
| <img src="img/skills/codemap.webp" width="120" alt="Codemap artifact"><br>[`codemap`](src/skills/codemap/SKILL.md) | 分层仓库地图,让智能体无需反复阅读全部内容也能理解代码库 | `orchestrator` | `run codemap` |
|
|
554
|
+
| <img src="img/skills/deepwork.webp" width="120" alt="Deepwork artifact"><br>[`deepwork`](src/skills/deepwork/SKILL.md) | 面向大型、高风险、多阶段编码会话的结构化工作流,包含审查关卡 | `orchestrator` | `/deepwork <task>` |
|
|
555
|
+
| <img src="img/skills/verification-planning.webp" width="120" alt="Verification Planning artifact"><br>[`verification-planning`](src/skills/verification-planning/SKILL.md) | 在非平凡变更前规划项目特定的证据路径 | `orchestrator` | 非平凡工作前自动调用 |
|
|
556
|
+
| <img src="img/skills/simplify.webp" width="120" alt="Simplify artifact"><br>[`simplify`](src/skills/simplify/SKILL.md) | 保持行为不变地简化代码,提升可读性和可维护性 | `oracle` | 请求简化或在审查期间调用 |
|
|
557
|
+
| <img src="img/skills/worktrees.webp" width="120" alt="Worktrees artifact"><br>[`worktrees`](src/skills/worktrees/SKILL.md) | 将 Git worktree 用作安全、隔离的编码通道,适合高风险或并行工作 | `orchestrator` | `work in a worktree` |
|
|
558
|
+
| <img src="img/skills/clonedeps.webp" width="120" alt="Clonedeps artifact"><br>[`clonedeps`](src/skills/clonedeps/SKILL.md) | 在本地克隆依赖源码,供智能体检查库内部实现 | `orchestrator` | `clone dependencies` |
|
|
559
|
+
| <img src="img/skills/reflect.webp" width="120" alt="Reflect artifact"><br>[`reflect`](src/skills/reflect/SKILL.md) | 将重复的工作流摩擦转化为可复用的 Skill、智能体或配置 | `orchestrator` | `/reflect` |
|
|
560
|
+
| <img src="img/skills/oh-my-opencode-slim.webp" width="120" alt="oh-my-opencode-slim artifact"><br>[`oh-my-opencode-slim`](src/skills/oh-my-opencode-slim/SKILL.md) | 配置并安全改进插件设置本身 | `orchestrator` | 请求调整您的设置 |
|
|
561
|
+
|
|
562
|
+
Skill 分配即权限授予——智能体只能激活被授予的 Skill。请在 `~/.config/opencode/oh-my-opencode-slim.json` 中通过每个智能体的 `skills` 数组进行配置:显式列表、`"*"` 表示全部,或 `"!skill-name"` 用于拒绝某个 Skill。
|
|
563
|
+
|
|
564
|
+
完整文档请参阅 **[Skills](docs/skills.md)**,或浏览图文概览 **[ohmyopencodeslim.com/skills](https://ohmyopencodeslim.com/skills)**。
|
|
565
|
+
|
|
566
|
+
---
|
|
567
|
+
|
|
568
|
+
<a id="companion"></a>
|
|
569
|
+
|
|
570
|
+
## 🖥️ Companion
|
|
571
|
+
|
|
572
|
+
可选的 Companion 是一个用于展示实时智能体活动的浮动桌面状态窗口。它显示当前会话状态和哪些智能体正在运行,让后台工作一目了然。
|
|
573
|
+
|
|
574
|
+
<div align="center">
|
|
575
|
+
<img src="img/companion.gif" alt="Companion showing active agents" width="600">
|
|
576
|
+
<p><i>左下角视觉伴侣。</i></p>
|
|
577
|
+
</div>
|
|
578
|
+
|
|
579
|
+
交互式安装期间,安装器会询问是否启用 Companion,并默认选择 `no`。自动化安装可显式启用:
|
|
580
|
+
|
|
581
|
+
```bash
|
|
582
|
+
bunx oh-my-opencode-slim@latest install --companion=yes
|
|
583
|
+
```
|
|
584
|
+
|
|
585
|
+
配置、位置、尺寸和安装详情见 **[Companion](docs/companion.md)**。
|
|
586
|
+
|
|
587
|
+
---
|
|
588
|
+
|
|
619
589
|
## 📚 文档
|
|
620
590
|
|
|
621
591
|
请将本节作为地图:先从安装开始,再根据需要跳转到特性、配置或示例预设。
|
|
@@ -629,7 +599,7 @@ Worktrees 将 Git worktree 作为安全、隔离的编码通道管理,默认
|
|
|
629
599
|
| **[Council](docs/council.md)** | 使用 `@council` 并行运行多个模型并合成单一答案 |
|
|
630
600
|
| **[自定义智能体](docs/configuration.md#custom-agents)** | 使用自定义提示词、模型、MCP 访问和 Orchestrator 委派规则定义自己的专家 |
|
|
631
601
|
| **[ACP Agents](docs/acp-agents.md)** | 将 Claude Code ACP 或 Gemini ACP 等外部 ACP 兼容智能体连接为可委派子智能体 |
|
|
632
|
-
| **[多路复用器集成](docs/multiplexer-integration.md)** | 在 Tmux、Zellij 或
|
|
602
|
+
| **[多路复用器集成](docs/multiplexer-integration.md)** | 在 Tmux、Zellij、Herdr 或 cmux 窗格中实时观看智能体工作 |
|
|
633
603
|
| **[Codemap](docs/codemap.md)** | 生成层级代码地图,更快理解大型代码库 |
|
|
634
604
|
| **[Clonedeps](docs/clonedeps.md)** | 将选定的依赖源码克隆到被忽略的本地工作区中以供检查 |
|
|
635
605
|
| **[Worktrees](docs/worktrees.md)** | 使用 `.slim/worktrees/` 通道进行隔离的并行或高风险编码工作 |
|
|
@@ -643,9 +613,10 @@ Worktrees 将 Git worktree 作为安全、隔离的编码通道管理,默认
|
|
|
643
613
|
|-----|----------------|
|
|
644
614
|
| **[安装指南](docs/installation.md)** | 安装插件、使用 CLI 标志、重置配置并排查设置问题 |
|
|
645
615
|
| **[配置](docs/configuration.md)** | 配置文件位置、JSONC 支持、提示词覆盖和完整选项参考 |
|
|
616
|
+
| **[项目定制](docs/project-local-customization.md)** | 仓库特定的自定义智能体、提示词覆盖、按智能体分配的 Skill 以及优先级 |
|
|
646
617
|
| **[后台编排](docs/background-orchestration.md)** | 围绕原生后台子智能体构建的调度器优先 Orchestrator 模型 |
|
|
647
618
|
| **[维护者指南](docs/maintainers.md)** | issue 分流规则、标签含义、支持路由和仓库维护工作流 |
|
|
648
|
-
| **[Skills](docs/skills.md)** | `simplify`、`codemap`、`clonedeps`、`deepwork`、`reflect`、`worktrees` 和 `oh-my-opencode-slim` 等捆绑技能 |
|
|
619
|
+
| **[Skills](docs/skills.md)** | `simplify`、`codemap`、`clonedeps`、`deepwork`、`verification-planning`、`reflect`、`worktrees` 和 `oh-my-opencode-slim` 等捆绑技能 |
|
|
649
620
|
| **[MCPs](docs/mcps.md)** | `websearch`、`context7`、`gh_grep` 以及每个智能体的 MCP 权限机制 |
|
|
650
621
|
| **[Tools](docs/tools.md)** | `webfetch`、LSP 工具、代码搜索和格式化工具等内置工具能力 |
|
|
651
622
|
|
|
@@ -666,7 +637,7 @@ Worktrees 将 Git worktree 作为安全、隔离的编码通道管理,默认
|
|
|
666
637
|
<p><sub>每一次合并的贡献都在这片领域留下了印记。</sub></p>
|
|
667
638
|
|
|
668
639
|
<!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section -->
|
|
669
|
-
[](#contributors-)
|
|
670
641
|
<!-- ALL-CONTRIBUTORS-BADGE:END -->
|
|
671
642
|
</div>
|
|
672
643
|
|
|
@@ -755,6 +726,29 @@ Worktrees 将 Git worktree 作为安全、隔离的编码通道管理,默认
|
|
|
755
726
|
<td align="center" valign="top" width="16.66%"><a href="https://github.com/Qesire"><img src="https://avatars.githubusercontent.com/u/102657430?v=4?s=100" width="100px;" alt="Knowingthesea_Qesire"/><br /><sub><b>Knowingthesea_Qesire</b></sub></a><br /><a href="https://github.com/alvinunreal/oh-my-opencode-slim/commits?author=Qesire" title="Code">💻</a></td>
|
|
756
727
|
<td align="center" valign="top" width="16.66%"><a href="http://www.flyinghail.net/"><img src="https://avatars.githubusercontent.com/u/157430?v=4?s=100" width="100px;" alt="FENG Hao"/><br /><sub><b>FENG Hao</b></sub></a><br /><a href="https://github.com/alvinunreal/oh-my-opencode-slim/commits?author=flyinghail" title="Code">💻</a></td>
|
|
757
728
|
<td align="center" valign="top" width="16.66%"><a href="https://github.com/smatheusblu"><img src="https://avatars.githubusercontent.com/u/5666794?v=4?s=100" width="100px;" alt="Matheus Nogueira Silveira"/><br /><sub><b>Matheus Nogueira Silveira</b></sub></a><br /><a href="https://github.com/alvinunreal/oh-my-opencode-slim/commits?author=smatheusblu" title="Code">💻</a></td>
|
|
729
|
+
<td align="center" valign="top" width="16.66%"><a href="https://github.com/sktr"><img src="https://avatars.githubusercontent.com/u/44969514?v=4?s=100" width="100px;" alt="sktr"/><br /><sub><b>sktr</b></sub></a><br /><a href="https://github.com/alvinunreal/oh-my-opencode-slim/commits?author=sktr" title="Code">💻</a></td>
|
|
730
|
+
</tr>
|
|
731
|
+
<tr>
|
|
732
|
+
<td align="center" valign="top" width="16.66%"><a href="https://github.com/bobbyunknown"><img src="https://avatars.githubusercontent.com/u/62272380?v=4?s=100" width="100px;" alt="Insomnia"/><br /><sub><b>Insomnia</b></sub></a><br /><a href="https://github.com/alvinunreal/oh-my-opencode-slim/commits?author=bobbyunknown" title="Code">💻</a></td>
|
|
733
|
+
<td align="center" valign="top" width="16.66%"><a href="https://github.com/andrescastane"><img src="https://avatars.githubusercontent.com/u/13487870?v=4?s=100" width="100px;" alt="Andres Castañeda"/><br /><sub><b>Andres Castañeda</b></sub></a><br /><a href="https://github.com/alvinunreal/oh-my-opencode-slim/commits?author=andrescastane" title="Code">💻</a></td>
|
|
734
|
+
<td align="center" valign="top" width="16.66%"><a href="https://zaradacht.com/"><img src="https://avatars.githubusercontent.com/u/24251016?v=4?s=100" width="100px;" alt="Zaradacht Taifour (Zack)"/><br /><sub><b>Zaradacht Taifour (Zack)</b></sub></a><br /><a href="https://github.com/alvinunreal/oh-my-opencode-slim/commits?author=Zaradacht" title="Code">💻</a></td>
|
|
735
|
+
<td align="center" valign="top" width="16.66%"><a href="https://github.com/fslse"><img src="https://avatars.githubusercontent.com/u/90545544?v=4?s=100" width="100px;" alt="fslse"/><br /><sub><b>fslse</b></sub></a><br /><a href="https://github.com/alvinunreal/oh-my-opencode-slim/commits?author=fslse" title="Code">💻</a></td>
|
|
736
|
+
<td align="center" valign="top" width="16.66%"><a href="https://github.com/linze0721"><img src="https://avatars.githubusercontent.com/u/178997622?v=4?s=100" width="100px;" alt="萧瑟"/><br /><sub><b>萧瑟</b></sub></a><br /><a href="https://github.com/alvinunreal/oh-my-opencode-slim/commits?author=linze0721" title="Code">💻</a></td>
|
|
737
|
+
<td align="center" valign="top" width="16.66%"><a href="https://github.com/SisyphusZheng"><img src="https://avatars.githubusercontent.com/u/146103794?v=4?s=100" width="100px;" alt="Zhi"/><br /><sub><b>Zhi</b></sub></a><br /><a href="https://github.com/alvinunreal/oh-my-opencode-slim/commits?author=SisyphusZheng" title="Code">💻</a></td>
|
|
738
|
+
</tr>
|
|
739
|
+
<tr>
|
|
740
|
+
<td align="center" valign="top" width="16.66%"><a href="https://github.com/824156793"><img src="https://avatars.githubusercontent.com/u/19755784?v=4?s=100" width="100px;" alt="lilili"/><br /><sub><b>lilili</b></sub></a><br /><a href="https://github.com/alvinunreal/oh-my-opencode-slim/commits?author=824156793" title="Code">💻</a></td>
|
|
741
|
+
<td align="center" valign="top" width="16.66%"><a href="http://mikehenke.com/"><img src="https://avatars.githubusercontent.com/u/119844?v=4?s=100" width="100px;" alt="Mike Henke"/><br /><sub><b>Mike Henke</b></sub></a><br /><a href="https://github.com/alvinunreal/oh-my-opencode-slim/commits?author=mhenke" title="Code">💻</a></td>
|
|
742
|
+
<td align="center" valign="top" width="16.66%"><a href="https://github.com/imVinayPandya"><img src="https://avatars.githubusercontent.com/u/5011197?v=4?s=100" width="100px;" alt="Vinay Pandya"/><br /><sub><b>Vinay Pandya</b></sub></a><br /><a href="https://github.com/alvinunreal/oh-my-opencode-slim/commits?author=imVinayPandya" title="Code">💻</a></td>
|
|
743
|
+
<td align="center" valign="top" width="16.66%"><a href="https://github.com/s-shank"><img src="https://avatars.githubusercontent.com/u/241541918?v=4?s=100" width="100px;" alt="Shank"/><br /><sub><b>Shank</b></sub></a><br /><a href="https://github.com/alvinunreal/oh-my-opencode-slim/commits?author=s-shank" title="Code">💻</a></td>
|
|
744
|
+
<td align="center" valign="top" width="16.66%"><a href="https://rgutzen.github.io/"><img src="https://avatars.githubusercontent.com/u/16289604?v=4?s=100" width="100px;" alt="Robin Gutzen"/><br /><sub><b>Robin Gutzen</b></sub></a><br /><a href="https://github.com/alvinunreal/oh-my-opencode-slim/commits?author=rgutzen" title="Code">💻</a></td>
|
|
745
|
+
<td align="center" valign="top" width="16.66%"><a href="https://github.com/dragon-Elec"><img src="https://avatars.githubusercontent.com/u/197374270?v=4?s=100" width="100px;" alt="Yash"/><br /><sub><b>Yash</b></sub></a><br /><a href="https://github.com/alvinunreal/oh-my-opencode-slim/commits?author=dragon-Elec" title="Code">💻</a></td>
|
|
746
|
+
</tr>
|
|
747
|
+
<tr>
|
|
748
|
+
<td align="center" valign="top" width="16.66%"><a href="https://github.com/Jiajun0413"><img src="https://avatars.githubusercontent.com/u/184531967?v=4?s=100" width="100px;" alt="Liu Jiajun"/><br /><sub><b>Liu Jiajun</b></sub></a><br /><a href="https://github.com/alvinunreal/oh-my-opencode-slim/commits?author=Jiajun0413" title="Code">💻</a></td>
|
|
749
|
+
<td align="center" valign="top" width="16.66%"><a href="https://github.com/umi008"><img src="https://avatars.githubusercontent.com/u/200843810?v=4?s=100" width="100px;" alt="Ulises Millán"/><br /><sub><b>Ulises Millán</b></sub></a><br /><a href="https://github.com/alvinunreal/oh-my-opencode-slim/commits?author=umi008" title="Code">💻</a></td>
|
|
750
|
+
<td align="center" valign="top" width="16.66%"><a href="https://github.com/HighColdHC"><img src="https://avatars.githubusercontent.com/u/35870222?v=4?s=100" width="100px;" alt="HighColdHC"/><br /><sub><b>HighColdHC</b></sub></a><br /><a href="https://github.com/alvinunreal/oh-my-opencode-slim/commits?author=HighColdHC" title="Code">💻</a></td>
|
|
751
|
+
<td align="center" valign="top" width="16.66%"><a href="https://hardcore.engineer/about"><img src="https://avatars.githubusercontent.com/u/401815?v=4?s=100" width="100px;" alt="Stephan Schielke"/><br /><sub><b>Stephan Schielke</b></sub></a><br /><a href="https://github.com/alvinunreal/oh-my-opencode-slim/commits?author=stephanschielke" title="Code">💻</a></td>
|
|
758
752
|
</tr>
|
|
759
753
|
</tbody>
|
|
760
754
|
</table>
|
package/dist/agents/index.d.ts
CHANGED
|
@@ -29,7 +29,3 @@ export declare function getAgentConfigs(config?: PluginConfig, options?: {
|
|
|
29
29
|
* Get the set of disabled agent names from config, applying protection rules.
|
|
30
30
|
*/
|
|
31
31
|
export declare function getDisabledAgents(config?: PluginConfig): Set<string>;
|
|
32
|
-
/**
|
|
33
|
-
* Get the list of enabled (non-disabled) agent names.
|
|
34
|
-
*/
|
|
35
|
-
export declare function getEnabledAgentNames(config?: PluginConfig): string[];
|
package/dist/cli/index.js
CHANGED
|
@@ -292,7 +292,7 @@ var SUBAGENT_NAMES = [
|
|
|
292
292
|
var ALL_AGENT_NAMES = ["orchestrator", ...SUBAGENT_NAMES];
|
|
293
293
|
var PROTECTED_AGENTS = new Set(["orchestrator", "councillor"]);
|
|
294
294
|
var MAX_POLL_TIME_MS = 5 * 60 * 1000;
|
|
295
|
-
var PHASE_REMINDER_TEXT = `!IMPORTANT! Scheduler workflow: plan lanes/dependencies → dispatch background specialists → track task IDs → wait for hook-driven completion → reconcile terminal results → verify. Do not poll running jobs, consume running-job output, or advance dependent work. !END!`;
|
|
295
|
+
var PHASE_REMINDER_TEXT = `!IMPORTANT! Scheduler workflow: First choose the lightest workflow that fits the work. If direct execution is justified, complete it and verify proportionately. Otherwise: plan lanes/dependencies → dispatch background specialists → track task IDs → wait for hook-driven completion → reconcile terminal results → verify. Do not poll running jobs, consume running-job output, or advance dependent work. !END!`;
|
|
296
296
|
function formatSystemReminder(text) {
|
|
297
297
|
return `<system-reminder>
|
|
298
298
|
${text}
|
|
@@ -415,6 +415,33 @@ var ManualPlanSchema = z2.object({
|
|
|
415
415
|
librarian: ManualAgentPlanSchema,
|
|
416
416
|
fixer: ManualAgentPlanSchema
|
|
417
417
|
}).strict();
|
|
418
|
+
var PermissionActionSchema = z2.enum(["ask", "allow", "deny"]);
|
|
419
|
+
var PermissionRuleSchema = z2.union([
|
|
420
|
+
PermissionActionSchema,
|
|
421
|
+
z2.record(z2.string(), PermissionActionSchema)
|
|
422
|
+
]);
|
|
423
|
+
var PermissionObjectSchema = z2.object({
|
|
424
|
+
read: PermissionRuleSchema.optional(),
|
|
425
|
+
edit: PermissionRuleSchema.optional(),
|
|
426
|
+
glob: PermissionRuleSchema.optional(),
|
|
427
|
+
grep: PermissionRuleSchema.optional(),
|
|
428
|
+
list: PermissionRuleSchema.optional(),
|
|
429
|
+
bash: PermissionRuleSchema.optional(),
|
|
430
|
+
task: PermissionRuleSchema.optional(),
|
|
431
|
+
external_directory: PermissionRuleSchema.optional(),
|
|
432
|
+
lsp: PermissionRuleSchema.optional(),
|
|
433
|
+
skill: PermissionRuleSchema.optional(),
|
|
434
|
+
todowrite: PermissionActionSchema.optional(),
|
|
435
|
+
question: PermissionActionSchema.optional(),
|
|
436
|
+
webfetch: PermissionActionSchema.optional(),
|
|
437
|
+
websearch: PermissionActionSchema.optional(),
|
|
438
|
+
codesearch: PermissionActionSchema.optional(),
|
|
439
|
+
doom_loop: PermissionActionSchema.optional()
|
|
440
|
+
}).catchall(PermissionRuleSchema);
|
|
441
|
+
var PermissionConfigSchema = z2.union([
|
|
442
|
+
PermissionActionSchema,
|
|
443
|
+
PermissionObjectSchema
|
|
444
|
+
]);
|
|
418
445
|
var AgentOverrideConfigSchema = z2.object({
|
|
419
446
|
model: z2.union([
|
|
420
447
|
z2.string(),
|
|
@@ -433,13 +460,15 @@ var AgentOverrideConfigSchema = z2.object({
|
|
|
433
460
|
prompt: z2.string().min(1).optional(),
|
|
434
461
|
orchestratorPrompt: z2.string().min(1).optional(),
|
|
435
462
|
options: z2.record(z2.string(), z2.unknown()).optional(),
|
|
436
|
-
displayName: z2.string().min(1).optional()
|
|
463
|
+
displayName: z2.string().min(1).optional(),
|
|
464
|
+
permission: PermissionConfigSchema.optional()
|
|
437
465
|
}).strict();
|
|
438
466
|
var MultiplexerTypeSchema = z2.enum([
|
|
439
467
|
"auto",
|
|
440
468
|
"tmux",
|
|
441
469
|
"zellij",
|
|
442
470
|
"herdr",
|
|
471
|
+
"cmux",
|
|
443
472
|
"none"
|
|
444
473
|
]);
|
|
445
474
|
var MultiplexerLayoutSchema = z2.enum([
|
|
@@ -485,7 +514,7 @@ var FailoverConfigSchema = z2.object({
|
|
|
485
514
|
retryDelayMs: z2.number().min(0).default(500),
|
|
486
515
|
maxRetries: z2.number().int().min(0).default(3).describe("Number of consecutive 429/rate-limit responses tolerated on the " + "same model before aborting (or swapping to the next fallback " + "model when a chain is configured)."),
|
|
487
516
|
retry_on_empty: z2.boolean().default(true).describe("When true (default), empty provider responses are treated as failures, " + "triggering fallback/retry. Set to false to treat them as successes."),
|
|
488
|
-
runtimeOverride: z2.boolean().
|
|
517
|
+
runtimeOverride: z2.boolean().optional().describe("DEPRECATED: no longer used. Previously controlled whether out-of-chain " + "runtime model picks triggered fallback. Fallback is now always " + "disabled when a user explicitly selects a model via /model.")
|
|
489
518
|
}).strict();
|
|
490
519
|
var CompanionConfigSchema = z2.object({
|
|
491
520
|
enabled: z2.boolean().optional(),
|
|
@@ -527,11 +556,13 @@ var PluginConfigSchema = z2.object({
|
|
|
527
556
|
preset: z2.string().optional(),
|
|
528
557
|
setDefaultAgent: z2.boolean().optional(),
|
|
529
558
|
compactSidebar: z2.boolean().optional().describe("Use the compact TUI sidebar layout. Defaults to true; set false to use the expanded layout."),
|
|
559
|
+
stripOrchestratorModel: z2.boolean().optional().describe("When true, omit orchestrator.model and orchestrator.variant from the SDK config so OpenCode uses the session model selected with /model after subagent dispatch. An explicitly selected preset that sets orchestrator.model is preserved. Defaults to false."),
|
|
530
560
|
autoUpdate: z2.boolean().optional().describe("Disable automatic installation of plugin updates when false. Defaults to true."),
|
|
531
561
|
presets: z2.record(z2.string(), PresetSchema).optional(),
|
|
532
562
|
agents: z2.record(z2.string(), AgentOverrideConfigSchema).optional(),
|
|
533
563
|
disabled_agents: z2.array(z2.string()).optional().describe("Agent names to disable completely. " + "Disabled agents are not instantiated and cannot be delegated to. " + "Orchestrator and council internal agents (councillor) cannot be disabled. " + "By default, 'observer' is disabled. Remove it from this list and configure a vision-capable model to enable."),
|
|
534
|
-
|
|
564
|
+
image_routing: z2.enum(["auto", "direct"]).optional().describe("How image attachments are handled. " + "When omitted, preserves legacy conditional behavior: intercept " + 'attachments only when observer is enabled. "auto": requires ' + "observer to be enabled and saves attachments to disk before " + 'nudging delegation to @observer. "direct": always passes ' + "attachments to the orchestrator untouched."),
|
|
565
|
+
disabled_mcps: z2.array(z2.string()).optional().describe("MCP server names to disable completely. Disabled servers are not " + "started and cannot be used by agents."),
|
|
535
566
|
disabled_tools: z2.array(z2.string()).optional().describe("Tool names to disable completely. Disabled tools are not registered with OpenCode and cannot be used by agents."),
|
|
536
567
|
disabled_skills: z2.array(z2.string()).optional().describe("Skill names to disable completely. Disabled skills are not granted to agents, even when referenced by presets or agent overrides."),
|
|
537
568
|
multiplexer: MultiplexerConfigSchema.optional(),
|
|
@@ -595,6 +626,12 @@ var CUSTOM_SKILLS = [
|
|
|
595
626
|
allowedAgents: ["orchestrator"],
|
|
596
627
|
sourcePath: "src/skills/deepwork"
|
|
597
628
|
},
|
|
629
|
+
{
|
|
630
|
+
name: "verification-planning",
|
|
631
|
+
description: "Plan credible, proportionate evidence before non-trivial implementation",
|
|
632
|
+
allowedAgents: ["orchestrator"],
|
|
633
|
+
sourcePath: "src/skills/verification-planning"
|
|
634
|
+
},
|
|
598
635
|
{
|
|
599
636
|
name: "reflect",
|
|
600
637
|
description: "Review repeated work and suggest reusable workflow improvements",
|
|
@@ -607,12 +644,6 @@ var CUSTOM_SKILLS = [
|
|
|
607
644
|
allowedAgents: ["orchestrator"],
|
|
608
645
|
sourcePath: "src/skills/oh-my-opencode-slim"
|
|
609
646
|
},
|
|
610
|
-
{
|
|
611
|
-
name: "release-smoke-test",
|
|
612
|
-
description: "Validate packed release candidates and bugfixes before public publish",
|
|
613
|
-
allowedAgents: ["orchestrator"],
|
|
614
|
-
sourcePath: "src/skills/release-smoke-test"
|
|
615
|
-
},
|
|
616
647
|
{
|
|
617
648
|
name: "worktrees",
|
|
618
649
|
description: "Manage Git worktrees as OMO safe isolated coding lanes for complex/risky/parallel work",
|
|
@@ -634,7 +665,7 @@ var MODEL_MAPPINGS = {
|
|
|
634
665
|
fixer: { model: "openai/gpt-5.6-luna", variant: "medium" }
|
|
635
666
|
},
|
|
636
667
|
kimi: {
|
|
637
|
-
orchestrator: { model: "kimi-for-coding/k2p5" },
|
|
668
|
+
orchestrator: { model: "kimi-for-coding/k2p5", variant: "max" },
|
|
638
669
|
oracle: { model: "kimi-for-coding/k2p5", variant: "high" },
|
|
639
670
|
librarian: { model: "kimi-for-coding/k2p5", variant: "low" },
|
|
640
671
|
explorer: { model: "kimi-for-coding/k2p5", variant: "low" },
|
|
@@ -642,7 +673,7 @@ var MODEL_MAPPINGS = {
|
|
|
642
673
|
fixer: { model: "kimi-for-coding/k2p5", variant: "low" }
|
|
643
674
|
},
|
|
644
675
|
copilot: {
|
|
645
|
-
orchestrator: { model: "github-copilot/claude-opus-4.6" },
|
|
676
|
+
orchestrator: { model: "github-copilot/claude-opus-4.6", variant: "max" },
|
|
646
677
|
oracle: { model: "github-copilot/claude-opus-4.6", variant: "high" },
|
|
647
678
|
librarian: { model: "github-copilot/grok-code-fast-1", variant: "low" },
|
|
648
679
|
explorer: { model: "github-copilot/grok-code-fast-1", variant: "low" },
|
|
@@ -653,7 +684,7 @@ var MODEL_MAPPINGS = {
|
|
|
653
684
|
fixer: { model: "github-copilot/claude-sonnet-4.6", variant: "low" }
|
|
654
685
|
},
|
|
655
686
|
"zai-plan": {
|
|
656
|
-
orchestrator: { model: "zai-coding-plan/glm-5" },
|
|
687
|
+
orchestrator: { model: "zai-coding-plan/glm-5", variant: "max" },
|
|
657
688
|
oracle: { model: "zai-coding-plan/glm-5", variant: "high" },
|
|
658
689
|
librarian: { model: "zai-coding-plan/glm-5", variant: "low" },
|
|
659
690
|
explorer: { model: "zai-coding-plan/glm-5", variant: "low" },
|
|
@@ -661,13 +692,13 @@ var MODEL_MAPPINGS = {
|
|
|
661
692
|
fixer: { model: "zai-coding-plan/glm-5", variant: "low" }
|
|
662
693
|
},
|
|
663
694
|
"opencode-go": {
|
|
664
|
-
orchestrator: { model: "opencode-go/
|
|
695
|
+
orchestrator: { model: "opencode-go/minimax-m3", variant: "max" },
|
|
665
696
|
oracle: { model: "opencode-go/qwen3.7-max", variant: "max" },
|
|
666
|
-
|
|
667
|
-
|
|
697
|
+
explorer: { model: "opencode-go/deepseek-v4-flash", variant: "max" },
|
|
698
|
+
librarian: { model: "opencode-go/deepseek-v4-flash", variant: "high" },
|
|
668
699
|
designer: { model: "opencode-go/kimi-k2.7-code", variant: "medium" },
|
|
669
700
|
fixer: { model: "opencode-go/deepseek-v4-flash", variant: "high" },
|
|
670
|
-
observer: { model: "opencode-go/
|
|
701
|
+
observer: { model: "opencode-go/mimo-v2.5", variant: "max" }
|
|
671
702
|
}
|
|
672
703
|
};
|
|
673
704
|
function isGeneratedPresetName(value) {
|
|
@@ -2757,7 +2788,9 @@ async function installCompanionArchive(finalBinaryPath, target, manifest, downlo
|
|
|
2757
2788
|
if (tempDir) {
|
|
2758
2789
|
try {
|
|
2759
2790
|
rmSync3(tempDir, { recursive: true, force: true });
|
|
2760
|
-
} catch {
|
|
2791
|
+
} catch (err) {
|
|
2792
|
+
log("[updater] install cleanup failed", String(err));
|
|
2793
|
+
}
|
|
2761
2794
|
}
|
|
2762
2795
|
}
|
|
2763
2796
|
}
|
|
@@ -2767,7 +2800,9 @@ function readInstallMetadata(binaryPath) {
|
|
|
2767
2800
|
if (parsed?.version && parsed.tag && parsed.target) {
|
|
2768
2801
|
return parsed;
|
|
2769
2802
|
}
|
|
2770
|
-
} catch {
|
|
2803
|
+
} catch (err) {
|
|
2804
|
+
log("[updater] metadata read failed", String(err));
|
|
2805
|
+
}
|
|
2771
2806
|
return null;
|
|
2772
2807
|
}
|
|
2773
2808
|
function writeInstallMetadata(binaryPath, metadata) {
|
|
@@ -2789,7 +2824,9 @@ async function withCompanionInstallLock(binaryPath, timeoutMs, staleMs, run) {
|
|
|
2789
2824
|
} finally {
|
|
2790
2825
|
try {
|
|
2791
2826
|
rmSync3(lock, { recursive: true, force: true });
|
|
2792
|
-
} catch {
|
|
2827
|
+
} catch (err) {
|
|
2828
|
+
log("[updater] lock release failed", String(err));
|
|
2829
|
+
}
|
|
2793
2830
|
}
|
|
2794
2831
|
} catch (err) {
|
|
2795
2832
|
const code = err.code;
|