pub enum NodeRequest {
Show 64 variants
Snapshot,
Resync {
after_sequence: u64,
},
ArmHarnessMcpReservation {
reservation_id: HarnessMcpReservationId,
activation_digest: HarnessMcpActivationDigest,
spawn_spec: SpawnSpec,
launch: HarnessMcpLaunchV1,
expires_at_unix_ms: u64,
},
SpawnSpecWithHarnessMcp {
reservation_id: HarnessMcpReservationId,
activation_digest: HarnessMcpActivationDigest,
spec: SpawnSpec,
deadline_unix_ms: u64,
},
ActivateHarnessMcpReservation {
reservation_id: HarnessMcpReservationId,
activation_digest: HarnessMcpActivationDigest,
record_id: SessionRecordId,
session: SessionAddress,
},
AbortHarnessMcpReservation {
reservation_id: HarnessMcpReservationId,
activation_digest: HarnessMcpActivationDigest,
},
PutHarnessMcpReplyChunk {
reservation_id: HarnessMcpReservationId,
activation_digest: HarnessMcpActivationDigest,
record_id: SessionRecordId,
session: SessionAddress,
call_id: HarnessMcpCallId,
offset: u32,
final_chunk: bool,
chunk_hex: HarnessMcpReplyChunkHexV1,
},
RejectHarnessMcpCall {
reservation_id: HarnessMcpReservationId,
activation_digest: HarnessMcpActivationDigest,
record_id: SessionRecordId,
session: SessionAddress,
call_id: HarnessMcpCallId,
reason: HarnessMcpRejectReasonV1,
},
BeginDeliveryStage {
manifest: DeliveryBundleManifestV2,
},
PutDeliveryBlobChunk {
stage_id: DeliveryStageId,
blob_digest: DeliveryBlobDigestV1,
offset: u64,
chunk_hex: DeliveryBlobChunkHexV1,
},
CommitDeliveryStage {
stage_id: DeliveryStageId,
},
AbortDeliveryStage {
stage_id: DeliveryStageId,
},
BrowseHostDirectories {
directory: Option<OpaqueHostPath>,
after: Option<OpaqueHostPath>,
},
InspectWorkspace {
workspace_id: WorkspaceId,
},
ReadWorkspaceFile {
workspace_id: WorkspaceId,
path: RepositoryPath,
},
WriteWorkspaceFile {
workspace_id: WorkspaceId,
path: RepositoryPath,
expected_revision: WorkspaceFileRevision,
text: String,
},
CreateWorkspaceFile {
workspace_id: WorkspaceId,
path: RepositoryPath,
},
CreateWorkspaceDirectory {
workspace_id: WorkspaceId,
path: RepositoryPath,
},
ReadGitHistory {
workspace_id: WorkspaceId,
path: Option<RepositoryPath>,
before: Option<GitObjectId>,
limit: u16,
},
ReadGitDiff {
workspace_id: WorkspaceId,
request: GitDiffRequest,
},
AcquireController {
lease_ms: u64,
},
ReleaseController,
RegisterWorkspace {
workspace_id: WorkspaceId,
root: OpaqueHostPath,
},
CreateStandaloneWorkspace {
workspace_id: WorkspaceId,
root: OpaqueHostPath,
initial_branch: Option<String>,
},
UnregisterWorkspace {
workspace_id: WorkspaceId,
},
CreateWorktree {
source_workspace_id: WorkspaceId,
workspace_id: WorkspaceId,
target_root: OpaqueHostPath,
branch: String,
base: Option<String>,
},
RemoveWorktree {
source_workspace_id: WorkspaceId,
target_root: OpaqueHostPath,
},
Spawn {
workspace_id: WorkspaceId,
provider: AgentId,
mode: SessionMode,
terminal_size: TerminalSize,
initial_prompt: Option<String>,
},
SpawnSpec {
spec: SpawnSpec,
},
SpawnManagedWorktree {
request: ManagedWorktreeSpawnRequest,
},
SpawnManagedWorktreeV2 {
request: ManagedWorktreeSpawnRequestV2,
},
CleanupManagedWorktree {
lease_id: ManagedWorktreeLeaseId,
},
Resume {
session: SessionAddress,
terminal_size: TerminalSize,
initial_prompt: Option<String>,
},
RenameSessionRecord {
record_id: SessionRecordId,
display_name: String,
},
SetSessionTask {
record_id: SessionRecordId,
expected_revision: u64,
target: SessionTaskTargetV1,
},
IndexProviderSession {
workspace_id: WorkspaceId,
provider: AgentId,
identity: ProviderSessionIdentity,
display_name: String,
},
IndexNativeSession {
selection: NativeSessionSelection,
display_name: String,
},
ResumeSessionRecord {
record_id: SessionRecordId,
terminal_size: TerminalSize,
initial_prompt: Option<String>,
},
ForgetSessionRecord {
record_id: SessionRecordId,
},
CatalogNativeSessions {
route: NativeSessionCatalogRoute,
limit: u16,
},
PageNativeSessions {
route: NativeSessionCatalogRoute,
window: NativeSessionCatalogWindow,
catalog_revision: u64,
recent_cutoff_unix_ms: u64,
after_selection_id: Option<String>,
limit: u16,
},
PreviewNativeSession {
selection: NativeSessionSelection,
message_limit: u16,
},
PreviewSessionRecord {
record_id: SessionRecordId,
message_limit: u16,
},
DiscoverHistory {
session: SessionAddress,
limit: u16,
},
LoadHistory {
session: SessionAddress,
candidate_id: String,
},
ExportContextPackForSessionRecord {
record_id: SessionRecordId,
session: SessionAddress,
},
ExportContextPack {
session: SessionAddress,
},
ForgetContextPack {
context_id: SpawnContextId,
},
ResolveDurableContextPack {
context_id: SpawnContextId,
},
ReadContextPack {
digest: SpawnContextDigest,
},
Prompt {
session: SessionAddress,
text: String,
},
Paste {
session: SessionAddress,
text: String,
},
Input {
session: SessionAddress,
text: String,
},
TerminalBytes {
session: SessionAddress,
bytes: Vec<u8>,
},
TerminalControl {
session: SessionAddress,
control: TerminalControl,
},
Resize {
session: SessionAddress,
size: TerminalSize,
},
Interrupt {
session: SessionAddress,
},
Stop {
session: SessionAddress,
force: bool,
},
Remove {
session: SessionAddress,
},
ResolveInteraction {
session: SessionAddress,
correlation_id: String,
response: ProviderInteractionResponse,
},
SetSessionMode {
session: SessionAddress,
mode_id: String,
},
SetSessionConfigOption {
session: SessionAddress,
option_id: String,
value_json: String,
},
SetSessionModel {
session: SessionAddress,
model_id: String,
},
Shutdown,
}Variants§
Snapshot
Resync
ArmHarnessMcpReservation
Fields
reservation_id: HarnessMcpReservationIdactivation_digest: HarnessMcpActivationDigestlaunch: HarnessMcpLaunchV1SpawnSpecWithHarnessMcp
ActivateHarnessMcpReservation
Fields
reservation_id: HarnessMcpReservationIdactivation_digest: HarnessMcpActivationDigestrecord_id: SessionRecordIdsession: SessionAddressAbortHarnessMcpReservation
PutHarnessMcpReplyChunk
Fields
reservation_id: HarnessMcpReservationIdactivation_digest: HarnessMcpActivationDigestrecord_id: SessionRecordIdsession: SessionAddresscall_id: HarnessMcpCallIdchunk_hex: HarnessMcpReplyChunkHexV1RejectHarnessMcpCall
Fields
reservation_id: HarnessMcpReservationIdactivation_digest: HarnessMcpActivationDigestrecord_id: SessionRecordIdsession: SessionAddresscall_id: HarnessMcpCallIdreason: HarnessMcpRejectReasonV1BeginDeliveryStage
Fields
manifest: DeliveryBundleManifestV2PutDeliveryBlobChunk
Fields
stage_id: DeliveryStageIdblob_digest: DeliveryBlobDigestV1chunk_hex: DeliveryBlobChunkHexV1CommitDeliveryStage
Fields
stage_id: DeliveryStageIdAbortDeliveryStage
Fields
stage_id: DeliveryStageIdBrowseHostDirectories
InspectWorkspace
Fields
workspace_id: WorkspaceIdReadWorkspaceFile
WriteWorkspaceFile
CreateWorkspaceFile
CreateWorkspaceDirectory
ReadGitHistory
ReadGitDiff
AcquireController
ReleaseController
RegisterWorkspace
CreateStandaloneWorkspace
UnregisterWorkspace
Fields
workspace_id: WorkspaceIdCreateWorktree
RemoveWorktree
Spawn
SpawnSpec
SpawnManagedWorktree
Fields
request: ManagedWorktreeSpawnRequestSpawnManagedWorktreeV2
Fields
request: ManagedWorktreeSpawnRequestV2CleanupManagedWorktree
Fields
lease_id: ManagedWorktreeLeaseIdResume
RenameSessionRecord
SetSessionTask
IndexProviderSession
IndexNativeSession
ResumeSessionRecord
ForgetSessionRecord
Fields
record_id: SessionRecordIdCatalogNativeSessions
PageNativeSessions
PreviewNativeSession
PreviewSessionRecord
DiscoverHistory
LoadHistory
ExportContextPackForSessionRecord
ExportContextPack
Fields
session: SessionAddressForgetContextPack
Fields
context_id: SpawnContextIdResolveDurableContextPack
Fields
context_id: SpawnContextIdReadContextPack
Fields
digest: SpawnContextDigestPrompt
Paste
Input
TerminalBytes
TerminalControl
Resize
Interrupt
Fields
session: SessionAddressStop
Remove
Fields
session: SessionAddressResolveInteraction
Answers the correlation_id an AgentStreamChunkKindV1::InteractionPrompt
carries (minted by correlation::interaction_correlation).
response must additionally match the interaction’s own kind
(ProviderInteractionResponse::validate_for); that check needs the
live interaction and is the routing layer’s job, not this wire’s.
SetSessionMode
SetSessionConfigOption
SetSessionModel
Shutdown
Implementations§
Source§impl NodeRequest
impl NodeRequest
pub fn harness_mcp_contract_is_valid_at(&self, now_unix_ms: u64) -> bool
pub fn native_session_catalog_contract_is_valid(&self) -> bool
pub fn native_session_preview_contract_is_valid(&self) -> bool
pub fn history_context_pack_contract_is_valid(&self) -> bool
pub fn required_capability(&self) -> Option<&'static str>
pub fn requires_worktree_selection_capability(&self) -> bool
pub fn requires_spawn_spec_defaults_overrides_capability(&self) -> bool
pub fn requires_spawn_profile_revision_capability(&self) -> bool
pub fn requires_child_environment_profile_capability(&self) -> bool
pub fn requires_session_bundle_materialization_capability(&self) -> bool
pub fn requires_history_context_pack_capability(&self) -> bool
Sourcepub fn is_replay_safe(&self) -> bool
pub fn is_replay_safe(&self) -> bool
Whether a caller may resend this exact request after a physical C2
reconnect without risking a double application on the node –
gate4agent_c2_client::reconnect::C2ReconnectingHandle::request_until
is the only caller: it never retries a request this returns false
for, at any budget, no matter how long the link is down.
Conservative by construction: true only for a request that is
either a pure read (nothing on the node changes, however many times
it is sent) or otherwise idempotent by design (the same bytes at the
same identity always land the same way, and a duplicate lands on an
already-settled node state as a clean no-op/mismatch rather than a
second effect) – PutHarnessMcpReplyChunk/RejectHarnessMcpCall
(the harness-MCP read-proxy call’s own terminal reply, keyed by
(reservation_id, activation_digest, call_id, offset)) are the only
non-read members of that second group. Every spawn, every
reservation/worktree/workspace lifecycle transition, every session
mutation, and every delivery-bundle stage transition returns false
– including PutDeliveryBlobChunk, which looks offset-keyed like
PutHarnessMcpReplyChunk but backs a bundle commit this method does
not have a mandate to reclassify as retry-safe.
Deliberately exhaustive with no _ arm: a newly added NodeRequest
variant fails to compile here until someone classifies it, rather
than silently inheriting a default in either direction.