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
}
// 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()
}
Output:
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) KillTerminalCommand(ctx context.Context, p KillTerminalCommandRequest) (KillTerminalCommandResponse, error) {
return KillTerminalCommandResponse{}, 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: FileSystemCapability{
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()
}
Output:
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) KillTerminalCommand(ctx context.Context, p KillTerminalCommandRequest) (KillTerminalCommandResponse, error) {
return KillTerminalCommandResponse{}, 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: FileSystemCapability{
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")},
})
}
Output:
Index ¶
- Constants
- func Ptr[T any](v T) *T
- func SendRequest[T any](c *Connection, ctx context.Context, method string, params any) (T, error)
- type Agent
- type AgentCapabilities
- type AgentError
- type AgentExperimental
- type AgentLoader
- type AgentNotification
- type AgentRequest
- type AgentResponse
- type AgentResult
- type AgentSideConnection
- func (c *AgentSideConnection) CallExtension(ctx context.Context, method string, params any) (json.RawMessage, error)
- func (c *AgentSideConnection) CreateTerminal(ctx context.Context, params CreateTerminalRequest) (CreateTerminalResponse, error)
- func (c *AgentSideConnection) Done() <-chan struct{}
- func (c *AgentSideConnection) KillTerminalCommand(ctx context.Context, params KillTerminalCommandRequest) (KillTerminalCommandResponse, error)
- func (c *AgentSideConnection) NotifyExtension(ctx context.Context, method string, params any) error
- func (c *AgentSideConnection) ReadTextFile(ctx context.Context, params ReadTextFileRequest) (ReadTextFileResponse, error)
- func (c *AgentSideConnection) ReleaseTerminal(ctx context.Context, params ReleaseTerminalRequest) (ReleaseTerminalResponse, error)
- func (c *AgentSideConnection) RequestPermission(ctx context.Context, params RequestPermissionRequest) (RequestPermissionResponse, error)
- func (c *AgentSideConnection) SessionUpdate(ctx context.Context, params SessionNotification) error
- func (c *AgentSideConnection) SetLogger(l *slog.Logger)
- func (c *AgentSideConnection) TerminalOutput(ctx context.Context, params TerminalOutputRequest) (TerminalOutputResponse, error)
- func (c *AgentSideConnection) WaitForTerminalExit(ctx context.Context, params WaitForTerminalExitRequest) (WaitForTerminalExitResponse, error)
- func (c *AgentSideConnection) WriteTextFile(ctx context.Context, params WriteTextFileRequest) (WriteTextFileResponse, error)
- type Annotations
- type AudioContent
- type AuthMethod
- type AuthenticateRequest
- type AuthenticateResponse
- type AvailableCommand
- type AvailableCommandInput
- type AvailableCommandsUpdate
- type BlobResourceContents
- type CancelNotification
- type Client
- type ClientCapabilities
- type ClientError
- type ClientExperimental
- type ClientNotification
- type ClientRequest
- type ClientResponse
- type ClientResult
- type ClientSideConnection
- func (c *ClientSideConnection) Authenticate(ctx context.Context, params AuthenticateRequest) (AuthenticateResponse, error)
- func (c *ClientSideConnection) CallExtension(ctx context.Context, method string, params any) (json.RawMessage, error)
- func (c *ClientSideConnection) Cancel(ctx context.Context, params CancelNotification) error
- func (c *ClientSideConnection) Done() <-chan struct{}
- func (c *ClientSideConnection) Initialize(ctx context.Context, params InitializeRequest) (InitializeResponse, error)
- func (c *ClientSideConnection) LoadSession(ctx context.Context, params LoadSessionRequest) (LoadSessionResponse, error)
- func (c *ClientSideConnection) NewSession(ctx context.Context, params NewSessionRequest) (NewSessionResponse, error)
- func (c *ClientSideConnection) NotifyExtension(ctx context.Context, method string, params any) error
- func (c *ClientSideConnection) Prompt(ctx context.Context, params PromptRequest) (PromptResponse, error)
- func (c *ClientSideConnection) SetLogger(l *slog.Logger)
- func (c *ClientSideConnection) SetSessionConfigOption(ctx context.Context, params SetSessionConfigOptionRequest) (SetSessionConfigOptionResponse, error)
- func (c *ClientSideConnection) SetSessionMode(ctx context.Context, params SetSessionModeRequest) (SetSessionModeResponse, error)
- func (c *ClientSideConnection) UnstableForkSession(ctx context.Context, params UnstableForkSessionRequest) (UnstableForkSessionResponse, error)
- func (c *ClientSideConnection) UnstableListSessions(ctx context.Context, params UnstableListSessionsRequest) (UnstableListSessionsResponse, error)
- func (c *ClientSideConnection) UnstableResumeSession(ctx context.Context, params UnstableResumeSessionRequest) (UnstableResumeSessionResponse, error)
- func (c *ClientSideConnection) UnstableSetSessionModel(ctx context.Context, params UnstableSetSessionModelRequest) (UnstableSetSessionModelResponse, error)
- type ConfigOptionUpdate
- type Connection
- type Content
- type ContentBlock
- type ContentBlockAudio
- type ContentBlockImage
- type ContentBlockResource
- type ContentBlockResourceLink
- type ContentBlockText
- type ContentChunk
- type Cost
- type CreateTerminalRequest
- type CreateTerminalResponse
- type CurrentModeUpdate
- type Diff
- type EmbeddedResource
- type EmbeddedResourceResource
- type EnvVariable
- type Error
- type ErrorCode
- type ErrorCodeAuthenticationRequired
- type ErrorCodeInternalError
- type ErrorCodeInvalidParams
- type ErrorCodeInvalidRequest
- type ErrorCodeMethodNotFound
- type ErrorCodeOther
- type ErrorCodeParseError
- type ErrorCodeResourceNotFound
- type ExtNotification
- type ExtRequest
- type ExtResponse
- type ExtensionMethodHandler
- type FileSystemCapability
- type HttpHeader
- type ImageContent
- type Implementation
- type InitializeRequest
- type InitializeResponse
- type KillTerminalCommandRequest
- type KillTerminalCommandResponse
- type LoadSessionRequest
- type LoadSessionResponse
- type McpCapabilities
- type McpServer
- type McpServerHttp
- type McpServerHttpInline
- type McpServerSse
- type McpServerSseInline
- type McpServerStdio
- type MethodHandler
- type ModelId
- type ModelInfo
- type NewSessionRequest
- type NewSessionResponse
- type PermissionOption
- type PermissionOptionId
- type PermissionOptionKind
- type Plan
- type PlanEntry
- type PlanEntryPriority
- type PlanEntryStatus
- type PromptCapabilities
- type PromptRequest
- type PromptResponse
- type ProtocolVersion
- type ReadTextFileRequest
- type ReadTextFileResponse
- type ReleaseTerminalRequest
- type ReleaseTerminalResponse
- type RequestError
- func NewAuthRequired(data any) *RequestError
- func NewInternalError(data any) *RequestError
- func NewInvalidParams(data any) *RequestError
- func NewInvalidRequest(data any) *RequestError
- func NewMethodNotFound(method string) *RequestError
- func NewParseError(data any) *RequestError
- func NewRequestCancelled(data any) *RequestError
- type RequestId
- type RequestIdNull
- type RequestIdNumber
- type RequestIdStr
- type RequestPermissionOutcome
- type RequestPermissionOutcomeCancelled
- type RequestPermissionOutcomeSelected
- type RequestPermissionRequest
- type RequestPermissionResponse
- type ResourceLink
- type Role
- type SelectedPermissionOutcome
- type SessionAvailableCommandsUpdate
- type SessionCapabilities
- type SessionConfigGroupId
- type SessionConfigId
- type SessionConfigOption
- type SessionConfigOptionCategory
- type SessionConfigOptionCategoryOther
- type SessionConfigOptionSelect
- type SessionConfigOptionUpdate
- type SessionConfigSelect
- type SessionConfigSelectGroup
- type SessionConfigSelectOption
- type SessionConfigSelectOptions
- type SessionConfigSelectOptionsGrouped
- type SessionConfigSelectOptionsUngrouped
- type SessionConfigValueId
- type SessionCurrentModeUpdate
- type SessionForkCapabilities
- type SessionId
- type SessionInfoUpdate
- type SessionListCapabilities
- type SessionMode
- type SessionModeId
- type SessionModeState
- type SessionModelState
- type SessionNotification
- type SessionResumeCapabilities
- type SessionSessionInfoUpdate
- type SessionToolCallUpdate
- type SessionUpdate
- func StartEditToolCall(id ToolCallId, title string, path string, content any, ...) SessionUpdate
- func StartReadToolCall(id ToolCallId, title string, path string, opts ...ToolCallStartOpt) SessionUpdate
- func StartToolCall(id ToolCallId, title string, opts ...ToolCallStartOpt) SessionUpdate
- func UpdateAgentMessage(content ContentBlock) SessionUpdate
- func UpdateAgentMessageText(text string) SessionUpdate
- func UpdateAgentThought(content ContentBlock) SessionUpdate
- func UpdateAgentThoughtText(text string) SessionUpdate
- func UpdatePlan(entries ...PlanEntry) SessionUpdate
- func UpdateToolCall(id ToolCallId, opts ...ToolCallUpdateOpt) SessionUpdate
- func UpdateUserMessage(content ContentBlock) SessionUpdate
- func UpdateUserMessageText(text string) SessionUpdate
- type SessionUpdateAgentMessageChunk
- type SessionUpdateAgentThoughtChunk
- type SessionUpdatePlan
- type SessionUpdateToolCall
- type SessionUpdateUserMessageChunk
- type SessionUsageUpdate
- type SetSessionConfigOptionRequest
- type SetSessionConfigOptionResponse
- type SetSessionModeRequest
- type SetSessionModeResponse
- type StopReason
- type Terminal
- type TerminalExitStatus
- type TerminalOutputRequest
- type TerminalOutputResponse
- type TextContent
- type TextResourceContents
- type ToolCall
- type ToolCallContent
- type ToolCallContentContent
- type ToolCallContentDiff
- type ToolCallContentTerminal
- type ToolCallId
- type ToolCallLocation
- type ToolCallStartOpt
- func WithStartContent(c []ToolCallContent) ToolCallStartOpt
- func WithStartKind(k ToolKind) ToolCallStartOpt
- func WithStartLocations(l []ToolCallLocation) ToolCallStartOpt
- func WithStartRawInput(v any) ToolCallStartOpt
- func WithStartRawOutput(v any) ToolCallStartOpt
- func WithStartStatus(s ToolCallStatus) ToolCallStartOpt
- type ToolCallStatus
- type ToolCallUpdate
- type ToolCallUpdateOpt
- func WithUpdateContent(c []ToolCallContent) ToolCallUpdateOpt
- func WithUpdateKind(k ToolKind) ToolCallUpdateOpt
- func WithUpdateLocations(l []ToolCallLocation) ToolCallUpdateOpt
- func WithUpdateRawInput(v any) ToolCallUpdateOpt
- func WithUpdateRawOutput(v any) ToolCallUpdateOpt
- func WithUpdateStatus(s ToolCallStatus) ToolCallUpdateOpt
- func WithUpdateTitle(t string) ToolCallUpdateOpt
- type ToolKind
- type UnstableCancelRequestNotification
- type UnstableForkSessionRequest
- type UnstableForkSessionResponse
- type UnstableListSessionsRequest
- type UnstableListSessionsResponse
- type UnstableModelId
- type UnstableModelInfo
- type UnstableResumeSessionRequest
- type UnstableResumeSessionResponse
- type UnstableSessionInfo
- type UnstableSessionModelState
- type UnstableSetSessionModelRequest
- type UnstableSetSessionModelResponse
- type UnstructuredCommandInput
- type Usage
- type UsageUpdate
- type WaitForTerminalExitRequest
- type WaitForTerminalExitResponse
- type WriteTextFileRequest
- type WriteTextFileResponse
Examples ¶
Constants ¶
const ( AgentMethodAuthenticate = "authenticate" AgentMethodInitialize = "initialize" AgentMethodSessionCancel = "session/cancel" 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
const ( 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
const ProtocolVersionNumber = 1
ProtocolVersionNumber is the ACP protocol version supported by this SDK.
Variables ¶
This section is empty.
Functions ¶
func SendRequest ¶
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 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 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 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"`
// 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"`
// Prompt capabilities supported by the agent.
//
// Defaults to {"audio":false,"embeddedContext":false,"image":false} if unset.
PromptCapabilities PromptCapabilities `json:"promptCapabilities,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 AgentExperimental ¶
type AgentExperimental interface {
// **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 listing existing sessions.
//
// Only available if the Agent supports the 'listSessions' capability.
UnstableListSessions(ctx context.Context, params UnstableListSessionsRequest) (UnstableListSessionsResponse, error)
// **UNSTABLE**
//
// This capability is not part of the spec yet, and may be removed or changed at any point.
//
// 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 'session.resume' capability.
UnstableResumeSession(ctx context.Context, params UnstableResumeSessionRequest) (UnstableResumeSessionResponse, 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 (c *AgentSideConnection) CreateTerminal(ctx context.Context, params CreateTerminalRequest) (CreateTerminalResponse, error)
func (*AgentSideConnection) Done ¶
func (c *AgentSideConnection) Done() <-chan struct{}
Done exposes a channel that closes when the peer disconnects.
func (*AgentSideConnection) KillTerminalCommand ¶
func (c *AgentSideConnection) KillTerminalCommand(ctx context.Context, params KillTerminalCommandRequest) (KillTerminalCommandResponse, error)
func (*AgentSideConnection) NotifyExtension ¶ added in v0.10.8
NotifyExtension sends an ACP extension-method notification (method names starting with "_") from an agent to its client.
func (*AgentSideConnection) ReadTextFile ¶
func (c *AgentSideConnection) ReadTextFile(ctx context.Context, params ReadTextFileRequest) (ReadTextFileResponse, error)
func (*AgentSideConnection) ReleaseTerminal ¶
func (c *AgentSideConnection) ReleaseTerminal(ctx context.Context, params ReleaseTerminalRequest) (ReleaseTerminalResponse, error)
func (*AgentSideConnection) RequestPermission ¶
func (c *AgentSideConnection) RequestPermission(ctx context.Context, params RequestPermissionRequest) (RequestPermissionResponse, error)
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 (c *AgentSideConnection) TerminalOutput(ctx context.Context, params TerminalOutputRequest) (TerminalOutputResponse, error)
func (*AgentSideConnection) WaitForTerminalExit ¶
func (c *AgentSideConnection) WaitForTerminalExit(ctx context.Context, params WaitForTerminalExitRequest) (WaitForTerminalExitResponse, error)
func (*AgentSideConnection) WriteTextFile ¶
func (c *AgentSideConnection) WriteTextFile(ctx context.Context, params WriteTextFileRequest) (WriteTextFileResponse, error)
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 AuthMethod ¶
type AuthMethod 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"`
}
Describes an available authentication method.
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 command without releasing the terminal.
KillTerminalCommand(ctx context.Context, params KillTerminalCommandRequest) (KillTerminalCommandResponse, 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"`
// File system capabilities supported by the client.
// Determines which file operations the agent can request.
//
// Defaults to {"readTextFile":false,"writeTextFile":false} if unset.
Fs FileSystemCapability `json:"fs,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 ClientExperimental ¶
type ClientExperimental interface{}
ClientExperimental defines unstable methods that are not part of the official spec. These may change or be removed without notice.
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 (c *ClientSideConnection) Authenticate(ctx context.Context, params AuthenticateRequest) (AuthenticateResponse, error)
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 (c *ClientSideConnection) Cancel(ctx context.Context, params CancelNotification) error
func (*ClientSideConnection) Done ¶
func (c *ClientSideConnection) Done() <-chan struct{}
Done exposes a channel that closes when the peer disconnects.
func (*ClientSideConnection) Initialize ¶
func (c *ClientSideConnection) Initialize(ctx context.Context, params InitializeRequest) (InitializeResponse, error)
func (*ClientSideConnection) LoadSession ¶
func (c *ClientSideConnection) LoadSession(ctx context.Context, params LoadSessionRequest) (LoadSessionResponse, error)
func (*ClientSideConnection) NewSession ¶
func (c *ClientSideConnection) NewSession(ctx context.Context, params NewSessionRequest) (NewSessionResponse, error)
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 (c *ClientSideConnection) Prompt(ctx context.Context, params PromptRequest) (PromptResponse, error)
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 (c *ClientSideConnection) SetSessionConfigOption(ctx context.Context, params SetSessionConfigOptionRequest) (SetSessionConfigOptionResponse, error)
func (*ClientSideConnection) SetSessionMode ¶
func (c *ClientSideConnection) SetSessionMode(ctx context.Context, params SetSessionModeRequest) (SetSessionModeResponse, error)
func (*ClientSideConnection) UnstableForkSession ¶ added in v0.10.8
func (c *ClientSideConnection) UnstableForkSession(ctx context.Context, params UnstableForkSessionRequest) (UnstableForkSessionResponse, error)
func (*ClientSideConnection) UnstableListSessions ¶ added in v0.10.8
func (c *ClientSideConnection) UnstableListSessions(ctx context.Context, params UnstableListSessionsRequest) (UnstableListSessionsResponse, error)
func (*ClientSideConnection) UnstableResumeSession ¶ added in v0.10.8
func (c *ClientSideConnection) UnstableResumeSession(ctx context.Context, params UnstableResumeSessionRequest) (UnstableResumeSessionResponse, error)
func (*ClientSideConnection) UnstableSetSessionModel ¶ added in v0.10.8
func (c *ClientSideConnection) UnstableSetSessionModel(ctx context.Context, params UnstableSetSessionModelRequest) (UnstableSetSessionModelResponse, 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 (*Connection) SendRequestNoResult ¶
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 ¶
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"`
}
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 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 (*ErrorCode) UnmarshalJSON ¶ added in v0.10.8
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 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 FileSystemCapability ¶
type FileSystemCapability 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"`
}
Filesystem capabilities supported by the client. File system capabilities that a client may support.
See protocol docs: [FileSystem](https://agentclientprotocol.com/protocol/initialization#filesystem)
func (FileSystemCapability) MarshalJSON ¶
func (v FileSystemCapability) MarshalJSON() ([]byte, error)
func (*FileSystemCapability) UnmarshalJSON ¶
func (v *FileSystemCapability) 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 {"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 {"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 KillTerminalCommandRequest ¶
type KillTerminalCommandRequest 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 command without releasing the terminal.
func (*KillTerminalCommandRequest) Validate ¶
func (v *KillTerminalCommandRequest) Validate() error
type KillTerminalCommandResponse ¶
type KillTerminalCommandResponse 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 command method
func (*KillTerminalCommandResponse) Validate ¶
func (v *KillTerminalCommandResponse) 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"`
// 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 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 (*McpServer) UnmarshalJSON ¶
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 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"`
// 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 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 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"`
// 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"`
}
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 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 (*RequestId) UnmarshalJSON ¶ added in v0.10.8
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() 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 ¶
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 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 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 'session/fork'.
Fork *SessionForkCapabilities `json:"fork,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/list'.
List *SessionListCapabilities `json:"list,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/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 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:"-"`
}
func NewSessionConfigOptionSelect ¶ added in v0.10.8
func NewSessionConfigOptionSelect() 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 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 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.
Further capabilities can be added in the future for other means of filtering or searching the list.
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 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"`
}
**UNSTABLE**
This capability is not part of the spec yet, and may be removed or changed at any point.
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"`
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"`
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"`
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 SetSessionConfigOptionRequest ¶ added in v0.10.8
type SetSessionConfigOptionRequest 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 ID of the configuration option value to set.
Value SessionConfigValueId `json:"value"`
}
Request parameters for setting a session configuration option.
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 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 ¶
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 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 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 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
func (v *UnstableCancelRequestNotification) Validate() 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"`
// 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 []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 *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 UnstableListSessionsRequest ¶ added in v0.10.8
type UnstableListSessionsRequest 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 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"`
}
**UNSTABLE**
This capability is not part of the spec yet, and may be removed or changed at any point.
Request parameters for listing existing sessions.
Only available if the Agent supports the 'listSessions' capability.
func (*UnstableListSessionsRequest) Validate ¶ added in v0.10.8
func (v *UnstableListSessionsRequest) Validate() error
type UnstableListSessionsResponse ¶ added in v0.10.8
type UnstableListSessionsResponse 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 []UnstableSessionInfo `json:"sessions"`
}
**UNSTABLE**
This capability is not part of the spec yet, and may be removed or changed at any point.
Response from listing sessions.
func (*UnstableListSessionsResponse) Validate ¶ added in v0.10.8
func (v *UnstableListSessionsResponse) 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 UnstableResumeSessionRequest ¶ added in v0.10.8
type UnstableResumeSessionRequest 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 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"`
}
**UNSTABLE**
This capability is not part of the spec yet, and may be removed or changed at any point.
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 'session.resume' capability.
func (*UnstableResumeSessionRequest) Validate ¶ added in v0.10.8
func (v *UnstableResumeSessionRequest) Validate() error
type UnstableResumeSessionResponse ¶ added in v0.10.8
type UnstableResumeSessionResponse 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 *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"`
}
**UNSTABLE**
This capability is not part of the spec yet, and may be removed or changed at any point.
Response from resuming an existing session.
func (*UnstableResumeSessionResponse) Validate ¶ added in v0.10.8
func (v *UnstableResumeSessionResponse) Validate() error
type UnstableSessionInfo ¶ added in v0.10.8
type UnstableSessionInfo 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 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"`
}
**UNSTABLE**
This capability is not part of the spec yet, and may be removed or changed at any point.
Information about a session returned by session/list
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 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 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