From 48773e8ff70ffae7b79b5e226bc4f9784d234f46 Mon Sep 17 00:00:00 2001 From: Michael Lam Date: Thu, 7 May 2026 10:22:44 -0700 Subject: [PATCH] fix: allow no-agent cron edits without prompt --- docs/pr-media/1820/no-agent-cron-edit.png | Bin 0 -> 43545 bytes static/panels.js | 21 +++++-- tests/test_cron_no_agent_edit.py | 71 ++++++++++++++++++++++ 3 files changed, 87 insertions(+), 5 deletions(-) create mode 100644 docs/pr-media/1820/no-agent-cron-edit.png create mode 100644 tests/test_cron_no_agent_edit.py diff --git a/docs/pr-media/1820/no-agent-cron-edit.png b/docs/pr-media/1820/no-agent-cron-edit.png new file mode 100644 index 0000000000000000000000000000000000000000..ffb1af9ff00a704cc7b9e99d57ec3e9fe96252b9 GIT binary patch literal 43545 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
${esc(t('error_prefix').replace(/:\s*$/,''))}
${esc(job.last_error)}
` : ''; @@ -450,6 +453,8 @@ function _renderCronDetail(job){
${esc(t('cron_next'))}
${esc(nextRun)}
${esc(t('cron_last'))}
${esc(lastRun)}
Deliver
${esc(deliver)}
+
Mode
${esc(cronJobMode)}
+ ${isNoAgent ? `
No-agent script
${esc(script || '—')}
` : ''}
${esc(t('cron_profile_label') || 'Profile')}
${esc(profileLabel)}
Skills
${esc(skills)}
${lastError} @@ -685,6 +690,8 @@ function openCronEdit(job){ prompt: job.prompt || '', deliver: job.deliver || 'local', profile: job.profile || '', + no_agent: !!job.no_agent, + script: job.script || '', isEdit: true, }); if (!_cronSkillsCache) { @@ -695,11 +702,12 @@ function openCronEdit(job){ loadCronProfiles().then(()=>_refreshCronProfileSelect(job.profile || '')).catch(()=>{}); } -function _renderCronForm({ name, schedule, prompt, deliver, profile, isEdit }){ +function _renderCronForm({ name, schedule, prompt, deliver, profile, no_agent=false, script='', isEdit }){ const title = $('taskDetailTitle'); const body = $('taskDetailBody'); const empty = $('taskDetailEmpty'); if (!body || !title) return; + const isNoAgent = !!no_agent; title.textContent = isEdit ? (t('edit') + ' · ' + (name || schedule || t('scheduled_jobs'))) : t('new_job'); const deliverOpt = (v,l) => ``; body.innerHTML = ` @@ -714,9 +722,10 @@ function _renderCronForm({ name, schedule, prompt, deliver, profile, isEdit }){
${esc(t('cron_schedule_hint') || "Cron expression or shorthand like 'every 1h'.")}
-
+
- + + ${isNoAgent ? `
No-agent mode runs the configured script directly; Prompt is unused. No-agent script: ${esc(script || '—')}
` : ''}
@@ -825,12 +834,14 @@ async function saveCronForm(){ const prompt=promptEl.value.trim(); const deliver=delivEl?delivEl.value:'local'; const profile=profileEl?profileEl.value:''; + const isNoAgent = !!(_currentCronDetail && _currentCronDetail.no_agent); errEl.style.display='none'; if(!schedule){errEl.textContent=t('cron_schedule_required_example');errEl.style.display='';return;} - if(!prompt){errEl.textContent=t('cron_prompt_required');errEl.style.display='';return;} + if(!isNoAgent && !prompt){errEl.textContent=t('cron_prompt_required');errEl.style.display='';return;} try{ if (_editingCronId) { - const updates = {job_id: _editingCronId, schedule, prompt, profile: profile}; + const updates = {job_id: _editingCronId, schedule, profile: profile}; + if (!isNoAgent) updates.prompt = prompt; if (name) updates.name = name; await api('/api/crons/update', {method:'POST', body: JSON.stringify(updates)}); const editedId = _editingCronId; diff --git a/tests/test_cron_no_agent_edit.py b/tests/test_cron_no_agent_edit.py new file mode 100644 index 00000000..a77a3590 --- /dev/null +++ b/tests/test_cron_no_agent_edit.py @@ -0,0 +1,71 @@ +"""Regression coverage for issue #1820: no-agent cron edits do not require prompts.""" + +from __future__ import annotations + +import re +from pathlib import Path + +ROOT = Path(__file__).resolve().parents[1] +PANELS_JS = (ROOT / "static" / "panels.js").read_text() + + +def _function_body(name: str) -> str: + marker = f"function {name}(" + start = PANELS_JS.find(marker) + assert start != -1, f"{name} not found" + paren = PANELS_JS.find("(", start) + assert paren != -1, f"{name} params not found" + depth = 0 + for idx in range(paren, len(PANELS_JS)): + ch = PANELS_JS[idx] + if ch == "(": + depth += 1 + elif ch == ")": + depth -= 1 + if depth == 0: + brace = PANELS_JS.find("{", idx) + break + else: + raise AssertionError(f"{name} params did not terminate") + assert brace != -1, f"{name} body not found" + depth = 0 + for idx in range(brace, len(PANELS_JS)): + ch = PANELS_JS[idx] + if ch == "{": + depth += 1 + elif ch == "}": + depth -= 1 + if depth == 0: + return PANELS_JS[brace + 1 : idx] + raise AssertionError(f"{name} body did not terminate") + + +def test_open_cron_edit_plumbs_no_agent_and_script_to_form(): + body = _function_body("openCronEdit") + assert "no_agent: !!job.no_agent" in body + assert "script: job.script || ''" in body + + +def test_no_agent_form_drops_prompt_required_attribute_and_shows_script_context(): + body = _function_body("_renderCronForm") + assert "no_agent" in body and "script" in body + assert "const isNoAgent = !!no_agent;" in body + assert "cron-no-agent-hint" in body + assert "No-agent script" in body + assert "${isNoAgent ? ' disabled' : ' required'}" in body + + +def test_save_cron_form_keeps_agent_prompt_required_but_skips_no_agent_edits(): + body = _function_body("saveCronForm") + assert "const isNoAgent = !!(_currentCronDetail && _currentCronDetail.no_agent);" in body + assert "if(!isNoAgent && !prompt)" in body + assert "cron_prompt_required" in body + assert "if (!isNoAgent) updates.prompt = prompt;" in body + + +def test_no_agent_detail_displays_mode_and_script(): + body = _function_body("_renderCronDetail") + assert "const isNoAgent = !!job.no_agent;" in body + assert "No-agent script" in body + assert "cronJobMode" in body + assert "job.script" in body