import { z } from 'zod';
import { LimitlessClient } from '../../lib/limitless-client.js';
import { Tool } from '@modelcontextprotocol/sdk/types.js';
export const getDailySummarySchema = z.object({
date: z.string().describe('Date to get summary for (YYYY-MM-DD format)'),
timezone: z.string().optional().describe('Timezone for the date (e.g., "America/New_York")'),
includeActionItems: z.boolean().optional().describe('Include action items in summary'),
includeKeyTopics: z.boolean().optional().describe('Include key topics discussed'),
includeHighlights: z.boolean().optional().describe('Include important highlights'),
});
export type GetDailySummaryParams = z.infer<typeof getDailySummarySchema>;
export interface DailySummary {
date: string;
totalDuration: number;
lifelogCount: number;
summary: string;
keyTopics?: string[];
actionItems?: string[];
highlights?: Array<{
time: string;
content: string;
lifelogId: string;
}>;
sources: Array<{
source: string;
count: number;
duration: number;
}>;
}
export const getDailySummaryTool: Tool = {
name: 'limitless_get_daily_summary',
description: 'Get an AI-generated summary of all activities for a specific day',
inputSchema: {
type: 'object',
properties: {
date: { type: 'string', description: 'Date to get summary for (YYYY-MM-DD format)' },
timezone: { type: 'string', description: 'Timezone for the date (e.g., "America/New_York")' },
includeActionItems: { type: 'boolean', description: 'Include action items in summary' },
includeKeyTopics: { type: 'boolean', description: 'Include key topics discussed' },
includeHighlights: { type: 'boolean', description: 'Include important highlights' },
},
required: ['date'],
},
};
export async function getDailySummary(params: GetDailySummaryParams, client: LimitlessClient): Promise<DailySummary> {
const queryParams: any = {
date: params.date,
};
if (params.timezone) queryParams.timezone = params.timezone;
if (params.includeActionItems !== undefined) queryParams.includeActionItems = params.includeActionItems;
if (params.includeKeyTopics !== undefined) queryParams.includeKeyTopics = params.includeKeyTopics;
if (params.includeHighlights !== undefined) queryParams.includeHighlights = params.includeHighlights;
return await client.get<DailySummary>('/lifelogs/summary/daily', queryParams);
}