Federico Mariani created CAMEL-25539:
----------------------------------------
Summary: camel-jbang-mcp - camel_catalog_doc for an EIP or
language does not say where the element goes nor the YAML shape of expression
and namespace options
Key: CAMEL-25539
URL: https://issues.apache.org/jira/browse/CAMEL-25539
Project: Camel
Issue Type: Improvement
Components: camel-jbang-mcp
Affects Versions: 4.22.1
Reporter: Federico Mariani
In camel-jbang-mcp 4.22.1, {{camel_catalog_eip_doc}} and
{{camel_catalog_language_doc}} return the model options and nothing about how
the element is written in YAML or where it goes. On main both are replaced by
{{camel_catalog_doc}} (CAMEL-24712), which has the same gap for EIPs and for
options whose type is not a scalar. {{camel_catalog_sample}} (CAMEL-24693,
CAMEL-25370) now answers the placement question, but only when an agent thinks
of calling it after reading the doc.
In an evaluation of coding agents (Claude Code and IBM Bob) on migration tasks
with camel-jbang-mcp 4.22.1, the doc answers were read and then not enough to
write valid YAML:
* 4 of 20 sessions that asked for the onException doc then wrote
{{onException}} as a step inside {{from.steps}} and got {{property
'onException' is not defined in the schema}}.
* 34 sessions wrote {{handled: true}} / {{handled: false}} and got {{boolean
found, object expected}}. The doc lists {{handled}} as {{"type":"object"}},
with nothing that says it is an expression.
* About 20 sessions wrote the XPath namespaces as {{namespaces:}}, as a string,
or as a list of {{\{prefix: uri\}}} maps. The doc lists {{namespace}} as
{{"type":"array"}} with the description "Injects the XML Namespaces of prefix
to uri mappings."; the {{[\{key, value\}]}} shape appears nowhere in the answer.
h3. Reproduction
{noformat}
camel_catalog_doc name=onException kind=eip
-> kind, name, title, description, label, input, output, options
no placement; handled:
{"name":"handled","type":"object","required":false,"group":"common",...}
camel_catalog_doc name=xpath kind=language
-> namespace: {"name":"namespace","type":"array","description":"Injects the
XML Namespaces of prefix to uri mappings."}
{noformat}
What the YAML DSL expects:
{code:yaml}
- onException: # a top-level entry, not a step
exception: [java.net.ConnectException]
handled:
constant:
expression: "true"
- route:
from:
uri: direct:start
steps:
- setHeader:
name: price
expression:
xpath:
expression: /c:order/c:price/text()
namespace:
- key: c
value: http://acme.com/cheese
{code}
h3. Cause
{{dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ai/CatalogDocs.java}}:
* {{eipDoc(EipModel, ...)}} puts the options only. The placement is already
computed by {{CatalogSamples.placement(String)}} (TOP_LEVEL, ERROR_HANDLERS),
but only {{camel_catalog_sample}} returns it.
* {{optionToJson}} adds a YAML hint only for an element written as one of its
kinds ({{isWrittenAsKind}}, CAMEL-25370). An option of kind {{expression}}
({{handled}}, {{continued}}, {{retryWhile}}, {{completionPredicate}}, ...) and
an element list of {{PropertyDefinition}} ({{namespace}} of xpath, xquery,
xtokenize) are shown as {{object}} / {{array}} with no shape.
h3. Fix
* In the EIP answer of {{camel_catalog_doc}}, add the {{placement}} from
{{CatalogSamples.placement}} ("top-level entry: a list item at the same level
as route or from, not a step inside a route" for onException,
routeConfiguration, onCompletion, intercept...) and a hint that
{{camel_catalog_sample}} returns a validated YAML example.
* In {{optionToJson}}, add a {{yaml}} hint for an option of kind {{expression}}
(e.g. {{handled: \{constant: \{expression: "true"\}\}}}, as the validator hint
of CAMEL-24702 says), and for a list of {{PropertyDefinition}} ({{namespace:
[\{key: c, value: http://...\}]}}).
Related: CAMEL-25370 (placement in camel_catalog_sample), CAMEL-24915 (accept a
plain value for handled). Not included: the jq functions {{header()}} /
{{property()}} are already in the doc excerpt on main (CAMEL-25235), and the
simple functions are listed (CAMEL-24804).
--
This message was sent by Atlassian Jira
(v8.20.10#820010)