Remove hardcoded tool parameter check and use plugin discovery
>>> [!note] Migrated issue
<!-- Drupal.org comment -->
<!-- Migrated from issue #3579414. -->
Reported by: [akhil babu](https://www.drupal.org/user/3632866)
Related to !10
>>>
<h3 id="summary-problem-motivation">Problem/Motivation</h3>
<p>Even though <code>AgentsParameterTest</code> items are defined as plugins, the <code>Drupal\ai_agents_test\Form\InteractiveAgentTestForm</code> form still uses the hardcoded options.</p>
<div class="codeblock">
<pre><span style="color: #000000"><span style="color: #0000BB"><?php<br> $form</span><span style="color: #007700">[</span><span style="color: #DD0000">'rules'</span><span style="color: #007700">][</span><span style="color: #0000BB">$rule</span><span style="color: #007700">][</span><span style="color: #DD0000">'parameters'</span><span style="color: #007700">][</span><span style="color: #0000BB">$key</span><span style="color: #007700">][</span><span style="color: #DD0000">'type_of_check'</span><span style="color: #007700">] = [<br> </span><span style="color: #DD0000">'#type' </span><span style="color: #007700">=> </span><span style="color: #DD0000">'select'</span><span style="color: #007700">,<br> </span><span style="color: #DD0000">'#title' </span><span style="color: #007700">=> </span><span style="color: #0000BB">$this</span><span style="color: #007700">-></span><span style="color: #0000BB">t</span><span style="color: #007700">(</span><span style="color: #DD0000">'Rule'</span><span style="color: #007700">),<br> </span><span style="color: #DD0000">'#description' </span><span style="color: #007700">=> </span><span style="color: #0000BB">$this</span><span style="color: #007700">-></span><span style="color: #0000BB">t</span><span style="color: #007700">(</span><span style="color: #DD0000">'The parameter rule for %title. For the <em>one of</em> rules, give a comma separated list.'</span><span style="color: #007700">, [</span><span style="color: #DD0000">'%title' </span><span style="color: #007700">=> </span><span style="color: #0000BB">$context_definition</span><span style="color: #007700">-></span><span style="color: #0000BB">getLabel</span><span style="color: #007700">()]),<br> </span><span style="color: #DD0000">'#required' </span><span style="color: #007700">=> </span><span style="color: #0000BB">TRUE</span><span style="color: #007700">,<br> </span><span style="color: #DD0000">'#default_value' </span><span style="color: #007700">=> </span><span style="color: #0000BB">$values</span><span style="color: #007700">[</span><span style="color: #DD0000">'parameters'</span><span style="color: #007700">][</span><span style="color: #0000BB">$key</span><span style="color: #007700">][</span><span style="color: #DD0000">'type_of_check'</span><span style="color: #007700">] ?? </span><span style="color: #DD0000">'empty'</span><span style="color: #007700">,<br> </span><span style="color: #DD0000">'#options' </span><span style="color: #007700">=> [<br> </span><span style="color: #DD0000">'empty' </span><span style="color: #007700">=> </span><span style="color: #0000BB">$this</span><span style="color: #007700">-></span><span style="color: #0000BB">t</span><span style="color: #007700">(</span><span style="color: #DD0000">'No rules'</span><span style="color: #007700">),<br> </span><span style="color: #DD0000">'isset' </span><span style="color: #007700">=> </span><span style="color: #0000BB">$this</span><span style="color: #007700">-></span><span style="color: #0000BB">t</span><span style="color: #007700">(</span><span style="color: #DD0000">'Is set'</span><span style="color: #007700">),<br> </span><span style="color: #DD0000">'not_set' </span><span style="color: #007700">=> </span><span style="color: #0000BB">$this</span><span style="color: #007700">-></span><span style="color: #0000BB">t</span><span style="color: #007700">(</span><span style="color: #DD0000">'Is not set'</span><span style="color: #007700">),<br> </span><span style="color: #DD0000">'equals' </span><span style="color: #007700">=> </span><span style="color: #0000BB">$this</span><span style="color: #007700">-></span><span style="color: #0000BB">t</span><span style="color: #007700">(</span><span style="color: #DD0000">'Is exactly'</span><span style="color: #007700">),<br> </span><span style="color: #DD0000">'not_equals' </span><span style="color: #007700">=> </span><span style="color: #0000BB">$this</span><span style="color: #007700">-></span><span style="color: #0000BB">t</span><span style="color: #007700">(</span><span style="color: #DD0000">'Is exactly not'</span><span style="color: #007700">),<br> </span><span style="color: #DD0000">'one_of' </span><span style="color: #007700">=> </span><span style="color: #0000BB">$this</span><span style="color: #007700">-></span><span style="color: #0000BB">t</span><span style="color: #007700">(</span><span style="color: #DD0000">'Is one of'</span><span style="color: #007700">),<br> </span><span style="color: #DD0000">'not_one_of' </span><span style="color: #007700">=> </span><span style="color: #0000BB">$this</span><span style="color: #007700">-></span><span style="color: #0000BB">t</span><span style="color: #007700">(</span><span style="color: #DD0000">'Is not one of'</span><span style="color: #007700">),<br> </span><span style="color: #DD0000">'greater_than' </span><span style="color: #007700">=> </span><span style="color: #0000BB">$this</span><span style="color: #007700">-></span><span style="color: #0000BB">t</span><span style="color: #007700">(</span><span style="color: #DD0000">'Is greater than'</span><span style="color: #007700">),<br> </span><span style="color: #DD0000">'less_than' </span><span style="color: #007700">=> </span><span style="color: #0000BB">$this</span><span style="color: #007700">-></span><span style="color: #0000BB">t</span><span style="color: #007700">(</span><span style="color: #DD0000">'Is less than'</span><span style="color: #007700">),<br> </span><span style="color: #DD0000">'llm' </span><span style="color: #007700">=> </span><span style="color: #0000BB">$this</span><span style="color: #007700">-></span><span style="color: #0000BB">t</span><span style="color: #007700">(</span><span style="color: #DD0000">'Is verified by LLM'</span><span style="color: #007700">),<br> ],<br> ];<br></span><span style="color: #0000BB">?></span></span></pre></div>
<p>So, if someone creates a new plugin, they can't select/use it from the UI</p>
<h4 id="summary-steps-reproduce">Steps to reproduce</h4>
<ul>
<li>Create a new <code>AgentsParameterTest</code> plugin</li>
<li>The newly created plugin won't appear in the form, when creating a new test</li>
</ul>
<h3 id="summary-proposed-resolution">Proposed resolution</h3>
<p>Replace the hard coded list with plugin defintions</p>
<h3 id="summary-remaining-tasks">Remaining tasks</h3>
<h3 id="summary-ui-changes">User interface changes</h3>
<h3 id="summary-api-changes">API changes</h3>
<h3 id="summary-data-model-changes">Data model changes</h3>
issue