Help us shape the future of Go! Take the 2026 Go Developer Survey

acp

package
v0.9.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 28, 2026 License: EUPL-1.2 Imports: 21 Imported by: 0

Documentation

Overview

Package acp implémente l'Agent Client Protocol (JSON-RPC 2.0, un objet JSON par ligne) pour que tenon soit lancé par un éditeur via stdio.

Index

Constants

View Source
const (
	CodeParse          = -32700
	CodeMethodNotFound = -32601
	CodeInvalidParams  = -32602
	// CodeInternal porte aussi les refus de tenon (message tel quel) : ACP
	// réserve -32000 à auth_required.
	CodeInternal       = -32603
	CodeUnknownSession = -32002
)

Codes d'erreur JSON-RPC et ACP.

Variables

View Source
var ErrClosed = errors.New("acp: connection closed")

ErrClosed est renvoyée par Call quand la connexion ne sert plus.

Functions

func EditorMCP

func EditorMCP(in []MCPServer, existing []config.MCPServer, lang i18n.Lang) (out []config.MCPServer, notices []string)

EditorMCP convertit les serveurs MCP transmis par l'éditeur en config.MCPServer, sans en croire les valeurs : stdio devient local sans risque déclaré, http devient non-eu sauf hôte local. Un serveur sse, mal formé ou dont l'identifiant existe déjà (la configuration l'emporte) est ignoré avec une notice. Les valeurs d'environnement et d'en-têtes de l'éditeur ne sont ni conservées ni journalisées : config.MCPServer ne connaît que des noms de variables du processus.

Types

type AfterReply

type AfterReply struct {
	Result any
	Then   func()
}

AfterReply est un résultat de Handler : Result est la réponse et Then, si non nil, s'exécute une fois la ligne de réponse écrite (aussi pour une notification, sans réponse). Sert aux notifications qui doivent suivre la réponse, quand le client n'apprend un identifiant qu'en la lisant.

type Backend

type Backend interface {
	NewSession(ctx context.Context, cwd string, mcp []MCPServer, client *Implementation) (Session, error)
	LoadSession(ctx context.Context, id, cwd string, mcp []MCPServer, client *Implementation) (Session, []event.Event, error)
	// ListSessions renvoie les sessions du projet de cwd (chemin absolu), la
	// plus récente d'abord.
	ListSessions(ctx context.Context, cwd string) ([]SessionInfo, error)
}

Backend crée ou recharge des sessions. Une erreur *Error est transmise telle quelle ; toute autre devient CodeInternal avec son message (ACP réserve -32000 à auth_required).

type CancelNotification

type CancelNotification struct {
	SessionID string `json:"sessionId"`
}

CancelNotification est le corps de session/cancel.

type Command

type Command struct{ Name, Description string }

Command est une commande (skill) annoncée à l'éditeur.

type Conn

type Conn struct {
	// contains filtered or unexported fields
}

Conn est une connexion JSON-RPC 2.0 par lignes. Les écritures sont sérialisées ; chaque requête entrante est traitée dans sa goroutine.

func NewConn

func NewConn(r io.Reader, w io.Writer, h Handler) *Conn

NewConn crée une connexion ; rien n'est lu avant Serve.

func (*Conn) Call

func (c *Conn) Call(ctx context.Context, method string, params, result any) error

Call envoie une requête agent → client et attend la réponse ou ctx. result peut être nil.

func (*Conn) Notify

func (c *Conn) Notify(method string, params any) error

Notify envoie une notification agent → client.

func (*Conn) Serve

func (c *Conn) Serve(ctx context.Context) error

Serve lit les lignes jusqu'à EOF (renvoie nil), l'annulation de ctx ou une erreur de lecture. À son retour, les Call en attente échouent.

type ContentBlock

type ContentBlock struct {
	Type     string            `json:"type"`
	Text     string            `json:"text,omitempty"`
	URI      string            `json:"uri,omitempty"`
	Name     string            `json:"name,omitempty"`
	Resource *EmbeddedResource `json:"resource,omitempty"`
}

ContentBlock : type = text, resource_link, resource, image ou audio.

type EmbeddedResource

type EmbeddedResource struct {
	URI      string `json:"uri"`
	Text     string `json:"text,omitempty"`
	MimeType string `json:"mimeType,omitempty"`
}

EmbeddedResource est le contenu d'un bloc resource.

type EnvVariable

type EnvVariable struct {
	Name  string `json:"name"`
	Value string `json:"value"`
}

EnvVariable est une variable d'environnement d'un serveur MCP stdio.

type Error

type Error struct {
	Code    int    `json:"code"`
	Message string `json:"message"`
	Data    any    `json:"data,omitempty"`
}

Error est une erreur JSON-RPC.

func (*Error) Error

func (e *Error) Error() string

type HTTPHeader

type HTTPHeader struct {
	Name  string `json:"name"`
	Value string `json:"value"`
}

HTTPHeader est un en-tête d'un serveur MCP http.

type Handler

type Handler interface {
	Handle(ctx context.Context, method string, params json.RawMessage) (result any, err error)
}

Handler traite les requêtes et notifications client → agent. Pour une notification, le résultat est ignoré et rien n'est écrit.

type Implementation

type Implementation struct {
	Name    string `json:"name"`
	Version string `json:"version,omitempty"`
}

Implementation décrit un client ou un agent.

type InitializeRequest

type InitializeRequest struct {
	ProtocolVersion    int             `json:"protocolVersion"`
	ClientCapabilities json.RawMessage `json:"clientCapabilities,omitempty"`
	ClientInfo         *Implementation `json:"clientInfo,omitempty"`
}

InitializeRequest est le corps de initialize.

type LoadSessionRequest

type LoadSessionRequest struct {
	SessionID  string      `json:"sessionId"`
	Cwd        string      `json:"cwd"`
	MCPServers []MCPServer `json:"mcpServers"`
}

LoadSessionRequest est le corps de session/load.

type MCPServer

type MCPServer struct {
	Name    string        `json:"name"`
	Command string        `json:"command,omitempty"`
	Args    []string      `json:"args,omitempty"`
	Env     []EnvVariable `json:"env,omitempty"`
	Type    string        `json:"type,omitempty"`
	URL     string        `json:"url,omitempty"`
	Headers []HTTPHeader  `json:"headers,omitempty"`
}

MCPServer est un serveur MCP fourni par l'éditeur.

type NewSessionRequest

type NewSessionRequest struct {
	Cwd        string      `json:"cwd"`
	MCPServers []MCPServer `json:"mcpServers"`
}

NewSessionRequest est le corps de session/new.

type PromptRequest

type PromptRequest struct {
	SessionID string         `json:"sessionId"`
	Prompt    []ContentBlock `json:"prompt"`
}

PromptRequest est le corps de session/prompt.

type Server

type Server struct {
	// contains filtered or unexported fields
}

Server est l'agent ACP : il route les requêtes de l'éditeur vers le Backend.

func NewServer

func NewServer(b Backend, version string, lang i18n.Lang) *Server

NewServer crée un serveur ; rien n'est lu avant Serve.

func (*Server) Handle

func (s *Server) Handle(ctx context.Context, method string, params json.RawMessage) (any, error)

Handle implémente Handler.

func (*Server) Serve

func (s *Server) Serve(ctx context.Context, r io.Reader, w io.Writer) error

Serve sert la connexion jusqu'à EOF ou annulation de ctx, puis ferme toutes les sessions.

type Session

type Session interface {
	ID() string
	ProjectRoot() string
	Subscribe() <-chan event.Event
	Submit(ctx context.Context, in engine.Input) error
	Respond(permissionID string, r engine.Reply) error
	Notices() []string
	Commands() []Command
	OldText(hash string) (string, bool)
	// Redact masque un texte avec le masquage de tenon (texte d'un point de
	// reprise avant de l'envoyer à l'éditeur).
	Redact(s string) string
	// RedactPayload masque une charge utile JSON d'événement avec le
	// masquage de tenon (comme --output json) ; le résultat peut ne plus
	// être du JSON valide.
	RedactPayload(payload string) string
	// Meta est l'objet _meta.tenon des réponses session/new et session/load
	// (fournisseur, isolation, profil…) ; nil ou vide : aucun _meta.
	Meta() map[string]any
	Close()
}

Session est une session d'agent côté tenon.

type SessionInfo

type SessionInfo struct {
	SessionID, Cwd, Title string
	UpdatedAt             time.Time
}

SessionInfo résume une session pour session/list.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL