acp

package module
v0.12.2 Latest Latest
Warning

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

Go to latest
Published: Apr 28, 2026 License: Apache-2.0 Imports: 12 Imported by: 18

README

Agent Client Protocol

ACP Go SDK

Go library for the Agent Client Protocol (ACP) - a standardized communication protocol between code editors and AI‑powered coding agents.

Learn more about the protocol itself at https://agentclientprotocol.com.

Installation

go get github.com/coder/acp-go-sdk@v0.12.2

Get Started

Understand the Protocol

Start by reading the official ACP documentation to understand the core concepts and protocol specification.

Try the Examples

The examples directory contains simple implementations of both Agents and Clients in Go. You can run them from your terminal or connect to external ACP agents.

  • go run ./example/agent starts a minimal ACP agent over stdio.
  • go run ./example/claude-code demonstrates bridging to Claude Code.
  • go run ./example/client connects to a running agent and streams a sample turn.
  • go run ./example/gemini bridges to the Gemini CLI in ACP mode (flags: -model, -sandbox, -debug, -gemini /path/to/gemini).

You can watch the interaction by running go run ./example/client locally.

Explore the API

Browse the Go package docs on pkg.go.dev for detailed API documentation:

If you're building an Agent:

  • Implement the acp.Agent interface (and optionally acp.AgentLoader for session/load).
  • Create a connection with acp.NewAgentSideConnection(agent, os.Stdout, os.Stdin).
  • Send updates and make client requests using the returned connection.

If you're building a Client:

  • Implement the acp.Client interface (and optionally acp.ClientTerminal for terminal features).
  • Launch or connect to your Agent process (stdio), then create a connection with acp.NewClientSideConnection(client, stdin, stdout).
  • Call Initialize, NewSession, and Prompt to run a turn and stream updates.

Helper constructors are provided to reduce boilerplate when working with union types:

  • Content blocks: acp.TextBlock, acp.ImageBlock, acp.AudioBlock, acp.ResourceLinkBlock, acp.ResourceBlock.
  • Tool content: acp.ToolContent, acp.ToolDiffContent, acp.ToolTerminalRef.
  • Utility: acp.Ptr[T] for pointer fields in request/update structs.
Extension methods

ACP supports extension methods for custom JSON-RPC methods whose names start with _. Use them to add functionality without conflicting with future ACP versions.

Handling inbound extension methods

Implement acp.ExtensionMethodHandler on your Agent or Client. Your handler will be invoked for any incoming method starting with _.

// HandleExtensionMethod handles ACP extension methods (names starting with "_").
func (a MyAgent) HandleExtensionMethod(ctx context.Context, method string, params json.RawMessage) (any, error) {
	switch method {
	case "_example.com/hello":
		var p struct {
			Name string `json:"name"`
		}
		if err := json.Unmarshal(params, &p); err != nil {
			return nil, err
		}
		return map[string]any{"greeting": "hello " + p.Name}, nil
	default:
		return nil, acp.NewMethodNotFound(method)
	}
}

Note: Per the ACP spec, unknown extension notifications should be ignored. This SDK suppresses noisy logs for unhandled extension notifications that return “Method not found”.

Calling extension methods

From either side, use CallExtension / NotifyExtension on the connection.

raw, err := conn.CallExtension(ctx, "_example.com/hello", map[string]any{"name": "world"})
if err != nil {
	return err
}

var resp struct {
	Greeting string `json:"greeting"`
}
if err := json.Unmarshal(raw, &resp); err != nil {
	return err
}

if err := conn.NotifyExtension(ctx, "_example.com/progress", map[string]any{"pct": 50}); err != nil {
	return err
}
Advertising extension support via _meta

ACP uses the _meta field inside capability objects as the negotiation/advertising surface for extensions.

  • Client -> Agent: InitializeRequest.ClientCapabilities.Meta
  • Agent -> Client: InitializeResponse.AgentCapabilities.Meta

Keys traceparent, tracestate, and baggage are reserved in _meta for W3C trace context/OpenTelemetry compatibility.

Study a Production Implementation

For a complete, production‑ready integration, see the Gemini CLI Agent which exposes an ACP interface. The Go example client example/gemini demonstrates connecting to it via stdio.

Resources

License

Apache 2.0. See LICENSE.

Documentation

Overview

Package acp provides Go types and connection plumbing for the Agent Client Protocol (ACP). It contains generated dispatchers, outbound helpers, shared request/response types, and related utilities used by agents and clients to communicate over ACP.

Example (Agent)

Example_agent wires the Agent to stdio so an external client can connect via this process' stdin/stdout.

package main

import (
	"context"
	"os"
)

// agentExample mirrors the go/example/agent flow in a compact form.
// It streams a short message, demonstrates a tool call + permission,
// then ends the turn.
type agentExample struct{ conn *AgentSideConnection }

var _ Agent = (*agentExample)(nil)

// SetSessionMode implements Agent.
func (a *agentExample) SetSessionMode(ctx context.Context, params SetSessionModeRequest) (SetSessionModeResponse, error) {
	return SetSessionModeResponse{}, nil
}

// ListSessions implements Agent.
func (a *agentExample) ListSessions(ctx context.Context, params ListSessionsRequest) (ListSessionsResponse, error) {
	return ListSessionsResponse{}, nil
}

// ResumeSession implements Agent.
func (a *agentExample) ResumeSession(ctx context.Context, params ResumeSessionRequest) (ResumeSessionResponse, error) {
	return ResumeSessionResponse{}, nil
}

// CloseSession implements Agent.
func (a *agentExample) CloseSession(ctx context.Context, params CloseSessionRequest) (CloseSessionResponse, error) {
	return CloseSessionResponse{}, nil
}

// SetSessionConfigOption implements Agent.
func (a *agentExample) SetSessionConfigOption(ctx context.Context, params SetSessionConfigOptionRequest) (SetSessionConfigOptionResponse, error) {
	return SetSessionConfigOptionResponse{}, nil
}

func (a *agentExample) SetAgentConnection(c *AgentSideConnection) { a.conn = c }

func (agentExample) Authenticate(ctx context.Context, _ AuthenticateRequest) (AuthenticateResponse, error) {
	return AuthenticateResponse{}, nil
}

func (agentExample) Initialize(ctx context.Context, _ InitializeRequest) (InitializeResponse, error) {
	return InitializeResponse{
		ProtocolVersion:   ProtocolVersionNumber,
		AgentCapabilities: AgentCapabilities{LoadSession: false},
	}, nil
}
func (agentExample) Cancel(ctx context.Context, _ CancelNotification) error { return nil }
func (agentExample) NewSession(ctx context.Context, _ NewSessionRequest) (NewSessionResponse, error) {
	return NewSessionResponse{SessionId: SessionId("sess_demo")}, nil
}

func (a *agentExample) Prompt(ctx context.Context, p PromptRequest) (PromptResponse, error) {
	// Stream an initial agent message.
	_ = a.conn.SessionUpdate(ctx, SessionNotification{
		SessionId: p.SessionId,
		Update:    UpdateAgentMessageText("I'll help you with that."),
	})

	// Announce a tool call.
	_ = a.conn.SessionUpdate(ctx, SessionNotification{
		SessionId: p.SessionId,
		Update: StartToolCall(
			ToolCallId("call_1"),
			"Modifying configuration",
			WithStartKind(ToolKindEdit),
			WithStartStatus(ToolCallStatusPending),
			WithStartLocations([]ToolCallLocation{{Path: "/project/config.json"}}),
			WithStartRawInput(map[string]any{"path": "/project/config.json"}),
		),
	})

	// Ask the client for permission to proceed with the change.
	resp, _ := a.conn.RequestPermission(ctx, RequestPermissionRequest{
		SessionId: p.SessionId,
		ToolCall: ToolCallUpdate{
			ToolCallId: ToolCallId("call_1"),
			Title:      Ptr("Modifying configuration"),
			Kind:       Ptr(ToolKindEdit),
			Status:     Ptr(ToolCallStatusPending),
			Locations:  []ToolCallLocation{{Path: "/project/config.json"}},
			RawInput:   map[string]any{"path": "/project/config.json"},
		},
		Options: []PermissionOption{
			{Kind: PermissionOptionKindAllowOnce, Name: "Allow", OptionId: PermissionOptionId("allow")},
			{Kind: PermissionOptionKindRejectOnce, Name: "Reject", OptionId: PermissionOptionId("reject")},
		},
	})

	if resp.Outcome.Selected != nil && string(resp.Outcome.Selected.OptionId) == "allow" {
		// Mark tool call completed and stream a final message.
		_ = a.conn.SessionUpdate(ctx, SessionNotification{
			SessionId: p.SessionId,
			Update: UpdateToolCall(
				ToolCallId("call_1"),
				WithUpdateStatus(ToolCallStatusCompleted),
				WithUpdateRawOutput(map[string]any{"success": true}),
			),
		})
		_ = a.conn.SessionUpdate(ctx, SessionNotification{
			SessionId: p.SessionId,
			Update:    UpdateAgentMessageText("Done."),
		})
	}

	return PromptResponse{StopReason: StopReasonEndTurn}, nil
}

// Example_agent wires the Agent to stdio so an external client
// can connect via this process' stdin/stdout.
func main() {
	ag := &agentExample{}
	asc := NewAgentSideConnection(ag, os.Stdout, os.Stdin)
	ag.SetAgentConnection(asc)
	// In a real program, block until the peer disconnects:
	// <-asc.Done()
}
Example (Client)

Example_client launches the Go agent example, negotiates protocol, opens a session, and sends a simple prompt.

package main

import (
	"context"
	"fmt"
	"os"
	"os/exec"
	"path/filepath"
	"strings"
)

// clientExample mirrors go/example/client in a compact form: prints
// streamed updates, handles simple file ops, and picks the first
// permission option.
type clientExample struct{}

var _ Client = (*clientExample)(nil)

func (clientExample) RequestPermission(ctx context.Context, p RequestPermissionRequest) (RequestPermissionResponse, error) {
	if len(p.Options) == 0 {
		return RequestPermissionResponse{
			Outcome: RequestPermissionOutcome{
				Cancelled: &RequestPermissionOutcomeCancelled{},
			},
		}, nil
	}
	return RequestPermissionResponse{
		Outcome: RequestPermissionOutcome{
			Selected: &RequestPermissionOutcomeSelected{OptionId: p.Options[0].OptionId},
		},
	}, nil
}

func (clientExample) SessionUpdate(ctx context.Context, n SessionNotification) error {
	u := n.Update
	switch {
	case u.AgentMessageChunk != nil:
		c := u.AgentMessageChunk.Content
		if c.Text != nil {
			fmt.Print(c.Text.Text)
		}
	case u.ToolCall != nil:
		title := u.ToolCall.Title
		fmt.Printf("\n[tool] %s (%s)\n", title, u.ToolCall.Status)
	case u.ToolCallUpdate != nil:
		fmt.Printf("\n[tool] %s -> %v\n", u.ToolCallUpdate.ToolCallId, u.ToolCallUpdate.Status)
	}
	return nil
}

func (clientExample) WriteTextFile(ctx context.Context, p WriteTextFileRequest) (WriteTextFileResponse, error) {
	if !filepath.IsAbs(p.Path) {
		return WriteTextFileResponse{}, fmt.Errorf("path must be absolute: %s", p.Path)
	}
	if dir := filepath.Dir(p.Path); dir != "" {
		_ = os.MkdirAll(dir, 0o755)
	}
	return WriteTextFileResponse{}, os.WriteFile(p.Path, []byte(p.Content), 0o644)
}

func (clientExample) ReadTextFile(ctx context.Context, p ReadTextFileRequest) (ReadTextFileResponse, error) {
	if !filepath.IsAbs(p.Path) {
		return ReadTextFileResponse{}, fmt.Errorf("path must be absolute: %s", p.Path)
	}
	b, err := os.ReadFile(p.Path)
	if err != nil {
		return ReadTextFileResponse{}, err
	}
	content := string(b)
	if p.Line != nil || p.Limit != nil {
		lines := strings.Split(content, "\n")
		start := 0
		if p.Line != nil && *p.Line > 0 {
			if *p.Line-1 > 0 {
				start = *p.Line - 1
			}
			if start > len(lines) {
				start = len(lines)
			}
		}
		end := len(lines)
		if p.Limit != nil && *p.Limit > 0 && start+*p.Limit < end {
			end = start + *p.Limit
		}
		content = strings.Join(lines[start:end], "\n")
	}
	return ReadTextFileResponse{Content: content}, nil
}

// Terminal interface implementations (minimal stubs for examples)
func (clientExample) CreateTerminal(ctx context.Context, p CreateTerminalRequest) (CreateTerminalResponse, error) {
	// Return a dummy terminal id
	return CreateTerminalResponse{TerminalId: "t-1"}, nil
}

func (clientExample) KillTerminal(ctx context.Context, p KillTerminalRequest) (KillTerminalResponse, error) {
	return KillTerminalResponse{}, nil
}

func (clientExample) ReleaseTerminal(ctx context.Context, p ReleaseTerminalRequest) (ReleaseTerminalResponse, error) {
	return ReleaseTerminalResponse{}, nil
}

func (clientExample) TerminalOutput(ctx context.Context, p TerminalOutputRequest) (TerminalOutputResponse, error) {
	// Provide non-empty output to satisfy validation
	return TerminalOutputResponse{Output: "ok", Truncated: false}, nil
}

func (clientExample) WaitForTerminalExit(ctx context.Context, p WaitForTerminalExitRequest) (WaitForTerminalExitResponse, error) {
	return WaitForTerminalExitResponse{}, nil
}

// Example_client launches the Go agent example, negotiates protocol,
// opens a session, and sends a simple prompt.
func main() {
	ctx := context.Background()
	cmd := exec.Command("go", "run", "./example/agent")
	stdin, _ := cmd.StdinPipe()
	stdout, _ := cmd.StdoutPipe()
	_ = cmd.Start()

	conn := NewClientSideConnection(clientExample{}, stdin, stdout)
	_, _ = conn.Initialize(ctx, InitializeRequest{
		ProtocolVersion: ProtocolVersionNumber,
		ClientCapabilities: ClientCapabilities{
			Fs: FileSystemCapabilities{
				ReadTextFile:  true,
				WriteTextFile: true,
			},
			Terminal: true,
		},
	})
	sess, _ := conn.NewSession(ctx, NewSessionRequest{
		Cwd:        "/",
		McpServers: []McpServer{},
	})
	_, _ = conn.Prompt(ctx, PromptRequest{
		SessionId: sess.SessionId,
		Prompt:    []ContentBlock{TextBlock("Hello, agent!")},
	})

	_ = cmd.Process.Kill()
}
Example (Gemini)

Example_gemini connects to a Gemini CLI speaking ACP over stdio, then initializes, opens a session, and sends a prompt.

package main

import (
	"context"
	"fmt"
	"os/exec"
)

// geminiClient mirrors go/example/gemini in brief: prints text chunks and
// selects the first permission option. File ops are no-ops here.
type geminiClient struct{}

var _ Client = (*geminiClient)(nil)

func (geminiClient) RequestPermission(ctx context.Context, p RequestPermissionRequest) (RequestPermissionResponse, error) {
	if len(p.Options) == 0 {
		return RequestPermissionResponse{Outcome: RequestPermissionOutcome{Cancelled: &RequestPermissionOutcomeCancelled{}}}, nil
	}
	return RequestPermissionResponse{Outcome: RequestPermissionOutcome{Selected: &RequestPermissionOutcomeSelected{OptionId: p.Options[0].OptionId}}}, nil
}

func (geminiClient) SessionUpdate(ctx context.Context, n SessionNotification) error {
	if n.Update.AgentMessageChunk != nil {
		c := n.Update.AgentMessageChunk.Content
		if c.Text != nil {
			fmt.Print(c.Text.Text)
		}
	}
	return nil
}

func (geminiClient) ReadTextFile(ctx context.Context, _ ReadTextFileRequest) (ReadTextFileResponse, error) {
	return ReadTextFileResponse{}, nil
}

func (geminiClient) WriteTextFile(ctx context.Context, _ WriteTextFileRequest) (WriteTextFileResponse, error) {
	return WriteTextFileResponse{}, nil
}

// Terminal interface implementations (minimal stubs for examples)
func (geminiClient) CreateTerminal(ctx context.Context, p CreateTerminalRequest) (CreateTerminalResponse, error) {
	return CreateTerminalResponse{TerminalId: "t-1"}, nil
}

func (geminiClient) KillTerminal(ctx context.Context, p KillTerminalRequest) (KillTerminalResponse, error) {
	return KillTerminalResponse{}, nil
}

func (geminiClient) ReleaseTerminal(ctx context.Context, p ReleaseTerminalRequest) (ReleaseTerminalResponse, error) {
	return ReleaseTerminalResponse{}, nil
}

func (geminiClient) TerminalOutput(ctx context.Context, p TerminalOutputRequest) (TerminalOutputResponse, error) {
	return TerminalOutputResponse{Output: "ok", Truncated: false}, nil
}

func (geminiClient) WaitForTerminalExit(ctx context.Context, p WaitForTerminalExitRequest) (WaitForTerminalExitResponse, error) {
	return WaitForTerminalExitResponse{}, nil
}

// Example_gemini connects to a Gemini CLI speaking ACP over stdio,
// then initializes, opens a session, and sends a prompt.
func main() {
	ctx := context.Background()
	cmd := exec.Command("gemini", "--experimental-acp")
	stdin, _ := cmd.StdinPipe()
	stdout, _ := cmd.StdoutPipe()
	_ = cmd.Start()

	conn := NewClientSideConnection(geminiClient{}, stdin, stdout)
	_, _ = conn.Initialize(ctx, InitializeRequest{
		ProtocolVersion: ProtocolVersionNumber,
		ClientCapabilities: ClientCapabilities{
			Fs: FileSystemCapabilities{
				ReadTextFile:  true,
				WriteTextFile: true,
			},
			Terminal: true,
		},
	})
	sess, _ := conn.NewSession(ctx, NewSessionRequest{
		Cwd:        "/",
		McpServers: []McpServer{},
	})
	_, _ = conn.Prompt(ctx, PromptRequest{
		SessionId: sess.SessionId,
		Prompt:    []ContentBlock{TextBlock("list files")},
	})
}

Index

Examples

Constants

View Source
const (
	AgentMethodAuthenticate           = "authenticate"
	AgentMethodDocumentDidChange      = "document/didChange"
	AgentMethodDocumentDidClose       = "document/didClose"
	AgentMethodDocumentDidFocus       = "document/didFocus"
	AgentMethodDocumentDidOpen        = "document/didOpen"
	AgentMethodDocumentDidSave        = "document/didSave"
	AgentMethodInitialize             = "initialize"
	AgentMethodLogout                 = "logout"
	AgentMethodNesAccept              = "nes/accept"
	AgentMethodNesClose               = "nes/close"
	AgentMethodNesReject              = "nes/reject"
	AgentMethodNesStart               = "nes/start"
	AgentMethodNesSuggest             = "nes/suggest"
	AgentMethodProvidersDisable       = "providers/disable"
	AgentMethodProvidersList          = "providers/list"
	AgentMethodProvidersSet           = "providers/set"
	AgentMethodSessionCancel          = "session/cancel"
	AgentMethodSessionClose           = "session/close"
	AgentMethodSessionFork            = "session/fork"
	AgentMethodSessionList            = "session/list"
	AgentMethodSessionLoad            = "session/load"
	AgentMethodSessionNew             = "session/new"
	AgentMethodSessionPrompt          = "session/prompt"
	AgentMethodSessionResume          = "session/resume"
	AgentMethodSessionSetConfigOption = "session/set_config_option"
	AgentMethodSessionSetMode         = "session/set_mode"
	AgentMethodSessionSetModel        = "session/set_model"
)

Agent method names

View Source
const (
	ClientMethodElicitationComplete      = "elicitation/complete"
	ClientMethodElicitationCreate        = "elicitation/create"
	ClientMethodFsReadTextFile           = "fs/read_text_file"
	ClientMethodFsWriteTextFile          = "fs/write_text_file"
	ClientMethodSessionRequestPermission = "session/request_permission"
	ClientMethodSessionUpdate            = "session/update"
	ClientMethodTerminalCreate           = "terminal/create"
	ClientMethodTerminalKill             = "terminal/kill"
	ClientMethodTerminalOutput           = "terminal/output"
	ClientMethodTerminalRelease          = "terminal/release"
	ClientMethodTerminalWaitForExit      = "terminal/wait_for_exit"
)

Client method names

View Source
const ProtocolVersionNumber = 1

ProtocolVersionNumber is the ACP protocol version supported by this SDK.

Variables

This section is empty.

Functions

func Ptr

func Ptr[T any](v T) *T

Ptr returns a pointer to v.

func SendRequest

func SendRequest[T any](c *Connection, ctx context.Context, method string, params any) (T, error)

SendRequest sends a JSON-RPC request and returns a typed result. For methods that do not return a result, use SendRequestNoResult instead.

Types

type Agent

type Agent interface {
	// Request parameters for the authenticate method.
	//
	// Specifies which authentication method to use.
	Authenticate(ctx context.Context, params AuthenticateRequest) (AuthenticateResponse, error)
	// Request parameters for the initialize method.
	//
	// Sent by the client to establish connection and negotiate capabilities.
	//
	// See protocol docs: [Initialization](https://agentclientprotocol.com/protocol/initialization)
	Initialize(ctx context.Context, params InitializeRequest) (InitializeResponse, error)
	// Notification to cancel ongoing operations for a session.
	//
	// See protocol docs: [Cancellation](https://agentclientprotocol.com/protocol/prompt-turn#cancellation)
	Cancel(ctx context.Context, params CancelNotification) error
	// Request parameters for closing an active session.
	//
	// If supported, the agent **must** cancel any ongoing work related to the session
	// (treat it as if 'session/cancel' was called) and then free up any resources
	// associated with the session.
	//
	// Only available if the Agent supports the 'sessionCapabilities.close' capability.
	CloseSession(ctx context.Context, params CloseSessionRequest) (CloseSessionResponse, error)
	// Request parameters for listing existing sessions.
	//
	// Only available if the Agent supports the 'sessionCapabilities.list' capability.
	ListSessions(ctx context.Context, params ListSessionsRequest) (ListSessionsResponse, error)
	// Request parameters for creating a new session.
	//
	// See protocol docs: [Creating a Session](https://agentclientprotocol.com/protocol/session-setup#creating-a-session)
	NewSession(ctx context.Context, params NewSessionRequest) (NewSessionResponse, error)
	// Request parameters for sending a user prompt to the agent.
	//
	// Contains the user's message and any additional context.
	//
	// See protocol docs: [User Message](https://agentclientprotocol.com/protocol/prompt-turn#1-user-message)
	Prompt(ctx context.Context, params PromptRequest) (PromptResponse, error)
	// Request parameters for resuming an existing session.
	//
	// Resumes an existing session without returning previous messages (unlike 'session/load').
	// This is useful for agents that can resume sessions but don't implement full session loading.
	//
	// Only available if the Agent supports the 'sessionCapabilities.resume' capability.
	ResumeSession(ctx context.Context, params ResumeSessionRequest) (ResumeSessionResponse, error)
	// Request parameters for setting a session configuration option.
	SetSessionConfigOption(ctx context.Context, params SetSessionConfigOptionRequest) (SetSessionConfigOptionResponse, error)
	// Request parameters for setting a session mode.
	SetSessionMode(ctx context.Context, params SetSessionModeRequest) (SetSessionModeResponse, error)
}

