diff --git a/chat.proto b/chat.proto index a610d2e..fc5ba00 100644 --- a/chat.proto +++ b/chat.proto @@ -2,13 +2,15 @@ syntax = "proto3"; package chatpb; +import "google/protobuf/timestamp.proto"; // Import the well-known type for Timestamp + message Row { - repeated string fields = 1; + repeated string fields = 1; } message Table { - int32 columns = 1; - repeated Row rows = 2; + int32 columns = 1; + repeated Row rows = 2; } enum Who { @@ -17,14 +19,26 @@ enum Who { USER = 2; } -message Chat { - Who from = 1; - string content = 3; - Table table = 4; +// NEW: A message to hold all the details of a tool call +message ToolCall { + string name = 1; // e.g., "Shell" + string input = 2; // The command that was run + string description = 3; // The description for the command + string output_stdout = 4; + string output_stderr = 5; + int32 exit_code = 6; } -message Chats { // `autogenpb:marshal` `autogenpb:mutex` - string uuid = 1; // `autogenpb:uuid:9fd31f10-c25d-4d66-bc8d-5f6eb7c79057` - string version = 2; // `autogenpb:version:v0.0.1` - repeated Chat Chats = 3; // THIS MUST BE Chat and then Chats +message Chat { + Who from = 1; + google.protobuf.Timestamp ctime = 2; + string content = 3; + Table table = 4; + repeated ToolCall toolcalls = 5; +} + +message Chats { // `autogenpb:marshal` `autogenpb:mutex` + string uuid = 1; // `autogenpb:uuid:9fd31f10-c25d-4d66-bc8d-5f6eb7c79057` + string version = 2; // `autogenpb:version:v0.0.1` + repeated Chat Chats = 3; // THIS MUST BE Chat and then Chats } diff --git a/make_chat.go b/make_chat.go index b6736c4..5c7cb75 100644 --- a/make_chat.go +++ b/make_chat.go @@ -1,6 +1,11 @@ package chatpb -import "go.wit.com/log" +import ( + "time" + + "go.wit.com/log" + timestamppb "google.golang.org/protobuf/types/known/timestamppb" +) func TestChat() { conversation := NewChats() @@ -71,6 +76,7 @@ func (c *Chats) AddGeminiComment(s string) { chat.From = Who_GEMINI chat.Content = s + chat.Ctime = timestamppb.New(time.Now()) c.Append(chat) } @@ -83,3 +89,15 @@ func (c *Chats) AddUserComment(s string) { c.Append(chat) } + +func UnmarshalChats(data []byte) (*Chats, error) { + c := new(Chats) + err := c.Unmarshal(data) + return c, err +} + +func UnmarshalChatsTEXT(data []byte) (*Chats, error) { + c := new(Chats) + err := c.UnmarshalTEXT(data) + return c, err +}