pub enum DisplayPolicy {
WorkspaceAlias,
BackendNative,
}Expand description
How MountFs presents primary-workspace paths to the model, narration,
prompts, and persisted output pointers.
§Why this is a policy seam and not a hardcoded rule
/workspace plays two independent roles in MountFs, and they must not
be conflated:
- Routing / cwd — the model addresses files at
/workspace/...and relative paths resolve there. This is a runtime mechanism: it is the same for every embedder (models are trained on cloud-agent layouts), so it stays hardcoded asWORKSPACE_MOUNT. - Display presentation — the path string shown to the model, emitted in tool narration, and persisted in output pointers. This is policy, and it legitimately differs per embedder. That is what this enum selects.
§History (do not re-collapse these two roles)
- PR #2776 made
MountFspresent/workspaceunconditionally, deleting the old delegation tobackend.display_path(...). The motivation was real: a mounted real-disk server session leaked the host checkout path (/private/var/.../checkout/src/lib.rs) to the model and into persisted, agent-visible output — a host-disclosure issue (threat model TM-FS). In a multi-tenant server the host is infrastructure the model must not see, soWorkspaceAliasis the correct, safe default. - But #2776 baked that policy into the mechanism, in shared
everruns-core. That broke local single-user embedders (e.g. theyolopcoding CLI, PR #258 “expose real workspace paths”), where the “host” is the user’s own machine. There, showing/Users/me/proj/src/lib.rsis not a disclosure — it is the desired behavior: paths are clickable and match whatbash pwdprints. Such embedders still needMountFsfor routing (relative resolution, the default cwd, extra mounts), so they cannot simply drop it; they need presentation to be overridable.
The resolution: keep the safe alias as the default so no server code changes
and #2776’s security property is preserved, but expose BackendNative so a
local embedder can opt back into its backend’s real identity. The runtime no
longer hardcodes presentation — it defaults it, and lets the embedder
decide. See specs/file-store.md (EVE-660, “Display policy”).
Variants§
WorkspaceAlias
Present primary paths under the stable, host-agnostic /workspace
namespace, regardless of what the backend physically is. The default;
required for multi-tenant/server hosts so host paths never reach the
model or persisted output.
BackendNative
Delegate presentation of primary paths to the backend, exposing its native identity (real host paths for a real-disk store). For local, single-user embedders where the host is the user’s own machine and real paths are the intended, useful output.
Trait Implementations§
Source§impl Clone for DisplayPolicy
impl Clone for DisplayPolicy
Source§fn clone(&self) -> DisplayPolicy
fn clone(&self) -> DisplayPolicy
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreimpl Copy for DisplayPolicy
Source§impl Debug for DisplayPolicy
impl Debug for DisplayPolicy
Source§impl Default for DisplayPolicy
impl Default for DisplayPolicy
Source§fn default() -> DisplayPolicy
fn default() -> DisplayPolicy
impl Eq for DisplayPolicy
Source§impl PartialEq for DisplayPolicy
impl PartialEq for DisplayPolicy
impl StructuralPartialEq for DisplayPolicy
Auto Trait Implementations§
impl Freeze for DisplayPolicy
impl RefUnwindSafe for DisplayPolicy
impl Send for DisplayPolicy
impl Sync for DisplayPolicy
impl Unpin for DisplayPolicy
impl UnsafeUnpin for DisplayPolicy
impl UnwindSafe for DisplayPolicy
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
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
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<T> FutureExt for T
impl<T> FutureExt for T
Source§fn with_context(self, otel_cx: Context) -> WithContext<Self>
fn with_context(self, otel_cx: Context) -> WithContext<Self>
Source§fn with_current_context(self) -> WithContext<Self>
fn with_current_context(self) -> WithContext<Self>
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 moreSource§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::Request