type AgentAuthCapabilities added in v0.11.7

type AgentAuthCapabilities struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
	// Whether the agent supports the logout method.
	//
	// By supplying '{}' it means that the agent supports the logout method.
	Logout *LogoutCapabilities `json:"logout,omitempty"`
}

**UNSTABLE**

This capability is not part of the spec yet, and may be removed or changed at any point.

Authentication-related capabilities supported by the agent.

type AgentCapabilities

type AgentCapabilities struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
	// **UNSTABLE**
	//
	// This capability is not part of the spec yet, and may be removed or changed at any point.
	//
	// Authentication-related capabilities supported by the agent.
	//
	// Defaults to {} if unset.
	Auth AgentAuthCapabilities `json:"auth,omitempty"`
	// Whether the agent supports 'session/load'.
	//
	// Defaults to false if unset.
	LoadSession bool `json:"loadSession,omitempty"`
	// MCP capabilities supported by the agent.
	//
	// Defaults to {"http":false,"sse":false} if unset.
	McpCapabilities McpCapabilities `json:"mcpCapabilities,omitempty"`
	// **UNSTABLE**
	//
	// This capability is not part of the spec yet, and may be removed or changed at any point.
	//
	// NES (Next Edit Suggestions) capabilities supported by the agent.
	Nes *NesCapabilities `json:"nes,omitempty"`
	// **UNSTABLE**
	//
	// This capability is not part of the spec yet, and may be removed or changed at any point.
	//
	// The position encoding selected by the agent from the client's supported encodings.
	PositionEncoding *PositionEncodingKind `json:"positionEncoding,omitempty"`
	// Prompt capabilities supported by the agent.
	//
	// Defaults to {"audio":false,"embeddedContext":false,"image":false} if unset.
	PromptCapabilities PromptCapabilities `json:"promptCapabilities,omitempty"`
	// **UNSTABLE**
	//
	// This capability is not part of the spec yet, and may be removed or changed at any point.
	//
	// Provider configuration capabilities supported by the agent.
	//
	// By supplying '{}' it means that the agent supports provider configuration methods.
	Providers *ProvidersCapabilities `json:"providers,omitempty"`
	// Defaults to {} if unset.
	SessionCapabilities SessionCapabilities `json:"sessionCapabilities,omitempty"`
}

Capabilities supported by the agent.

Advertised during initialization to inform the client about available features and content types.

See protocol docs: [Agent Capabilities](https://agentclientprotocol.com/protocol/initialization#agent-capabilities)

func (AgentCapabilities) MarshalJSON

func (v AgentCapabilities) MarshalJSON() ([]byte, error)

func (*AgentCapabilities) UnmarshalJSON

func (v *AgentCapabilities) UnmarshalJSON(b []byte) error

type AgentError added in v0.10.8

type AgentError struct {
	Error Error     `json:"error"`
	Id    RequestId `json:"id"`
}

type AgentExperimental

type AgentExperimental interface {
	// Notification sent when a file is edited.
	UnstableDidChangeDocument(ctx context.Context, params UnstableDidChangeDocumentNotification) error
	// Notification sent when a file is closed.
	UnstableDidCloseDocument(ctx context.Context, params UnstableDidCloseDocumentNotification) error
	// Notification sent when a file becomes the active editor tab.
	UnstableDidFocusDocument(ctx context.Context, params UnstableDidFocusDocumentNotification) error
	// Notification sent when a file is opened in the editor.
	UnstableDidOpenDocument(ctx context.Context, params UnstableDidOpenDocumentNotification) error
	// Notification sent when a file is saved.
	UnstableDidSaveDocument(ctx context.Context, params UnstableDidSaveDocumentNotification) error
	// **UNSTABLE**
	//
	// This capability is not part of the spec yet, and may be removed or changed at any point.
	//
	// Request parameters for the logout method.
	//
	// Terminates the current authenticated session.
	UnstableLogout(ctx context.Context, params UnstableLogoutRequest) (UnstableLogoutResponse, error)
	// Notification sent when a suggestion is accepted.
	UnstableAcceptNes(ctx context.Context, params UnstableAcceptNesNotification) error
	// Request to close an NES session.
	//
	// The agent **must** cancel any ongoing work related to the NES session
	// and then free up any resources associated with the session.
	UnstableCloseNes(ctx context.Context, params UnstableCloseNesRequest) (UnstableCloseNesResponse, error)
	// Notification sent when a suggestion is rejected.
	UnstableRejectNes(ctx context.Context, params UnstableRejectNesNotification) error
	// Request to start an NES session.
	UnstableStartNes(ctx context.Context, params UnstableStartNesRequest) (UnstableStartNesResponse, error)
	// Request for a code suggestion.
	UnstableSuggestNes(ctx context.Context, params UnstableSuggestNesRequest) (UnstableSuggestNesResponse, error)
	// **UNSTABLE**
	//
	// This capability is not part of the spec yet, and may be removed or changed at any point.
	//
	// Request parameters for 'providers/disable'.
	UnstableDisableProviders(ctx context.Context, params UnstableDisableProvidersRequest) (UnstableDisableProvidersResponse, error)
	// **UNSTABLE**
	//
	// This capability is not part of the spec yet, and may be removed or changed at any point.
	//
	// Request parameters for 'providers/list'.
	UnstableListProviders(ctx context.Context, params UnstableListProvidersRequest) (UnstableListProvidersResponse, error)
	// **UNSTABLE**
	//
	// This capability is not part of the spec yet, and may be removed or changed at any point.
	//
	// Request parameters for 'providers/set'.
	//
	// Replaces the full configuration for one provider id.
	UnstableSetProviders(ctx context.Context, params UnstableSetProvidersRequest) (UnstableSetProvidersResponse, error)
	// **UNSTABLE**
	//
	// This capability is not part of the spec yet, and may be removed or changed at any point.
	//
	// Request parameters for forking an existing session.
	//
	// Creates a new session based on the context of an existing one, allowing
	// operations like generating summaries without affecting the original session's history.
	//
	// Only available if the Agent supports the 'session.fork' capability.
	UnstableForkSession(ctx context.Context, params UnstableForkSessionRequest) (UnstableForkSessionResponse, error)
	// **UNSTABLE**
	//
	// This capability is not part of the spec yet, and may be removed or changed at any point.
	//
	// Request parameters for setting a session model.
	UnstableSetSessionModel(ctx context.Context, params UnstableSetSessionModelRequest) (UnstableSetSessionModelResponse, error)
}

AgentExperimental defines unstable methods that are not part of the official spec. These may change or be removed without notice.

type AgentLoader

type AgentLoader interface {
	// Request parameters for loading an existing session.
	//
	// Only available if the Agent supports the 'loadSession' capability.
	//
	// See protocol docs: [Loading Sessions](https://agentclientprotocol.com/protocol/session-setup#loading-sessions)
	LoadSession(ctx context.Context, params LoadSessionRequest) (LoadSessionResponse, error)
}

AgentLoader defines optional support for loading sessions. Implement and advertise the capability to enable 'session/load'.

type AgentNotification

type AgentNotification struct {
	Method string `json:"method"`
	Params any    `json:"params,omitempty"`
}

func (*AgentNotification) Validate added in v0.10.8

func (v *AgentNotification) Validate() error

type AgentRequest

type AgentRequest struct {
	Id     RequestId `json:"id"`
	Method string    `json:"method"`
	Params any       `json:"params,omitempty"`
}

func (*AgentRequest) Validate added in v0.10.8

func (v *AgentRequest) Validate() error

type AgentResponse

type AgentResponse struct {
	Result *AgentResult `json:"-"`
	Error  *AgentError  `json:"-"`
}

func (AgentResponse) MarshalJSON

func (u AgentResponse) MarshalJSON() ([]byte, error)

func (*AgentResponse) UnmarshalJSON

func (u *AgentResponse) UnmarshalJSON(b []byte) error

type AgentResult added in v0.10.8

type AgentResult struct {
	Id RequestId `json:"id"`
	// All possible responses that an agent can send to a client.
	//
	// This enum is used internally for routing RPC responses. You typically won't need
	// to use this directly - the responses are handled automatically by the connection.
	//
	// These are responses to the corresponding 'ClientRequest' variants.
	Result any `json:"result"`
}

type AgentSideConnection

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

AgentSideConnection represents the agent's view of a connection to a client.

func NewAgentSideConnection

func NewAgentSideConnection(agent Agent, peerInput io.Writer, peerOutput io.Reader) *AgentSideConnection

NewAgentSideConnection creates a new agent-side connection bound to the provided Agent implementation.

func (*AgentSideConnection) CallExtension added in v0.10.8

func (c *AgentSideConnection) CallExtension(ctx context.Context, method string, params any) (json.RawMessage, error)

CallExtension sends an ACP extension-method request (method names starting with "_") from an agent to its client.

func (*AgentSideConnection) CreateTerminal

func (*AgentSideConnection) Done

func (c *AgentSideConnection) Done() <-chan struct{}

Done exposes a channel that closes when the peer disconnects.

func (*AgentSideConnection) KillTerminal added in v0.11.7

func (*AgentSideConnection) NotifyExtension added in v0.10.8

func (c *AgentSideConnection) NotifyExtension(ctx context.Context, method string, params any) error

NotifyExtension sends an ACP extension-method notification (method names starting with "_") from an agent to its client.

func (*AgentSideConnection) ReadTextFile

func (*AgentSideConnection) ReleaseTerminal

func (*AgentSideConnection) RequestPermission

func (*AgentSideConnection) SessionUpdate

func (c *AgentSideConnection) SessionUpdate(ctx context.Context, params SessionNotification) error

func (*AgentSideConnection) SetLogger

func (c *AgentSideConnection) SetLogger(l *slog.Logger)

SetLogger directs connection diagnostics to the provided logger.

func (*AgentSideConnection) TerminalOutput

func (*AgentSideConnection) UnstableCompleteElicitation added in v0.11.7

func (c *AgentSideConnection) UnstableCompleteElicitation(ctx context.Context, params UnstableCompleteElicitationNotification) error

func (*AgentSideConnection) UnstableCreateElicitation added in v0.11.7

func (*AgentSideConnection) WaitForTerminalExit

func (*AgentSideConnection) WriteTextFile

type Annotations

type Annotations struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta         map[string]any `json:"_meta,omitempty"`
	Audience     []Role         `json:"audience,omitempty"`
	LastModified *string        `json:"lastModified,omitempty"`
	Priority     *float64       `json:"priority,omitempty"`
}

Optional annotations for the client. The client can use annotations to inform how objects are used or displayed

type AudioContent

type AudioContent struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta        map[string]any `json:"_meta,omitempty"`
	Annotations *Annotations   `json:"annotations,omitempty"`
	Data        string         `json:"data"`
	MimeType    string         `json:"mimeType"`
}

Audio provided to or from an LLM.

type AuthCapabilities added in v0.11.7

type AuthCapabilities struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
	// Whether the client supports 'terminal' authentication methods.
	//
	// When 'true', the agent may include 'terminal' entries in its authentication methods.
	//
	// Defaults to false if unset.
	Terminal bool `json:"terminal,omitempty"`
}

**UNSTABLE**

This capability is not part of the spec yet, and may be removed or changed at any point.

Authentication capabilities supported by the client.

Advertised during initialization to inform the agent which authentication method types the client can handle. This governs opt-in types that require additional client-side support.

func (AuthCapabilities) MarshalJSON added in v0.11.7

func (v AuthCapabilities) MarshalJSON() ([]byte, error)

func (*AuthCapabilities) UnmarshalJSON added in v0.11.7

func (v *AuthCapabilities) UnmarshalJSON(b []byte) error

type AuthEnvVar added in v0.11.7

type AuthEnvVar struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
	// Human-readable label for this variable, displayed in client UI.
	Label *string `json:"label,omitempty"`
	// The environment variable name (e.g. '"OPENAI_API_KEY"').
	Name string `json:"name"`
	// Whether this variable is optional.
	//
	// Defaults to 'false'.
	//
	// Defaults to false if unset.
	Optional bool `json:"optional,omitempty"`
	// Whether this value is a secret (e.g. API key, token).
	// Clients should use a password-style input for secret vars.
	//
	// Defaults to 'true'.
	//
	// Defaults to true if unset.
	Secret bool `json:"secret,omitempty"`
}

**UNSTABLE**

This capability is not part of the spec yet, and may be removed or changed at any point.

Describes a single environment variable for an ['AuthMethodEnvVar'] authentication method.

func (AuthEnvVar) MarshalJSON added in v0.11.7

func (v AuthEnvVar) MarshalJSON() ([]byte, error)

func (*AuthEnvVar) UnmarshalJSON added in v0.11.7

func (v *AuthEnvVar) UnmarshalJSON(b []byte) error

type AuthMethod

type AuthMethod struct {
	// **UNSTABLE**
	//
	// This capability is not part of the spec yet, and may be removed or changed at any point.
	//
	// User provides a key that the client passes to the agent as an environment variable.
	EnvVar *AuthMethodEnvVarInline `json:"-"`
	// **UNSTABLE**
	//
	// This capability is not part of the spec yet, and may be removed or changed at any point.
	//
	// Client runs an interactive terminal for the user to authenticate via a TUI.
	Terminal *AuthMethodTerminalInline `json:"-"`
	// Agent handles authentication itself.
	//
	// This is the default when no 'type' is specified.
	Agent *AuthMethodAgent `json:"-"`
}

func (AuthMethod) MarshalJSON added in v0.11.7

func (u AuthMethod) MarshalJSON() ([]byte, error)

func (*AuthMethod) UnmarshalJSON added in v0.11.7

func (u *AuthMethod) UnmarshalJSON(b []byte) error

type AuthMethodAgent added in v0.11.7

type AuthMethodAgent struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
	// Optional description providing more details about this authentication method.
	Description *string `json:"description,omitempty"`
	// Unique identifier for this authentication method.
	Id string `json:"id"`
	// Human-readable name of the authentication method.
	Name string `json:"name"`
}

Agent handles authentication itself.

This is the default authentication method type.

type AuthMethodEnvVar added in v0.11.7

type AuthMethodEnvVar struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
	// Optional description providing more details about this authentication method.
	Description *string `json:"description,omitempty"`
	// Unique identifier for this authentication method.
	Id string `json:"id"`
	// Optional link to a page where the user can obtain their credentials.
	Link *string `json:"link,omitempty"`
	// Human-readable name of the authentication method.
	Name string `json:"name"`
	// The environment variables the client should set.
	Vars []AuthEnvVar `json:"vars"`
}

**UNSTABLE**

This capability is not part of the spec yet, and may be removed or changed at any point.

Environment variable authentication method.

The user provides credentials that the client passes to the agent as environment variables.

type AuthMethodEnvVarInline added in v0.11.7

type AuthMethodEnvVarInline struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
	// Optional description providing more details about this authentication method.
	Description *string `json:"description,omitempty"`
	// Unique identifier for this authentication method.
	Id string `json:"id"`
	// Optional link to a page where the user can obtain their credentials.
	Link *string `json:"link,omitempty"`
	// Human-readable name of the authentication method.
	Name string `json:"name"`
	Type string `json:"type"`
	// The environment variables the client should set.
	Vars []AuthEnvVar `json:"vars"`
}

Describes an available authentication method.

The 'type' field acts as the discriminator in the serialized JSON form. When no 'type' is present, the method is treated as 'agent'. **UNSTABLE**

This capability is not part of the spec yet, and may be removed or changed at any point.

User provides a key that the client passes to the agent as an environment variable.

type AuthMethodTerminal added in v0.11.7

type AuthMethodTerminal struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
	// Additional arguments to pass when running the agent binary for terminal auth.
	Args []string `json:"args,omitempty"`
	// Optional description providing more details about this authentication method.
	Description *string `json:"description,omitempty"`
	// Additional environment variables to set when running the agent binary for terminal auth.
	Env map[string]any `json:"env,omitempty"`
	// Unique identifier for this authentication method.
	Id string `json:"id"`
	// Human-readable name of the authentication method.
	Name string `json:"name"`
}

**UNSTABLE**

This capability is not part of the spec yet, and may be removed or changed at any point.

Terminal-based authentication method.

The client runs an interactive terminal for the user to authenticate via a TUI.

type AuthMethodTerminalInline added in v0.11.7

type AuthMethodTerminalInline struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
	// Additional arguments to pass when running the agent binary for terminal auth.
	Args []string `json:"args,omitempty"`
	// Optional description providing more details about this authentication method.
	Description *string `json:"description,omitempty"`
	// Additional environment variables to set when running the agent binary for terminal auth.
	Env map[string]any `json:"env,omitempty"`
	// Unique identifier for this authentication method.
	Id string `json:"id"`
	// Human-readable name of the authentication method.
	Name string `json:"name"`
	Type string `json:"type"`
}

**UNSTABLE**

This capability is not part of the spec yet, and may be removed or changed at any point.

Client runs an interactive terminal for the user to authenticate via a TUI.

type AuthenticateRequest

type AuthenticateRequest struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
	// The ID of the authentication method to use.
	// Must be one of the methods advertised in the initialize response.
	MethodId string `json:"methodId"`
}

Request parameters for the authenticate method.

Specifies which authentication method to use.

func (*AuthenticateRequest) Validate

func (v *AuthenticateRequest) Validate() error

type AuthenticateResponse

type AuthenticateResponse struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
}

Response to the 'authenticate' method.

func (*AuthenticateResponse) Validate

func (v *AuthenticateResponse) Validate() error

type AvailableCommand

type AvailableCommand struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
	// Human-readable description of what the command does.
	Description string `json:"description"`
	// Input for the command if required
	Input *AvailableCommandInput `json:"input,omitempty"`
	// Command name (e.g., 'create_plan', 'research_codebase').
	Name string `json:"name"`
}

Information about a command.

type AvailableCommandInput

type AvailableCommandInput struct {
	// All text that was typed after the command name is provided as input.
	Unstructured *UnstructuredCommandInput `json:"-"`
}

The input specification for a command.

func (AvailableCommandInput) MarshalJSON

func (u AvailableCommandInput) MarshalJSON() ([]byte, error)

func (*AvailableCommandInput) UnmarshalJSON

func (u *AvailableCommandInput) UnmarshalJSON(b []byte) error

type AvailableCommandsUpdate added in v0.10.8

type AvailableCommandsUpdate struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
	// Commands the agent can execute
	AvailableCommands []AvailableCommand `json:"availableCommands"`
}

Available commands are ready or have changed

type BlobResourceContents

type BlobResourceContents struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta     map[string]any `json:"_meta,omitempty"`
	Blob     string         `json:"blob"`
	MimeType *string        `json:"mimeType,omitempty"`
	Uri      string         `json:"uri"`
}

Binary resource contents.

type CancelNotification

type CancelNotification struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
	// The ID of the session to cancel operations for.
	SessionId SessionId `json:"sessionId"`
}

Notification to cancel ongoing operations for a session.

See protocol docs: [Cancellation](https://agentclientprotocol.com/protocol/prompt-turn#cancellation)

func (*CancelNotification) Validate

func (v *CancelNotification) Validate() error

type Client

type Client interface {
	// Request to read content from a text file.
	//
	// Only available if the client supports the 'fs.readTextFile' capability.
	ReadTextFile(ctx context.Context, params ReadTextFileRequest) (ReadTextFileResponse, error)
	// Request to write content to a text file.
	//
	// Only available if the client supports the 'fs.writeTextFile' capability.
	WriteTextFile(ctx context.Context, params WriteTextFileRequest) (WriteTextFileResponse, error)
	// Request for user permission to execute a tool call.
	//
	// Sent when the agent needs authorization before performing a sensitive operation.
	//
	// See protocol docs: [Requesting Permission](https://agentclientprotocol.com/protocol/tool-calls#requesting-permission)
	RequestPermission(ctx context.Context, params RequestPermissionRequest) (RequestPermissionResponse, error)
	// Notification containing a session update from the agent.
	//
	// Used to stream real-time progress and results during prompt processing.
	//
	// See protocol docs: [Agent Reports Output](https://agentclientprotocol.com/protocol/prompt-turn#3-agent-reports-output)
	SessionUpdate(ctx context.Context, params SessionNotification) error
	// Request to create a new terminal and execute a command.
	CreateTerminal(ctx context.Context, params CreateTerminalRequest) (CreateTerminalResponse, error)
	// Request to kill a terminal without releasing it.
	KillTerminal(ctx context.Context, params KillTerminalRequest) (KillTerminalResponse, error)
	// Request to get the current output and status of a terminal.
	TerminalOutput(ctx context.Context, params TerminalOutputRequest) (TerminalOutputResponse, error)
	// Request to release a terminal and free its resources.
	ReleaseTerminal(ctx context.Context, params ReleaseTerminalRequest) (ReleaseTerminalResponse, error)
	// Request to wait for a terminal command to exit.
	WaitForTerminalExit(ctx context.Context, params WaitForTerminalExitRequest) (WaitForTerminalExitResponse, error)
}

type ClientCapabilities

type ClientCapabilities struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
	// **UNSTABLE**
	//
	// This capability is not part of the spec yet, and may be removed or changed at any point.
	//
	// Authentication capabilities supported by the client.
	// Determines which authentication method types the agent may include
	// in its 'InitializeResponse'.
	//
	// Defaults to {"terminal":false} if unset.
	Auth AuthCapabilities `json:"auth,omitempty"`
	// **UNSTABLE**
	//
	// This capability is not part of the spec yet, and may be removed or changed at any point.
	//
	// Elicitation capabilities supported by the client.
	// Determines which elicitation modes the agent may use.
	Elicitation *ElicitationCapabilities `json:"elicitation,omitempty"`
	// File system capabilities supported by the client.
	// Determines which file operations the agent can request.
	//
	// Defaults to {"readTextFile":false,"writeTextFile":false} if unset.
	Fs FileSystemCapabilities `json:"fs,omitempty"`
	// **UNSTABLE**
	//
	// This capability is not part of the spec yet, and may be removed or changed at any point.
	//
	// NES (Next Edit Suggestions) capabilities supported by the client.
	Nes *ClientNesCapabilities `json:"nes,omitempty"`
	// **UNSTABLE**
	//
	// This capability is not part of the spec yet, and may be removed or changed at any point.
	//
	// The position encodings supported by the client, in order of preference.
	PositionEncodings []PositionEncodingKind `json:"positionEncodings,omitempty"`
	// Whether the Client support all 'terminal/*' methods.
	//
	// Defaults to false if unset.
	Terminal bool `json:"terminal,omitempty"`
}

Capabilities supported by the client.

Advertised during initialization to inform the agent about available features and methods.

