syntax = "proto3"; package camino; import "camino/schema.proto"; import "quixos/refs.proto"; service CaminoService { rpc RegisterSchema(RegisterSchemaRequest) returns (RegisterSchemaResponse); rpc ListClasses(ListClassesRequest) returns (ListClassesResponse); rpc CreateObject(CreateObjectRequest) returns (CreateObjectResponse); rpc GetObject(GetObjectRequest) returns (GetObjectResponse); rpc ListObjects(ListObjectsRequest) returns (ListObjectsResponse); rpc SetField(SetFieldRequest) returns (SetFieldResponse); rpc AddEdge(AddEdgeRequest) returns (AddEdgeResponse); rpc ListEdges(ListEdgesRequest) returns (ListEdgesResponse); rpc RemoveEdge(RemoveEdgeRequest) returns (RemoveEdgeResponse); rpc ListOps(ListOpsRequest) returns (ListOpsResponse); rpc WatchObject(WatchObjectRequest) returns (stream WatchObjectEvent); } message RegisterSchemaRequest { string source_file = 1; } message RegisterSchemaResponse { repeated string class_ids = 1; repeated ClassSchema classes = 2; } message ListClassesRequest {} message RegisteredClass { string id = 1; ClassSchema schema = 2; } message ListClassesResponse { repeated RegisteredClass classes = 1; } message NullValue {} message ObjectValue { map fields = 1; } message ListValue { repeated Value values = 1; } message RefValue { string object_id = 1; } message CrdtValue { string type = 1; string encoding = 2; bytes payload = 3; } message FieldValueSource { string object_id = 1; string field_name = 2; string field_type = 3; string field_storage = 4; string conflict_strategy = 5; uint64 revision = 6; } message ValueSource { FieldValueSource field = 1; } message Value { oneof kind { NullValue null_value = 1; bool bool_value = 2; double number_value = 3; string string_value = 4; string integer_value = 5; bytes bytes_value = 6; ObjectValue object_value = 7; ListValue list_value = 8; RefValue ref_value = 9; CrdtValue crdt_value = 10; } ValueSource source = 11; } message CreateObjectRequest { string class_id = 1; map fields = 2; } message CreateObjectResponse { CaminoObject object = 1; } message GetObjectRequest { string object_id = 1; } message GetObjectResponse { CaminoObject object = 1; } message ListObjectsRequest { string class_id = 1; } message ListObjectsResponse { repeated CaminoObject objects = 1; } message SetFieldRequest { string object_id = 1; string field_name = 2; Value value = 3; string client_mutation_id = 4; } message SetFieldResponse { CaminoObject object = 1; } message AddEdgeRequest { string from_object_id = 1; string source_field = 2; string to_object_id = 3; map fields = 4; optional int32 source_ordinal = 5; optional int32 target_ordinal = 6; } message AddEdgeResponse { CaminoEdge edge = 1; } message ListEdgesRequest { string object_id = 1; } message ListEdgesResponse { repeated CaminoEdge edges = 1; } message RemoveEdgeRequest { string edge_id = 1; } message RemoveEdgeResponse { string edge_id = 1; } message ListOpsRequest { string object_id = 1; } message ListOpsResponse { repeated CaminoOp ops = 1; } message WatchObjectRequest { string object_id = 1; string after_op_id = 2; bool include_snapshot = 3; } message WatchObjectEvent { string object_id = 1; CaminoObject snapshot = 2; CaminoOp op = 3; } message CaminoObject { string id = 1; string class_id = 2; uint32 schema_version = 3; string created_at = 4; string updated_at = 5; map fields = 6; map field_revisions = 7; map field_conflicts = 8; } message CaminoEdge { string id = 1; string edge_type_id = 2; string from_object_id = 3; string to_object_id = 4; // Legacy canonical source-side projection fields. Prefer endpoint fields. string source_field = 5; string cardinality = 6; string inverse = 7; map fields = 8; optional int32 from_ordinal = 9; string created_at = 10; string updated_at = 11; string from_projection = 12; string to_projection = 13; string from_cardinality = 14; string to_cardinality = 15; optional int32 to_ordinal = 16; string directionality = 17; } message CaminoOp { string id = 1; string object_id = 2; string op_kind = 3; Value payload = 4; string actor = 5; quixos.FunctionRef function_ref = 6; string created_at = 7; string client_mutation_id = 8; }