Référence de SDK d’agent Cortex Code Agent – TypeScript

Cette rubrique fournit le référence d’API complète pour le SDK d’Agent Cortex Code pour TypeScript, y compris l’ensemble des fonctions, types et interfaces.

Installation

npm install cortex-code-agent-sdk

Nécessite Node.js 18 ou version supérieure. Le paquet est en ESM uniquement. Le SDK attend la CLI Cortex Code à installer séparément. Si ce n’est pas sur votre PATH, définissez CORTEX_CODE_CLI_PATH=/path/to/cortex ou transférez cliPath dans les options de session.

Fonctions

query()

La fonction principale pour interagir avec Cortex Code. Crée un générateur asynchrone qui diffuse les messages à mesure qu’ils arrivent.

function query({
  prompt,
  options,
}: {
  prompt: string | AsyncIterable<SDKUserMessage>;
  options?: CortexCodeSessionOptions;
}): Query;

Paramètres

Paramètre

Type

Description

prompt

string | AsyncIterable<SDKUserMessage>

Une seule invite utilisateur ou un itérable asynchrone des messages utilisateur du SDK pour la saisie de flux

options

CortexCodeSessionOptions | undefined

Objet de configuration facultatif (voir Options)

Returns

Un objet Query qui étend AsyncGenerator<CortexCodeEvent> avec des méthodes de contrôle supplémentaires.

Exemple

import { query } from "cortex-code-agent-sdk";

for await (const message of query({
  prompt: "Fix the bug in utils.py",
  options: { cwd: "/path/to/project" },
})) {
  if (message.type === "assistant") {
    for (const block of message.content) {
      if (block.type === "text") {
        process.stdout.write(block.text);
      }
    }
  }
  if (message.type === "result") {
    console.log("Done:", message.subtype);
  }
}

createCortexCodeSession()

Crée une session persistante pour les conversations à plusieurs tours.

function createCortexCodeSession(
  options: CortexCodeSessionOptions
): Promise<CortexCodeSession>;

Exemple

import { createCortexCodeSession } from "cortex-code-agent-sdk";

const session = await createCortexCodeSession({
  cwd: process.cwd(),
  model: "claude-sonnet-4-6",
  permissionMode: "bypassPermissions",
  allowDangerouslySkipPermissions: true,
});

await session.send("What files are here?");
for await (const event of session.stream()) {
  if (event.type === "assistant") { /* handle */ }
  if (event.type === "result") break;
}

// Send another prompt (same context)
await session.send("Now refactor the main function");
for await (const event of session.stream()) {
  if (event.type === "result") break;
}

await session.close();

Objet de requête

Renvoyé par query(). Étend AsyncGenerator<CortexCodeEvent>

Méthode

Description

interrupt(): Promise<void>

Envoyer SIGINT vers le processus sous-jacent

setPermissionMode(mode: PermissionMode): Promise<void>

Modifier le mode d’autorisation pour les tours suivants dans la requête active

setModel(model: string): Promise<void>

Modifier le modèle pour les tours suivants

initializationResult(): Promise<QueryInitializationResult>

Renvoyer les métadonnées « initialize-handshake » à partir de la CLI

supportedCommands(): Promise<SlashCommand[]>

Renvoyer les métadonnées de la commande Slash à partir de la réponse d’initialisation, lorsqu’elles sont annoncées par la CLI

supportedModels(): Promise<ModelInfo[]>

Renvoyer les métadonnées du modèle à partir de la réponse d’initialisation, lorsqu’elles sont annoncées par la CLI

supportedAgents(): Promise<AgentInfo[]>

Renvoyer les métadonnées de l’agent personnalisé à partir de la réponse d’initialisation, lorsqu’elles sont annoncées par la CLI

accountInfo(): Promise<AccountInfo>

Renvoyer les métadonnées du compte à partir de la réponse d’initialisation, lorsqu’elles sont annoncées par la CLI

streamInput(stream: AsyncIterable<SDKUserMessage>): Promise<void>

Messages utilisateur du SDK supplémentaire de flux dans la requête active

stopTask(taskId: string): Promise<void>

Annuler une tâche d’arrière-plan en cours d’exécution par ID

close(): void

Fermer la session et mettre fin au processus

Interface CortexCodeSession

