Claus Ibsen created CAMEL-24798:
-----------------------------------

             Summary: camel-jbang - camel_get_files should understand the Maven 
project layout: recursive listing, relative paths, and the routes' source files 
from the running integration
                 Key: CAMEL-24798
                 URL: https://issues.apache.org/jira/browse/CAMEL-24798
             Project: Camel
          Issue Type: Improvement
          Components: camel-jbang
            Reporter: Claus Ibsen


Observed 2026-09-17 in the TUI AI panel with Ollama (qwen3.6:35b-a3b) against 
an integration started with camel run --runtime=spring-boot, which exports a 
Maven project to ~/workspace/.camel-jbang-run/<id>/ and runs the fat jar. The 
question "what's the name of the source file that has the route" cost 26 
requests (the 25 tool-call limit plus the wrap-up) and a wrong answer ("the 
route file is missing"). The file is 
src/main/resources/camel/timer-log.camel.yaml.

The AI log shows why, and none of it is the model's fault:

# {{camel_get_files}} lists regular files of one directory only ({{Files.list}} 
filtered by {{isRegularFile}}). Listing src/main/resources returned 
application.properties, log4j2*.properties and README.md and gave no hint that 
a camel/ folder exists. The model then guessed routes/, META-INF/, 
timer-log.yaml, routes.yaml, timer-log.camel.yaml in the wrong folder, one call 
each.
# {{file}} must be a plain name: {{routes/timer-log.yaml}} was refused with 
"file must be a plain file name", so even a correct guess of 
camel/timer-log.camel.yaml would have failed.
# The TUI's variant ({{McpFacade.getFiles}}, used when no directory is given) 
answers "No source files found for the selected integration" when a *file* is 
missing, which sent the model looking for the project elsewhere although the 
directory had been resolved correctly to the exported project root.
# The running integration already knows the answer: the status document's 
routes[].source is 
{{nested:/Users/.../.camel-jbang-run/1789636115302/target/timer-log-1.0-SNAPSHOT.jar/!BOOT-INF/classes/!/camel/timer-log.camel.yaml:4}}
 and runtime.directory is the project root. Nothing maps that onto 
src/main/resources/camel/timer-log.camel.yaml for the model.

A human with {{ls -R}} answers this in one look; the tool must let a 35B model 
do the same. Proposal, in the shared authoring tools (camel-jbang-core 
AuthoringTools, so camel mcp, camel tui --mcp and the F8 panel all get it):

* *Recursive listing with relative paths.* Without {{file}}, walk the project 
directory (skipping target/, build/, .git, .mvn, .idea, node_modules and the 
like) up to the existing cap of 99 entries and return path, size, type and a 
kind: route (YAML/XML files whose content starts a route, e.g. "- route:", "- 
from:", "<routes", "<camelContext"; Java files containing RouteBuilder), config 
(application*.properties/yaml), java, pom, doc, other. Add a short summary up 
front: layout (maven or flat), the project root, routeFiles[] and 
configFiles[], so the first call already names the route files.
* *Relative paths in {{file}}.* Accept camel/timer-log.camel.yaml, still 
refusing anything that escapes the directory. Same for camel_write_file.
* *The routes' source files from the running integration.* When the tool 
answers for a selected integration, add routes[] with routeId, file (relative 
to the project root) and line, derived from routes[].source: map 
nested:<jar>/!BOOT-INF/classes/!/<p> and classpath:<p> to 
src/main/resources/<p>, Quarkus' equivalent likewise, file:<p> as is. This is 
the direct answer to "which file has route X" and to "show me the route source".
* *One implementation.* Fold the TUI's own variant into the shared tool (keep 
its editing/temporary metadata and its default directory from 
FilesBrowser.resolveSourceDirectory) and report a missing file as a missing 
file.
* *Tell the model where to look.* The tool description should say that routes 
of a Maven project live under src/main/resources/camel or src/main/java. Keep 
it short: the description counts toward the local-model prompt budget 
(AiPanelPromptBudgetTest).

Tests: fixtures for the exported Spring Boot layout, a flat directory and a 
Quarkus layout; the nested/classpath/file source mapping; parent-traversal 
still refused; the TUI's tool path with a missing file. Expected effect: the 
question above becomes one listing plus one read, two calls instead of 25, and 
the Ollama tab's per-question request count is the measure.

Related: CAMEL-24794 (the Ollama tab that made the cost visible), CAMEL-24796 
(context and compaction), and the local model benchmark findings that most 
local-model failures are Camel problems that trip humans too.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to