# Effacement du contexte et outils du terminal

Utilisez session.history.clearContext lorsqu’un hôte doit remplacer le contexte de conversation actuel sans remplacer la session. Parmi les utilisations courantes figurent les transferts et les stratégies de cycle de vie du contexte géré par l’hôte.

<!-- markdownlint-disable GHD046 GHD005 -->
<!-- Suppressed: GHD046 (outdated release terminology), GHD005 (hardcoded data variable) -->

L’effacement du contexte diffère de la création d’une nouvelle session : il conserve l’identité de session, les messages système et développeur, la configuration et le journal des événements lors de la suppression de la conversation orientée modèle.

> [!IMPORTANT]
> `clearContext` est une primitive de gestionnaire d’outils. Le runtime rejette les appels effectués sans appel d’outil en cours d’exécution, les appels avec une invite initiale vide et les appels sur les sessions à distance.

## Définir un outil d’effacement de contexte

Un outil d’effacement de contexte réussi doit être terminal. Sinon, la boucle de l’agent peut effectuer un autre appel de modèle sur la fenêtre nouvellement effacée avant de démarrer le tour initialisé.

```typescript
import { approveAll, CopilotClient, defineTool } from "@github/copilot-sdk";
import type { CopilotSession } from "@github/copilot-sdk";
import { z } from "zod";

const client = new CopilotClient();
let session: CopilotSession;

session = await client.createSession({
  onPermissionRequest: approveAll,
  tools: [
    defineTool("clear_context", {
      description: "Clear the conversation and start a fresh context window",
      parameters: z.object({ prompt: z.string() }),
      isTerminal: true,
      defer: "never",
      handler: async ({ prompt }) => {
        const { messagesCleared } =
          await session.rpc.history.clearContext({ prompt });
        return `Cleared ${messagesCleared} messages.`;
      },
    }),
  ],
});
```

Le message requis `prompt` devient le premier message utilisateur dans le contexte nouveau. Une opération d’effacement réussie émet `session.context_cleared` avec le nombre de messages supprimés et le message initial.

## Comportement de l’outil terminal

`isTerminal` met fin au tour actuel de l’agent uniquement si l’outil réussit. Une erreur de défaillance, de déni, de rejet, de délai d’expiration ou de validation d’entrée reste visible pour le modèle afin qu’il puisse récupérer ou réessayer.

L’option suit les conventions d’affectation de noms de chaque langue :

| SDK | Option de l’outil |
|---|---|
| Node.js | `isTerminal` |
| Python | `is_terminal` |
| Go | `IsTerminal` |
| .NET | `CopilotToolOptions.IsTerminal` |
| Java | 
`ToolDefinition.isTerminal(true)` ou `@CopilotTool(isTerminal = true)` |
| Rust | `with_is_terminal(true)` |

Utilisez la terminalité uniquement pour les outils dont l’exécution réussie doit mettre fin au tour. Les outils ordinaires doivent le laisser non défini.