@lyrra/mcp-server 1.0.1 → 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (87) hide show
  1. package/Dockerfile +16 -0
  2. package/README.md +95 -16
  3. package/dist/client.d.ts +7 -1
  4. package/dist/client.d.ts.map +1 -1
  5. package/dist/client.js +5 -5
  6. package/dist/client.js.map +1 -1
  7. package/dist/config.d.ts +1 -0
  8. package/dist/config.d.ts.map +1 -1
  9. package/dist/config.js +1 -0
  10. package/dist/config.js.map +1 -1
  11. package/dist/http-server.d.ts +8 -0
  12. package/dist/http-server.d.ts.map +1 -0
  13. package/dist/http-server.js +466 -0
  14. package/dist/http-server.js.map +1 -0
  15. package/dist/index.js +3 -69
  16. package/dist/index.js.map +1 -1
  17. package/dist/server-factory.d.ts +8 -0
  18. package/dist/server-factory.d.ts.map +1 -0
  19. package/dist/server-factory.js +82 -0
  20. package/dist/server-factory.js.map +1 -0
  21. package/dist/tools/admin.d.ts +132 -0
  22. package/dist/tools/admin.d.ts.map +1 -1
  23. package/dist/tools/admin.js +105 -101
  24. package/dist/tools/admin.js.map +1 -1
  25. package/dist/tools/ai-designer.d.ts +148 -0
  26. package/dist/tools/ai-designer.d.ts.map +1 -1
  27. package/dist/tools/ai-designer.js +80 -76
  28. package/dist/tools/ai-designer.js.map +1 -1
  29. package/dist/tools/analytics.d.ts +47 -0
  30. package/dist/tools/analytics.d.ts.map +1 -1
  31. package/dist/tools/analytics.js +38 -34
  32. package/dist/tools/analytics.js.map +1 -1
  33. package/dist/tools/auth.d.ts +30 -0
  34. package/dist/tools/auth.d.ts.map +1 -1
  35. package/dist/tools/auth.js +31 -27
  36. package/dist/tools/auth.js.map +1 -1
  37. package/dist/tools/blocks.d.ts +200 -0
  38. package/dist/tools/blocks.d.ts.map +1 -1
  39. package/dist/tools/blocks.js +154 -150
  40. package/dist/tools/blocks.js.map +1 -1
  41. package/dist/tools/connections.d.ts +86 -0
  42. package/dist/tools/connections.d.ts.map +1 -1
  43. package/dist/tools/connections.js +70 -66
  44. package/dist/tools/connections.js.map +1 -1
  45. package/dist/tools/eduflow.d.ts +223 -0
  46. package/dist/tools/eduflow.d.ts.map +1 -1
  47. package/dist/tools/eduflow.js +114 -93
  48. package/dist/tools/eduflow.js.map +1 -1
  49. package/dist/tools/participants.d.ts +110 -0
  50. package/dist/tools/participants.d.ts.map +1 -1
  51. package/dist/tools/participants.js +62 -58
  52. package/dist/tools/participants.js.map +1 -1
  53. package/dist/tools/presentation.d.ts +116 -0
  54. package/dist/tools/presentation.d.ts.map +1 -1
  55. package/dist/tools/presentation.js +51 -47
  56. package/dist/tools/presentation.js.map +1 -1
  57. package/dist/tools/projects.d.ts +65 -0
  58. package/dist/tools/projects.d.ts.map +1 -1
  59. package/dist/tools/projects.js +48 -44
  60. package/dist/tools/projects.js.map +1 -1
  61. package/dist/tools/resources.d.ts +46 -0
  62. package/dist/tools/resources.d.ts.map +1 -1
  63. package/dist/tools/resources.js +32 -28
  64. package/dist/tools/resources.js.map +1 -1
  65. package/dist/tools/store.d.ts +62 -0
  66. package/dist/tools/store.d.ts.map +1 -1
  67. package/dist/tools/store.js +59 -55
  68. package/dist/tools/store.js.map +1 -1
  69. package/mcp-config.example.json +4 -5
  70. package/package.json +7 -2
  71. package/src/client.ts +12 -5
  72. package/src/config.ts +1 -0
  73. package/src/http-server.ts +573 -0
  74. package/src/index.ts +3 -94
  75. package/src/server-factory.ts +109 -0
  76. package/src/tools/admin.ts +20 -14
  77. package/src/tools/ai-designer.ts +16 -10
  78. package/src/tools/analytics.ts +13 -7
  79. package/src/tools/auth.ts +32 -26
  80. package/src/tools/blocks.ts +18 -12
  81. package/src/tools/connections.ts +14 -8
  82. package/src/tools/eduflow.ts +36 -12
  83. package/src/tools/participants.ts +15 -9
  84. package/src/tools/presentation.ts +12 -6
  85. package/src/tools/projects.ts +14 -8
  86. package/src/tools/resources.ts +12 -6
  87. package/src/tools/store.ts +14 -8