See protocol docs: [Client Capabilities](https://agentclientprotocol.com/protocol/initialization#client-capabilities)

func (ClientCapabilities) MarshalJSON

func (v ClientCapabilities) MarshalJSON() ([]byte, error)

func (*ClientCapabilities) UnmarshalJSON

func (v *ClientCapabilities) UnmarshalJSON(b []byte) error

type ClientError added in v0.10.8

type ClientError struct {
	Error Error     `json:"error"`
	Id    RequestId `json:"id"`
}

type ClientExperimental

type ClientExperimental interface {
	// **UNSTABLE**
	//
	// This capability is not part of the spec yet, and may be removed or changed at any point.
	//
	// Notification sent by the agent when a URL-based elicitation is complete.
	UnstableCompleteElicitation(ctx context.Context, params UnstableCompleteElicitationNotification) error
	// **UNSTABLE**
	//
	// This capability is not part of the spec yet, and may be removed or changed at any point.
	//
	// Request from the agent to elicit structured user input.
	//
	// The agent sends this to the client to request information from the user,
	// either via a form or by directing them to a URL.
	// Elicitations are tied to a session (optionally a tool call) or a request.
	UnstableCreateElicitation(ctx context.Context, params UnstableCreateElicitationRequest) (UnstableCreateElicitationResponse, error)
}

ClientExperimental defines unstable methods that are not part of the official spec. These may change or be removed without notice.

type ClientNesCapabilities added in v0.11.7

type ClientNesCapabilities struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
	// Whether the client supports the 'jump' suggestion kind.
	Jump *NesJumpCapabilities `json:"jump,omitempty"`
	// Whether the client supports the 'rename' suggestion kind.
	Rename *NesRenameCapabilities `json:"rename,omitempty"`
	// Whether the client supports the 'searchAndReplace' suggestion kind.
	SearchAndReplace *NesSearchAndReplaceCapabilities `json:"searchAndReplace,omitempty"`
}

NES capabilities advertised by the client during initialization.

type ClientNotification

type ClientNotification struct {
	Method string `json:"method"`
	Params any    `json:"params,omitempty"`
}

func (*ClientNotification) Validate added in v0.10.8

func (v *ClientNotification) Validate() error

type ClientRequest

type ClientRequest struct {
	Id     RequestId `json:"id"`
	Method string    `json:"method"`
	Params any       `json:"params,omitempty"`
}

func (*ClientRequest) Validate added in v0.10.8

func (v *ClientRequest) Validate() error

type ClientResponse

type ClientResponse struct {
	Result *ClientResult `json:"-"`
	Error  *ClientError  `json:"-"`
}

func (ClientResponse) MarshalJSON

func (u ClientResponse) MarshalJSON() ([]byte, error)

func (*ClientResponse) UnmarshalJSON

func (u *ClientResponse) UnmarshalJSON(b []byte) error

type ClientResult added in v0.10.8

type ClientResult struct {
	Id RequestId `json:"id"`
	// All possible responses that a client can send to an agent.
	//
	// This enum is used internally for routing RPC responses. You typically won't need
	// to use this directly - the responses are handled automatically by the connection.
	//
	// These are responses to the corresponding 'AgentRequest' variants.
	Result any `json:"result"`
}

type ClientSideConnection

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

ClientSideConnection provides the client's view of the connection and implements Agent calls.

func NewClientSideConnection

func NewClientSideConnection(client Client, peerInput io.Writer, peerOutput io.Reader) *ClientSideConnection

NewClientSideConnection creates a new client-side connection bound to the provided Client implementation.

func (*ClientSideConnection) Authenticate

func (*ClientSideConnection) CallExtension added in v0.10.8

func (c *ClientSideConnection) CallExtension(ctx context.Context, method string, params any) (json.RawMessage, error)

CallExtension sends an ACP extension-method request (method names starting with "_") from a client to its agent.

func (*ClientSideConnection) Cancel

func (*ClientSideConnection) CloseSession added in v0.12.2

func (*ClientSideConnection) Done

func (c *ClientSideConnection) Done() <-chan struct{}

Done exposes a channel that closes when the peer disconnects.

func (*ClientSideConnection) Initialize

func (*ClientSideConnection) ListSessions added in v0.11.7

func (*ClientSideConnection) LoadSession

func (*ClientSideConnection) NewSession

func (*ClientSideConnection) NotifyExtension added in v0.10.8

func (c *ClientSideConnection) NotifyExtension(ctx context.Context, method string, params any) error

NotifyExtension sends an ACP extension-method notification (method names starting with "_") from a client to its agent.

func (*ClientSideConnection) Prompt

func (*ClientSideConnection) ResumeSession added in v0.12.2

func (*ClientSideConnection) SetLogger

func (c *ClientSideConnection) SetLogger(l *slog.Logger)

SetLogger directs connection diagnostics to the provided logger.

func (*ClientSideConnection) SetSessionConfigOption added in v0.10.8

func (*ClientSideConnection) SetSessionMode

func (*ClientSideConnection) UnstableAcceptNes added in v0.11.7

func (c *ClientSideConnection) UnstableAcceptNes(ctx context.Context, params UnstableAcceptNesNotification) error

func (*ClientSideConnection) UnstableCloseNes added in v0.11.7

func (*ClientSideConnection) UnstableDidChangeDocument added in v0.11.7

func (c *ClientSideConnection) UnstableDidChangeDocument(ctx context.Context, params UnstableDidChangeDocumentNotification) error

func (*ClientSideConnection) UnstableDidCloseDocument added in v0.11.7

func (c *ClientSideConnection) UnstableDidCloseDocument(ctx context.Context, params UnstableDidCloseDocumentNotification) error

func (*ClientSideConnection) UnstableDidFocusDocument added in v0.11.7

func (c *ClientSideConnection) UnstableDidFocusDocument(ctx context.Context, params UnstableDidFocusDocumentNotification) error

func (*ClientSideConnection) UnstableDidOpenDocument added in v0.11.7

func (c *ClientSideConnection) UnstableDidOpenDocument(ctx context.Context, params UnstableDidOpenDocumentNotification) error

func (*ClientSideConnection) UnstableDidSaveDocument added in v0.11.7

func (c *ClientSideConnection) UnstableDidSaveDocument(ctx context.Context, params UnstableDidSaveDocumentNotification) error

func (*ClientSideConnection) UnstableDisableProviders added in v0.11.7

func (*ClientSideConnection) UnstableForkSession added in v0.10.8

func (*ClientSideConnection) UnstableListProviders added in v0.11.7

func (*ClientSideConnection) UnstableLogout added in v0.11.7

func (*ClientSideConnection) UnstableRejectNes added in v0.11.7

func (c *ClientSideConnection) UnstableRejectNes(ctx context.Context, params UnstableRejectNesNotification) error

func (*ClientSideConnection) UnstableSetProviders added in v0.11.7

func (*ClientSideConnection) UnstableSetSessionModel added in v0.10.8

func (*ClientSideConnection) UnstableStartNes added in v0.11.7

func (*ClientSideConnection) UnstableSuggestNes added in v0.11.7

type CloseSessionRequest added in v0.12.2

type CloseSessionRequest struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
	// The ID of the session to close.
	SessionId SessionId `json:"sessionId"`
}

Request parameters for closing an active session.

If supported, the agent **must** cancel any ongoing work related to the session (treat it as if 'session/cancel' was called) and then free up any resources associated with the session.

Only available if the Agent supports the 'sessionCapabilities.close' capability.

func (*CloseSessionRequest) Validate added in v0.12.2

func (v *CloseSessionRequest) Validate() error

type CloseSessionResponse added in v0.12.2

type CloseSessionResponse struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
}

Response from closing a session.

func (*CloseSessionResponse) Validate added in v0.12.2

func (v *CloseSessionResponse) Validate() error

type ConfigOptionUpdate added in v0.10.8

type ConfigOptionUpdate struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
	// The full set of configuration options and their current values.
	ConfigOptions []SessionConfigOption `json:"configOptions"`
}

Session configuration options have been updated.

type Connection

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

Connection is a simple JSON-RPC 2.0 connection over line-delimited JSON.

func NewConnection

func NewConnection(handler MethodHandler, peerInput io.Writer, peerOutput io.Reader) *Connection

func (*Connection) Done

func (c *Connection) Done() <-chan struct{}

Done returns a channel that is closed when the underlying reader loop exits (typically when the peer disconnects or the input stream is closed).

func (*Connection) SendNotification

func (c *Connection) SendNotification(ctx context.Context, method string, params any) error

func (*Connection) SendRequestNoResult

func (c *Connection) SendRequestNoResult(ctx context.Context, method string, params any) error

SendRequestNoResult sends a JSON-RPC request that returns no result payload.

func (*Connection) SetLogger

func (c *Connection) SetLogger(l *slog.Logger)

SetLogger installs a logger used for internal connection diagnostics. If unset, logs are written via the default logger.

type Content added in v0.10.8

type Content struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
	// The actual content block.
	Content ContentBlock `json:"content"`
}

Standard content block (text, images, resources).

type ContentBlock

type ContentBlock struct {
	// Text content. May be plain text or formatted with Markdown.
	//
	// All agents MUST support text content blocks in prompts.
	// Clients SHOULD render this text as Markdown.
	Text *ContentBlockText `json:"-"`
	// Images for visual context or analysis.
	//
	// Requires the 'image' prompt capability when included in prompts.
	Image *ContentBlockImage `json:"-"`
	// Audio data for transcription or analysis.
	//
	// Requires the 'audio' prompt capability when included in prompts.
	Audio *ContentBlockAudio `json:"-"`
	// References to resources that the agent can access.
	//
	// All agents MUST support resource links in prompts.
	ResourceLink *ContentBlockResourceLink `json:"-"`
	// Complete resource contents embedded directly in the message.
	//
	// Preferred for including context as it avoids extra round-trips.
	//
	// Requires the 'embeddedContext' prompt capability when included in prompts.
	Resource *ContentBlockResource `json:"-"`
}

func AudioBlock

func AudioBlock(data string, mimeType string) ContentBlock

AudioBlock constructs an inline audio content block with base64-encoded data.

func ImageBlock

func ImageBlock(data string, mimeType string) ContentBlock

ImageBlock constructs an inline image content block with base64-encoded data.

func ResourceBlock

func ResourceBlock(res EmbeddedResourceResource) ContentBlock

ResourceBlock wraps an embedded resource as a content block.

func ResourceLinkBlock

func ResourceLinkBlock(name string, uri string) ContentBlock

ResourceLinkBlock constructs a resource_link content block with a name and URI.

func TextBlock

func TextBlock(text string) ContentBlock

TextBlock constructs a text content block.

func (ContentBlock) MarshalJSON

func (u ContentBlock) MarshalJSON() ([]byte, error)

func (*ContentBlock) UnmarshalJSON

func (u *ContentBlock) UnmarshalJSON(b []byte) error

func (*ContentBlock) Validate

func (u *ContentBlock) Validate() error

type ContentBlockAudio

type ContentBlockAudio struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta        map[string]any `json:"_meta,omitempty"`
	Annotations *Annotations   `json:"annotations,omitempty"`
	Data        string         `json:"data"`
	MimeType    string         `json:"mimeType"`
	Type        string         `json:"type"`
}

Audio data for transcription or analysis.

Requires the 'audio' prompt capability when included in prompts.

type ContentBlockImage

type ContentBlockImage struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta        map[string]any `json:"_meta,omitempty"`
	Annotations *Annotations   `json:"annotations,omitempty"`
	Data        string         `json:"data"`
	MimeType    string         `json:"mimeType"`
	Type        string         `json:"type"`
	Uri         *string        `json:"uri,omitempty"`
}

Images for visual context or analysis.

Requires the 'image' prompt capability when included in prompts.

type ContentBlockResource

type ContentBlockResource struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta        map[string]any           `json:"_meta,omitempty"`
	Annotations *Annotations             `json:"annotations,omitempty"`
	Resource    EmbeddedResourceResource `json:"resource"`
	Type        string                   `json:"type"`
}

Complete resource contents embedded directly in the message.

Preferred for including context as it avoids extra round-trips.

Requires the 'embeddedContext' prompt capability when included in prompts.

type ContentBlockResourceLink struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta        map[string]any `json:"_meta,omitempty"`
	Annotations *Annotations   `json:"annotations,omitempty"`
	Description *string        `json:"description,omitempty"`
	MimeType    *string        `json:"mimeType,omitempty"`
	Name        string         `json:"name"`
	Size        *int           `json:"size,omitempty"`
	Title       *string        `json:"title,omitempty"`
	Type        string         `json:"type"`
	Uri         string         `json:"uri"`
}

References to resources that the agent can access.

All agents MUST support resource links in prompts.

type ContentBlockText

type ContentBlockText struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta        map[string]any `json:"_meta,omitempty"`
	Annotations *Annotations   `json:"annotations,omitempty"`
	Text        string         `json:"text"`
	Type        string         `json:"type"`
}

Content blocks represent displayable information in the Agent Client Protocol.

They provide a structured way to handle various types of user-facing content—whether it's text from language models, images for analysis, or embedded resources for context.

Content blocks appear in: - User prompts sent via 'session/prompt' - Language model output streamed through 'session/update' notifications - Progress updates and results from tool calls

This structure is compatible with the Model Context Protocol (MCP), enabling agents to seamlessly forward content from MCP tool outputs without transformation.

See protocol docs: Content(https://agentclientprotocol.com/protocol/content) Text content. May be plain text or formatted with Markdown.

All agents MUST support text content blocks in prompts. Clients SHOULD render this text as Markdown.

type ContentChunk added in v0.10.8

type ContentChunk struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
	// A single item of content
	Content ContentBlock `json:"content"`
	// **UNSTABLE**
	//
	// This capability is not part of the spec yet, and may be removed or changed at any point.
	//
	// A unique identifier for the message this chunk belongs to.
	//
	// All chunks belonging to the same message share the same 'messageId'.
	// A change in 'messageId' indicates a new message has started.
	// Both clients and agents MUST use UUID format for message IDs.
	MessageId *string `json:"messageId,omitempty"`
}

A streamed item of content

type Cost added in v0.10.8

type Cost struct {
	// Total cumulative cost for session.
	Amount float64 `json:"amount"`
	// ISO 4217 currency code (e.g., "USD", "EUR").
	Currency string `json:"currency"`
}

**UNSTABLE**

This capability is not part of the spec yet, and may be removed or changed at any point.

Cost information for a session.

type CreateTerminalRequest

type CreateTerminalRequest struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
	// Array of command arguments.
	Args []string `json:"args,omitempty"`
	// The command to execute.
	Command string `json:"command"`
	// Working directory for the command (absolute path).
	Cwd *string `json:"cwd,omitempty"`
	// Environment variables for the command.
	Env []EnvVariable `json:"env,omitempty"`
	// Maximum number of output bytes to retain.
	//
	// When the limit is exceeded, the Client truncates from the beginning of the output
	// to stay within the limit.
	//
	// The Client MUST ensure truncation happens at a character boundary to maintain valid
	// string output, even if this means the retained output is slightly less than the
	// specified limit.
	OutputByteLimit *int `json:"outputByteLimit,omitempty"`
	// The session ID for this request.
	SessionId SessionId `json:"sessionId"`
}

Request to create a new terminal and execute a command.

func (*CreateTerminalRequest) Validate

func (v *CreateTerminalRequest) Validate() error

type CreateTerminalResponse

type CreateTerminalResponse struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
	// The unique identifier for the created terminal.
	TerminalId string `json:"terminalId"`
}

Response containing the ID of the created terminal.

func (*CreateTerminalResponse) Validate

func (v *CreateTerminalResponse) Validate() error

type CurrentModeUpdate added in v0.10.8

type CurrentModeUpdate struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
	// The ID of the current mode
	CurrentModeId SessionModeId `json:"currentModeId"`
}

The current mode of the session has changed

See protocol docs: [Session Modes](https://agentclientprotocol.com/protocol/session-modes)

type Diff added in v0.10.8

type Diff struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
	// The new content after modification.
	NewText string `json:"newText"`
	// The original content (None for new files).
	OldText *string `json:"oldText,omitempty"`
	// The file path being modified.
	Path string `json:"path"`
}

A diff representing file modifications.

Shows changes to files in a format suitable for display in the client UI.

See protocol docs: Content(https://agentclientprotocol.com/protocol/tool-calls#content)

type ElicitationCapabilities added in v0.11.7

type ElicitationCapabilities struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
	// Whether the client supports form-based elicitation.
	Form *ElicitationFormCapabilities `json:"form,omitempty"`
	// Whether the client supports URL-based elicitation.
	Url *ElicitationUrlCapabilities `json:"url,omitempty"`
}

**UNSTABLE**

This capability is not part of the spec yet, and may be removed or changed at any point.

Elicitation capabilities supported by the client.

type ElicitationFormCapabilities added in v0.11.7

type ElicitationFormCapabilities struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
}

**UNSTABLE**

This capability is not part of the spec yet, and may be removed or changed at any point.

Form-based elicitation capabilities.

type ElicitationUrlCapabilities added in v0.11.7

type ElicitationUrlCapabilities struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
}

**UNSTABLE**

This capability is not part of the spec yet, and may be removed or changed at any point.

URL-based elicitation capabilities.

type EmbeddedResource

type EmbeddedResource struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta        map[string]any           `json:"_meta,omitempty"`
	Annotations *Annotations             `json:"annotations,omitempty"`
	Resource    EmbeddedResourceResource `json:"resource"`
}

The contents of a resource, embedded into a prompt or tool call result.

type EmbeddedResourceResource

type EmbeddedResourceResource struct {
	TextResourceContents *TextResourceContents `json:"-"`
	BlobResourceContents *BlobResourceContents `json:"-"`
}

Resource content that can be embedded in a message.

func (EmbeddedResourceResource) MarshalJSON

func (u EmbeddedResourceResource) MarshalJSON() ([]byte, error)

func (*EmbeddedResourceResource) UnmarshalJSON

func (u *EmbeddedResourceResource) UnmarshalJSON(b []byte) error

type EnvVariable

type EnvVariable struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
	// The name of the environment variable.
	Name string `json:"name"`
	// The value to set for the environment variable.
	Value string `json:"value"`
}

An environment variable to set when launching an MCP server.

type Error added in v0.6.3

type Error struct {
	// A number indicating the error type that occurred.
	// This must be an integer as defined in the JSON-RPC specification.
	Code ErrorCode `json:"code"`
	// Optional primitive or structured value that contains additional information about the error.
	// This may include debugging information or context-specific details.
	Data any `json:"data,omitempty"`
	// A string providing a short description of the error.
	// The message should be limited to a concise single sentence.
	Message string `json:"message"`
}

JSON-RPC error object.

Represents an error that occurred during method execution, following the JSON-RPC 2.0 error object specification with optional additional data.

See protocol docs: [JSON-RPC Error Object](https://www.jsonrpc.org/specification#error_object)

type ErrorCode added in v0.10.8

type ErrorCode struct {
	// **Parse error**: Invalid JSON was received by the server.
	// An error occurred on the server while parsing the JSON text.
	ParseError *ErrorCodeParseError `json:"-"`
	// **Invalid request**: The JSON sent is not a valid Request object.
	InvalidRequest *ErrorCodeInvalidRequest `json:"-"`
	// **Method not found**: The method does not exist or is not available.
	MethodNotFound *ErrorCodeMethodNotFound `json:"-"`
	// **Invalid params**: Invalid method parameter(s).
	InvalidParams *ErrorCodeInvalidParams `json:"-"`
	// **Internal error**: Internal JSON-RPC error.
	// Reserved for implementation-defined server errors.
	InternalError *ErrorCodeInternalError `json:"-"`
	// **Authentication required**: Authentication is required before this operation can be performed.
	AuthenticationRequired *ErrorCodeAuthenticationRequired `json:"-"`
	// **Resource not found**: A given resource, such as a file, was not found.
	ResourceNotFound *ErrorCodeResourceNotFound `json:"-"`
	// Other undefined error code.
	Other *ErrorCodeOther `json:"-"`
}

func (ErrorCode) MarshalJSON added in v0.10.8

func (u ErrorCode) MarshalJSON() ([]byte, error)

func (*ErrorCode) UnmarshalJSON added in v0.10.8

func (u *ErrorCode) UnmarshalJSON(b []byte) error

type ErrorCodeAuthenticationRequired added in v0.10.8

type ErrorCodeAuthenticationRequired int

**Authentication required**: Authentication is required before this operation can be performed.

type ErrorCodeInternalError added in v0.10.8

type ErrorCodeInternalError int

**Internal error**: Internal JSON-RPC error. Reserved for implementation-defined server errors.

type ErrorCodeInvalidParams added in v0.10.8

type ErrorCodeInvalidParams int

**Invalid params**: Invalid method parameter(s).

type ErrorCodeInvalidRequest added in v0.10.8

type ErrorCodeInvalidRequest int

**Invalid request**: The JSON sent is not a valid Request object.

type ErrorCodeMethodNotFound added in v0.10.8

type ErrorCodeMethodNotFound int

**Method not found**: The method does not exist or is not available.

type ErrorCodeOther added in v0.10.8

type ErrorCodeOther int

Other undefined error code.

type ErrorCodeParseError added in v0.10.8

type ErrorCodeParseError int

Predefined error codes for common JSON-RPC and ACP-specific errors.

These codes follow the JSON-RPC 2.0 specification for standard errors and use the reserved range (-32000 to -32099) for protocol-specific errors. **Parse error**: Invalid JSON was received by the server. An error occurred on the server while parsing the JSON text.

type ErrorCodeResourceNotFound added in v0.10.8

type ErrorCodeResourceNotFound int

**Resource not found**: A given resource, such as a file, was not found.

type ExtNotification added in v0.10.8

type ExtNotification any

Allows the Agent to send an arbitrary notification that is not part of the ACP spec. Extension notifications provide a way to send one-way messages for custom functionality while maintaining protocol compatibility.

See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) ExtNotification is a union or complex schema; represented generically.

type ExtRequest added in v0.10.8

type ExtRequest any

Allows for sending an arbitrary request that is not part of the ACP spec. Extension methods provide a way to add custom functionality while maintaining protocol compatibility.

See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) ExtRequest is a union or complex schema; represented generically.

type ExtResponse added in v0.10.8

type ExtResponse any

Allows for sending an arbitrary response to an ['ExtRequest'] that is not part of the ACP spec. Extension methods provide a way to add custom functionality while maintaining protocol compatibility.

See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) ExtResponse is a union or complex schema; represented generically.

type ExtensionMethodHandler added in v0.10.8

type ExtensionMethodHandler interface {
	HandleExtensionMethod(ctx context.Context, method string, params json.RawMessage) (any, error)
}

ExtensionMethodHandler can be implemented by either an Agent or a Client.

ACP extension methods are JSON-RPC methods whose names begin with "_". They provide a stable namespace for custom functionality that is not part of the core ACP spec.

If the method is unrecognized, implementations should return NewMethodNotFound(method).

See: https://agentclientprotocol.com/protocol/extensibility#extension-methods

type FileSystemCapabilities added in v0.11.7

type FileSystemCapabilities struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
	// Whether the Client supports 'fs/read_text_file' requests.
	//
	// Defaults to false if unset.
	ReadTextFile bool `json:"readTextFile,omitempty"`
	// Whether the Client supports 'fs/write_text_file' requests.
	//
	// Defaults to false if unset.
	WriteTextFile bool `json:"writeTextFile,omitempty"`
}

File system capabilities that a client may support.

See protocol docs: [FileSystem](https://agentclientprotocol.com/protocol/initialization#filesystem)

func (FileSystemCapabilities) MarshalJSON added in v0.11.7

func (v FileSystemCapabilities) MarshalJSON() ([]byte, error)

func (*FileSystemCapabilities) UnmarshalJSON added in v0.11.7

func (v *FileSystemCapabilities) UnmarshalJSON(b []byte) error

type HttpHeader

type HttpHeader struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
	// The name of the HTTP header.
	Name string `json:"name"`
	// The value to set for the HTTP header.
	Value string `json:"value"`
}

An HTTP header to set when making requests to the MCP server.

type ImageContent

type ImageContent struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta        map[string]any `json:"_meta,omitempty"`
	Annotations *Annotations   `json:"annotations,omitempty"`
	Data        string         `json:"data"`
	MimeType    string         `json:"mimeType"`
	Uri         *string        `json:"uri,omitempty"`
}

