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
- Variables
- func EditorMCP(in []MCPServer, existing []config.MCPServer, lang i18n.Lang) (out []config.MCPServer, notices []string)
- type AfterReply
- type Backend
- type CancelNotification
- type Command
- type Conn
- type ContentBlock
- type EmbeddedResource
- type EnvVariable
- type Error
- type HTTPHeader
- type Handler
- type Implementation
- type InitializeRequest
- type LoadSessionRequest
- type MCPServer
- type NewSessionRequest
- type PromptRequest
- type Server
- type Session
- type SessionInfo
Constants ¶
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 ¶
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 (*Conn) Call ¶
Call envoie une requête agent → client et attend la réponse ou ctx. result peut être nil.
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 ¶
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.
type HTTPHeader ¶
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 ¶
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.
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 ¶
SessionInfo résume une session pour session/list.