pluginv1

package
v0.2.0 Latest Latest
Warning

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

Go to latest
Published: Aug 5, 2026 License: Apache-2.0 Imports: 10 Imported by: 0

Documentation

Index

Constants

View Source
const (
	PluginService_Handshake_FullMethodName     = "/plugin.v1.PluginService/Handshake"
	PluginService_ExecuteAction_FullMethodName = "/plugin.v1.PluginService/ExecuteAction"
	PluginService_TestConnector_FullMethodName = "/plugin.v1.PluginService/TestConnector"
)

Variables

View Source
var File_plugin_v1_plugin_proto protoreflect.FileDescriptor
View Source
var PluginService_ServiceDesc = grpc.ServiceDesc{
	ServiceName: "plugin.v1.PluginService",
	HandlerType: (*PluginServiceServer)(nil),
	Methods: []grpc.MethodDesc{
		{
			MethodName: "Handshake",
			Handler:    _PluginService_Handshake_Handler,
		},
		{
			MethodName: "ExecuteAction",
			Handler:    _PluginService_ExecuteAction_Handler,
		},
		{
			MethodName: "TestConnector",
			Handler:    _PluginService_TestConnector_Handler,
		},
	},
	Streams:  []grpc.StreamDesc{},
	Metadata: "plugin/v1/plugin.proto",
}

PluginService_ServiceDesc is the grpc.ServiceDesc for PluginService service. It's only intended for direct use with grpc.RegisterService, and not to be introspected or modified (even as a copy)

Functions

func RegisterPluginServiceServer

func RegisterPluginServiceServer(s grpc.ServiceRegistrar, srv PluginServiceServer)

Types

type ActionDescriptor added in v0.2.0

type ActionDescriptor struct {

	// The action's stable, versioned identifier, e.g. "text.uppercase@1".
	Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
	// One human-readable sentence: what this action does.
	Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"`
	// JSON Schema describing the shape ExecuteActionRequest.input must
	// match.
	InputSchema *structpb.Struct `protobuf:"bytes,3,opt,name=input_schema,json=inputSchema,proto3" json:"input_schema,omitempty"`
	// JSON Schema describing the shape ExecuteActionResponse.output will
	// match.
	OutputSchema *structpb.Struct `protobuf:"bytes,4,opt,name=output_schema,json=outputSchema,proto3" json:"output_schema,omitempty"`
	// Default timeout for a call to this action, in seconds. Zero means the
	// agent's own default applies — an action does not have to declare one.
	DefaultTimeoutSeconds uint32 `` /* 127-byte string literal not displayed */
	// contains filtered or unexported fields
}

ActionDescriptor fully describes one action a plugin contributes, as specified by the vision document (section 7.4: identifier, inputs, outputs, default timeout) and closed by ADR-0062.

func (*ActionDescriptor) Descriptor deprecated added in v0.2.0

func (*ActionDescriptor) Descriptor() ([]byte, []int)

Deprecated: Use ActionDescriptor.ProtoReflect.Descriptor instead.

func (*ActionDescriptor) GetDefaultTimeoutSeconds added in v0.2.0

func (x *ActionDescriptor) GetDefaultTimeoutSeconds() uint32

func (*ActionDescriptor) GetDescription added in v0.2.0

func (x *ActionDescriptor) GetDescription() string

func (*ActionDescriptor) GetId added in v0.2.0

func (x *ActionDescriptor) GetId() string

func (*ActionDescriptor) GetInputSchema added in v0.2.0

func (x *ActionDescriptor) GetInputSchema() *structpb.Struct

func (*ActionDescriptor) GetOutputSchema added in v0.2.0

func (x *ActionDescriptor) GetOutputSchema() *structpb.Struct

func (*ActionDescriptor) ProtoMessage added in v0.2.0

func (*ActionDescriptor) ProtoMessage()

func (*ActionDescriptor) ProtoReflect added in v0.2.0

func (x *ActionDescriptor) ProtoReflect() protoreflect.Message

func (*ActionDescriptor) Reset added in v0.2.0

func (x *ActionDescriptor) Reset()

func (*ActionDescriptor) String added in v0.2.0

func (x *ActionDescriptor) String() string

type ConnectorConfig

