@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,499 @@
1
+ # Exemples — Claude Code AI SDK Provider
2
+
3
+ Ce repertoire contient des exemples selectionnes demontrant les fonctionnalites les plus importantes du Claude Code AI SDK Provider. Chaque exemple a un objectif specifique et illustre un pattern ou une capacite cle.
4
+
5
+ > **Note** : Ces exemples sont ecrits pour Vercel AI SDK v5. Si vous utilisez AI SDK v4, consultez la branche v4.
6
+
7
+ ## Prerequis
8
+
9
+ 1. Installer et authentifier le CLI Claude :
10
+
11
+ ```bash
12
+ npm install -g @anthropic-ai/claude-code
13
+ claude login
14
+ ```
15
+
16
+ 2. Compiler le provider :
17
+
18
+ ```bash
19
+ npm run build
20
+ ```
21
+
22
+ 3. Verifier votre installation :
23
+
24
+ ```bash
25
+ npx tsx examples/check-cli.ts
26
+ ```
27
+
28
+ ## Exemples de demarrage rapide
29
+
30
+ ### 1. Utilisation basique (`basic-usage.ts`)
31
+
32
+ **Objectif** : L'exemple le plus simple possible — generer du texte avec Claude et afficher les metadonnees.
33
+
34
+ ```bash
35
+ npx tsx examples/basic-usage.ts
36
+ ```
37
+
38
+ **Concepts cles** : Generation de texte, utilisation des tokens, metadonnees provider (cout, duree)
39
+
40
+ ### 2. Streaming (`streaming.ts`)
41
+
42
+ **Objectif** : Demontrer le streaming en temps reel pour des experiences utilisateur reactives.
43
+
44
+ ```bash
45
+ npx tsx examples/streaming.ts
46
+ ```
47
+
48
+ **Concepts cles** : Traitement du stream, gestion des chunks, sortie en temps reel
49
+
50
+ ### 3. Streaming d'outils (`tool-streaming.ts`)
51
+
52
+ **Objectif** : Observer les evenements tool-call emis par le provider pendant que Claude Code execute les outils integres.
53
+
54
+ ```bash
55
+ npx tsx examples/tool-streaming.ts
56
+ ```
57
+
58
+ **Concepts cles** : Streaming d'outils, outils executes par le provider, inspection detaillee du stream
59
+
60
+ ### 4. Images (`images.ts`)
61
+
62
+ **Objectif** : Streamer un prompt incluant une image locale (PNG/JPG/GIF/WebP).
63
+
64
+ ```bash
65
+ npx tsx examples/images.ts /chemin/absolu/vers/image.png
66
+ ```
67
+
68
+ **Concepts cles** : Data URLs d'images, prerequis streaming, prompts multimodaux
69
+
70
+ ### 5. Historique de conversation (`conversation-history.ts`)
71
+
72
+ **Objectif** : Montrer la bonne facon de maintenir le contexte a travers plusieurs messages.
73
+
74
+ ```bash
75
+ npx tsx examples/conversation-history.ts
76
+ ```
77
+
78
+ **Concepts cles** : Pattern d'historique de messages, preservation du contexte, conversations multi-tours
79
+
80
+ ## Exemples de logging
81
+
82
+ Le provider inclut un systeme de logging flexible configurable pour differents cas d'usage. Ces exemples demontrent tous les modes de logging :
83
+
84
+ ### 6. Logging par defaut (`logging-default.ts`)
85
+
86
+ **Objectif** : Comprendre le comportement de logging par defaut (mode non-verbose).
87
+
88
+ ```bash
89
+ npx tsx examples/logging-default.ts
90
+ ```
91
+
92
+ **Concepts cles** : Comportement par defaut, warn/error uniquement, sortie propre
93
+
94
+ **Ce que vous verrez** : Seuls les messages warning et error apparaissent. Les logs debug et info sont supprimes pour une sortie propre.
95
+
96
+ ### 7. Logging verbose (`logging-verbose.ts`)
97
+
98
+ **Objectif** : Activer le logging detaille pour le developpement et le depannage.
99
+
100
+ ```bash
101
+ npx tsx examples/logging-verbose.ts
102
+ ```
103
+
104
+ **Concepts cles** : Mode verbose, logs debug/info, tracage d'execution
105
+
106
+ **Ce que vous verrez** : Tous les niveaux de log (debug, info, warn, error) montrant l'activite detaillee du provider.
107
+
108
+ ### 8. Logger personnalise (`logging-custom-logger.ts`)
109
+
110
+ **Objectif** : S'integrer avec des systemes de logging externes (Winston, Pino, Datadog, etc.).
111
+
112
+ ```bash
113
+ npx tsx examples/logging-custom-logger.ts
114
+ ```
115
+
116
+ **Concepts cles** : Implementation de logger personnalise, integration externe, formatage des logs
117
+
118
+ **Ce que vous verrez** : Logs personnalises avec horodatages et prefixes, demontrant les patterns d'integration.
119
+
120
+ ### 9. Logging desactive (`logging-disabled.ts`)
121
+
122
+ **Objectif** : Operation completement silencieuse sans logs.
123
+
124
+ ```bash
125
+ npx tsx examples/logging-disabled.ts
126
+ ```
127
+
128
+ **Concepts cles** : Mode silencieux, deploiements production, zero sortie
129
+
130
+ **Ce que vous verrez** : Aucun log provider — operation completement silencieuse.
131
+
132
+ ## Configuration avancee
133
+
134
+ ### 10. Configuration personnalisee (`custom-config.ts`)
135
+
136
+ **Objectif** : Demontrer les options de configuration du provider et du modele.
137
+
138
+ ```bash
139
+ npx tsx examples/custom-config.ts
140
+ ```
141
+
142
+ **Concepts cles** : Parametres provider, overrides de modele, restrictions d'outils, modes de permission
143
+
144
+ ### 11. Gestion des outils (`tool-management.ts`)
145
+
146
+ **Objectif** : Montrer le controle fin de l'acces aux outils de Claude pour la securite.
147
+
148
+ ```bash
149
+ npx tsx examples/tool-management.ts
150
+ ```
151
+
152
+ **Concepts cles** : Listes allow/deny, securite des outils, outils serveur MCP, outils integres
153
+
154
+ ### 12. Taches longues (`long-running-tasks.ts`)
155
+
156
+ **Objectif** : Gerer les timeouts correctement avec le pattern AbortSignal de l'AI SDK.
157
+
158
+ ```bash
159
+ npx tsx examples/long-running-tasks.ts
160
+ ```
161
+
162
+ **Concepts cles** : Timeouts personnalises, annulation gracieuse, logique de retry
163
+
164
+ ### 13. Signal d'annulation (`abort-signal.ts`)
165
+
166
+ **Objectif** : Implementer des annulations initiees par l'utilisateur et le nettoyage.
167
+
168
+ ```bash
169
+ npx tsx examples/abort-signal.ts
170
+ ```
171
+
172
+ **Concepts cles** : Annulation de requete, nettoyage de ressources, controles utilisateur
173
+
174
+ ### 14. Hooks et Callbacks (`hooks-callbacks.ts`)
175
+
176
+ **Objectif** : Utiliser les hooks de cycle de vie et les callbacks de permission dynamiques.
177
+
178
+ ```bash
179
+ npx tsx examples/hooks-callbacks.ts
180
+ ```
181
+
182
+ **Concepts cles** : Hooks PreToolUse/PostToolUse, callback canUseTool, controle de permissions, cycle de vie des evenements
183
+
184
+ ### 15. Outils SDK (`sdk-tools-callbacks.ts`)
185
+
186
+ **Objectif** : Definir et utiliser des outils MCP in-process avec l'Agent SDK.
187
+
188
+ ```bash
189
+ npx tsx examples/sdk-tools-callbacks.ts
190
+ ```
191
+
192
+ **Concepts cles** : Outils in-process, createSdkMcpServer, definitions d'outils, integration MCP
193
+
194
+ ### 16. Gestion des Skills (`skills-management.ts`)
195
+
196
+ **Objectif** : Configurer le support Skills — outils personnalises definis dans les parametres utilisateur ou projet.
197
+
198
+ ```bash
199
+ npx tsx examples/skills-management.ts
200
+ ```
201
+
202
+ **Concepts cles** : Configuration settingSources, permission d'outil Skill, skills utilisateur/projet, avertissements de validation
203
+
204
+ **Ce que vous verrez** : Exemples de configuration montrant comment activer les Skills, avec une demonstration de l'avertissement de validation quand 'Skill' est dans allowedTools mais settingSources n'est pas defini.
205
+
206
+ ### 17. Decouverte de Skills (`skills-discovery.ts`)
207
+
208
+ **Objectif** : Decouvrir et tester programmatiquement les Skills disponibles dans votre environnement Claude Code.
209
+
210
+ ```bash
211
+ npx tsx examples/skills-discovery.ts
212
+ npx tsx examples/skills-discovery.ts --validate
213
+ ```
214
+
215
+ **Concepts cles** : Detection de skills, validation de configuration settingSources, tests de chargement
216
+
217
+ ### 18. Injection mid-stream (`mid-stream-injection.ts`)
218
+
219
+ **Objectif** : Reorienter une query en cours en injectant un nouveau message utilisateur mid-stream.
220
+
221
+ ```bash
222
+ npx tsx examples/mid-stream-injection.ts
223
+ ```
224
+
225
+ **Concepts cles** : Streaming input, `onQueryCreated`, `query.streamInput()`, mises a jour de prompt en direct
226
+
227
+ ### 18. Injection de messages (`message-injection.ts`)
228
+
229
+ **Objectif** : Injecter des messages mid-session pour interrompre, rediriger ou fournir un feedback a l'agent.
230
+
231
+ ```bash
232
+ npx tsx examples/message-injection.ts
233
+ ```
234
+
235
+ **Concepts cles** : Callback `onStreamStart`, `MessageInjector`, suivi de livraison, patterns superviseur, recuperation d'injection echouee
236
+
237
+ **Ce que vous verrez** : Deux exemples demontrant une injection reussie (l'agent arrete d'ecrire des fichiers) et une injection echouee avec recuperation (detection quand l'injection arrive trop tard et retry).
238
+
239
+ ### 20. Agent Teams (`agent-teams.ts`)
240
+
241
+ **Objectif** : Creer une equipe d'agents specialises (recherche, developpement, tests) travaillant ensemble pour accomplir des taches complexes.
242
+
243
+ ```bash
244
+ npx tsx examples/agent-teams.ts
245
+ ```
246
+
247
+ **Concepts cles** : Agents multiples, restriction d'outils par agent, coordination inter-agents, context etendu (1M tokens beta)
248
+
249
+ ## Generation d'objets (Structured Output)
250
+
251
+ > **Support natif** : La generation d'objets utilise l'option native `outputFormat` du SDK avec constrained decoding, fournissant du JSON conforme au schema pour les fonctionnalites JSON Schema **supportees**.
252
+ >
253
+ > **Important** : Evitez `.email()`, `.url()`, `.uuid()`, `.datetime()` et les regex complexes avec lookaheads — ceux-ci produisent des annotations JSON Schema `format` et `pattern` qui causent un fallback silencieux du CLI Claude Code vers du texte libre. Utilisez `.describe()` avec des hints de format a la place (ex: `z.string().describe('Adresse email (ex: user@example.com)')`) et validez cote client si une conformite stricte est necessaire.
254
+
255
+ ### 19. Generation d'objets (`generate-object.ts`)
256
+
257
+ **Objectif** : Patterns de generation d'objets de base — du simple au complexe : primitives, tableaux, champs optionnels, enums, objets imbriques et imbrication profonde.
258
+
259
+ ```bash
260
+ npx tsx examples/generate-object.ts
261
+ ```
262
+
263
+ **Concepts cles** : Bases des schemas, complexite progressive, structures imbriquees, bonnes pratiques
264
+
265
+ ### 20. Contraintes de validation (`generate-object-constraints.ts`)
266
+
267
+ **Objectif** : Garantir la qualite des donnees avec des plages numeriques, patterns regex simples, limites de longueur de tableaux, enums et multipleOf.
268
+
269
+ ```bash
270
+ npx tsx examples/generate-object-constraints.ts
271
+ ```
272
+
273
+ **Concepts cles** : Min/max/int numeriques, patterns regex (sans lookaheads), contraintes de tableaux, validations combinees complexes
274
+
275
+ ### 21. Stream d'objets (`stream-object.ts`)
276
+
277
+ **Objectif** : Recevoir des objets partiels incrementaux pendant que l'IA genere des donnees structurees, permettant des mises a jour UI en temps reel.
278
+
279
+ ```bash
280
+ npx tsx examples/stream-object.ts
281
+ ```
282
+
283
+ **Concepts cles** : Streaming d'objets partiels, mises a jour en temps reel, progression champ par champ, API `streamObject()`
284
+
285
+ ### 22. Repro Structured Output (`structured-output-repro.ts`)
286
+
287
+ **Objectif** : Reproduire les fallbacks CLI de structured output pour certaines fonctionnalites JSON Schema.
288
+
289
+ ```bash
290
+ npx tsx examples/structured-output-repro.ts
291
+ ```
292
+
293
+ **Concepts cles** : Contraintes `format`, limitations regex, comportement de fallback
294
+
295
+ ### 24. Compatibilite Zod 4 (`zod4-compatibility-test.ts`)
296
+
297
+ **Objectif** : Tester la compatibilite complete du provider avec Zod 4 — schemas basiques, fonctions, objets imbriques, unions discriminees, validations.
298
+
299
+ ```bash
300
+ npx tsx examples/zod4-compatibility-test.ts
301
+ ```
302
+
303
+ **Concepts cles** : Schemas Zod 4, nouvelle API function, discriminated unions, validations string/number, compatibilite provider
304
+
305
+ ## Tests et depannage
306
+
307
+ ### 23. Test d'integration (`integration-test.ts`)
308
+
309
+ **Objectif** : Suite de tests complete pour verifier votre installation et toutes les fonctionnalites.
310
+
311
+ ```bash
312
+ npx tsx examples/integration-test.ts
313
+ ```
314
+
315
+ **Concepts cles** : Verification des fonctionnalites, gestion d'erreur, patterns de test
316
+
317
+ ### 24. Verification CLI (`check-cli.ts`)
318
+
319
+ **Objectif** : Outil de depannage pour verifier l'installation et l'authentification du CLI.
320
+
321
+ ```bash
322
+ npx tsx examples/check-cli.ts
323
+ ```
324
+
325
+ **Concepts cles** : Verification d'installation, diagnostic d'erreurs, etapes de depannage
326
+
327
+ ### 25. Limitations (`limitations.ts`)
328
+
329
+ **Objectif** : Comprendre quelles fonctionnalites AI SDK ne sont pas supportees par le CLI.
330
+
331
+ ```bash
332
+ npx tsx examples/limitations.ts
333
+ ```
334
+
335
+ **Concepts cles** : Parametres non supportes, solutions de contournement, contraintes du provider
336
+
337
+ ## Patterns courants
338
+
339
+ ### Generation d'objets
340
+
341
+ ```typescript
342
+ import { generateObject } from 'ai';
343
+ import { z } from 'zod';
344
+
345
+ const { object } = await generateObject({
346
+ model: claudeCode('haiku'),
347
+ schema: z.object({
348
+ name: z.string(),
349
+ age: z.number(),
350
+ // Utiliser .describe() au lieu de .email() — les contraintes format causent un fallback CLI
351
+ email: z.string().describe('Adresse email (ex: user@example.com)'),
352
+ }),
353
+ prompt: 'Generer un profil utilisateur aleatoire',
354
+ });
355
+ ```
356
+
357
+ ### Gestion d'erreur
358
+
359
+ ```typescript
360
+ import { isAuthenticationError } from '../dist/index.js';
361
+
362
+ try {
363
+ // Votre code ici
364
+ } catch (error) {
365
+ if (isAuthenticationError(error)) {
366
+ console.error('Veuillez executer : claude login');
367
+ }
368
+ }
369
+ ```
370
+
371
+ ### Historique de messages pour les conversations
372
+
373
+ ```typescript
374
+ import type { ModelMessage } from 'ai';
375
+
376
+ const messages: ModelMessage[] = [
377
+ { role: 'user', content: 'Bonjour, je m\'appelle Alice' },
378
+ { role: 'assistant', content: 'Enchantee, Alice !' },
379
+ { role: 'user', content: 'Qu\'est-ce que je viens de te dire ?' },
380
+ ];
381
+
382
+ const { text } = await generateText({
383
+ model: claudeCode('haiku'),
384
+ messages,
385
+ });
386
+ ```
387
+
388
+ ### Reponses en streaming
389
+
390
+ ```typescript
391
+ import { streamText } from 'ai';
392
+
393
+ const result = streamText({
394
+ model: claudeCode('haiku'),
395
+ prompt: 'Ecris une histoire...',
396
+ });
397
+
398
+ // Streamer la reponse en temps reel
399
+ for await (const chunk of result.textStream) {
400
+ process.stdout.write(chunk);
401
+ }
402
+ ```
403
+
404
+ ### Timeouts personnalises
405
+
406
+ ```typescript
407
+ const controller = new AbortController();
408
+ const timeoutId = setTimeout(() => controller.abort(), 300000); // 5 minutes
409
+
410
+ try {
411
+ const { text } = await generateText({
412
+ model: claudeCode('haiku'),
413
+ prompt: 'Analyse complexe...',
414
+ abortSignal: controller.signal,
415
+ });
416
+ clearTimeout(timeoutId);
417
+ } catch (error) {
418
+ // Gerer le timeout
419
+ }
420
+ ```
421
+
422
+ ### Configuration du logging
423
+
424
+ ```typescript
425
+ import type { Logger } from '../dist/index.js';
426
+
427
+ // Defaut : warn et error uniquement
428
+ const result1 = streamText({
429
+ model: claudeCode('haiku'),
430
+ prompt: 'Bonjour',
431
+ });
432
+
433
+ // Verbose : tous les niveaux de log
434
+ const result2 = streamText({
435
+ model: claudeCode('haiku', { verbose: true }),
436
+ prompt: 'Bonjour',
437
+ });
438
+
439
+ // Logger personnalise
440
+ const customLogger: Logger = {
441
+ debug: (msg) => myLogger.debug(msg),
442
+ info: (msg) => myLogger.info(msg),
443
+ warn: (msg) => myLogger.warn(msg),
444
+ error: (msg) => myLogger.error(msg),
445
+ };
446
+
447
+ const result3 = streamText({
448
+ model: claudeCode('haiku', {
449
+ verbose: true,
450
+ logger: customLogger,
451
+ }),
452
+ prompt: 'Bonjour',
453
+ });
454
+
455
+ // Desactiver tous les logs
456
+ const result4 = streamText({
457
+ model: claudeCode('haiku', { logger: false }),
458
+ prompt: 'Bonjour',
459
+ });
460
+ ```
461
+
462
+ ## Reference rapide
463
+
464
+ | Exemple | Cas d'usage principal | Fonctionnalite cle |
465
+ | --- | --- | --- |
466
+ | basic-usage | Demarrage rapide | Generation de texte simple |
467
+ | streaming | UIs reactives | Sortie en temps reel |
468
+ | tool-streaming | Observabilite outils | Inspection evenements outils |
469
+ | images | Prompts multimodaux | Support d'images |
470
+ | conversation-history | Chatbots | Preservation du contexte |
471
+ | logging-default | Comportement par defaut | Warn/error uniquement |
472
+ | logging-verbose | Dev/debogage | Tous les niveaux de log |
473
+ | logging-custom-logger | Integration externe | Logger personnalise |
474
+ | logging-disabled | Operation silencieuse | Aucun log |
475
+ | custom-config | Configuration entreprise | Options de configuration |
476
+ | tool-management | Securite | Controle d'acces |
477
+ | hooks-callbacks | Gestion d'evenements | Hooks de cycle de vie |
478
+ | sdk-tools-callbacks | Outils personnalises | Outils MCP in-process |
479
+ | skills-management | Configuration Skills | Configuration settingSources |
480
+ | skills-discovery | Decouverte de Skills | Detection, validation |
481
+ | agent-teams | Equipes d'agents | Agents multiples, coordination |
482
+ | long-running-tasks | Raisonnement complexe | Gestion des timeouts |
483
+ | generate-object | Generation d'objets | Patterns de base et imbrication |
484
+ | generate-object-constraints | Validation | Regex, plages, enums |
485
+ | stream-object | UI temps reel | Mises a jour d'objets partiels |
486
+ | structured-output-repro | Depannage | Repro fallback schema |
487
+ | zod4-compatibility-test | Compatibilite Zod 4 | Schemas, validations, unions |
488
+ | limitations | Vue d'ensemble contraintes | Fonctionnalites non supportees |
489
+
490
+ ## Parcours d'apprentissage
491
+
492
+ 1. **Debutants** : Commencer avec `basic-usage.ts` → `streaming.ts` → `conversation-history.ts`
493
+ 2. **Images et outils** : `images.ts` → `tool-streaming.ts` pour comprendre les entrees multimodales et les evenements d'outils
494
+ 3. **Logging** : `logging-default.ts` → `logging-verbose.ts` → `logging-custom-logger.ts` → `logging-disabled.ts`
495
+ 4. **Generation d'objets** : `generate-object.ts` → `generate-object-constraints.ts` → `stream-object.ts`
496
+ 5. **Avance** : `custom-config.ts` → `tool-management.ts` → `skills-management.ts` → `hooks-callbacks.ts` → `sdk-tools-callbacks.ts` → `long-running-tasks.ts`
497
+ 6. **Tests/Depannage** : Executer `integration-test.ts`, puis `structured-output-repro.ts` et `limitations.ts` si le comportement semble incorrect
498
+
499
+ Pour plus de details, voir le [README principal](../../README.md).
@@ -0,0 +1,125 @@
1
+ import { generateText, streamText } from 'ai';
2
+ import { claudeCode } from '../dist/index.js';
3
+ // NOTE: Migrating to Claude Agent SDK:
4
+ // - System prompt is not applied by default
5
+ // - Filesystem settings (CLAUDE.md, settings.json) are not loaded by default
6
+ // To restore old behavior, set:
7
+ // systemPrompt: { type: 'preset', preset: 'claude_code' }
8
+ // settingSources: ['user', 'project', 'local']
9
+
10
+ /**
11
+ * Example: Request Cancellation with AbortController
12
+ *
13
+ * This example demonstrates how to cancel in-progress requests using AbortSignal.
14
+ * Useful for implementing timeouts, user cancellations, or cleaning up on unmount.
15
+ */
16
+
17
+ // Suppress uncaught abort errors from child processes
18
+ process.on('uncaughtException', (err: any) => {
19
+ if (err.code === 'ABORT_ERR') {
20
+ // Silently ignore abort errors - they're expected
21
+ return;
22
+ }
23
+ // Re-throw other errors
24
+ throw err;
25
+ });
26
+
27
+ async function main() {
28
+ console.log('🚀 Testing request cancellation with AbortController\n');
29
+
30
+ // Example 1: Cancel a non-streaming request after 2 seconds
31
+ console.log('1. Testing cancellation of generateText after 2 seconds...');
32
+ try {
33
+ const controller = new AbortController();
34
+
35
+ // Cancel after 2 seconds
36
+ const timeout = setTimeout(() => {
37
+ console.log(' ⏱️ Cancelling request...');
38
+ controller.abort();
39
+ }, 2000);
40
+
41
+ const { text } = await generateText({
42
+ model: claudeCode('opus'),
43
+ prompt:
44
+ 'Write a very long detailed essay about the history of computing. Include at least 10 paragraphs.',
45
+ abortSignal: controller.signal,
46
+ });
47
+
48
+ clearTimeout(timeout);
49
+ console.log(' ✅ Completed:', text.slice(0, 100) + '...');
50
+ } catch (error: any) {
51
+ if (error.name === 'AbortError' || error.message?.includes('aborted')) {
52
+ console.log(' ✅ Request successfully cancelled');
53
+ } else {
54
+ console.error(' ❌ Error:', error.message);
55
+ }
56
+ }
57
+
58
+ console.log('\n2. Testing immediate cancellation (before request starts)...');
59
+ try {
60
+ const controller = new AbortController();
61
+
62
+ // Cancel immediately
63
+ controller.abort();
64
+
65
+ await generateText({
66
+ model: claudeCode('opus'),
67
+ prompt: 'This should not execute',
68
+ abortSignal: controller.signal,
69
+ });
70
+
71
+ console.log(' ❌ This should not be reached');
72
+ } catch (error: any) {
73
+ if (error.name === 'AbortError' || error.message?.includes('aborted')) {
74
+ console.log(' ✅ Request cancelled before execution');
75
+ } else {
76
+ console.error(' ❌ Error:', error.message);
77
+ }
78
+ }
79
+
80
+ console.log('\n3. Testing streaming cancellation after partial response...');
81
+ try {
82
+ const controller = new AbortController();
83
+ let charCount = 0;
84
+
85
+ const { textStream } = streamText({
86
+ model: claudeCode('opus'),
87
+ prompt: 'Count slowly from 1 to 20, explaining each number.',
88
+ abortSignal: controller.signal,
89
+ });
90
+
91
+ console.log(' Streaming response: ');
92
+ for await (const chunk of textStream) {
93
+ process.stdout.write(chunk);
94
+ charCount += chunk.length;
95
+
96
+ // Cancel after receiving 100 characters
97
+ if (charCount > 100) {
98
+ console.log('\n ⏱️ Cancelling stream after', charCount, 'characters...');
99
+ controller.abort();
100
+ break;
101
+ }
102
+ }
103
+ } catch (error: any) {
104
+ if (error.name === 'AbortError' || error.message?.includes('aborted')) {
105
+ console.log(' ✅ Stream successfully cancelled');
106
+ } else {
107
+ console.error(' ❌ Error:', error.message);
108
+ }
109
+ }
110
+
111
+ console.log('\n✅ AbortSignal examples completed');
112
+ console.log('\nUse cases for AbortSignal:');
113
+ console.log('- User-initiated cancellations (e.g., "Stop generating" button)');
114
+ console.log('- Component unmount cleanup in React/Vue');
115
+ console.log('- Request timeouts');
116
+ console.log('- Rate limiting and request management');
117
+
118
+ console.log('\nNote: This example suppresses ABORT_ERR uncaught exceptions');
119
+ console.log(' which are expected when cancelling child processes.');
120
+
121
+ // Exit cleanly
122
+ process.exit(0);
123
+ }
124
+
125
+ main().catch(console.error);