Resume only unpauses; listeners need a native way to re-fire the same job id with a new run without creating duplicate executors.
Co-authored-by: Cursor <cursoragent@cursor.com>
cron_runs entered/exited were identical because settleRun rewrote stateEnteredAt and actualAt to the finish instant.
Co-authored-by: Cursor <cursoragent@cursor.com>
labels schemas used additionalProperties:{type:string}, which assertSupportedJsonSchema rejects and aborted the whole tools.register batch.
Co-authored-by: Cursor <cursoragent@cursor.com>
Surface lifecycle badges and editable monitor fields in the UI, and POST terminal runs to persist_history archive endpoints on settle/tick.
Co-authored-by: Cursor <cursoragent@cursor.com>
Extend jobs with lifecycle projection and history policies so listeners can poll state at scale without breaking existing cron_* flows.
Co-authored-by: Cursor <cursoragent@cursor.com>
Wire API/delivery/tool strings through lib/i18n.js, and make the sidebar use ctx.locale.bind plus locale/change so English host preference no longer stays frozen on Chinese.
Co-authored-by: Cursor <cursoragent@cursor.com>
Default mirrorToSession to false so cron summaries stay in run history unless the sidebar checkbox or mirror_to_session is enabled.
Co-authored-by: Cursor <cursoragent@cursor.com>
Without udsAuth, trusted HTTP uses a synthetic __local__ viewer that sees all jobs; with uds-auth, keep multi-user empNo isolation and admin folders. Document that IM channels are not default UDS accounts.
Co-authored-by: Cursor <cursoragent@cursor.com>
Unassigned jobs are visible only to super_admin / fallback_admin (canViewAll). Regular users still reclaim jobs proven by session owner or their user-workspaces cwd.
Co-authored-by: Cursor <cursoragent@cursor.com>
DOM cron mode and React overlay could desync so the right pane stayed on the workspace chat; unassigned legacy jobs were also filtered out for normal users. Re-sync mode from the sidebar attribute and adopt/show reclaimable orphans again.
Co-authored-by: Cursor <cursoragent@cursor.com>
Tool creates often left ownerEmpNo unassigned so the sidebar hid them while runs still fired; infer identity from session/cwd, claim legacy orphans on list, and keep cron rows visible without leaking run sessions into the workspace list.
Co-authored-by: Cursor <cursoragent@cursor.com>
Super/fallback admins see all jobs grouped by user folder; admin/user only see their own. Stamp ownership on create, filter HTTP/tools, and prefer the owner's provisioned cwd on fire.
Co-authored-by: Cursor <cursoragent@cursor.com>
List/run/pause/resume/delete now return 401 without UDS cookies; hide sidebar chrome when logged out. uds-auth still validates the session store on the same routes.
Co-authored-by: Cursor <cursoragent@cursor.com>
Scope list/pause/delete to the calling chat, bind IM delivery to that peer, ignore client job ids, require trusted Host for GETs, and wrap mirrored summaries as system reminders.
Co-authored-by: Cursor <cursoragent@cursor.com>
Pin origin at create time, keep isolated fire sessions for audit, and after IM/DSH delivery resume or open the origin chat to append the same summary for follow-ups.
Co-authored-by: Cursor <cursoragent@cursor.com>
Cron jobs created from WhatsApp can omit bot/target ids and reuse chat overrides; sidebar/agent preset pins persist on fire.
Co-authored-by: Cursor <cursoragent@cursor.com>
Agent cron_* jobs default to IM when created from a WhatsApp session with a matching delivery target; otherwise DSH sidebar sessions. Fire path soft-calls ctx.dshIm.send for summaries.
Co-authored-by: Cursor <cursoragent@cursor.com>
Expanding used to replay a fade-in and sometimes remount CronApp onto an
empty state before /jobs returned. Reattach the existing root and skip
setState when the snapshot has not changed.
The overlay used a measured left offset that sampled width in steps during
the frame's grid-template-columns transition, which stuttered and flashed
the chat behind it.
New jobs snapshot the current New Session default so quota is predictable.
cron_create inherits the calling session model unless provider+model are set.
The editor lists configured models; the job row shows which model will run.