pub struct OutboxItem {Show 14 fields
pub id: String,
pub status: String,
pub tool: String,
pub kind: OutboxKind,
pub args_before: Value,
pub args: Value,
pub summary: String,
pub session_id: Option<String>,
pub workspace: Option<PathBuf>,
pub taint: Taint,
pub created_at: String,
pub resolved_at: Option<String>,
pub reason: Option<String>,
pub error: Option<String>,
}Expand description
One staged outbound action.
Fields§
§id: String§status: Stringpending | sent | rejected.
tool: StringThe tool a release will execute, by registry name (web__fetch).
kind: OutboxKindHow this is reviewed. Defaulted rather than required, so items staged before the field existed load as the kind they in fact were.
args_before: ValueThe arguments as the agent drafted them. Never modified — this is the baseline the learning capture diffs against.
args: ValueThe arguments a release will execute. Starts equal to args_before;
mecha outbox edit rewrites it.
summary: StringOne line for mecha outbox list.
session_id: Option<String>The session that drafted this, when the front-end knew it.
workspace: Option<PathBuf>The path jail the call was drafted under.
A staged call is a deferred tool call, and a tool call only means
anything relative to the workspace it was made in: bundle here is a
directory under the drafting run’s jail. Release happens in another
process, minutes or hours later, from whatever directory the reviewer
happens to be standing in — so without this the release resolves the
argument against the wrong root. An absolute path fails loudly; a
relative one is worse, because a same-named directory beside the
reviewer would quietly publish the wrong bytes.
Recording it also keeps the release inside the jail the agent was held to, rather than the reviewer’s, which is the stricter of the two and the one the interlock reasoned about.
Defaulted, like kind: items staged before the field existed load as
None and release exactly as they did before.
taint: TaintThe conversation’s taint at the moment of staging. An armed snapshot means third-party text was in context when this draft was written — review it as possibly an attacker’s words, not the assistant’s.
created_at: String§resolved_at: Option<String>§reason: Option<String>Why it was rejected, when it was.
error: Option<String>The last release attempt’s failure, if any. A failed send stays
pending — the draft is still good; the delivery was not.
Implementations§
Source§impl OutboxItem
impl OutboxItem
pub fn edited(&self) -> bool
Sourcepub fn mineable_as_writing(&self) -> bool
pub fn mineable_as_writing(&self) -> bool
Whether mecha reflect may mine this item as a writing correction.
A writing-domain reflection can become a consolidated rule, and a rule
rides in every future run’s system prompt inside the cached prefix. That
is the longest half-life anything in this project has, so what feeds it
is filtered structurally rather than by a prompt asking the reflector to
use its judgement:
- Sent, and edited. An unedited release is not a correction (that it is positive evidence is a separate, unread signal); a rejected one never went out.
- A message. A publish’s
diff(args_before, args)is a changed filesystem path or visibility flag. Mining it would teach voice rules from bookkeeping — the same mistake as learning from"Blocked by a hook:", which is machine policy read as a human correction.
Trait Implementations§
Source§impl Clone for OutboxItem
impl Clone for OutboxItem
Source§fn clone(&self) -> OutboxItem
fn clone(&self) -> OutboxItem
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more