This is an automated email from the ASF dual-hosted git repository.

luigidemasi pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel-kit.git

commit d98f170f336725f931bbb996e141eda3c3271f09
Author: Jinal Sarvaiya <[email protected]>
AuthorDate: Fri Nov 6 11:26:51 2026 +0000

    fix #99:inline config content, safe ancestor test, generation-path tests
---
 .../camel/kit/generator/OpenCodeGenerator.java     |  25 ++++-
 .../camel/kit/generator/OpenCodeGeneratorTest.java | 111 ++++++++++++++-------
 2 files changed, 98 insertions(+), 38 deletions(-)

diff --git 
a/kit/camel-kit-core/src/main/java/org/apache/camel/kit/generator/OpenCodeGenerator.java
 
b/kit/camel-kit-core/src/main/java/org/apache/camel/kit/generator/OpenCodeGenerator.java
index 32943b3c..ab1abcf0 100644
--- 
a/kit/camel-kit-core/src/main/java/org/apache/camel/kit/generator/OpenCodeGenerator.java
+++ 
b/kit/camel-kit-core/src/main/java/org/apache/camel/kit/generator/OpenCodeGenerator.java
@@ -92,11 +92,24 @@ public class OpenCodeGenerator extends DefaultGenerator {
         if (explicitConfig != null) {
             collectMcpServersFromFile(explicitConfig, names);
         }
+        String inlineContent = inlineConfigContent();
+        if (inlineContent != null && !inlineContent.isBlank()) {
+            collectMcpServersFromContent(inlineContent, names);
+        }
         return List.copyOf(names);
     }
 
     static void collectMcpServersFromFile(Path configFile, Set<String> names) 
