Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,9 @@ thiserror = "1"
chrono = "0.4"
serde = { version = "1", features = ["derive"] }
serde_json = "1"
tokio-stream = "0.1"
futures-core = "0.3"
async-stream = "0.3"

[build-dependencies]
tonic-build = "0.11"
11 changes: 8 additions & 3 deletions build.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,11 @@
fn main() -> Result<(), Box<dyn std::error::Error>> {
tonic_build::configure()
.build_server(true)
.compile(&["macp/v1/macp.proto"], &["proto"])?;
tonic_build::configure().build_server(true).compile(
&[
"macp/v1/envelope.proto",
"macp/v1/core.proto",
"macp/modes/decision/v1/decision.proto",
],
&["proto"],
)?;
Ok(())
}
31 changes: 31 additions & 0 deletions proto/macp/modes/decision/v1/decision.proto
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
syntax = "proto3";

package macp.modes.decision.v1;

message ProposalPayload {
string proposal_id = 1;
string option = 2;
string rationale = 3;
bytes supporting_data = 4;
}

message EvaluationPayload {
string proposal_id = 1;
string recommendation = 2; // APPROVE | REVIEW | BLOCK | REJECT
double confidence = 3;
string reason = 4;
}

message ObjectionPayload {
string proposal_id = 1;
string reason = 2;
string severity = 3; // low | medium | high | critical
}

message VotePayload {
string proposal_id = 1;
string vote = 2; // approve | reject | abstain
string reason = 3;
}

// Decision Mode typically reuses macp.v1.CommitmentPayload for terminal results.
241 changes: 241 additions & 0 deletions proto/macp/v1/core.proto
Original file line number Diff line number Diff line change
@@ -0,0 +1,241 @@
syntax = "proto3";

package macp.v1;

import "macp/v1/envelope.proto";

message Root {
string uri = 1;
string name = 2;
}

message ClientInfo {
string name = 1;
string title = 2;
string version = 3;
string description = 4;
string website_url = 5;
}

message RuntimeInfo {
string name = 1;
string title = 2;
string version = 3;
string description = 4;
string website_url = 5;
}

message SessionsCapability {
bool stream = 1;
}

message CancellationCapability {
bool cancel_session = 1;
}

message ProgressCapability {
bool progress = 1;
}

message ManifestCapability {
bool get_manifest = 1;
}

message ModeRegistryCapability {
bool list_modes = 1;
bool list_changed = 2;
}

message RootsCapability {
bool list_roots = 1;
bool list_changed = 2;
}

message ExperimentalCapabilities {
map<string, string> features = 1;
}

message Capabilities {
SessionsCapability sessions = 1;
CancellationCapability cancellation = 2;
ProgressCapability progress = 3;
ManifestCapability manifest = 4;
ModeRegistryCapability mode_registry = 5;
RootsCapability roots = 6;
ExperimentalCapabilities experimental = 100;
}

message InitializeRequest {
repeated string supported_protocol_versions = 1;
ClientInfo client_info = 2;
Capabilities capabilities = 3;
}

message InitializeResponse {
string selected_protocol_version = 1;
RuntimeInfo runtime_info = 2;
Capabilities capabilities = 3;
repeated string supported_modes = 4;
string instructions = 5;
}

message SignalPayload {
string signal_type = 1;
bytes data = 2;
double confidence = 3;
string correlation_session_id = 4;
}

message ProgressPayload {
string progress_token = 1;
double progress = 2;
double total = 3;
string message = 4;
string target_message_id = 5;
}

message SessionStartPayload {
string intent = 1;
repeated string participants = 2;
string mode_version = 3;
string configuration_version = 4;
string policy_version = 5;
int64 ttl_ms = 6;
bytes context = 7;
repeated Root roots = 8;
}

message SessionCancelPayload {
string reason = 1;
string cancelled_by = 2;
}

message CommitmentPayload {
string commitment_id = 1;
string action = 2;
string authority_scope = 3;
string reason = 4;
string mode_version = 5;
string policy_version = 6;
string configuration_version = 7;
}

