Documentation
¶
Index ¶
- Constants
- Variables
- func ContextWithPeerInfo(ctx context.Context, peer PeerInfo, err error) context.Context
- func RunHostedProxy(ctx context.Context, client HostedProxyClient, opts HostedProxyOptions) error
- type CallExecutor
- func (e *CallExecutor) CallTool(ctx context.Context, source toolspkg.SourceRef, ...) (toolspkg.ToolResult, error)
- func (e *CallExecutor) ListTools(ctx context.Context, source toolspkg.SourceRef) ([]toolspkg.MCPToolDescriptor, error)
- func (e *CallExecutor) Status(ctx context.Context, source toolspkg.SourceRef) (toolspkg.MCPAuthStatus, error)
- type CallExecutorOption
- func WithHTTPClient(client *http.Client) CallExecutorOption
- func WithSecretLookup(lookup func(string) string) CallExecutorOption
- func WithSecretResolver(resolver secretRefResolver) CallExecutorOption
- func WithTimeout(timeout time.Duration) CallExecutorOption
- func WithTokenStore(store mcpauth.TokenStore) CallExecutorOption
- type HostedBindRequest
- type HostedBindResponse
- type HostedCallRequest
- type HostedCallResponse
- type HostedConfig
- type HostedLaunchRequest
- type HostedProjectionHandler
- type HostedProjectionResponse
- type HostedProxyClient
- type HostedProxyOptions
- type HostedRegistry
- type HostedReleaseRequest
- type HostedService
- func (s *HostedService) Bind(ctx context.Context, req HostedBindRequest, peer PeerInfo) (HostedBindResponse, error)
- func (s *HostedService) Call(ctx context.Context, req HostedCallRequest, peer PeerInfo) (HostedCallResponse, error)
- func (s *HostedService) CancelLaunch(sessionID string)
- func (s *HostedService) Launch(ctx context.Context, req HostedLaunchRequest) (aghconfig.MCPServer, error)
- func (s *HostedService) Projection(ctx context.Context, bindID string, peer PeerInfo) (HostedProjectionResponse, error)
- func (s *HostedService) ReleaseBind(bindID string)
- func (s *HostedService) ReleaseBindForPeer(ctx context.Context, bindID string, peer PeerInfo) error
- func (s *HostedService) ReleaseSession(sessionID string)
- type PeerInfo
- type ServerResolver
- type ServerResolverFunc
Constants ¶
const (
// HostedServerName is the single stdio MCP server name injected into ACP sessions.
HostedServerName = "agh-hosted-tools"
)
Variables ¶
var ( ErrHostedDisabled = errors.New("mcp: hosted MCP is disabled") ErrHostedSessionRequired = errors.New("mcp: hosted MCP session id is required") ErrHostedNonceRequired = errors.New("mcp: hosted MCP bind nonce is required") ErrHostedNonceInvalid = errors.New("mcp: hosted MCP bind nonce is invalid") ErrHostedNonceExpired = errors.New("mcp: hosted MCP bind nonce expired") ErrHostedBindRequired = errors.New("mcp: hosted MCP bind id is required") ErrHostedBindNotFound = errors.New("mcp: hosted MCP bind not found") ErrHostedPeerInvalid = errors.New("mcp: hosted MCP peer validation failed") ErrHostedBinaryInvalid = errors.New("mcp: hosted MCP binary validation failed") ErrHostedRegistryRequired = errors.New("mcp: hosted MCP registry is required") ErrHostedProjectionChanged = errors.New("mcp: hosted MCP projection changed") )
var ErrPeerCredentialsUnsupported = errors.New("mcp: peer credential validation is unsupported")
Functions ¶
func ContextWithPeerInfo ¶
ContextWithPeerInfo annotates an accepted UDS connection context.
func RunHostedProxy ¶
func RunHostedProxy(ctx context.Context, client HostedProxyClient, opts HostedProxyOptions) error
RunHostedProxy binds to the daemon and serves hosted AGH tools over MCP stdio.
Types ¶
type CallExecutor ¶
type CallExecutor struct {
// contains filtered or unexported fields
}
CallExecutor lists and calls configured MCP servers through mcp-go clients.
func NewMCPCallExecutor ¶
func NewMCPCallExecutor( servers ServerResolver, opts ...CallExecutorOption, ) (*CallExecutor, error)
NewMCPCallExecutor constructs the daemon-owned MCP executor.
func (*CallExecutor) CallTool ¶
func (e *CallExecutor) CallTool( ctx context.Context, source toolspkg.SourceRef, req toolspkg.MCPToolCallRequest, ) (toolspkg.ToolResult, error)
CallTool invokes one configured MCP tool.
func (*CallExecutor) ListTools ¶
func (e *CallExecutor) ListTools( ctx context.Context, source toolspkg.SourceRef, ) ([]toolspkg.MCPToolDescriptor, error)
ListTools discovers tools from one configured MCP server.
func (*CallExecutor) Status ¶
func (e *CallExecutor) Status( ctx context.Context, source toolspkg.SourceRef, ) (toolspkg.MCPAuthStatus, error)
Status returns token-redacted auth diagnostics for registry availability.
type CallExecutorOption ¶
type CallExecutorOption func(*CallExecutor)
CallExecutorOption configures the daemon-owned MCP executor.
func WithHTTPClient ¶
func WithHTTPClient(client *http.Client) CallExecutorOption
WithHTTPClient configures remote MCP and auth HTTP calls with an explicit client.
func WithSecretLookup ¶
func WithSecretLookup(lookup func(string) string) CallExecutorOption
WithSecretLookup resolves auth client secret environment-variable names.
func WithSecretResolver ¶
func WithSecretResolver(resolver secretRefResolver) CallExecutorOption
WithSecretResolver resolves env: and vault: refs for MCP auth and stdio secret_env launch bindings.
func WithTimeout ¶
func WithTimeout(timeout time.Duration) CallExecutorOption
WithTimeout configures the default bounded call timeout when a caller has no deadline.
func WithTokenStore ¶
func WithTokenStore(store mcpauth.TokenStore) CallExecutorOption
WithTokenStore allows remote MCP authorization headers to be injected inside internal/mcp.
type HostedBindRequest ¶
type HostedBindRequest struct {
SessionID string `json:"session_id"`
Nonce string `json:"bind_nonce"`
}
HostedBindRequest is sent by the stdio proxy immediately after ACP starts it.
type HostedBindResponse ¶
type HostedBindResponse struct {
BindID string `json:"bind_id"`
Scope tools.Scope `json:"scope"`
Tools []tools.ToolView `json:"tools"`
Digest string `json:"digest"`
}
HostedBindResponse proves a hosted proxy has bound to one launch record.
type HostedCallRequest ¶
type HostedCallRequest struct {
BindID string `json:"bind_id"`
ToolName string `json:"tool_name"`
ToolCallID string `json:"tool_call_id,omitempty"`
CorrelationID string `json:"correlation_id,omitempty"`
Input json.RawMessage `json:"input,omitempty"`
}
HostedCallRequest invokes one hosted MCP tool through the registry.
type HostedCallResponse ¶
type HostedCallResponse struct {
Result tools.ToolResult `json:"result"`
}
HostedCallResponse carries the canonical registry result envelope.
type HostedConfig ¶
type HostedConfig struct {
Enabled bool
BindNonceTTL time.Duration
ExpectedBinary string
HomePaths aghconfig.HomePaths
Registry HostedRegistry
Logger *slog.Logger
Now func() time.Time
NonceReader func([]byte) error
}
HostedConfig configures hosted MCP launch and bind validation.
type HostedLaunchRequest ¶
HostedLaunchRequest describes one session-bound MCP launch.
type HostedProjectionHandler ¶
type HostedProjectionHandler func(HostedProjectionResponse) error
HostedProjectionHandler receives projection snapshots from the daemon stream.
type HostedProjectionResponse ¶
type HostedProjectionResponse struct {
Tools []tools.ToolView `json:"tools"`
Digest string `json:"digest"`
}
HostedProjectionResponse is a full session-callable projection snapshot.
type HostedProxyClient ¶
type HostedProxyClient interface {
BindHostedMCP(ctx context.Context, req HostedBindRequest) (HostedBindResponse, error)
HostedMCPProjection(ctx context.Context, bindID string) (HostedProjectionResponse, error)
StreamHostedMCPProjection(
ctx context.Context,
bindID string,
lastDigest string,
handler HostedProjectionHandler,
) error
CallHostedMCP(ctx context.Context, req HostedCallRequest) (HostedCallResponse, error)
ReleaseHostedMCP(ctx context.Context, req HostedReleaseRequest) error
}
HostedProxyClient is the UDS client surface consumed by the hosted stdio proxy.
type HostedProxyOptions ¶
type HostedProxyOptions struct {
SessionID string
Nonce string
Stdin io.Reader
Stdout io.Writer
Stderr io.Writer
Version string
}
HostedProxyOptions configures one `agh tool mcp` stdio proxy process.
type HostedRegistry ¶
HostedRegistry resolves the daemon-owned tool registry at call time.
type HostedReleaseRequest ¶
type HostedReleaseRequest struct {
BindID string `json:"bind_id"`
}
HostedReleaseRequest releases one active bind record.
type HostedService ¶
type HostedService struct {
// contains filtered or unexported fields
}
HostedService owns session-scoped hosted MCP launch and bind lifecycle.
func NewHostedService ¶
func NewHostedService(cfg HostedConfig) (*HostedService, error)
NewHostedService builds a hosted MCP lifecycle service.
func (*HostedService) Bind ¶
func (s *HostedService) Bind(ctx context.Context, req HostedBindRequest, peer PeerInfo) (HostedBindResponse, error)
Bind consumes a launch nonce after validating the Unix peer and expected binary.
func (*HostedService) Call ¶
func (s *HostedService) Call(ctx context.Context, req HostedCallRequest, peer PeerInfo) (HostedCallResponse, error)
Call routes a hosted MCP tool call through the registry dispatch pipeline.
func (*HostedService) CancelLaunch ¶
func (s *HostedService) CancelLaunch(sessionID string)
CancelLaunch removes an unbound launch record for a failed session start.
func (*HostedService) Launch ¶
func (s *HostedService) Launch(ctx context.Context, req HostedLaunchRequest) (aghconfig.MCPServer, error)
Launch mints a session-bound, single-use hosted MCP launch record.
func (*HostedService) Projection ¶
func (s *HostedService) Projection( ctx context.Context, bindID string, peer PeerInfo, ) (HostedProjectionResponse, error)
Projection returns the current session-callable tool projection for one bind.
func (*HostedService) ReleaseBind ¶
func (s *HostedService) ReleaseBind(bindID string)
ReleaseBind removes one active bind record.
func (*HostedService) ReleaseBindForPeer ¶
ReleaseBindForPeer removes a bind only after validating the requesting peer still owns it.
func (*HostedService) ReleaseSession ¶
func (s *HostedService) ReleaseSession(sessionID string)
ReleaseSession removes all hosted state for a stopped session.
type PeerInfo ¶
type PeerInfo struct {
PID int `json:"pid"`
UID int `json:"uid"`
GID int `json:"gid"`
ExecutablePath string `json:"executable_path"`
Supported bool `json:"supported"`
}
PeerInfo is the UDS peer identity captured from the accepted socket.
func PeerInfoFromConn ¶
PeerInfoFromConn returns OS peer credentials and executable identity for an accepted UDS connection.
type ServerResolver ¶
type ServerResolver interface {
ResolveMCPServers(ctx context.Context) ([]aghconfig.MCPServer, error)
}
ServerResolver returns the current daemon-visible MCP server configuration.
type ServerResolverFunc ¶
ServerResolverFunc adapts a function into a server resolver.
func (ServerResolverFunc) ResolveMCPServers ¶
ResolveMCPServers returns the configured MCP servers.