@@ -1,4 +1,204 @@
1
1
  import { z } from 'zod';
2
+ import { LyrraClient } from '../client.js';
3
+ export declare function createBlocksTools(c: LyrraClient): {
4
+ block_list_types: {
5
+ description: string;
6
+ inputSchema: z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>;
7
+ handler: () => Promise<{
8
+ types: {
9
+ type: string;
10
+ name: string;
11
+ description: string;
12
+ }[];
13
+ }>;
14
+ };
15
+ block_get: {
16
+ description: string;
17
+ inputSchema: z.ZodObject<{
18
+ flowId: z.ZodString;
19
+ blockId: z.ZodString;
20
+ }, "strip", z.ZodTypeAny, {
21
+ flowId: string;
22
+ blockId: string;
23
+ }, {
24
+ flowId: string;
25
+ blockId: string;
26
+ }>;
27
+ handler: ({ flowId, blockId }: {
28
+ flowId: string;
29
+ blockId: string;
30
+ }) => Promise<any>;
31
+ };
32
+ block_create: {
33
+ description: string;
34
+ inputSchema: z.ZodObject<{
35
+ flowId: z.ZodString;
36
+ type: z.ZodEnum<["text", "audio", "quiz", "video", "pdf", "image", "loop", "evaluation", "split", "merge", "timer", "start", "end", "chart", "timeline", "dys_reader", "dys_image_zones", "dys_reading_practice", "dys_clock", "glossary", "subflow", "mindmap", "form", "certification", "email", "voice_assessment", "presentation", "browser", "self_assessment"]>;
37
+ title: z.ZodString;
38
+ content: z.ZodRecord<z.ZodString, z.ZodAny>;
39
+ positionX: z.ZodOptional<z.ZodNumber>;
40
+ positionY: z.ZodOptional<z.ZodNumber>;
41
+ order: z.ZodOptional<z.ZodNumber>;
42
+ }, "strip", z.ZodTypeAny, {
43
+ type: "email" | "text" | "audio" | "quiz" | "video" | "pdf" | "image" | "loop" | "evaluation" | "split" | "merge" | "timer" | "start" | "end" | "chart" | "timeline" | "dys_reader" | "dys_image_zones" | "dys_reading_practice" | "dys_clock" | "glossary" | "subflow" | "mindmap" | "form" | "certification" | "voice_assessment" | "presentation" | "browser" | "self_assessment";
44
+ flowId: string;
45
+ title: string;
46
+ content: Record<string, any>;
47
+ positionX?: number | undefined;
48
+ positionY?: number | undefined;
49
+ order?: number | undefined;
50
+ }, {
51
+ type: "email" | "text" | "audio" | "quiz" | "video" | "pdf" | "image" | "loop" | "evaluation" | "split" | "merge" | "timer" | "start" | "end" | "chart" | "timeline" | "dys_reader" | "dys_image_zones" | "dys_reading_practice" | "dys_clock" | "glossary" | "subflow" | "mindmap" | "form" | "certification" | "voice_assessment" | "presentation" | "browser" | "self_assessment";
52
+ flowId: string;
53
+ title: string;
54
+ content: Record<string, any>;
55
+ positionX?: number | undefined;
56
+ positionY?: number | undefined;
57
+ order?: number | undefined;
58
+ }>;
59
+ handler: ({ flowId, ...blockData }: any) => Promise<{
60
+ success: boolean;
61
+ block: any;
62
+ }>;
63
+ };
64
+ block_update: {
65
+ description: string;
66
+ inputSchema: z.ZodObject<{
67
+ flowId: z.ZodString;
68
+ blockId: z.ZodString;
69
+ title: z.ZodOptional<z.ZodString>;
70
+ content: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodAny>>;
71
+ positionX: z.ZodOptional<z.ZodNumber>;
72
+ positionY: z.ZodOptional<z.ZodNumber>;
73
+ order: z.ZodOptional<z.ZodNumber>;
74
+ conditions: z.ZodOptional<z.ZodAny>;
75
+ comment: z.ZodOptional<z.ZodString>;
76
+ }, "strip", z.ZodTypeAny, {
77
+ flowId: string;
78
+ blockId: string;
79
+ title?: string | undefined;
80
+ content?: Record<string, any> | undefined;
81
+ positionX?: number | undefined;
82
+ positionY?: number | undefined;
83
+ order?: number | undefined;
84
+ conditions?: any;
85
+ comment?: string | undefined;
86
+ }, {
87
+ flowId: string;
88
+ blockId: string;
89
+ title?: string | undefined;
90
+ content?: Record<string, any> | undefined;
91
+ positionX?: number | undefined;
92
+ positionY?: number | undefined;
93
+ order?: number | undefined;
94
+ conditions?: any;
95
+ comment?: string | undefined;
96
+ }>;
97
+ handler: ({ flowId, blockId, ...data }: any) => Promise<any>;
98
+ };
99
+ block_batch_update: {
100
+ description: string;
101
+ inputSchema: z.ZodObject<{
102
+ flowId: z.ZodString;
103
+ blocks: z.ZodArray<z.ZodObject<{
104
+ id: z.ZodString;
105
+ type: z.ZodString;
106
+ title: z.ZodString;
107
+ content: z.ZodAny;
108
+ positionX: z.ZodOptional<z.ZodNumber>;
109
+ positionY: z.ZodOptional<z.ZodNumber>;
110
+ order: z.ZodOptional<z.ZodNumber>;
111
+ conditions: z.ZodOptional<z.ZodAny>;
112
+ comment: z.ZodOptional<z.ZodString>;
113
+ }, "strip", z.ZodTypeAny, {
114
+ type: string;
115
+ title: string;
116
+ id: string;
117
+ content?: any;
118
+ positionX?: number | undefined;
119
+ positionY?: number | undefined;
120
+ order?: number | undefined;
121
+ conditions?: any;
122
+ comment?: string | undefined;
123
+ }, {
124
+ type: string;
125
+ title: string;
126
+ id: string;
127
+ content?: any;
128
+ positionX?: number | undefined;
129
+ positionY?: number | undefined;
130
+ order?: number | undefined;
131
+ conditions?: any;
132
+ comment?: string | undefined;
133
+ }>, "many">;
134
+ }, "strip", z.ZodTypeAny, {
135
+ flowId: string;
136
+ blocks: {
137
+ type: string;
138
+ title: string;
139
+ id: string;
140
+ content?: any;
141
+ positionX?: number | undefined;
142
+ positionY?: number | undefined;
143
+ order?: number | undefined;
144
+ conditions?: any;
145
+ comment?: string | undefined;
146
+ }[];
147
+ }, {
148
+ flowId: string;
149
+ blocks: {
150
+ type: string;
151
+ title: string;
152
+ id: string;
153
+ content?: any;
154
+ positionX?: number | undefined;
155
+ positionY?: number | undefined;
156
+ order?: number | undefined;
157
+ conditions?: any;
158
+ comment?: string | undefined;
159
+ }[];
160
+ }>;
161
+ handler: ({ flowId, blocks }: any) => Promise<any>;
162
+ };
163
+ block_delete: {
164
+ description: string;
165
+ inputSchema: z.ZodObject<{
166
+ flowId: z.ZodString;
167
+ blockId: z.ZodString;
168
+ }, "strip", z.ZodTypeAny, {
169
+ flowId: string;
170
+ blockId: string;
171
+ }, {
172
+ flowId: string;
173
+ blockId: string;
174
+ }>;
175
+ handler: ({ flowId, blockId }: {
176
+ flowId: string;
177
+ blockId: string;
178
+ }) => Promise<{
179
+ success: boolean;
180
+ remainingBlocks: any;
181
+ remainingEdges: any;
182
+ }>;
183
+ };
184
+ block_generate_tts: {
185
+ description: string;
186
+ inputSchema: z.ZodObject<{
187
+ flowId: z.ZodString;
188
+ blockId: z.ZodString;
189
+ }, "strip", z.ZodTypeAny, {
190
+ flowId: string;
191
+ blockId: string;
192
+ }, {
193
+ flowId: string;
194
+ blockId: string;
195
+ }>;
196
+ handler: ({ flowId, blockId }: {
197
+ flowId: string;
198
+ blockId: string;
199
+ }) => Promise<any>;
200
+ };
201
+ };
2
202
  export declare const blocksTools: {
3
203
  block_list_types: {
4
204
  description: string;
@@ -1 +1 @@
1
- {"version":3,"file":"blocks.d.ts","sourceRoot":"","sources":["../../src/tools/blocks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAOxB,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;uCAiDiB;YAAE,MAAM,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,CAAA;SAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4CAuB9B,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gDAkCC,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sCAqBb,GAAG;;;;;;;;;;;;;;uCAWF;YAAE,MAAM,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,CAAA;SAAE;;;;;;;;;;;;;;;;;;uCAwBnC;YAAE,MAAM,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,CAAA;SAAE;;CAI3E,CAAC"}
1
+ {"version":3,"file":"blocks.d.ts","sourceRoot":"","sources":["../../src/tools/blocks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAO3C,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,WAAW;;;;;;;;;;;;;;;;;;;;;;;;uCAkDP;YAAE,MAAM,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,CAAA;SAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4CAuB9B,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gDAkCC,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sCAqBb,GAAG;;;;;;;;;;;;;;uCAWF;YAAE,MAAM,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,CAAA;SAAE;;;;;;;;;;;;;;;;;;uCAwBnC;YAAE,MAAM,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,CAAA;SAAE;;EAK3E;AAGD,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;uCAzHiB;YAAE,MAAM,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,CAAA;SAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4CAuB9B,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gDAkCC,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sCAqBb,GAAG;;;;;;;;;;;;;;uCAWF;YAAE,MAAM,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,CAAA;SAAE;;;;;;;;;;;;;;;;;;uCAwBnC;YAAE,MAAM,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,CAAA;SAAE;;CAQjB,CAAC"}
@@ -1,163 +1,167 @@
1
1
  import { z } from 'zod';
2
- import { client } from '../client.js';
2
+ import { client as defaultClient } from '../client.js';
3
3
  const blockContentSchema = z.record(z.any()).describe('Contenu du bloc (structure variable selon le type). Utiliser la resource lyrra://block-types pour connaître la structure attendue.');
4
- export const blocksTools = {
5
- block_list_types: {
6
- description: `Lister tous les types de blocs disponibles avec leur documentation complète.
4
+ export function createBlocksTools(c) {
5
+ return {
6
+ block_list_types: {
7
+ description: `Lister tous les types de blocs disponibles avec leur documentation complète.
7
8
  Types disponibles : text, audio, quiz, video, pdf, image, loop, evaluation, split, merge, timer, start, end, chart, timeline, dys_reader, dys_image_zones, dys_reading_practice, dys_clock, glossary, subflow, mindmap, form, certification, email, voice_assessment, presentation, browser, self_assessment.
8
9
  Utiliser plutôt la resource lyrra://block-types pour la documentation complète.`,
9
- inputSchema: z.object({}),
10
- handler: async () => {
11
- return {
12
- types: [
13
- { type: 'start', name: 'Début', description: 'Point de départ du parcours. Un seul par flux.' },
14
- { type: 'end', name: 'Fin', description: 'Point de fin du parcours. Peut avoir plusieurs fins.' },
15
- { type: 'text', name: 'Texte', description: 'Contenu textuel/HTML enrichi. TOUJOURS utiliser format: "html".' },
16
- { type: 'audio', name: 'Audio', description: 'Intègre un projet audio LYRRA avec texte synchronisé.' },
17
- { type: 'video', name: 'Vidéo', description: 'Intègre une vidéo (URL YouTube/Vimeo ou fichier uploadé).' },
18
- { type: 'pdf', name: 'PDF', description: 'Affiche un document PDF intégré.' },
19
- { type: 'image', name: 'Image', description: 'Affiche une image avec légende optionnelle.' },
20
- { type: 'quiz', name: 'Quiz', description: 'Question QCM/vrai-faux/ordonnancement avec branchement conditionnel.' },
21
- { type: 'evaluation', name: 'Évaluation', description: 'Évaluation complète avec plusieurs questions et scoring.' },
22
- { type: 'form', name: 'Formulaire', description: 'Formulaire avec champs personnalisés et logique conditionnelle.' },
23
- { type: 'chart', name: 'Graphique', description: 'Graphique interactif (bar, line, pie, scatter, radar, area, doughnut).' },
24
- { type: 'timeline', name: 'Frise chronologique', description: 'Frise avec événements datés.' },
25
- { type: 'mindmap', name: 'Carte mentale', description: 'Carte mentale interactive avec nœuds et liens.' },
26
- { type: 'glossary', name: 'Glossaire', description: 'Liste de termes et définitions.' },
27
- { type: 'split', name: 'Embranchement', description: 'Sépare le flux en branches parallèles.' },
28
- { type: 'merge', name: 'Fusion', description: 'Rejoint les branches parallèles.' },
29
- { type: 'loop', name: 'Boucle', description: 'Permet de répéter une séquence de blocs.' },
30
- { type: 'timer', name: 'Minuteur', description: 'Bloc avec temps limité, pause, rappel ou expiration.' },
31
- { type: 'subflow', name: 'Sous-parcours', description: 'Intègre un autre parcours EduFlow comme bloc.' },
32
- { type: 'certification', name: 'Certification', description: 'Génère un certificat PDF personnalisé.' },
33
- { type: 'email', name: 'Email', description: 'Envoie un email automatique (certification, rappel).' },
34
- { type: 'voice_assessment', name: 'Évaluation vocale', description: 'Enregistrement et évaluation de la voix de l\'étudiant.' },
35
- { type: 'self_assessment', name: 'Auto-évaluation', description: 'L\'étudiant s\'évalue lui-même sur des critères définis.' },
36
- { type: 'presentation', name: 'Présentation', description: 'Diaporama avec slides.' },
37
- { type: 'browser', name: 'Navigateur', description: 'Intègre une page web dans un iframe.' },
38
- { type: 'dys_reader', name: 'Lecteur DYS', description: 'Texte adapté pour la dyslexie avec police et espacement spéciaux.' },
39
- { type: 'dys_image_zones', name: 'Zones d\'image DYS', description: 'Image avec zones cliquables pour la dyslexie.' },
40
- { type: 'dys_reading_practice', name: 'Pratique lecture DYS', description: 'Exercice de lecture adapté dyslexie.' },
41
- { type: 'dys_clock', name: 'Horloge DYS', description: 'Exercice de lecture de l\'heure pour la dyscalculie.' },
42
- ],
43
- };
10
+ inputSchema: z.object({}),
11
+ handler: async () => {
12
+ return {
13
+ types: [
14
+ { type: 'start', name: 'Début', description: 'Point de départ du parcours. Un seul par flux.' },
15
+ { type: 'end', name: 'Fin', description: 'Point de fin du parcours. Peut avoir plusieurs fins.' },
16
+ { type: 'text', name: 'Texte', description: 'Contenu textuel/HTML enrichi. TOUJOURS utiliser format: "html".' },
17
+ { type: 'audio', name: 'Audio', description: 'Intègre un projet audio LYRRA avec texte synchronisé.' },
18
+ { type: 'video', name: 'Vidéo', description: 'Intègre une vidéo (URL YouTube/Vimeo ou fichier uploadé).' },
19
+ { type: 'pdf', name: 'PDF', description: 'Affiche un document PDF intégré.' },
20
+ { type: 'image', name: 'Image', description: 'Affiche une image avec légende optionnelle.' },
21
+ { type: 'quiz', name: 'Quiz', description: 'Question QCM/vrai-faux/ordonnancement avec branchement conditionnel.' },
22
+ { type: 'evaluation', name: 'Évaluation', description: 'Évaluation complète avec plusieurs questions et scoring.' },
23
+ { type: 'form', name: 'Formulaire', description: 'Formulaire avec champs personnalisés et logique conditionnelle.' },
24
+ { type: 'chart', name: 'Graphique', description: 'Graphique interactif (bar, line, pie, scatter, radar, area, doughnut).' },
25
+ { type: 'timeline', name: 'Frise chronologique', description: 'Frise avec événements datés.' },
26
+ { type: 'mindmap', name: 'Carte mentale', description: 'Carte mentale interactive avec nœuds et liens.' },
27
+ { type: 'glossary', name: 'Glossaire', description: 'Liste de termes et définitions.' },
28
+ { type: 'split', name: 'Embranchement', description: 'Sépare le flux en branches parallèles.' },
29
+ { type: 'merge', name: 'Fusion', description: 'Rejoint les branches parallèles.' },
30
+ { type: 'loop', name: 'Boucle', description: 'Permet de répéter une séquence de blocs.' },
31
+ { type: 'timer', name: 'Minuteur', description: 'Bloc avec temps limité, pause, rappel ou expiration.' },
32
+ { type: 'subflow', name: 'Sous-parcours', description: 'Intègre un autre parcours EduFlow comme bloc.' },
33
+ { type: 'certification', name: 'Certification', description: 'Génère un certificat PDF personnalisé.' },
34
+ { type: 'email', name: 'Email', description: 'Envoie un email automatique (certification, rappel).' },
35
+ { type: 'voice_assessment', name: 'Évaluation vocale', description: 'Enregistrement et évaluation de la voix de l\'étudiant.' },
36
+ { type: 'self_assessment', name: 'Auto-évaluation', description: 'L\'étudiant s\'évalue lui-même sur des critères définis.' },
37
+ { type: 'presentation', name: 'Présentation', description: 'Diaporama avec slides.' },
38
+ { type: 'browser', name: 'Navigateur', description: 'Intègre une page web dans un iframe.' },
39
+ { type: 'dys_reader', name: 'Lecteur DYS', description: 'Texte adapté pour la dyslexie avec police et espacement spéciaux.' },
40
+ { type: 'dys_image_zones', name: 'Zones d\'image DYS', description: 'Image avec zones cliquables pour la dyslexie.' },
41
+ { type: 'dys_reading_practice', name: 'Pratique lecture DYS', description: 'Exercice de lecture adapté dyslexie.' },
42
+ { type: 'dys_clock', name: 'Horloge DYS', description: 'Exercice de lecture de l\'heure pour la dyscalculie.' },
43
+ ],
44
+ };
45
+ },
44
46
  },
45
- },
46
- block_get: {
47
- description: 'Récupérer les détails complets d\'un bloc (type, contenu, position, conditions, commentaire).',
48
- inputSchema: z.object({
49
- flowId: z.string().uuid().describe('ID du parcours'),
50
- blockId: z.string().uuid().describe('ID du bloc'),
51
- }),
52
- handler: async ({ flowId, blockId }) => {
53
- return client.get(`/flows/${flowId}/blocks/${blockId}`, 'eduflow');
47
+ block_get: {
48
+ description: 'Récupérer les détails complets d\'un bloc (type, contenu, position, conditions, commentaire).',
49
+ inputSchema: z.object({
50
+ flowId: z.string().uuid().describe('ID du parcours'),
51
+ blockId: z.string().uuid().describe('ID du bloc'),
52
+ }),
53
+ handler: async ({ flowId, blockId }) => {
54
+ return c.get(`/flows/${flowId}/blocks/${blockId}`, 'eduflow');
55
+ },
54
56
  },
55
- },
56
- block_create: {
57
- description: `Créer un nouveau bloc dans un parcours EduFlow. Le bloc est ajouté mais pas encore connecté (utiliser connection_add ensuite).
57
+ block_create: {
58
+ description: `Créer un nouveau bloc dans un parcours EduFlow. Le bloc est ajouté mais pas encore connecté (utiliser connection_add ensuite).
58
59
  IMPORTANT pour le type "text" : toujours utiliser content.format = "html" et du HTML dans content.text (pas de Markdown).`,
59
- inputSchema: z.object({
60
- flowId: z.string().uuid().describe('ID du parcours'),
61
- type: z.enum([
62
- 'text', 'audio', 'quiz', 'video', 'pdf', 'image', 'loop', 'evaluation',
63
- 'split', 'merge', 'timer', 'start', 'end', 'chart', 'timeline',
64
- 'dys_reader', 'dys_image_zones', 'dys_reading_practice', 'dys_clock',
65
- 'glossary', 'subflow', 'mindmap', 'form', 'certification', 'email',
66
- 'voice_assessment', 'presentation', 'browser', 'self_assessment',
67
- ]).describe('Type de bloc à créer'),
68
- title: z.string().describe('Titre du bloc'),
69
- content: blockContentSchema,
70
- positionX: z.number().optional().describe('Position X dans l\'éditeur visuel (défaut: 0)'),
71
- positionY: z.number().optional().describe('Position Y dans l\'éditeur visuel (défaut: 0)'),
72
- order: z.number().optional().describe('Ordre d\'affichage'),
73
- }),
74
- handler: async ({ flowId, ...blockData }) => {
75
- // Use batch update to add a single block
76
- const flow = await client.get(`/flows/${flowId}`, 'eduflow');
77
- const existingBlocks = flow.blocks || [];
78
- const newBlock = {
79
- id: crypto.randomUUID(),
80
- ...blockData,
81
- positionX: blockData.positionX ?? (existingBlocks.length * 300),
82
- positionY: blockData.positionY ?? 200,
83
- order: blockData.order ?? existingBlocks.length,
84
- };
85
- const allBlocks = [...existingBlocks.map((b) => ({
86
- id: b.id, type: b.type, title: b.title,
87
- content: b.content, positionX: b.positionX, positionY: b.positionY,
88
- order: b.order, conditions: b.conditions, comment: b.comment,
89
- })), newBlock];
90
- await client.put(`/flows/${flowId}/blocks`, allBlocks, 'eduflow');
91
- return { success: true, block: newBlock };
60
+ inputSchema: z.object({
61
+ flowId: z.string().uuid().describe('ID du parcours'),
62
+ type: z.enum([
63
+ 'text', 'audio', 'quiz', 'video', 'pdf', 'image', 'loop', 'evaluation',
64
+ 'split', 'merge', 'timer', 'start', 'end', 'chart', 'timeline',
65
+ 'dys_reader', 'dys_image_zones', 'dys_reading_practice', 'dys_clock',
66
+ 'glossary', 'subflow', 'mindmap', 'form', 'certification', 'email',
67
+ 'voice_assessment', 'presentation', 'browser', 'self_assessment',
68
+ ]).describe('Type de bloc à créer'),
69
+ title: z.string().describe('Titre du bloc'),
70
+ content: blockContentSchema,
71
+ positionX: z.number().optional().describe('Position X dans l\'éditeur visuel (défaut: 0)'),
72
+ positionY: z.number().optional().describe('Position Y dans l\'éditeur visuel (défaut: 0)'),
73
+ order: z.number().optional().describe('Ordre d\'affichage'),
74
+ }),
75
+ handler: async ({ flowId, ...blockData }) => {
76
+ // Use batch update to add a single block
77
+ const flow = await c.get(`/flows/${flowId}`, 'eduflow');
78
+ const existingBlocks = flow.blocks || [];
79
+ const newBlock = {
80
+ id: crypto.randomUUID(),
81
+ ...blockData,
82
+ positionX: blockData.positionX ?? (existingBlocks.length * 300),
83
+ positionY: blockData.positionY ?? 200,
84
+ order: blockData.order ?? existingBlocks.length,
85
+ };
86
+ const allBlocks = [...existingBlocks.map((b) => ({
87
+ id: b.id, type: b.type, title: b.title,
88
+ content: b.content, positionX: b.positionX, positionY: b.positionY,
89
+ order: b.order, conditions: b.conditions, comment: b.comment,
90
+ })), newBlock];
91
+ await c.put(`/flows/${flowId}/blocks`, allBlocks, 'eduflow');
92
+ return { success: true, block: newBlock };
93
+ },
92
94
  },
93
- },
94
- block_update: {
95
- description: 'Mettre à jour un bloc existant (titre, contenu, position, conditions).',
96
- inputSchema: z.object({
97
- flowId: z.string().uuid().describe('ID du parcours'),
98
- blockId: z.string().uuid().describe('ID du bloc à modifier'),
99
- title: z.string().optional().describe('Nouveau titre'),
100
- content: blockContentSchema.optional(),
101
- positionX: z.number().optional().describe('Nouvelle position X'),
102
- positionY: z.number().optional().describe('Nouvelle position Y'),
103
- order: z.number().optional().describe('Nouvel ordre'),
104
- conditions: z.any().optional().describe('Conditions de branchement'),
105
- comment: z.string().optional().describe('Commentaire créateur'),
106
- }),
107
- handler: async ({ flowId, blockId, ...data }) => {
108
- return client.put(`/flows/${flowId}/blocks/${blockId}`, data, 'eduflow');
95
+ block_update: {
96
+ description: 'Mettre à jour un bloc existant (titre, contenu, position, conditions).',
97
+ inputSchema: z.object({
98
+ flowId: z.string().uuid().describe('ID du parcours'),
99
+ blockId: z.string().uuid().describe('ID du bloc à modifier'),
100
+ title: z.string().optional().describe('Nouveau titre'),
101
+ content: blockContentSchema.optional(),
102
+ positionX: z.number().optional().describe('Nouvelle position X'),
103
+ positionY: z.number().optional().describe('Nouvelle position Y'),
104
+ order: z.number().optional().describe('Nouvel ordre'),
105
+ conditions: z.any().optional().describe('Conditions de branchement'),
106
+ comment: z.string().optional().describe('Commentaire créateur'),
107
+ }),
108
+ handler: async ({ flowId, blockId, ...data }) => {
109
+ return c.put(`/flows/${flowId}/blocks/${blockId}`, data, 'eduflow');
110
+ },
109
111
  },
110
- },
111
- block_batch_update: {
112
- description: 'Mettre à jour plusieurs blocs en une seule opération. Utile pour repositionner ou réorganiser tous les blocs.',
113
- inputSchema: z.object({
114
- flowId: z.string().uuid().describe('ID du parcours'),
115
- blocks: z.array(z.object({
116
- id: z.string().describe('ID du bloc'),
117
- type: z.string().describe('Type du bloc'),
118
- title: z.string().describe('Titre'),
119
- content: z.any().describe('Contenu'),
120
- positionX: z.number().optional(),
121
- positionY: z.number().optional(),
122
- order: z.number().optional(),
123
- conditions: z.any().optional(),
124
- comment: z.string().optional(),
125
- })).describe('Liste complète des blocs (REMPLACE tous les blocs existants)'),
126
- }),
127
- handler: async ({ flowId, blocks }) => {
128
- return client.put(`/flows/${flowId}/blocks`, blocks, 'eduflow');
112
+ block_batch_update: {
113
+ description: 'Mettre à jour plusieurs blocs en une seule opération. Utile pour repositionner ou réorganiser tous les blocs.',
114
+ inputSchema: z.object({
115
+ flowId: z.string().uuid().describe('ID du parcours'),
116
+ blocks: z.array(z.object({
117
+ id: z.string().describe('ID du bloc'),
118
+ type: z.string().describe('Type du bloc'),
119
+ title: z.string().describe('Titre'),
120
+ content: z.any().describe('Contenu'),
121
+ positionX: z.number().optional(),
122
+ positionY: z.number().optional(),
123
+ order: z.number().optional(),
124
+ conditions: z.any().optional(),
125
+ comment: z.string().optional(),
126
+ })).describe('Liste complète des blocs (REMPLACE tous les blocs existants)'),
127
+ }),
128
+ handler: async ({ flowId, blocks }) => {
129
+ return c.put(`/flows/${flowId}/blocks`, blocks, 'eduflow');
130
+ },
129
131
  },
130
- },
131
- block_delete: {
132
- description: 'Supprimer un bloc d\'un parcours. Les connexions liées sont automatiquement supprimées.',
133
- inputSchema: z.object({
134
- flowId: z.string().uuid().describe('ID du parcours'),
135
- blockId: z.string().uuid().describe('ID du bloc à supprimer'),
136
- }),
137
- handler: async ({ flowId, blockId }) => {
138
- // Get current flow, remove block, remove related edges, batch update
139
- const flow = await client.get(`/flows/${flowId}`, 'eduflow');
140
- const blocks = (flow.blocks || []).filter((b) => b.id !== blockId);
141
- const edges = (flow.edges || []).filter((e) => e.source !== blockId && e.target !== blockId);
142
- const mappedBlocks = blocks.map((b) => ({
143
- id: b.id, type: b.type, title: b.title,
144
- content: b.content, positionX: b.positionX, positionY: b.positionY,
145
- order: b.order, conditions: b.conditions, comment: b.comment,
146
- }));
147
- await client.put(`/flows/${flowId}/blocks`, mappedBlocks, 'eduflow');
148
- await client.put(`/flows/${flowId}`, { edges }, 'eduflow');
149
- return { success: true, remainingBlocks: blocks.length, remainingEdges: edges.length };
132
+ block_delete: {
133
+ description: 'Supprimer un bloc d\'un parcours. Les connexions liées sont automatiquement supprimées.',
134
+ inputSchema: z.object({
135
+ flowId: z.string().uuid().describe('ID du parcours'),
136
+ blockId: z.string().uuid().describe('ID du bloc à supprimer'),
137
+ }),
138
+ handler: async ({ flowId, blockId }) => {
139
+ // Get current flow, remove block, remove related edges, batch update
140
+ const flow = await c.get(`/flows/${flowId}`, 'eduflow');
141
+ const blocks = (flow.blocks || []).filter((b) => b.id !== blockId);
142
+ const edges = (flow.edges || []).filter((e) => e.source !== blockId && e.target !== blockId);
143
+ const mappedBlocks = blocks.map((b) => ({
144
+ id: b.id, type: b.type, title: b.title,
145
+ content: b.content, positionX: b.positionX, positionY: b.positionY,
146
+ order: b.order, conditions: b.conditions, comment: b.comment,
147
+ }));
148
+ await c.put(`/flows/${flowId}/blocks`, mappedBlocks, 'eduflow');
149
+ await c.put(`/flows/${flowId}`, { edges }, 'eduflow');
150
+ return { success: true, remainingBlocks: blocks.length, remainingEdges: edges.length };
151
+ },
150
152
  },
151
- },
152
- block_generate_tts: {
153
- description: 'Générer l\'audio TTS (text-to-speech) pour un bloc texte. L\'audio est attaché au bloc.',
154
- inputSchema: z.object({
155
- flowId: z.string().uuid().describe('ID du parcours'),
156
- blockId: z.string().uuid().describe('ID du bloc'),
157
- }),
158
- handler: async ({ flowId, blockId }) => {
159
- return client.post(`/blocks/${blockId}/generate-tts`, { flowId }, 'eduflow');
153
+ block_generate_tts: {
154
+ description: 'Générer l\'audio TTS (text-to-speech) pour un bloc texte. L\'audio est attaché au bloc.',
155
+ inputSchema: z.object({
156
+ flowId: z.string().uuid().describe('ID du parcours'),
157
+ blockId: z.string().uuid().describe('ID du bloc'),
158
+ }),
159
+ handler: async ({ flowId, blockId }) => {
160
+ return c.post(`/blocks/${blockId}/generate-tts`, { flowId }, 'eduflow');
161
+ },
160
162
  },
161
- },
162
- };
163
+ };
164
+ }
165
+ // Backward compatibility for stdio mode
166
+ export const blocksTools = createBlocksTools(defaultClient);
163
167
  //# sourceMappingURL=blocks.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"blocks.js","sourceRoot":"","sources":["../../src/tools/blocks.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"blocks.js","sourceRoot":"","sources":["../../src/tools/blocks.ts"],"names":[],"mappings":"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"}