Skip to main content
Select language: current language is Portuguese
Pesquisar ou perguntar ao Copilot
Abrir menu

Servidor ACP da CLI do Copilot

Saiba mais sobre CLI do GitHub Copiloto servidor do Protocolo do Cliente do Agente.

Observação

O suporte à ACP CLI do GitHub Copilot se encontra em versão prévia pública e está sujeito a alterações.

Visão geral

O Protocolo de Cliente do Agente (ACP) é um protocolo que padroniza a comunicação entre clientes (como editores de código e IDEs) e agentes (como CLI do Copilot). Para obter mais detalhes sobre esse protocolo, consulte a introdução oficial.

Casos de uso

  •         **Integrações do IDE:** Crie Copilot suporte em qualquer editor ou ambiente de desenvolvimento.
    
  •         **Pipelines de CI/CD:** Orquestrar tarefas de codificação autônomas em fluxos de trabalho automatizados.
    
  •         **Front-ends personalizados:** Crie interfaces especializadas para fluxos de trabalho de desenvolvedor específicos.
    
  •         **Sistemas de vários agentes:** Coordene Copilot com outros agentes de IA usando um protocolo padrão.
    

Iniciando o servidor ACP

          CLI do GitHub Copilot pode ser iniciado como um servidor ACP usando o `--acp` sinalizador. O servidor dá suporte a dois modos `stdio` e `TCP`.

Por padrão, ao fornecer o sinalizador --acp, o modo stdio será inferido. O --stdio sinalizador também pode ser fornecido para desambiguação.

copilot --acp --stdio

Modo TCP

Se o sinalizador --port for fornecido em combinação com o sinalizador --acp, o servidor será iniciado no modo TCP.

copilot --acp --port 3000

Integração com o servidor ACP

Há um ecossistema crescente de bibliotecas para interagir programaticamente com servidores ACP. Dado CLI do GitHub Copilot que está instalado e autenticado corretamente, o exemplo a seguir demonstra o uso do cliente typescript para enviar um único prompt e imprimir a resposta da IA.

import * as acp from "@agentclientprotocol/sdk";
import { spawn } from "node:child_process";
import { Readable, Writable } from "node:stream";

async function main() {
  const executable = process.env.COPILOT_CLI_PATH ?? "copilot";

  // ACP uses standard input/output (stdin/stdout) for transport; we pipe these for the NDJSON stream.
  const copilotProcess = spawn(executable, ["--acp", "--stdio"], {
    stdio: ["pipe", "pipe", "inherit"],
  });

  if (!copilotProcess.stdin || !copilotProcess.stdout) {
    throw new Error("Failed to start Copilot ACP process with piped stdio.");
  }

  // Create ACP streams (NDJSON over stdio)
  const output = Writable.toWeb(copilotProcess.stdin) as WritableStream<Uint8Array>;
  const input = Readable.toWeb(copilotProcess.stdout) as ReadableStream<Uint8Array>;
  const stream = acp.ndJsonStream(output, input);

  const client: acp.Client = {
    async requestPermission(params) {
      // This example should not trigger tool calls; if it does, refuse.
      return { outcome: { outcome: "cancelled" } };
    },

    async sessionUpdate(params) {
      const update = params.update;

      if (update.sessionUpdate === "agent_message_chunk" && update.content.type === "text") {
        process.stdout.write(update.content.text);
      }
    },
  };

  const connection = new acp.ClientSideConnection((_agent) => client, stream);

  await connection.initialize({
    protocolVersion: acp.PROTOCOL_VERSION,
    clientCapabilities: {},
  });

  const sessionResult = await connection.newSession({
    cwd: process.cwd(),
    mcpServers: [],
  });

  process.stdout.write("Session started!\n");
  const promptText = "Hello ACP Server!";
  process.stdout.write(`Sending prompt: '${promptText}'\n`);

  const promptResult = await connection.prompt({
    sessionId: sessionResult.sessionId,
    prompt: [{ type: "text", text: promptText }],
  });

  process.stdout.write("\n");

  if (promptResult.stopReason !== "end_turn") {
    process.stderr.write(`Prompt finished with stopReason=${promptResult.stopReason}\n`);
  }

  // Best-effort cleanup
  copilotProcess.stdin.end();
  copilotProcess.kill("SIGTERM");
  await new Promise<void>((resolve) => {
    copilotProcess.once("exit", () => resolve());
    setTimeout(() => resolve(), 2000);
  });
}

main().catch((error) => {
  console.error(error);
  process.exitCode = 1;
});

Leitura adicional

  •         [Documentação oficial da ACP](https://agentclientprotocol.com/protocol/overview)
    
Morty Proxy This is a proxified and sanitized view of the page, visit original site.