An image provided to or from an LLM.

type Implementation added in v0.6.3

type Implementation struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
	// Intended for programmatic or logical use, but can be used as a display
	// name fallback if title isn’t present.
	Name string `json:"name"`
	// Intended for UI and end-user contexts — optimized to be human-readable
	// and easily understood.
	//
	// If not provided, the name should be used for display.
	Title *string `json:"title,omitempty"`
	// Version of the implementation. Can be displayed to the user or used
	// for debugging or metrics purposes. (e.g. "1.0.0").
	Version string `json:"version"`
}

Metadata about the implementation of the client or agent. Describes the name and version of an MCP implementation, with an optional title for UI representation.

type InitializeRequest

type InitializeRequest struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
	// Capabilities supported by the client.
	//
	// Defaults to {"auth":{"terminal":false},"fs":{"readTextFile":false,"writeTextFile":false},"terminal":false} if unset.
	ClientCapabilities ClientCapabilities `json:"clientCapabilities,omitempty"`
	// Information about the Client name and version sent to the Agent.
	//
	// Note: in future versions of the protocol, this will be required.
	ClientInfo *Implementation `json:"clientInfo,omitempty"`
	// The latest protocol version supported by the client.
	ProtocolVersion ProtocolVersion `json:"protocolVersion"`
}

Request parameters for the initialize method.

Sent by the client to establish connection and negotiate capabilities.

See protocol docs: [Initialization](https://agentclientprotocol.com/protocol/initialization)

func (InitializeRequest) MarshalJSON

func (v InitializeRequest) MarshalJSON() ([]byte, error)

func (*InitializeRequest) UnmarshalJSON

func (v *InitializeRequest) UnmarshalJSON(b []byte) error

func (*InitializeRequest) Validate

func (v *InitializeRequest) Validate() error

type InitializeResponse

type InitializeResponse struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
	// Capabilities supported by the agent.
	//
	// Defaults to {"auth":{},"loadSession":false,"mcpCapabilities":{"http":false,"sse":false},"promptCapabilities":{"audio":false,"embeddedContext":false,"image":false},"sessionCapabilities":{}} if unset.
	AgentCapabilities AgentCapabilities `json:"agentCapabilities,omitempty"`
	// Information about the Agent name and version sent to the Client.
	//
	// Note: in future versions of the protocol, this will be required.
	AgentInfo *Implementation `json:"agentInfo,omitempty"`
	// Authentication methods supported by the agent.
	//
	// Defaults to [] if unset.
	AuthMethods []AuthMethod `json:"authMethods"`
	// The protocol version the client specified if supported by the agent,
	// or the latest protocol version supported by the agent.
	//
	// The client should disconnect, if it doesn't support this version.
	ProtocolVersion ProtocolVersion `json:"protocolVersion"`
}

Response to the 'initialize' method.

Contains the negotiated protocol version and agent capabilities.

See protocol docs: [Initialization](https://agentclientprotocol.com/protocol/initialization)

func (InitializeResponse) MarshalJSON

func (v InitializeResponse) MarshalJSON() ([]byte, error)

func (*InitializeResponse) UnmarshalJSON

func (v *InitializeResponse) UnmarshalJSON(b []byte) error

func (*InitializeResponse) Validate

func (v *InitializeResponse) Validate() error

type KillTerminalRequest added in v0.11.7

type KillTerminalRequest struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
	// The session ID for this request.
	SessionId SessionId `json:"sessionId"`
	// The ID of the terminal to kill.
	TerminalId string `json:"terminalId"`
}

Request to kill a terminal without releasing it.

func (*KillTerminalRequest) Validate added in v0.11.7

func (v *KillTerminalRequest) Validate() error

type KillTerminalResponse added in v0.11.7

type KillTerminalResponse struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
}

Response to 'terminal/kill' method

func (*KillTerminalResponse) Validate added in v0.11.7

func (v *KillTerminalResponse) Validate() error

type ListSessionsRequest added in v0.11.7

type ListSessionsRequest struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
	// **UNSTABLE**
	//
	// This capability is not part of the spec yet, and may be removed or changed at any point.
	//
	// Filter sessions by the exact ordered additional workspace roots. Each path must be absolute.
	//
	// This filter applies only when the field is present and non-empty. When
	// omitted or empty, no additional-root filter is applied.
	AdditionalDirectories []string `json:"additionalDirectories,omitempty"`
	// Opaque cursor token from a previous response's nextCursor field for cursor-based pagination
	Cursor *string `json:"cursor,omitempty"`
	// Filter sessions by working directory. Must be an absolute path.
	Cwd *string `json:"cwd,omitempty"`
}

Request parameters for listing existing sessions.

Only available if the Agent supports the 'sessionCapabilities.list' capability.

func (*ListSessionsRequest) Validate added in v0.11.7

func (v *ListSessionsRequest) Validate() error

type ListSessionsResponse added in v0.11.7

type ListSessionsResponse struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
	// Opaque cursor token. If present, pass this in the next request's cursor parameter
	// to fetch the next page. If absent, there are no more results.
	NextCursor *string `json:"nextCursor,omitempty"`
	// Array of session information objects
	Sessions []SessionInfo `json:"sessions"`
}

Response from listing sessions.

func (*ListSessionsResponse) Validate added in v0.11.7

func (v *ListSessionsResponse) Validate() error

type LoadSessionRequest

type LoadSessionRequest struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
	// **UNSTABLE**
	//
	// This capability is not part of the spec yet, and may be removed or changed at any point.
	//
	// Additional workspace roots to activate for this session. Each path must be absolute.
	//
	// When omitted or empty, no additional roots are activated. When non-empty,
	// this is the complete resulting additional-root list for the loaded
	// session.
	AdditionalDirectories []string `json:"additionalDirectories,omitempty"`
	// The working directory for this session.
	Cwd string `json:"cwd"`
	// List of MCP servers to connect to for this session.
	McpServers []McpServer `json:"mcpServers"`
	// The ID of the session to load.
	SessionId SessionId `json:"sessionId"`
}

Request parameters for loading an existing session.

Only available if the Agent supports the 'loadSession' capability.

See protocol docs: [Loading Sessions](https://agentclientprotocol.com/protocol/session-setup#loading-sessions)

func (*LoadSessionRequest) Validate

func (v *LoadSessionRequest) Validate() error

type LoadSessionResponse

type LoadSessionResponse struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
	// Initial session configuration options if supported by the Agent.
	ConfigOptions []SessionConfigOption `json:"configOptions,omitempty"`
	// **UNSTABLE**
	//
	// This capability is not part of the spec yet, and may be removed or changed at any point.
	//
	// Initial model state if supported by the Agent
	Models *SessionModelState `json:"models,omitempty"`
	// Initial mode state if supported by the Agent
	//
	// See protocol docs: [Session Modes](https://agentclientprotocol.com/protocol/session-modes)
	Modes *SessionModeState `json:"modes,omitempty"`
}

Response from loading an existing session.

func (*LoadSessionResponse) Validate

func (v *LoadSessionResponse) Validate() error

type LogoutCapabilities added in v0.11.7

type LogoutCapabilities struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
}

**UNSTABLE**

This capability is not part of the spec yet, and may be removed or changed at any point.

Logout capabilities supported by the agent.

By supplying '{}' it means that the agent supports the logout method.

type McpCapabilities

type McpCapabilities struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
	// Agent supports ['McpServer::Http'].
	//
	// Defaults to false if unset.
	Http bool `json:"http,omitempty"`
	// Agent supports ['McpServer::Sse'].
	//
	// Defaults to false if unset.
	Sse bool `json:"sse,omitempty"`
}

MCP capabilities supported by the agent

func (McpCapabilities) MarshalJSON

func (v McpCapabilities) MarshalJSON() ([]byte, error)

func (*McpCapabilities) UnmarshalJSON

func (v *McpCapabilities) UnmarshalJSON(b []byte) error

type McpServer

type McpServer struct {
	// HTTP transport configuration
	//
	// Only available when the Agent capabilities indicate 'mcp_capabilities.http' is 'true'.
	Http *McpServerHttpInline `json:"-"`
	// SSE transport configuration
	//
	// Only available when the Agent capabilities indicate 'mcp_capabilities.sse' is 'true'.
	Sse *McpServerSseInline `json:"-"`
	// Stdio transport configuration
	//
	// All Agents MUST support this transport.
	Stdio *McpServerStdio `json:"-"`
}

func (McpServer) MarshalJSON

func (u McpServer) MarshalJSON() ([]byte, error)

func (*McpServer) UnmarshalJSON

func (u *McpServer) UnmarshalJSON(b []byte) error

type McpServerHttp

type McpServerHttp struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
	// HTTP headers to set when making requests to the MCP server.
	Headers []HttpHeader `json:"headers"`
	// Human-readable name identifying this MCP server.
	Name string `json:"name"`
	// URL to the MCP server.
	Url string `json:"url"`
}

HTTP transport configuration for MCP.

type McpServerHttpInline added in v0.10.8

type McpServerHttpInline struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
	// HTTP headers to set when making requests to the MCP server.
	Headers []HttpHeader `json:"headers"`
	// Human-readable name identifying this MCP server.
	Name string `json:"name"`
	Type string `json:"type"`
	// URL to the MCP server.
	Url string `json:"url"`
}

Configuration for connecting to an MCP (Model Context Protocol) server.

MCP servers provide tools and context that the agent can use when processing prompts.

See protocol docs: [MCP Servers](https://agentclientprotocol.com/protocol/session-setup#mcp-servers) HTTP transport configuration

Only available when the Agent capabilities indicate 'mcp_capabilities.http' is 'true'.

type McpServerSse

type McpServerSse struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
	// HTTP headers to set when making requests to the MCP server.
	Headers []HttpHeader `json:"headers"`
	// Human-readable name identifying this MCP server.
	Name string `json:"name"`
	// URL to the MCP server.
	Url string `json:"url"`
}

SSE transport configuration for MCP.

type McpServerSseInline added in v0.10.8

type McpServerSseInline struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
	// HTTP headers to set when making requests to the MCP server.
	Headers []HttpHeader `json:"headers"`
	// Human-readable name identifying this MCP server.
	Name string `json:"name"`
	Type string `json:"type"`
	// URL to the MCP server.
	Url string `json:"url"`
}

SSE transport configuration

Only available when the Agent capabilities indicate 'mcp_capabilities.sse' is 'true'.

type McpServerStdio added in v0.6.3

type McpServerStdio struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
	// Command-line arguments to pass to the MCP server.
	Args []string `json:"args"`
	// Path to the MCP server executable.
	Command string `json:"command"`
	// Environment variables to set when launching the MCP server.
	Env []EnvVariable `json:"env"`
	// Human-readable name identifying this MCP server.
	Name string `json:"name"`
}

Stdio transport configuration for MCP.

type MethodHandler

type MethodHandler func(ctx context.Context, method string, params json.RawMessage) (any, *RequestError)

type ModelId

type ModelId string

**UNSTABLE**

This capability is not part of the spec yet, and may be removed or changed at any point.

A unique identifier for a model.

type ModelInfo

type ModelInfo struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
	// Optional description of the model.
	Description *string `json:"description,omitempty"`
	// Unique identifier for the model.
	ModelId ModelId `json:"modelId"`
	// Human-readable name of the model.
	Name string `json:"name"`
}

**UNSTABLE**

This capability is not part of the spec yet, and may be removed or changed at any point.

Information about a selectable model.

type NesCapabilities added in v0.11.7

type NesCapabilities struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
	// Context the agent wants attached to each suggestion request.
	Context *NesContextCapabilities `json:"context,omitempty"`
	// Events the agent wants to receive.
	Events *NesEventCapabilities `json:"events,omitempty"`
}

NES capabilities advertised by the agent during initialization.

type NesContextCapabilities added in v0.11.7

type NesContextCapabilities struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
	// Whether the agent wants diagnostics context.
	Diagnostics *NesDiagnosticsCapabilities `json:"diagnostics,omitempty"`
	// Whether the agent wants edit history context.
	EditHistory *NesEditHistoryCapabilities `json:"editHistory,omitempty"`
	// Whether the agent wants open files context.
	OpenFiles *NesOpenFilesCapabilities `json:"openFiles,omitempty"`
	// Whether the agent wants recent files context.
	RecentFiles *NesRecentFilesCapabilities `json:"recentFiles,omitempty"`
	// Whether the agent wants related snippets context.
	RelatedSnippets *NesRelatedSnippetsCapabilities `json:"relatedSnippets,omitempty"`
	// Whether the agent wants user actions context.
	UserActions *NesUserActionsCapabilities `json:"userActions,omitempty"`
}

Context capabilities the agent wants attached to each suggestion request.

type NesDiagnosticsCapabilities added in v0.11.7

type NesDiagnosticsCapabilities struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
}

Capabilities for diagnostics context.

type NesDocumentDidChangeCapabilities added in v0.11.7

type NesDocumentDidChangeCapabilities struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
	// The sync kind the agent wants: '"full"' or '"incremental"'.
	SyncKind TextDocumentSyncKind `json:"syncKind"`
}

Capabilities for 'document/didChange' events.

type NesDocumentDidCloseCapabilities added in v0.11.7

type NesDocumentDidCloseCapabilities struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
}

Marker for 'document/didClose' capability support.

type NesDocumentDidFocusCapabilities added in v0.11.7

type NesDocumentDidFocusCapabilities struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
}

Marker for 'document/didFocus' capability support.

type NesDocumentDidOpenCapabilities added in v0.11.7

type NesDocumentDidOpenCapabilities struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
}

Marker for 'document/didOpen' capability support.

type NesDocumentDidSaveCapabilities added in v0.11.7

type NesDocumentDidSaveCapabilities struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
}

Marker for 'document/didSave' capability support.

type NesDocumentEventCapabilities added in v0.11.7

type NesDocumentEventCapabilities struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
	// Whether the agent wants 'document/didChange' events, and the sync kind.
	DidChange *NesDocumentDidChangeCapabilities `json:"didChange,omitempty"`
	// Whether the agent wants 'document/didClose' events.
	DidClose *NesDocumentDidCloseCapabilities `json:"didClose,omitempty"`
	// Whether the agent wants 'document/didFocus' events.
	DidFocus *NesDocumentDidFocusCapabilities `json:"didFocus,omitempty"`
	// Whether the agent wants 'document/didOpen' events.
	DidOpen *NesDocumentDidOpenCapabilities `json:"didOpen,omitempty"`
	// Whether the agent wants 'document/didSave' events.
	DidSave *NesDocumentDidSaveCapabilities `json:"didSave,omitempty"`
}

Document event capabilities the agent wants to receive.

type NesEditHistoryCapabilities added in v0.11.7

type NesEditHistoryCapabilities struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
	// Maximum number of edit history entries the agent can use.
	MaxCount *int `json:"maxCount,omitempty"`
}

Capabilities for edit history context.

type NesEventCapabilities added in v0.11.7

type NesEventCapabilities struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
	// Document event capabilities.
	Document *NesDocumentEventCapabilities `json:"document,omitempty"`
}

Event capabilities the agent can consume.

type NesJumpCapabilities added in v0.11.7

type NesJumpCapabilities struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
}

Marker for jump suggestion support.

type NesOpenFilesCapabilities added in v0.11.7

type NesOpenFilesCapabilities struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
}

Capabilities for open files context.

type NesRecentFilesCapabilities added in v0.11.7

type NesRecentFilesCapabilities struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
	// Maximum number of recent files the agent can use.
	MaxCount *int `json:"maxCount,omitempty"`
}

Capabilities for recent files context.

type NesRelatedSnippetsCapabilities added in v0.11.7

type NesRelatedSnippetsCapabilities struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
}

Capabilities for related snippets context.

type NesRenameCapabilities added in v0.11.7

type NesRenameCapabilities struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
}

Marker for rename suggestion support.

type NesSearchAndReplaceCapabilities added in v0.11.7

type NesSearchAndReplaceCapabilities struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
}

Marker for search and replace suggestion support.

type NesUserActionsCapabilities added in v0.11.7

type NesUserActionsCapabilities struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
	// Maximum number of user actions the agent can use.
	MaxCount *int `json:"maxCount,omitempty"`
}

Capabilities for user actions context.

type NewSessionRequest

type NewSessionRequest struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
	// **UNSTABLE**
	//
	// This capability is not part of the spec yet, and may be removed or changed at any point.
	//
	// Additional workspace roots for this session. Each path must be absolute.
	//
	// These expand the session's filesystem scope without changing 'cwd', which
	// remains the base for relative paths. When omitted or empty, no
	// additional roots are activated for the new session.
	AdditionalDirectories []string `json:"additionalDirectories,omitempty"`
	// The working directory for this session. Must be an absolute path.
	Cwd string `json:"cwd"`
	// List of MCP (Model Context Protocol) servers the agent should connect to.
	McpServers []McpServer `json:"mcpServers"`
}

Request parameters for creating a new session.

See protocol docs: [Creating a Session](https://agentclientprotocol.com/protocol/session-setup#creating-a-session)

func (*NewSessionRequest) Validate

func (v *NewSessionRequest) Validate() error

type NewSessionResponse

type NewSessionResponse struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
	// Initial session configuration options if supported by the Agent.
	ConfigOptions []SessionConfigOption `json:"configOptions,omitempty"`
	// **UNSTABLE**
	//
	// This capability is not part of the spec yet, and may be removed or changed at any point.
	//
	// Initial model state if supported by the Agent
	Models *SessionModelState `json:"models,omitempty"`
	// Initial mode state if supported by the Agent
	//
	// See protocol docs: [Session Modes](https://agentclientprotocol.com/protocol/session-modes)
	Modes *SessionModeState `json:"modes,omitempty"`
	// Unique identifier for the created session.
	//
	// Used in all subsequent requests for this conversation.
	SessionId SessionId `json:"sessionId"`
}

Response from creating a new session.

See protocol docs: [Creating a Session](https://agentclientprotocol.com/protocol/session-setup#creating-a-session)

func (*NewSessionResponse) Validate

func (v *NewSessionResponse) Validate() error

type PermissionOption

type PermissionOption struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
	// Hint about the nature of this permission option.
	Kind PermissionOptionKind `json:"kind"`
	// Human-readable label to display to the user.
	Name string `json:"name"`
	// Unique identifier for this permission option.
	OptionId PermissionOptionId `json:"optionId"`
}

An option presented to the user when requesting permission.

type PermissionOptionId

type PermissionOptionId string

Unique identifier for a permission option.

type PermissionOptionKind

type PermissionOptionKind string

The type of permission option being presented to the user.

Helps clients choose appropriate icons and UI treatment.

const (
	PermissionOptionKindAllowOnce    PermissionOptionKind = "allow_once"
	PermissionOptionKindAllowAlways  PermissionOptionKind = "allow_always"
	PermissionOptionKindRejectOnce   PermissionOptionKind = "reject_once"
	PermissionOptionKindRejectAlways PermissionOptionKind = "reject_always"
)

type Plan

type Plan struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
	// The list of tasks to be accomplished.
	//
	// When updating a plan, the agent must send a complete list of all entries
	// with their current status. The client replaces the entire plan with each update.
	Entries []PlanEntry `json:"entries"`
}

An execution plan for accomplishing complex tasks.

Plans consist of multiple entries representing individual tasks or goals. Agents report plans to clients to provide visibility into their execution strategy. Plans can evolve during execution as the agent discovers new requirements or completes tasks.

See protocol docs: [Agent Plan](https://agentclientprotocol.com/protocol/agent-plan)

type PlanEntry

type PlanEntry struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
	// Human-readable description of what this task aims to accomplish.
	Content string `json:"content"`
	// The relative importance of this task.
	// Used to indicate which tasks are most critical to the overall goal.
	Priority PlanEntryPriority `json:"priority"`
	// Current execution status of this task.
	Status PlanEntryStatus `json:"status"`
}

A single entry in the execution plan.

Represents a task or goal that the assistant intends to accomplish as part of fulfilling the user's request. See protocol docs: [Plan Entries](https://agentclientprotocol.com/protocol/agent-plan#plan-entries)

type PlanEntryPriority

type PlanEntryPriority string

Priority levels for plan entries.

Used to indicate the relative importance or urgency of different tasks in the execution plan. See protocol docs: [Plan Entries](https://agentclientprotocol.com/protocol/agent-plan#plan-entries)

const (
	PlanEntryPriorityHigh   PlanEntryPriority = "high"
	PlanEntryPriorityMedium PlanEntryPriority = "medium"
	PlanEntryPriorityLow    PlanEntryPriority = "low"
)

type PlanEntryStatus

type PlanEntryStatus string

Status of a plan entry in the execution flow.

Tracks the lifecycle of each task from planning through completion. See protocol docs: [Plan Entries](https://agentclientprotocol.com/protocol/agent-plan#plan-entries)

const (
	PlanEntryStatusPending    PlanEntryStatus = "pending"
	PlanEntryStatusInProgress PlanEntryStatus = "in_progress"
	PlanEntryStatusCompleted  PlanEntryStatus = "completed"
)

type PositionEncodingKind added in v0.11.7

type PositionEncodingKind string

The encoding used for character offsets in positions.

Follows the same conventions as LSP 3.17. The default is UTF-16.

const (
	PositionEncodingKindUtf16 PositionEncodingKind = "utf-16"
	PositionEncodingKindUtf32 PositionEncodingKind = "utf-32"
	PositionEncodingKindUtf8  PositionEncodingKind = "utf-8"
)

type PromptCapabilities

type PromptCapabilities struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
	// Agent supports ['ContentBlock::Audio'].
	//
	// Defaults to false if unset.
	Audio bool `json:"audio,omitempty"`
	// Agent supports embedded context in 'session/prompt' requests.
	//
	// When enabled, the Client is allowed to include ['ContentBlock::Resource']
	// in prompt requests for pieces of context that are referenced in the message.
	//
	// Defaults to false if unset.
	EmbeddedContext bool `json:"embeddedContext,omitempty"`
	// Agent supports ['ContentBlock::Image'].
	//
	// Defaults to false if unset.
	Image bool `json:"image,omitempty"`
}

Prompt capabilities supported by the agent in 'session/prompt' requests.

Baseline agent functionality requires support for ['ContentBlock::Text'] and ['ContentBlock::ResourceLink'] in prompt requests.

Other variants must be explicitly opted in to. Capabilities for different types of content in prompt requests.

Indicates which content types beyond the baseline (text and resource links) the agent can process.

See protocol docs: [Prompt Capabilities](https://agentclientprotocol.com/protocol/initialization#prompt-capabilities)

func (PromptCapabilities) MarshalJSON

func (v PromptCapabilities) MarshalJSON() ([]byte, error)

func (*PromptCapabilities) UnmarshalJSON

func (v *PromptCapabilities) UnmarshalJSON(b []byte) error

type PromptRequest

type PromptRequest struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
	// **UNSTABLE**
	//
	// This capability is not part of the spec yet, and may be removed or changed at any point.
	//
	// A client-generated unique identifier for this user message.
	//
	// If provided, the Agent SHOULD echo this value as 'userMessageId' in the
	// ['PromptResponse'] to confirm it was recorded.
	// Both clients and agents MUST use UUID format for message IDs.
	MessageId *string `json:"messageId,omitempty"`
	// The blocks of content that compose the user's message.
	//
	// As a baseline, the Agent MUST support ['ContentBlock::Text'] and ['ContentBlock::ResourceLink'],
	// while other variants are optionally enabled via ['PromptCapabilities'].
	//
	// The Client MUST adapt its interface according to ['PromptCapabilities'].
	//
	// The client MAY include referenced pieces of context as either
	// ['ContentBlock::Resource'] or ['ContentBlock::ResourceLink'].
	//
	// When available, ['ContentBlock::Resource'] is preferred
	// as it avoids extra round-trips and allows the message to include
	// pieces of context from sources the agent may not have access to.
	Prompt []ContentBlock `json:"prompt"`
	// The ID of the session to send this user message to
	SessionId SessionId `json:"sessionId"`
}

Request parameters for sending a user prompt to the agent.

Contains the user's message and any additional context.

See protocol docs: [User Message](https://agentclientprotocol.com/protocol/prompt-turn#1-user-message)

func (*PromptRequest) Validate

func (v *PromptRequest) Validate() error

type PromptResponse

type PromptResponse struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
	// Indicates why the agent stopped processing the turn.
	StopReason StopReason `json:"stopReason"`
	// **UNSTABLE**
	//
	// This capability is not part of the spec yet, and may be removed or changed at any point.
	//
	// Token usage for this turn (optional).
	Usage *Usage `json:"usage,omitempty"`
	// **UNSTABLE**
	//
	// This capability is not part of the spec yet, and may be removed or changed at any point.
	//
	// The acknowledged user message ID.
	//
	// If the client provided a 'messageId' in the ['PromptRequest'], the agent echoes it here
	// to confirm it was recorded. If the client did not provide one, the agent MAY assign one
	// and return it here. Absence of this field indicates the agent did not record a message ID.
	UserMessageId *string `json:"userMessageId,omitempty"`
}

Response from processing a user prompt.

See protocol docs: [Check for Completion](https://agentclientprotocol.com/protocol/prompt-turn#4-check-for-completion)

func (*PromptResponse) Validate

func (v *PromptResponse) Validate() error

type ProtocolVersion

type ProtocolVersion int

Protocol version identifier.

This version is only bumped for breaking changes. Non-breaking changes should be introduced via capabilities.

type ProvidersCapabilities added in v0.11.7

type ProvidersCapabilities struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
}

**UNSTABLE**

This capability is not part of the spec yet, and may be removed or changed at any point.

Provider configuration capabilities supported by the agent.

By supplying '{}' it means that the agent supports provider configuration methods.

type ReadTextFileRequest

type ReadTextFileRequest struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
	// Maximum number of lines to read.
	Limit *int `json:"limit,omitempty"`
	// Line number to start reading from (1-based).
	Line *int `json:"line,omitempty"`
	// Absolute path to the file to read.
	Path string `json:"path"`
	// The session ID for this request.
	SessionId SessionId `json:"sessionId"`
}

