oh-my-opencode-slim 0.9.14 → 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.
Files changed (44) hide show
  1. package/README.md +116 -56
  2. package/dist/agents/orchestrator.d.ts +2 -1
  3. package/dist/background/background-manager.d.ts +9 -1
  4. package/dist/background/multiplexer-session-manager.d.ts +2 -0
  5. package/dist/cli/index.js +49 -50
  6. package/dist/cli/types.d.ts +0 -1
  7. package/dist/config/schema.d.ts +5 -0
  8. package/dist/index.js +584 -310
  9. package/dist/multiplexer/factory.d.ts +5 -1
  10. package/dist/multiplexer/tmux/index.d.ts +3 -1
  11. package/dist/multiplexer/types.d.ts +2 -2
  12. package/dist/multiplexer/zellij/index.d.ts +1 -1
  13. package/dist/utils/agent-variant.d.ts +15 -1
  14. package/oh-my-opencode-slim.schema.json +12 -0
  15. package/package.json +3 -1
  16. package/src/skills/simplify/README.md +19 -0
  17. package/src/skills/simplify/SKILL.md +138 -0
  18. package/dist/background/tmux-session-manager.d.ts +0 -63
  19. package/dist/cli/chutes-selection.d.ts +0 -3
  20. package/dist/cli/dynamic-model-selection.d.ts +0 -14
  21. package/dist/cli/external-rankings.d.ts +0 -8
  22. package/dist/cli/model-selection.d.ts +0 -30
  23. package/dist/cli/opencode-models.d.ts +0 -18
  24. package/dist/cli/opencode-selection.d.ts +0 -3
  25. package/dist/cli/precedence-resolver.d.ts +0 -16
  26. package/dist/cli/scoring-v2/engine.d.ts +0 -4
  27. package/dist/cli/scoring-v2/features.d.ts +0 -3
  28. package/dist/cli/scoring-v2/index.d.ts +0 -4
  29. package/dist/cli/scoring-v2/types.d.ts +0 -17
  30. package/dist/cli/scoring-v2/weights.d.ts +0 -2
  31. package/dist/hooks/post-read-nudge/index.d.ts +0 -18
  32. package/dist/interview/store.d.ts +0 -9
  33. package/dist/tools/grep/cli.d.ts +0 -3
  34. package/dist/tools/grep/constants.d.ts +0 -18
  35. package/dist/tools/grep/downloader.d.ts +0 -3
  36. package/dist/tools/grep/index.d.ts +0 -5
  37. package/dist/tools/grep/tools.d.ts +0 -2
  38. package/dist/tools/grep/types.d.ts +0 -35
  39. package/dist/tools/grep/utils.d.ts +0 -2
  40. package/dist/tools/quota/api.d.ts +0 -5
  41. package/dist/tools/quota/command.d.ts +0 -1
  42. package/dist/tools/quota/index.d.ts +0 -21
  43. package/dist/tools/quota/types.d.ts +0 -41
  44. 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.png" alt="Pantheon agents" style="border-radius: 10px;" width="620">
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
- <p><a href="https://moltfounders.com/jobs/09d1c6e7-9e0e-4683-8d78-e2376aaa2333"><img src="https://moltfounders.com/badges/4.png" alt="MoltFounders" height="30"></a></p>
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>&nbsp;
@@ -13,7 +13,13 @@
13
13
 
14
14
  ---
15
15
 
16
- ## 📦 Installation
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
- The installer generates an OpenAI configuration by default (using `gpt-5.4` and `gpt-5.4-mini`). No provider questions asked.
30
+ ### Getting Started
25
31
 
26
- For non-interactive mode:
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
- ```bash
29
- bunx oh-my-opencode-slim@latest install --no-tui --tmux=yes --skills=yes
30
- ```
34
+ Then:
31
35
 
32
- To force overwrite of an existing configuration:
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
- ### For Alternative Providers
38
+ ```bash
39
+ opencode auth login
40
+ ```
41
+ 2. **Refresh and list the models OpenCode can see**:
38
42
 
39
- The default configuration uses OpenAI. To use Kimi, GitHub Copilot, or ZAI Coding Plan, see **[Provider Configurations](docs/provider-configurations.md)** for step-by-step instructions and config examples.
43
+ ```bash
44
+ opencode models --refresh
45
+ ```
46
+ 3. **Open your plugin config** at `~/.config/opencode/oh-my-opencode-slim.json`
40
47
 
