oh-my-opencode-slim 2.1.0 → 2.2.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.ja-JP.md +31 -30
- package/README.ko-KR.md +31 -30
- package/README.md +57 -33
- package/README.zh-CN.md +29 -28
- package/dist/agents/index.d.ts +0 -4
- package/dist/cli/index.js +90 -16
- package/dist/cli/providers.d.ts +7 -7
- package/dist/companion/manager.d.ts +3 -0
- package/dist/config/constants.d.ts +12 -1
- package/dist/config/council-schema.d.ts +37 -12
- package/dist/config/schema.d.ts +691 -6
- package/dist/config/strip-orchestrator-model.d.ts +9 -0
- package/dist/council/council-manager.d.ts +7 -3
- package/dist/hooks/command-hook-utils.d.ts +5 -0
- package/dist/hooks/foreground-fallback/index.d.ts +53 -7
- package/dist/hooks/image-hook.d.ts +1 -0
- package/dist/hooks/index.d.ts +2 -1
- package/dist/hooks/phase-reminder/index.d.ts +3 -1
- package/dist/hooks/post-file-tool-nudge/index.d.ts +15 -9
- package/dist/hooks/session-lifecycle.d.ts +11 -0
- package/dist/hooks/task-session-manager/index.d.ts +14 -2
- package/dist/index.js +2804 -801
- package/dist/interview/document.d.ts +2 -1
- package/dist/interview/service.d.ts +2 -0
- 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 +7 -3
- package/dist/multiplexer/index.d.ts +3 -1
- package/dist/multiplexer/session-manager.d.ts +14 -6
- package/dist/multiplexer/shared.d.ts +31 -0
- package/dist/multiplexer/tmux/index.d.ts +0 -1
- package/dist/multiplexer/types.d.ts +5 -2
- package/dist/multiplexer/zellij/index.d.ts +0 -1
- package/dist/tools/cancel-task.d.ts +2 -2
- package/dist/tools/smartfetch/utils.d.ts +3 -1
- package/dist/tui-state.d.ts +5 -5
- package/dist/tui.d.ts +1 -0
- package/dist/tui.js +130 -29
- package/dist/utils/background-job-board.d.ts +5 -1
- package/dist/utils/background-job-coordinator.d.ts +72 -0
- package/dist/utils/background-job-store.d.ts +46 -0
- package/dist/utils/councillor-models.d.ts +20 -0
- package/dist/utils/escape-html.d.ts +1 -0
- package/dist/utils/frontmatter.d.ts +6 -0
- package/dist/utils/index.d.ts +3 -1
- package/dist/utils/internal-initiator.d.ts +6 -1
- package/dist/utils/logger.d.ts +0 -2
- package/dist/utils/session.d.ts +1 -1
- package/oh-my-opencode-slim.schema.json +728 -1
- package/package.json +1 -1
- package/src/skills/clonedeps/SKILL.md +32 -29
- package/src/skills/codemap.md +7 -3
- package/src/skills/deepwork/SKILL.md +17 -6
- package/src/skills/oh-my-opencode-slim/SKILL.md +3 -3
- package/src/skills/release-smoke-test/SKILL.md +2 -2
- package/src/skills/verification-planning/SKILL.md +103 -0
- package/src/skills/worktrees/SKILL.md +14 -7
package/README.md
CHANGED
|
@@ -30,19 +30,14 @@ The main idea is simple: instead of forcing one model to do everything, the plug
|
|
|
30
30
|
|
|
31
31
|
To explore the agents themselves, see **[Meet the Pantheon](#meet-the-pantheon)**. For the full feature set, see **[Features & Workflows](#features-and-workflows)** below.
|
|
32
32
|
|
|
33
|
-
###
|
|
33
|
+
### OpenAI GPT-5.6
|
|
34
34
|
|
|
35
35
|
<p align="center">
|
|
36
|
-
<
|
|
37
|
-
<img src="img/lazyskills-wide.svg" alt="LazySkills" width="720">
|
|
38
|
-
</a>
|
|
36
|
+
<img src="img/openai-gpt-5-6-pantheon.jpeg" alt="OpenAI GPT-5.6 Pantheon: Terra, Sol, and Luna" width="100%">
|
|
39
37
|
</p>
|
|
40
38
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
<p align="center">
|
|
44
|
-
<a href="https://github.com/alvinunreal/lazyskills"><b>Explore LazySkills →</b></a>
|
|
45
|
-
</p>
|
|
39
|
+
The default [OpenAI preset](docs/openai-preset.md) maps Terra to Orchestrator,
|
|
40
|
+
Sol to Oracle, and Luna to the fast specialist lanes.
|
|
46
41
|
|
|
47
42
|
### What Users Say
|
|
48
43
|
|
|
@@ -137,7 +132,7 @@ Then:
|
|
|
137
132
|
> It's **recommended** to understand how background orchestration works. The **[Orchestrator prompt](https://github.com/alvinunreal/oh-my-opencode-slim/blob/master/src/agents/orchestrator.ts#L28)** contains the scheduler rules, specialist routing logic, and thresholds for when work should be assigned to background agents. You can always delegate manually by calling a subagent via: `@agentName <task>`
|
|
138
133
|
|
|
139
134
|
> [!TIP]
|
|
140
|
-
> Because background agents are now the default workflow, it is **highly recommended** to enable and configure **[Multiplexer Integration](docs/multiplexer-integration.md)**. It automatically opens each agent in a dedicated Tmux, Zellij, or
|
|
135
|
+
> Because background agents are now the default workflow, it is **highly recommended** to enable and configure **[Multiplexer Integration](docs/multiplexer-integration.md)**. It automatically opens each agent in a dedicated Tmux, Zellij, Herdr, or cmux pane, so you can watch specialists work live while the Orchestrator continues coordinating the session.
|
|
141
136
|
|
|
142
137
|
The default generated configuration includes both `openai` and `opencode-go` presets.
|
|
143
138
|
|
|
@@ -147,12 +142,12 @@ The default generated configuration includes both `openai` and `opencode-go` pre
|
|
|
147
142
|
"preset": "openai",
|
|
148
143
|
"presets": {
|
|
149
144
|
"openai": {
|
|
150
|
-
"orchestrator": { "model": "openai/gpt-5.
|
|
151
|
-
"oracle": { "model": "openai/gpt-5.
|
|
152
|
-
"librarian": { "model": "openai/gpt-5.
|
|
153
|
-
"explorer": { "model": "openai/gpt-5.
|
|
154
|
-
"designer": { "model": "openai/gpt-5.
|
|
155
|
-
"fixer": { "model": "openai/gpt-5.
|
|
145
|
+
"orchestrator": { "model": "openai/gpt-5.6-terra", "variant": "medium", "skills": ["*"], "mcps": ["*", "!context7"] },
|
|
146
|
+
"oracle": { "model": "openai/gpt-5.6-sol", "variant": "high", "skills": ["simplify"], "mcps": [] },
|
|
147
|
+
"librarian": { "model": "openai/gpt-5.6-luna", "variant": "low", "skills": [], "mcps": ["websearch", "context7", "gh_grep"] },
|
|
148
|
+
"explorer": { "model": "openai/gpt-5.6-luna", "variant": "low", "skills": [], "mcps": [] },
|
|
149
|
+
"designer": { "model": "openai/gpt-5.6-luna", "variant": "medium", "skills": [], "mcps": [] },
|
|
150
|
+
"fixer": { "model": "openai/gpt-5.6-luna", "variant": "medium", "skills": [], "mcps": [] }
|
|
156
151
|
},
|
|
157
152
|
"opencode-go": {
|
|
158
153
|
"orchestrator": { "model": "opencode-go/glm-5.2", "skills": [ "*" ], "mcps": [ "*", "!context7" ] },
|
|
@@ -166,9 +161,17 @@ The default generated configuration includes both `openai` and `opencode-go` pre
|
|
|
166
161
|
}
|
|
167
162
|
```
|
|
168
163
|
|
|
164
|
+
### Preset Docs
|
|
165
|
+
|
|
166
|
+
- **[OpenAI Preset](docs/openai-preset.md)** — the default generated preset; runs all agents on OpenAI models.
|
|
167
|
+
- **[OpenCode Go Preset](docs/opencode-go-preset.md)** — runs the agents on OpenCode Go models; enables the Observer agent for visual analysis since its orchestrator model isn't multimodal.
|
|
168
|
+
- **[Author's Preset](docs/authors-preset.md)** — the exact config the author runs day to day, with third-party skills.
|
|
169
|
+
- **[$30 Preset](docs/thirty-dollars-preset.md)** — a mixed-provider setup built around Codex Plus and GitHub Copilot Pro for about $30/month.
|
|
170
|
+
- **[OpenCode Zen Free Preset](docs/opencode-zen-free-preset.md)** — every agent runs on an opencode free model; no usage cost.
|
|
171
|
+
|
|
169
172
|
### For Alternative Providers
|
|
170
173
|
|
|
171
|
-
To use custom providers or a mixed-provider setup, use **[Configuration](docs/configuration.md)** for the full reference.
|
|
174
|
+
To use custom providers or a mixed-provider setup, use **[Configuration](docs/configuration.md)** for the full reference.
|
|
172
175
|
|
|
173
176
|
### ✅ Verify Your Setup
|
|
174
177
|
|
|
@@ -206,6 +209,9 @@ verification while specialists do the work in their own lanes.
|
|
|
206
209
|
agents are currently active, including parallel background specialists.
|
|
207
210
|
- **[Deepwork](#deepwork)** - a structured workflow for large, multi-file, risky,
|
|
208
211
|
or phased coding work using persistent plan files and Oracle review gates.
|
|
212
|
+
- **[Verification Planning](#verification-planning)** - plans a project-specific
|
|
213
|
+
evidence path before non-trivial implementation, including verification
|
|
214
|
+
affordances when the system needs to become more legible to an agent.
|
|
209
215
|
- **[Reflect](#reflect)** - reviews repeated work patterns and suggests reusable skills,
|
|
210
216
|
agents, commands, config rules, prompt rules, or project playbooks.
|
|
211
217
|
- **[Worktrees](#worktrees)** - manages Git worktrees as isolated coding lanes
|
|
@@ -220,7 +226,7 @@ V2 makes background specialists the default mental model: the Orchestrator plans
|
|
|
220
226
|
the work graph, launches the right agents, avoids overlapping write ownership,
|
|
221
227
|
and waits for terminal task results before acting on them.
|
|
222
228
|
|
|
223
|
-
See **[Background Orchestration](docs/
|
|
229
|
+
See **[Background Orchestration](docs/background-orchestration.md)** for the
|
|
224
230
|
full scheduler model.
|
|
225
231
|
|
|
226
232
|
#### Companion
|
|
@@ -260,6 +266,18 @@ Start it with:
|
|
|
260
266
|
See **[Skills](docs/skills.md#deepwork)** for when to use it and how the workflow
|
|
261
267
|
runs.
|
|
262
268
|
|
|
269
|
+
#### Verification Planning
|
|
270
|
+
|
|
271
|
+
Verification Planning gives the Orchestrator a way to decide how a non-trivial
|
|
272
|
+
change will be proven before implementation begins. It frames the claim, designs
|
|
273
|
+
project-specific evidence paths, and can create a small verification affordance
|
|
274
|
+
when the system cannot directly reveal the decisive state to an agent. For
|
|
275
|
+
unfamiliar capabilities, it asks the Librarian for focused research before
|
|
276
|
+
choosing an approach.
|
|
277
|
+
|
|
278
|
+
See **[Skills](docs/skills.md#verification-planning)** for the evidence-path
|
|
279
|
+
workflow and its safety boundaries.
|
|
280
|
+
|
|
263
281
|
#### Reflect
|
|
264
282
|
|
|
265
283
|
Reflect helps the Orchestrator learn from repeated workflow friction. It reviews
|
|
@@ -335,12 +353,12 @@ rules.
|
|
|
335
353
|
</tr>
|
|
336
354
|
<tr>
|
|
337
355
|
<td colspan="2">
|
|
338
|
-
<b>Default Model:</b> <code>openai/gpt-5.
|
|
356
|
+
<b>Default Model:</b> <code>openai/gpt-5.6-terra (medium)</code>
|
|
339
357
|
</td>
|
|
340
358
|
</tr>
|
|
341
359
|
<tr>
|
|
342
360
|
<td colspan="2">
|
|
343
|
-
<b>Recommended Models:</b> <code>openai/gpt-5.
|
|
361
|
+
<b>Recommended Models:</b> <code>openai/gpt-5.6-terra (medium)</code> <code>anthropic/claude-fable-5</code> <code>anthropic/claude-opus-4-8</code>
|
|
344
362
|
</td>
|
|
345
363
|
</tr>
|
|
346
364
|
<tr>
|
|
@@ -376,7 +394,7 @@ rules.
|
|
|
376
394
|
</tr>
|
|
377
395
|
<tr>
|
|
378
396
|
<td colspan="2">
|
|
379
|
-
<b>Default Model:</b> <code>openai/gpt-5.
|
|
397
|
+
<b>Default Model:</b> <code>openai/gpt-5.6-luna</code>
|
|
380
398
|
</td>
|
|
381
399
|
</tr>
|
|
382
400
|
<tr>
|
|
@@ -417,12 +435,12 @@ rules.
|
|
|
417
435
|
</tr>
|
|
418
436
|
<tr>
|
|
419
437
|
<td colspan="2">
|
|
420
|
-
<b>Default Model:</b> <code>openai/gpt-5.
|
|
438
|
+
<b>Default Model:</b> <code>openai/gpt-5.6-sol (high)</code>
|
|
421
439
|
</td>
|
|
422
440
|
</tr>
|
|
423
441
|
<tr>
|
|
424
442
|
<td colspan="2">
|
|
425
|
-
<b>Recommended Models:</b> <code>openai/gpt-5.
|
|
443
|
+
<b>Recommended Models:</b> <code>openai/gpt-5.6-sol (xhigh)</code> <code>anthropic/claude-fable-5</code> <code>anthropic/claude-opus-4-8 (xhigh)</code>
|
|
426
444
|
</td>
|
|
427
445
|
</tr>
|
|
428
446
|
<tr>
|
|
@@ -507,7 +525,7 @@ rules.
|
|
|
507
525
|
</tr>
|
|
508
526
|
<tr>
|
|
509
527
|
<td colspan="2">
|
|
510
|
-
<b>Default Model:</b> <code>openai/gpt-5.
|
|
528
|
+
<b>Default Model:</b> <code>openai/gpt-5.6-luna</code>
|
|
511
529
|
</td>
|
|
512
530
|
</tr>
|
|
513
531
|
<tr>
|
|
@@ -548,7 +566,7 @@ rules.
|
|
|
548
566
|
</tr>
|
|
549
567
|
<tr>
|
|
550
568
|
<td colspan="2">
|
|
551
|
-
<b>Default Model:</b> <code>openai/gpt-5.
|
|
569
|
+
<b>Default Model:</b> <code>openai/gpt-5.6-luna</code>
|
|
552
570
|
</td>
|
|
553
571
|
</tr>
|
|
554
572
|
<tr>
|
|
@@ -589,12 +607,12 @@ rules.
|
|
|
589
607
|
</tr>
|
|
590
608
|
<tr>
|
|
591
609
|
<td colspan="2">
|
|
592
|
-
<b>Default Model:</b> <code>openai/gpt-5.
|
|
610
|
+
<b>Default Model:</b> <code>openai/gpt-5.6-luna (medium)</code>
|
|
593
611
|
</td>
|
|
594
612
|
</tr>
|
|
595
613
|
<tr>
|
|
596
614
|
<td colspan="2">
|
|
597
|
-
<b>Recommended Models:</b> <code>openai/gpt-5.
|
|
615
|
+
<b>Recommended Models:</b> <code>openai/gpt-5.6-luna (medium)</code> <code>anthropic/claude-sonnet-4-6</code>
|
|
598
616
|
</td>
|
|
599
617
|
</tr>
|
|
600
618
|
<tr>
|
|
@@ -611,7 +629,7 @@ rules.
|
|
|
611
629
|
### Observer: The Silent Witness
|
|
612
630
|
|
|
613
631
|
> [!NOTE]
|
|
614
|
-
> **Why a separate agent?** If your Orchestrator model is not multimodal, enable Observer to handle images, screenshots,
|
|
632
|
+
> **Why a separate agent?** If your Orchestrator model is not multimodal, enable Observer to handle images, screenshots, and other visual files. Observer is disabled by default and gives the Orchestrator a dedicated multimodal reader without forcing you to change your main reasoning model. Set `disabled_agents: []` and an `observer` model in your configuration. The bundled `opencode-go` install preset does this automatically because its GLM Orchestrator is not multimodal. Omitting `image_routing` preserves existing conditional Observer behavior. Set `image_routing: "auto"` only when Observer is enabled, or `"direct"` to always pass image attachments to the Orchestrator.
|
|
615
633
|
|
|
616
634
|
<table>
|
|
617
635
|
<tr>
|
|
@@ -625,7 +643,7 @@ rules.
|
|
|
625
643
|
|
|
626
644
|
- Images, screenshots, diagrams → `read` tool (native image support)
|
|
627
645
|
- PDFs and binary documents → `read` tool (text + structure extraction)
|
|
628
|
-
- **Disabled by default** - enable with `"disabled_agents": []` and configure a vision-capable model; installing with `--preset=opencode-go` enables it with `opencode-go/kimi-k2.6`
|
|
646
|
+
- **Disabled by default** - enable with `"disabled_agents": []` and configure a vision-capable model; installing with `--preset=opencode-go` enables it with `opencode-go/kimi-k2.6`. Image attachments route to Observer by default when it is enabled; set `"image_routing": "direct"` to keep them on the Orchestrator.
|
|
629
647
|
|
|
630
648
|
</td>
|
|
631
649
|
</tr>
|
|
@@ -636,7 +654,7 @@ rules.
|
|
|
636
654
|
</tr>
|
|
637
655
|
<tr>
|
|
638
656
|
<td colspan="2">
|
|
639
|
-
<b>Default Model:</b> <code>openai/gpt-5.
|
|
657
|
+
<b>Default Model:</b> <code>openai/gpt-5.6-luna</code> - <i>configure a vision-capable model to enable</i>
|
|
640
658
|
</td>
|
|
641
659
|
</tr>
|
|
642
660
|
<tr>
|
|
@@ -661,7 +679,7 @@ Use this section as a map: start with installation, then jump to features, confi
|
|
|
661
679
|
| **[Council](docs/council.md)** | Run multiple models in parallel and synthesize a single answer with `@council` |
|
|
662
680
|
| **[Custom Agents](docs/configuration.md#custom-agents)** | Define your own specialists with custom prompts, models, MCP access, and Orchestrator delegation rules |
|
|
663
681
|
| **[ACP Agents](docs/acp-agents.md)** | Connect external ACP-compatible agents such as Claude Code ACP or Gemini ACP as delegatable subagents |
|
|
664
|
-
| **[Multiplexer Integration](docs/multiplexer-integration.md)** | Watch agents work live in Tmux, Zellij, or
|
|
682
|
+
| **[Multiplexer Integration](docs/multiplexer-integration.md)** | Watch agents work live in Tmux, Zellij, Herdr, or cmux panes |
|
|
665
683
|
| **[Codemap](docs/codemap.md)** | Generate hierarchical codemaps to understand large codebases faster |
|
|
666
684
|
| **[Clonedeps](docs/clonedeps.md)** | Clone selected dependency source into an ignored local workspace for inspection |
|
|
667
685
|
| **[Worktrees](docs/worktrees.md)** | Use `.slim/worktrees/` lanes for isolated parallel or risky coding work |
|
|
@@ -678,7 +696,7 @@ Use this section as a map: start with installation, then jump to features, confi
|
|
|
678
696
|
| **[Project Customization](docs/project-local-customization.md)** | Repository-specific custom agents, prompt overrides, per-agent skills, and precedence |
|
|
679
697
|
| **[Background Orchestration](docs/background-orchestration.md)** | Scheduler-first orchestrator model built around native background subagents |
|
|
680
698
|
| **[Maintainer Guide](docs/maintainers.md)** | Issue triage rules, label meanings, support routing, and repo maintenance workflow |
|
|
681
|
-
| **[Skills](docs/skills.md)** | Bundled skills such as `simplify`, `codemap`, `clonedeps`, `deepwork`, `reflect`, `worktrees`, and `oh-my-opencode-slim` |
|
|
699
|
+
| **[Skills](docs/skills.md)** | Bundled skills such as `simplify`, `codemap`, `clonedeps`, `deepwork`, `verification-planning`, `reflect`, `worktrees`, and `oh-my-opencode-slim` |
|
|
682
700
|
| **[MCPs](docs/mcps.md)** | `websearch`, `context7`, `gh_grep`, and how MCP permissions work per agent |
|
|
683
701
|
| **[Tools](docs/tools.md)** | Built-in tool capabilities like `webfetch`, LSP tools, code search, and formatters |
|
|
684
702
|
|
|
@@ -699,7 +717,7 @@ Use this section as a map: start with installation, then jump to features, confi
|
|
|
699
717
|
<p><sub>Every merged contribution leaves a mark on the realm.</sub></p>
|
|
700
718
|
|
|
701
719
|
<!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section -->
|
|
702
|
-
[](#contributors-)
|
|
703
721
|
<!-- ALL-CONTRIBUTORS-BADGE:END -->
|
|
704
722
|
</div>
|
|
705
723
|
|
|
@@ -806,6 +824,12 @@ Use this section as a map: start with installation, then jump to features, confi
|
|
|
806
824
|
<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>
|
|
807
825
|
<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>
|
|
808
826
|
</tr>
|
|
827
|
+
<tr>
|
|
828
|
+
<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>
|
|
829
|
+
<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>
|
|
830
|
+
<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>
|
|
831
|
+
<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>
|
|
832
|
+
</tr>
|
|
809
833
|
</tbody>
|
|
810
834
|
</table>
|
|
811
835
|
|
package/README.zh-CN.md
CHANGED
|
@@ -32,19 +32,13 @@ oh-my-opencode-slim 是一个用于 OpenCode 的智能体编排插件。它内
|
|
|
32
32
|
|
|
33
33
|
要了解智能体本身,请参阅 **[认识众神殿](#meet-the-pantheon)**。如需了解完整特性集,请参阅下方的 **[特性与工作流](#features-and-workflows)**。
|
|
34
34
|
|
|
35
|
-
###
|
|
35
|
+
### OpenAI GPT-5.6
|
|
36
36
|
|
|
37
37
|
<p align="center">
|
|
38
|
-
<
|
|
39
|
-
<img src="img/lazyskills-wide.svg" alt="LazySkills" width="720">
|
|
40
|
-
</a>
|
|
38
|
+
<img src="img/openai-gpt-5-6-pantheon.jpeg" alt="OpenAI GPT-5.6 众神殿:Terra、Sol 和 Luna" width="720">
|
|
41
39
|
</p>
|
|
42
40
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
<p align="center">
|
|
46
|
-
<a href="https://github.com/alvinunreal/lazyskills"><b>探索 LazySkills →</b></a>
|
|
47
|
-
</p>
|
|
41
|
+
默认的 [OpenAI 预设](docs/openai-preset.md) 将 Terra 映射为 Orchestrator、Sol 映射为 Oracle、Luna 映射为快速专家通道。
|
|
48
42
|
|
|
49
43
|
### 用户怎么说
|
|
50
44
|
|
|
@@ -134,7 +128,7 @@ bun run build
|
|
|
134
128
|
> **建议**了解后台编排的工作原理。**[编排者提示词 (Orchestrator prompt)](https://github.com/alvinunreal/oh-my-opencode-slim/blob/master/src/agents/orchestrator.ts#L28)** 包含调度规则、专家路由逻辑,以及何时应把工作分配给后台智能体的阈值。您始终可以通过以下方式手动委派任务:`@智能体名称 <任务内容>`
|
|
135
129
|
|
|
136
130
|
> [!TIP]
|
|
137
|
-
> 由于后台智能体现在是默认工作流,**强烈建议**启用并配置 **[Multiplexer Integration](docs/multiplexer-integration.md)**。它会自动在专用的 Tmux、Zellij 或
|
|
131
|
+
> 由于后台智能体现在是默认工作流,**强烈建议**启用并配置 **[Multiplexer Integration](docs/multiplexer-integration.md)**。它会自动在专用的 Tmux、Zellij、Herdr 或 cmux 窗格中打开每个智能体,让您在 Orchestrator 继续协调会话时,实时跟进各个专家智能体的工作。
|
|
138
132
|
|
|
139
133
|
默认生成的配置包含 `openai` 和 `opencode-go` 两个预设:
|
|
140
134
|
|
|
@@ -144,12 +138,12 @@ bun run build
|
|
|
144
138
|
"preset": "openai",
|
|
145
139
|
"presets": {
|
|
146
140
|
"openai": {
|
|
147
|
-
"orchestrator": { "model": "openai/gpt-5.
|
|
148
|
-
"oracle": { "model": "openai/gpt-5.
|
|
149
|
-
"librarian": { "model": "openai/gpt-5.
|
|
150
|
-
"explorer": { "model": "openai/gpt-5.
|
|
151
|
-
"designer": { "model": "openai/gpt-5.
|
|
152
|
-
"fixer": { "model": "openai/gpt-5.
|
|
141
|
+
"orchestrator": { "model": "openai/gpt-5.6-terra", "variant": "medium", "skills": ["*"], "mcps": ["*", "!context7"] },
|
|
142
|
+
"oracle": { "model": "openai/gpt-5.6-sol", "variant": "high", "skills": ["simplify"], "mcps": [] },
|
|
143
|
+
"librarian": { "model": "openai/gpt-5.6-luna", "variant": "low", "skills": [], "mcps": ["websearch", "context7", "gh_grep"] },
|
|
144
|
+
"explorer": { "model": "openai/gpt-5.6-luna", "variant": "low", "skills": [], "mcps": [] },
|
|
145
|
+
"designer": { "model": "openai/gpt-5.6-luna", "variant": "medium", "skills": [], "mcps": [] },
|
|
146
|
+
"fixer": { "model": "openai/gpt-5.6-luna", "variant": "medium", "skills": [], "mcps": [] }
|
|
153
147
|
},
|
|
154
148
|
"opencode-go": {
|
|
155
149
|
"orchestrator": { "model": "opencode-go/glm-5.2", "skills": [ "*" ], "mcps": [ "*", "!context7" ] },
|
|
@@ -197,6 +191,7 @@ V2 将 oh-my-opencode-slim 变成了以调度器为核心的多智能体工作
|
|
|
197
191
|
- **[后台智能体](#后台智能体)** - Orchestrator 现在会把专家作为后台任务派发,跟踪任务/会话 ID,等待完成事件,并在继续之前整合结果。
|
|
198
192
|
- **[Companion](#companion)** - 可选的浮动桌面窗口会显示当前活跃的智能体,包括并行运行的后台专家。
|
|
199
193
|
- **[Deepwork](#deepwork)** - 面向大型、多文件、高风险或分阶段编码工作的结构化工作流,使用持久化计划文件和 Oracle 评审关卡。
|
|
194
|
+
- **[验证规划](#验证规划)** - 在非平凡实现前规划项目特定的证据路径;当系统需要更易被智能体理解时,可加入验证能力。
|
|
200
195
|
- **[Reflect](#reflect)** - 回顾重复出现的工作模式,并建议可复用的 skill、智能体、命令、配置规则、提示词规则或项目 playbook。
|
|
201
196
|
- **[Worktrees](#worktrees)** - 将 Git worktree 作为隔离编码通道管理,并为复杂、高风险或并行任务提供安全协议。
|
|
202
197
|
- **[oh-my-opencode-slim Skill](#oh-my-opencode-slim-skill)** - 随包提供的配置技能,可安全调优模型、提示词、自定义智能体、MCP 访问、预设和插件行为。
|
|
@@ -236,6 +231,12 @@ Deepwork 适用于重型编码会话:大范围重构、多阶段功能、高
|
|
|
236
231
|
|
|
237
232
|
何时使用以及工作流如何运行,请参阅 **[Skills](docs/skills.md#deepwork)**。
|
|
238
233
|
|
|
234
|
+
#### 验证规划
|
|
235
|
+
|
|
236
|
+
验证规划让 Orchestrator 在开始非平凡实现前,先决定如何证明变更有效。它会界定要成立的主张、设计项目特定的证据路径;当系统无法直接向智能体揭示决定性状态时,还可创建小型验证能力。面对不熟悉的能力时,它会在选择方案前请 Librarian 做有针对性的研究。
|
|
237
|
+
|
|
238
|
+
证据路径工作流及其安全边界见 **[Skills](docs/skills.md#verification-planning)**。
|
|
239
|
+
|
|
239
240
|
#### Reflect
|
|
240
241
|
|
|
241
242
|
Reflect 帮助 Orchestrator 从重复出现的工作流摩擦中学习。它会回顾近期工作和现有资产,然后建议最小且有用的改进:skill、自定义智能体、命令、配置规则、提示词规则、MCP 权限变更或项目 playbook。如果证据不足,它应建议什么都不创建。
|
|
@@ -303,12 +304,12 @@ Worktrees 将 Git worktree 作为安全、隔离的编码通道管理,默认
|
|
|
303
304
|
</tr>
|
|
304
305
|
<tr>
|
|
305
306
|
<td colspan="2">
|
|
306
|
-
<b>默认模型:</b> <code>openai/gpt-5.
|
|
307
|
+
<b>默认模型:</b> <code>openai/gpt-5.6-terra (medium)</code>
|
|
307
308
|
</td>
|
|
308
309
|
</tr>
|
|
309
310
|
<tr>
|
|
310
311
|
<td colspan="2">
|
|
311
|
-
<b>推荐模型:</b> <code>openai/gpt-5.
|
|
312
|
+
<b>推荐模型:</b> <code>openai/gpt-5.6-terra (medium)</code> <code>anthropic/claude-opus-4.6</code>
|
|
312
313
|
</td>
|
|
313
314
|
</tr>
|
|
314
315
|
<tr>
|
|
@@ -344,7 +345,7 @@ Worktrees 将 Git worktree 作为安全、隔离的编码通道管理,默认
|
|
|
344
345
|
</tr>
|
|
345
346
|
<tr>
|
|
346
347
|
<td colspan="2">
|
|
347
|
-
<b>默认模型:</b> <code>openai/gpt-5.
|
|
348
|
+
<b>默认模型:</b> <code>openai/gpt-5.6-luna</code>
|
|
348
349
|
</td>
|
|
349
350
|
</tr>
|
|
350
351
|
<tr>
|
|
@@ -385,12 +386,12 @@ Worktrees 将 Git worktree 作为安全、隔离的编码通道管理,默认
|
|
|
385
386
|
</tr>
|
|
386
387
|
<tr>
|
|
387
388
|
<td colspan="2">
|
|
388
|
-
<b>默认模型:</b> <code>openai/gpt-5.
|
|
389
|
+
<b>默认模型:</b> <code>openai/gpt-5.6-sol (high)</code>
|
|
389
390
|
</td>
|
|
390
391
|
</tr>
|
|
391
392
|
<tr>
|
|
392
393
|
<td colspan="2">
|
|
393
|
-
<b>推荐模型:</b> <code>openai/gpt-5.
|
|
394
|
+
<b>推荐模型:</b> <code>openai/gpt-5.6-sol (high)</code> <code>google/gemini-3.1-pro-preview (high)</code>
|
|
394
395
|
</td>
|
|
395
396
|
</tr>
|
|
396
397
|
<tr>
|
|
@@ -475,7 +476,7 @@ Worktrees 将 Git worktree 作为安全、隔离的编码通道管理,默认
|
|
|
475
476
|
</tr>
|
|
476
477
|
<tr>
|
|
477
478
|
<td colspan="2">
|
|
478
|
-
<b>默认模型:</b> <code>openai/gpt-5.
|
|
479
|
+
<b>默认模型:</b> <code>openai/gpt-5.6-luna</code>
|
|
479
480
|
</td>
|
|
480
481
|
</tr>
|
|
481
482
|
<tr>
|
|
@@ -516,7 +517,7 @@ Worktrees 将 Git worktree 作为安全、隔离的编码通道管理,默认
|
|
|
516
517
|
</tr>
|
|
517
518
|
<tr>
|
|
518
519
|
<td colspan="2">
|
|
519
|
-
<b>默认模型:</b> <code>openai/gpt-5.
|
|
520
|
+
<b>默认模型:</b> <code>openai/gpt-5.6-luna</code>
|
|
520
521
|
</td>
|
|
521
522
|
</tr>
|
|
522
523
|
<tr>
|
|
@@ -557,12 +558,12 @@ Worktrees 将 Git worktree 作为安全、隔离的编码通道管理,默认
|
|
|
557
558
|
</tr>
|
|
558
559
|
<tr>
|
|
559
560
|
<td colspan="2">
|
|
560
|
-
<b>默认模型:</b> <code>openai/gpt-5.
|
|
561
|
+
<b>默认模型:</b> <code>openai/gpt-5.6-luna (medium)</code>
|
|
561
562
|
</td>
|
|
562
563
|
</tr>
|
|
563
564
|
<tr>
|
|
564
565
|
<td colspan="2">
|
|
565
|
-
<b>推荐模型:</b> <code>openai/gpt-5.
|
|
566
|
+
<b>推荐模型:</b> <code>openai/gpt-5.6-luna (medium)</code>
|
|
566
567
|
</td>
|
|
567
568
|
</tr>
|
|
568
569
|
<tr>
|
|
@@ -604,7 +605,7 @@ Worktrees 将 Git worktree 作为安全、隔离的编码通道管理,默认
|
|
|
604
605
|
</tr>
|
|
605
606
|
<tr>
|
|
606
607
|
<td colspan="2">
|
|
607
|
-
<b>默认模型:</b> <code>openai/gpt-5.
|
|
608
|
+
<b>默认模型:</b> <code>openai/gpt-5.6-luna</code> - <i>需配置具有视觉能力的模型以启用</i>
|
|
608
609
|
</td>
|
|
609
610
|
</tr>
|
|
610
611
|
<tr>
|
|
@@ -629,7 +630,7 @@ Worktrees 将 Git worktree 作为安全、隔离的编码通道管理,默认
|
|
|
629
630
|
| **[Council](docs/council.md)** | 使用 `@council` 并行运行多个模型并合成单一答案 |
|
|
630
631
|
| **[自定义智能体](docs/configuration.md#custom-agents)** | 使用自定义提示词、模型、MCP 访问和 Orchestrator 委派规则定义自己的专家 |
|
|
631
632
|
| **[ACP Agents](docs/acp-agents.md)** | 将 Claude Code ACP 或 Gemini ACP 等外部 ACP 兼容智能体连接为可委派子智能体 |
|
|
632
|
-
| **[多路复用器集成](docs/multiplexer-integration.md)** | 在 Tmux、Zellij 或
|
|
633
|
+
| **[多路复用器集成](docs/multiplexer-integration.md)** | 在 Tmux、Zellij、Herdr 或 cmux 窗格中实时观看智能体工作 |
|
|
633
634
|
| **[Codemap](docs/codemap.md)** | 生成层级代码地图,更快理解大型代码库 |
|
|
634
635
|
| **[Clonedeps](docs/clonedeps.md)** | 将选定的依赖源码克隆到被忽略的本地工作区中以供检查 |
|
|
635
636
|
| **[Worktrees](docs/worktrees.md)** | 使用 `.slim/worktrees/` 通道进行隔离的并行或高风险编码工作 |
|
|
@@ -645,7 +646,7 @@ Worktrees 将 Git worktree 作为安全、隔离的编码通道管理,默认
|
|
|
645
646
|
| **[配置](docs/configuration.md)** | 配置文件位置、JSONC 支持、提示词覆盖和完整选项参考 |
|
|
646
647
|
| **[后台编排](docs/background-orchestration.md)** | 围绕原生后台子智能体构建的调度器优先 Orchestrator 模型 |
|
|
647
648
|
| **[维护者指南](docs/maintainers.md)** | issue 分流规则、标签含义、支持路由和仓库维护工作流 |
|
|
648
|
-
| **[Skills](docs/skills.md)** | `simplify`、`codemap`、`clonedeps`、`deepwork`、`reflect`、`worktrees` 和 `oh-my-opencode-slim` 等捆绑技能 |
|
|
649
|
+
| **[Skills](docs/skills.md)** | `simplify`、`codemap`、`clonedeps`、`deepwork`、`verification-planning`、`reflect`、`worktrees` 和 `oh-my-opencode-slim` 等捆绑技能 |
|
|
649
650
|
| **[MCPs](docs/mcps.md)** | `websearch`、`context7`、`gh_grep` 以及每个智能体的 MCP 权限机制 |
|
|
650
651
|
| **[Tools](docs/tools.md)** | `webfetch`、LSP 工具、代码搜索和格式化工具等内置工具能力 |
|
|
651
652
|
|
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
|
@@ -293,14 +293,43 @@ 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
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!`;
|
|
296
|
-
|
|
296
|
+
function formatSystemReminder(text) {
|
|
297
|
+
return `<system-reminder>
|
|
298
|
+
${text}
|
|
299
|
+
</system-reminder>`;
|
|
300
|
+
}
|
|
301
|
+
var PHASE_REMINDER = formatSystemReminder(PHASE_REMINDER_TEXT);
|
|
297
302
|
// src/config/council-schema.ts
|
|
298
303
|
import { z } from "zod";
|
|
299
|
-
|
|
304
|
+
|
|
305
|
+
// src/utils/councillor-models.ts
|
|
306
|
+
function normalizeCouncillorModels(model, fallbackVariant) {
|
|
307
|
+
const raw = Array.isArray(model) ? model : [model];
|
|
308
|
+
return raw.map((entry) => typeof entry === "string" ? { id: entry, variant: fallbackVariant } : { id: entry.id, variant: entry.variant ?? fallbackVariant });
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
// src/config/council-schema.ts
|
|
312
|
+
var ModelIdSchema = z.string().regex(/^[^/\s]+\/[^\s]+$/, 'Expected provider/model format (e.g. "openai/gpt-5.6-luna")');
|
|
313
|
+
var CouncillorModelEntrySchema = z.object({
|
|
314
|
+
id: ModelIdSchema,
|
|
315
|
+
variant: z.string().optional()
|
|
316
|
+
});
|
|
317
|
+
var CouncillorModelSchema = z.union([
|
|
318
|
+
ModelIdSchema,
|
|
319
|
+
z.array(z.union([ModelIdSchema, CouncillorModelEntrySchema])).min(1)
|
|
320
|
+
]).describe('Model ID in provider/model format (e.g. "openai/gpt-5.6-luna"), or an ' + "ordered fallback chain (array of model IDs or { id, variant } entries) " + "tried in order until one responds.");
|
|
300
321
|
var CouncillorConfigSchema = z.object({
|
|
301
|
-
model:
|
|
322
|
+
model: CouncillorModelSchema,
|
|
302
323
|
variant: z.string().optional(),
|
|
303
324
|
prompt: z.string().optional().describe("Optional role/guidance injected into the councillor user prompt")
|
|
325
|
+
}).transform((c) => {
|
|
326
|
+
const models = normalizeCouncillorModels(c.model, c.variant);
|
|
327
|
+
return {
|
|
328
|
+
model: models[0].id,
|
|
329
|
+
variant: c.variant,
|
|
330
|
+
prompt: c.prompt,
|
|
331
|
+
models
|
|
332
|
+
};
|
|
304
333
|
});
|
|
305
334
|
var CouncilPresetSchema = z.record(z.string(), z.record(z.string(), z.unknown())).transform((entries, ctx) => {
|
|
306
335
|
const councillors = {};
|
|
@@ -386,6 +415,33 @@ var ManualPlanSchema = z2.object({
|
|
|
386
415
|
librarian: ManualAgentPlanSchema,
|
|
387
416
|
fixer: ManualAgentPlanSchema
|
|
388
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
|
+
]);
|
|
389
445
|
var AgentOverrideConfigSchema = z2.object({
|
|
390
446
|
model: z2.union([
|
|
391
447
|
z2.string(),
|
|
@@ -404,13 +460,15 @@ var AgentOverrideConfigSchema = z2.object({
|
|
|
404
460
|
prompt: z2.string().min(1).optional(),
|
|
405
461
|
orchestratorPrompt: z2.string().min(1).optional(),
|
|
406
462
|
options: z2.record(z2.string(), z2.unknown()).optional(),
|
|
407
|
-
displayName: z2.string().min(1).optional()
|
|
463
|
+
displayName: z2.string().min(1).optional(),
|
|
464
|
+
permission: PermissionConfigSchema.optional()
|
|
408
465
|
}).strict();
|
|
409
466
|
var MultiplexerTypeSchema = z2.enum([
|
|
410
467
|
"auto",
|
|
411
468
|
"tmux",
|
|
412
469
|
"zellij",
|
|
413
470
|
"herdr",
|
|
471
|
+
"cmux",
|
|
414
472
|
"none"
|
|
415
473
|
]);
|
|
416
474
|
var MultiplexerLayoutSchema = z2.enum([
|
|
@@ -454,7 +512,9 @@ var FailoverConfigSchema = z2.object({
|
|
|
454
512
|
enabled: z2.boolean().default(true),
|
|
455
513
|
timeoutMs: z2.number().min(0).default(15000),
|
|
456
514
|
retryDelayMs: z2.number().min(0).default(500),
|
|
457
|
-
|
|
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)."),
|
|
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."),
|
|
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.")
|
|
458
518
|
}).strict();
|
|
459
519
|
var CompanionConfigSchema = z2.object({
|
|
460
520
|
enabled: z2.boolean().optional(),
|
|
@@ -495,12 +555,14 @@ function rejectOrchestratorPromptOnOrchestrator(overrides, ctx, pathPrefix) {
|
|
|
495
555
|
var PluginConfigSchema = z2.object({
|
|
496
556
|
preset: z2.string().optional(),
|
|
497
557
|
setDefaultAgent: z2.boolean().optional(),
|
|
498
|
-
compactSidebar: z2.boolean().optional().describe("Use the compact TUI sidebar layout
|
|
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."),
|
|
499
560
|
autoUpdate: z2.boolean().optional().describe("Disable automatic installation of plugin updates when false. Defaults to true."),
|
|
500
561
|
presets: z2.record(z2.string(), PresetSchema).optional(),
|
|
501
562
|
agents: z2.record(z2.string(), AgentOverrideConfigSchema).optional(),
|
|
502
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."),
|
|
503
|
-
|
|
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."),
|
|
504
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."),
|
|
505
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."),
|
|
506
568
|
multiplexer: MultiplexerConfigSchema.optional(),
|
|
@@ -564,6 +626,12 @@ var CUSTOM_SKILLS = [
|
|
|
564
626
|
allowedAgents: ["orchestrator"],
|
|
565
627
|
sourcePath: "src/skills/deepwork"
|
|
566
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
|
+
},
|
|
567
635
|
{
|
|
568
636
|
name: "reflect",
|
|
569
637
|
description: "Review repeated work and suggest reusable workflow improvements",
|
|
@@ -595,12 +663,12 @@ var SCHEMA_URL = "https://unpkg.com/oh-my-opencode-slim@latest/oh-my-opencode-sl
|
|
|
595
663
|
var GENERATED_PRESETS = ["openai", "opencode-go"];
|
|
596
664
|
var MODEL_MAPPINGS = {
|
|
597
665
|
openai: {
|
|
598
|
-
orchestrator: { model: "openai/gpt-5.
|
|
599
|
-
oracle: { model: "openai/gpt-5.
|
|
600
|
-
librarian: { model: "openai/gpt-5.
|
|
601
|
-
explorer: { model: "openai/gpt-5.
|
|
602
|
-
designer: { model: "openai/gpt-5.
|
|
603
|
-
fixer: { model: "openai/gpt-5.
|
|
666
|
+
orchestrator: { model: "openai/gpt-5.6-terra", variant: "medium" },
|
|
667
|
+
oracle: { model: "openai/gpt-5.6-sol", variant: "high" },
|
|
668
|
+
librarian: { model: "openai/gpt-5.6-luna", variant: "low" },
|
|
669
|
+
explorer: { model: "openai/gpt-5.6-luna", variant: "low" },
|
|
670
|
+
designer: { model: "openai/gpt-5.6-luna", variant: "medium" },
|
|
671
|
+
fixer: { model: "openai/gpt-5.6-luna", variant: "medium" }
|
|
604
672
|
},
|
|
605
673
|
kimi: {
|
|
606
674
|
orchestrator: { model: "kimi-for-coding/k2p5" },
|
|
@@ -2726,7 +2794,9 @@ async function installCompanionArchive(finalBinaryPath, target, manifest, downlo
|
|
|
2726
2794
|
if (tempDir) {
|
|
2727
2795
|
try {
|
|
2728
2796
|
rmSync3(tempDir, { recursive: true, force: true });
|
|
2729
|
-
} catch {
|
|
2797
|
+
} catch (err) {
|
|
2798
|
+
log("[updater] install cleanup failed", String(err));
|
|
2799
|
+
}
|
|
2730
2800
|
}
|
|
2731
2801
|
}
|
|
2732
2802
|
}
|
|
@@ -2736,7 +2806,9 @@ function readInstallMetadata(binaryPath) {
|
|
|
2736
2806
|
if (parsed?.version && parsed.tag && parsed.target) {
|
|
2737
2807
|
return parsed;
|
|
2738
2808
|
}
|
|
2739
|
-
} catch {
|
|
2809
|
+
} catch (err) {
|
|
2810
|
+
log("[updater] metadata read failed", String(err));
|
|
2811
|
+
}
|
|
2740
2812
|
return null;
|
|
2741
2813
|
}
|
|
2742
2814
|
function writeInstallMetadata(binaryPath, metadata) {
|
|
@@ -2758,7 +2830,9 @@ async function withCompanionInstallLock(binaryPath, timeoutMs, staleMs, run) {
|
|
|
2758
2830
|
} finally {
|
|
2759
2831
|
try {
|
|
2760
2832
|
rmSync3(lock, { recursive: true, force: true });
|
|
2761
|
-
} catch {
|
|
2833
|
+
} catch (err) {
|
|
2834
|
+
log("[updater] lock release failed", String(err));
|
|
2835
|
+
}
|
|
2762
2836
|
}
|
|
2763
2837
|
} catch (err) {
|
|
2764
2838
|
const code = err.code;
|