///|
/// The endpoint direction of a stable ACP v1 JSON-RPC method.
pub(all) enum AcpV1MethodDirection {
ClientToAgent
AgentToClient
Bidirectional
} derive(Eq, Debug)
///|
/// Whether a stable ACP v1 method expects a response.
pub(all) enum AcpV1MethodKind {
Request
Notification
} derive(Eq, Debug)
///|
/// One entry in the stable ACP v1 method manifest.
///
/// `method_name` is the exact JSON-RPC wire name. The direction and kind are
/// protocol facts, not runtime capability decisions; capability gates are
/// applied by the endpoint layer after method lookup.
pub(all) struct AcpV1Method {
method_name : String
direction : AcpV1MethodDirection
kind : AcpV1MethodKind
} derive(Eq, Debug)
///|
/// Return a fresh, exact manifest for the stable ACP v1 method surface.
///
/// A fresh array on every call keeps the public value free of shared mutable
/// state. This list follows the fixed v1 table in the implementation plan;
/// v2 and unstable overlays are deliberately absent.
pub fn acp_v1_method_manifest() -> Array[AcpV1Method] {
[
// Client -> Agent requests.
{ method_name: "initialize", direction: ClientToAgent, kind: Request },
{ method_name: "authenticate", direction: ClientToAgent, kind: Request },
{ method_name: "logout", direction: ClientToAgent, kind: Request },
{ method_name: "session/new", direction: ClientToAgent, kind: Request },
{ method_name: "session/load", direction: ClientToAgent, kind: Request },
{ method_name: "session/resume", direction: ClientToAgent, kind: Request },
{ method_name: "session/list", direction: ClientToAgent, kind: Request },
{ method_name: "session/delete", direction: ClientToAgent, kind: Request },
{ method_name: "session/close", direction: ClientToAgent, kind: Request },
{ method_name: "session/set_mode", direction: ClientToAgent, kind: Request },
{
method_name: "session/set_config_option",
direction: ClientToAgent,
kind: Request,
},
{ method_name: "session/prompt", direction: ClientToAgent, kind: Request },
// Client -> Agent notification.
{
method_name: "session/cancel",
direction: ClientToAgent,
kind: Notification,
},
// Agent -> Client requests.
{
method_name: "session/request_permission",
direction: AgentToClient,
kind: Request,
},
{
method_name: "fs/read_text_file",
direction: AgentToClient,
kind: Request,
},
{
method_name: "fs/write_text_file",
direction: AgentToClient,
kind: Request,
},
{ method_name: "terminal/create", direction: AgentToClient, kind: Request },
{ method_name: "terminal/output", direction: AgentToClient, kind: Request },
{
method_name: "terminal/wait_for_exit",
direction: AgentToClient,
kind: Request,
},
{ method_name: "terminal/kill", direction: AgentToClient, kind: Request },
{ method_name: "terminal/release", direction: AgentToClient, kind: Request },
{
method_name: "elicitation/create",
direction: AgentToClient,
kind: Request,
},
// Agent -> Client notifications.
{
method_name: "session/update",
direction: AgentToClient,
kind: Notification,
},
{
method_name: "elicitation/complete",
direction: AgentToClient,
kind: Notification,
},
// This protocol notification can be sent by either endpoint.
{
method_name: "$/cancel_request",
direction: Bidirectional,
kind: Notification,
},
]
}