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>
The stolen native sessionRow glyph rendered as three dots before run titles; drop that slot so directory leaves are title-only.
Co-authored-by: Cursor <cursoragent@cursor.com>
Drop the leading-dot decoration and indent child folders/sessions with padding so user → job → run reads like a real folder hierarchy.
Co-authored-by: Cursor <cursoragent@cursor.com>
User folders stay top-level; nested jobs and run sessions indent with ··· leads so the hierarchy matches workspace session rows.
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>
Expanded job history called sessionIcon() which was never declared, crashing JobList whenever a run row rendered.
Co-authored-by: Cursor <cursoragent@cursor.com>
CwdField required viewer.canViewAll but JobEditor never received the prop, so opening cron mode threw ReferenceError and blanked the UI.
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>
UDS_FALLBACK_USER is HttpOnly so the client never saw it; also accept UDS_FALLBACK_UI and data-uds-logged-in.
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.