| 856 | * Serialize job metadata for VFS jobs/{id}/meta.json |
| 857 | */ |
| 858 | export function serializeJobMeta(job: { |
| 859 | id: string |
| 860 | title: string | null |
| 861 | prompt: string |
| 862 | cronExpression: string | null |
| 863 | timezone: string | null |
| 864 | status: string |
| 865 | lifecycle: string |
| 866 | successCondition: string | null |
| 867 | maxRuns: number | null |
| 868 | runCount: number |
| 869 | nextRunAt: Date | null |
| 870 | lastRanAt: Date | null |
| 871 | sourceTaskName: string | null |
| 872 | sourceChatId: string | null |
| 873 | createdAt: Date |
| 874 | }): string { |
| 875 | return JSON.stringify( |
| 876 | { |
| 877 | id: job.id, |
| 878 | title: job.title || undefined, |
| 879 | prompt: job.prompt, |
| 880 | cronExpression: job.cronExpression || undefined, |
| 881 | timezone: job.timezone || 'UTC', |
| 882 | status: job.status, |
| 883 | lifecycle: job.lifecycle, |
| 884 | successCondition: job.successCondition || undefined, |
| 885 | maxRuns: job.maxRuns ?? undefined, |
| 886 | runCount: job.runCount, |
| 887 | nextRunAt: job.nextRunAt?.toISOString(), |
| 888 | lastRanAt: job.lastRanAt?.toISOString(), |
| 889 | sourceTaskName: job.sourceTaskName || undefined, |
| 890 | sourceChatId: job.sourceChatId || undefined, |
| 891 | createdAt: job.createdAt.toISOString(), |
| 892 | }, |
| 893 | null, |
| 894 | 2 |
| 895 | ) |
| 896 | } |
| 897 | |
| 898 | export function serializeTaskSession(task: { |
| 899 | id: string |