throws IOException {
-        JsonNode config = 
OpenCodeProjectConfig.newJsonMapper().readTree(configFile.toFile());
+        collectMcpServersFromNode(
+                
OpenCodeProjectConfig.newJsonMapper().readTree(configFile.toFile()), names);
+    }
+
+    static void collectMcpServersFromContent(String jsonContent, Set<String> 
names) throws IOException {
+        collectMcpServersFromNode(
+                OpenCodeProjectConfig.newJsonMapper().readTree(jsonContent), 
names);
+    }
+
+    private static void collectMcpServersFromNode(JsonNode config, Set<String> 
names) {
         if (config == null) {
             return;
         }
@@ -142,7 +155,7 @@ public class OpenCodeGenerator extends DefaultGenerator {
         return result;
     }
 
-    static List<Path> globalConfigFiles() {
+    List<Path> globalConfigFiles() {
         Path globalDir = globalConfigDir();
         return GLOBAL_CONFIG_FILES.stream()
                 .map(globalDir::resolve)
@@ -150,7 +163,7 @@ public class OpenCodeGenerator extends DefaultGenerator {
                 .toList();
     }
 
-    private static Path globalConfigDir() {
+    Path globalConfigDir() {
         String xdgConfigHome = System.getenv("XDG_CONFIG_HOME");
         if (xdgConfigHome != null && !xdgConfigHome.isBlank()) {
             return Path.of(xdgConfigHome, "opencode");
@@ -158,7 +171,7 @@ public class OpenCodeGenerator extends DefaultGenerator {
         return Path.of(System.getProperty("user.home"), ".config", "opencode");
     }
 
-    static Path explicitConfigFile() {
+    Path explicitConfigFile() {
         String explicitPath = System.getenv("OPENCODE_CONFIG");
         if (explicitPath != null && !explicitPath.isBlank()) {
             Path path = Path.of(explicitPath);
@@ -169,6 +182,10 @@ public class OpenCodeGenerator extends DefaultGenerator {
         return null;
     }
 
+    String inlineConfigContent() {
+        return System.getenv("OPENCODE_CONFIG_CONTENT");
+    }
+
     private void generateAgents(InitContext ctx, Map<String, Object> data, 
boolean includeShipWorker)
             throws Exception {
         Path agentsDir = ctx.projectDir().resolve(".opencode/agents");
diff --git 
a/kit/camel-kit-core/src/test/java/org/apache/camel/kit/generator/OpenCodeGeneratorTest.java
 
b/kit/camel-kit-core/src/test/java/org/apache/camel/kit/generator/OpenCodeGeneratorTest.java
index 7bfd50b8..82f130f8 100644
--- 
a/kit/camel-kit-core/src/test/java/org/apache/camel/kit/generator/OpenCodeGeneratorTest.java
+++ 
b/kit/camel-kit-core/src/test/java/org/apache/camel/kit/generator/OpenCodeGeneratorTest.java
@@ -5,7 +5,6 @@ import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.attribute.PosixFileAttributeView;
 import java.nio.file.attribute.PosixFilePermission;
-import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Locale;
 import java.util.Set;
@@ -1160,11 +1159,9 @@ class OpenCodeGeneratorTest {
 
     @Test
     void shipWorkerDeniesServersFromAncestorConfig() throws Exception {
-        InitContext ctx = createContext();
-
-        Path ancestorDir = tempDir.getParent();
-        Path ancestorConfig = ancestorDir.resolve("opencode.json");
-        Files.writeString(ancestorConfig, """
+        Path projectDir = tempDir.resolve("project");
+        Files.createDirectories(projectDir);
+        Files.writeString(tempDir.resolve("opencode.json"), """
                 {
                   "mcp": {
                     "ancestor-probe": {"type": "local", "command": ["echo"], 
"enabled": true}
@@ -1172,22 +1169,29 @@ class OpenCodeGeneratorTest {
                 }
                 """);
 
-        try {
-            new OpenCodeGenerator().generate(ctx);
+        AgentConfig agent = AgentRegistry.get("opencode");
+        String agentBaseFolder = agent.folder().substring(0, 
agent.folder().lastIndexOf("/"));
+        InitContext ctx = new InitContext(
+                agent, "opencode",
+                projectDir.resolve(agent.folder()),
+                projectDir.resolve(agentBaseFolder + "/skills"),
+                projectDir,
+                "camel-kit", DistributionConfig.loadFromClasspathOrDefaults(),
+                true, Printer.noop());
 
-            String worker = Files.readString(
-                    tempDir.resolve(".opencode/agents/camel-ship-worker.md"));
-            assertTrue(worker.contains("ancestor-probe_*: deny"),
-                    "Ship worker must deny MCP servers inherited from ancestor 
config");
-        } finally {
-            Files.deleteIfExists(ancestorConfig);
-        }
+        new OpenCodeGenerator().generate(ctx);
+
+        String worker = Files.readString(
+                projectDir.resolve(".opencode/agents/camel-ship-worker.md"));
+        assertTrue(worker.contains("ancestor-probe_*: deny"),
+                "Ship worker must deny MCP servers inherited from ancestor 
config");
     }
 
     @Test
-    void collectMcpServersFromFileHandlesGlobalConfig() throws Exception {
-        Path globalConfig = tempDir.resolve("global-opencode.json");
-        Files.writeString(globalConfig, """
+    void shipWorkerDeniesServersFromGlobalConfig() throws Exception {
+        Path globalDir = tempDir.resolve("fake-global");
+        Files.createDirectories(globalDir);
+        Files.writeString(globalDir.resolve("opencode.json"), """
                 {
                   "mcp": {
                     "global-probe": {"type": "local", "command": ["echo"], 
"enabled": true}
@@ -1195,31 +1199,70 @@ class OpenCodeGeneratorTest {
                 }
                 """);
 
-        Set<String> names = new LinkedHashSet<>();
-        OpenCodeGenerator.collectMcpServersFromFile(globalConfig, names);
-        assertTrue(names.contains("global-probe"),
-                "collectMcpServersFromFile must extract servers from 
global-style config");
+        OpenCodeGenerator gen = new OpenCodeGenerator() {
+            @Override
+            Path globalConfigDir() {
+                return globalDir;
+            }
+        };
+        InitContext ctx = createContext();
+        gen.generate(ctx);
+
+        String worker = Files.readString(
+                tempDir.resolve(".opencode/agents/camel-ship-worker.md"));
+        assertTrue(worker.contains("global-probe_*: deny"),
+                "Ship worker must deny MCP servers from global config");
     }
 
     @Test
-    void collectMcpServersFromFileHandlesNativeGlobalConfig() throws Exception 
{
-        Path globalConfig = tempDir.resolve("global-opencode.json");
-        Files.writeString(globalConfig, """
+    void shipWorkerDeniesServersFromExplicitConfig() throws Exception {
+        Path explicitFile = tempDir.resolve("explicit-opencode.json");
+        Files.writeString(explicitFile, """
                 {
                   "mcp": {
-                    "servers": {
-                      "global-native": {"type": "local", "command": ["echo"], 
"enabled": true}
-                    }
+                    "explicit-probe": {"type": "local", "command": ["echo"], 
"enabled": true}
                   }
                 }
                 """);
 
-        Set<String> names = new LinkedHashSet<>();
-        OpenCodeGenerator.collectMcpServersFromFile(globalConfig, names);
-        assertTrue(names.contains("global-native"),
-                "collectMcpServersFromFile must extract servers from native 
mcp.servers format in global config");
-        assertFalse(names.contains("servers"),
-                "collectMcpServersFromFile must not treat native servers 
container as a server");
+        OpenCodeGenerator gen = new OpenCodeGenerator() {
+            @Override
+            Path explicitConfigFile() {
+                return explicitFile;
+            }
+        };
+        InitContext ctx = createContext();
+        gen.generate(ctx);
+
+        String worker = Files.readString(
+                tempDir.resolve(".opencode/agents/camel-ship-worker.md"));
+        assertTrue(worker.contains("explicit-probe_*: deny"),
+                "Ship worker must deny MCP servers from OPENCODE_CONFIG");
+    }
+
+    @Test
+    void shipWorkerDeniesServersFromInlineConfigContent() throws Exception {
+        String inlineJson = """
+                {
+                  "mcp": {
+                    "inline-probe": {"type": "local", "command": ["echo"], 
"enabled": true}
+                  }
+                }
+                """;
+
+        OpenCodeGenerator gen = new OpenCodeGenerator() {
+            @Override
+            String inlineConfigContent() {
+                return inlineJson;
+            }
+        };
+        InitContext ctx = createContext();
+        gen.generate(ctx);
+
+        String worker = Files.readString(
+                tempDir.resolve(".opencode/agents/camel-ship-worker.md"));
+        assertTrue(worker.contains("inline-probe_*: deny"),
+                "Ship worker must deny MCP servers from 
OPENCODE_CONFIG_CONTENT");
     }
 
     @Test

Reply via email to