Explorar o código

Merge pull request #520 from Qesire/disable-built-in-agents

fix(cli): disable OpenCode built-in agents during install
Alvin hai 2 meses
pai
achega
cb4414fec9
Modificáronse 2 ficheiros con 45 adicións e 3 borrados
  1. 30 1
      src/cli/config-io.test.ts
  2. 15 2
      src/cli/config-io.ts

+ 30 - 1
src/cli/config-io.test.ts

@@ -464,7 +464,7 @@ describe('config-io', () => {
     );
   });
 
-  test('disableDefaultAgents disables explore and general agents', () => {
+  test('disableDefaultAgents disables OpenCode built-in agents', () => {
     const configPath = join(tmpDir, 'opencode', 'opencode.json');
     paths.ensureConfigDir();
     writeFileSync(configPath, JSON.stringify({}));
@@ -475,6 +475,35 @@ describe('config-io', () => {
     const saved = JSON.parse(readFileSync(configPath, 'utf-8'));
     expect(saved.agent.explore.disable).toBe(true);
     expect(saved.agent.general.disable).toBe(true);
+    expect(saved.agent.build.disable).toBe(true);
+    expect(saved.agent.plan.disable).toBe(true);
+  });
+
+  test('disableDefaultAgents preserves existing built-in agent config', () => {
+    const configPath = join(tmpDir, 'opencode', 'opencode.json');
+    paths.ensureConfigDir();
+    writeFileSync(
+      configPath,
+      JSON.stringify({
+        agent: {
+          build: { description: 'custom build agent' },
+          plan: { permission: { edit: 'deny' } },
+        },
+      }),
+    );
+
+    const result = disableDefaultAgents();
+    expect(result.success).toBe(true);
+
+    const saved = JSON.parse(readFileSync(configPath, 'utf-8'));
+    expect(saved.agent.build).toEqual({
+      description: 'custom build agent',
+      disable: true,
+    });
+    expect(saved.agent.plan).toEqual({
+      permission: { edit: 'deny' },
+      disable: true,
+    });
   });
 
   test('enableLspByDefault sets lsp true when missing', () => {

+ 15 - 2
src/cli/config-io.ts

@@ -27,6 +27,12 @@ import type {
 } from './types';
 
 const PACKAGE_NAME = 'oh-my-opencode-slim';
+const DEFAULT_OPENCODE_AGENTS_TO_DISABLE = [
+  'build',
+  'explore',
+  'general',
+  'plan',
+] as const;
 
 function isString(value: unknown): value is string {
   return typeof value === 'string';
@@ -533,8 +539,15 @@ export function disableDefaultAgents(): ConfigMergeResult {
     const config = parsedConfig ?? {};
 
     const agent = (config.agent ?? {}) as Record<string, unknown>;
-    agent.explore = { disable: true };
-    agent.general = { disable: true };
+    for (const agentName of DEFAULT_OPENCODE_AGENTS_TO_DISABLE) {
+      const existing = agent[agentName];
+      agent[agentName] = {
+        ...(existing && typeof existing === 'object' && !Array.isArray(existing)
+          ? existing
+          : {}),
+        disable: true,
+      };
+    }
     config.agent = agent;
 
     writeConfig(configPath, config);