Request to read content from a text file.

Only available if the client supports the 'fs.readTextFile' capability.

func (*ReadTextFileRequest) Validate

func (v *ReadTextFileRequest) Validate() error

type ReadTextFileResponse

type ReadTextFileResponse struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta    map[string]any `json:"_meta,omitempty"`
	Content string         `json:"content"`
}

Response containing the contents of a text file.

func (*ReadTextFileResponse) Validate

func (v *ReadTextFileResponse) Validate() error

type ReleaseTerminalRequest

type ReleaseTerminalRequest struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
	// The session ID for this request.
	SessionId SessionId `json:"sessionId"`
	// The ID of the terminal to release.
	TerminalId string `json:"terminalId"`
}

Request to release a terminal and free its resources.

func (*ReleaseTerminalRequest) Validate

func (v *ReleaseTerminalRequest) Validate() error

type ReleaseTerminalResponse

type ReleaseTerminalResponse struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
}

Response to terminal/release method

func (*ReleaseTerminalResponse) Validate

func (v *ReleaseTerminalResponse) Validate() error

type RequestError

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

RequestError represents a JSON-RPC error response.

func NewAuthRequired

func NewAuthRequired(data any) *RequestError

func NewInternalError

func NewInternalError(data any) *RequestError

func NewInvalidParams

func NewInvalidParams(data any) *RequestError

func NewInvalidRequest

func NewInvalidRequest(data any) *RequestError

func NewMethodNotFound

func NewMethodNotFound(method string) *RequestError

func NewParseError

func NewParseError(data any) *RequestError

func NewRequestCancelled added in v0.10.8

func NewRequestCancelled(data any) *RequestError

func (*RequestError) Error

func (e *RequestError) Error() string

type RequestId added in v0.10.8

type RequestId struct {
	Null   *RequestIdNull   `json:"-"`
	Number *RequestIdNumber `json:"-"`
	Str    *RequestIdStr    `json:"-"`
}

func (RequestId) MarshalJSON added in v0.10.8

func (u RequestId) MarshalJSON() ([]byte, error)

func (*RequestId) UnmarshalJSON added in v0.10.8

func (u *RequestId) UnmarshalJSON(b []byte) error

type RequestIdNull added in v0.10.8

type RequestIdNull struct{}

JSON RPC Request Id

An identifier established by the Client that MUST contain a String, Number, or NULL value if included. If it is not included it is assumed to be a notification. The value SHOULD normally not be Null [1] and Numbers SHOULD NOT contain fractional parts [2]

The Server MUST reply with the same value in the Response object if included. This member is used to correlate the context between the two objects.

[1] The use of Null as a value for the id member in a Request object is discouraged, because this specification uses a value of Null for Responses with an unknown id. Also, because JSON-RPC 1.0 uses an id value of Null for Notifications this could cause confusion in handling.

[2] Fractional parts may be problematic, since many decimal fractions cannot be represented exactly as binary fractions.

type RequestIdNumber added in v0.10.8

type RequestIdNumber int

type RequestIdStr added in v0.10.8

type RequestIdStr string

type RequestPermissionOutcome

type RequestPermissionOutcome struct {
	// The prompt turn was cancelled before the user responded.
	//
	// When a client sends a 'session/cancel' notification to cancel an ongoing
	// prompt turn, it MUST respond to all pending 'session/request_permission'
	// requests with this 'Cancelled' outcome.
	//
	// See protocol docs: [Cancellation](https://agentclientprotocol.com/protocol/prompt-turn#cancellation)
	Cancelled *RequestPermissionOutcomeCancelled `json:"-"`
	// The user selected one of the provided options.
	Selected *RequestPermissionOutcomeSelected `json:"-"`
}

func NewRequestPermissionOutcomeCancelled

func NewRequestPermissionOutcomeCancelled() RequestPermissionOutcome

NewRequestPermissionOutcomeCancelled constructs a RequestPermissionOutcome using the 'cancelled' variant.

func NewRequestPermissionOutcomeSelected

func NewRequestPermissionOutcomeSelected(optionId PermissionOptionId) RequestPermissionOutcome

NewRequestPermissionOutcomeSelected constructs a RequestPermissionOutcome using the 'selected' variant.

func (RequestPermissionOutcome) MarshalJSON

func (u RequestPermissionOutcome) MarshalJSON() ([]byte, error)

func (*RequestPermissionOutcome) UnmarshalJSON

func (u *RequestPermissionOutcome) UnmarshalJSON(b []byte) error

func (*RequestPermissionOutcome) Validate

func (u *RequestPermissionOutcome) Validate() error

type RequestPermissionOutcomeCancelled

type RequestPermissionOutcomeCancelled struct {
	Outcome string `json:"outcome"`
}

The outcome of a permission request. The prompt turn was cancelled before the user responded.

When a client sends a 'session/cancel' notification to cancel an ongoing prompt turn, it MUST respond to all pending 'session/request_permission' requests with this 'Cancelled' outcome.

See protocol docs: [Cancellation](https://agentclientprotocol.com/protocol/prompt-turn#cancellation)

type RequestPermissionOutcomeSelected

type RequestPermissionOutcomeSelected struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
	// The ID of the option the user selected.
	OptionId PermissionOptionId `json:"optionId"`
	Outcome  string             `json:"outcome"`
}

The user selected one of the provided options.

type RequestPermissionRequest

type RequestPermissionRequest struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
	// Available permission options for the user to choose from.
	Options []PermissionOption `json:"options"`
	// The session ID for this request.
	SessionId SessionId `json:"sessionId"`
	// Details about the tool call requiring permission.
	ToolCall ToolCallUpdate `json:"toolCall"`
}

Request for user permission to execute a tool call.

Sent when the agent needs authorization before performing a sensitive operation.

See protocol docs: [Requesting Permission](https://agentclientprotocol.com/protocol/tool-calls#requesting-permission)

func (*RequestPermissionRequest) Validate

func (v *RequestPermissionRequest) Validate() error

type RequestPermissionResponse

type RequestPermissionResponse struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
	// The user's decision on the permission request.
	Outcome RequestPermissionOutcome `json:"outcome"`
}

Response to a permission request.

func (*RequestPermissionResponse) Validate

func (v *RequestPermissionResponse) Validate() error
type ResourceLink struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta        map[string]any `json:"_meta,omitempty"`
	Annotations *Annotations   `json:"annotations,omitempty"`
	Description *string        `json:"description,omitempty"`
	MimeType    *string        `json:"mimeType,omitempty"`
	Name        string         `json:"name"`
	Size        *int           `json:"size,omitempty"`
	Title       *string        `json:"title,omitempty"`
	Uri         string         `json:"uri"`
}

A resource that the server is capable of reading, included in a prompt or tool call result.

type ResumeSessionRequest added in v0.12.2

type ResumeSessionRequest struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
	// **UNSTABLE**
	//
	// This capability is not part of the spec yet, and may be removed or changed at any point.
	//
	// Additional workspace roots to activate for this session. Each path must be absolute.
	//
	// When omitted or empty, no additional roots are activated. When non-empty,
	// this is the complete resulting additional-root list for the resumed
	// session.
	AdditionalDirectories []string `json:"additionalDirectories,omitempty"`
	// The working directory for this session.
	Cwd string `json:"cwd"`
	// List of MCP servers to connect to for this session.
	McpServers []McpServer `json:"mcpServers,omitempty"`
	// The ID of the session to resume.
	SessionId SessionId `json:"sessionId"`
}

Request parameters for resuming an existing session.

Resumes an existing session without returning previous messages (unlike 'session/load'). This is useful for agents that can resume sessions but don't implement full session loading.

Only available if the Agent supports the 'sessionCapabilities.resume' capability.

func (*ResumeSessionRequest) Validate added in v0.12.2

func (v *ResumeSessionRequest) Validate() error

type ResumeSessionResponse added in v0.12.2

type ResumeSessionResponse struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
	// Initial session configuration options if supported by the Agent.
	ConfigOptions []SessionConfigOption `json:"configOptions,omitempty"`
	// **UNSTABLE**
	//
	// This capability is not part of the spec yet, and may be removed or changed at any point.
	//
	// Initial model state if supported by the Agent
	Models *SessionModelState `json:"models,omitempty"`
	// Initial mode state if supported by the Agent
	//
	// See protocol docs: [Session Modes](https://agentclientprotocol.com/protocol/session-modes)
	Modes *SessionModeState `json:"modes,omitempty"`
}

Response from resuming an existing session.

func (*ResumeSessionResponse) Validate added in v0.12.2

func (v *ResumeSessionResponse) Validate() error

type Role

type Role string

The sender or recipient of messages and data in a conversation.

const (
	RoleAssistant Role = "assistant"
	RoleUser      Role = "user"
)

type SelectedPermissionOutcome added in v0.10.8

type SelectedPermissionOutcome struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
	// The ID of the option the user selected.
	OptionId PermissionOptionId `json:"optionId"`
}

The user selected one of the provided options.

type SessionAdditionalDirectoriesCapabilities added in v0.11.7

type SessionAdditionalDirectoriesCapabilities struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
}

**UNSTABLE**

This capability is not part of the spec yet, and may be removed or changed at any point.

Capabilities for additional session directories support.

By supplying '{}' it means that the agent supports the 'additionalDirectories' field on supported session lifecycle requests and 'session/list'.

type SessionAvailableCommandsUpdate added in v0.6.3

type SessionAvailableCommandsUpdate struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
	// Commands the agent can execute
	AvailableCommands []AvailableCommand `json:"availableCommands"`
	SessionUpdate     string             `json:"sessionUpdate"`
}

Available commands are ready or have changed

type SessionCapabilities added in v0.10.8

type SessionCapabilities struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
	// **UNSTABLE**
	//
	// This capability is not part of the spec yet, and may be removed or changed at any point.
	//
	// Whether the agent supports 'additionalDirectories' on supported session lifecycle requests and 'session/list'.
	AdditionalDirectories *SessionAdditionalDirectoriesCapabilities `json:"additionalDirectories,omitempty"`
	// Whether the agent supports 'session/close'.
	Close *SessionCloseCapabilities `json:"close,omitempty"`
	// **UNSTABLE**
	//
	// This capability is not part of the spec yet, and may be removed or changed at any point.
	//
	// Whether the agent supports 'session/fork'.
	Fork *SessionForkCapabilities `json:"fork,omitempty"`
	// Whether the agent supports 'session/list'.
	List *SessionListCapabilities `json:"list,omitempty"`
	// Whether the agent supports 'session/resume'.
	Resume *SessionResumeCapabilities `json:"resume,omitempty"`
}

Session capabilities supported by the agent.

As a baseline, all Agents **MUST** support 'session/new', 'session/prompt', 'session/cancel', and 'session/update'.

Optionally, they **MAY** support other session methods and notifications by specifying additional capabilities.

Note: 'session/load' is still handled by the top-level 'load_session' capability. This will be unified in future versions of the protocol.

See protocol docs: [Session Capabilities](https://agentclientprotocol.com/protocol/initialization#session-capabilities)

type SessionCloseCapabilities added in v0.11.7

type SessionCloseCapabilities struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
}

Capabilities for the 'session/close' method.

By supplying '{}' it means that the agent supports closing of sessions.

type SessionConfigBoolean added in v0.11.7

type SessionConfigBoolean struct {
	// The current value of the boolean option.
	CurrentValue bool `json:"currentValue"`
}

**UNSTABLE**

This capability is not part of the spec yet, and may be removed or changed at any point.

A boolean on/off toggle session configuration option payload.

type SessionConfigGroupId added in v0.10.8

type SessionConfigGroupId string

Unique identifier for a session configuration option value group.

type SessionConfigId added in v0.10.8

type SessionConfigId string

Unique identifier for a session configuration option.

type SessionConfigOption added in v0.10.8

type SessionConfigOption struct {
	// Single-value selector (dropdown).
	Select *SessionConfigOptionSelect `json:"-"`
	// **UNSTABLE**
	//
	// This capability is not part of the spec yet, and may be removed or changed at any point.
	//
	// Boolean on/off toggle.
	Boolean *SessionConfigOptionBoolean `json:"-"`
}

func NewSessionConfigOptionBoolean added in v0.11.7

func NewSessionConfigOptionBoolean(currentValue bool) SessionConfigOption

NewSessionConfigOptionBoolean constructs a SessionConfigOption using the 'boolean' variant.

func NewSessionConfigOptionSelect added in v0.10.8

func NewSessionConfigOptionSelect(currentValue SessionConfigValueId, options SessionConfigSelectOptions) SessionConfigOption

NewSessionConfigOptionSelect constructs a SessionConfigOption using the 'select' variant.

func (SessionConfigOption) MarshalJSON added in v0.10.8

func (u SessionConfigOption) MarshalJSON() ([]byte, error)

func (*SessionConfigOption) UnmarshalJSON added in v0.10.8

func (u *SessionConfigOption) UnmarshalJSON(b []byte) error

func (*SessionConfigOption) Validate added in v0.10.8

func (u *SessionConfigOption) Validate() error

type SessionConfigOptionBoolean added in v0.11.7

type SessionConfigOptionBoolean struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
	// Optional semantic category for this option (UX only).
	Category *SessionConfigOptionCategory `json:"category,omitempty"`
	// The current value of the boolean option.
	CurrentValue bool `json:"currentValue"`
	// Optional description for the Client to display to the user.
	Description *string `json:"description,omitempty"`
	// Unique identifier for the configuration option.
	Id SessionConfigId `json:"id"`
	// Human-readable label for the option.
	Name string `json:"name"`
	Type string `json:"type"`
}

**UNSTABLE**

This capability is not part of the spec yet, and may be removed or changed at any point.

Boolean on/off toggle.

type SessionConfigOptionCategory added in v0.10.8

type SessionConfigOptionCategory struct {
	// Unknown / uncategorized selector.
	Other *SessionConfigOptionCategoryOther `json:"-"`
}

func (SessionConfigOptionCategory) MarshalJSON added in v0.10.8

func (u SessionConfigOptionCategory) MarshalJSON() ([]byte, error)

func (*SessionConfigOptionCategory) UnmarshalJSON added in v0.10.8

func (u *SessionConfigOptionCategory) UnmarshalJSON(b []byte) error

type SessionConfigOptionCategoryOther added in v0.10.8

type SessionConfigOptionCategoryOther string

Semantic category for a session configuration option.

This is intended to help Clients distinguish broadly common selectors (e.g. model selector vs session mode selector vs thought/reasoning level) for UX purposes (keyboard shortcuts, icons, placement). It MUST NOT be required for correctness. Clients MUST handle missing or unknown categories gracefully.

Category names beginning with '_' are free for custom use, like other ACP extension methods. Category names that do not begin with '_' are reserved for the ACP spec. Unknown / uncategorized selector.

type SessionConfigOptionSelect added in v0.10.8

type SessionConfigOptionSelect struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
	// Optional semantic category for this option (UX only).
	Category *SessionConfigOptionCategory `json:"category,omitempty"`
	// The currently selected value.
	CurrentValue SessionConfigValueId `json:"currentValue"`
	// Optional description for the Client to display to the user.
	Description *string `json:"description,omitempty"`
	// Unique identifier for the configuration option.
	Id SessionConfigId `json:"id"`
	// Human-readable label for the option.
	Name string `json:"name"`
	// The set of selectable options.
	Options SessionConfigSelectOptions `json:"options"`
	Type    string                     `json:"type"`
}

A session configuration option selector and its current state. Single-value selector (dropdown).

type SessionConfigOptionUpdate added in v0.10.8

type SessionConfigOptionUpdate struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
	// The full set of configuration options and their current values.
	ConfigOptions []SessionConfigOption `json:"configOptions"`
	SessionUpdate string                `json:"sessionUpdate"`
}

Session configuration options have been updated.

type SessionConfigSelect added in v0.10.8

type SessionConfigSelect struct {
	// The currently selected value.
	CurrentValue SessionConfigValueId `json:"currentValue"`
	// The set of selectable options.
	Options SessionConfigSelectOptions `json:"options"`
}

A single-value selector (dropdown) session configuration option payload.

type SessionConfigSelectGroup added in v0.10.8

type SessionConfigSelectGroup struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
	// Unique identifier for this group.
	Group SessionConfigGroupId `json:"group"`
	// Human-readable label for this group.
	Name string `json:"name"`
	// The set of option values in this group.
	Options []SessionConfigSelectOption `json:"options"`
}

A group of possible values for a session configuration option.

type SessionConfigSelectOption added in v0.10.8

type SessionConfigSelectOption struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
	// Optional description for this option value.
	Description *string `json:"description,omitempty"`
	// Human-readable label for this option value.
	Name string `json:"name"`
	// Unique identifier for this option value.
	Value SessionConfigValueId `json:"value"`
}

A possible value for a session configuration option.

type SessionConfigSelectOptions added in v0.10.8

type SessionConfigSelectOptions struct {
	// A flat list of options with no grouping.
	Ungrouped *SessionConfigSelectOptionsUngrouped `json:"-"`
	// A list of options grouped under headers.
	Grouped *SessionConfigSelectOptionsGrouped `json:"-"`
}

func (SessionConfigSelectOptions) MarshalJSON added in v0.10.8

func (u SessionConfigSelectOptions) MarshalJSON() ([]byte, error)

func (*SessionConfigSelectOptions) UnmarshalJSON added in v0.10.8

func (u *SessionConfigSelectOptions) UnmarshalJSON(b []byte) error

type SessionConfigSelectOptionsGrouped added in v0.10.8

type SessionConfigSelectOptionsGrouped []SessionConfigSelectGroup

A list of options grouped under headers.

type SessionConfigSelectOptionsUngrouped added in v0.10.8

type SessionConfigSelectOptionsUngrouped []SessionConfigSelectOption

Possible values for a session configuration option. A flat list of options with no grouping.

type SessionConfigValueId added in v0.10.8

type SessionConfigValueId string

Unique identifier for a session configuration option value.

type SessionCurrentModeUpdate added in v0.6.3

type SessionCurrentModeUpdate struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
	// The ID of the current mode
	CurrentModeId SessionModeId `json:"currentModeId"`
	SessionUpdate string        `json:"sessionUpdate"`
}

The current mode of the session has changed

See protocol docs: [Session Modes](https://agentclientprotocol.com/protocol/session-modes)

type SessionForkCapabilities added in v0.10.8

type SessionForkCapabilities struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
}

**UNSTABLE**

This capability is not part of the spec yet, and may be removed or changed at any point.

Capabilities for the 'session/fork' method.

By supplying '{}' it means that the agent supports forking of sessions.

type SessionId

type SessionId string

A unique identifier for a conversation session between a client and agent.

Sessions maintain their own context, conversation history, and state, allowing multiple independent interactions with the same agent.

See protocol docs: [Session ID](https://agentclientprotocol.com/protocol/session-setup#session-id)

type SessionInfo added in v0.11.7

type SessionInfo struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
	// **UNSTABLE**
	//
	// This capability is not part of the spec yet, and may be removed or changed at any point.
	//
	// Authoritative ordered additional workspace roots for this session. Each path must be absolute.
	//
	// When omitted or empty, there are no additional roots for the session.
	AdditionalDirectories []string `json:"additionalDirectories,omitempty"`
	// The working directory for this session. Must be an absolute path.
	Cwd string `json:"cwd"`
	// Unique identifier for the session
	SessionId SessionId `json:"sessionId"`
	// Human-readable title for the session
	Title *string `json:"title,omitempty"`
	// ISO 8601 timestamp of last activity
	UpdatedAt *string `json:"updatedAt,omitempty"`
}

Information about a session returned by session/list

type SessionInfoUpdate added in v0.10.8

type SessionInfoUpdate struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
	// Human-readable title for the session. Set to null to clear.
	Title *string `json:"title,omitempty"`
	// ISO 8601 timestamp of last activity. Set to null to clear.
	UpdatedAt *string `json:"updatedAt,omitempty"`
}

Update to session metadata. All fields are optional to support partial updates.

Agents send this notification to update session information like title or custom metadata. This allows clients to display dynamic session names and track session state changes.

type SessionListCapabilities added in v0.10.8

type SessionListCapabilities struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
}

Capabilities for the 'session/list' method.

By supplying '{}' it means that the agent supports listing of sessions.

type SessionMode

type SessionMode struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta        map[string]any `json:"_meta,omitempty"`
	Description *string        `json:"description,omitempty"`
	Id          SessionModeId  `json:"id"`
	Name        string         `json:"name"`
}

A mode the agent can operate in.

See protocol docs: [Session Modes](https://agentclientprotocol.com/protocol/session-modes)

type SessionModeId

type SessionModeId string

Unique identifier for a Session Mode.

type SessionModeState

type SessionModeState struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
	// The set of modes that the Agent can operate in
	AvailableModes []SessionMode `json:"availableModes"`
	// The current mode the Agent is in.
	CurrentModeId SessionModeId `json:"currentModeId"`
}

The set of modes and the one currently active.

type SessionModelState

type SessionModelState struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
	// The set of models that the Agent can use
	AvailableModels []ModelInfo `json:"availableModels"`
	// The current model the Agent is in.
	CurrentModelId ModelId `json:"currentModelId"`
}

**UNSTABLE**

This capability is not part of the spec yet, and may be removed or changed at any point.

The set of models and the one currently active.

type SessionNotification

type SessionNotification struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
	// The ID of the session this update pertains to.
	SessionId SessionId `json:"sessionId"`
	// The actual update content.
	Update SessionUpdate `json:"update"`
}

Notification containing a session update from the agent.

Used to stream real-time progress and results during prompt processing.

See protocol docs: [Agent Reports Output](https://agentclientprotocol.com/protocol/prompt-turn#3-agent-reports-output)

func (*SessionNotification) Validate

func (v *SessionNotification) Validate() error

type SessionResumeCapabilities added in v0.10.8

type SessionResumeCapabilities struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
}

Capabilities for the 'session/resume' method.

By supplying '{}' it means that the agent supports resuming of sessions.

type SessionSessionInfoUpdate added in v0.10.8

type SessionSessionInfoUpdate struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta          map[string]any `json:"_meta,omitempty"`
	SessionUpdate string         `json:"sessionUpdate"`
	// Human-readable title for the session. Set to null to clear.
	Title *string `json:"title,omitempty"`
	// ISO 8601 timestamp of last activity. Set to null to clear.
	UpdatedAt *string `json:"updatedAt,omitempty"`
}

Session metadata has been updated (title, timestamps, custom metadata)

type SessionToolCallUpdate added in v0.6.3

type SessionToolCallUpdate struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
	// Replace the content collection.
	Content []ToolCallContent `json:"content,omitempty"`
	// Update the tool kind.
	Kind *ToolKind `json:"kind,omitempty"`
	// Replace the locations collection.
	Locations []ToolCallLocation `json:"locations,omitempty"`
	// Update the raw input.
	RawInput any `json:"rawInput,omitempty"`
	// Update the raw output.
	RawOutput     any    `json:"rawOutput,omitempty"`
	SessionUpdate string `json:"sessionUpdate"`
	// Update the execution status.
	Status *ToolCallStatus `json:"status,omitempty"`
	// Update the human-readable title.
	Title *string `json:"title,omitempty"`
	// The ID of the tool call being updated.
	ToolCallId ToolCallId `json:"toolCallId"`
}

Update on the status or results of a tool call.

type SessionUpdate

type SessionUpdate struct {
	// A chunk of the user's message being streamed.
	UserMessageChunk *SessionUpdateUserMessageChunk `json:"-"`
	// A chunk of the agent's response being streamed.
	AgentMessageChunk *SessionUpdateAgentMessageChunk `json:"-"`
	// A chunk of the agent's internal reasoning being streamed.
	AgentThoughtChunk *SessionUpdateAgentThoughtChunk `json:"-"`
	// Notification that a new tool call has been initiated.
	ToolCall *SessionUpdateToolCall `json:"-"`
	// Update on the status or results of a tool call.
	ToolCallUpdate *SessionToolCallUpdate `json:"-"`
	// The agent's execution plan for complex tasks.
	// See protocol docs: [Agent Plan](https://agentclientprotocol.com/protocol/agent-plan)
	Plan *SessionUpdatePlan `json:"-"`
	// Available commands are ready or have changed
	AvailableCommandsUpdate *SessionAvailableCommandsUpdate `json:"-"`
	// The current mode of the session has changed
	//
	// See protocol docs: [Session Modes](https://agentclientprotocol.com/protocol/session-modes)
	CurrentModeUpdate *SessionCurrentModeUpdate `json:"-"`
	// Session configuration options have been updated.
	ConfigOptionUpdate *SessionConfigOptionUpdate `json:"-"`
	// Session metadata has been updated (title, timestamps, custom metadata)
	SessionInfoUpdate *SessionSessionInfoUpdate `json:"-"`
	// **UNSTABLE**
	//
	// This capability is not part of the spec yet, and may be removed or changed at any point.
	//
	// Context window and cost update for the session.
	UsageUpdate *SessionUsageUpdate `json:"-"`
}

func StartEditToolCall

func StartEditToolCall(id ToolCallId, title string, path string, content any, opts ...ToolCallStartOpt) SessionUpdate

StartEditToolCall constructs a 'tool_call' update for editing content: kind=edit, status=pending, locations=[{path}], rawInput={path, content}.

func StartReadToolCall

func StartReadToolCall(id ToolCallId, title string, path string, opts ...ToolCallStartOpt) SessionUpdate

StartReadToolCall constructs a 'tool_call' update for reading a file: kind=read, status=pending, locations=[{path}], rawInput={path}.

func StartToolCall

func StartToolCall(id ToolCallId, title string, opts ...ToolCallStartOpt) SessionUpdate

StartToolCall constructs a tool_call update with required fields and applies optional modifiers.

func UpdateAgentMessage

func UpdateAgentMessage(content ContentBlock) SessionUpdate

UpdateAgentMessage constructs an agent_message_chunk update with the given content.

func UpdateAgentMessageText

func UpdateAgentMessageText(text string) SessionUpdate

UpdateAgentMessageText constructs an agent_message_chunk update from text.

func UpdateAgentThought

func UpdateAgentThought(content ContentBlock) SessionUpdate

UpdateAgentThought constructs an agent_thought_chunk update with the given content.

func UpdateAgentThoughtText

func UpdateAgentThoughtText(text string) SessionUpdate

UpdateAgentThoughtText constructs an agent_thought_chunk update from text.

func UpdatePlan

func UpdatePlan(entries ...PlanEntry) SessionUpdate

UpdatePlan constructs a plan update with the provided entries.

func UpdateToolCall

func UpdateToolCall(id ToolCallId, opts ...ToolCallUpdateOpt) SessionUpdate

UpdateToolCall constructs a tool_call_update with the given ID and applies optional modifiers.

func UpdateUserMessage

func UpdateUserMessage(content ContentBlock) SessionUpdate

UpdateUserMessage constructs a user_message_chunk update with the given content.

func UpdateUserMessageText

func UpdateUserMessageText(text string) SessionUpdate

UpdateUserMessageText constructs a user_message_chunk update from text.

func (SessionUpdate) MarshalJSON

func (u SessionUpdate) MarshalJSON() ([]byte, error)

func (*SessionUpdate) UnmarshalJSON

func (u *SessionUpdate) UnmarshalJSON(b []byte) error

func (*SessionUpdate) Validate

func (u *SessionUpdate) Validate() error

type SessionUpdateAgentMessageChunk

type SessionUpdateAgentMessageChunk struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
	// A single item of content
	Content ContentBlock `json:"content"`
	// **UNSTABLE**
	//
	// This capability is not part of the spec yet, and may be removed or changed at any point.
	//
	// A unique identifier for the message this chunk belongs to.
	//
	// All chunks belonging to the same message share the same 'messageId'.
	// A change in 'messageId' indicates a new message has started.
	// Both clients and agents MUST use UUID format for message IDs.
	MessageId     *string `json:"messageId,omitempty"`
	SessionUpdate string  `json:"sessionUpdate"`
}

A chunk of the agent's response being streamed.

type SessionUpdateAgentThoughtChunk

type SessionUpdateAgentThoughtChunk struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
	// A single item of content
	Content ContentBlock `json:"content"`
	// **UNSTABLE**
	//
	// This capability is not part of the spec yet, and may be removed or changed at any point.
	//
	// A unique identifier for the message this chunk belongs to.
	//
	// All chunks belonging to the same message share the same 'messageId'.
	// A change in 'messageId' indicates a new message has started.
	// Both clients and agents MUST use UUID format for message IDs.
	MessageId     *string `json:"messageId,omitempty"`
	SessionUpdate string  `json:"sessionUpdate"`
}

A chunk of the agent's internal reasoning being streamed.

type SessionUpdatePlan

type SessionUpdatePlan struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
	// The list of tasks to be accomplished.
	//
	// When updating a plan, the agent must send a complete list of all entries
	// with their current status. The client replaces the entire plan with each update.
	Entries       []PlanEntry `json:"entries"`
	SessionUpdate string      `json:"sessionUpdate"`
}

The agent's execution plan for complex tasks. See protocol docs: [Agent Plan](https://agentclientprotocol.com/protocol/agent-plan)

type SessionUpdateToolCall

type SessionUpdateToolCall struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
	// Content produced by the tool call.
	Content []ToolCallContent `json:"content,omitempty"`
	// The category of tool being invoked.
	// Helps clients choose appropriate icons and UI treatment.
	Kind ToolKind `json:"kind,omitempty"`
	// File locations affected by this tool call.
	// Enables "follow-along" features in clients.
	Locations []ToolCallLocation `json:"locations,omitempty"`
	// Raw input parameters sent to the tool.
	RawInput any `json:"rawInput,omitempty"`
	// Raw output returned by the tool.
	RawOutput     any    `json:"rawOutput,omitempty"`
	SessionUpdate string `json:"sessionUpdate"`
	// Current execution status of the tool call.
	Status ToolCallStatus `json:"status,omitempty"`
	// Human-readable title describing what the tool is doing.
	Title string `json:"title"`
	// Unique identifier for this tool call within the session.
	ToolCallId ToolCallId `json:"toolCallId"`
}

Notification that a new tool call has been initiated.

type SessionUpdateUserMessageChunk

type SessionUpdateUserMessageChunk struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
	// A single item of content
	Content ContentBlock `json:"content"`
	// **UNSTABLE**
	//
	// This capability is not part of the spec yet, and may be removed or changed at any point.
	//
	// A unique identifier for the message this chunk belongs to.
	//
	// All chunks belonging to the same message share the same 'messageId'.
	// A change in 'messageId' indicates a new message has started.
	// Both clients and agents MUST use UUID format for message IDs.
	MessageId     *string `json:"messageId,omitempty"`
	SessionUpdate string  `json:"sessionUpdate"`
}

Different types of updates that can be sent during session processing.

These updates provide real-time feedback about the agent's progress.

See protocol docs: [Agent Reports Output](https://agentclientprotocol.com/protocol/prompt-turn#3-agent-reports-output) A chunk of the user's message being streamed.

type SessionUsageUpdate added in v0.10.8

type SessionUsageUpdate struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
	// Cumulative session cost (optional).
	Cost          *Cost  `json:"cost,omitempty"`
	SessionUpdate string `json:"sessionUpdate"`
	// Total context window size in tokens.
	Size int `json:"size"`
	// Tokens currently in context.
	Used int `json:"used"`
}

**UNSTABLE**

This capability is not part of the spec yet, and may be removed or changed at any point.

Context window and cost update for the session.

type SetSessionConfigOptionBoolean added in v0.11.7

type SetSessionConfigOptionBoolean struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
	// The ID of the configuration option to set.
	ConfigId SessionConfigId `json:"configId"`
	// The ID of the session to set the configuration option for.
	SessionId SessionId `json:"sessionId"`
	Type      string    `json:"type"`
	// The boolean value.
	Value bool `json:"value"`
}

Request parameters for setting a session configuration option. A boolean value ('type: "boolean"').

type SetSessionConfigOptionRequest added in v0.10.8

type SetSessionConfigOptionRequest struct {
	// A boolean value ('type: "boolean"').
	Boolean *SetSessionConfigOptionBoolean `json:"-"`
	// A ['SessionConfigValueId'] string value.
	//
	// This is the default when 'type' is absent on the wire. Unknown 'type'
	// values with string payloads also gracefully deserialize into this
	// variant.
	ValueId *SetSessionConfigOptionValueId `json:"-"`
}

func (SetSessionConfigOptionRequest) MarshalJSON added in v0.11.7

func (u SetSessionConfigOptionRequest) MarshalJSON() ([]byte, error)

func (*SetSessionConfigOptionRequest) UnmarshalJSON added in v0.11.7

func (u *SetSessionConfigOptionRequest) UnmarshalJSON(b []byte) error

func (*SetSessionConfigOptionRequest) Validate added in v0.10.8

func (v *SetSessionConfigOptionRequest) Validate() error

type SetSessionConfigOptionResponse added in v0.10.8

type SetSessionConfigOptionResponse struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
	// The full set of configuration options and their current values.
	ConfigOptions []SessionConfigOption `json:"configOptions"`
}

Response to 'session/set_config_option' method.

func (*SetSessionConfigOptionResponse) Validate added in v0.10.8

func (v *SetSessionConfigOptionResponse) Validate() error

type SetSessionConfigOptionValueId added in v0.11.7

type SetSessionConfigOptionValueId struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
	// The ID of the configuration option to set.
	ConfigId SessionConfigId `json:"configId"`
	// The ID of the session to set the configuration option for.
	SessionId SessionId `json:"sessionId"`
	// The value ID.
	Value SessionConfigValueId `json:"value"`
}

A ['SessionConfigValueId'] string value.

This is the default when 'type' is absent on the wire. Unknown 'type' values with string payloads also gracefully deserialize into this variant.

type SetSessionModeRequest

type SetSessionModeRequest struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
	// The ID of the mode to set.
	ModeId SessionModeId `json:"modeId"`
	// The ID of the session to set the mode for.
	SessionId SessionId `json:"sessionId"`
}

Request parameters for setting a session mode.

func (*SetSessionModeRequest) Validate

func (v *SetSessionModeRequest) Validate() error

type SetSessionModeResponse

type SetSessionModeResponse struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
}

Response to 'session/set_mode' method.

func (*SetSessionModeResponse) Validate

func (v *SetSessionModeResponse) Validate() error

type StopReason

type StopReason string

Reasons why an agent stops processing a prompt turn.

See protocol docs: [Stop Reasons](https://agentclientprotocol.com/protocol/prompt-turn#stop-reasons)

const (
	StopReasonEndTurn         StopReason = "end_turn"
	StopReasonMaxTokens       StopReason = "max_tokens"
	StopReasonMaxTurnRequests StopReason = "max_turn_requests"
	StopReasonRefusal         StopReason = "refusal"
	StopReasonCancelled       StopReason = "cancelled"
)

type Terminal added in v0.10.8

type Terminal struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta       map[string]any `json:"_meta,omitempty"`
	TerminalId string         `json:"terminalId"`
}

Embed a terminal created with 'terminal/create' by its id.

The terminal must be added before calling 'terminal/release'.

See protocol docs: Terminal(https://agentclientprotocol.com/protocol/terminals)

type TerminalExitStatus

type TerminalExitStatus struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
	// The process exit code (may be null if terminated by signal).
	ExitCode *int `json:"exitCode,omitempty"`
	// The signal that terminated the process (may be null if exited normally).
	Signal *string `json:"signal,omitempty"`
}

Exit status of a terminal command.

type TerminalOutputRequest

type TerminalOutputRequest struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
	// The session ID for this request.
	SessionId SessionId `json:"sessionId"`
	// The ID of the terminal to get output from.
	TerminalId string `json:"terminalId"`
}

Request to get the current output and status of a terminal.

func (*TerminalOutputRequest) Validate

func (v *TerminalOutputRequest) Validate() error

type TerminalOutputResponse

type TerminalOutputResponse struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
	// Exit status if the command has completed.
	ExitStatus *TerminalExitStatus `json:"exitStatus,omitempty"`
	// The terminal output captured so far.
	Output string `json:"output"`
	// Whether the output was truncated due to byte limits.
	Truncated bool `json:"truncated"`
}

Response containing the terminal output and exit status.

func (*TerminalOutputResponse) Validate

func (v *TerminalOutputResponse) Validate() error

type TextContent

type TextContent struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta        map[string]any `json:"_meta,omitempty"`
	Annotations *Annotations   `json:"annotations,omitempty"`
	Text        string         `json:"text"`
}

Text provided to or from an LLM.

type TextDocumentSyncKind added in v0.11.7

type TextDocumentSyncKind string

How the agent wants document changes delivered.

const (
	TextDocumentSyncKindFull        TextDocumentSyncKind = "full"
	TextDocumentSyncKindIncremental TextDocumentSyncKind = "incremental"
)

type TextResourceContents

type TextResourceContents struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta     map[string]any `json:"_meta,omitempty"`
	MimeType *string        `json:"mimeType,omitempty"`
	Text     string         `json:"text"`
	Uri      string         `json:"uri"`
}

Text-based resource contents.

type ToolCall

type ToolCall struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
	// Content produced by the tool call.
	Content []ToolCallContent `json:"content,omitempty"`
	// The category of tool being invoked.
	// Helps clients choose appropriate icons and UI treatment.
	Kind ToolKind `json:"kind,omitempty"`
	// File locations affected by this tool call.
	// Enables "follow-along" features in clients.
	Locations []ToolCallLocation `json:"locations,omitempty"`
	// Raw input parameters sent to the tool.
	RawInput any `json:"rawInput,omitempty"`
	// Raw output returned by the tool.
	RawOutput any `json:"rawOutput,omitempty"`
	// Current execution status of the tool call.
	Status ToolCallStatus `json:"status,omitempty"`
	// Human-readable title describing what the tool is doing.
	Title string `json:"title"`
	// Unique identifier for this tool call within the session.
	ToolCallId ToolCallId `json:"toolCallId"`
}

Represents a tool call that the language model has requested.

Tool calls are actions that the agent executes on behalf of the language model, such as reading files, executing code, or fetching data from external sources.

See protocol docs: [Tool Calls](https://agentclientprotocol.com/protocol/tool-calls)

type ToolCallContent

type ToolCallContent struct {
	// Standard content block (text, images, resources).
	Content *ToolCallContentContent `json:"-"`
	// File modification shown as a diff.
	Diff *ToolCallContentDiff `json:"-"`
	// Embed a terminal created with 'terminal/create' by its id.
	//
	// The terminal must be added before calling 'terminal/release'.
	//
	// See protocol docs: [Terminal](https://agentclientprotocol.com/protocol/terminals)
	Terminal *ToolCallContentTerminal `json:"-"`
}

func ToolContent

func ToolContent(block ContentBlock) ToolCallContent

ToolContent wraps a content block as tool-call content.

func ToolDiffContent

func ToolDiffContent(path string, newText string, oldText ...string) ToolCallContent

ToolDiffContent constructs a diff tool-call content. If oldText is omitted, the field is left empty.

func ToolTerminalRef

func ToolTerminalRef(terminalID string) ToolCallContent

ToolTerminalRef constructs a terminal reference tool-call content.

func (ToolCallContent) MarshalJSON

func (u ToolCallContent) MarshalJSON() ([]byte, error)

func (*ToolCallContent) UnmarshalJSON

func (u *ToolCallContent) UnmarshalJSON(b []byte) error

func (*ToolCallContent) Validate

func (u *ToolCallContent) Validate() error

type ToolCallContentContent

type ToolCallContentContent struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
	// The actual content block.
	Content ContentBlock `json:"content"`
	Type    string       `json:"type"`
}

Content produced by a tool call.

Tool calls can produce different types of content including standard content blocks (text, images) or file diffs.

See protocol docs: Content(https://agentclientprotocol.com/protocol/tool-calls#content) Standard content block (text, images, resources).

type ToolCallContentDiff

type ToolCallContentDiff struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
	// The new content after modification.
	NewText string `json:"newText"`
	// The original content (None for new files).
	OldText *string `json:"oldText,omitempty"`
	// The file path being modified.
	Path string `json:"path"`
	Type string `json:"type"`
}

File modification shown as a diff.

type ToolCallContentTerminal

type ToolCallContentTerminal struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta       map[string]any `json:"_meta,omitempty"`
	TerminalId string         `json:"terminalId"`
	Type       string         `json:"type"`
}

Embed a terminal created with 'terminal/create' by its id.

The terminal must be added before calling 'terminal/release'.

See protocol docs: Terminal(https://agentclientprotocol.com/protocol/terminals)

type ToolCallId

type ToolCallId string

Unique identifier for a tool call within a session.

type ToolCallLocation

type ToolCallLocation struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
	// Optional line number within the file.
	Line *int `json:"line,omitempty"`
	// The file path being accessed or modified.
	Path string `json:"path"`
}

A file location being accessed or modified by a tool.

Enables clients to implement "follow-along" features that track which files the agent is working with in real-time.

See protocol docs: [Following the Agent](https://agentclientprotocol.com/protocol/tool-calls#following-the-agent)

type ToolCallStartOpt

type ToolCallStartOpt func(tc *SessionUpdateToolCall)

func WithStartContent

func WithStartContent(c []ToolCallContent) ToolCallStartOpt

WithStartContent sets the initial content for a tool_call start update.

func WithStartKind

func WithStartKind(k ToolKind) ToolCallStartOpt

WithStartKind sets the kind for a tool_call start update.

func WithStartLocations

func WithStartLocations(l []ToolCallLocation) ToolCallStartOpt

WithStartLocations sets file locations and, if a single path is provided and rawInput is empty, mirrors it as rawInput.path.

func WithStartRawInput

func WithStartRawInput(v any) ToolCallStartOpt

WithStartRawInput sets rawInput for a tool_call start update.

func WithStartRawOutput

func WithStartRawOutput(v any) ToolCallStartOpt

WithStartRawOutput sets rawOutput for a tool_call start update.

func WithStartStatus

func WithStartStatus(s ToolCallStatus) ToolCallStartOpt

WithStartStatus sets the status for a tool_call start update.

type ToolCallStatus

type ToolCallStatus string

Execution status of a tool call.

Tool calls progress through different statuses during their lifecycle.

See protocol docs: [Status](https://agentclientprotocol.com/protocol/tool-calls#status)

const (
	ToolCallStatusPending    ToolCallStatus = "pending"
	ToolCallStatusInProgress ToolCallStatus = "in_progress"
	ToolCallStatusCompleted  ToolCallStatus = "completed"
	ToolCallStatusFailed     ToolCallStatus = "failed"
)

type ToolCallUpdate

type ToolCallUpdate struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
	// Replace the content collection.
	Content []ToolCallContent `json:"content,omitempty"`
	// Update the tool kind.
	Kind *ToolKind `json:"kind,omitempty"`
	// Replace the locations collection.
	Locations []ToolCallLocation `json:"locations,omitempty"`
	// Update the raw input.
	RawInput any `json:"rawInput,omitempty"`
	// Update the raw output.
	RawOutput any `json:"rawOutput,omitempty"`
	// Update the execution status.
	Status *ToolCallStatus `json:"status,omitempty"`
	// Update the human-readable title.
	Title *string `json:"title,omitempty"`
	// The ID of the tool call being updated.
	ToolCallId ToolCallId `json:"toolCallId"`
}

An update to an existing tool call.

Used to report progress and results as tools execute. All fields except the tool call ID are optional - only changed fields need to be included.

See protocol docs: [Updating](https://agentclientprotocol.com/protocol/tool-calls#updating)

func (*ToolCallUpdate) Validate

func (t *ToolCallUpdate) Validate() error

type ToolCallUpdateOpt

type ToolCallUpdateOpt func(tu *SessionToolCallUpdate)

func WithUpdateContent

func WithUpdateContent(c []ToolCallContent) ToolCallUpdateOpt

WithUpdateContent replaces the content collection for a tool_call_update.

func WithUpdateKind

func WithUpdateKind(k ToolKind) ToolCallUpdateOpt

WithUpdateKind sets the kind for a tool_call_update.

func WithUpdateLocations

func WithUpdateLocations(l []ToolCallLocation) ToolCallUpdateOpt

WithUpdateLocations replaces the locations collection for a tool_call_update.

func WithUpdateRawInput

func WithUpdateRawInput(v any) ToolCallUpdateOpt

WithUpdateRawInput sets rawInput for a tool_call_update.

func WithUpdateRawOutput

func WithUpdateRawOutput(v any) ToolCallUpdateOpt

WithUpdateRawOutput sets rawOutput for a tool_call_update.

func WithUpdateStatus

func WithUpdateStatus(s ToolCallStatus) ToolCallUpdateOpt

WithUpdateStatus sets the status for a tool_call_update.

func WithUpdateTitle

func WithUpdateTitle(t string) ToolCallUpdateOpt

WithUpdateTitle sets the title for a tool_call_update.

type ToolKind

type ToolKind string

Categories of tools that can be invoked.

Tool kinds help clients choose appropriate icons and optimize how they display tool execution progress.

See protocol docs: [Creating](https://agentclientprotocol.com/protocol/tool-calls#creating)

const (
	ToolKindRead       ToolKind = "read"
	ToolKindEdit       ToolKind = "edit"
	ToolKindDelete     ToolKind = "delete"
	ToolKindMove       ToolKind = "move"
	ToolKindSearch     ToolKind = "search"
	ToolKindExecute    ToolKind = "execute"
	ToolKindThink      ToolKind = "think"
	ToolKindFetch      ToolKind = "fetch"
	ToolKindSwitchMode ToolKind = "switch_mode"
	ToolKindOther      ToolKind = "other"
)

type UnstableAcceptNesNotification added in v0.11.7

type UnstableAcceptNesNotification struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
	// The ID of the accepted suggestion.
	Id string `json:"id"`
	// The session ID for this notification.
	SessionId SessionId `json:"sessionId"`
}

Notification sent when a suggestion is accepted.

func (*UnstableAcceptNesNotification) Validate added in v0.11.7

func (v *UnstableAcceptNesNotification) Validate() error

type UnstableCancelRequestNotification added in v0.10.8

type UnstableCancelRequestNotification struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
	// The ID of the request to cancel.
	RequestId RequestId `json:"requestId"`
}

**UNSTABLE**

This capability is not part of the spec yet, and may be removed or changed at any point.

Notification to cancel an ongoing request.

See protocol docs: [Cancellation](https://agentclientprotocol.com/protocol/cancellation)

func (*UnstableCancelRequestNotification) Validate added in v0.10.8

type UnstableCloseNesRequest added in v0.11.7

type UnstableCloseNesRequest struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
	// The ID of the NES session to close.
	SessionId SessionId `json:"sessionId"`
}

Request to close an NES session.

The agent **must** cancel any ongoing work related to the NES session and then free up any resources associated with the session.

func (*UnstableCloseNesRequest) Validate added in v0.11.7

func (v *UnstableCloseNesRequest) Validate() error

type UnstableCloseNesResponse added in v0.11.7

type UnstableCloseNesResponse struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
}

