@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,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);
|