Core Functions
definePlugin()
Defines a plugin with metadata and setup function.string
required
Plugin name (used for module identification)
string
required
Plugin version (semver format recommended)
() => Promise<Plugin> | Plugin
required
Function that returns the plugin implementation
Plugin Interface
Plugin
The plugin implementation interface.function
Plugin initialization hook. Return
false to abort initialization.function
Module setup hook. Called after configuration is applied.
ContextInit
Context passed to plugin hooks.ChannelHost
required
Event channel for communicating with the plugin host
PluginApis
required
APIs for protocol and client operations
Plugin Host API
PluginHost
Manages plugin lifecycle and orchestration.PluginHostOptions
'electron' | 'node' | 'web'
Runtime environment. Defaults to
'electron'.PluginTransport
Communication transport. Defaults to
{ kind: 'in-memory' }.string
Preferred protocol version. Defaults to
'v1'.string
Preferred API version. Defaults to
'v1'.PluginStartOptions
string
Working directory for loading plugin files
boolean
Stop at configuration-needed phase. Defaults to
false.string[]
Capabilities that must be ready before initialization
number
Timeout for waiting on capabilities. Defaults to
15000ms.PluginHostSession
APIs
Protocol APIs
APIs for plugin-host protocol communication.capabilities
string
required
Capability key to wait for
number
Timeout in milliseconds. Defaults to
15000.CapabilityDescriptor
The capability descriptor when ready
CapabilityDescriptor[]
Array of all capability descriptors
resources.providers
Array<{ name: string }>
Array of provider names
Client APIs
APIs for client-side functionality.resources.providers
Types
ManifestV1
Plugin manifest structure.'v1'
required
Manifest API version
'manifest.plugin.airi.moeru.ai'
required
Manifest kind identifier
string
required
Plugin name
object
required
Runtime-specific entrypoint paths
ModuleIdentity
CapabilityDescriptor
string
required
Unique capability identifier
'announced' | 'ready' | 'degraded' | 'withdrawn'
required
Current capability state
Record<string, unknown>
Additional capability metadata
number
required
Unix timestamp of last update
PluginSessionPhase
Plugin lifecycle phases.ModuleConfigEnvelope
Configuration envelope structure.string
required
Unique configuration identifier
number
required
Configuration revision number
number
required
Configuration schema version
C
required
Complete configuration object
Protocol Events
Standard protocol events emitted by the plugin host.module:authenticate
Request authentication with token.module:authenticated
Authentication result.module:announce
Announce module to registry.module:prepared
Module is prepared and ready for configuration.module:configuration:needed
Module requires configuration.module:configuration:configured
Configuration has been applied.module:configure
Apply configuration to module.module:status
Module status update.registry:modules:sync
Sync module registry.Best Practices
Type your configuration
Type your configuration
Always define TypeScript interfaces for your plugin configuration to catch errors early.
Validate inputs
Validate inputs
Validate all configuration and event payloads before using them.
Handle async errors
Handle async errors
Wrap async operations in try-catch blocks and emit appropriate status events.
Use descriptive capability keys
Use descriptive capability keys
Use namespaced capability keys like
'tool:weather' or 'llm:provider:openai'.Clean up resources
Clean up resources
Listen for stop events and clean up timers, connections, and other resources.
Next Steps
Creating Plugins
Learn how to build plugins step-by-step
Plugin SDK Overview
Understand plugin architecture and concepts