41
- > [!TIP]
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
- ### JSON Schema
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
- An official JSON Schema is included in the package for editor validation and autocomplete. Add a `$schema` reference to your config file:
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
- // your config...
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
- This enables autocomplete and inline validation in VS Code, Neovim, and other editors that support JSON Schema.
72
+ ### For Alternative Providers
56
73
 
57
- ### For LLM Agents
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
- Paste this into any coding agent:
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?** Not all models support vision. Your strongest coding model (e.g. for design decisions) may not be able to read images, while a vision-capable model may not be the best for reasoning. Observer solves this by having its **own model** configure a vision-capable model for it while keeping Designer on your strongest reasoning model. Disabled by default; enable via `disabled_agents: []` in config.
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
- ### 🚀 Getting Started
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
- | Doc | Contents |
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
- ### Features
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
- | Feature | Doc | What it does |
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
- ### ⚙️ Config & Reference
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
- | Doc | Contents |
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
- Slim only intercepts `apply_patch` before native execution. It rewrites recoverable stale patches, canonizes safe tolerant matches against the real file when unicode/trim drift is the only mismatch, keeps the authored `new_lines` bytes intact, preserves existing file EOL/final-newline state for updates, validates malformed patches strictly before helper execution, uses a conservative bounded LCS fallback, supports sequential `Update File` hunks on the same path through accumulated helper state, and blocks `apply_patch` before the native tool runs if any patch path falls outside the allowed root/worktree. This rescue does not extend to `edit` or `write`.
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 | Contents |
415
- |-----|----------|
416
- | **[Author's Preset](docs/authors-preset.md)** | The exact config the author runs daily OpenAI Pro + GitHub Copilot |
417
- | **[$30 Preset](docs/thirty-dollars-preset.md)** | A mixed setup using Codex Plus ($20) + GitHub Copilot Pro ($10) for about $30/month total |
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
- [![All Contributors](https://img.shields.io/badge/all_contributors-38-orange.svg?style=flat-square)](#contributors-)
486
+ [![All Contributors](https://img.shields.io/badge/all_contributors-40-orange.svg?style=flat-square)](#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 '@opencode-ai/sdk/v2';
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 ? ["*"] : RECOMMENDED_SKILLS.filter((s) => s.allowedAgents.includes("*") || s.allowedAgents.includes(agentName)).map((s) => s.skillName);
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}✓${RESET}`,
14461
- cross: `${RED}✗${RESET}`,
14462
- arrow: `${BLUE}→${RESET}`,
14463
- bullet: `${DIM}•${RESET}`,
14464
- info: `${BLUE}ℹ${RESET}`,
14465
- warn: `${YELLOW}⚠${RESET}`,
14466
- star: `${YELLOW}★${RESET}`
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 configPath = getExistingLiteConfigPath();
14569
- const configExists = existsSync4(configPath);
14559
+ const configPath2 = getExistingLiteConfigPath();
14560
+ const configExists = existsSync4(configPath2);
14570
14561
  if (configExists && !config2.reset) {
14571
- printInfo(`Configuration already exists at ${configPath}. ` + "Use --reset to overwrite.");
14562
+ printInfo(`Configuration already exists at ${configPath2}. ` + "Use --reset to overwrite.");
14572
14563
  } else {
14573
- const liteResult = writeLiteConfig(config2, configExists ? configPath : undefined);
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
- console.log(` 1. Start OpenCode:`);
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(`${BOLD}${modelsInfo}${RESET}`);
14634
+ console.log(`${modelsInfo}`);
14634
14635
  const altProviders = "For alternative providers (Kimi, GitHub Copilot, ZAI Coding Plan)";
14635
- console.log(`${BOLD}${altProviders}, see:${RESET}`);
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: args.tmux === "yes",
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
- --tmux=yes|no Enable tmux integration (yes/no)
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 --tmux=no --skills=yes
14693
+ bunx oh-my-opencode-slim install --no-tui --skills=yes
14695
14694
  bunx oh-my-opencode-slim install --reset
14696
14695
  `);
14697
14696
  }
@@ -1,7 +1,6 @@
1
1
  export type BooleanArg = 'yes' | 'no';
2
2
  export interface InstallArgs {
3
3
  tui: boolean;
4
- tmux?: BooleanArg;
5
4
  skills?: BooleanArg;
6
5
  dryRun?: boolean;
7
6
  reset?: boolean;
@@ -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>>;