mirror of
https://github.com/NanmiCoder/cc-haha
synced 2026-07-16 13:03:31 +08:00
- Add 7 frequency modes (every N min/hours, daily, weekdays, specific days, monthly, custom cron) with progressive disclosure UI - Add "Run Now" button with confirmation popover and fire-and-forget API - Add execution logs panel (TaskRunsPanel) with auto-polling and accordion behavior - Add task edit mode with cron reverse-parsing (parseCron) to populate form - Add server-side extractAssistantText to store meaningful AI responses instead of raw NDJSON - Fix session linking: pass --session-id to CLI subprocess so "View conversation" navigates to actual content - Fix MACRO undefined error by adding --preload to Bun.spawn - Add confirmation popovers for all destructive actions (run/disable/delete) - Add DayOfWeekPicker component for specific-days scheduling - Add cronDescribe utility with i18n support and unit tests - Display task creation time and last run time - Add ~50 i18n keys (en/zh) for all new UI elements Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
37 lines
984 B
TypeScript
37 lines
984 B
TypeScript
import { api } from './client'
|
|
import type { CronTask, CreateTaskInput, TaskRun } from '../types/task'
|
|
|
|
type TasksResponse = { tasks: CronTask[] }
|
|
type TaskResponse = { task: CronTask }
|
|
type RunsResponse = { runs: TaskRun[] }
|
|
|
|
export const tasksApi = {
|
|
list() {
|
|
return api.get<TasksResponse>('/api/scheduled-tasks')
|
|
},
|
|
|
|
create(input: CreateTaskInput) {
|
|
return api.post<TaskResponse>('/api/scheduled-tasks', input)
|
|
},
|
|
|
|
update(id: string, updates: Partial<CronTask>) {
|
|
return api.put<TaskResponse>(`/api/scheduled-tasks/${id}`, updates)
|
|
},
|
|
|
|
delete(id: string) {
|
|
return api.delete<{ ok: true }>(`/api/scheduled-tasks/${id}`)
|
|
},
|
|
|
|
runTask(id: string) {
|
|
return api.post<{ ok: true }>(`/api/scheduled-tasks/${id}/run`, {})
|
|
},
|
|
|
|
getRecentRuns(limit = 50) {
|
|
return api.get<RunsResponse>(`/api/scheduled-tasks/runs?limit=${limit}`)
|
|
},
|
|
|
|
getTaskRuns(taskId: string) {
|
|
return api.get<RunsResponse>(`/api/scheduled-tasks/${taskId}/runs`)
|
|
},
|
|
}
|