diff --git a/packages/app/src/app/app.tsx b/packages/app/src/app/app.tsx index 52e85afb..cb6aff60 100644 --- a/packages/app/src/app/app.tsx +++ b/packages/app/src/app/app.tsx @@ -2695,6 +2695,8 @@ export default function App() { return openworkServerStatus() === "connected" && Boolean(client && workspaceId); }); + const schedulerPluginInstalled = createMemo(() => isPluginInstalledByName("opencode-scheduler")); + const refreshScheduledJobs = async (options?: { force?: boolean }) => { if (scheduledJobsBusy() && !options?.force) return; @@ -2742,6 +2744,12 @@ export default function App() { return; } + if (!schedulerPluginInstalled()) { + setScheduledJobs([]); + setScheduledJobsStatus(null); + return; + } + setScheduledJobsBusy(true); setScheduledJobsStatus(null); @@ -4801,6 +4809,7 @@ export default function App() { scheduledJobs: scheduledJobs(), scheduledJobsSource: scheduledJobsSource(), scheduledJobsSourceReady: scheduledJobsSourceReady(), + schedulerPluginInstalled: schedulerPluginInstalled(), scheduledJobsStatus: scheduledJobsStatus(), scheduledJobsBusy: scheduledJobsBusy(), scheduledJobsUpdatedAt: scheduledJobsUpdatedAt(), diff --git a/packages/app/src/app/pages/dashboard.tsx b/packages/app/src/app/pages/dashboard.tsx index 42289600..c8823df0 100644 --- a/packages/app/src/app/pages/dashboard.tsx +++ b/packages/app/src/app/pages/dashboard.tsx @@ -138,6 +138,7 @@ export type DashboardViewProps = { scheduledJobs: ScheduledJob[]; scheduledJobsSource: "local" | "remote"; scheduledJobsSourceReady: boolean; + schedulerPluginInstalled: boolean; scheduledJobsStatus: string | null; scheduledJobsBusy: boolean; scheduledJobsUpdatedAt: number | null; @@ -1289,6 +1290,12 @@ export default function DashboardView(props: DashboardViewProps) { createSessionAndOpen={props.createSessionAndOpen} setPrompt={props.setPrompt} newTaskDisabled={props.newTaskDisabled} + schedulerInstalled={props.schedulerPluginInstalled} + canEditPlugins={props.canEditPlugins} + addPlugin={props.addPlugin} + reloadWorkspaceEngine={props.reloadWorkspaceEngine} + reloadBusy={props.reloadBusy} + canReloadWorkspace={props.canReloadWorkspace} /> diff --git a/packages/app/src/app/pages/scheduled.tsx b/packages/app/src/app/pages/scheduled.tsx index b2d9b272..a507ea01 100644 --- a/packages/app/src/app/pages/scheduled.tsx +++ b/packages/app/src/app/pages/scheduled.tsx @@ -14,6 +14,7 @@ import { MessageSquare, Plus, Play, + PlugZap, RefreshCw, Terminal, Trash2, @@ -36,6 +37,12 @@ export type ScheduledTasksViewProps = { createSessionAndOpen: () => void; setPrompt: (value: string) => void; newTaskDisabled: boolean; + schedulerInstalled: boolean; + canEditPlugins: boolean; + addPlugin: (pluginNameOverride?: string) => void; + reloadWorkspaceEngine: () => Promise; + reloadBusy: boolean; + canReloadWorkspace: boolean; }; const toRelative = (value?: string | null) => { @@ -351,9 +358,9 @@ const AutomationJobCard = (props: { + + + + + + +
{supportNote()} @@ -671,7 +754,7 @@ export default function ScheduledTasksView(props: ScheduledTasksViewProps) { 0} fallback={ -
+
No automations yet. Pick a template or create your own automation prompt.
@@ -683,7 +766,7 @@ export default function ScheduledTasksView(props: ScheduledTasksViewProps) { description={card.description} tone={card.tone} onClick={() => openCreateModalFromTemplate(card)} - disabled={props.newTaskDisabled} + disabled={automationDisabled()} /> )} @@ -698,7 +781,7 @@ export default function ScheduledTasksView(props: ScheduledTasksViewProps) {
} > -
+
{(job) => (