type ConnectorConfig struct {
	Type    string           `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"`
	Config  *structpb.Struct `protobuf:"bytes,2,opt,name=config,proto3" json:"config,omitempty"`
	Secrets *structpb.Struct `protobuf:"bytes,3,opt,name=secrets,proto3" json:"secrets,omitempty"`
	// contains filtered or unexported fields
}

ConnectorConfig carries one connector's resolved configuration and secret values, ready for a plugin to use for the duration of one action call.

func (*ConnectorConfig) Descriptor deprecated

func (*ConnectorConfig) Descriptor() ([]byte, []int)

Deprecated: Use ConnectorConfig.ProtoReflect.Descriptor instead.

func (*ConnectorConfig) GetConfig

func (x *ConnectorConfig) GetConfig() *structpb.Struct

func (*ConnectorConfig) GetSecrets

func (x *ConnectorConfig) GetSecrets() *structpb.Struct

func (*ConnectorConfig) GetType

func (x *ConnectorConfig) GetType() string

func (*ConnectorConfig) ProtoMessage

func (*ConnectorConfig) ProtoMessage()

func (*ConnectorConfig) ProtoReflect

func (x *ConnectorConfig) ProtoReflect() protoreflect.Message

func (*ConnectorConfig) Reset

func (x *ConnectorConfig) Reset()

func (*ConnectorConfig) String

func (x *ConnectorConfig) String() string

type ConnectorDescriptor added in v0.2.0

type ConnectorDescriptor struct {

	// The connector type's stable, versioned identifier, e.g.
	// "postgresql.connection@1".
	Type string `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"`
	// One human-readable sentence: what system this connector reaches.
	Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"`
	// JSON Schema describing the shape of this connector's non-secret
	// configuration (ConnectorConfig.config). Never covers secret values —
	// those never appear in a schema meant to be shown or stored (ADR-0009).
	ConfigSchema *structpb.Struct `protobuf:"bytes,3,opt,name=config_schema,json=configSchema,proto3" json:"config_schema,omitempty"`
	// contains filtered or unexported fields
}

