feat: dashboard Second Brain, essai 7 jours et vérification e-mail
Rendre le dashboard actionnable (inbox, peek, carte mentale), aligner la facturation sur l’essai 7 jours, et bloquer le login e-mail tant que l’adresse n’est pas confirmée. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -179,7 +179,6 @@ export const getNotesSchema = z.object({
|
||||
notebookId: idSchema.optional().nullable(),
|
||||
fullDetails: boolSchema(false),
|
||||
limit: z.number().int().min(1).max(500).default(100),
|
||||
offset: z.number().int().min(0).default(0),
|
||||
});
|
||||
|
||||
/**
|
||||
@@ -225,7 +224,6 @@ export const deleteNoteSchema = z.object({
|
||||
*/
|
||||
export const searchNotesSchema = z.object({
|
||||
query: z.string().min(1).max(500),
|
||||
limit: z.number().int().min(1).max(100).default(50),
|
||||
notebookId: idSchema.optional().nullable(),
|
||||
includeArchived: boolSchema(false),
|
||||
});
|
||||
@@ -243,7 +241,6 @@ export const moveNoteSchema = z.object({
|
||||
*/
|
||||
export const togglePinSchema = z.object({
|
||||
id: idSchema,
|
||||
pinned: z.boolean().optional(),
|
||||
});
|
||||
|
||||
/**
|
||||
@@ -251,14 +248,13 @@ export const togglePinSchema = z.object({
|
||||
*/
|
||||
export const toggleArchiveSchema = z.object({
|
||||
id: idSchema,
|
||||
archived: z.boolean().optional(),
|
||||
});
|
||||
|
||||
/**
|
||||
* batch_move_notes input schema
|
||||
*/
|
||||
export const batchMoveNotesSchema = z.object({
|
||||
noteIds: z.array(idSchema).min(1).max(100),
|
||||
ids: z.array(idSchema).min(1).max(100),
|
||||
notebookId: idSchema.optional().nullable(),
|
||||
});
|
||||
|
||||
@@ -266,7 +262,7 @@ export const batchMoveNotesSchema = z.object({
|
||||
* batch_delete_notes input schema
|
||||
*/
|
||||
export const batchDeleteNotesSchema = z.object({
|
||||
noteIds: z.array(idSchema).min(1).max(100),
|
||||
ids: z.array(idSchema).min(1).max(100),
|
||||
});
|
||||
|
||||
/**
|
||||
@@ -274,18 +270,16 @@ export const batchDeleteNotesSchema = z.object({
|
||||
*/
|
||||
export const createNotebookSchema = z.object({
|
||||
name: z.string().min(1).max(200),
|
||||
color: colorSchema.default('default'),
|
||||
color: z.string().max(50).default('#3B82F6'),
|
||||
icon: z.string().max(50).optional().nullable(),
|
||||
parentId: idSchema.optional().nullable(),
|
||||
order: z.number().int().optional(),
|
||||
});
|
||||
|
||||
/**
|
||||
* get_notebooks input schema
|
||||
*/
|
||||
export const getNotebooksSchema = z.object({
|
||||
includeHierarchy: boolSchema(false),
|
||||
includeTrashed: boolSchema(false),
|
||||
});
|
||||
export const getNotebooksSchema = z.object({});
|
||||
|
||||
/**
|
||||
* get_notebook input schema
|
||||
@@ -300,8 +294,9 @@ export const getNotebookSchema = z.object({
|
||||
export const updateNotebookSchema = z.object({
|
||||
id: idSchema,
|
||||
name: z.string().min(1).max(200).optional(),
|
||||
color: colorSchema.optional(),
|
||||
color: z.string().max(50).optional().nullable(),
|
||||
icon: z.string().max(50).optional().nullable(),
|
||||
order: z.number().int().optional(),
|
||||
parentId: idSchema.optional().nullable(),
|
||||
});
|
||||
|
||||
@@ -332,14 +327,15 @@ export const getNotebookHierarchySchema = z.object({
|
||||
*/
|
||||
export const createLabelSchema = z.object({
|
||||
name: z.string().min(1).max(100),
|
||||
color: colorSchema.default('default'),
|
||||
color: z.string().max(50).optional().nullable(),
|
||||
notebookId: idSchema,
|
||||
});
|
||||
|
||||
/**
|
||||
* get_labels input schema
|
||||
*/
|
||||
export const getLabelsSchema = z.object({
|
||||
limit: z.number().int().min(1).max(500).default(100),
|
||||
notebookId: idSchema.optional().nullable(),
|
||||
});
|
||||
|
||||
/**
|
||||
@@ -361,37 +357,90 @@ export const deleteLabelSchema = z.object({
|
||||
/**
|
||||
* get_due_reminders input schema
|
||||
*/
|
||||
export const getDueRemindersSchema = z.object({
|
||||
before: isoDateSchema.optional().nullable(),
|
||||
after: isoDateSchema.optional().nullable(),
|
||||
includeDone: boolSchema(false),
|
||||
limit: z.number().int().min(1).max(500).default(100),
|
||||
});
|
||||
export const getDueRemindersSchema = z.object({});
|
||||
|
||||
/**
|
||||
* export_notes input schema
|
||||
*/
|
||||
export const exportNotesSchema = z.object({
|
||||
notebookId: idSchema.optional().nullable(),
|
||||
includeArchived: boolSchema(false),
|
||||
format: z.enum(['json', 'markdown']).default('json'),
|
||||
});
|
||||
export const exportNotesSchema = z.object({});
|
||||
|
||||
/**
|
||||
* import_notes input schema
|
||||
*/
|
||||
export const importNotesSchema = z.object({
|
||||
notes: z.array(
|
||||
z.object({
|
||||
title: z.string().optional(),
|
||||
content: z.string(),
|
||||
color: colorSchema.optional(),
|
||||
labels: labelsSchema,
|
||||
notebookId: idSchema.optional().nullable(),
|
||||
})
|
||||
).min(1).max(100),
|
||||
data: z.object({
|
||||
version: z.string().optional(),
|
||||
data: z.object({
|
||||
notes: z.array(z.any()).optional(),
|
||||
labels: z.array(z.any()).optional(),
|
||||
notebooks: z.array(z.any()).optional(),
|
||||
}).optional(),
|
||||
}),
|
||||
});
|
||||
|
||||
/**
|
||||
* find_similar_notes input schema
|
||||
*/
|
||||
export const findSimilarNotesSchema = z.object({
|
||||
id: idSchema,
|
||||
limit: z.number().int().min(1).max(50).default(10),
|
||||
threshold: z.number().min(0).max(1).default(0.7),
|
||||
});
|
||||
|
||||
/**
|
||||
* get_memory_echo_insights input schema
|
||||
*/
|
||||
export const getMemoryEchoInsightsSchema = z.object({
|
||||
includeViewed: boolSchema(false),
|
||||
includeDismissed: boolSchema(false),
|
||||
limit: z.number().int().min(1).max(100).default(20),
|
||||
});
|
||||
|
||||
/**
|
||||
* dismiss_memory_echo_insight input schema
|
||||
*/
|
||||
export const dismissMemoryEchoInsightSchema = z.object({
|
||||
id: idSchema,
|
||||
viewed: boolSchema(true),
|
||||
dismissed: boolSchema(true),
|
||||
});
|
||||
|
||||
/**
|
||||
* get_notes_by_label input schema
|
||||
*/
|
||||
export const getNotesByLabelSchema = z.object({
|
||||
label: z.string().min(1).max(100),
|
||||
notebookId: idSchema.optional().nullable(),
|
||||
overwrite: z.boolean().optional().default(false),
|
||||
includeArchived: boolSchema(false),
|
||||
limit: z.number().int().min(1).max(500).default(100),
|
||||
});
|
||||
|
||||
/**
|
||||
* get_note_statistics input schema
|
||||
*/
|
||||
export const getNoteStatisticsSchema = z.object({
|
||||
includeArchived: boolSchema(false),
|
||||
includeTrashed: boolSchema(false),
|
||||
});
|
||||
|
||||
/**
|
||||
* get_upcoming_reminders input schema
|
||||
*/
|
||||
export const getUpcomingRemindersSchema = z.object({
|
||||
hours: z.number().int().min(1).max(168).default(24),
|
||||
includeDone: boolSchema(false),
|
||||
limit: z.number().int().min(1).max(500).default(100),
|
||||
});
|
||||
|
||||
/**
|
||||
* update_reminder input schema
|
||||
*/
|
||||
export const updateReminderSchema = z.object({
|
||||
id: idSchema,
|
||||
reminder: isoDateSchema,
|
||||
isReminderDone: z.boolean().optional(),
|
||||
reminderRecurrence: recurrenceSchema,
|
||||
reminderLocation: z.string().max(500).optional().nullable(),
|
||||
});
|
||||
|
||||
// ═══════════════════════════════════════════════════════════════
|
||||
@@ -427,6 +476,13 @@ export const toolSchemas = {
|
||||
get_due_reminders: getDueRemindersSchema,
|
||||
export_notes: exportNotesSchema,
|
||||
import_notes: importNotesSchema,
|
||||
find_similar_notes: findSimilarNotesSchema,
|
||||
get_memory_echo_insights: getMemoryEchoInsightsSchema,
|
||||
dismiss_memory_echo_insight: dismissMemoryEchoInsightSchema,
|
||||
get_notes_by_label: getNotesByLabelSchema,
|
||||
get_note_statistics: getNoteStatisticsSchema,
|
||||
get_upcoming_reminders: getUpcomingRemindersSchema,
|
||||
update_reminder: updateReminderSchema,
|
||||
};
|
||||
|
||||
// ═══════════════════════════════════════════════════════════════
|
||||
@@ -457,7 +513,7 @@ export function validateToolInput(toolName, input) {
|
||||
if (error instanceof z.ZodError) {
|
||||
return {
|
||||
success: false,
|
||||
errors: error.errors.map((e) => ({
|
||||
errors: error.issues.map((e) => ({
|
||||
field: e.path.join('.'),
|
||||
message: e.message,
|
||||
code: e.code,
|
||||
|
||||
Reference in New Issue
Block a user