Renvoyé par createCortexCodeSession(). Prend en charge les conversations à plusieurs tours et met en œuvre AsyncDisposable pour une utilisation avec await using (Node.js 24+).

Propriété / Méthode

Description

pid: number | undefined

PID du processus CLI sous-jacent

send(message: string | SDKUserMessage): Promise<void>

Envoyer un texte brut ou un message utilisateur du SDK structuré

stream(): AsyncGenerator<CortexCodeEvent>

Streamer les événements de l’agent

initializationResult(): Promise<QueryInitializationResult>

Renvoyer les métadonnées « initialize-handshake » à partir de la CLI

interrupt(): Promise<void>

Envoyer un signal d’interruption

setPermissionMode(mode: PermissionMode): Promise<void>

Modifier le mode d’autorisation pour les tours suivants dans la session

setModel(model: string): Promise<void>

Modifier le modèle en cours de session

stopTask(taskId: string): Promise<void>

Annuler une tâche d’arrière-plan en cours d’exécution par ID

close(): Promise<void>

Terminer la session et terminer le processus

[Symbol.asyncDispose](): Promise<void>

Appelle close(). Active la syntaxe await using session = ....

Options

Configuration transmise à query() ou createCortexCodeSession().

Option

Type

Par défaut

Description

cwd

string

Répertoire de travail du processus actuel

Répertoire de travail pour la session. S’il est omis, le SDK hérite du répertoire de travail du processus actuel.

model

string

CLI par défaut

Modèle à utiliser. Utilisez "auto" pour la sélection automatique, ou un identificateur spécifique comme "claude-sonnet-4-6". Voir Modèles pris en charge.

connection

string

CLI par défaut

Nom de la connexion Snowflake à partir des paramètres de la connexion CLI , généralement ~/.snowflake/connections.toml, avec ~/.snowflake/config.toml également pris en charge pour les configurations existantes. S’il est omis, la CLI utilise default_connection_name du fichier TOML. Voir Configuration des connexions.

profile

string

undefined

Nom du profil (chargements à partir de ~/.snowflake/cortex/profiles/)

resume

string

undefined

ID de session pour reprendre une conversation précédente.

continue

boolean

false

Poursuivre la conversation la plus récente. Reprend la dernière session sans avoir besoin d’un ID de session.

forkSession

boolean

false

Créez un fork de session reprise pour créer un ID de nouvelle session au lieu de continuer sur place. Utilisez avec resume.

sessionId

string

undefined

ID de session explicite pour la conversation. S’il est omis, la CLI en génère un automatiquement.

permissionMode

string

"default"

"default" | "autoAcceptPlans" | "plan" | "bypassPermissions". Remarque :"bypassPermissions" nécessite allowDangerouslySkipPermissions: true. En mode "plan",``AskUserQuestion`` et ExitPlanMode peuvent être acheminés par canUseTool ; refuser ExitPlanMode garde la planification active et l’approuver fait quitter le mode de planification pour que les tours suivants reprennent les autorisations normales.

allowDangerouslySkipPermissions

boolean

false

Indicateur de sécurité requis lors de l’utilisation de permissionMode: "bypassPermissions". Cet indicateur seul ne contourne pas les autorisations ; il n’autorise le contournement que lorsqu’il est explicitement demandé via permissionMode.

allowedTools

string[]

undefined

Outils pour approuver automatiquement sans invite

disallowedTools

string[]

undefined

Outils pour toujours refuser

canUseTool

CanUseTool

undefined

Gestionnaire d’autorisation personnalisé appelé avant chaque exécution d’outil. Voir Rappel de canUseTool.

permissionPromptToolName

string

undefined

Nom de l’outil MCP utilisé pour les invites d’autorisation. Lorsque canUseTool est fourni, le SDK utilise automatiquement "stdio".

maxTurns

number

undefined

Nombre maximum de tours agentiques avant l’arrêt. Lorsqu’il est atteint, la session émet un résultat error_max_turns.

effort

string

undefined

Niveau d’effort de réflexion pour le modèle. L’un des niveaux suivants : "minimal", "low", "medium", "high", ou "max".

additionalDirectories

string[]

undefined

Répertoires de travail supplémentaires à mettre à la disposition de la session

plugins

Array<string | { type: "local"; path: string }>

undefined

Répertoires du plugin à charger. Accepte les chemins sous forme de chaînes ou d’objets { type: "local", path: "..." }.