ConnectorDescriptor fully describes one connector type a plugin contributes, as specified by the vision document (section 7.3: compatibility with certain actions, which requires being able to describe a connector's configuration shape) and closed by ADR-0062.

func (*ConnectorDescriptor) Descriptor deprecated added in v0.2.0

func (*ConnectorDescriptor) Descriptor() ([]byte, []int)

Deprecated: Use ConnectorDescriptor.ProtoReflect.Descriptor instead.

func (*ConnectorDescriptor) GetConfigSchema added in v0.2.0

func (x *ConnectorDescriptor) GetConfigSchema() *structpb.Struct

func (*ConnectorDescriptor) GetDescription added in v0.2.0

func (x *ConnectorDescriptor) GetDescription() string

func (*ConnectorDescriptor) GetType added in v0.2.0

func (x *ConnectorDescriptor) GetType() string

func (*ConnectorDescriptor) ProtoMessage added in v0.2.0

func (*ConnectorDescriptor) ProtoMessage()

func (*ConnectorDescriptor) ProtoReflect added in v0.2.0

func (x *ConnectorDescriptor) ProtoReflect() protoreflect.Message

func (*ConnectorDescriptor) Reset added in v0.2.0

func (x *ConnectorDescriptor) Reset()

func (*ConnectorDescriptor) String added in v0.2.0

func (x *ConnectorDescriptor) String() string

type Contributions

type Contributions struct {
	Connectors []*ConnectorDescriptor `protobuf:"bytes,3,rep,name=connectors,proto3" json:"connectors,omitempty"`
	Actions    []*ActionDescriptor    `protobuf:"bytes,4,rep,name=actions,proto3" json:"actions,omitempty"`
	// contains filtered or unexported fields
}

Contributions lists what a plugin adds to the agent's registries once installed, as full descriptors rather than bare identifiers (ADR-0062) — each carries a human-readable description and a JSON Schema for its shape, so both a human and a coding agent can discover how to use it without reading the plugin's source.

Field numbers 1 and 2 carried plain identifier lists in protocol version 1 ("io.patchcord.example-text" et al. spoke it) and are reserved rather than reused for the differently-typed fields below: changing a field's wire type in place, instead of retiring its number, would make a v1 plugin's response silently decode as an empty v2 Contributions rather than fail the handshake with a clear error. The names "connectors" and "actions" are reused on the new field numbers deliberately — only the numbers need to stay unique. See HandshakeResponse.protocol_version and ADR-0062.

func (*Contributions) Descriptor deprecated

func (*Contributions) Descriptor() ([]byte, []int)

Deprecated: Use Contributions.ProtoReflect.Descriptor instead.

func (*Contributions) GetActions

func (x *Contributions) GetActions() []*ActionDescriptor

func (*Contributions) GetConnectors

func (x *Contributions) GetConnectors() []*ConnectorDescriptor

func (*Contributions) ProtoMessage

func (*Contributions) ProtoMessage()

func (*Contributions) ProtoReflect

func (x *Contributions) ProtoReflect() protoreflect.Message

func (*Contributions) Reset

func (x *Contributions) Reset()

func (*Contributions) String

func (x *Contributions) String() string

type ExecuteActionRequest

type ExecuteActionRequest struct {

	// The action identifier, e.g. "text.uppercase@1".
	Action string           `protobuf:"bytes,1,opt,name=action,proto3" json:"action,omitempty"`
	Input  *structpb.Struct `protobuf:"bytes,2,opt,name=input,proto3" json:"input,omitempty"`
	// The resolved configuration and secrets of the connector the calling
	// workflow step bound to this action, if any. Absent when the step bound
	// no connector. Never persisted by the agent — assembled fresh for this
	// one call.
	Connector *ConnectorConfig `protobuf:"bytes,3,opt,name=connector,proto3" json:"connector,omitempty"`
	// contains filtered or unexported fields
}

ExecuteActionRequest asks the plugin to run one action.

func (*ExecuteActionRequest) Descriptor deprecated

func (*ExecuteActionRequest) Descriptor() ([]byte, []int)

Deprecated: Use ExecuteActionRequest.ProtoReflect.Descriptor instead.

func (*ExecuteActionRequest) GetAction

func (x *ExecuteActionRequest) GetAction() string

func (*ExecuteActionRequest) GetConnector

func (x *ExecuteActionRequest) GetConnector() *ConnectorConfig

func (*ExecuteActionRequest) GetInput

func (x *ExecuteActionRequest) GetInput() *structpb.Struct

func (*ExecuteActionRequest) ProtoMessage

func (*ExecuteActionRequest) ProtoMessage()

func (*ExecuteActionRequest) ProtoReflect

func (x *ExecuteActionRequest) ProtoReflect() protoreflect.Message

func (*ExecuteActionRequest) Reset

func (x *ExecuteActionRequest) Reset()

func (*ExecuteActionRequest) String

func (x *ExecuteActionRequest) String() string

type ExecuteActionResponse

type ExecuteActionResponse struct {
	Output *structpb.Struct `protobuf:"bytes,1,opt,name=output,proto3" json:"output,omitempty"`
	// contains filtered or unexported fields
}

ExecuteActionResponse carries the action's output.

func (*ExecuteActionResponse) Descriptor deprecated

func (*ExecuteActionResponse) Descriptor() ([]byte, []int)

Deprecated: Use ExecuteActionResponse.ProtoReflect.Descriptor instead.

func (*ExecuteActionResponse) GetOutput

func (x *ExecuteActionResponse) GetOutput() *structpb.Struct

func (*ExecuteActionResponse) ProtoMessage

func (*ExecuteActionResponse) ProtoMessage()

func (*ExecuteActionResponse) ProtoReflect

func (x *ExecuteActionResponse) ProtoReflect() protoreflect.Message

func (*ExecuteActionResponse) Reset

func (x *ExecuteActionResponse) Reset()

func (*ExecuteActionResponse) String

func (x *ExecuteActionResponse) String() string

type HandshakeRequest

type HandshakeRequest struct {

	// Highest plugin protocol version the calling agent supports.
	ProtocolVersion uint32 `protobuf:"varint,1,opt,name=protocol_version,json=protocolVersion,proto3" json:"protocol_version,omitempty"`
	// contains filtered or unexported fields
}

HandshakeRequest is sent once, immediately after the agent connects to a freshly launched plugin process.

func (*HandshakeRequest) Descriptor deprecated

func (*HandshakeRequest) Descriptor() ([]byte, []int)

Deprecated: Use HandshakeRequest.ProtoReflect.Descriptor instead.

func (*HandshakeRequest) GetProtocolVersion

func (x *HandshakeRequest) GetProtocolVersion() uint32

func (*HandshakeRequest) ProtoMessage

func (*HandshakeRequest) ProtoMessage()

func (*HandshakeRequest) ProtoReflect

func (x *HandshakeRequest) ProtoReflect() protoreflect.Message

func (*HandshakeRequest) Reset

func (x *HandshakeRequest) Reset()

func (*HandshakeRequest) String

func (x *HandshakeRequest) String() string

type HandshakeResponse

type HandshakeResponse struct {

	// Protocol version the plugin will speak for the rest of this session.
	// Must not exceed HandshakeRequest.protocol_version; the agent rejects the
	// plugin if it does.
	ProtocolVersion uint32         `protobuf:"varint,1,opt,name=protocol_version,json=protocolVersion,proto3" json:"protocol_version,omitempty"`
	PluginId        string         `protobuf:"bytes,2,opt,name=plugin_id,json=pluginId,proto3" json:"plugin_id,omitempty"`
	PluginVersion   string         `protobuf:"bytes,3,opt,name=plugin_version,json=pluginVersion,proto3" json:"plugin_version,omitempty"`
	Contributes     *Contributions `protobuf:"bytes,4,opt,name=contributes,proto3" json:"contributes,omitempty"`
	Permissions     []string       `protobuf:"bytes,5,rep,name=permissions,proto3" json:"permissions,omitempty"`
	// contains filtered or unexported fields
}

HandshakeResponse carries the plugin's manifest, as introduced in the vision document (section 8.3).

func (*HandshakeResponse) Descriptor deprecated

func (*HandshakeResponse) Descriptor() ([]byte, []int)

Deprecated: Use HandshakeResponse.ProtoReflect.Descriptor instead.

func (*HandshakeResponse) GetContributes

func (x *HandshakeResponse) GetContributes() *Contributions

func (*HandshakeResponse) GetPermissions

func (x *HandshakeResponse) GetPermissions() []string

func (*HandshakeResponse) GetPluginId

func (x *HandshakeResponse) GetPluginId() string

func (*HandshakeResponse) GetPluginVersion

func (x *HandshakeResponse) GetPluginVersion() string

func (*HandshakeResponse) GetProtocolVersion

func (x *HandshakeResponse) GetProtocolVersion() uint32

func (*HandshakeResponse) ProtoMessage

func (*HandshakeResponse) ProtoMessage()

func (*HandshakeResponse) ProtoReflect

func (x *HandshakeResponse) ProtoReflect() protoreflect.Message

func (*HandshakeResponse) Reset

func (x *HandshakeResponse) Reset()

func (*HandshakeResponse) String

func (x *HandshakeResponse) String() string

type PluginServiceClient

type PluginServiceClient interface {
	// Handshake negotiates the protocol version and returns the plugin's
	// manifest: its identity, version, and the connectors/actions it
	// contributes to the agent.
	Handshake(ctx context.Context, in *HandshakeRequest, opts ...grpc.CallOption) (*HandshakeResponse, error)
	// ExecuteAction runs one of the plugin's contributed actions and returns
	// its output. The agent only calls this for actions listed in the
	// manifest's Contributions returned by Handshake.
	ExecuteAction(ctx context.Context, in *ExecuteActionRequest, opts ...grpc.CallOption) (*ExecuteActionResponse, error)
	// TestConnector attempts to use a connector's resolved configuration and
	// secrets to reach the external system it describes, without running any
	// action. A plugin that does not support connector testing returns
	// UNIMPLEMENTED; the agent surfaces that as "this plugin does not support
	// connection testing", distinct from a test that ran and failed (Ok =
	// false). The agent only calls this for a connector whose type is listed
	// in the manifest's Contributions returned by Handshake.
	TestConnector(ctx context.Context, in *TestConnectorRequest, opts ...grpc.CallOption) (*TestConnectorResponse, error)
}

PluginServiceClient is the client API for PluginService service.

For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream.

PluginService is implemented by every Patchcord plugin process. The agent dials it right after launching the plugin and must complete the handshake before using any of its contributions.

type PluginServiceServer

type PluginServiceServer interface {
	// Handshake negotiates the protocol version and returns the plugin's
	// manifest: its identity, version, and the connectors/actions it
	// contributes to the agent.
	Handshake(context.Context, *HandshakeRequest) (*HandshakeResponse, error)
	// ExecuteAction runs one of the plugin's contributed actions and returns
	// its output. The agent only calls this for actions listed in the
	// manifest's Contributions returned by Handshake.
	ExecuteAction(context.Context, *ExecuteActionRequest) (*ExecuteActionResponse, error)
	// TestConnector attempts to use a connector's resolved configuration and
	// secrets to reach the external system it describes, without running any
	// action. A plugin that does not support connector testing returns
	// UNIMPLEMENTED; the agent surfaces that as "this plugin does not support
	// connection testing", distinct from a test that ran and failed (Ok =
	// false). The agent only calls this for a connector whose type is listed
	// in the manifest's Contributions returned by Handshake.
	TestConnector(context.Context, *TestConnectorRequest) (*TestConnectorResponse, error)
	// contains filtered or unexported methods
}

PluginServiceServer is the server API for PluginService service. All implementations must embed UnimplementedPluginServiceServer for forward compatibility.

PluginService is implemented by every Patchcord plugin process. The agent dials it right after launching the plugin and must complete the handshake before using any of its contributions.

type TestConnectorRequest

type TestConnectorRequest struct {
	Connector *ConnectorConfig `protobuf:"bytes,1,opt,name=connector,proto3" json:"connector,omitempty"`
	// contains filtered or unexported fields
}

TestConnectorRequest asks the plugin to attempt a connection using one connector's resolved configuration and secrets.

func (*TestConnectorRequest) Descriptor deprecated

func (*TestConnectorRequest) Descriptor() ([]byte, []int)

Deprecated: Use TestConnectorRequest.ProtoReflect.Descriptor instead.

func (*TestConnectorRequest) GetConnector

func (x *TestConnectorRequest) GetConnector() *ConnectorConfig

func (*TestConnectorRequest) ProtoMessage

func (*TestConnectorRequest) ProtoMessage()

func (*TestConnectorRequest) ProtoReflect

func (x *TestConnectorRequest) ProtoReflect() protoreflect.Message

func (*TestConnectorRequest) Reset

func (x *TestConnectorRequest) Reset()

func (*TestConnectorRequest) String

func (x *TestConnectorRequest) String() string

type TestConnectorResponse

type TestConnectorResponse struct {
	Ok bool `protobuf:"varint,1,opt,name=ok,proto3" json:"ok,omitempty"`
	// Human-readable detail: the error message on failure, or empty/a short
	// confirmation on success.
	Message string `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"`
	// contains filtered or unexported fields
}

TestConnectorResponse reports the outcome of a connector test. A failed attempt (Ok = false) is a legitimate result, not an RPC error — the same distinction ExecuteActionResponse's callers already make between a business-level failure and a transport-level one.

func (*TestConnectorResponse) Descriptor deprecated

func (*TestConnectorResponse) Descriptor() ([]byte, []int)

Deprecated: Use TestConnectorResponse.ProtoReflect.Descriptor instead.

func (*TestConnectorResponse) GetMessage

func (x *TestConnectorResponse) GetMessage() string

func (*TestConnectorResponse) GetOk

func (x *TestConnectorResponse) GetOk() bool

func (*TestConnectorResponse) ProtoMessage

func (*TestConnectorResponse) ProtoMessage()

func (*TestConnectorResponse) ProtoReflect

func (x *TestConnectorResponse) ProtoReflect() protoreflect.Message

func (*TestConnectorResponse) Reset

func (x *TestConnectorResponse) Reset()

func (*TestConnectorResponse) String

func (x *TestConnectorResponse) String() string

type UnimplementedPluginServiceServer

type UnimplementedPluginServiceServer struct{}

UnimplementedPluginServiceServer must be embedded to have forward compatible implementations.

NOTE: this should be embedded by value instead of pointer to avoid a nil pointer dereference when methods are called.

func (UnimplementedPluginServiceServer) ExecuteAction

func (UnimplementedPluginServiceServer) Handshake

func (UnimplementedPluginServiceServer) TestConnector

type UnsafePluginServiceServer

type UnsafePluginServiceServer interface {
	// contains filtered or unexported methods
}

UnsafePluginServiceServer may be embedded to opt out of forward compatibility for this service. Use of this interface is not recommended, as added methods to PluginServiceServer will result in compilation errors.

Jump to

Keyboard shortcuts

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