oh-my-opencode-slim 2.0.3 → 2.0.5

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 CHANGED
@@ -32,6 +32,20 @@ oh-my-opencode-slim は OpenCode 向けのエージェントオーケストレ
32
32
 
33
33
  各エージェントについて知りたい場合は **[Meet the Pantheon](#meet-the-pantheon)** を参照してください。機能の全体像は下記の **[Features & Workflows](#features-and-workflows)** をご覧ください。
34
34
 
35
+ ### LazySkills でエージェントスキルを管理
36
+
37
+ <p align="center">
38
+ <a href="https://github.com/alvinunreal/lazyskills">
39
+ <img src="img/lazyskills-wide.svg" alt="LazySkills" width="720">
40
+ </a>
41
+ </p>
42
+
43
+ **[LazySkills](https://github.com/alvinunreal/lazyskills)** は、エージェントスキルを管理するためのターミナル UI です。インストール済みのスキル、各スキルを使用できるエージェント、可視性が壊れている理由、次に安全に実行できる操作を 1 か所で確認できます。
44
+
45
+ <p align="center">
46
+ <a href="https://github.com/alvinunreal/lazyskills"><b>LazySkills を見る →</b></a>
47
+ </p>
48
+
35
49
  ### ユーザーの声
36
50
 
37
51
  > “タスク管理は 5/10 から簡単に 8〜9/10 まで上がりました。
package/README.ko-KR.md CHANGED
@@ -32,6 +32,20 @@ oh-my-opencode-slim은 OpenCode용 에이전트 오케스트레이션 플러그
32
32
 
33
33
  에이전트 자체를 살펴보려면 **[판테온 만나보기](#meet-the-pantheon)** 를 참고하세요. 전체 기능 세트는 아래의 **[기능 & 워크플로우](#features-and-workflows)** 에서 확인할 수 있습니다.
34
34
 
35
+ ### LazySkills로 에이전트 스킬 관리하기
36
+
37
+ <p align="center">
38
+ <a href="https://github.com/alvinunreal/lazyskills">
39
+ <img src="img/lazyskills-wide.svg" alt="LazySkills" width="720">
40
+ </a>
41
+ </p>
42
+
43
+ **[LazySkills](https://github.com/alvinunreal/lazyskills)** 는 에이전트 스킬을 관리하기 위한 터미널 UI입니다. 설치된 스킬, 각 스킬을 사용할 수 있는 에이전트, 가시성이 깨질 수 있는 이유, 다음에 안전하게 실행할 수 있는 작업을 한곳에서 확인할 수 있습니다.
44
+
45
+ <p align="center">
46
+ <a href="https://github.com/alvinunreal/lazyskills"><b>LazySkills 살펴보기 →</b></a>
47
+ </p>
48
+
35
49
  ### 사용자들의 말
36
50
 
37
51
  > “작업 관리가 쉽게 5/10에서 8-9/10으로 올라갔습니다.
package/README.md CHANGED
@@ -30,6 +30,20 @@ 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
+ ### Manage Agent Skills with LazySkills
34
+
35
+ <p align="center">
36
+ <a href="https://github.com/alvinunreal/lazyskills">
37
+ <img src="img/lazyskills-wide.svg" alt="LazySkills" width="720">
38
+ </a>
39
+ </p>
40
+
41
+ **[LazySkills](https://github.com/alvinunreal/lazyskills)** is a terminal UI for managing agent skills. It gives you one place to see what is installed, which agents can use each skill, why visibility may be broken, and what actions are safe to run next.
42
+
43
+ <p align="center">
44
+ <a href="https://github.com/alvinunreal/lazyskills"><b>Explore LazySkills →</b></a>
45
+ </p>
46
+
33
47
  ### What Users Say
34
48
 
35
49
  > “Task management went from 5/10 to 8-9/10 easily. The Orchestrator sends
@@ -129,6 +143,18 @@ The default generated configuration includes both `openai` and `opencode-go` pre
129
143
 
130
144
  To use custom providers or a mixed-provider setup, use **[Configuration](docs/configuration.md)** for the full reference. 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.
131
145
 
146
+ ### Temporarily Disable the Plugin
147
+
148
+ Set `OH_MY_OPENCODE_SLIM_DISABLE=1` when starting OpenCode to make the plugin
149
+ return without registering agents, tools, MCPs, hooks, Companion, or the TUI
150
+ sidebar:
151
+
152
+ ```bash
153
+ OH_MY_OPENCODE_SLIM_DISABLE=1 opencode
154
+ ```
155
+
156
+ Truthy values are `1`, `true`, `yes`, and `on`.
157
+
132
158
  ### ✅ Verify Your Setup
133
159
 
134
160
  After installation and authentication, verify all agents are configured and responding:
@@ -657,7 +683,7 @@ Use this section as a map: start with installation, then jump to features, confi
657
683
  <p><sub>Every merged contribution leaves a mark on the realm.</sub></p>
658
684
 
659
685
  <!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section -->
660
- [![All Contributors](https://img.shields.io/badge/all_contributors-61-orange.svg?style=flat-square)](#contributors-)
686
+ [![All Contributors](https://img.shields.io/badge/all_contributors-66-orange.svg?style=flat-square)](#contributors-)
661
687
  <!-- ALL-CONTRIBUTORS-BADGE:END -->
662
688
  </div>
663
689
 
@@ -750,6 +776,11 @@ Use this section as a map: start with installation, then jump to features, confi
750
776
  </tr>
751
777
  <tr>
752
778
  <td align="center" valign="top" width="16.66%"><a href="https://github.com/bobbyunknown"><img src="https://avatars.githubusercontent.com/u/62272380?v=4?s=100" width="100px;" alt="Insomnia"/><br /><sub><b>Insomnia</b></sub></a><br /><a href="https://github.com/alvinunreal/oh-my-opencode-slim/commits?author=bobbyunknown" title="Code">💻</a></td>
779
+ <td align="center" valign="top" width="16.66%"><a href="https://github.com/andrescastane"><img src="https://avatars.githubusercontent.com/u/13487870?v=4?s=100" width="100px;" alt="Andres Castañeda"/><br /><sub><b>Andres Castañeda</b></sub></a><br /><a href="https://github.com/alvinunreal/oh-my-opencode-slim/commits?author=andrescastane" title="Code">💻</a></td>
780
+ <td align="center" valign="top" width="16.66%"><a href="https://zaradacht.com/"><img src="https://avatars.githubusercontent.com/u/24251016?v=4?s=100" width="100px;" alt="Zaradacht Taifour (Zack)"/><br /><sub><b>Zaradacht Taifour (Zack)</b></sub></a><br /><a href="https://github.com/alvinunreal/oh-my-opencode-slim/commits?author=Zaradacht" title="Code">💻</a></td>
781
+ <td align="center" valign="top" width="16.66%"><a href="https://github.com/fslse"><img src="https://avatars.githubusercontent.com/u/90545544?v=4?s=100" width="100px;" alt="fslse"/><br /><sub><b>fslse</b></sub></a><br /><a href="https://github.com/alvinunreal/oh-my-opencode-slim/commits?author=fslse" title="Code">💻</a></td>
782
+ <td align="center" valign="top" width="16.66%"><a href="https://github.com/linze0721"><img src="https://avatars.githubusercontent.com/u/178997622?v=4?s=100" width="100px;" alt="萧瑟"/><br /><sub><b>萧瑟</b></sub></a><br /><a href="https://github.com/alvinunreal/oh-my-opencode-slim/commits?author=linze0721" title="Code">💻</a></td>
783
+ <td align="center" valign="top" width="16.66%"><a href="https://github.com/SisyphusZheng"><img src="https://avatars.githubusercontent.com/u/146103794?v=4?s=100" width="100px;" alt="Zhi"/><br /><sub><b>Zhi</b></sub></a><br /><a href="https://github.com/alvinunreal/oh-my-opencode-slim/commits?author=SisyphusZheng" title="Code">💻</a></td>
753
784
  </tr>
754
785
  </tbody>
755
786
  </table>
package/README.zh-CN.md CHANGED
@@ -32,6 +32,20 @@ oh-my-opencode-slim 是一个用于 OpenCode 的智能体编排插件。它内
32
32
 
33
33
  要了解智能体本身,请参阅 **[认识众神殿](#meet-the-pantheon)**。如需了解完整特性集,请参阅下方的 **[特性与工作流](#features-and-workflows)**。
34
34
 
35
+ ### 用 LazySkills 管理智能体技能
36
+
37
+ <p align="center">
38
+ <a href="https://github.com/alvinunreal/lazyskills">
39
+ <img src="img/lazyskills-wide.svg" alt="LazySkills" width="720">
40
+ </a>
41
+ </p>
42
+
43
+ **[LazySkills](https://github.com/alvinunreal/lazyskills)** 是一个用于管理智能体技能的终端 UI。它让你可以在一个地方查看已安装的技能、哪些智能体可以使用每个技能、为什么可见性可能失效,以及接下来可以安全执行哪些操作。
44
+
45
+ <p align="center">
46
+ <a href="https://github.com/alvinunreal/lazyskills"><b>探索 LazySkills →</b></a>
47
+ </p>
48
+
35
49
  ### 用户怎么说
36
50
 
37
51
  > “任务管理轻松从 5/10 提升到了 8-9/10。Orchestrator 会派出
@@ -0,0 +1,10 @@
1
+ type AgentPermission = Record<string, 'allow' | 'ask' | 'deny' | Record<string, 'allow' | 'ask' | 'deny'>>;
2
+ /**
3
+ * Strict read-only tool permissions for advisory agents.
4
+ *
5
+ * Start with wildcard deny so newly-added tools are unavailable by default,
6
+ * then allow only inspection/search tools. Explicitly deny known mutating and
7
+ * delegation tools to make the read-only boundary obvious in generated config.
8
+ */
9
+ export declare function createReadOnlyAgentPermission(): AgentPermission;
10
+ export {};
package/dist/cli/index.js CHANGED
@@ -465,6 +465,7 @@ var CompanionConfigSchema = z2.object({
465
465
  debug: z2.boolean().optional().describe("Enable verbose native companion debug logs.")
466
466
  });
467
467
  var AcpAgentPermissionModeSchema = z2.enum(["ask", "allow", "reject"]);
468
+ var MAX_ACP_TIMEOUT_MS = 2147483647;
468
469
  var AcpAgentConfigSchema = z2.object({
469
470
  command: z2.string().min(1),
470
471
  args: z2.array(z2.string()).default([]),
@@ -474,7 +475,7 @@ var AcpAgentConfigSchema = z2.object({
474
475
  prompt: z2.string().min(1).optional(),
475
476
  orchestratorPrompt: z2.string().min(1).optional(),
476
477
  wrapperModel: ProviderModelIdSchema.optional(),
477
- timeoutMs: z2.number().int().min(1000).max(900000).default(300000),
478
+ timeoutMs: z2.number().int().min(0).max(MAX_ACP_TIMEOUT_MS).default(0).describe("Timeout for a single ACP run in milliseconds. Set to 0 to disable the timeout."),
478
479
  permissionMode: AcpAgentPermissionModeSchema.default("ask")
479
480
  }).strict();
480
481
  var AcpAgentsConfigSchema = z2.record(z2.string(), AcpAgentConfigSchema);
@@ -508,6 +509,8 @@ var PluginConfigSchema = z2.object({
508
509
  agents: z2.record(z2.string(), AgentOverrideConfigSchema).optional(),
509
510
  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."),
510
511
  disabled_mcps: z2.array(z2.string()).optional(),
512
+ 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."),
513
+ 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."),
511
514
  multiplexer: MultiplexerConfigSchema.optional(),
512
515
  tmux: TmuxConfigSchema.optional(),
513
516
  websearch: WebsearchConfigSchema.optional(),
@@ -753,6 +756,20 @@ var DEFAULT_OPENCODE_AGENTS_TO_DISABLE = ["explore", "general"];
753
756
  function isString(value) {
754
757
  return typeof value === "string";
755
758
  }
759
+ function getModelIds(model) {
760
+ if (isString(model))
761
+ return [model];
762
+ if (!Array.isArray(model))
763
+ return [];
764
+ return model.flatMap((entry) => {
765
+ if (isString(entry))
766
+ return [entry];
767
+ if (entry && typeof entry === "object" && isString(entry.id)) {
768
+ return [entry.id];
769
+ }
770
+ return [];
771
+ });
772
+ }
756
773
  function getPlugins(config) {
757
774
  return Array.isArray(config.plugin) ? config.plugin : [];
758
775
  }
@@ -1217,17 +1234,17 @@ function detectCurrentConfig() {
1217
1234
  const presetName = configObj.preset;
1218
1235
  const presets = configObj.presets;
1219
1236
  const agents = presets?.[presetName];
1220
- if (agents) {
1221
- const models = Object.values(agents).map((a) => a?.model).filter(Boolean);
1222
- result.hasOpenAI = models.some((m) => m?.startsWith("openai/"));
1223
- result.hasAnthropic = models.some((m) => m?.startsWith("anthropic/"));
1224
- result.hasCopilot = models.some((m) => m?.startsWith("github-copilot/"));
1225
- result.hasZaiPlan = models.some((m) => m?.startsWith("zai-coding-plan/"));
1226
- result.hasOpencodeZen = models.some((m) => m?.startsWith("opencode/"));
1227
- if (models.some((m) => m?.startsWith("google/"))) {
1237
+ if (agents && typeof agents === "object") {
1238
+ const models = Object.values(agents).filter((a) => a && typeof a === "object").flatMap((a) => getModelIds(a.model));
1239
+ result.hasOpenAI ||= models.some((m) => m.startsWith("openai/"));
1240
+ result.hasAnthropic ||= models.some((m) => m.startsWith("anthropic/"));
1241
+ result.hasCopilot ||= models.some((m) => m.startsWith("github-copilot/"));
1242
+ result.hasZaiPlan ||= models.some((m) => m.startsWith("zai-coding-plan/"));
1243
+ result.hasOpencodeZen ||= models.some((m) => m.startsWith("opencode/"));
1244
+ if (models.some((m) => m.startsWith("google/"))) {
1228
1245
  result.hasAntigravity = true;
1229
1246
  }
1230
- if (models.some((m) => m?.startsWith("chutes/"))) {
1247
+ if (models.some((m) => m.startsWith("chutes/"))) {
1231
1248
  result.hasChutes = true;
1232
1249
  }
1233
1250
  }
@@ -21,4 +21,4 @@ export declare const PERMISSION_ONLY_SKILLS: PermissionOnlySkill[];
21
21
  * @param skillList - Optional explicit list of skills to allow (overrides defaults)
22
22
  * @returns Permission rules for the skill permission type
23
23
  */
24
- export declare function getSkillPermissionsForAgent(agentName: string, skillList?: string[]): Record<string, 'allow' | 'ask' | 'deny'>;
24
+ export declare function getSkillPermissionsForAgent(agentName: string, skillList?: string[], disabledSkillNames?: string[]): Record<string, 'allow' | 'ask' | 'deny'>;
@@ -16,6 +16,7 @@ export declare class CompanionManager {
16
16
  /** sessionId → agent name, for sessions currently busy. */
17
17
  private readonly busyAgentSessions;
18
18
  private readonly config?;
19
+ private companionProcess;
19
20
  constructor(sessionId: string, cwd: string, config?: CompanionConfig);
20
21
  onLoad(): void;
21
22
  /**
@@ -5,8 +5,9 @@ export type AgentName = (typeof ALL_AGENT_NAMES)[number];
5
5
  /** Agents that cannot be disabled even if listed in disabled_agents config. */
6
6
  export declare const PROTECTED_AGENTS: Set<string>;
7
7
  /**
8
- * Get the list of orchestratable agents, excluding any disabled agents.
9
- * This is used for delegation validation at runtime.
8
+ * Default models for each agent.
9
+ * All set to undefined so agents follow the global/session model.
10
+ * Users can override per-agent via oh-my-opencode-slim.json agents.<name>.model.
10
11
  */
11
12
  export declare const DEFAULT_MODELS: Record<AgentName, string | undefined>;
12
13
  export declare const POLL_INTERVAL_MS = 500;
@@ -208,6 +208,7 @@ export declare const AcpAgentPermissionModeSchema: z.ZodEnum<{
208
208
  ask: "ask";
209
209
  reject: "reject";
210
210
  }>;
211
+ export declare const MAX_ACP_TIMEOUT_MS = 2147483647;
211
212
  export declare const AcpAgentConfigSchema: z.ZodObject<{
212
213
  command: z.ZodString;
213
214
  args: z.ZodDefault<z.ZodArray<z.ZodString>>;
@@ -277,6 +278,8 @@ export declare const PluginConfigSchema: z.ZodObject<{
277
278
  }, z.core.$strict>>>;
278
279
  disabled_agents: z.ZodOptional<z.ZodArray<z.ZodString>>;
279
280
  disabled_mcps: z.ZodOptional<z.ZodArray<z.ZodString>>;
281
+ disabled_tools: z.ZodOptional<z.ZodArray<z.ZodString>>;
282
+ disabled_skills: z.ZodOptional<z.ZodArray<z.ZodString>>;
280
283
  multiplexer: z.ZodOptional<z.ZodObject<{
281
284
  type: z.ZodDefault<z.ZodEnum<{
282
285
  auto: "auto";