Plugin gRPC API

gRPC interface for external QNTX domain plugins.

Proto file: plugin/grpc/protocol/domain.proto

Service Methods

MethodRequestResponseStreaming
MetadataEmptyMetadataResponseNo
InitializeInitializeRequestInitializeResponseNo
ShutdownEmptyEmptyNo
HandleHTTPHTTPRequestHTTPResponseNo
HandleWebSocketWebSocketMessageWebSocketMessageBidirectional
HealthEmptyHealthResponseNo
ConfigSchemaEmptyConfigSchemaResponseNo
RegisterGlyphsEmptyGlyphDefResponseNo
ExecuteJobExecuteJobRequestExecuteJobResponseNo

Metadata

Metadata returns plugin metadata


Initialize

Initialize initializes the plugin


Shutdown

Shutdown shuts down the plugin


HandleHTTP

HandleHTTP handles an HTTP request


HandleWebSocket

HandleWebSocket handles a WebSocket connection (bidirectional streaming)


Health

Health checks plugin health


ConfigSchema

ConfigSchema returns the configuration schema for this plugin


RegisterGlyphs

RegisterGlyphs returns custom glyph type definitions provided by this plugin


ExecuteJob

ExecuteJob executes an async job Used by Pulse to route jobs to plugin-registered handlers


Message Types

MetadataResponse

FieldTypeDescription
namestring-
versionstring-
qntx_versionstring-
descriptionstring-
authorstring-
licensestring-

InitializeRequest

FieldTypeDescription
ats_store_endpointstringService endpoints the plugin can call back to QNTX core Format: "host:port" for TCP (e.g., "localhost:50051") Note: Database access is not provided - database is a hard boundary. Plugins should use attestations via ats_store_endpoint instead. ats_store_endpoint: gRPC endpoint for ATSStoreService Provides: Attestation creation, querying, and management
queue_endpointstringqueue_endpoint: gRPC endpoint for QueueService Provides: Async job enqueue, status, and management
auth_tokenstringauth_token: Simple token for authenticating with service endpoints Plugins must include this token in all service RPC calls
configmap<string, string>Plugin-specific configuration values Simple types (string, int, bool) passed as string representations Complex types (maps, slices) JSON-encoded as strings Plugins should parse and validate values appropriate to their schema

HTTPRequest

FieldTypeDescription
methodstring-
pathstring-
headersHTTPHeader-
bodybytes-

HTTPResponse

FieldTypeDescription
status_codeint32-
headersHTTPHeader-
bodybytes-

HTTPHeader

HTTPHeader represents an HTTP header with support for multiple values. HTTP headers can have multiple values (e.g., Set-Cookie, Accept).

FieldTypeDescription
namestring-
valuesstring-

WebSocketMessage

HealthResponse

FieldTypeDescription
healthybool-
messagestring-
detailsmap<string, string>-

ConfigSchemaResponse

FieldTypeDescription
fieldsmap<string, ConfigFieldSchema>Map of config field name to schema definition

ConfigFieldSchema

FieldTypeDescription
typestringField type: "string", "number", "boolean", "array"
descriptionstringHuman-readable description of what this field does
default_valuestringDefault value (as string representation)
requiredboolWhether this field is required
min_valuestringFor number types: minimum value (optional)
max_valuestringFor number types: maximum value (optional)
patternstringFor string types: validation pattern (regex, optional)
element_typestringFor array types: element type (optional)

ScheduleInfo

ScheduleInfo describes a schedule that a plugin wants QNTX to create

FieldTypeDescription
handler_namestring-
interval_secondsint32-
enabled_by_defaultbool-
descriptionstring-
ats_codestring-

InitializeResponse

InitializeResponse is returned by Initialize RPC

FieldTypeDescription
handler_namesstringHandler names this plugin can execute Examples: ["python.script", "python.webhook", "ixgest.git"] Empty list means plugin provides no async handlers (backward compatible)
schedulesScheduleInfoSchedules this plugin wants QNTX to create QNTX will auto-create schedule.Job entries for these

ExecuteJobRequest

ExecuteJobRequest is sent to plugins to execute an async job

FieldTypeDescription
job_idstring-
handler_namestring-
payloadbytes-
timeout_secsint64-

ExecuteJobResponse

ExecuteJobResponse is returned after job execution

FieldTypeDescription
successbool-
errorstring-
resultbytes-
progress_currentint32Progress tracking (optional) - Pulse updates job.Progress
progress_totalint32-
cost_actualdoubleCost tracking (optional) - Pulse updates job.CostActual
log_entriesJobLogEntryExecution logs — written to task_logs table by PluginProxyHandler
plugin_versionstringPlugin version that produced this result (e.g., "0.2.14")

JobLogEntry

JobLogEntry is a single log line from plugin job execution

FieldTypeDescription
timestampstring-
levelstring-
messagestring-
stagestring-
metadatastring-

GlyphDefResponse

GlyphDefResponse contains custom glyph type definitions from a plugin

FieldTypeDescription
glyphsGlyphDef-

GlyphDef

GlyphDef defines a custom glyph type provided by a plugin

FieldTypeDescription
symbolstringSymbol is the glyph identifier (e.g., "⚗" for a chemistry plugin)
titlestringTitle is the human-readable name shown in the title bar
labelstringLabel is a short identifier for logs and the spawn menu
content_pathstringContentPath is the HTTP path (relative to /api/{plugin}/) that returns the HTML fragment for this glyph's content area
css_pathstringCSSPath is an optional HTTP path to a stylesheet for this glyph type
default_widthint32DefaultWidth and DefaultHeight in pixels (0 = use system default)
default_heightint32-

← Back to API Index