@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.
- package/README.md +90 -0
- package/dist/index.cjs +2522 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +848 -0
- package/dist/index.d.ts +848 -0
- package/dist/index.js +2484 -0
- package/dist/index.js.map +1 -0
- package/docs/content/README.md +337 -0
- package/docs/content/agent-teams.mdx +324 -0
- package/docs/content/api.mdx +757 -0
- package/docs/content/best-practices.mdx +624 -0
- package/docs/content/examples.mdx +675 -0
- package/docs/content/guide.mdx +516 -0
- package/docs/content/index.mdx +99 -0
- package/docs/content/installation.mdx +246 -0
- package/docs/content/skills.mdx +548 -0
- package/docs/content/troubleshooting.mdx +588 -0
- package/docs/examples/README.md +499 -0
- package/docs/examples/abort-signal.ts +125 -0
- package/docs/examples/agent-teams.ts +122 -0
- package/docs/examples/basic-usage.ts +73 -0
- package/docs/examples/check-cli.ts +51 -0
- package/docs/examples/conversation-history.ts +69 -0
- package/docs/examples/custom-config.ts +90 -0
- package/docs/examples/generate-object-constraints.ts +209 -0
- package/docs/examples/generate-object.ts +211 -0
- package/docs/examples/hooks-callbacks.ts +63 -0
- package/docs/examples/images.ts +76 -0
- package/docs/examples/integration-test.ts +241 -0
- package/docs/examples/limitations.ts +150 -0
- package/docs/examples/logging-custom-logger.ts +99 -0
- package/docs/examples/logging-default.ts +55 -0
- package/docs/examples/logging-disabled.ts +74 -0
- package/docs/examples/logging-verbose.ts +64 -0
- package/docs/examples/long-running-tasks.ts +179 -0
- package/docs/examples/message-injection.ts +210 -0
- package/docs/examples/mid-stream-injection.ts +126 -0
- package/docs/examples/run-all-examples.sh +48 -0
- package/docs/examples/sdk-tools-callbacks.ts +49 -0
- package/docs/examples/skills-discovery.ts +144 -0
- package/docs/examples/skills-management.ts +140 -0
- package/docs/examples/stream-object.ts +80 -0
- package/docs/examples/streaming.ts +52 -0
- package/docs/examples/structured-output-repro.ts +227 -0
- package/docs/examples/tool-management.ts +215 -0
- package/docs/examples/tool-streaming.ts +132 -0
- package/docs/examples/zod4-compatibility-test.ts +290 -0
- package/docs/src/claude-code-language-model.test.ts +3883 -0
- package/docs/src/claude-code-language-model.ts +2586 -0
- package/docs/src/claude-code-provider.test.ts +97 -0
- package/docs/src/claude-code-provider.ts +179 -0
- package/docs/src/convert-to-claude-code-messages.images.test.ts +104 -0
- package/docs/src/convert-to-claude-code-messages.test.ts +193 -0
- package/docs/src/convert-to-claude-code-messages.ts +419 -0
- package/docs/src/errors.test.ts +213 -0
- package/docs/src/errors.ts +216 -0
- package/docs/src/index.test.ts +49 -0
- package/docs/src/index.ts +98 -0
- package/docs/src/logger.integration.test.ts +164 -0
- package/docs/src/logger.test.ts +184 -0
- package/docs/src/logger.ts +65 -0
- package/docs/src/map-claude-code-finish-reason.test.ts +120 -0
- package/docs/src/map-claude-code-finish-reason.ts +60 -0
- package/docs/src/mcp-helpers.test.ts +71 -0
- package/docs/src/mcp-helpers.ts +123 -0
- package/docs/src/message-injection.test.ts +460 -0
- package/docs/src/types.ts +447 -0
- package/docs/src/validation.test.ts +558 -0
- package/docs/src/validation.ts +360 -0
- 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
|