Skip to main content

FleetWorkerConfig

Struct FleetWorkerConfig 

Source
pub struct FleetWorkerConfig {
    pub accepts_work: bool,
    pub repos: Vec<PathBuf>,
    pub max_parallel: u32,
    pub local_parallel: u32,
    pub dispatches_per_hour: u32,
    pub max_subtask_secs: u64,
    pub fetch_missing_base: bool,
    pub fetch_remote: String,
    pub allowed_tools: Option<Vec<String>>,
}
Expand description

Whether this instance takes farmed-out coding work, and under what limits.

Persisted at ~/.car/fleet-worker.json (under CAR_HOME when set) rather than read from the environment, because it is an operator decision that must survive a restart and be inspectable — an env var would make “does this machine run my peers’ prompts?” depend on how the daemon happened to be launched.

Fields§

§accepts_work: bool

Off by default. Turning it on lets a trusted peer run a coding CLI against the checkouts named in repos.

§repos: Vec<PathBuf>

Repository checkouts this host will serve. A dispatch is matched to one of these by root commit; anything else is declined.

§max_parallel: u32

Peers’ subtasks run here at once.

§local_parallel: u32

This host’s own share when it orchestrates a distributed run. Separate from max_parallel, which bounds what peers may spend here.

§dispatches_per_hour: u32

Dispatches ONE peer may start here per hour.

max_parallel bounds concurrency, which is not a bound on spend: a peer that dispatches one subtask, waits, and dispatches the next never exceeds it and can still drain this machine’s coding-CLI quota. This is the budget. 0 accepts nothing while keeping the rest of the config.

§max_subtask_secs: u64

Hard ceiling on a peer-supplied timeout_secs.

The dispatch carries a timeout the sender chose. A machine agreeing to take work is not agreeing to be occupied for as long as the caller likes, so the sender’s value is clamped to this and an omitted one defaults to it.

§fetch_missing_base: bool

Fetch a missing base commit from this checkout’s own remote instead of declining — the posture that makes a machine a runner rather than a person’s laptop.

Off by default, because on a laptop it means a peer’s dispatch can cause a network fetch in a repository the operator is working in. On a runner it is the whole point: a machine that continuously tracks origin always has the base commit, which is what turns an idle pool into a working one. Adds no trust — the fetch targets the remote this checkout is already configured with, never anything the dispatch supplied.

§fetch_remote: String

Remote a runner fetches from. origin unless an operator says otherwise.

§allowed_tools: Option<Vec<String>>

Tools a peer’s coding CLI may use here, intersected with whatever the dispatch asks for.

None (the default) adds no restriction beyond the CLI’s own, which is the honest default: a coding subtask needs to read, edit, and usually build, so a narrow allowlist mostly turns into every dispatch failing for reasons the sender cannot see. Set it when this machine should be stricter than the work requires.

Implementations§

Source§

impl FleetWorkerConfig

Source

pub fn load() -> Self

Read the config, falling back to the declining default.

A malformed file reads as the default rather than as an error: the failure mode of “unparseable config” must be declining work, never accepting it under a half-read set of limits.

Source

pub fn save(&self) -> Result<(), String>

Trait Implementations§

Source§

impl Clone for FleetWorkerConfig

Source§

fn clone(&self) -> Self

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 FleetWorkerConfig

Source§

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

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

impl Default for FleetWorkerConfig

Source§

fn default() -> Self

Returns the “default value” for a type. Read more
Source§

impl<'de> Deserialize<'de> for FleetWorkerConfig

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 Serialize for FleetWorkerConfig

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

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<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

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<S, T> Duplex<S> for T
where T: FromSample<S> + ToSample<S>,

Source§

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

Source§

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

Source§

impl<T> ErasedDestructor for T
where T: 'static,

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<S> FromSample<S> for S

Source§

fn from_sample_(s: S) -> S

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<F, T> IntoSample<T> for F
where T: FromSample<F>,

Source§

fn into_sample(self) -> T

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> 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> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
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> ToSample<U> for T
where U: FromSample<T>,

Source§

fn to_sample_(self) -> U

Source§

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

Source§

type Error = !

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

fn try_from(value: U) -> Result<T, !>

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