oh-my-opencode-slim 0.9.13 → 0.9.15
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 +116 -56
- package/dist/agents/orchestrator.d.ts +2 -1
- package/dist/background/background-manager.d.ts +9 -1
- package/dist/background/multiplexer-session-manager.d.ts +2 -0
- package/dist/cli/index.js +49 -50
- package/dist/cli/types.d.ts +0 -1
- package/dist/config/schema.d.ts +5 -0
- package/dist/index.js +1090 -125694
- package/dist/multiplexer/factory.d.ts +5 -1
- package/dist/multiplexer/tmux/index.d.ts +3 -1
- package/dist/multiplexer/types.d.ts +2 -2
- package/dist/multiplexer/zellij/index.d.ts +1 -1
- package/dist/tools/smartfetch/utils.d.ts +1 -1
- package/dist/utils/agent-variant.d.ts +15 -1
- package/oh-my-opencode-slim.schema.json +12 -0
- package/package.json +5 -3
- package/src/skills/simplify/README.md +19 -0
- package/src/skills/simplify/SKILL.md +138 -0
- package/dist/background/tmux-session-manager.d.ts +0 -63
- package/dist/cli/chutes-selection.d.ts +0 -3
- package/dist/cli/dynamic-model-selection.d.ts +0 -14
- package/dist/cli/external-rankings.d.ts +0 -8
- package/dist/cli/model-selection.d.ts +0 -30
- package/dist/cli/opencode-models.d.ts +0 -18
- package/dist/cli/opencode-selection.d.ts +0 -3
- package/dist/cli/precedence-resolver.d.ts +0 -16
- package/dist/cli/scoring-v2/engine.d.ts +0 -4
- package/dist/cli/scoring-v2/features.d.ts +0 -3
- package/dist/cli/scoring-v2/index.d.ts +0 -4
- package/dist/cli/scoring-v2/types.d.ts +0 -17
- package/dist/cli/scoring-v2/weights.d.ts +0 -2
- package/dist/hooks/autopilot/index.d.ts +0 -43
- package/dist/hooks/post-read-nudge/index.d.ts +0 -18
- package/dist/interview/repository.d.ts +0 -12
- package/dist/interview/schemas.d.ts +0 -27
- package/dist/tools/grep/cli.d.ts +0 -3
- package/dist/tools/grep/constants.d.ts +0 -18
- package/dist/tools/grep/downloader.d.ts +0 -3
- package/dist/tools/grep/index.d.ts +0 -5
- package/dist/tools/grep/tools.d.ts +0 -2
- package/dist/tools/grep/types.d.ts +0 -35
- package/dist/tools/grep/utils.d.ts +0 -2
- package/dist/utils/tmux.d.ts +0 -32
package/README.md
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
<div align="center">
|
|
2
|
-
<img src="img/team.
|
|
2
|
+
<img src="img/team.jpeg" alt="Pantheon agents" style="border-radius: 10px;">
|
|
3
3
|
<p><i>Seven divine beings emerged from the dawn of code, each an immortal master of their craft await your command to forge order from chaos and build what was once thought impossible.</i></p>
|
|
4
4
|
<p><b>Open Multi Agent Suite</b> · Mix any models · Auto delegate tasks</p>
|
|
5
|
-
|
|
5
|
+
|
|
6
6
|
<p><sub>by <b>Boring Dystopia Development</b></sub></p>
|
|
7
7
|
<p>
|
|
8
8
|
<a href="https://boringdystopia.ai/"><img src="https://img.shields.io/badge/boringdystopia.ai-111111?style=for-the-badge&logo=vercel&logoColor=white" alt="boringdystopia.ai"></a>
|
|
@@ -13,7 +13,13 @@
|
|
|
13
13
|
|
|
14
14
|
---
|
|
15
15
|
|
|
16
|
-
##
|
|
16
|
+
## What's This Plugin
|
|
17
|
+
|
|
18
|
+
oh-my-opencode-slim is an agent orchestration plugin for OpenCode. It includes a built-in team of specialized agents that can scout a codebase, look up fresh documentation, review architecture, handle UI work, and execute well-scoped implementation tasks under one orchestrator.
|
|
19
|
+
|
|
20
|
+
The main idea is simple: instead of forcing one model to do everything, the plugin routes each part of the job to the agent best suited for it, balancing **quality, speed and cost**.
|
|
21
|
+
|
|
22
|
+
To explore the agents themselves, see **[Meet the Pantheon](#meet-the-pantheon)**. For the full feature set, see **[Features & Workflows](#features-and-workflows)** below.
|
|
17
23
|
|
|
18
24
|
### Quick Start
|
|
19
25
|
|
|
@@ -21,49 +27,53 @@
|
|
|
21
27
|
bunx oh-my-opencode-slim@latest install
|
|
22
28
|
```
|
|
23
29
|
|
|
24
|
-
|
|
30
|
+
### Getting Started
|
|
25
31
|
|
|
26
|
-
|
|
32
|
+
The installer generates an OpenAI preset by default, using `openai/gpt-5.4` for the higher-judgment agents and `openai/gpt-5.4-mini` for the faster scoped agents.
|
|
27
33
|
|
|
28
|
-
|
|
29
|
-
bunx oh-my-opencode-slim@latest install --no-tui --tmux=yes --skills=yes
|
|
30
|
-
```
|
|
34
|
+
Then:
|
|
31
35
|
|
|
32
|
-
|
|
33
|
-
```bash
|
|
34
|
-
bunx oh-my-opencode-slim@latest install --reset
|
|
35
|
-
```
|
|
36
|
+
1. **Log in to the providers you want to use if you haven't already**:
|
|
36
37
|
|
|
37
|
-
|
|
38
|
+
```bash
|
|
39
|
+
opencode auth login
|
|
40
|
+
```
|
|
41
|
+
2. **Refresh and list the models OpenCode can see**:
|
|
38
42
|
|
|
39
|
-
|
|
43
|
+
```bash
|
|
44
|
+
opencode models --refresh
|
|
45
|
+
```
|
|
46
|
+
3. **Open your plugin config** at `~/.config/opencode/oh-my-opencode-slim.json`
|
|
40
47
|
|
|
41
|
-
|
|
42
|
-
> Want to see the latest models OpenCode knows about? Run `opencode models --refresh` to refresh the cache and list currently available models.
|
|
48
|
+
4. **Update the models you want for each agent**
|
|
43
49
|
|
|
44
|
-
|
|
50
|
+
> [!TIP]
|
|
51
|
+
> Want to understand how automatic delegation works in practice? Review the **[Orchestrator prompt](https://github.com/alvinunreal/oh-my-opencode-slim/blob/master/src/agents/orchestrator.ts#L28)** — it contains the delegation rules, specialist routing logic, and the thresholds for when the main agent should hand work off to subagents.
|
|
45
52
|
|
|
46
|
-
|
|
53
|
+
The default generated configuration looks like this:
|
|
47
54
|
|
|
48
55
|
```jsonc
|
|
49
56
|
{
|
|
50
57
|
"$schema": "https://unpkg.com/oh-my-opencode-slim@latest/oh-my-opencode-slim.schema.json",
|
|
51
|
-
|
|
58
|
+
"preset": "openai",
|
|
59
|
+
"presets": {
|
|
60
|
+
"openai": {
|
|
61
|
+
"orchestrator": { "model": "openai/gpt-5.4", "variant": "high", "skills": ["*"], "mcps": ["*", "!context7"] },
|
|
62
|
+
"oracle": { "model": "openai/gpt-5.4", "variant": "high", "skills": ["simplify"], "mcps": [] },
|
|
63
|
+
"librarian": { "model": "openai/gpt-5.4-mini", "variant": "low", "skills": [], "mcps": ["websearch", "context7", "grep_app"] },
|
|
64
|
+
"explorer": { "model": "openai/gpt-5.4-mini", "variant": "low", "skills": ["cartography"], "mcps": [] },
|
|
65
|
+
"designer": { "model": "openai/gpt-5.4-mini", "variant": "medium", "skills": ["agent-browser"], "mcps": [] },
|
|
66
|
+
"fixer": { "model": "openai/gpt-5.4-mini", "variant": "low", "skills": [], "mcps": [] }
|
|
67
|
+
}
|
|
68
|
+
}
|
|
52
69
|
}
|
|
53
70
|
```
|
|
54
71
|
|
|
55
|
-
|
|
72
|
+
### For Alternative Providers
|
|
56
73
|
|
|
57
|
-
|
|
74
|
+
To use Kimi, GitHub Copilot, ZAI Coding Plan, or a mixed-provider setup, see **[Provider Configurations](docs/provider-configurations.md)** for step-by-step config examples. If you want a ready-made starting point, check the **[Author's Preset](docs/authors-preset.md)** and **[$30 Preset](docs/thirty-dollars-preset.md)** - the `$30` preset is the best cheap setup.
|
|
58
75
|
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
```
|
|
62
|
-
Install and configure by following the instructions here:
|
|
63
|
-
https://raw.githubusercontent.com/alvinunreal/oh-my-opencode-slim/refs/heads/master/README.md
|
|
64
|
-
```
|
|
65
|
-
|
|
66
|
-
**Detailed installation guide:** [docs/installation.md](docs/installation.md)
|
|
76
|
+
You can also mix and match any models per agent. For model suggestions, see the **Recommended Models** listed under each agent below.
|
|
67
77
|
|
|
68
78
|
### ✅ Verify Your Setup
|
|
69
79
|
|
|
@@ -88,6 +98,8 @@ If any agent fails to respond, check your provider authentication and config fil
|
|
|
88
98
|
|
|
89
99
|
---
|
|
90
100
|
|
|
101
|
+
<a id="meet-the-pantheon"></a>
|
|
102
|
+
|
|
91
103
|
## 🏛️ Meet the Pantheon
|
|
92
104
|
|
|
93
105
|
### 01. Orchestrator: The Embodiment Of Order
|
|
@@ -122,6 +134,11 @@ If any agent fails to respond, check your provider authentication and config fil
|
|
|
122
134
|
<b>Recommended Models:</b> <code>openai/gpt-5.4</code> <code>anthropic/claude-opus-4.6</code>
|
|
123
135
|
</td>
|
|
124
136
|
</tr>
|
|
137
|
+
<tr>
|
|
138
|
+
<td colspan="2">
|
|
139
|
+
<b>Model Guidance:</b> Choose your default, strongest all-around coding model. Orchestrator is both the main coding agent and the delegator, so it needs strong implementation ability, good judgment, and reliable instruction-following.
|
|
140
|
+
</td>
|
|
141
|
+
</tr>
|
|
125
142
|
</table>
|
|
126
143
|
|
|
127
144
|
---
|
|
@@ -158,6 +175,11 @@ If any agent fails to respond, check your provider authentication and config fil
|
|
|
158
175
|
<b>Recommended Models:</b> <code>cerebras/zai-glm-4.7</code> <code>fireworks-ai/accounts/fireworks/routers/kimi-k2p5-turbo</code> <code>openai/gpt-5.4-mini</code>
|
|
159
176
|
</td>
|
|
160
177
|
</tr>
|
|
178
|
+
<tr>
|
|
179
|
+
<td colspan="2">
|
|
180
|
+
<b>Model Guidance:</b> Choose a fast, low-cost model. Explorer handles broad scouting work, so speed and efficiency usually matter more than using your strongest reasoning model.
|
|
181
|
+
</td>
|
|
182
|
+
</tr>
|
|
161
183
|
</table>
|
|
162
184
|
|
|
163
185
|
---
|
|
@@ -194,12 +216,20 @@ If any agent fails to respond, check your provider authentication and config fil
|
|
|
194
216
|
<b>Recommended Models:</b> <code>openai/gpt-5.4 (high)</code> <code>google/gemini-3.1-pro-preview (high)</code>
|
|
195
217
|
</td>
|
|
196
218
|
</tr>
|
|
219
|
+
<tr>
|
|
220
|
+
<td colspan="2">
|
|
221
|
+
<b>Model Guidance:</b> Choose your strongest high-reasoning model for architecture, hard debugging, trade-offs, and code review.
|
|
222
|
+
</td>
|
|
223
|
+
</tr>
|
|
197
224
|
</table>
|
|
198
225
|
|
|
199
226
|
---
|
|
200
227
|
|
|
201
228
|
### Council: The Chorus of Minds
|
|
202
229
|
|
|
230
|
+
> [!NOTE]
|
|
231
|
+
> **Why doesn't Orchestrator auto-call Council more often?** This is intentional. Council runs multiple models at once, so automatic delegation is kept strict because it is usually the highest-cost path in the system. In practice, Council is meant to be used manually when you want it, for example: <code>@council compare these two architectures</code>.
|
|
232
|
+
|
|
203
233
|
<table>
|
|
204
234
|
<tr>
|
|
205
235
|
<td width="30%" align="center" valign="top">
|
|
@@ -235,6 +265,11 @@ If any agent fails to respond, check your provider authentication and config fil
|
|
|
235
265
|
<b>Recommended Setup:</b> <code>Strong master</code> + <code>diverse councillors</code> across providers
|
|
236
266
|
</td>
|
|
237
267
|
</tr>
|
|
268
|
+
<tr>
|
|
269
|
+
<td colspan="2">
|
|
270
|
+
<b>Model Guidance:</b> Use a strong synthesis model as the master and diverse models as councillors. The value of Council comes from comparing different model perspectives, not just picking the single strongest model everywhere.
|
|
271
|
+
</td>
|
|
272
|
+
</tr>
|
|
238
273
|
</table>
|
|
239
274
|
|
|
240
275
|
---
|
|
@@ -271,6 +306,11 @@ If any agent fails to respond, check your provider authentication and config fil
|
|
|
271
306
|
<b>Recommended Models:</b> <code>cerebras/zai-glm-4.7</code> <code>fireworks-ai/accounts/fireworks/routers/kimi-k2p5-turbo</code> <code>openai/gpt-5.4-mini</code>
|
|
272
307
|
</td>
|
|
273
308
|
</tr>
|
|
309
|
+
<tr>
|
|
310
|
+
<td colspan="2">
|
|
311
|
+
<b>Model Guidance:</b> Choose a fast, low-cost model. Librarian handles research and documentation lookups, so speed and efficiency usually matter more than using your strongest reasoning model.
|
|
312
|
+
</td>
|
|
313
|
+
</tr>
|
|
274
314
|
</table>
|
|
275
315
|
|
|
276
316
|
---
|
|
@@ -307,6 +347,11 @@ If any agent fails to respond, check your provider authentication and config fil
|
|
|
307
347
|
<b>Recommended Models:</b> <code>google/gemini-3.1-pro-preview</code> <code>kimi-for-coding/k2p5</code>
|
|
308
348
|
</td>
|
|
309
349
|
</tr>
|
|
350
|
+
<tr>
|
|
351
|
+
<td colspan="2">
|
|
352
|
+
<b>Model Guidance:</b> Choose a model that is strong at UI/UX judgment, frontend implementation, and visual polish.
|
|
353
|
+
</td>
|
|
354
|
+
</tr>
|
|
310
355
|
</table>
|
|
311
356
|
|
|
312
357
|
---
|
|
@@ -343,12 +388,17 @@ If any agent fails to respond, check your provider authentication and config fil
|
|
|
343
388
|
<b>Recommended Models:</b> <code>cerebras/zai-glm-4.7</code> <code>fireworks-ai/accounts/fireworks/routers/kimi-k2p5-turbo</code> <code>openai/gpt-5.4-mini</code>
|
|
344
389
|
</td>
|
|
345
390
|
</tr>
|
|
391
|
+
<tr>
|
|
392
|
+
<td colspan="2">
|
|
393
|
+
<b>Model Guidance:</b> Choose a fast, reliable coding model for routine, scoped implementation work. Fixer usually receives a concrete plan or bounded instructions from Orchestrator, making it a good place for efficient execution tasks such as tests, test updates, and straightforward code changes.
|
|
394
|
+
</td>
|
|
395
|
+
</tr>
|
|
346
396
|
</table>
|
|
347
397
|
|
|
348
398
|
### 07. Observer: The Silent Witness
|
|
349
399
|
|
|
350
400
|
> [!NOTE]
|
|
351
|
-
> **Why a separate agent?**
|
|
401
|
+
> **Why a separate agent?** If your Orchestrator model is not multimodal, enable Observer to handle images, screenshots, PDFs, 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.
|
|
352
402
|
|
|
353
403
|
<table>
|
|
354
404
|
<tr>
|
|
@@ -376,45 +426,53 @@ If any agent fails to respond, check your provider authentication and config fil
|
|
|
376
426
|
<b>Default Model:</b> <code>openai/gpt-5.4-mini</code> — <i>configure a vision-capable model to enable</i>
|
|
377
427
|
</td>
|
|
378
428
|
</tr>
|
|
429
|
+
<tr>
|
|
430
|
+
<td colspan="2">
|
|
431
|
+
<b>Model Guidance:</b> Choose a vision-capable model if you want the agent to read screenshots, images, PDFs, and other visual files.
|
|
432
|
+
</td>
|
|
433
|
+
</tr>
|
|
379
434
|
</table>
|
|
380
435
|
|
|
381
436
|
---
|
|
382
437
|
|
|
383
438
|
## 📚 Documentation
|
|
384
439
|
|
|
385
|
-
|
|
440
|
+
Use this section as a map: start with installation, then jump to features, configuration, or example presets depending on what you need.
|
|
386
441
|
|
|
387
|
-
|
|
388
|
-
|-----|----------|
|
|
389
|
-
| **[Installation Guide](docs/installation.md)** | CLI flags, `--reset`, auth, troubleshooting |
|
|
390
|
-
| **[Provider Configurations](docs/provider-configurations.md)** | OpenAI, Kimi, Copilot, ZAI, Fireworks AI — mixing providers, fallback chains |
|
|
442
|
+
### 🚀 Start Here
|
|
391
443
|
|
|
392
|
-
|
|
444
|
+
| Doc | What it covers |
|
|
445
|
+
|-----|----------------|
|
|
446
|
+
| **[Installation Guide](docs/installation.md)** | Install the plugin, use CLI flags, reset config, and troubleshoot setup |
|
|
447
|
+
| **[Provider Configurations](docs/provider-configurations.md)** | Configure OpenAI, Kimi, GitHub Copilot, ZAI, Fireworks AI, or mixed-provider presets |
|
|
393
448
|
|
|
394
|
-
|
|
395
|
-
|---------|-----|--------------|
|
|
396
|
-
| **Council** | [council.md](docs/council.md) | Run N models in parallel, synthesize one answer (`@council`) |
|
|
397
|
-
| **Interview** | [interview.md](docs/interview.md) | Browser-based Q&A flow for turning rough ideas into a live markdown spec |
|
|
398
|
-
| **Multiplexer Integration** | [multiplexer-integration.md](docs/multiplexer-integration.md) | Watch agents work in real-time with auto-spawned panes (Tmux/Zellij) |
|
|
399
|
-
| **Cartography Skill** | [cartography.md](docs/cartography.md) | Auto-generate hierarchical codemaps for any codebase |
|
|
449
|
+
<a id="features-and-workflows"></a>
|
|
400
450
|
|
|
401
|
-
###
|
|
451
|
+
### ✨ Features & Workflows
|
|
452
|
+
|
|
453
|
+
| Doc | What it covers |
|
|
454
|
+
|-----|----------------|
|
|
455
|
+
| **[Council](docs/council.md)** | Run multiple models in parallel and synthesize a single answer with `@council` |
|
|
456
|
+
| **[Interview](docs/interview.md)** | Turn rough ideas into a structured markdown spec through a browser-based Q&A flow |
|
|
457
|
+
| **[Multiplexer Integration](docs/multiplexer-integration.md)** | Watch agents work live in Tmux or Zellij panes |
|
|
458
|
+
| **[Todo Continuation](docs/todo-continuation.md)** | Auto-continue orchestrator sessions with cooldowns and safety checks |
|
|
459
|
+
| **[Cartography](docs/cartography.md)** | Generate hierarchical codemaps to understand large codebases faster |
|
|
402
460
|
|
|
403
|
-
|
|
404
|
-
|-----|----------|
|
|
405
|
-
| **[Skills](docs/skills.md)** | `simplify`, `agent-browser`, `cartography` — assignment syntax |
|
|
406
|
-
| **[MCPs](docs/mcps.md)** | `websearch`, `context7`, `grep_app` — permissions per agent |
|
|
407
|
-
| **[Tools](docs/tools.md)** | Background tasks, LSP, code search, formatters |
|
|
408
|
-
| **[Configuration](docs/configuration.md)** | Config files, prompt overriding, JSONC, full option reference |
|
|
461
|
+
### ⚙️ Config & Reference
|
|
409
462
|
|
|
410
|
-
|
|
463
|
+
| Doc | What it covers |
|
|
464
|
+
|-----|----------------|
|
|
465
|
+
| **[Configuration](docs/configuration.md)** | Config file locations, JSONC support, prompt overrides, and full option reference |
|
|
466
|
+
| **[Skills](docs/skills.md)** | Built-in and recommended skills such as `simplify`, `agent-browser`, and `cartography` |
|
|
467
|
+
| **[MCPs](docs/mcps.md)** | `websearch`, `context7`, `grep_app`, and how MCP permissions work per agent |
|
|
468
|
+
| **[Tools](docs/tools.md)** | Built-in tool capabilities like background tasks, `webfetch`, LSP tools, code search, and formatters |
|
|
411
469
|
|
|
412
|
-
### 💡 Presets
|
|
470
|
+
### 💡 Example Presets
|
|
413
471
|
|
|
414
|
-
| Doc |
|
|
415
|
-
|
|
416
|
-
| **[Author's Preset](docs/authors-preset.md)** | The
|
|
417
|
-
| **[$30 Preset](docs/thirty-dollars-preset.md)** | A mixed setup
|
|
472
|
+
| Doc | What it covers |
|
|
473
|
+
|-----|----------------|
|
|
474
|
+
| **[Author's Preset](docs/authors-preset.md)** | The author's daily mixed-provider setup |
|
|
475
|
+
| **[$30 Preset](docs/thirty-dollars-preset.md)** | A budget mixed-provider setup for around $30/month |
|
|
418
476
|
|
|
419
477
|
---
|
|
420
478
|
|
|
@@ -425,7 +483,7 @@ Slim only intercepts `apply_patch` before native execution. It rewrites recovera
|
|
|
425
483
|
<p><sub>Every merged contribution leaves a mark on the realm.</sub></p>
|
|
426
484
|
|
|
427
485
|
<!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section -->
|
|
428
|
-
[](#contributors-)
|
|
429
487
|
<!-- ALL-CONTRIBUTORS-BADGE:END -->
|
|
430
488
|
</div>
|
|
431
489
|
|
|
@@ -487,6 +545,8 @@ Slim only intercepts `apply_patch` before native execution. It rewrites recovera
|
|
|
487
545
|
<tr>
|
|
488
546
|
<td align="center" valign="top" width="16.66%"><a href="https://github.com/dkovacevic15"><img src="https://avatars.githubusercontent.com/u/24757821?v=4?s=100" width="100px;" alt="Dusan Kovacevic"/><br /><sub><b>Dusan Kovacevic</b></sub></a><br /><a href="https://github.com/alvinunreal/oh-my-opencode-slim/commits?author=dkovacevic15" title="Code">💻</a></td>
|
|
489
547
|
<td align="center" valign="top" width="16.66%"><a href="https://github.com/jwcrystal"><img src="https://avatars.githubusercontent.com/u/121911854?v=4?s=100" width="100px;" alt="jwcrystal"/><br /><sub><b>jwcrystal</b></sub></a><br /><a href="https://github.com/alvinunreal/oh-my-opencode-slim/commits?author=jwcrystal" title="Code">💻</a></td>
|
|
548
|
+
<td align="center" valign="top" width="16.66%"><a href="https://zenstudio.cv/"><img src="https://avatars.githubusercontent.com/u/10528635?v=4?s=100" width="100px;" alt="Nguyen Canh Toan"/><br /><sub><b>Nguyen Canh Toan</b></sub></a><br /><a href="https://github.com/alvinunreal/oh-my-opencode-slim/commits?author=ZenStudioLab" title="Code">💻</a></td>
|
|
549
|
+
<td align="center" valign="top" width="16.66%"><a href="https://github.com/tom-dyar"><img src="https://avatars.githubusercontent.com/u/8899513?v=4?s=100" width="100px;" alt="Thomas Dyar"/><br /><sub><b>Thomas Dyar</b></sub></a><br /><a href="https://github.com/alvinunreal/oh-my-opencode-slim/commits?author=tom-dyar" title="Code">💻</a></td>
|
|
490
550
|
</tr>
|
|
491
551
|
</tbody>
|
|
492
552
|
</table>
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import type { AgentConfig } from
|
|
1
|
+
import type { AgentConfig } from "@opencode-ai/sdk/v2";
|
|
2
2
|
export interface AgentDefinition {
|
|
3
3
|
name: string;
|
|
4
|
+
displayName?: string;
|
|
4
5
|
description?: string;
|
|
5
6
|
config: AgentConfig;
|
|
6
7
|
/** Priority-ordered model entries for runtime fallback resolution. */
|
|
@@ -65,6 +65,11 @@ export declare class BackgroundTaskManager {
|
|
|
65
65
|
* to add new background agent types without updating SUBAGENT_DELEGATION_RULES.
|
|
66
66
|
*/
|
|
67
67
|
private getSubagentRules;
|
|
68
|
+
/**
|
|
69
|
+
* Resolve the agent associated with a session.
|
|
70
|
+
* Untracked sessions are treated as orchestrator sessions by default.
|
|
71
|
+
*/
|
|
72
|
+
private getSessionAgent;
|
|
68
73
|
/**
|
|
69
74
|
* Check if a parent session is allowed to delegate to a specific agent type.
|
|
70
75
|
* @param parentSessionId - The session ID of the parent
|
|
@@ -154,8 +159,11 @@ export declare class BackgroundTaskManager {
|
|
|
154
159
|
/**
|
|
155
160
|
* Retrieve the current state of a background task.
|
|
156
161
|
*
|
|
162
|
+
* Checks in-memory first. If not found (e.g. after plugin reinitialization
|
|
163
|
+
* caused by context compaction), falls back to the persisted state on disk.
|
|
164
|
+
*
|
|
157
165
|
* @param taskId - The task ID to retrieve
|
|
158
|
-
* @returns The task object, or null if not found
|
|
166
|
+
* @returns The task object, or null if not found in memory or on disk
|
|
159
167
|
*/
|
|
160
168
|
getResult(taskId: string): BackgroundTask | null;
|
|
161
169
|
/**
|
|
@@ -10,6 +10,7 @@ interface SessionEvent {
|
|
|
10
10
|
id?: string;
|
|
11
11
|
parentID?: string;
|
|
12
12
|
title?: string;
|
|
13
|
+
directory?: string;
|
|
13
14
|
};
|
|
14
15
|
sessionID?: string;
|
|
15
16
|
status?: {
|
|
@@ -26,6 +27,7 @@ interface SessionEvent {
|
|
|
26
27
|
export declare class MultiplexerSessionManager {
|
|
27
28
|
private client;
|
|
28
29
|
private serverUrl;
|
|
30
|
+
private directory;
|
|
29
31
|
private multiplexer;
|
|
30
32
|
private sessions;
|
|
31
33
|
private pollInterval?;
|
package/dist/cli/index.js
CHANGED
|
@@ -13755,7 +13755,8 @@ var AgentOverrideConfigSchema = exports_external.object({
|
|
|
13755
13755
|
variant: exports_external.string().optional().catch(undefined),
|
|
13756
13756
|
skills: exports_external.array(exports_external.string()).optional(),
|
|
13757
13757
|
mcps: exports_external.array(exports_external.string()).optional(),
|
|
13758
|
-
options: exports_external.record(exports_external.string(), exports_external.unknown()).optional()
|
|
13758
|
+
options: exports_external.record(exports_external.string(), exports_external.unknown()).optional(),
|
|
13759
|
+
displayName: exports_external.string().min(1).optional()
|
|
13759
13760
|
});
|
|
13760
13761
|
var MultiplexerTypeSchema = exports_external.enum(["auto", "tmux", "zellij", "none"]);
|
|
13761
13762
|
var MultiplexerLayoutSchema = exports_external.enum([
|
|
@@ -13809,6 +13810,7 @@ var PluginConfigSchema = exports_external.object({
|
|
|
13809
13810
|
setDefaultAgent: exports_external.boolean().optional(),
|
|
13810
13811
|
scoringEngineVersion: exports_external.enum(["v1", "v2-shadow", "v2"]).optional(),
|
|
13811
13812
|
balanceProviderUsage: exports_external.boolean().optional(),
|
|
13813
|
+
showStartupToast: exports_external.boolean().optional().describe("Show the startup activation toast when OpenCode starts. Defaults to true."),
|
|
13812
13814
|
manualPlan: ManualPlanSchema.optional(),
|
|
13813
13815
|
presets: exports_external.record(exports_external.string(), PresetSchema).optional(),
|
|
13814
13816
|
agents: exports_external.record(exports_external.string(), AgentOverrideConfigSchema).optional(),
|
|
@@ -13825,7 +13827,7 @@ var PluginConfigSchema = exports_external.object({
|
|
|
13825
13827
|
});
|
|
13826
13828
|
// src/config/agent-mcps.ts
|
|
13827
13829
|
var DEFAULT_AGENT_MCPS = {
|
|
13828
|
-
orchestrator: ["*"],
|
|
13830
|
+
orchestrator: ["*", "!context7"],
|
|
13829
13831
|
designer: [],
|
|
13830
13832
|
oracle: [],
|
|
13831
13833
|
librarian: ["websearch", "context7", "grep_app"],
|
|
@@ -13837,9 +13839,6 @@ var DEFAULT_AGENT_MCPS = {
|
|
|
13837
13839
|
"council-master": []
|
|
13838
13840
|
};
|
|
13839
13841
|
|
|
13840
|
-
// src/cli/skills.ts
|
|
13841
|
-
import { spawnSync } from "node:child_process";
|
|
13842
|
-
|
|
13843
13842
|
// src/cli/custom-skills.ts
|
|
13844
13843
|
import {
|
|
13845
13844
|
copyFileSync,
|
|
@@ -13851,6 +13850,12 @@ import {
|
|
|
13851
13850
|
import { dirname as dirname2, join as join2 } from "node:path";
|
|
13852
13851
|
import { fileURLToPath } from "node:url";
|
|
13853
13852
|
var CUSTOM_SKILLS = [
|
|
13853
|
+
{
|
|
13854
|
+
name: "simplify",
|
|
13855
|
+
description: "Code simplification and readability-focused refactoring",
|
|
13856
|
+
allowedAgents: ["oracle"],
|
|
13857
|
+
sourcePath: "src/skills/simplify"
|
|
13858
|
+
},
|
|
13854
13859
|
{
|
|
13855
13860
|
name: "cartography",
|
|
13856
13861
|
description: "Repository understanding and hierarchical codemap generation",
|
|
@@ -13899,14 +13904,8 @@ function installCustomSkill(skill) {
|
|
|
13899
13904
|
}
|
|
13900
13905
|
|
|
13901
13906
|
// src/cli/skills.ts
|
|
13907
|
+
import { spawnSync } from "node:child_process";
|
|
13902
13908
|
var RECOMMENDED_SKILLS = [
|
|
13903
|
-
{
|
|
13904
|
-
name: "simplify",
|
|
13905
|
-
repo: "https://github.com/brianlovin/claude-config",
|
|
13906
|
-
skillName: "simplify",
|
|
13907
|
-
allowedAgents: ["oracle"],
|
|
13908
|
-
description: "YAGNI code simplification expert"
|
|
13909
|
-
},
|
|
13910
13909
|
{
|
|
13911
13910
|
name: "agent-browser",
|
|
13912
13911
|
repo: "https://github.com/vercel-labs/agent-browser",
|
|
@@ -13955,6 +13954,7 @@ function installSkill(skill) {
|
|
|
13955
13954
|
}
|
|
13956
13955
|
|
|
13957
13956
|
// src/cli/providers.ts
|
|
13957
|
+
var SCHEMA_URL = "https://unpkg.com/oh-my-opencode-slim@latest/oh-my-opencode-slim.schema.json";
|
|
13958
13958
|
var MODEL_MAPPINGS = {
|
|
13959
13959
|
openai: {
|
|
13960
13960
|
orchestrator: { model: "openai/gpt-5.4" },
|
|
@@ -13994,12 +13994,16 @@ var MODEL_MAPPINGS = {
|
|
|
13994
13994
|
};
|
|
13995
13995
|
function generateLiteConfig(installConfig) {
|
|
13996
13996
|
const config2 = {
|
|
13997
|
+
$schema: SCHEMA_URL,
|
|
13997
13998
|
preset: "openai",
|
|
13998
13999
|
presets: {}
|
|
13999
14000
|
};
|
|
14000
14001
|
const createAgentConfig = (agentName, modelInfo) => {
|
|
14001
14002
|
const isOrchestrator = agentName === "orchestrator";
|
|
14002
|
-
const skills = isOrchestrator ? ["*"] :
|
|
14003
|
+
const skills = isOrchestrator ? ["*"] : [
|
|
14004
|
+
...RECOMMENDED_SKILLS.filter((s) => s.allowedAgents.includes("*") || s.allowedAgents.includes(agentName)).map((s) => s.skillName),
|
|
14005
|
+
...CUSTOM_SKILLS.filter((s) => s.allowedAgents.includes("*") || s.allowedAgents.includes(agentName)).map((s) => s.name)
|
|
14006
|
+
];
|
|
14003
14007
|
if (agentName === "designer" && !skills.includes("agent-browser")) {
|
|
14004
14008
|
skills.push("agent-browser");
|
|
14005
14009
|
}
|
|
@@ -14457,13 +14461,13 @@ var BOLD = "\x1B[1m";
|
|
|
14457
14461
|
var DIM = "\x1B[2m";
|
|
14458
14462
|
var RESET = "\x1B[0m";
|
|
14459
14463
|
var SYMBOLS = {
|
|
14460
|
-
check: `${GREEN}
|
|
14461
|
-
cross: `${RED}
|
|
14462
|
-
arrow: `${BLUE}
|
|
14463
|
-
bullet: `${DIM}
|
|
14464
|
-
info: `${BLUE}
|
|
14465
|
-
warn: `${YELLOW}
|
|
14466
|
-
star: `${YELLOW}
|
|
14464
|
+
check: `${GREEN}[ok]${RESET}`,
|
|
14465
|
+
cross: `${RED}[x]${RESET}`,
|
|
14466
|
+
arrow: `${BLUE}->${RESET}`,
|
|
14467
|
+
bullet: `${DIM}-${RESET}`,
|
|
14468
|
+
info: `${BLUE}[i]${RESET}`,
|
|
14469
|
+
warn: `${YELLOW}[!]${RESET}`,
|
|
14470
|
+
star: `${YELLOW}*${RESET}`
|
|
14467
14471
|
};
|
|
14468
14472
|
function printHeader(isUpdate) {
|
|
14469
14473
|
console.log();
|
|
@@ -14510,19 +14514,6 @@ function handleStepResult(result, successMsg) {
|
|
|
14510
14514
|
printSuccess(`${successMsg} ${SYMBOLS.arrow} ${DIM}${result.configPath}${RESET}`);
|
|
14511
14515
|
return true;
|
|
14512
14516
|
}
|
|
14513
|
-
function formatConfigSummary() {
|
|
14514
|
-
const lines = [];
|
|
14515
|
-
lines.push(`${BOLD}Configuration Summary${RESET}`);
|
|
14516
|
-
lines.push("");
|
|
14517
|
-
lines.push(` ${BOLD}Preset:${RESET} ${BLUE}openai${RESET}`);
|
|
14518
|
-
lines.push(` ${SYMBOLS.check} OpenAI (default)`);
|
|
14519
|
-
const seeDocs = "see docs/provider-configurations.md";
|
|
14520
|
-
lines.push(` ${DIM}○ Kimi — ${seeDocs}${RESET}`);
|
|
14521
|
-
lines.push(` ${DIM}○ GitHub Copilot — ${seeDocs}${RESET}`);
|
|
14522
|
-
lines.push(` ${DIM}○ ZAI Coding Plan — ${seeDocs}${RESET}`);
|
|
14523
|
-
return lines.join(`
|
|
14524
|
-
`);
|
|
14525
|
-
}
|
|
14526
14517
|
async function runInstall(config2) {
|
|
14527
14518
|
const detected = detectCurrentConfig();
|
|
14528
14519
|
const isUpdate = detected.isInstalled;
|
|
@@ -14565,12 +14556,12 @@ async function runInstall(config2) {
|
|
|
14565
14556
|
${JSON.stringify(liteConfig, null, 2)}
|
|
14566
14557
|
`);
|
|
14567
14558
|
} else {
|
|
14568
|
-
const
|
|
14569
|
-
const configExists = existsSync4(
|
|
14559
|
+
const configPath2 = getExistingLiteConfigPath();
|
|
14560
|
+
const configExists = existsSync4(configPath2);
|
|
14570
14561
|
if (configExists && !config2.reset) {
|
|
14571
|
-
printInfo(`Configuration already exists at ${
|
|
14562
|
+
printInfo(`Configuration already exists at ${configPath2}. ` + "Use --reset to overwrite.");
|
|
14572
14563
|
} else {
|
|
14573
|
-
const liteResult = writeLiteConfig(config2, configExists ?
|
|
14564
|
+
const liteResult = writeLiteConfig(config2, configExists ? configPath2 : undefined);
|
|
14574
14565
|
if (!handleStepResult(liteResult, configExists ? "Config reset" : "Config written"))
|
|
14575
14566
|
return 1;
|
|
14576
14567
|
}
|
|
@@ -14618,21 +14609,31 @@ ${JSON.stringify(liteConfig, null, 2)}
|
|
|
14618
14609
|
printSuccess(`${customSkillsInstalled}/${totalCustom} custom skills processed`);
|
|
14619
14610
|
}
|
|
14620
14611
|
}
|
|
14621
|
-
console.log();
|
|
14622
|
-
console.log(formatConfigSummary());
|
|
14623
|
-
console.log();
|
|
14624
14612
|
const statusMsg = isUpdate ? "Configuration updated!" : "Installation complete!";
|
|
14625
14613
|
console.log(`${SYMBOLS.star} ${BOLD}${GREEN}${statusMsg}${RESET}`);
|
|
14626
14614
|
console.log();
|
|
14627
14615
|
console.log(`${BOLD}Next steps:${RESET}`);
|
|
14628
14616
|
console.log();
|
|
14629
|
-
|
|
14617
|
+
const configPath = getExistingLiteConfigPath();
|
|
14618
|
+
console.log(" 1. Log in to the provider(s) you want to use:");
|
|
14619
|
+
console.log(` ${BLUE}$ opencode auth login${RESET}`);
|
|
14620
|
+
console.log();
|
|
14621
|
+
console.log(" 2. Refresh the models OpenCode can see:");
|
|
14622
|
+
console.log(` ${BLUE}$ opencode models --refresh${RESET}`);
|
|
14623
|
+
console.log();
|
|
14624
|
+
console.log(" 3. Review your generated config:");
|
|
14625
|
+
console.log(` ${BLUE}${configPath}${RESET}`);
|
|
14626
|
+
console.log();
|
|
14627
|
+
console.log(" 4. Start OpenCode:");
|
|
14630
14628
|
console.log(` ${BLUE}$ opencode${RESET}`);
|
|
14631
14629
|
console.log();
|
|
14630
|
+
console.log(" 5. Verify the agents are responding:");
|
|
14631
|
+
console.log(` ${BLUE}> ping all agents${RESET}`);
|
|
14632
|
+
console.log();
|
|
14632
14633
|
const modelsInfo = "Default configuration uses OpenAI models (gpt-5.4 / gpt-5.4-mini).";
|
|
14633
|
-
console.log(`${
|
|
14634
|
+
console.log(`${modelsInfo}`);
|
|
14634
14635
|
const altProviders = "For alternative providers (Kimi, GitHub Copilot, ZAI Coding Plan)";
|
|
14635
|
-
console.log(`${
|
|
14636
|
+
console.log(`${altProviders}, see:`);
|
|
14636
14637
|
const docsUrl = "https://github.com/alvinunreal/oh-my-opencode-slim/" + "blob/master/docs/provider-configurations.md";
|
|
14637
14638
|
console.log(` ${BLUE}${docsUrl}${RESET}`);
|
|
14638
14639
|
console.log();
|
|
@@ -14640,7 +14641,7 @@ ${JSON.stringify(liteConfig, null, 2)}
|
|
|
14640
14641
|
}
|
|
14641
14642
|
async function install(args) {
|
|
14642
14643
|
const config2 = {
|
|
14643
|
-
hasTmux:
|
|
14644
|
+
hasTmux: false,
|
|
14644
14645
|
installSkills: args.skills === "yes",
|
|
14645
14646
|
installCustomSkills: args.skills === "yes",
|
|
14646
14647
|
dryRun: args.dryRun,
|
|
@@ -14652,13 +14653,12 @@ async function install(args) {
|
|
|
14652
14653
|
// src/cli/index.ts
|
|
14653
14654
|
function parseArgs(args) {
|
|
14654
14655
|
const result = {
|
|
14655
|
-
tui: true
|
|
14656
|
+
tui: true,
|
|
14657
|
+
skills: "yes"
|
|
14656
14658
|
};
|
|
14657
14659
|
for (const arg of args) {
|
|
14658
14660
|
if (arg === "--no-tui") {
|
|
14659
14661
|
result.tui = false;
|
|
14660
|
-
} else if (arg.startsWith("--tmux=")) {
|
|
14661
|
-
result.tmux = arg.split("=")[1];
|
|
14662
14662
|
} else if (arg.startsWith("--skills=")) {
|
|
14663
14663
|
result.skills = arg.split("=")[1];
|
|
14664
14664
|
} else if (arg === "--dry-run") {
|
|
@@ -14679,8 +14679,7 @@ oh-my-opencode-slim installer
|
|
|
14679
14679
|
Usage: bunx oh-my-opencode-slim install [OPTIONS]
|
|
14680
14680
|
|
|
14681
14681
|
Options:
|
|
14682
|
-
--
|
|
14683
|
-
--skills=yes|no Install recommended skills (yes/no)
|
|
14682
|
+
--skills=yes|no Install recommended and bundled skills (default: yes)
|
|
14684
14683
|
--no-tui Non-interactive mode
|
|
14685
14684
|
--dry-run Simulate install without writing files
|
|
14686
14685
|
--reset Force overwrite of existing configuration
|
|
@@ -14691,7 +14690,7 @@ For alternative providers, see docs/provider-configurations.md.
|
|
|
14691
14690
|
|
|
14692
14691
|
Examples:
|
|
14693
14692
|
bunx oh-my-opencode-slim install
|
|
14694
|
-
bunx oh-my-opencode-slim install --no-tui --
|
|
14693
|
+
bunx oh-my-opencode-slim install --no-tui --skills=yes
|
|
14695
14694
|
bunx oh-my-opencode-slim install --reset
|
|
14696
14695
|
`);
|
|
14697
14696
|
}
|
package/dist/cli/types.d.ts
CHANGED
package/dist/config/schema.d.ts
CHANGED
|
@@ -60,6 +60,7 @@ export declare const AgentOverrideConfigSchema: z.ZodObject<{
|
|
|
60
60
|
skills: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
61
61
|
mcps: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
62
62
|
options: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
63
|
+
displayName: z.ZodOptional<z.ZodString>;
|
|
63
64
|
}, z.core.$strip>;
|
|
64
65
|
export declare const MultiplexerTypeSchema: z.ZodEnum<{
|
|
65
66
|
auto: "auto";
|
|
@@ -129,6 +130,7 @@ export declare const PresetSchema: z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
|
129
130
|
skills: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
130
131
|
mcps: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
131
132
|
options: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
133
|
+
displayName: z.ZodOptional<z.ZodString>;
|
|
132
134
|
}, z.core.$strip>>;
|
|
133
135
|
export type Preset = z.infer<typeof PresetSchema>;
|
|
134
136
|
export declare const WebsearchConfigSchema: z.ZodObject<{
|
|
@@ -187,6 +189,7 @@ export declare const PluginConfigSchema: z.ZodObject<{
|
|
|
187
189
|
v2: "v2";
|
|
188
190
|
}>>;
|
|
189
191
|
balanceProviderUsage: z.ZodOptional<z.ZodBoolean>;
|
|
192
|
+
showStartupToast: z.ZodOptional<z.ZodBoolean>;
|
|
190
193
|
manualPlan: z.ZodOptional<z.ZodObject<{
|
|
191
194
|
orchestrator: z.ZodObject<{
|
|
192
195
|
primary: z.ZodString;
|
|
@@ -235,6 +238,7 @@ export declare const PluginConfigSchema: z.ZodObject<{
|
|
|
235
238
|
skills: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
236
239
|
mcps: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
237
240
|
options: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
241
|
+
displayName: z.ZodOptional<z.ZodString>;
|
|
238
242
|
}, z.core.$strip>>>>;
|
|
239
243
|
agents: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
240
244
|
model: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
|
|
@@ -246,6 +250,7 @@ export declare const PluginConfigSchema: z.ZodObject<{
|
|
|
246
250
|
skills: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
247
251
|
mcps: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
248
252
|
options: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
253
|
+
displayName: z.ZodOptional<z.ZodString>;
|
|
249
254
|
}, z.core.$strip>>>;
|
|
250
255
|
disabled_agents: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
251
256
|
disabled_mcps: z.ZodOptional<z.ZodArray<z.ZodString>>;
|