env

Record<string, string | undefined>

undefined

Variables d’environnement fusionnées dans l’environnement de processus généré. Définissez une clé sur undefined pour supprimer une variable héritée.

abortController

AbortController

undefined

Envoyez un signal d’interruption en appelant abort() sur le contrôleur. La session reste active pour d’autres invites. Pareil que d’appuyer sur ESC dans la CLI.

systemPrompt

string | SystemPromptPreset

undefined

Invite système personnalisée. Transmettez une chaîne pour remplacer entièrement la valeur par défaut, ou un SystemPromptPreset pour l’étendre.

appendSystemPrompt

string

undefined

Texte ajouté à l’invite système par défaut. Utilisez cette option pour ajouter des instructions sans remplacer l’invite intégrée.

hooks

Partial<Record<HookEvent, HookMatcher[]>>

undefined

Rappels de hook pour intercepter l’exécution de l’outil et d’autres événements d’agent. Voir Hooks.

settingSources

SettingSource[]

undefined

Définition des sources à charger. Tableau de "user", "project", et/ou "local".

includePartialMessages

boolean

false

Inclure les événements de streaming au niveau du jeton

mcpServers

Record<string, Record<string, unknown>>

undefined

Configurations de serveur MCP externes. Les clés sont des noms de serveur, les valeurs sont des configurations de serveur (par exemple, { command: "node", args: ["server.js"] }). Voir Serveurs MCP.

noMcp

boolean

false

Désactiver les serveurs MCP

outputFormat

{ type: "json_schema"; schema: object }

undefined

Sortie structurée – valide la réponse finale par rapport au schéma JSON

cliPath

string

process.env.CORTEX_CODE_CLI_PATH ?? "cortex"

Chemin vers binaire CLI personnalisé. S’il est omis, le SDK contrôle d’abord CORTEX_CODE_CLI_PATH et, sinon, revient à cortex sur PATH.

extraArgs

Record<string, string | null>

undefined

Arguments CLI supplémentaires en tant que paires clé-valeur

Rappel de canUseTool

Un gestionnaire d’autorisation personnalisé appelé avant chaque exécution d’outil. Renvoie un résultat d’autorisation ou de refus pour contrôler si l’appel de l’outil se poursuit.

Pour de nombreux contrôles d’autorisation d’outils ordinaires, l’entrée du rappel contient des champs tels que { action, resource }. Le résultat d’autorisation/de refus et le message de refus facultatif sont utilisés pour ces contrôles. updatedInput est utilisé pour les pseudo-outils routés via le SDK tels que AskUserQuestion et ExitPlanMode, qui contiennent des champs spécifiques à l’outil.

type CanUseTool = (
  toolName: string,
  input: Record<string, unknown>,
  context: ToolPermissionContext,
) => Promise<PermissionResult>;

type ToolPermissionContext = {
  signal: AbortSignal;
  blockedPath?: string;
  decisionReason?: string;
  toolUseID: string;
  agentID?: string;
};

type PermissionResult = PermissionResultAllow | PermissionResultDeny;

type PermissionResultAllow = {
  behavior: "allow";
  updatedInput?: Record<string, unknown>;
  toolUseID?: string;
};

type PermissionResultDeny = {
  behavior: "deny";
  message?: string;
  interrupt?: boolean;
  toolUseID?: string;
};

Exemple

const session = await createCortexCodeSession({
  cwd: process.cwd(),
 canUseTool: async (toolName, input, context) => {
   if (toolName === "Write" && String(input.resource).endsWith(".env")) {
     return { behavior: "deny", message: "Destructive commands not allowed" };
   }
   return { behavior: "allow" };
  },
});

SystemPromptPreset

Au lieu de remplacer entièrement l’invite système, utilisez un objet prédéfini pour étendre l’invite intégrée.

type SystemPrompt = string | SystemPromptPreset;

type SystemPromptPreset = {
  type: "preset";
  append?: string;
};

Exemple

// Replace the system prompt entirely
const session1 = await createCortexCodeSession({
  cwd: process.cwd(),
  systemPrompt: "You are a code reviewer. Prioritize finding issues and suggesting fixes.",
});

// Extend the default prompt
const session2 = await createCortexCodeSession({
  cwd: process.cwd(),
  systemPrompt: {
    type: "preset",
    append: "Always write tests for any code you create.",
  },
});

