2424#include < QDir>
2525#include < QFileDialog>
2626#include < QFormLayout>
27- #include < QGroupBox>
2827#include < QHBoxLayout>
2928#include < QInputDialog>
3029#include < QLabel>
4039#include " AcpAgentRegistry.h"
4140#include " ApplicationSettings.h"
4241#include " CronExpression.h"
43- #include " GoalConfigWidget .h"
42+ #include " GoalAgentConfigDialog .h"
4443#include " NotepadNextApplication.h"
4544#include " ai/CredentialStore.h"
4645#include " ai/LlmHttpClient.h"
@@ -56,7 +55,7 @@ EditScheduledTaskDialog::EditScheduledTaskDialog(const ScheduledTaskDefinition &
5655 , m_original(def)
5756{
5857 setWindowTitle (def.id .isEmpty () ? tr (" Add Scheduled Task" ) : tr (" Edit Scheduled Task" ));
59- resize (520 , 700 );
58+ resize (520 , 480 );
6059
6160 auto *mainLayout = new QVBoxLayout (this );
6261 auto *form = new QFormLayout ();
@@ -131,27 +130,25 @@ EditScheduledTaskDialog::EditScheduledTaskDialog(const ScheduledTaskDefinition &
131130 mainLayout->addLayout (form);
132131
133132 // Goal section
133+ auto *goalRow = new QHBoxLayout ();
134134 m_goalCheck = new QCheckBox (tr (" Enable Goal Agent evaluation" ), this );
135135 m_goalCheck->setChecked (def.hasGoalConfig );
136- mainLayout->addWidget (m_goalCheck);
137-
138- m_goalGroup = new QGroupBox (tr (" Goal Configuration" ), this );
139- auto *goalGroupLayout = new QVBoxLayout (m_goalGroup);
140- goalGroupLayout->setContentsMargins (6 , 6 , 6 , 6 );
141- m_goalConfig = new GoalConfigWidget (agentRegistry, settings, m_goalGroup);
142- goalGroupLayout->addWidget (m_goalConfig);
143-
144- if (def.hasGoalConfig ) {
145- m_goalConfig->setCriteria (def.goalConfig .criteriaList );
146- m_goalConfig->setAgentId (def.goalConfig .agentId );
147- m_goalConfig->setMaxIterations (def.goalConfig .maxIterations );
148- if (!def.goalConfig .promptTemplateId .isEmpty ())
149- m_goalConfig->setPromptTemplateId (def.goalConfig .promptTemplateId );
150- }
151-
152- mainLayout->addWidget (m_goalGroup);
153- m_goalGroup->setVisible (def.hasGoalConfig );
154- connect (m_goalCheck, &QCheckBox::toggled, m_goalGroup, &QGroupBox::setVisible);
136+ goalRow->addWidget (m_goalCheck);
137+ m_goalConfigBtn = new QPushButton (tr (" Configure..." ), this );
138+ m_goalConfigBtn->setEnabled (def.hasGoalConfig );
139+ goalRow->addWidget (m_goalConfigBtn);
140+ goalRow->addStretch ();
141+ mainLayout->addLayout (goalRow);
142+
143+ if (def.hasGoalConfig )
144+ m_goalConfigData = def.goalConfig ;
145+
146+ connect (m_goalCheck, &QCheckBox::toggled, m_goalConfigBtn, &QPushButton::setEnabled);
147+ connect (m_goalConfigBtn, &QPushButton::clicked, this , [this ]() {
148+ GoalAgentConfigDialog dlg (m_goalConfigData, m_agentRegistry, m_settings, this );
149+ if (dlg.exec () == QDialog::Accepted)
150+ m_goalConfigData = dlg.goalConfig ();
151+ });
155152
156153 // Buttons
157154 auto *btnLayout = new QHBoxLayout ();
@@ -247,11 +244,7 @@ ScheduledTaskDefinition EditScheduledTaskDialog::taskResult() const
247244
248245 def.hasGoalConfig = m_goalCheck->isChecked ();
249246 if (def.hasGoalConfig ) {
250- const GoalConfigResult gcr = m_goalConfig->result ();
251- def.goalConfig .criteriaList = gcr.criteriaList ;
252- def.goalConfig .agentId = gcr.agentId ;
253- def.goalConfig .maxIterations = gcr.maxIterations ;
254- def.goalConfig .promptTemplateId = gcr.promptTemplateId ;
247+ def.goalConfig = m_goalConfigData;
255248 } else {
256249 def.goalConfig = ScheduledTaskGoalConfig{};
257250 }
@@ -315,11 +308,16 @@ void EditScheduledTaskDialog::onCronHelperClicked()
315308 req.maxTokens = 50 ;
316309 req.idleTimeoutSec = 30 ;
317310
311+ m_cronHelperBtn->setEnabled (false );
312+ m_cronHelperBtn->setText (tr (" ..." ));
313+
318314 auto *accumulated = new QString ();
319315 connect (client, &ai::ILlmHttpClient::tokenReceived, this , [accumulated](const QString &token) {
320316 *accumulated += token;
321317 });
322318 connect (client, &ai::ILlmHttpClient::streamEnded, this , [this , client, accumulated]() {
319+ m_cronHelperBtn->setEnabled (true );
320+ m_cronHelperBtn->setText (tr (" AI" ));
323321 const QString cronExpr = accumulated->trimmed ();
324322 auto parsed = CronExpression::parse (cronExpr);
325323 if (parsed && parsed->isValid ()) {
@@ -332,6 +330,8 @@ void EditScheduledTaskDialog::onCronHelperClicked()
332330 client->deleteLater ();
333331 });
334332 connect (client, &ai::ILlmHttpClient::errorOccurred, this , [this , client, accumulated](int , const QString &msg) {
333+ m_cronHelperBtn->setEnabled (true );
334+ m_cronHelperBtn->setText (tr (" AI" ));
335335 QMessageBox::warning (this , tr (" AI Error" ), msg);
336336 delete accumulated;
337337 client->deleteLater ();
0 commit comments