import type { JobDefinition } from '@synthetiq/workflows';
export const dailySummary: JobDefinition = {
name: "Daily Task Summary",
description: "Aggregate task metrics, generate an AI summary, and post to Slack",
variables: {
appId: { type: "param" },
},
steps: [
{
importFromDatabase: {
appId: "{{var.appId}}",
tableName: "Task",
columns: ["id", "status", "createdAt"],
},
outputTable: "tasks",
},
{
sql: `
SELECT
COUNT(*) AS totalTasks,
SUM(CASE WHEN status = 'completed' THEN 1 ELSE 0 END) AS completedTasks,
SUM(CASE WHEN status = 'active' THEN 1 ELSE 0 END) AS activeTasks
FROM tasks
`,
outputTable: "summary",
},
{
service: "anthropic",
operation: "streamMessage",
forEach: { source: "summary" },
params: {
model: "claude-sonnet-4-20250514",
max_tokens: 256,
messages: [
{
role: "user",
content: "Write a brief daily task summary for a team Slack channel. Total tasks: {{item.totalTasks}}, completed: {{item.completedTasks}}, active: {{item.activeTasks}}. Keep it concise and friendly.",
},
],
},
outputTable: "aiSummary",
outputSchema: {
text: "VARCHAR",
},
},
{
service: "slack",
operation: "sendMessage",
forEach: { source: "aiSummary" },
params: {
channel: "#task-updates",
text: "{{item.text}}",
},
outputTable: "slackResult",
outputSchema: {
ok: "BOOLEAN",
ts: "VARCHAR",
},
},
],
};