Response from closing an NES session.

func (*UnstableCloseNesResponse) Validate added in v0.11.7

func (v *UnstableCloseNesResponse) Validate() error

type UnstableCompleteElicitationNotification added in v0.11.7

type UnstableCompleteElicitationNotification struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
	// The ID of the elicitation that completed.
	ElicitationId UnstableElicitationId `json:"elicitationId"`
}

**UNSTABLE**

This capability is not part of the spec yet, and may be removed or changed at any point.

Notification sent by the agent when a URL-based elicitation is complete.

func (*UnstableCompleteElicitationNotification) Validate added in v0.11.7

type UnstableCreateElicitationAccept added in v0.11.7

type UnstableCreateElicitationAccept struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta   map[string]any `json:"_meta,omitempty"`
	Action string         `json:"action"`
	// The user-provided content, if any, as an object matching the requested schema.
	Content map[string]any `json:"content,omitempty"`
}

**UNSTABLE**

This capability is not part of the spec yet, and may be removed or changed at any point.

Response from the client to an elicitation request. The user accepted and provided content.

type UnstableCreateElicitationCancel added in v0.11.7

type UnstableCreateElicitationCancel struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta   map[string]any `json:"_meta,omitempty"`
	Action string         `json:"action"`
}

The elicitation was cancelled.

type UnstableCreateElicitationDecline added in v0.11.7

type UnstableCreateElicitationDecline struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta   map[string]any `json:"_meta,omitempty"`
	Action string         `json:"action"`
}

The user declined the elicitation.

type UnstableCreateElicitationForm added in v0.11.7

type UnstableCreateElicitationForm struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
	// A human-readable message describing what input is needed.
	Message string `json:"message"`
	Mode    string `json:"mode"`
	// A JSON Schema describing the form fields to present to the user.
	RequestedSchema UnstableElicitationSchema `json:"requestedSchema"`
}

**UNSTABLE**

This capability is not part of the spec yet, and may be removed or changed at any point.

Request from the agent to elicit structured user input.

The agent sends this to the client to request information from the user, either via a form or by directing them to a URL. Elicitations are tied to a session (optionally a tool call) or a request. Form-based elicitation where the client renders a form from the provided schema.

type UnstableCreateElicitationRequest added in v0.11.7

type UnstableCreateElicitationRequest struct {
	// Form-based elicitation where the client renders a form from the provided schema.
	Form *UnstableCreateElicitationForm `json:"-"`
	// URL-based elicitation where the client directs the user to a URL.
	Url *UnstableCreateElicitationUrl `json:"-"`
}

func NewUnstableCreateElicitationRequestForm added in v0.11.7

func NewUnstableCreateElicitationRequestForm(requestedSchema UnstableElicitationSchema) UnstableCreateElicitationRequest

NewUnstableCreateElicitationRequestForm constructs a UnstableCreateElicitationRequest using the 'form' variant.

func NewUnstableCreateElicitationRequestUrl added in v0.11.7

func NewUnstableCreateElicitationRequestUrl(elicitationId UnstableElicitationId, url string) UnstableCreateElicitationRequest

NewUnstableCreateElicitationRequestUrl constructs a UnstableCreateElicitationRequest using the 'url' variant.

func (UnstableCreateElicitationRequest) MarshalJSON added in v0.11.7

func (u UnstableCreateElicitationRequest) MarshalJSON() ([]byte, error)

func (*UnstableCreateElicitationRequest) UnmarshalJSON added in v0.11.7

func (u *UnstableCreateElicitationRequest) UnmarshalJSON(b []byte) error

func (*UnstableCreateElicitationRequest) Validate added in v0.11.7

type UnstableCreateElicitationResponse added in v0.11.7

type UnstableCreateElicitationResponse struct {
	// The user accepted and provided content.
	Accept *UnstableCreateElicitationAccept `json:"-"`
	// The user declined the elicitation.
	Decline *UnstableCreateElicitationDecline `json:"-"`
	// The elicitation was cancelled.
	Cancel *UnstableCreateElicitationCancel `json:"-"`
}

func NewUnstableCreateElicitationResponseAccept added in v0.11.7

func NewUnstableCreateElicitationResponseAccept() UnstableCreateElicitationResponse

NewUnstableCreateElicitationResponseAccept constructs a UnstableCreateElicitationResponse using the 'accept' variant.

func NewUnstableCreateElicitationResponseCancel added in v0.11.7

func NewUnstableCreateElicitationResponseCancel() UnstableCreateElicitationResponse

NewUnstableCreateElicitationResponseCancel constructs a UnstableCreateElicitationResponse using the 'cancel' variant.

func NewUnstableCreateElicitationResponseDecline added in v0.11.7

func NewUnstableCreateElicitationResponseDecline() UnstableCreateElicitationResponse

NewUnstableCreateElicitationResponseDecline constructs a UnstableCreateElicitationResponse using the 'decline' variant.

func (UnstableCreateElicitationResponse) MarshalJSON added in v0.11.7

func (u UnstableCreateElicitationResponse) MarshalJSON() ([]byte, error)

func (*UnstableCreateElicitationResponse) UnmarshalJSON added in v0.11.7

func (u *UnstableCreateElicitationResponse) UnmarshalJSON(b []byte) error

func (*UnstableCreateElicitationResponse) Validate added in v0.11.7

type UnstableCreateElicitationUrl added in v0.11.7

type UnstableCreateElicitationUrl struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
	// The unique identifier for this elicitation.
	ElicitationId UnstableElicitationId `json:"elicitationId"`
	// A human-readable message describing what input is needed.
	Message string `json:"message"`
	Mode    string `json:"mode"`
	// The URL to direct the user to.
	Url string `json:"url"`
}

URL-based elicitation where the client directs the user to a URL.

type UnstableDidChangeDocumentNotification added in v0.11.7

type UnstableDidChangeDocumentNotification struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
	// The content changes.
	ContentChanges []UnstableTextDocumentContentChangeEvent `json:"contentChanges"`
	// The session ID for this notification.
	SessionId SessionId `json:"sessionId"`
	// The URI of the changed document.
	Uri string `json:"uri"`
	// The new version number of the document.
	Version int `json:"version"`
}

Notification sent when a file is edited.

func (*UnstableDidChangeDocumentNotification) Validate added in v0.11.7

type UnstableDidCloseDocumentNotification added in v0.11.7

type UnstableDidCloseDocumentNotification struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
	// The session ID for this notification.
	SessionId SessionId `json:"sessionId"`
	// The URI of the closed document.
	Uri string `json:"uri"`
}

Notification sent when a file is closed.

func (*UnstableDidCloseDocumentNotification) Validate added in v0.11.7

type UnstableDidFocusDocumentNotification added in v0.11.7

type UnstableDidFocusDocumentNotification struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
	// The current cursor position.
	Position UnstablePosition `json:"position"`
	// The session ID for this notification.
	SessionId SessionId `json:"sessionId"`
	// The URI of the focused document.
	Uri string `json:"uri"`
	// The version number of the document.
	Version int `json:"version"`
	// The portion of the file currently visible in the editor viewport.
	VisibleRange UnstableRange `json:"visibleRange"`
}

Notification sent when a file becomes the active editor tab.

func (*UnstableDidFocusDocumentNotification) Validate added in v0.11.7

type UnstableDidOpenDocumentNotification added in v0.11.7

type UnstableDidOpenDocumentNotification struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
	// The language identifier of the document (e.g., "rust", "python").
	LanguageId string `json:"languageId"`
	// The session ID for this notification.
	SessionId SessionId `json:"sessionId"`
	// The full text content of the document.
	Text string `json:"text"`
	// The URI of the opened document.
	Uri string `json:"uri"`
	// The version number of the document.
	Version int `json:"version"`
}

Notification sent when a file is opened in the editor.

func (*UnstableDidOpenDocumentNotification) Validate added in v0.11.7

type UnstableDidSaveDocumentNotification added in v0.11.7

type UnstableDidSaveDocumentNotification struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
	// The session ID for this notification.
	SessionId SessionId `json:"sessionId"`
	// The URI of the saved document.
	Uri string `json:"uri"`
}

Notification sent when a file is saved.

func (*UnstableDidSaveDocumentNotification) Validate added in v0.11.7

type UnstableDisableProvidersRequest added in v0.11.7

type UnstableDisableProvidersRequest struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
	// Provider id to disable.
	Id string `json:"id"`
}

**UNSTABLE**

This capability is not part of the spec yet, and may be removed or changed at any point.

Request parameters for 'providers/disable'.

func (*UnstableDisableProvidersRequest) Validate added in v0.11.7

func (v *UnstableDisableProvidersRequest) Validate() error

type UnstableDisableProvidersResponse added in v0.11.7

type UnstableDisableProvidersResponse struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
}

**UNSTABLE**

This capability is not part of the spec yet, and may be removed or changed at any point.

Response to 'providers/disable'.

func (*UnstableDisableProvidersResponse) Validate added in v0.11.7

type UnstableElicitationAcceptAction added in v0.11.7

type UnstableElicitationAcceptAction struct {
	// The user-provided content, if any, as an object matching the requested schema.
	Content map[string]any `json:"content,omitempty"`
}

**UNSTABLE**

This capability is not part of the spec yet, and may be removed or changed at any point.

The user accepted the elicitation and provided content.

type UnstableElicitationFormMode added in v0.11.7

type UnstableElicitationFormMode struct {
	// Tied to a session, optionally to a specific tool call within that session.
	Session *UnstableElicitationSessionScope `json:"-"`
	// Tied to a specific JSON-RPC request outside of a session
	// (e.g., during auth/configuration phases before any session is started).
	Request *UnstableElicitationRequestScope `json:"-"`
}

**UNSTABLE**

This capability is not part of the spec yet, and may be removed or changed at any point.

Form-based elicitation mode where the client renders a form from the provided schema.

func (UnstableElicitationFormMode) MarshalJSON added in v0.11.7

func (u UnstableElicitationFormMode) MarshalJSON() ([]byte, error)

func (*UnstableElicitationFormMode) UnmarshalJSON added in v0.11.7

func (u *UnstableElicitationFormMode) UnmarshalJSON(b []byte) error

type UnstableElicitationId added in v0.11.7

type UnstableElicitationId string

**UNSTABLE**

This capability is not part of the spec yet, and may be removed or changed at any point.

Unique identifier for an elicitation.

type UnstableElicitationRequestScope added in v0.11.7

type UnstableElicitationRequestScope struct {
	// The request this elicitation is tied to.
	RequestId RequestId `json:"requestId"`
}

**UNSTABLE**

This capability is not part of the spec yet, and may be removed or changed at any point.

Request-scoped elicitation, tied to a specific JSON-RPC request outside of a session (e.g., during auth/configuration phases before any session is started).

type UnstableElicitationSchema added in v0.11.7

type UnstableElicitationSchema struct {
	// Optional description of what this schema represents.
	Description *string `json:"description,omitempty"`
	// Property definitions (must be primitive types).
	//
	// Defaults to {} if unset.
	Properties map[string]any `json:"properties"`
	// List of required property names.
	Required []string `json:"required,omitempty"`
	// Optional title for the schema.
	Title *string `json:"title,omitempty"`
	// Type discriminator. Always '"object"'.
	//
	// Defaults to "object" if unset.
	Type UnstableElicitationSchemaType `json:"type,omitempty"`
}

Type-safe elicitation schema for requesting structured user input.

This represents a JSON Schema object with primitive-typed properties, as required by the elicitation specification.

func (UnstableElicitationSchema) MarshalJSON added in v0.11.7

func (v UnstableElicitationSchema) MarshalJSON() ([]byte, error)

func (*UnstableElicitationSchema) UnmarshalJSON added in v0.11.7

func (v *UnstableElicitationSchema) UnmarshalJSON(b []byte) error

type UnstableElicitationSchemaType added in v0.11.7

type UnstableElicitationSchemaType string

Type discriminator for elicitation schemas.

const (
	UnstableElicitationSchemaTypeObject UnstableElicitationSchemaType = "object"
)

type UnstableElicitationSessionScope added in v0.11.7

type UnstableElicitationSessionScope struct {
	// The session this elicitation is tied to.
	SessionId SessionId `json:"sessionId"`
	// Optional tool call within the session.
	ToolCallId *ToolCallId `json:"toolCallId,omitempty"`
}

**UNSTABLE**

This capability is not part of the spec yet, and may be removed or changed at any point.

Session-scoped elicitation, optionally tied to a specific tool call.

When 'tool_call_id' is set, the elicitation is tied to a specific tool call. This is useful when an agent receives an elicitation from an MCP server during a tool call and needs to redirect it to the user.

type UnstableElicitationUrlMode added in v0.11.7

type UnstableElicitationUrlMode struct {
	// Tied to a session, optionally to a specific tool call within that session.
	Session *UnstableElicitationSessionScope `json:"-"`
	// Tied to a specific JSON-RPC request outside of a session
	// (e.g., during auth/configuration phases before any session is started).
	Request *UnstableElicitationRequestScope `json:"-"`
}

**UNSTABLE**

This capability is not part of the spec yet, and may be removed or changed at any point.

URL-based elicitation mode where the client directs the user to a URL.

func (UnstableElicitationUrlMode) MarshalJSON added in v0.11.7

func (u UnstableElicitationUrlMode) MarshalJSON() ([]byte, error)

func (*UnstableElicitationUrlMode) UnmarshalJSON added in v0.11.7

func (u *UnstableElicitationUrlMode) UnmarshalJSON(b []byte) error

type UnstableForkSessionRequest added in v0.10.8

type UnstableForkSessionRequest struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
	// **UNSTABLE**
	//
	// This capability is not part of the spec yet, and may be removed or changed at any point.
	//
	// Additional workspace roots to activate for this session. Each path must be absolute.
	//
	// When omitted or empty, no additional roots are activated. When non-empty,
	// this is the complete resulting additional-root list for the forked
	// session.
	AdditionalDirectories []string `json:"additionalDirectories,omitempty"`
	// The working directory for this session.
	Cwd string `json:"cwd"`
	// List of MCP servers to connect to for this session.
	McpServers []McpServer `json:"mcpServers,omitempty"`
	// The ID of the session to fork.
	SessionId SessionId `json:"sessionId"`
}

**UNSTABLE**

This capability is not part of the spec yet, and may be removed or changed at any point.

Request parameters for forking an existing session.

Creates a new session based on the context of an existing one, allowing operations like generating summaries without affecting the original session's history.

Only available if the Agent supports the 'session.fork' capability.

func (*UnstableForkSessionRequest) Validate added in v0.10.8

func (v *UnstableForkSessionRequest) Validate() error

type UnstableForkSessionResponse added in v0.10.8

type UnstableForkSessionResponse struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
	// Initial session configuration options if supported by the Agent.
	ConfigOptions []UnstableSessionConfigOption `json:"configOptions,omitempty"`
	// **UNSTABLE**
	//
	// This capability is not part of the spec yet, and may be removed or changed at any point.
	//
	// Initial model state if supported by the Agent
	Models *UnstableSessionModelState `json:"models,omitempty"`
	// Initial mode state if supported by the Agent
	//
	// See protocol docs: [Session Modes](https://agentclientprotocol.com/protocol/session-modes)
	Modes *SessionModeState `json:"modes,omitempty"`
	// Unique identifier for the newly created forked session.
	SessionId SessionId `json:"sessionId"`
}

**UNSTABLE**

This capability is not part of the spec yet, and may be removed or changed at any point.

Response from forking an existing session.

func (*UnstableForkSessionResponse) Validate added in v0.10.8

func (v *UnstableForkSessionResponse) Validate() error

type UnstableListProvidersRequest added in v0.11.7

type UnstableListProvidersRequest struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
}

**UNSTABLE**

This capability is not part of the spec yet, and may be removed or changed at any point.

Request parameters for 'providers/list'.

func (*UnstableListProvidersRequest) Validate added in v0.11.7

func (v *UnstableListProvidersRequest) Validate() error

type UnstableListProvidersResponse added in v0.11.7

type UnstableListProvidersResponse struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
	// Configurable providers with current routing info suitable for UI display.
	Providers []UnstableProviderInfo `json:"providers"`
}

**UNSTABLE**

This capability is not part of the spec yet, and may be removed or changed at any point.

Response to 'providers/list'.

func (*UnstableListProvidersResponse) Validate added in v0.11.7

func (v *UnstableListProvidersResponse) Validate() error

type UnstableLlmProtocol added in v0.11.7

type UnstableLlmProtocol struct {
	// Unknown or custom protocol.
	Other *UnstableLlmProtocolOther `json:"-"`
}

func (UnstableLlmProtocol) MarshalJSON added in v0.11.7

func (u UnstableLlmProtocol) MarshalJSON() ([]byte, error)

func (*UnstableLlmProtocol) UnmarshalJSON added in v0.11.7

func (u *UnstableLlmProtocol) UnmarshalJSON(b []byte) error

type UnstableLlmProtocolOther added in v0.11.7

type UnstableLlmProtocolOther string

**UNSTABLE**

This capability is not part of the spec yet, and may be removed or changed at any point.

Well-known API protocol identifiers for LLM providers.

Agents and clients MUST handle unknown protocol identifiers gracefully.

Protocol names beginning with '_' are free for custom use, like other ACP extension methods. Protocol names that do not begin with '_' are reserved for the ACP spec. Unknown or custom protocol.

type UnstableLogoutRequest added in v0.11.7

type UnstableLogoutRequest struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
}

**UNSTABLE**

This capability is not part of the spec yet, and may be removed or changed at any point.

Request parameters for the logout method.

Terminates the current authenticated session.

func (*UnstableLogoutRequest) Validate added in v0.11.7

func (v *UnstableLogoutRequest) Validate() error

type UnstableLogoutResponse added in v0.11.7

type UnstableLogoutResponse struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
}

**UNSTABLE**

This capability is not part of the spec yet, and may be removed or changed at any point.

Response to the 'logout' method.

func (*UnstableLogoutResponse) Validate added in v0.11.7

func (v *UnstableLogoutResponse) Validate() error

type UnstableModelId added in v0.10.8

type UnstableModelId string

**UNSTABLE**

This capability is not part of the spec yet, and may be removed or changed at any point.

A unique identifier for a model.

type UnstableModelInfo added in v0.10.8

type UnstableModelInfo struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
	// Optional description of the model.
	Description *string `json:"description,omitempty"`
	// Unique identifier for the model.
	ModelId UnstableModelId `json:"modelId"`
	// Human-readable name of the model.
	Name string `json:"name"`
}

**UNSTABLE**

This capability is not part of the spec yet, and may be removed or changed at any point.

Information about a selectable model.

type UnstableNesDiagnostic added in v0.11.7

type UnstableNesDiagnostic struct {
	// The diagnostic message.
	Message string `json:"message"`
	// The range of the diagnostic.
	Range UnstableRange `json:"range"`
	// The severity of the diagnostic.
	Severity UnstableNesDiagnosticSeverity `json:"severity"`
	// The URI of the file containing the diagnostic.
	Uri string `json:"uri"`
}

A diagnostic (error, warning, etc.).

type UnstableNesDiagnosticSeverity added in v0.11.7

type UnstableNesDiagnosticSeverity string

Severity of a diagnostic.

const (
	UnstableNesDiagnosticSeverityError       UnstableNesDiagnosticSeverity = "error"
	UnstableNesDiagnosticSeverityWarning     UnstableNesDiagnosticSeverity = "warning"
	UnstableNesDiagnosticSeverityInformation UnstableNesDiagnosticSeverity = "information"
	UnstableNesDiagnosticSeverityHint        UnstableNesDiagnosticSeverity = "hint"
)

type UnstableNesEditHistoryEntry added in v0.11.7

type UnstableNesEditHistoryEntry struct {
	// A diff representing the edit.
	Diff string `json:"diff"`
	// The URI of the edited file.
	Uri string `json:"uri"`
}

An entry in the edit history.

type UnstableNesEditSuggestion added in v0.11.7

type UnstableNesEditSuggestion struct {
	// Optional suggested cursor position after applying edits.
	CursorPosition *UnstablePosition `json:"cursorPosition,omitempty"`
	// The text edits to apply.
	Edits []UnstableNesTextEdit `json:"edits"`
	// Unique identifier for accept/reject tracking.
	Id string `json:"id"`
	// The URI of the file to edit.
	Uri string `json:"uri"`
}

A text edit suggestion.

type UnstableNesExcerpt added in v0.11.7

