Skip to main content

Manifest

Struct Manifest 

Source
pub struct Manifest {
Show 13 fields pub description: String, pub version: String, pub owner: String, pub author: Option<String>, pub homepage: Option<String>, pub license: Option<String>, pub exec: Exec, pub cli_zip: Option<String>, pub viewer_zip: Option<String>, pub viewer_url: Option<String>, pub viewer_routes: Vec<ViewerRoute>, pub mobile_ready: bool, pub mcp_servers: Vec<McpServer>,
}
Expand description

Declarative metadata a plugin ships with itself. The wire shape is JSON; the on-disk convention (sibling file, embedded resource, --manifest flag, …) is deliberately out of scope of this struct and will be settled in a follow-up.

Fields§

§description: String

One-line description of what the plugin does. Surfaced in listings and the plugin’s --help-equivalent UI.

§version: String

Version string. Semver convention is recommended but not enforced — the host just displays whatever’s here.

§owner: String

GitHub <owner> segment of the source repo. Authors write their canonical owner here; the installer overwrites this field with whatever owner it was actually installed from (so forks land on disk with the fork’s owner, not the upstream’s).

§author: Option<String>

Author or authors of the plugin. Free-form string.

§homepage: Option<String>

Homepage or repository URL.

§license: Option<String>

SPDX license identifier (or any string).

§exec: Exec

Per-OS exec command for the plugin’s cli side — the same shape tools use. The current platform’s vector is the program plus its leading arguments; the run’s args are appended, and the whole thing runs with CWD = <plugin dir>/cli/. Relative program paths resolve against that folder; bare names keep PATH-lookup semantics. Empty when the plugin is viewer-only.

§cli_zip: Option<String>

GitHub-release asset filename for the plugin’s cli bundle — a .zip whose contents are extracted into <plugin dir>/cli/ at install time (the Self::exec working directory), the same way Self::viewer_zip extracts to viewer/. Absent when the exec needs nothing on disk (e.g. it invokes a PATH-resolved program).

§viewer_zip: Option<String>

GitHub-release asset filename for the plugin’s viewer UI bundle (a .zip whose root contains index.html plus assets). When absent, the plugin has no viewer tab from this source. Mutually exclusive with Self::viewer_url — validated by Self::validate.

§viewer_url: Option<String>

Remote URL the viewer’s iframe loads directly, instead of an on-disk bundle from Self::viewer_zip. The full URL is used as the iframe src= verbatim — query string, path, port, fragment all pass through. Must use https://, or http:// targeting localhost / 127.0.0.1 (development only).

Mutually exclusive with Self::viewer_zip. Self::viewer_routes and Self::mobile_ready apply to remote-URL viewers the same way they apply to zip-bundled viewers — the embedded axum server still hosts the declared routes; the iframe still receives the same postMessage protocol regardless of where its HTML/JS loaded from.

§viewer_routes: Vec<ViewerRoute>

HTTP routes the viewer exposes on behalf of this plugin. Each entry registers a handler at /plugin/<repository>/<path> on the viewer’s embedded axum server; a hit emits a PluginRequest { type, value } event to the React frontend, which dispatches to the plugin’s iframe via the postMessage bridge.

§mobile_ready: bool

Plugin author opts in to mobile viewer support by setting this. Mobile viewer builds only surface plugins with this flag true — mobile has no local backend binary, so plugin UIs that require a backend will misbehave unless their authors specifically design for “no-backend” mode. Defaults to false (desktop-only).

§mcp_servers: Vec<McpServer>

MCP servers the plugin wants the host to expose. Each entry has a name (the identifier agents reference via objectiveai_sdk::agent::ClientObjectiveaiMcpPluginEntry::mcp_servers) plus the same url + authorization shape objectiveai_sdk::agent::McpServer uses. Auth-requiring entries flag authorization = true; credentials are resolved by the host (env vars / config), not the manifest.

Implementations§

Source§

impl Manifest

Source

pub fn has_viewer(&self) -> bool

Whether this plugin presents a viewer tab in the host. True iff either viewer source field — Self::viewer_zip or Self::viewer_url — is set.

Source

pub fn tool_name(&self, name: &str) -> String

Source

pub fn validate(&self) -> Result<(), &'static str>

Validate fields that can’t be enforced by serde alone: viewer_zip and viewer_url are mutually exclusive, and viewer_url (when present) must be https:// or http:// targeting localhost / 127.0.0.1. Called at every parse boundary (remote-fetched install, on-disk read) so a broken manifest can’t sneak through.

Trait Implementations§

Source§

impl Clone for Manifest

Source§

fn clone(&self) -> Manifest

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Manifest

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'de> Deserialize<'de> for Manifest

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl JsonSchema for Manifest

Source§

fn schema_name() -> Cow<'static, str>

The name of the generated JSON Schema. Read more
Source§

fn schema_id() -> Cow<'static, str>

Returns a string that uniquely identifies the schema produced by this type. Read more
Source§

fn json_schema(generator: &mut SchemaGenerator) -> Schema

Generates a JSON Schema for this type. Read more
Source§

fn inline_schema() -> bool

Whether JSON Schemas generated for this type should be included directly in parent schemas, rather than being re-used where possible using the $ref keyword. Read more
Source§

impl PartialEq for Manifest

Source§

fn eq(&self, other: &Manifest) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl Serialize for Manifest

Source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more
Source§

impl StructuralPartialEq for Manifest

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,

Source§

impl<T> DynClone for T
where T: Clone,

Source§

fn __clone_box(&self, _: Private) -> *mut ()

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> FromRef<T> for T
where T: Clone,

Source§

fn from_ref(input: &T) -> T

Converts to this type from a reference to the input type.
Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Pointee for T

Source§

type Pointer = u32

Source§

fn debug( pointer: <T as Pointee>::Pointer, f: &mut Formatter<'_>, ) -> Result<(), Error>

Source§

impl<T> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> Serialize for T
where T: Serialize + ?Sized,

Source§

fn erased_serialize(&self, serializer: &mut dyn Serializer) -> Result<Ok, Error>

Source§

impl<T> ToAst for T

Source§

fn ast(self, begin: usize, end: usize) -> Spanned<Self>

Source§

impl<T> ToJmespath for T
where T: Serialize,

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more