pub struct ClientLaboratory {
pub type: ClientLaboratoryType,
pub id: String,
pub machine: Option<String>,
pub machine_state: Option<String>,
}Expand description
A client-resolved laboratory: a client-side MCP server keyed by an
opaque id. Wire shape: {"type":"client","id":"…"}.
Laboratory ids are only unique per (machine, state) — the same id
can exist on different laboratory hosts. machine + machine_state
pin THE laboratory this value means, so downstream routing (the
CLI conduit’s /laboratory forward) is exact rather than
first-match-by-id. Absent pair ⇒ legacy id-only resolution.
Fields§
§type: ClientLaboratoryTypeDiscriminator — always "client".
id: StringThe opaque laboratory id.
machine: Option<String>The machine id of the laboratory host serving this laboratory.
machine_state: Option<String>The state (on that machine) the laboratory host serves.
Implementations§
Source§impl ClientLaboratory
impl ClientLaboratory
Sourcepub fn server_name(&self) -> Option<String>
pub fn server_name(&self) -> Option<String>
The laboratory’s MCP SERVER NAME — oail-<base62(fnv1a32(composite))>,
a fixed 11-char [0-9A-Za-z-] token. Server names feed the
proxy’s tool-name prefix (<name>_Bash), which is bound by
provider tool-name limits (length + charset) — so the name is a
HASH of the composite id, never the raw
id (arbitrary length/charset) and never the composite itself
(the 64-hex machine id alone busts the limits). None when the
marker predates machine tracking (no composite to hash). The
in-container binary computes the same name from its
OBJECTIVEAI_LABORATORY_ID env — keep the mirrors in sync.
Sourcepub fn composite_id(&self) -> Option<String>
pub fn composite_id(&self) -> Option<String>
The assistant-facing composite id
{machineID}/{base62(state)}/{base62(laboratoryID)} — None
when the marker predates machine tracking (no pair to compose).
Sourcepub fn from_composite_id(s: &str) -> Option<Self>
pub fn from_composite_id(s: &str) -> Option<Self>
Parse a composite_id back into a
marker (with the pair always Some). None on anything that
is not EXACTLY three /-separated segments with a non-empty
machine id and base62-decodable state + laboratory id — safe
because the machine segment is hex and the encoded segments
are pure base62, so neither can contain a / of its own.
Trait Implementations§
Source§impl<'arbitrary> Arbitrary<'arbitrary> for ClientLaboratory
impl<'arbitrary> Arbitrary<'arbitrary> for ClientLaboratory
Source§fn arbitrary(u: &mut Unstructured<'arbitrary>) -> Result<Self>
fn arbitrary(u: &mut Unstructured<'arbitrary>) -> Result<Self>
Self from the given unstructured data. Read moreSource§fn arbitrary_take_rest(u: Unstructured<'arbitrary>) -> Result<Self>
fn arbitrary_take_rest(u: Unstructured<'arbitrary>) -> Result<Self>
Self from the entirety of the given
unstructured data. Read moreSource§fn size_hint(depth: usize) -> (usize, Option<usize>)
fn size_hint(depth: usize) -> (usize, Option<usize>)
Unstructured this type
needs to construct itself. Read moreSource§fn try_size_hint(
depth: usize,
) -> Result<(usize, Option<usize>), MaxRecursionReached>
fn try_size_hint( depth: usize, ) -> Result<(usize, Option<usize>), MaxRecursionReached>
Unstructured this type
needs to construct itself. Read moreSource§impl Clone for ClientLaboratory
impl Clone for ClientLaboratory
Source§fn clone(&self) -> ClientLaboratory
fn clone(&self) -> ClientLaboratory
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for ClientLaboratory
impl Debug for ClientLaboratory
Source§impl<'de> Deserialize<'de> for ClientLaboratory
impl<'de> Deserialize<'de> for ClientLaboratory
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
impl Eq for ClientLaboratory
Source§impl JsonSchema for ClientLaboratory
impl JsonSchema for ClientLaboratory
Source§fn schema_id() -> Cow<'static, str>
fn schema_id() -> Cow<'static, str>
Source§fn json_schema(generator: &mut SchemaGenerator) -> Schema
fn json_schema(generator: &mut SchemaGenerator) -> Schema
Source§fn inline_schema() -> bool
fn inline_schema() -> bool
$ref keyword. Read moreSource§impl PartialEq for ClientLaboratory
impl PartialEq for ClientLaboratory
Source§impl Serialize for ClientLaboratory
impl Serialize for ClientLaboratory
impl StructuralPartialEq for ClientLaboratory
Auto Trait Implementations§
impl Freeze for ClientLaboratory
impl RefUnwindSafe for ClientLaboratory
impl Send for ClientLaboratory
impl Sync for ClientLaboratory
impl Unpin for ClientLaboratory
impl UnsafeUnpin for ClientLaboratory
impl UnwindSafe for ClientLaboratory
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> DeserializeOwned for Twhere
T: for<'de> Deserialize<'de>,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
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