type UnstableNesExcerpt struct {
	// The end line of the excerpt (zero-based).
	EndLine int `json:"endLine"`
	// The start line of the excerpt (zero-based).
	StartLine int `json:"startLine"`
	// The text content of the excerpt.
	Text string `json:"text"`
}

A code excerpt from a file.

type UnstableNesJumpSuggestion added in v0.11.7

type UnstableNesJumpSuggestion struct {
	// Unique identifier for accept/reject tracking.
	Id string `json:"id"`
	// The target position within the file.
	Position UnstablePosition `json:"position"`
	// The file to navigate to.
	Uri string `json:"uri"`
}

A jump-to-location suggestion.

type UnstableNesOpenFile added in v0.11.7

type UnstableNesOpenFile struct {
	// The language identifier.
	LanguageId string `json:"languageId"`
	// Timestamp in milliseconds since epoch of when the file was last focused.
	LastFocusedMs *int `json:"lastFocusedMs,omitempty"`
	// The URI of the file.
	Uri string `json:"uri"`
	// The visible range in the editor, if any.
	VisibleRange *UnstableRange `json:"visibleRange,omitempty"`
}

An open file in the editor.

type UnstableNesRecentFile added in v0.11.7

type UnstableNesRecentFile struct {
	// The language identifier.
	LanguageId string `json:"languageId"`
	// The full text content of the file.
	Text string `json:"text"`
	// The URI of the file.
	Uri string `json:"uri"`
}

A recently accessed file.

type UnstableNesRejectReason added in v0.11.7

type UnstableNesRejectReason string

The reason a suggestion was rejected.

const (
	UnstableNesRejectReasonRejected  UnstableNesRejectReason = "rejected"
	UnstableNesRejectReasonIgnored   UnstableNesRejectReason = "ignored"
	UnstableNesRejectReasonReplaced  UnstableNesRejectReason = "replaced"
	UnstableNesRejectReasonCancelled UnstableNesRejectReason = "cancelled"
)

type UnstableNesRelatedSnippet added in v0.11.7

type UnstableNesRelatedSnippet struct {
	// The code excerpts.
	Excerpts []UnstableNesExcerpt `json:"excerpts"`
	// The URI of the file containing the snippets.
	Uri string `json:"uri"`
}

A related code snippet from a file.

type UnstableNesRenameSuggestion added in v0.11.7

type UnstableNesRenameSuggestion struct {
	// Unique identifier for accept/reject tracking.
	Id string `json:"id"`
	// The new name for the symbol.
	NewName string `json:"newName"`
	// The position of the symbol to rename.
	Position UnstablePosition `json:"position"`
	// The file URI containing the symbol.
	Uri string `json:"uri"`
}

A rename symbol suggestion.

type UnstableNesRepository added in v0.11.7

type UnstableNesRepository struct {
	// The repository name.
	Name string `json:"name"`
	// The repository owner.
	Owner string `json:"owner"`
	// The remote URL of the repository.
	RemoteUrl string `json:"remoteUrl"`
}

Repository metadata for an NES session.

type UnstableNesSearchAndReplaceSuggestion added in v0.11.7

type UnstableNesSearchAndReplaceSuggestion struct {
	// Unique identifier for accept/reject tracking.
	Id string `json:"id"`
	// Whether 'search' is a regular expression. Defaults to 'false'.
	IsRegex *bool `json:"isRegex,omitempty"`
	// The replacement text.
	Replace string `json:"replace"`
	// The text or pattern to find.
	Search string `json:"search"`
	// The file URI to search within.
	Uri string `json:"uri"`
}

A search-and-replace suggestion.

type UnstableNesSuggestContext added in v0.11.7

type UnstableNesSuggestContext struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
	// Current diagnostics (errors, warnings).
	Diagnostics []UnstableNesDiagnostic `json:"diagnostics,omitempty"`
	// Recent edit history.
	EditHistory []UnstableNesEditHistoryEntry `json:"editHistory,omitempty"`
	// Currently open files in the editor.
	OpenFiles []UnstableNesOpenFile `json:"openFiles,omitempty"`
	// Recently accessed files.
	RecentFiles []UnstableNesRecentFile `json:"recentFiles,omitempty"`
	// Related code snippets.
	RelatedSnippets []UnstableNesRelatedSnippet `json:"relatedSnippets,omitempty"`
	// Recent user actions (typing, navigation, etc.).
	UserActions []UnstableNesUserAction `json:"userActions,omitempty"`
}

Context attached to a suggestion request.

type UnstableNesSuggestion added in v0.11.7

type UnstableNesSuggestion struct {
	// A text edit suggestion.
	Edit *UnstableNesSuggestionEdit `json:"-"`
	// A jump-to-location suggestion.
	Jump *UnstableNesSuggestionJump `json:"-"`
	// A rename symbol suggestion.
	Rename *UnstableNesSuggestionRename `json:"-"`
	// A search-and-replace suggestion.
	SearchAndReplace *UnstableNesSuggestionSearchAndReplace `json:"-"`
}

func NewUnstableNesSuggestionEdit added in v0.11.7

func NewUnstableNesSuggestionEdit(id string, uri string, edits []UnstableNesTextEdit) UnstableNesSuggestion

NewUnstableNesSuggestionEdit constructs a UnstableNesSuggestion using the 'edit' variant.

func NewUnstableNesSuggestionJump added in v0.11.7

func NewUnstableNesSuggestionJump(id string, uri string, position UnstablePosition) UnstableNesSuggestion

NewUnstableNesSuggestionJump constructs a UnstableNesSuggestion using the 'jump' variant.

func NewUnstableNesSuggestionRename added in v0.11.7

func NewUnstableNesSuggestionRename(id string, uri string, position UnstablePosition, newName string) UnstableNesSuggestion

NewUnstableNesSuggestionRename constructs a UnstableNesSuggestion using the 'rename' variant.

func NewUnstableNesSuggestionSearchAndReplace added in v0.11.7

func NewUnstableNesSuggestionSearchAndReplace(id string, uri string, search string, replace string) UnstableNesSuggestion

NewUnstableNesSuggestionSearchAndReplace constructs a UnstableNesSuggestion using the 'searchAndReplace' variant.

func (UnstableNesSuggestion) MarshalJSON added in v0.11.7

func (u UnstableNesSuggestion) MarshalJSON() ([]byte, error)

func (*UnstableNesSuggestion) UnmarshalJSON added in v0.11.7

func (u *UnstableNesSuggestion) UnmarshalJSON(b []byte) error

func (*UnstableNesSuggestion) Validate added in v0.11.7

func (u *UnstableNesSuggestion) Validate() error

type UnstableNesSuggestionEdit added in v0.11.7

type UnstableNesSuggestionEdit struct {
	// Optional suggested cursor position after applying edits.
	CursorPosition *UnstablePosition `json:"cursorPosition,omitempty"`
	// The text edits to apply.
	Edits []UnstableNesTextEdit `json:"edits"`
	// Unique identifier for accept/reject tracking.
	Id   string `json:"id"`
	Kind string `json:"kind"`
	// The URI of the file to edit.
	Uri string `json:"uri"`
}

A suggestion returned by the agent. A text edit suggestion.

type UnstableNesSuggestionJump added in v0.11.7

type UnstableNesSuggestionJump struct {
	// Unique identifier for accept/reject tracking.
	Id   string `json:"id"`
	Kind string `json:"kind"`
	// The target position within the file.
	Position UnstablePosition `json:"position"`
	// The file to navigate to.
	Uri string `json:"uri"`
}

A jump-to-location suggestion.

type UnstableNesSuggestionRename added in v0.11.7

type UnstableNesSuggestionRename struct {
	// Unique identifier for accept/reject tracking.
	Id   string `json:"id"`
	Kind string `json:"kind"`
	// The new name for the symbol.
	NewName string `json:"newName"`
	// The position of the symbol to rename.
	Position UnstablePosition `json:"position"`
	// The file URI containing the symbol.
	Uri string `json:"uri"`
}

A rename symbol suggestion.

type UnstableNesSuggestionSearchAndReplace added in v0.11.7

type UnstableNesSuggestionSearchAndReplace struct {
	// Unique identifier for accept/reject tracking.
	Id string `json:"id"`
	// Whether 'search' is a regular expression. Defaults to 'false'.
	IsRegex *bool  `json:"isRegex,omitempty"`
	Kind    string `json:"kind"`
	// The replacement text.
	Replace string `json:"replace"`
	// The text or pattern to find.
	Search string `json:"search"`
	// The file URI to search within.
	Uri string `json:"uri"`
}

A search-and-replace suggestion.

type UnstableNesTextEdit added in v0.11.7

type UnstableNesTextEdit struct {
	// The replacement text.
	NewText string `json:"newText"`
	// The range to replace.
	Range UnstableRange `json:"range"`
}

A text edit within a suggestion.

type UnstableNesTriggerKind added in v0.11.7

type UnstableNesTriggerKind string

What triggered the suggestion request.

const (
	UnstableNesTriggerKindAutomatic  UnstableNesTriggerKind = "automatic"
	UnstableNesTriggerKindDiagnostic UnstableNesTriggerKind = "diagnostic"
	UnstableNesTriggerKindManual     UnstableNesTriggerKind = "manual"
)

type UnstableNesUserAction added in v0.11.7

type UnstableNesUserAction struct {
	// The kind of action (e.g., "insertChar", "cursorMovement").
	Action string `json:"action"`
	// The position where the action occurred.
	Position UnstablePosition `json:"position"`
	// Timestamp in milliseconds since epoch.
	TimestampMs int `json:"timestampMs"`
	// The URI of the file where the action occurred.
	Uri string `json:"uri"`
}

A user action (typing, cursor movement, etc.).

type UnstablePosition added in v0.11.7

type UnstablePosition struct {
	// Zero-based character offset (encoding-dependent).
	Character int `json:"character"`
	// Zero-based line number.
	Line int `json:"line"`
}

A zero-based position in a text document.

The meaning of 'character' depends on the negotiated position encoding.

type UnstableProviderCurrentConfig added in v0.11.7

type UnstableProviderCurrentConfig struct {
	// Protocol currently used by this provider.
	ApiType UnstableLlmProtocol `json:"apiType"`
	// Base URL currently used by this provider.
	BaseUrl string `json:"baseUrl"`
}

**UNSTABLE**

This capability is not part of the spec yet, and may be removed or changed at any point.

Current effective non-secret routing configuration for a provider.

type UnstableProviderInfo added in v0.11.7

type UnstableProviderInfo struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
	// Current effective non-secret routing config.
	// Null or omitted means provider is disabled.
	Current *UnstableProviderCurrentConfig `json:"current,omitempty"`
	// Provider identifier, for example "main" or "openai".
	Id string `json:"id"`
	// Whether this provider is mandatory and cannot be disabled via 'providers/disable'.
	// If true, clients must not call 'providers/disable' for this id.
	Required bool `json:"required"`
	// Supported protocol types for this provider.
	Supported []UnstableLlmProtocol `json:"supported"`
}

**UNSTABLE**

This capability is not part of the spec yet, and may be removed or changed at any point.

Information about a configurable LLM provider.

type UnstableRange added in v0.11.7

type UnstableRange struct {
	// The end position (exclusive).
	End UnstablePosition `json:"end"`
	// The start position (inclusive).
	Start UnstablePosition `json:"start"`
}

A range in a text document, expressed as start and end positions.

type UnstableRejectNesNotification added in v0.11.7

type UnstableRejectNesNotification struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
	// The ID of the rejected suggestion.
	Id string `json:"id"`
	// The reason for rejection.
	Reason *UnstableNesRejectReason `json:"reason,omitempty"`
	// The session ID for this notification.
	SessionId SessionId `json:"sessionId"`
}

Notification sent when a suggestion is rejected.

func (*UnstableRejectNesNotification) Validate added in v0.11.7

func (v *UnstableRejectNesNotification) Validate() error

type UnstableSessionConfigBoolean added in v0.11.7

type UnstableSessionConfigBoolean struct {
	// The current value of the boolean option.
	CurrentValue bool `json:"currentValue"`
}

**UNSTABLE**

This capability is not part of the spec yet, and may be removed or changed at any point.

A boolean on/off toggle session configuration option payload.

type UnstableSessionConfigOption added in v0.11.7

type UnstableSessionConfigOption struct {
	// Single-value selector (dropdown).
	Select *UnstableSessionConfigOptionSelect `json:"-"`
	// **UNSTABLE**
	//
	// This capability is not part of the spec yet, and may be removed or changed at any point.
	//
	// Boolean on/off toggle.
	Boolean *UnstableSessionConfigOptionBoolean `json:"-"`
}

func NewUnstableSessionConfigOptionBoolean added in v0.11.7

func NewUnstableSessionConfigOptionBoolean(currentValue bool) UnstableSessionConfigOption

NewUnstableSessionConfigOptionBoolean constructs a UnstableSessionConfigOption using the 'boolean' variant.

func NewUnstableSessionConfigOptionSelect added in v0.11.7

func NewUnstableSessionConfigOptionSelect(currentValue SessionConfigValueId, options SessionConfigSelectOptions) UnstableSessionConfigOption

NewUnstableSessionConfigOptionSelect constructs a UnstableSessionConfigOption using the 'select' variant.

func (UnstableSessionConfigOption) MarshalJSON added in v0.11.7

func (u UnstableSessionConfigOption) MarshalJSON() ([]byte, error)

func (*UnstableSessionConfigOption) UnmarshalJSON added in v0.11.7

func (u *UnstableSessionConfigOption) UnmarshalJSON(b []byte) error

func (*UnstableSessionConfigOption) Validate added in v0.11.7

func (u *UnstableSessionConfigOption) Validate() error

type UnstableSessionConfigOptionBoolean added in v0.11.7

type UnstableSessionConfigOptionBoolean struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
	// Optional semantic category for this option (UX only).
	Category *SessionConfigOptionCategory `json:"category,omitempty"`
	// The current value of the boolean option.
	CurrentValue bool `json:"currentValue"`
	// Optional description for the Client to display to the user.
	Description *string `json:"description,omitempty"`
	// Unique identifier for the configuration option.
	Id SessionConfigId `json:"id"`
	// Human-readable label for the option.
	Name string `json:"name"`
	Type string `json:"type"`
}

**UNSTABLE**

This capability is not part of the spec yet, and may be removed or changed at any point.

Boolean on/off toggle.

type UnstableSessionConfigOptionSelect added in v0.11.7

type UnstableSessionConfigOptionSelect struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
	// Optional semantic category for this option (UX only).
	Category *SessionConfigOptionCategory `json:"category,omitempty"`
	// The currently selected value.
	CurrentValue SessionConfigValueId `json:"currentValue"`
	// Optional description for the Client to display to the user.
	Description *string `json:"description,omitempty"`
	// Unique identifier for the configuration option.
	Id SessionConfigId `json:"id"`
	// Human-readable label for the option.
	Name string `json:"name"`
	// The set of selectable options.
	Options SessionConfigSelectOptions `json:"options"`
	Type    string                     `json:"type"`
}

A session configuration option selector and its current state. Single-value selector (dropdown).

type UnstableSessionModelState added in v0.10.8

type UnstableSessionModelState struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
	// The set of models that the Agent can use
	AvailableModels []UnstableModelInfo `json:"availableModels"`
	// The current model the Agent is in.
	CurrentModelId UnstableModelId `json:"currentModelId"`
}

**UNSTABLE**

This capability is not part of the spec yet, and may be removed or changed at any point.

The set of models and the one currently active.

type UnstableSetProvidersRequest added in v0.11.7

type UnstableSetProvidersRequest struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
	// Protocol type for this provider.
	ApiType UnstableLlmProtocol `json:"apiType"`
	// Base URL for requests sent through this provider.
	BaseUrl string `json:"baseUrl"`
	// Full headers map for this provider.
	// May include authorization, routing, or other integration-specific headers.
	Headers map[string]any `json:"headers,omitempty"`
	// Provider id to configure.
	Id string `json:"id"`
}

**UNSTABLE**

This capability is not part of the spec yet, and may be removed or changed at any point.

Request parameters for 'providers/set'.

Replaces the full configuration for one provider id.

func (*UnstableSetProvidersRequest) Validate added in v0.11.7

func (v *UnstableSetProvidersRequest) Validate() error

type UnstableSetProvidersResponse added in v0.11.7

type UnstableSetProvidersResponse struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
}

**UNSTABLE**

This capability is not part of the spec yet, and may be removed or changed at any point.

Response to 'providers/set'.

func (*UnstableSetProvidersResponse) Validate added in v0.11.7

func (v *UnstableSetProvidersResponse) Validate() error

type UnstableSetSessionModelRequest added in v0.10.8

type UnstableSetSessionModelRequest struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
	// The ID of the model to set.
	ModelId UnstableModelId `json:"modelId"`
	// The ID of the session to set the model for.
	SessionId SessionId `json:"sessionId"`
}

**UNSTABLE**

This capability is not part of the spec yet, and may be removed or changed at any point.

Request parameters for setting a session model.

func (*UnstableSetSessionModelRequest) Validate added in v0.10.8

func (v *UnstableSetSessionModelRequest) Validate() error

type UnstableSetSessionModelResponse added in v0.10.8

type UnstableSetSessionModelResponse struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
}

**UNSTABLE**

This capability is not part of the spec yet, and may be removed or changed at any point.

Response to 'session/set_model' method.

func (*UnstableSetSessionModelResponse) Validate added in v0.10.8

func (v *UnstableSetSessionModelResponse) Validate() error

type UnstableStartNesRequest added in v0.11.7

type UnstableStartNesRequest struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
	// Repository metadata, if the workspace is a git repository.
	Repository *UnstableNesRepository `json:"repository,omitempty"`
	// The workspace folders.
	WorkspaceFolders []UnstableWorkspaceFolder `json:"workspaceFolders,omitempty"`
	// The root URI of the workspace.
	WorkspaceUri *string `json:"workspaceUri,omitempty"`
}

Request to start an NES session.

func (*UnstableStartNesRequest) Validate added in v0.11.7

func (v *UnstableStartNesRequest) Validate() error

type UnstableStartNesResponse added in v0.11.7

type UnstableStartNesResponse struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
	// The session ID for the newly started NES session.
	SessionId SessionId `json:"sessionId"`
}

Response to 'nes/start'.

func (*UnstableStartNesResponse) Validate added in v0.11.7

func (v *UnstableStartNesResponse) Validate() error

type UnstableSuggestNesRequest added in v0.11.7

type UnstableSuggestNesRequest struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
	// Context for the suggestion, included based on agent capabilities.
	Context *UnstableNesSuggestContext `json:"context,omitempty"`
	// The current cursor position.
	Position UnstablePosition `json:"position"`
	// The current text selection range, if any.
	Selection *UnstableRange `json:"selection,omitempty"`
	// The session ID for this request.
	SessionId SessionId `json:"sessionId"`
	// What triggered this suggestion request.
	TriggerKind UnstableNesTriggerKind `json:"triggerKind"`
	// The URI of the document to suggest for.
	Uri string `json:"uri"`
	// The version number of the document.
	Version int `json:"version"`
}

Request for a code suggestion.

func (*UnstableSuggestNesRequest) Validate added in v0.11.7

func (v *UnstableSuggestNesRequest) Validate() error

type UnstableSuggestNesResponse added in v0.11.7

type UnstableSuggestNesResponse struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
	// The list of suggestions.
	Suggestions []UnstableNesSuggestion `json:"suggestions"`
}

Response to 'nes/suggest'.

func (*UnstableSuggestNesResponse) Validate added in v0.11.7

func (v *UnstableSuggestNesResponse) Validate() error

type UnstableTextDocumentContentChangeEvent added in v0.11.7

type UnstableTextDocumentContentChangeEvent struct {
	// The range of the document that changed. If 'None', the entire content is replaced.
	Range *UnstableRange `json:"range,omitempty"`
	// The new text for the range, or the full document content if 'range' is 'None'.
	Text string `json:"text"`
}

A content change event for a document.

When 'range' is 'None', 'text' is the full content of the document. When 'range' is 'Some', 'text' replaces the given range.

type UnstableWorkspaceFolder added in v0.11.7

type UnstableWorkspaceFolder struct {
	// The display name of the folder.
	Name string `json:"name"`
	// The URI of the folder.
	Uri string `json:"uri"`
}

A workspace folder.

type UnstructuredCommandInput

type UnstructuredCommandInput struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
	// A hint to display when the input hasn't been provided yet
	Hint string `json:"hint"`
}

All text that was typed after the command name is provided as input.

type Usage added in v0.10.8

type Usage struct {
	// Total cache read tokens.
	CachedReadTokens *int `json:"cachedReadTokens,omitempty"`
	// Total cache write tokens.
	CachedWriteTokens *int `json:"cachedWriteTokens,omitempty"`
	// Total input tokens across all turns.
	InputTokens int `json:"inputTokens"`
	// Total output tokens across all turns.
	OutputTokens int `json:"outputTokens"`
	// Total thought/reasoning tokens
	ThoughtTokens *int `json:"thoughtTokens,omitempty"`
	// Sum of all token types across session.
	TotalTokens int `json:"totalTokens"`
}

**UNSTABLE**

This capability is not part of the spec yet, and may be removed or changed at any point.

Token usage information for a prompt turn.

type UsageUpdate added in v0.10.8

type UsageUpdate struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
	// Cumulative session cost (optional).
	Cost *Cost `json:"cost,omitempty"`
	// Total context window size in tokens.
	Size int `json:"size"`
	// Tokens currently in context.
	Used int `json:"used"`
}

**UNSTABLE**

This capability is not part of the spec yet, and may be removed or changed at any point.

Context window and cost update for a session.

type WaitForTerminalExitRequest

type WaitForTerminalExitRequest struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
	// The session ID for this request.
	SessionId SessionId `json:"sessionId"`
	// The ID of the terminal to wait for.
	TerminalId string `json:"terminalId"`
}

Request to wait for a terminal command to exit.

func (*WaitForTerminalExitRequest) Validate

func (v *WaitForTerminalExitRequest) Validate() error

type WaitForTerminalExitResponse

type WaitForTerminalExitResponse struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
	// The process exit code (may be null if terminated by signal).
	ExitCode *int `json:"exitCode,omitempty"`
	// The signal that terminated the process (may be null if exited normally).
	Signal *string `json:"signal,omitempty"`
}

Response containing the exit status of a terminal command.

func (*WaitForTerminalExitResponse) Validate

func (v *WaitForTerminalExitResponse) Validate() error

type WriteTextFileRequest

type WriteTextFileRequest struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
	// The text content to write to the file.
	Content string `json:"content"`
	// Absolute path to the file to write.
	Path string `json:"path"`
	// The session ID for this request.
	SessionId SessionId `json:"sessionId"`
}

Request to write content to a text file.

Only available if the client supports the 'fs.writeTextFile' capability.

func (*WriteTextFileRequest) Validate

func (v *WriteTextFileRequest) Validate() error

type WriteTextFileResponse

type WriteTextFileResponse struct {
	// The _meta property is reserved by ACP to allow clients and agents to attach additional
	// metadata to their interactions. Implementations MUST NOT make assumptions about values at
	// these keys.
	//
	// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
	Meta map[string]any `json:"_meta,omitempty"`
}

Response to 'fs/write_text_file'

func (*WriteTextFileResponse) Validate

func (v *WriteTextFileResponse) Validate() error

Directories

Path Synopsis
cmd
generate module
example
agent command
claude-code command
client command
gemini command

Jump to

Keyboard shortcuts

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