Hooks

Les hooks vous permettent d’intercepter les événements de l’agent tels que l’exécution de l’outil. Chaque événement de hook correspond à un tableau de correspondances, et chaque correspondance contient un modèle facultatif et un ou plusieurs rappels.

type HookEvent =
  | "PreToolUse" | "PostToolUse" | "UserPromptSubmit"
  | "Stop" | "SubagentStop" | "PreCompact"
  | "Notification" | "PermissionRequest";

type HookMatcher = {
  matcher?: string;       // Match value pattern (optional)
  hooks: HookCallback[];
  timeout?: number;       // Timeout in seconds
};

type HookCallback = (
  input: HookInput,
  toolUseId: string | null,
  context: HookContext,
) => Promise<HookOutput>;

Exemple

const session = await createCortexCodeSession({
  cwd: process.cwd(),
  hooks: {
    PostToolUse: [
      {
        matcher: "Write",
        hooks: [
          async (input, toolUseId, context) => {
            console.log("File written:", input.tool_input?.file_path);
            return { continue: true };
          },
        ],
      },
    ],
  },
});

Types de message

Événements générés par query() et session.stream() :

SDKAssistantMessage

Émis lorsque l’agent produit une réponse. Contient un ou plusieurs blocs de contenu.

type SDKAssistantMessage = {
  type: "assistant";
  content: ContentBlock[];
  message: {
    role: "assistant";
    content: ContentBlock[];
    model: string;
  };
  session_id: string;
}

SDKResultMessage

Émis lorsque l’agent termine un tour. Contrôlez la réussite ou l’erreur de subtype.

type SDKResultMessage =
  | { type: "result"; subtype: "success"; is_error: false; result: string; session_id: string; }
  | { type: "result"; subtype: "error_during_execution" | "error_max_turns" | "error_max_budget_usd";
      is_error: true; errors: string[]; session_id: string; }

SDKUserMessage

Renvoyé lorsqu’un message utilisateur est traité.

type SDKUserMessage = {
  type: "user";
  message: { role: "user"; content: ContentBlock[]; };
  session_id: string;
}

SDKSystemMessage

Événements du système tels que l’initialisation de la session.

type SDKSystemMessage = {
  type: "system";
  subtype: string;  // e.g. "init"
  session_id: string;
}

Blocs de contenu

Type

Champs

TextBlock

{ type: "text", text: string }

ThinkingBlock

{ type: "thinking", thinking: string }

ToolUseBlock

{ type: "tool_use", id: string, name: string, input: object }

ToolResultBlock

{ type: "tool_result", tool_use_id: string, content: string }

Événements en streaming

Type

Description

SDKPartialAssistantMessage

Streaming partiel du texte/de la réflexion (nécessite includePartialMessages: true)

StdErrEvent

{ type: "stderr", data: string } – stderr de la CLI

ParseErrorEvent

{ type: "parse_error", raw: string, error: string }

SDKPartialAssistantMessage est émis pour les blocs de texte partiels et les blocs de réflexion. Les appels complets des outils arrivent toujours sous la forme de blocs``AssistantMessage``, et les résultats des outils arrivent toujours sous la forme de blocs UserMessage.

Sortie structurée

Forcez l’agent à renvoyer une réponse correspondant à un schéma JSON :

const result = query({
  prompt: "Analyze the codebase and return a summary",
  options: {
    cwd: process.cwd(),
    outputFormat: {
      type: "json_schema",
      schema: {
        type: "object",
        properties: {
          languages: { type: "array", items: { type: "string" } },
          file_count: { type: "number" },
          summary: { type: "string" },
        },
        required: ["languages", "file_count", "summary"],
      },
    },
  },
});

for await (const msg of result) {
  if (msg.type === "result" && msg.subtype === "success") {
    // The final text content will be valid JSON matching the schema
  }
}

Pour plus d’informations, voir Sortie structurée.

Traitement des erreurs

try {
  for await (const message of query({ prompt: "...", options: { cwd: "." } })) {
    if (message.type === "result" && message.is_error) {
      console.error("Agent error:", message.errors.join(", "));
    }
  }
} catch (err) {
  // Thrown if the CLI binary is not found, session fails to start, etc.
  console.error("SDK error:", err.message);
}