@boostecom/provider 0.0.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 (70) hide show
  1. package/README.md +90 -0
  2. package/dist/index.cjs +2522 -0
  3. package/dist/index.cjs.map +1 -0
  4. package/dist/index.d.cts +848 -0
  5. package/dist/index.d.ts +848 -0
  6. package/dist/index.js +2484 -0
  7. package/dist/index.js.map +1 -0
  8. package/docs/content/README.md +337 -0
  9. package/docs/content/agent-teams.mdx +324 -0
  10. package/docs/content/api.mdx +757 -0
  11. package/docs/content/best-practices.mdx +624 -0
  12. package/docs/content/examples.mdx +675 -0
  13. package/docs/content/guide.mdx +516 -0
  14. package/docs/content/index.mdx +99 -0
  15. package/docs/content/installation.mdx +246 -0
  16. package/docs/content/skills.mdx +548 -0
  17. package/docs/content/troubleshooting.mdx +588 -0
  18. package/docs/examples/README.md +499 -0
  19. package/docs/examples/abort-signal.ts +125 -0
  20. package/docs/examples/agent-teams.ts +122 -0
  21. package/docs/examples/basic-usage.ts +73 -0
  22. package/docs/examples/check-cli.ts +51 -0
  23. package/docs/examples/conversation-history.ts +69 -0
  24. package/docs/examples/custom-config.ts +90 -0
  25. package/docs/examples/generate-object-constraints.ts +209 -0
  26. package/docs/examples/generate-object.ts +211 -0
  27. package/docs/examples/hooks-callbacks.ts +63 -0
  28. package/docs/examples/images.ts +76 -0
  29. package/docs/examples/integration-test.ts +241 -0
  30. package/docs/examples/limitations.ts +150 -0
  31. package/docs/examples/logging-custom-logger.ts +99 -0
  32. package/docs/examples/logging-default.ts +55 -0
  33. package/docs/examples/logging-disabled.ts +74 -0
  34. package/docs/examples/logging-verbose.ts +64 -0
  35. package/docs/examples/long-running-tasks.ts +179 -0
  36. package/docs/examples/message-injection.ts +210 -0
  37. package/docs/examples/mid-stream-injection.ts +126 -0
  38. package/docs/examples/run-all-examples.sh +48 -0
  39. package/docs/examples/sdk-tools-callbacks.ts +49 -0
  40. package/docs/examples/skills-discovery.ts +144 -0
  41. package/docs/examples/skills-management.ts +140 -0
  42. package/docs/examples/stream-object.ts +80 -0
  43. package/docs/examples/streaming.ts +52 -0
  44. package/docs/examples/structured-output-repro.ts +227 -0
  45. package/docs/examples/tool-management.ts +215 -0
  46. package/docs/examples/tool-streaming.ts +132 -0
  47. package/docs/examples/zod4-compatibility-test.ts +290 -0
  48. package/docs/src/claude-code-language-model.test.ts +3883 -0
  49. package/docs/src/claude-code-language-model.ts +2586 -0
  50. package/docs/src/claude-code-provider.test.ts +97 -0
  51. package/docs/src/claude-code-provider.ts +179 -0
  52. package/docs/src/convert-to-claude-code-messages.images.test.ts +104 -0
  53. package/docs/src/convert-to-claude-code-messages.test.ts +193 -0
  54. package/docs/src/convert-to-claude-code-messages.ts +419 -0
  55. package/docs/src/errors.test.ts +213 -0
  56. package/docs/src/errors.ts +216 -0
  57. package/docs/src/index.test.ts +49 -0
  58. package/docs/src/index.ts +98 -0
  59. package/docs/src/logger.integration.test.ts +164 -0
  60. package/docs/src/logger.test.ts +184 -0
  61. package/docs/src/logger.ts +65 -0
  62. package/docs/src/map-claude-code-finish-reason.test.ts +120 -0
  63. package/docs/src/map-claude-code-finish-reason.ts +60 -0
  64. package/docs/src/mcp-helpers.test.ts +71 -0
  65. package/docs/src/mcp-helpers.ts +123 -0
  66. package/docs/src/message-injection.test.ts +460 -0
  67. package/docs/src/types.ts +447 -0
  68. package/docs/src/validation.test.ts +558 -0
  69. package/docs/src/validation.ts +360 -0
  70. package/package.json +124 -0