message SessionMetadata {
string session_id = 1;
string mode = 2;
SessionState state = 3;
int64 started_at_unix_ms = 4;
int64 expires_at_unix_ms = 5;
string mode_version = 6;
string configuration_version = 7;
string policy_version = 8;
}

message GetSessionRequest {
string session_id = 1;
}

message CancelSessionRequest {
string session_id = 1;
string reason = 2;
}

message GetManifestRequest {
string agent_id = 1;
}

message AgentManifest {
string agent_id = 1;
string title = 2;
string description = 3;
repeated string supported_modes = 4;
repeated string input_content_types = 5;
repeated string output_content_types = 6;
map<string, string> metadata = 7;
}

message ModeDescriptor {
string mode = 1;
string mode_version = 2;
string title = 3;
string description = 4;
string determinism_class = 5;
string participant_model = 6;
repeated string message_types = 7;
repeated string terminal_message_types = 8;
map<string, string> schema_uris = 9;
}

message ListModesRequest {}

message ListModesResponse {
repeated ModeDescriptor modes = 1;
}

message ListRootsRequest {}

message ListRootsResponse {
repeated Root roots = 1;
}

message WatchModeRegistryRequest {}

message WatchRootsRequest {}

message RegistryChanged {
string registry = 1;
int64 observed_at_unix_ms = 2;
}

message RootsChanged {
int64 observed_at_unix_ms = 1;
}

message SendRequest {
Envelope envelope = 1;
}

message SendResponse {
Ack ack = 1;
}

message StreamSessionRequest {
Envelope envelope = 1;
}

message StreamSessionResponse {
Envelope envelope = 1;
}

message GetSessionResponse {
SessionMetadata metadata = 1;
}

message CancelSessionResponse {
Ack ack = 1;
}

message GetManifestResponse {
AgentManifest manifest = 1;
}

message WatchModeRegistryResponse {
RegistryChanged change = 1;
}

message WatchRootsResponse {
RootsChanged change = 1;
}

service MACPRuntimeService {
rpc Initialize(InitializeRequest) returns (InitializeResponse);
rpc Send(SendRequest) returns (SendResponse);
rpc StreamSession(stream StreamSessionRequest) returns (stream StreamSessionResponse);
rpc GetSession(GetSessionRequest) returns (GetSessionResponse);
rpc CancelSession(CancelSessionRequest) returns (CancelSessionResponse);
rpc GetManifest(GetManifestRequest) returns (GetManifestResponse);
rpc ListModes(ListModesRequest) returns (ListModesResponse);
rpc WatchModeRegistry(WatchModeRegistryRequest) returns (stream WatchModeRegistryResponse);
rpc ListRoots(ListRootsRequest) returns (ListRootsResponse);
rpc WatchRoots(WatchRootsRequest) returns (stream WatchRootsResponse);
}
41 changes: 41 additions & 0 deletions proto/macp/v1/envelope.proto
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
syntax = "proto3";

package macp.v1;

// Canonical MACP envelope and generic acknowledgement/error shapes.

message Envelope {
string macp_version = 1;
string mode = 2;
string message_type = 3;
string message_id = 4;
string session_id = 5; // empty for ambient messages
string sender = 6;
int64 timestamp_unix_ms = 7; // informational only
bytes payload = 8;
}

message MACPError {
string code = 1;
string message = 2;
string session_id = 3;
string message_id = 4;
bytes details = 5;
}

enum SessionState {
SESSION_STATE_UNSPECIFIED = 0;
SESSION_STATE_OPEN = 1;
SESSION_STATE_RESOLVED = 2;
SESSION_STATE_EXPIRED = 3;
}

message Ack {
bool ok = 1;
bool duplicate = 2;
string message_id = 3;
string session_id = 4;
int64 accepted_at_unix_ms = 5;
SessionState session_state = 6;
MACPError error = 7;
}
42 changes: 0 additions & 42 deletions proto/macp/v1/macp.proto

This file was deleted.

Loading
Loading