@@ -0,0 +1,588 @@
1
+ ---
2
+ title: Dépannage
3
+ description: Solutions aux problèmes courants avec le provider Claude Code
4
+ ---
5
+
6
+ # Dépannage
7
+
8
+ Cette page répertorie les problèmes courants et leurs solutions.
9
+
10
+ ## Problèmes d'installation
11
+
12
+ ### Le CLI n'est pas trouvé
13
+
14
+ **Symptôme** : `command not found: claude` ou `ENOENT`
15
+
16
+ **Cause** : Le CLI Claude Code n'est pas installé ou pas dans le PATH
17
+
18
+ **Solution** :
19
+
20
+ ```bash
21
+ # Vérifier l'installation
22
+ which claude
23
+
24
+ # Si non trouvé, installer
25
+ npm install -g @anthropic-ai/claude-code
26
+
27
+ # Vérifier à nouveau
28
+ claude --version
29
+ ```
30
+
31
+ Si le problème persiste :
32
+
33
+ ```bash
34
+ # Vérifier le répertoire global npm
35
+ npm config get prefix
36
+
37
+ # Ajouter au PATH si nécessaire (dans ~/.bashrc ou ~/.zshrc)
38
+ export PATH="$PATH:$(npm config get prefix)/bin"
39
+
40
+ # Recharger le shell
41
+ source ~/.bashrc # ou ~/.zshrc
42
+ ```
43
+
44
+ ### Erreur d'authentification
45
+
46
+ **Symptôme** : `Authentication failed` ou `Unauthorized`
47
+
48
+ **Solution 1** : Réauthentification
49
+
50
+ ```bash
51
+ # Supprimer les identifiants existants
52
+ rm -rf ~/.claude
53
+
54
+ # Se reconnecter
55
+ claude login
56
+ ```
57
+
58
+ **Solution 2** : Vérifier les permissions
59
+
60
+ ```bash
61
+ # Vérifier les permissions du répertoire
62
+ ls -la ~/.claude
63
+
64
+ # Corriger si nécessaire
65
+ chmod 700 ~/.claude
66
+ chmod 600 ~/.claude/*
67
+ ```
68
+
69
+ ### Incompatibilité de version Zod
70
+
71
+ **Symptôme** : Erreurs TypeScript avec les types Zod
72
+
73
+ **Cause** : Version 3.2.0+ nécessite Zod 4
74
+
75
+ **Solution** :
76
+
77
+ ```bash
78
+ # Vérifier la version de Zod
79
+ npm list zod
80
+
81
+ # Mettre à jour vers Zod 4
82
+ npm install zod@^4.0.0
83
+
84
+ # Ou downgrader le provider si Zod 3 requis
85
+ npm install @boostecom/provider@3.1.x
86
+ ```
87
+
88
+ ## Problèmes d'exécution
89
+
90
+ ### Timeout lors de la génération
91
+
92
+ **Symptôme** : La requête expire après 30 secondes
93
+
94
+ **Solution** : Augmenter le timeout
95
+
96
+ ```typescript
97
+ const controller = new AbortController();
98
+ const timeoutId = setTimeout(() => controller.abort(), 300000); // 5 minutes
99
+
100
+ try {
101
+ const { text } = await generateText({
102
+ model: claudeCode('opus'),
103
+ prompt: 'Tâche longue...',
104
+ abortSignal: controller.signal,
105
+ });
106
+ clearTimeout(timeoutId);
107
+ } catch (error: any) {
108
+ if (error.name === 'AbortError') {
109
+ console.error('Timeout dépassé');
110
+ }
111
+ }
112
+ ```
113
+
114
+ ### Erreur "Model not found"
115
+
116
+ **Symptôme** : `Model 'xyz' not found`
117
+
118
+ **Cause** : Nom de modèle invalide
119
+
120
+ **Solution** : Utiliser un nom de modèle valide
121
+
122
+ ```typescript
123
+ // ❌ Incorrect
124
+ const model = claudeCode('gpt-4'); // Mauvais provider
125
+
126
+ // ✅ Correct
127
+ const model = claudeCode('opus');
128
+ const model = claudeCode('sonnet');
129
+ const model = claudeCode('haiku');
130
+
131
+ // ✅ Ou identifiant complet
132
+ const model = claudeCode('claude-opus-4-5');
133
+ ```
134
+
135
+ ### "No such file or directory" avec cwd
136
+
137
+ **Symptôme** : Erreur lors de l'utilisation de `cwd`
138
+
139
+ **Solution** : Utiliser un chemin absolu
140
+
141
+ ```typescript
142
+ import { resolve } from 'path';
143
+
144
+ // ❌ Chemin relatif (peut échouer)
145
+ const model = claudeCode('sonnet', {
146
+ cwd: './mon-projet',
147
+ });
148
+
149
+ // ✅ Chemin absolu
150
+ const model = claudeCode('sonnet', {
151
+ cwd: resolve(__dirname, './mon-projet'),
152
+ });
153
+ ```
154
+
155
+ ## Problèmes avec structured outputs
156
+
157
+ ### Le CLI retourne du texte au lieu de JSON
158
+
159
+ **Symptôme** : La réponse est en prose malgré `generateObject()`
160
+
161
+ **Cause** : Le schéma contient des contraintes non supportées
162
+
163
+ **Contraintes problématiques** :
164
+ - `.email()`, `.url()`, `.uuid()`, `.datetime()`
165
+ - Regex avec lookaheads/lookbehinds
166
+ - `format` constraints trop strictes
167
+
168
+ **Solution** : Simplifier le schéma
169
+
170
+ ```typescript
171
+ // ❌ Problématique
172
+ const schema = z.object({
173
+ email: z.string().email(), // Cause fallback
174
+ url: z.string().url(),
175
+ code: z.string().regex(/^(?=.*[A-Z])(?=.*[0-9]).{8,}$/), // Lookahead
176
+ });
177
+
178
+ // ✅ Solution
179
+ const schema = z.object({
180
+ email: z.string().describe('Adresse email (ex: user@example.com)'),
181
+ url: z.string().describe('URL (ex: https://example.com)'),
182
+ code: z.string().min(8).describe('Code avec maj et chiffres'),
183
+ });
184
+
185
+ // Valider côté client si nécessaire
186
+ const result = await generateObject({ model, schema, prompt });
187
+ const isValidEmail = /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(result.object.email);
188
+ ```
189
+
190
+ ### Schéma trop complexe
191
+
192
+ **Symptôme** : Génération lente ou erreurs de validation
193
+
194
+ **Solution** : Décomposer en étapes
195
+
196
+ ```typescript
197
+ // ❌ Schéma massif
198
+ const hugeSchema = z.object({
199
+ // 50+ champs...
200
+ });
201
+
202
+ // ✅ Décomposer
203
+ const step1Schema = z.object({ /* 10 champs */ });
204
+ const step2Schema = z.object({ /* 10 champs */ });
205
+
206
+ const result1 = await generateObject({ model, schema: step1Schema, prompt: '...' });
207
+ const result2 = await generateObject({ model, schema: step2Schema, prompt: '...' });
208
+
209
+ const combined = { ...result1.object, ...result2.object };
210
+ ```
211
+
212
+ ## Problèmes avec les outils
213
+
214
+ ### Skills non chargées
215
+
216
+ **Symptôme** : Les skills ne sont pas disponibles
217
+
218
+ **Solution** : Vérifier la configuration
219
+
220
+ ```typescript
221
+ // ❌ Configuration incomplète
222
+ const model = claudeCode('sonnet', {
223
+ allowedTools: ['Skill'], // 'Skill' présent mais...
224
+ // Manque: settingSources
225
+ });
226
+
227
+ // ✅ Configuration complète
228
+ const model = claudeCode('sonnet', {
229
+ settingSources: ['user', 'project'], // Requis
230
+ allowedTools: ['Skill'], // Requis
231
+ });
232
+ ```
233
+
234
+ Vérifier l'emplacement des skills :
235
+
236
+ ```bash
237
+ # Skills globales
238
+ ls -la ~/.claude/skills/
239
+
240
+ # Skills projet
241
+ ls -la .claude/skills/
242
+
243
+ # Chaque skill doit avoir un SKILL.md
244
+ cat .claude/skills/ma-skill/SKILL.md
245
+ ```
246
+
247
+ ### Outil refusé malgré allowedTools
248
+
249
+ **Symptôme** : Claude dit qu'il ne peut pas utiliser un outil autorisé
250
+
251
+ **Solution** : Vérifier les patterns
252
+
253
+ ```typescript
254
+ // ❌ Pattern trop restrictif
255
+ const model = claudeCode('sonnet', {
256
+ allowedTools: ['Bash(git log:*)'], // Seulement git log
257
+ });
258
+
259
+ // ✅ Pattern plus large
260
+ const model = claudeCode('sonnet', {
261
+ allowedTools: ['Bash(git:*)'], // Toutes commandes git
262
+ });
263
+
264
+ // ✅ Ou tous les outils Bash
265
+ const model = claudeCode('sonnet', {
266
+ allowedTools: ['Bash'],
267
+ });
268
+ ```
269
+
270
+ ### canUseTool ne fonctionne pas
271
+
272
+ **Symptôme** : Le callback `canUseTool` n'est jamais appelé
273
+
274
+ **Cause** : `streamingInput` non activé
275
+
276
+ **Solution** :
277
+
278
+ ```typescript
279
+ // ❌ Manque streamingInput
280
+ const model = claudeCode('sonnet', {
281
+ canUseTool: async (tool) => true,
282
+ });
283
+
284
+ // ✅ Activer streamingInput
285
+ const model = claudeCode('sonnet', {
286
+ streamingInput: 'always', // Requis
287
+ canUseTool: async (tool) => true,
288
+ });
289
+ ```
290
+
291
+ ## Problèmes avec les images
292
+
293
+ ### Images non traitées
294
+
295
+ **Symptôme** : Les images sont ignorées
296
+
297
+ **Cause** : `streamingInput` non activé
298
+
299
+ **Solution** :
300
+
301
+ ```typescript
302
+ const result = streamText({
303
+ model: claudeCode('sonnet', {
304
+ streamingInput: 'always', // Requis pour images
305
+ }),
306
+ messages: [
307
+ {
308
+ role: 'user',
309
+ content: [
310
+ { type: 'text', text: 'Décris cette image' },
311
+ { type: 'image', image: dataUrl },
312
+ ],
313
+ },
314
+ ],
315
+ });
316
+ ```
317
+
318
+ ### "Invalid image format"
319
+
320
+ **Symptôme** : Erreur de format d'image
321
+
322
+ **Cause** : Format non supporté ou data URL invalide
323
+
324
+ **Solution** :
325
+
326
+ ```typescript
327
+ import { readFileSync } from 'fs';
328
+
329
+ // ✅ Formats supportés: PNG, JPEG, GIF, WebP
330
+ const imageBuffer = readFileSync('/chemin/vers/image.png');
331
+ const base64 = imageBuffer.toString('base64');
332
+ const dataUrl = `data:image/png;base64,${base64}`;
333
+
334
+ // ❌ URLs distantes non supportées
335
+ const badUrl = 'https://example.com/image.png';
336
+
337
+ // ❌ Chemins de fichier non supportés
338
+ const badPath = '/chemin/vers/image.png';
339
+ ```
340
+
341
+ ### Image trop grande
342
+
343
+ **Symptôme** : Erreur ou traitement très lent
344
+
345
+ **Solution** : Redimensionner l'image
346
+
347
+ ```typescript
348
+ import sharp from 'sharp';
349
+
350
+ // Redimensionner avant envoi
351
+ const resized = await sharp('/chemin/vers/image.jpg')
352
+ .resize(1024, 1024, { fit: 'inside' })
353
+ .toBuffer();
354
+
355
+ const base64 = resized.toString('base64');
356
+ const dataUrl = `data:image/jpeg;base64,${base64}`;
357
+ ```
358
+
359
+ ## Problèmes de session
360
+
361
+ ### Session perdue entre requêtes
362
+
363
+ **Symptôme** : Le contexte n'est pas maintenu
364
+
365
+ **Cause** : Nouvelle session à chaque requête
366
+
367
+ **Solution** : Utiliser l'historique de messages
368
+
369
+ ```typescript
370
+ import type { CoreMessage } from 'ai';
371
+
372
+ // Maintenir l'historique
373
+ const messages: CoreMessage[] = [];
374
+
375
+ // Requête 1
376
+ messages.push({ role: 'user', content: 'Bonjour' });
377
+ const result1 = await generateText({ model, messages });
378
+ messages.push({ role: 'assistant', content: result1.text });
379
+
380
+ // Requête 2 (avec contexte)
381
+ messages.push({ role: 'user', content: 'Comment m\'appelles-tu ?' });
382
+ const result2 = await generateText({ model, messages });
383
+ ```
384
+
385
+ ### "Cannot resume session"
386
+
387
+ **Symptôme** : Impossible de reprendre une session
388
+
389
+ **Solution** : Vérifier l'ID de session
390
+
391
+ ```bash
392
+ # Lister les sessions disponibles
393
+ ls -la ~/.claude/projects/
394
+
395
+ # Vérifier la session spécifique
396
+ cat ~/.claude/projects/SESSION_ID/metadata.json
397
+ ```
398
+
399
+ ```typescript
400
+ // Utiliser le bon ID
401
+ const model = claudeCode('sonnet', {
402
+ resume: 'SESSION_ID_VALIDE', // Depuis metadata.json
403
+ });
404
+ ```
405
+
406
+ ## Problèmes de performance
407
+
408
+ ### Génération trop lente
409
+
410
+ **Solutions** :
411
+
412
+ 1. **Utiliser un modèle plus rapide**
413
+
414
+ ```typescript
415
+ // ❌ Opus pour tâche simple
416
+ const slow = claudeCode('opus');
417
+
418
+ // ✅ Haiku pour rapidité
419
+ const fast = claudeCode('haiku');
420
+ ```
421
+
422
+ 2. **Limiter les outils**
423
+
424
+ ```typescript
425
+ // Moins d'outils = plus rapide
426
+ const model = claudeCode('sonnet', {
427
+ allowedTools: ['Read'], // Seulement ce qui est nécessaire
428
+ });
429
+ ```
430
+
431
+ 3. **Réduire maxTurns**
432
+
433
+ ```typescript
434
+ const model = claudeCode('sonnet', {
435
+ maxTurns: 3, // Limiter les allers-retours
436
+ });
437
+ ```
438
+
439
+ ### Consommation mémoire élevée
440
+
441
+ **Solution** : Streaming et nettoyage
442
+
443
+ ```typescript
444
+ const result = streamText({ model, prompt });
445
+
446
+ // Traiter chunk par chunk
447
+ for await (const chunk of result.textStream) {
448
+ process.stdout.write(chunk);
449
+ // Le chunk est garbage collected après utilisation
450
+ }
451
+
452
+ // Pas besoin de stocker toute la réponse en mémoire
453
+ ```
454
+
455
+ ## Problèmes en environnement Docker
456
+
457
+ ### CLI non trouvé dans conteneur
458
+
459
+ **Solution** : Installer dans l'image
460
+
461
+ ```dockerfile
462
+ FROM node:18-alpine
463
+
464
+ # Installer le CLI
465
+ RUN npm install -g @anthropic-ai/claude-code
466
+
467
+ # Copier le code
468
+ WORKDIR /app
469
+ COPY . .
470
+ RUN npm install
471
+
472
+ CMD ["node", "index.js"]
473
+ ```
474
+
475
+ ### Permissions dans Docker
476
+
477
+ **Solution** : Créer le répertoire avec bonnes permissions
478
+
479
+ ```dockerfile
480
+ FROM node:18-alpine
481
+
482
+ RUN npm install -g @anthropic-ai/claude-code
483
+
484
+ # Créer le répertoire Claude avec permissions
485
+ RUN mkdir -p /root/.claude && chmod 700 /root/.claude
486
+
487
+ WORKDIR /app
488
+ COPY . .
489
+ RUN npm install
490
+
491
+ CMD ["node", "index.js"]
492
+ ```
493
+
494
+ ### Authentification en CI/CD
495
+
496
+ **Solution** : Utiliser des secrets
497
+
498
+ ```yaml
499
+ # .github/workflows/test.yml
500
+ - name: Setup Claude Auth
501
+ run: |
502
+ mkdir -p ~/.claude
503
+ echo "${{ secrets.CLAUDE_AUTH }}" > ~/.claude/auth.json
504
+ chmod 600 ~/.claude/auth.json
505
+ ```
506
+
507
+ ## Logs et debugging
508
+
509
+ ### Activer les logs détaillés
510
+
511
+ ```typescript
512
+ const model = claudeCode('sonnet', {
513
+ verbose: true, // Tous les logs
514
+ debug: true, // Logs SDK
515
+ debugFile: '/tmp/claude-debug.log', // Fichier de logs
516
+ });
517
+ ```
518
+
519
+ ### Logger personnalisé pour debugging
520
+
521
+ ```typescript
522
+ import type { Logger } from '@boostecom/provider';
523
+
524
+ const debugLogger: Logger = {
525
+ debug: (msg) => {
526
+ console.log(`[${new Date().toISOString()}] DEBUG:`, msg);
527
+ fs.appendFileSync('/tmp/debug.log', `${msg}\n`);
528
+ },
529
+ info: (msg) => console.log(`[INFO]`, msg),
530
+ warn: (msg) => console.warn(`[WARN]`, msg),
531
+ error: (msg) => {
532
+ console.error(`[ERROR]`, msg);
533
+ // Envoyer à un service de monitoring
534
+ sendToSentry(msg);
535
+ },
536
+ };
537
+
538
+ const model = claudeCode('sonnet', {
539
+ verbose: true,
540
+ logger: debugLogger,
541
+ });
542
+ ```
543
+
544
+ ## Obtenir de l'aide
545
+
546
+ Si votre problème n'est pas listé ici :
547
+
548
+ 1. **Vérifier les exemples** : [Exemples](/docs/examples)
549
+ 2. **Consulter l'API** : [API Reference](/docs/api)
550
+ 3. **Issues GitHub** : [Ouvrir une issue](https://github.com/BoostEcom/ThemeCopilotAI/issues)
551
+ 4. **Discord Vercel** : [Communauté AI SDK](https://vercel.com/discord)
552
+
553
+ ### Template d'issue
554
+
555
+ Lors de l'ouverture d'une issue, incluez :
556
+
557
+ ```markdown
558
+ ## Description du problème
559
+ [Description claire]
560
+
561
+ ## Environnement
562
+ - Node.js version:
563
+ - Provider version:
564
+ - AI SDK version:
565
+ - OS:
566
+
567
+ ## Code pour reproduire
568
+ \`\`\`typescript
569
+ // Votre code
570
+ \`\`\`
571
+
572
+ ## Erreur
573
+ \`\`\`
574
+ // Stack trace ou message d'erreur
575
+ \`\`\`
576
+
577
+ ## Comportement attendu
578
+ [Ce qui devrait se passer]
579
+
580
+ ## Comportement actuel
581
+ [Ce qui se passe réellement]
582
+ ```
583
+
584
+ ## Prochaines étapes
585
+
586
+ - [Best Practices](/docs/best-practices) - Éviter les problèmes courants
587
+ - [Guide d'utilisation](/docs/guide) - Patterns recommandés
588
+ - [API Reference](/docs/api) - Documentation complète