diff --git a/.vscode/launch.json b/.vscode/launch.json index e821f37..de9b6a0 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -1,18 +1,15 @@ { - // Use IntelliSense to learn about possible attributes. - // Hover to view descriptions of existing attributes. - // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.2.0", - "configurations": [ - { - "name": "Launch Package", - "type": "go", - "request": "launch", - "mode": "auto", - "program": "${workspaceFolder}/main.go", - "args": [ - "studio" - ] - } - ] + "configurations": [{ + "name": "Run Extension", + "type": "extensionHost", + "request": "launch", + "runtimeExecutable": "${execPath}", + "args": [ + "--extensionDevelopmentPath=${workspaceFolder}" + ], + "outFiles": [ + "${workspaceFolder}/studio/build/extension/**/*.js" + ] + }] } \ No newline at end of file diff --git a/README.md b/README.md index f1eba2f..dd0896a 100644 --- a/README.md +++ b/README.md @@ -30,7 +30,7 @@ protoflow studio go run main.go studio --dev ``` -Backend will proxy to the frontend, so you can just open http://localhost:8080 to see the frontend. +Backend will proxy to the frontend, so you can just open http://localhost:8000 to see the frontend. ### Studio ```shell @@ -38,7 +38,7 @@ npm install npm run dev ``` -Starts the studio frontend at http://localhost:8000. +Starts the studio frontend at http://localhost:8001. ### Haphazard notes - "a framework to easily build small/modular grpc services" -> yes, i want to make it so you bring your code: diff --git a/gen/ai.pb.go b/gen/ai.pb.go new file mode 100644 index 0000000..605fa6e --- /dev/null +++ b/gen/ai.pb.go @@ -0,0 +1,230 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.31.0 +// protoc (unknown) +// source: ai.proto + +package gen + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type GenerateCode struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Code that has been generated. + Code string `protobuf:"bytes,1,opt,name=code,proto3" json:"code,omitempty"` +} + +func (x *GenerateCode) Reset() { + *x = GenerateCode{} + if protoimpl.UnsafeEnabled { + mi := &file_ai_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GenerateCode) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GenerateCode) ProtoMessage() {} + +func (x *GenerateCode) ProtoReflect() protoreflect.Message { + mi := &file_ai_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GenerateCode.ProtoReflect.Descriptor instead. +func (*GenerateCode) Descriptor() ([]byte, []int) { + return file_ai_proto_rawDescGZIP(), []int{0} +} + +func (x *GenerateCode) GetCode() string { + if x != nil { + return x.Code + } + return "" +} + +type DirectionResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Ingredients []string `protobuf:"bytes,1,rep,name=ingredients,proto3" json:"ingredients,omitempty"` + Quantities []string `protobuf:"bytes,2,rep,name=quantities,proto3" json:"quantities,omitempty"` + Steps []string `protobuf:"bytes,3,rep,name=steps,proto3" json:"steps,omitempty"` +} + +func (x *DirectionResponse) Reset() { + *x = DirectionResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_ai_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DirectionResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DirectionResponse) ProtoMessage() {} + +func (x *DirectionResponse) ProtoReflect() protoreflect.Message { + mi := &file_ai_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DirectionResponse.ProtoReflect.Descriptor instead. +func (*DirectionResponse) Descriptor() ([]byte, []int) { + return file_ai_proto_rawDescGZIP(), []int{1} +} + +func (x *DirectionResponse) GetIngredients() []string { + if x != nil { + return x.Ingredients + } + return nil +} + +func (x *DirectionResponse) GetQuantities() []string { + if x != nil { + return x.Quantities + } + return nil +} + +func (x *DirectionResponse) GetSteps() []string { + if x != nil { + return x.Steps + } + return nil +} + +var File_ai_proto protoreflect.FileDescriptor + +var file_ai_proto_rawDesc = []byte{ + 0x0a, 0x08, 0x61, 0x69, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x02, 0x61, 0x69, 0x22, 0x22, + 0x0a, 0x0c, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x12, + 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, + 0x64, 0x65, 0x22, 0x6b, 0x0a, 0x11, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x69, 0x6e, 0x67, 0x72, 0x65, + 0x64, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x69, 0x6e, + 0x67, 0x72, 0x65, 0x64, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x71, 0x75, 0x61, + 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x71, + 0x75, 0x61, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x65, + 0x70, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x73, 0x74, 0x65, 0x70, 0x73, 0x42, + 0x62, 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x69, 0x42, 0x07, 0x41, 0x69, 0x50, 0x72, 0x6f, + 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x27, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, + 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x66, 0x6c, 0x6f, 0x77, 0x2d, 0x6c, 0x61, 0x62, 0x73, 0x2f, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x66, 0x6c, 0x6f, 0x77, 0x2f, 0x67, 0x65, 0x6e, 0xa2, 0x02, 0x03, + 0x41, 0x58, 0x58, 0xaa, 0x02, 0x02, 0x41, 0x69, 0xca, 0x02, 0x02, 0x41, 0x69, 0xe2, 0x02, 0x0e, + 0x41, 0x69, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, + 0x02, 0x41, 0x69, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_ai_proto_rawDescOnce sync.Once + file_ai_proto_rawDescData = file_ai_proto_rawDesc +) + +func file_ai_proto_rawDescGZIP() []byte { + file_ai_proto_rawDescOnce.Do(func() { + file_ai_proto_rawDescData = protoimpl.X.CompressGZIP(file_ai_proto_rawDescData) + }) + return file_ai_proto_rawDescData +} + +var file_ai_proto_msgTypes = make([]protoimpl.MessageInfo, 2) +var file_ai_proto_goTypes = []interface{}{ + (*GenerateCode)(nil), // 0: ai.GenerateCode + (*DirectionResponse)(nil), // 1: ai.DirectionResponse +} +var file_ai_proto_depIdxs = []int32{ + 0, // [0:0] is the sub-list for method output_type + 0, // [0:0] is the sub-list for method input_type + 0, // [0:0] is the sub-list for extension type_name + 0, // [0:0] is the sub-list for extension extendee + 0, // [0:0] is the sub-list for field type_name +} + +func init() { file_ai_proto_init() } +func file_ai_proto_init() { + if File_ai_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_ai_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GenerateCode); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_ai_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DirectionResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_ai_proto_rawDesc, + NumEnums: 0, + NumMessages: 2, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_ai_proto_goTypes, + DependencyIndexes: file_ai_proto_depIdxs, + MessageInfos: file_ai_proto_msgTypes, + }.Build() + File_ai_proto = out.File + file_ai_proto_rawDesc = nil + file_ai_proto_goTypes = nil + file_ai_proto_depIdxs = nil +} diff --git a/gen/genconnect/project.connect.go b/gen/genconnect/project.connect.go index a379e59..4b5efa8 100644 --- a/gen/genconnect/project.connect.go +++ b/gen/genconnect/project.connect.go @@ -33,25 +33,9 @@ const ( // reflection-formatted method names, remove the leading slash and convert the remaining slash to a // period. const ( - // ProjectServiceNewNodeProcedure is the fully-qualified name of the ProjectService's NewNode RPC. - ProjectServiceNewNodeProcedure = "/project.ProjectService/NewNode" - // ProjectServiceGetProjectTypesProcedure is the fully-qualified name of the ProjectService's - // GetProjectTypes RPC. - ProjectServiceGetProjectTypesProcedure = "/project.ProjectService/GetProjectTypes" - // ProjectServiceSendChatProcedure is the fully-qualified name of the ProjectService's SendChat RPC. - ProjectServiceSendChatProcedure = "/project.ProjectService/SendChat" - // ProjectServiceExportProjectProcedure is the fully-qualified name of the ProjectService's - // ExportProject RPC. - ProjectServiceExportProjectProcedure = "/project.ProjectService/ExportProject" - // ProjectServiceLoadProjectProcedure is the fully-qualified name of the ProjectService's - // LoadProject RPC. - ProjectServiceLoadProjectProcedure = "/project.ProjectService/LoadProject" - // ProjectServiceGetProjectProcedure is the fully-qualified name of the ProjectService's GetProject + // ProjectServiceAddMethodProcedure is the fully-qualified name of the ProjectService's AddMethod // RPC. - ProjectServiceGetProjectProcedure = "/project.ProjectService/GetProject" - // ProjectServiceGetProjectsProcedure is the fully-qualified name of the ProjectService's - // GetProjects RPC. - ProjectServiceGetProjectsProcedure = "/project.ProjectService/GetProjects" + ProjectServiceAddMethodProcedure = "/project.ProjectService/AddMethod" // ProjectServiceCreateProjectProcedure is the fully-qualified name of the ProjectService's // CreateProject RPC. ProjectServiceCreateProjectProcedure = "/project.ProjectService/CreateProject" @@ -61,46 +45,73 @@ const ( // ProjectServiceEnumerateProvidersProcedure is the fully-qualified name of the ProjectService's // EnumerateProviders RPC. ProjectServiceEnumerateProvidersProcedure = "/project.ProjectService/EnumerateProviders" + // ProjectServiceExportProjectProcedure is the fully-qualified name of the ProjectService's + // ExportProject RPC. + ProjectServiceExportProjectProcedure = "/project.ProjectService/ExportProject" + // ProjectServiceGenerateAIStubProcedure is the fully-qualified name of the ProjectService's + // GenerateAIStub RPC. + ProjectServiceGenerateAIStubProcedure = "/project.ProjectService/GenerateAIStub" + // ProjectServiceGetGRPCServerInfoProcedure is the fully-qualified name of the ProjectService's + // GetGRPCServerInfo RPC. + ProjectServiceGetGRPCServerInfoProcedure = "/project.ProjectService/GetGRPCServerInfo" // ProjectServiceGetNodeInfoProcedure is the fully-qualified name of the ProjectService's // GetNodeInfo RPC. ProjectServiceGetNodeInfoProcedure = "/project.ProjectService/GetNodeInfo" - // ProjectServiceSaveProjectProcedure is the fully-qualified name of the ProjectService's - // SaveProject RPC. - ProjectServiceSaveProjectProcedure = "/project.ProjectService/SaveProject" + // ProjectServiceGetProjectProcedure is the fully-qualified name of the ProjectService's GetProject + // RPC. + ProjectServiceGetProjectProcedure = "/project.ProjectService/GetProject" + // ProjectServiceGetProjectTypesProcedure is the fully-qualified name of the ProjectService's + // GetProjectTypes RPC. + ProjectServiceGetProjectTypesProcedure = "/project.ProjectService/GetProjectTypes" + // ProjectServiceGetProjectsProcedure is the fully-qualified name of the ProjectService's + // GetProjects RPC. + ProjectServiceGetProjectsProcedure = "/project.ProjectService/GetProjects" + // ProjectServiceGetRunningWorkflowsProcedure is the fully-qualified name of the ProjectService's + // GetRunningWorkflows RPC. + ProjectServiceGetRunningWorkflowsProcedure = "/project.ProjectService/GetRunningWorkflows" + // ProjectServiceGetWorkflowRunsProcedure is the fully-qualified name of the ProjectService's + // GetWorkflowRuns RPC. + ProjectServiceGetWorkflowRunsProcedure = "/project.ProjectService/GetWorkflowRuns" + // ProjectServiceLoadProjectProcedure is the fully-qualified name of the ProjectService's + // LoadProject RPC. + ProjectServiceLoadProjectProcedure = "/project.ProjectService/LoadProject" + // ProjectServiceNewNodeProcedure is the fully-qualified name of the ProjectService's NewNode RPC. + ProjectServiceNewNodeProcedure = "/project.ProjectService/NewNode" + // ProjectServiceRunGRPCMethodProcedure is the fully-qualified name of the ProjectService's + // RunGRPCMethod RPC. + ProjectServiceRunGRPCMethodProcedure = "/project.ProjectService/RunGRPCMethod" // ProjectServiceRunWorkflowProcedure is the fully-qualified name of the ProjectService's // RunWorkflow RPC. ProjectServiceRunWorkflowProcedure = "/project.ProjectService/RunWorkflow" + // ProjectServiceSaveProjectProcedure is the fully-qualified name of the ProjectService's + // SaveProject RPC. + ProjectServiceSaveProjectProcedure = "/project.ProjectService/SaveProject" // ProjectServiceStopWorkflowProcedure is the fully-qualified name of the ProjectService's // StopWorkflow RPC. ProjectServiceStopWorkflowProcedure = "/project.ProjectService/StopWorkflow" - // ProjectServiceGetWorkflowRunsProcedure is the fully-qualified name of the ProjectService's - // GetWorkflowRuns RPC. - ProjectServiceGetWorkflowRunsProcedure = "/project.ProjectService/GetWorkflowRuns" - // ProjectServiceGetRunningWorkflowsProcedure is the fully-qualified name of the ProjectService's - // GetRunningWorkflows RPC. - ProjectServiceGetRunningWorkflowsProcedure = "/project.ProjectService/GetRunningWorkflows" ) // ProjectServiceClient is a client for the project.ProjectService service. type ProjectServiceClient interface { - NewNode(context.Context, *connect_go.Request[gen.NewNodeRequest]) (*connect_go.Response[gen.NewNodeResponse], error) - GetProjectTypes(context.Context, *connect_go.Request[gen.GetProjectTypesRequest]) (*connect_go.Response[gen.ProjectTypes], error) - // TODO breadchris unfortunately this is needed because of the buf fetch transport not supporting streaming - // the suggestion is to build a custom transport that uses websockets https://github.com/bufbuild/connect-es/issues/366 - SendChat(context.Context, *connect_go.Request[gen.SendChatRequest]) (*connect_go.ServerStreamForClient[gen.SendChatResponse], error) - ExportProject(context.Context, *connect_go.Request[gen.ExportProjectRequest]) (*connect_go.Response[gen.ExportProjectResponse], error) - LoadProject(context.Context, *connect_go.Request[gen.LoadProjectRequest]) (*connect_go.Response[gen.LoadProjectResponse], error) - GetProject(context.Context, *connect_go.Request[gen.GetProjectRequest]) (*connect_go.Response[gen.GetProjectResponse], error) - GetProjects(context.Context, *connect_go.Request[gen.GetProjectsRequest]) (*connect_go.Response[gen.GetProjectsResponse], error) + AddMethod(context.Context, *connect_go.Request[gen.AddMethodRequest]) (*connect_go.Response[gen.AddMethodResponse], error) CreateProject(context.Context, *connect_go.Request[gen.CreateProjectRequest]) (*connect_go.Response[gen.CreateProjectResponse], error) DeleteProject(context.Context, *connect_go.Request[gen.DeleteProjectRequest]) (*connect_go.Response[gen.DeleteProjectResponse], error) EnumerateProviders(context.Context, *connect_go.Request[gen.GetProvidersRequest]) (*connect_go.Response[gen.GetProvidersResponse], error) + ExportProject(context.Context, *connect_go.Request[gen.ExportProjectRequest]) (*connect_go.Response[gen.ExportProjectResponse], error) + GenerateAIStub(context.Context, *connect_go.Request[gen.GenerateAIStubRequest]) (*connect_go.Response[gen.GenerateCode], error) + GetGRPCServerInfo(context.Context, *connect_go.Request[gen.GetGRPCServerInfoRequest]) (*connect_go.Response[gen.GetGRPCServerInfoResponse], error) GetNodeInfo(context.Context, *connect_go.Request[gen.GetNodeInfoRequest]) (*connect_go.Response[gen.GetNodeInfoResponse], error) - SaveProject(context.Context, *connect_go.Request[gen.SaveProjectRequest]) (*connect_go.Response[gen.SaveProjectResponse], error) + GetProject(context.Context, *connect_go.Request[gen.GetProjectRequest]) (*connect_go.Response[gen.GetProjectResponse], error) + GetProjectTypes(context.Context, *connect_go.Request[gen.GetProjectTypesRequest]) (*connect_go.Response[gen.ProjectTypes], error) + GetProjects(context.Context, *connect_go.Request[gen.GetProjectsRequest]) (*connect_go.Response[gen.GetProjectsResponse], error) + GetRunningWorkflows(context.Context, *connect_go.Request[gen.GetRunningWorkflowsRequest]) (*connect_go.Response[gen.GetRunningWorkflowResponse], error) + GetWorkflowRuns(context.Context, *connect_go.Request[gen.GetWorkflowRunsRequest]) (*connect_go.Response[gen.GetWorkflowRunsResponse], error) + LoadProject(context.Context, *connect_go.Request[gen.LoadProjectRequest]) (*connect_go.Response[gen.LoadProjectResponse], error) + NewNode(context.Context, *connect_go.Request[gen.NewNodeRequest]) (*connect_go.Response[gen.NewNodeResponse], error) + RunGRPCMethod(context.Context, *connect_go.Request[gen.RunGRPCMethodRequest]) (*connect_go.ServerStreamForClient[gen.NodeExecution], error) RunWorkflow(context.Context, *connect_go.Request[gen.RunWorkflowRequest]) (*connect_go.ServerStreamForClient[gen.NodeExecution], error) + SaveProject(context.Context, *connect_go.Request[gen.SaveProjectRequest]) (*connect_go.Response[gen.SaveProjectResponse], error) StopWorkflow(context.Context, *connect_go.Request[gen.StopWorkflowRequest]) (*connect_go.Response[gen.StopWorkflowResponse], error) - GetWorkflowRuns(context.Context, *connect_go.Request[gen.GetWorkflowRunsRequest]) (*connect_go.Response[gen.GetWorkflowRunsResponse], error) - GetRunningWorkflows(context.Context, *connect_go.Request[gen.GetRunningWorkflowsRequest]) (*connect_go.Response[gen.GetRunningWorkflowResponse], error) } // NewProjectServiceClient constructs a client for the project.ProjectService service. By default, @@ -113,19 +124,24 @@ type ProjectServiceClient interface { func NewProjectServiceClient(httpClient connect_go.HTTPClient, baseURL string, opts ...connect_go.ClientOption) ProjectServiceClient { baseURL = strings.TrimRight(baseURL, "/") return &projectServiceClient{ - newNode: connect_go.NewClient[gen.NewNodeRequest, gen.NewNodeResponse]( + addMethod: connect_go.NewClient[gen.AddMethodRequest, gen.AddMethodResponse]( httpClient, - baseURL+ProjectServiceNewNodeProcedure, + baseURL+ProjectServiceAddMethodProcedure, opts..., ), - getProjectTypes: connect_go.NewClient[gen.GetProjectTypesRequest, gen.ProjectTypes]( + createProject: connect_go.NewClient[gen.CreateProjectRequest, gen.CreateProjectResponse]( httpClient, - baseURL+ProjectServiceGetProjectTypesProcedure, + baseURL+ProjectServiceCreateProjectProcedure, + opts..., + ), + deleteProject: connect_go.NewClient[gen.DeleteProjectRequest, gen.DeleteProjectResponse]( + httpClient, + baseURL+ProjectServiceDeleteProjectProcedure, opts..., ), - sendChat: connect_go.NewClient[gen.SendChatRequest, gen.SendChatResponse]( + enumerateProviders: connect_go.NewClient[gen.GetProvidersRequest, gen.GetProvidersResponse]( httpClient, - baseURL+ProjectServiceSendChatProcedure, + baseURL+ProjectServiceEnumerateProvidersProcedure, opts..., ), exportProject: connect_go.NewClient[gen.ExportProjectRequest, gen.ExportProjectResponse]( @@ -133,9 +149,19 @@ func NewProjectServiceClient(httpClient connect_go.HTTPClient, baseURL string, o baseURL+ProjectServiceExportProjectProcedure, opts..., ), - loadProject: connect_go.NewClient[gen.LoadProjectRequest, gen.LoadProjectResponse]( + generateAIStub: connect_go.NewClient[gen.GenerateAIStubRequest, gen.GenerateCode]( httpClient, - baseURL+ProjectServiceLoadProjectProcedure, + baseURL+ProjectServiceGenerateAIStubProcedure, + opts..., + ), + getGRPCServerInfo: connect_go.NewClient[gen.GetGRPCServerInfoRequest, gen.GetGRPCServerInfoResponse]( + httpClient, + baseURL+ProjectServiceGetGRPCServerInfoProcedure, + opts..., + ), + getNodeInfo: connect_go.NewClient[gen.GetNodeInfoRequest, gen.GetNodeInfoResponse]( + httpClient, + baseURL+ProjectServiceGetNodeInfoProcedure, opts..., ), getProject: connect_go.NewClient[gen.GetProjectRequest, gen.GetProjectResponse]( @@ -143,34 +169,39 @@ func NewProjectServiceClient(httpClient connect_go.HTTPClient, baseURL string, o baseURL+ProjectServiceGetProjectProcedure, opts..., ), + getProjectTypes: connect_go.NewClient[gen.GetProjectTypesRequest, gen.ProjectTypes]( + httpClient, + baseURL+ProjectServiceGetProjectTypesProcedure, + opts..., + ), getProjects: connect_go.NewClient[gen.GetProjectsRequest, gen.GetProjectsResponse]( httpClient, baseURL+ProjectServiceGetProjectsProcedure, opts..., ), - createProject: connect_go.NewClient[gen.CreateProjectRequest, gen.CreateProjectResponse]( + getRunningWorkflows: connect_go.NewClient[gen.GetRunningWorkflowsRequest, gen.GetRunningWorkflowResponse]( httpClient, - baseURL+ProjectServiceCreateProjectProcedure, + baseURL+ProjectServiceGetRunningWorkflowsProcedure, opts..., ), - deleteProject: connect_go.NewClient[gen.DeleteProjectRequest, gen.DeleteProjectResponse]( + getWorkflowRuns: connect_go.NewClient[gen.GetWorkflowRunsRequest, gen.GetWorkflowRunsResponse]( httpClient, - baseURL+ProjectServiceDeleteProjectProcedure, + baseURL+ProjectServiceGetWorkflowRunsProcedure, opts..., ), - enumerateProviders: connect_go.NewClient[gen.GetProvidersRequest, gen.GetProvidersResponse]( + loadProject: connect_go.NewClient[gen.LoadProjectRequest, gen.LoadProjectResponse]( httpClient, - baseURL+ProjectServiceEnumerateProvidersProcedure, + baseURL+ProjectServiceLoadProjectProcedure, opts..., ), - getNodeInfo: connect_go.NewClient[gen.GetNodeInfoRequest, gen.GetNodeInfoResponse]( + newNode: connect_go.NewClient[gen.NewNodeRequest, gen.NewNodeResponse]( httpClient, - baseURL+ProjectServiceGetNodeInfoProcedure, + baseURL+ProjectServiceNewNodeProcedure, opts..., ), - saveProject: connect_go.NewClient[gen.SaveProjectRequest, gen.SaveProjectResponse]( + runGRPCMethod: connect_go.NewClient[gen.RunGRPCMethodRequest, gen.NodeExecution]( httpClient, - baseURL+ProjectServiceSaveProjectProcedure, + baseURL+ProjectServiceRunGRPCMethodProcedure, opts..., ), runWorkflow: connect_go.NewClient[gen.RunWorkflowRequest, gen.NodeExecution]( @@ -178,19 +209,14 @@ func NewProjectServiceClient(httpClient connect_go.HTTPClient, baseURL string, o baseURL+ProjectServiceRunWorkflowProcedure, opts..., ), - stopWorkflow: connect_go.NewClient[gen.StopWorkflowRequest, gen.StopWorkflowResponse]( - httpClient, - baseURL+ProjectServiceStopWorkflowProcedure, - opts..., - ), - getWorkflowRuns: connect_go.NewClient[gen.GetWorkflowRunsRequest, gen.GetWorkflowRunsResponse]( + saveProject: connect_go.NewClient[gen.SaveProjectRequest, gen.SaveProjectResponse]( httpClient, - baseURL+ProjectServiceGetWorkflowRunsProcedure, + baseURL+ProjectServiceSaveProjectProcedure, opts..., ), - getRunningWorkflows: connect_go.NewClient[gen.GetRunningWorkflowsRequest, gen.GetRunningWorkflowResponse]( + stopWorkflow: connect_go.NewClient[gen.StopWorkflowRequest, gen.StopWorkflowResponse]( httpClient, - baseURL+ProjectServiceGetRunningWorkflowsProcedure, + baseURL+ProjectServiceStopWorkflowProcedure, opts..., ), } @@ -198,37 +224,45 @@ func NewProjectServiceClient(httpClient connect_go.HTTPClient, baseURL string, o // projectServiceClient implements ProjectServiceClient. type projectServiceClient struct { - newNode *connect_go.Client[gen.NewNodeRequest, gen.NewNodeResponse] - getProjectTypes *connect_go.Client[gen.GetProjectTypesRequest, gen.ProjectTypes] - sendChat *connect_go.Client[gen.SendChatRequest, gen.SendChatResponse] - exportProject *connect_go.Client[gen.ExportProjectRequest, gen.ExportProjectResponse] - loadProject *connect_go.Client[gen.LoadProjectRequest, gen.LoadProjectResponse] - getProject *connect_go.Client[gen.GetProjectRequest, gen.GetProjectResponse] - getProjects *connect_go.Client[gen.GetProjectsRequest, gen.GetProjectsResponse] + addMethod *connect_go.Client[gen.AddMethodRequest, gen.AddMethodResponse] createProject *connect_go.Client[gen.CreateProjectRequest, gen.CreateProjectResponse] deleteProject *connect_go.Client[gen.DeleteProjectRequest, gen.DeleteProjectResponse] enumerateProviders *connect_go.Client[gen.GetProvidersRequest, gen.GetProvidersResponse] + exportProject *connect_go.Client[gen.ExportProjectRequest, gen.ExportProjectResponse] + generateAIStub *connect_go.Client[gen.GenerateAIStubRequest, gen.GenerateCode] + getGRPCServerInfo *connect_go.Client[gen.GetGRPCServerInfoRequest, gen.GetGRPCServerInfoResponse] getNodeInfo *connect_go.Client[gen.GetNodeInfoRequest, gen.GetNodeInfoResponse] - saveProject *connect_go.Client[gen.SaveProjectRequest, gen.SaveProjectResponse] + getProject *connect_go.Client[gen.GetProjectRequest, gen.GetProjectResponse] + getProjectTypes *connect_go.Client[gen.GetProjectTypesRequest, gen.ProjectTypes] + getProjects *connect_go.Client[gen.GetProjectsRequest, gen.GetProjectsResponse] + getRunningWorkflows *connect_go.Client[gen.GetRunningWorkflowsRequest, gen.GetRunningWorkflowResponse] + getWorkflowRuns *connect_go.Client[gen.GetWorkflowRunsRequest, gen.GetWorkflowRunsResponse] + loadProject *connect_go.Client[gen.LoadProjectRequest, gen.LoadProjectResponse] + newNode *connect_go.Client[gen.NewNodeRequest, gen.NewNodeResponse] + runGRPCMethod *connect_go.Client[gen.RunGRPCMethodRequest, gen.NodeExecution] runWorkflow *connect_go.Client[gen.RunWorkflowRequest, gen.NodeExecution] + saveProject *connect_go.Client[gen.SaveProjectRequest, gen.SaveProjectResponse] stopWorkflow *connect_go.Client[gen.StopWorkflowRequest, gen.StopWorkflowResponse] - getWorkflowRuns *connect_go.Client[gen.GetWorkflowRunsRequest, gen.GetWorkflowRunsResponse] - getRunningWorkflows *connect_go.Client[gen.GetRunningWorkflowsRequest, gen.GetRunningWorkflowResponse] } -// NewNode calls project.ProjectService.NewNode. -func (c *projectServiceClient) NewNode(ctx context.Context, req *connect_go.Request[gen.NewNodeRequest]) (*connect_go.Response[gen.NewNodeResponse], error) { - return c.newNode.CallUnary(ctx, req) +// AddMethod calls project.ProjectService.AddMethod. +func (c *projectServiceClient) AddMethod(ctx context.Context, req *connect_go.Request[gen.AddMethodRequest]) (*connect_go.Response[gen.AddMethodResponse], error) { + return c.addMethod.CallUnary(ctx, req) } -// GetProjectTypes calls project.ProjectService.GetProjectTypes. -func (c *projectServiceClient) GetProjectTypes(ctx context.Context, req *connect_go.Request[gen.GetProjectTypesRequest]) (*connect_go.Response[gen.ProjectTypes], error) { - return c.getProjectTypes.CallUnary(ctx, req) +// CreateProject calls project.ProjectService.CreateProject. +func (c *projectServiceClient) CreateProject(ctx context.Context, req *connect_go.Request[gen.CreateProjectRequest]) (*connect_go.Response[gen.CreateProjectResponse], error) { + return c.createProject.CallUnary(ctx, req) } -// SendChat calls project.ProjectService.SendChat. -func (c *projectServiceClient) SendChat(ctx context.Context, req *connect_go.Request[gen.SendChatRequest]) (*connect_go.ServerStreamForClient[gen.SendChatResponse], error) { - return c.sendChat.CallServerStream(ctx, req) +// DeleteProject calls project.ProjectService.DeleteProject. +func (c *projectServiceClient) DeleteProject(ctx context.Context, req *connect_go.Request[gen.DeleteProjectRequest]) (*connect_go.Response[gen.DeleteProjectResponse], error) { + return c.deleteProject.CallUnary(ctx, req) +} + +// EnumerateProviders calls project.ProjectService.EnumerateProviders. +func (c *projectServiceClient) EnumerateProviders(ctx context.Context, req *connect_go.Request[gen.GetProvidersRequest]) (*connect_go.Response[gen.GetProvidersResponse], error) { + return c.enumerateProviders.CallUnary(ctx, req) } // ExportProject calls project.ProjectService.ExportProject. @@ -236,9 +270,19 @@ func (c *projectServiceClient) ExportProject(ctx context.Context, req *connect_g return c.exportProject.CallUnary(ctx, req) } -// LoadProject calls project.ProjectService.LoadProject. -func (c *projectServiceClient) LoadProject(ctx context.Context, req *connect_go.Request[gen.LoadProjectRequest]) (*connect_go.Response[gen.LoadProjectResponse], error) { - return c.loadProject.CallUnary(ctx, req) +// GenerateAIStub calls project.ProjectService.GenerateAIStub. +func (c *projectServiceClient) GenerateAIStub(ctx context.Context, req *connect_go.Request[gen.GenerateAIStubRequest]) (*connect_go.Response[gen.GenerateCode], error) { + return c.generateAIStub.CallUnary(ctx, req) +} + +// GetGRPCServerInfo calls project.ProjectService.GetGRPCServerInfo. +func (c *projectServiceClient) GetGRPCServerInfo(ctx context.Context, req *connect_go.Request[gen.GetGRPCServerInfoRequest]) (*connect_go.Response[gen.GetGRPCServerInfoResponse], error) { + return c.getGRPCServerInfo.CallUnary(ctx, req) +} + +// GetNodeInfo calls project.ProjectService.GetNodeInfo. +func (c *projectServiceClient) GetNodeInfo(ctx context.Context, req *connect_go.Request[gen.GetNodeInfoRequest]) (*connect_go.Response[gen.GetNodeInfoResponse], error) { + return c.getNodeInfo.CallUnary(ctx, req) } // GetProject calls project.ProjectService.GetProject. @@ -246,34 +290,39 @@ func (c *projectServiceClient) GetProject(ctx context.Context, req *connect_go.R return c.getProject.CallUnary(ctx, req) } +// GetProjectTypes calls project.ProjectService.GetProjectTypes. +func (c *projectServiceClient) GetProjectTypes(ctx context.Context, req *connect_go.Request[gen.GetProjectTypesRequest]) (*connect_go.Response[gen.ProjectTypes], error) { + return c.getProjectTypes.CallUnary(ctx, req) +} + // GetProjects calls project.ProjectService.GetProjects. func (c *projectServiceClient) GetProjects(ctx context.Context, req *connect_go.Request[gen.GetProjectsRequest]) (*connect_go.Response[gen.GetProjectsResponse], error) { return c.getProjects.CallUnary(ctx, req) } -// CreateProject calls project.ProjectService.CreateProject. -func (c *projectServiceClient) CreateProject(ctx context.Context, req *connect_go.Request[gen.CreateProjectRequest]) (*connect_go.Response[gen.CreateProjectResponse], error) { - return c.createProject.CallUnary(ctx, req) +// GetRunningWorkflows calls project.ProjectService.GetRunningWorkflows. +func (c *projectServiceClient) GetRunningWorkflows(ctx context.Context, req *connect_go.Request[gen.GetRunningWorkflowsRequest]) (*connect_go.Response[gen.GetRunningWorkflowResponse], error) { + return c.getRunningWorkflows.CallUnary(ctx, req) } -// DeleteProject calls project.ProjectService.DeleteProject. -func (c *projectServiceClient) DeleteProject(ctx context.Context, req *connect_go.Request[gen.DeleteProjectRequest]) (*connect_go.Response[gen.DeleteProjectResponse], error) { - return c.deleteProject.CallUnary(ctx, req) +// GetWorkflowRuns calls project.ProjectService.GetWorkflowRuns. +func (c *projectServiceClient) GetWorkflowRuns(ctx context.Context, req *connect_go.Request[gen.GetWorkflowRunsRequest]) (*connect_go.Response[gen.GetWorkflowRunsResponse], error) { + return c.getWorkflowRuns.CallUnary(ctx, req) } -// EnumerateProviders calls project.ProjectService.EnumerateProviders. -func (c *projectServiceClient) EnumerateProviders(ctx context.Context, req *connect_go.Request[gen.GetProvidersRequest]) (*connect_go.Response[gen.GetProvidersResponse], error) { - return c.enumerateProviders.CallUnary(ctx, req) +// LoadProject calls project.ProjectService.LoadProject. +func (c *projectServiceClient) LoadProject(ctx context.Context, req *connect_go.Request[gen.LoadProjectRequest]) (*connect_go.Response[gen.LoadProjectResponse], error) { + return c.loadProject.CallUnary(ctx, req) } -// GetNodeInfo calls project.ProjectService.GetNodeInfo. -func (c *projectServiceClient) GetNodeInfo(ctx context.Context, req *connect_go.Request[gen.GetNodeInfoRequest]) (*connect_go.Response[gen.GetNodeInfoResponse], error) { - return c.getNodeInfo.CallUnary(ctx, req) +// NewNode calls project.ProjectService.NewNode. +func (c *projectServiceClient) NewNode(ctx context.Context, req *connect_go.Request[gen.NewNodeRequest]) (*connect_go.Response[gen.NewNodeResponse], error) { + return c.newNode.CallUnary(ctx, req) } -// SaveProject calls project.ProjectService.SaveProject. -func (c *projectServiceClient) SaveProject(ctx context.Context, req *connect_go.Request[gen.SaveProjectRequest]) (*connect_go.Response[gen.SaveProjectResponse], error) { - return c.saveProject.CallUnary(ctx, req) +// RunGRPCMethod calls project.ProjectService.RunGRPCMethod. +func (c *projectServiceClient) RunGRPCMethod(ctx context.Context, req *connect_go.Request[gen.RunGRPCMethodRequest]) (*connect_go.ServerStreamForClient[gen.NodeExecution], error) { + return c.runGRPCMethod.CallServerStream(ctx, req) } // RunWorkflow calls project.ProjectService.RunWorkflow. @@ -281,41 +330,37 @@ func (c *projectServiceClient) RunWorkflow(ctx context.Context, req *connect_go. return c.runWorkflow.CallServerStream(ctx, req) } +// SaveProject calls project.ProjectService.SaveProject. +func (c *projectServiceClient) SaveProject(ctx context.Context, req *connect_go.Request[gen.SaveProjectRequest]) (*connect_go.Response[gen.SaveProjectResponse], error) { + return c.saveProject.CallUnary(ctx, req) +} + // StopWorkflow calls project.ProjectService.StopWorkflow. func (c *projectServiceClient) StopWorkflow(ctx context.Context, req *connect_go.Request[gen.StopWorkflowRequest]) (*connect_go.Response[gen.StopWorkflowResponse], error) { return c.stopWorkflow.CallUnary(ctx, req) } -// GetWorkflowRuns calls project.ProjectService.GetWorkflowRuns. -func (c *projectServiceClient) GetWorkflowRuns(ctx context.Context, req *connect_go.Request[gen.GetWorkflowRunsRequest]) (*connect_go.Response[gen.GetWorkflowRunsResponse], error) { - return c.getWorkflowRuns.CallUnary(ctx, req) -} - -// GetRunningWorkflows calls project.ProjectService.GetRunningWorkflows. -func (c *projectServiceClient) GetRunningWorkflows(ctx context.Context, req *connect_go.Request[gen.GetRunningWorkflowsRequest]) (*connect_go.Response[gen.GetRunningWorkflowResponse], error) { - return c.getRunningWorkflows.CallUnary(ctx, req) -} - // ProjectServiceHandler is an implementation of the project.ProjectService service. type ProjectServiceHandler interface { - NewNode(context.Context, *connect_go.Request[gen.NewNodeRequest]) (*connect_go.Response[gen.NewNodeResponse], error) - GetProjectTypes(context.Context, *connect_go.Request[gen.GetProjectTypesRequest]) (*connect_go.Response[gen.ProjectTypes], error) - // TODO breadchris unfortunately this is needed because of the buf fetch transport not supporting streaming - // the suggestion is to build a custom transport that uses websockets https://github.com/bufbuild/connect-es/issues/366 - SendChat(context.Context, *connect_go.Request[gen.SendChatRequest], *connect_go.ServerStream[gen.SendChatResponse]) error - ExportProject(context.Context, *connect_go.Request[gen.ExportProjectRequest]) (*connect_go.Response[gen.ExportProjectResponse], error) - LoadProject(context.Context, *connect_go.Request[gen.LoadProjectRequest]) (*connect_go.Response[gen.LoadProjectResponse], error) - GetProject(context.Context, *connect_go.Request[gen.GetProjectRequest]) (*connect_go.Response[gen.GetProjectResponse], error) - GetProjects(context.Context, *connect_go.Request[gen.GetProjectsRequest]) (*connect_go.Response[gen.GetProjectsResponse], error) + AddMethod(context.Context, *connect_go.Request[gen.AddMethodRequest]) (*connect_go.Response[gen.AddMethodResponse], error) CreateProject(context.Context, *connect_go.Request[gen.CreateProjectRequest]) (*connect_go.Response[gen.CreateProjectResponse], error) DeleteProject(context.Context, *connect_go.Request[gen.DeleteProjectRequest]) (*connect_go.Response[gen.DeleteProjectResponse], error) EnumerateProviders(context.Context, *connect_go.Request[gen.GetProvidersRequest]) (*connect_go.Response[gen.GetProvidersResponse], error) + ExportProject(context.Context, *connect_go.Request[gen.ExportProjectRequest]) (*connect_go.Response[gen.ExportProjectResponse], error) + GenerateAIStub(context.Context, *connect_go.Request[gen.GenerateAIStubRequest]) (*connect_go.Response[gen.GenerateCode], error) + GetGRPCServerInfo(context.Context, *connect_go.Request[gen.GetGRPCServerInfoRequest]) (*connect_go.Response[gen.GetGRPCServerInfoResponse], error) GetNodeInfo(context.Context, *connect_go.Request[gen.GetNodeInfoRequest]) (*connect_go.Response[gen.GetNodeInfoResponse], error) - SaveProject(context.Context, *connect_go.Request[gen.SaveProjectRequest]) (*connect_go.Response[gen.SaveProjectResponse], error) + GetProject(context.Context, *connect_go.Request[gen.GetProjectRequest]) (*connect_go.Response[gen.GetProjectResponse], error) + GetProjectTypes(context.Context, *connect_go.Request[gen.GetProjectTypesRequest]) (*connect_go.Response[gen.ProjectTypes], error) + GetProjects(context.Context, *connect_go.Request[gen.GetProjectsRequest]) (*connect_go.Response[gen.GetProjectsResponse], error) + GetRunningWorkflows(context.Context, *connect_go.Request[gen.GetRunningWorkflowsRequest]) (*connect_go.Response[gen.GetRunningWorkflowResponse], error) + GetWorkflowRuns(context.Context, *connect_go.Request[gen.GetWorkflowRunsRequest]) (*connect_go.Response[gen.GetWorkflowRunsResponse], error) + LoadProject(context.Context, *connect_go.Request[gen.LoadProjectRequest]) (*connect_go.Response[gen.LoadProjectResponse], error) + NewNode(context.Context, *connect_go.Request[gen.NewNodeRequest]) (*connect_go.Response[gen.NewNodeResponse], error) + RunGRPCMethod(context.Context, *connect_go.Request[gen.RunGRPCMethodRequest], *connect_go.ServerStream[gen.NodeExecution]) error RunWorkflow(context.Context, *connect_go.Request[gen.RunWorkflowRequest], *connect_go.ServerStream[gen.NodeExecution]) error + SaveProject(context.Context, *connect_go.Request[gen.SaveProjectRequest]) (*connect_go.Response[gen.SaveProjectResponse], error) StopWorkflow(context.Context, *connect_go.Request[gen.StopWorkflowRequest]) (*connect_go.Response[gen.StopWorkflowResponse], error) - GetWorkflowRuns(context.Context, *connect_go.Request[gen.GetWorkflowRunsRequest]) (*connect_go.Response[gen.GetWorkflowRunsResponse], error) - GetRunningWorkflows(context.Context, *connect_go.Request[gen.GetRunningWorkflowsRequest]) (*connect_go.Response[gen.GetRunningWorkflowResponse], error) } // NewProjectServiceHandler builds an HTTP handler from the service implementation. It returns the @@ -324,19 +369,24 @@ type ProjectServiceHandler interface { // By default, handlers support the Connect, gRPC, and gRPC-Web protocols with the binary Protobuf // and JSON codecs. They also support gzip compression. func NewProjectServiceHandler(svc ProjectServiceHandler, opts ...connect_go.HandlerOption) (string, http.Handler) { - projectServiceNewNodeHandler := connect_go.NewUnaryHandler( - ProjectServiceNewNodeProcedure, - svc.NewNode, + projectServiceAddMethodHandler := connect_go.NewUnaryHandler( + ProjectServiceAddMethodProcedure, + svc.AddMethod, opts..., ) - projectServiceGetProjectTypesHandler := connect_go.NewUnaryHandler( - ProjectServiceGetProjectTypesProcedure, - svc.GetProjectTypes, + projectServiceCreateProjectHandler := connect_go.NewUnaryHandler( + ProjectServiceCreateProjectProcedure, + svc.CreateProject, opts..., ) - projectServiceSendChatHandler := connect_go.NewServerStreamHandler( - ProjectServiceSendChatProcedure, - svc.SendChat, + projectServiceDeleteProjectHandler := connect_go.NewUnaryHandler( + ProjectServiceDeleteProjectProcedure, + svc.DeleteProject, + opts..., + ) + projectServiceEnumerateProvidersHandler := connect_go.NewUnaryHandler( + ProjectServiceEnumerateProvidersProcedure, + svc.EnumerateProviders, opts..., ) projectServiceExportProjectHandler := connect_go.NewUnaryHandler( @@ -344,9 +394,19 @@ func NewProjectServiceHandler(svc ProjectServiceHandler, opts ...connect_go.Hand svc.ExportProject, opts..., ) - projectServiceLoadProjectHandler := connect_go.NewUnaryHandler( - ProjectServiceLoadProjectProcedure, - svc.LoadProject, + projectServiceGenerateAIStubHandler := connect_go.NewUnaryHandler( + ProjectServiceGenerateAIStubProcedure, + svc.GenerateAIStub, + opts..., + ) + projectServiceGetGRPCServerInfoHandler := connect_go.NewUnaryHandler( + ProjectServiceGetGRPCServerInfoProcedure, + svc.GetGRPCServerInfo, + opts..., + ) + projectServiceGetNodeInfoHandler := connect_go.NewUnaryHandler( + ProjectServiceGetNodeInfoProcedure, + svc.GetNodeInfo, opts..., ) projectServiceGetProjectHandler := connect_go.NewUnaryHandler( @@ -354,34 +414,39 @@ func NewProjectServiceHandler(svc ProjectServiceHandler, opts ...connect_go.Hand svc.GetProject, opts..., ) + projectServiceGetProjectTypesHandler := connect_go.NewUnaryHandler( + ProjectServiceGetProjectTypesProcedure, + svc.GetProjectTypes, + opts..., + ) projectServiceGetProjectsHandler := connect_go.NewUnaryHandler( ProjectServiceGetProjectsProcedure, svc.GetProjects, opts..., ) - projectServiceCreateProjectHandler := connect_go.NewUnaryHandler( - ProjectServiceCreateProjectProcedure, - svc.CreateProject, + projectServiceGetRunningWorkflowsHandler := connect_go.NewUnaryHandler( + ProjectServiceGetRunningWorkflowsProcedure, + svc.GetRunningWorkflows, opts..., ) - projectServiceDeleteProjectHandler := connect_go.NewUnaryHandler( - ProjectServiceDeleteProjectProcedure, - svc.DeleteProject, + projectServiceGetWorkflowRunsHandler := connect_go.NewUnaryHandler( + ProjectServiceGetWorkflowRunsProcedure, + svc.GetWorkflowRuns, opts..., ) - projectServiceEnumerateProvidersHandler := connect_go.NewUnaryHandler( - ProjectServiceEnumerateProvidersProcedure, - svc.EnumerateProviders, + projectServiceLoadProjectHandler := connect_go.NewUnaryHandler( + ProjectServiceLoadProjectProcedure, + svc.LoadProject, opts..., ) - projectServiceGetNodeInfoHandler := connect_go.NewUnaryHandler( - ProjectServiceGetNodeInfoProcedure, - svc.GetNodeInfo, + projectServiceNewNodeHandler := connect_go.NewUnaryHandler( + ProjectServiceNewNodeProcedure, + svc.NewNode, opts..., ) - projectServiceSaveProjectHandler := connect_go.NewUnaryHandler( - ProjectServiceSaveProjectProcedure, - svc.SaveProject, + projectServiceRunGRPCMethodHandler := connect_go.NewServerStreamHandler( + ProjectServiceRunGRPCMethodProcedure, + svc.RunGRPCMethod, opts..., ) projectServiceRunWorkflowHandler := connect_go.NewServerStreamHandler( @@ -389,55 +454,56 @@ func NewProjectServiceHandler(svc ProjectServiceHandler, opts ...connect_go.Hand svc.RunWorkflow, opts..., ) + projectServiceSaveProjectHandler := connect_go.NewUnaryHandler( + ProjectServiceSaveProjectProcedure, + svc.SaveProject, + opts..., + ) projectServiceStopWorkflowHandler := connect_go.NewUnaryHandler( ProjectServiceStopWorkflowProcedure, svc.StopWorkflow, opts..., ) - projectServiceGetWorkflowRunsHandler := connect_go.NewUnaryHandler( - ProjectServiceGetWorkflowRunsProcedure, - svc.GetWorkflowRuns, - opts..., - ) - projectServiceGetRunningWorkflowsHandler := connect_go.NewUnaryHandler( - ProjectServiceGetRunningWorkflowsProcedure, - svc.GetRunningWorkflows, - opts..., - ) return "/project.ProjectService/", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { switch r.URL.Path { - case ProjectServiceNewNodeProcedure: - projectServiceNewNodeHandler.ServeHTTP(w, r) - case ProjectServiceGetProjectTypesProcedure: - projectServiceGetProjectTypesHandler.ServeHTTP(w, r) - case ProjectServiceSendChatProcedure: - projectServiceSendChatHandler.ServeHTTP(w, r) - case ProjectServiceExportProjectProcedure: - projectServiceExportProjectHandler.ServeHTTP(w, r) - case ProjectServiceLoadProjectProcedure: - projectServiceLoadProjectHandler.ServeHTTP(w, r) - case ProjectServiceGetProjectProcedure: - projectServiceGetProjectHandler.ServeHTTP(w, r) - case ProjectServiceGetProjectsProcedure: - projectServiceGetProjectsHandler.ServeHTTP(w, r) + case ProjectServiceAddMethodProcedure: + projectServiceAddMethodHandler.ServeHTTP(w, r) case ProjectServiceCreateProjectProcedure: projectServiceCreateProjectHandler.ServeHTTP(w, r) case ProjectServiceDeleteProjectProcedure: projectServiceDeleteProjectHandler.ServeHTTP(w, r) case ProjectServiceEnumerateProvidersProcedure: projectServiceEnumerateProvidersHandler.ServeHTTP(w, r) + case ProjectServiceExportProjectProcedure: + projectServiceExportProjectHandler.ServeHTTP(w, r) + case ProjectServiceGenerateAIStubProcedure: + projectServiceGenerateAIStubHandler.ServeHTTP(w, r) + case ProjectServiceGetGRPCServerInfoProcedure: + projectServiceGetGRPCServerInfoHandler.ServeHTTP(w, r) case ProjectServiceGetNodeInfoProcedure: projectServiceGetNodeInfoHandler.ServeHTTP(w, r) - case ProjectServiceSaveProjectProcedure: - projectServiceSaveProjectHandler.ServeHTTP(w, r) + case ProjectServiceGetProjectProcedure: + projectServiceGetProjectHandler.ServeHTTP(w, r) + case ProjectServiceGetProjectTypesProcedure: + projectServiceGetProjectTypesHandler.ServeHTTP(w, r) + case ProjectServiceGetProjectsProcedure: + projectServiceGetProjectsHandler.ServeHTTP(w, r) + case ProjectServiceGetRunningWorkflowsProcedure: + projectServiceGetRunningWorkflowsHandler.ServeHTTP(w, r) + case ProjectServiceGetWorkflowRunsProcedure: + projectServiceGetWorkflowRunsHandler.ServeHTTP(w, r) + case ProjectServiceLoadProjectProcedure: + projectServiceLoadProjectHandler.ServeHTTP(w, r) + case ProjectServiceNewNodeProcedure: + projectServiceNewNodeHandler.ServeHTTP(w, r) + case ProjectServiceRunGRPCMethodProcedure: + projectServiceRunGRPCMethodHandler.ServeHTTP(w, r) case ProjectServiceRunWorkflowProcedure: projectServiceRunWorkflowHandler.ServeHTTP(w, r) + case ProjectServiceSaveProjectProcedure: + projectServiceSaveProjectHandler.ServeHTTP(w, r) case ProjectServiceStopWorkflowProcedure: projectServiceStopWorkflowHandler.ServeHTTP(w, r) - case ProjectServiceGetWorkflowRunsProcedure: - projectServiceGetWorkflowRunsHandler.ServeHTTP(w, r) - case ProjectServiceGetRunningWorkflowsProcedure: - projectServiceGetRunningWorkflowsHandler.ServeHTTP(w, r) default: http.NotFound(w, r) } @@ -447,66 +513,78 @@ func NewProjectServiceHandler(svc ProjectServiceHandler, opts ...connect_go.Hand // UnimplementedProjectServiceHandler returns CodeUnimplemented from all methods. type UnimplementedProjectServiceHandler struct{} -func (UnimplementedProjectServiceHandler) NewNode(context.Context, *connect_go.Request[gen.NewNodeRequest]) (*connect_go.Response[gen.NewNodeResponse], error) { - return nil, connect_go.NewError(connect_go.CodeUnimplemented, errors.New("project.ProjectService.NewNode is not implemented")) +func (UnimplementedProjectServiceHandler) AddMethod(context.Context, *connect_go.Request[gen.AddMethodRequest]) (*connect_go.Response[gen.AddMethodResponse], error) { + return nil, connect_go.NewError(connect_go.CodeUnimplemented, errors.New("project.ProjectService.AddMethod is not implemented")) } -func (UnimplementedProjectServiceHandler) GetProjectTypes(context.Context, *connect_go.Request[gen.GetProjectTypesRequest]) (*connect_go.Response[gen.ProjectTypes], error) { - return nil, connect_go.NewError(connect_go.CodeUnimplemented, errors.New("project.ProjectService.GetProjectTypes is not implemented")) +func (UnimplementedProjectServiceHandler) CreateProject(context.Context, *connect_go.Request[gen.CreateProjectRequest]) (*connect_go.Response[gen.CreateProjectResponse], error) { + return nil, connect_go.NewError(connect_go.CodeUnimplemented, errors.New("project.ProjectService.CreateProject is not implemented")) } -func (UnimplementedProjectServiceHandler) SendChat(context.Context, *connect_go.Request[gen.SendChatRequest], *connect_go.ServerStream[gen.SendChatResponse]) error { - return connect_go.NewError(connect_go.CodeUnimplemented, errors.New("project.ProjectService.SendChat is not implemented")) +func (UnimplementedProjectServiceHandler) DeleteProject(context.Context, *connect_go.Request[gen.DeleteProjectRequest]) (*connect_go.Response[gen.DeleteProjectResponse], error) { + return nil, connect_go.NewError(connect_go.CodeUnimplemented, errors.New("project.ProjectService.DeleteProject is not implemented")) +} + +func (UnimplementedProjectServiceHandler) EnumerateProviders(context.Context, *connect_go.Request[gen.GetProvidersRequest]) (*connect_go.Response[gen.GetProvidersResponse], error) { + return nil, connect_go.NewError(connect_go.CodeUnimplemented, errors.New("project.ProjectService.EnumerateProviders is not implemented")) } func (UnimplementedProjectServiceHandler) ExportProject(context.Context, *connect_go.Request[gen.ExportProjectRequest]) (*connect_go.Response[gen.ExportProjectResponse], error) { return nil, connect_go.NewError(connect_go.CodeUnimplemented, errors.New("project.ProjectService.ExportProject is not implemented")) } -func (UnimplementedProjectServiceHandler) LoadProject(context.Context, *connect_go.Request[gen.LoadProjectRequest]) (*connect_go.Response[gen.LoadProjectResponse], error) { - return nil, connect_go.NewError(connect_go.CodeUnimplemented, errors.New("project.ProjectService.LoadProject is not implemented")) +func (UnimplementedProjectServiceHandler) GenerateAIStub(context.Context, *connect_go.Request[gen.GenerateAIStubRequest]) (*connect_go.Response[gen.GenerateCode], error) { + return nil, connect_go.NewError(connect_go.CodeUnimplemented, errors.New("project.ProjectService.GenerateAIStub is not implemented")) +} + +func (UnimplementedProjectServiceHandler) GetGRPCServerInfo(context.Context, *connect_go.Request[gen.GetGRPCServerInfoRequest]) (*connect_go.Response[gen.GetGRPCServerInfoResponse], error) { + return nil, connect_go.NewError(connect_go.CodeUnimplemented, errors.New("project.ProjectService.GetGRPCServerInfo is not implemented")) +} + +func (UnimplementedProjectServiceHandler) GetNodeInfo(context.Context, *connect_go.Request[gen.GetNodeInfoRequest]) (*connect_go.Response[gen.GetNodeInfoResponse], error) { + return nil, connect_go.NewError(connect_go.CodeUnimplemented, errors.New("project.ProjectService.GetNodeInfo is not implemented")) } func (UnimplementedProjectServiceHandler) GetProject(context.Context, *connect_go.Request[gen.GetProjectRequest]) (*connect_go.Response[gen.GetProjectResponse], error) { return nil, connect_go.NewError(connect_go.CodeUnimplemented, errors.New("project.ProjectService.GetProject is not implemented")) } +func (UnimplementedProjectServiceHandler) GetProjectTypes(context.Context, *connect_go.Request[gen.GetProjectTypesRequest]) (*connect_go.Response[gen.ProjectTypes], error) { + return nil, connect_go.NewError(connect_go.CodeUnimplemented, errors.New("project.ProjectService.GetProjectTypes is not implemented")) +} + func (UnimplementedProjectServiceHandler) GetProjects(context.Context, *connect_go.Request[gen.GetProjectsRequest]) (*connect_go.Response[gen.GetProjectsResponse], error) { return nil, connect_go.NewError(connect_go.CodeUnimplemented, errors.New("project.ProjectService.GetProjects is not implemented")) } -func (UnimplementedProjectServiceHandler) CreateProject(context.Context, *connect_go.Request[gen.CreateProjectRequest]) (*connect_go.Response[gen.CreateProjectResponse], error) { - return nil, connect_go.NewError(connect_go.CodeUnimplemented, errors.New("project.ProjectService.CreateProject is not implemented")) +func (UnimplementedProjectServiceHandler) GetRunningWorkflows(context.Context, *connect_go.Request[gen.GetRunningWorkflowsRequest]) (*connect_go.Response[gen.GetRunningWorkflowResponse], error) { + return nil, connect_go.NewError(connect_go.CodeUnimplemented, errors.New("project.ProjectService.GetRunningWorkflows is not implemented")) } -func (UnimplementedProjectServiceHandler) DeleteProject(context.Context, *connect_go.Request[gen.DeleteProjectRequest]) (*connect_go.Response[gen.DeleteProjectResponse], error) { - return nil, connect_go.NewError(connect_go.CodeUnimplemented, errors.New("project.ProjectService.DeleteProject is not implemented")) +func (UnimplementedProjectServiceHandler) GetWorkflowRuns(context.Context, *connect_go.Request[gen.GetWorkflowRunsRequest]) (*connect_go.Response[gen.GetWorkflowRunsResponse], error) { + return nil, connect_go.NewError(connect_go.CodeUnimplemented, errors.New("project.ProjectService.GetWorkflowRuns is not implemented")) } -func (UnimplementedProjectServiceHandler) EnumerateProviders(context.Context, *connect_go.Request[gen.GetProvidersRequest]) (*connect_go.Response[gen.GetProvidersResponse], error) { - return nil, connect_go.NewError(connect_go.CodeUnimplemented, errors.New("project.ProjectService.EnumerateProviders is not implemented")) +func (UnimplementedProjectServiceHandler) LoadProject(context.Context, *connect_go.Request[gen.LoadProjectRequest]) (*connect_go.Response[gen.LoadProjectResponse], error) { + return nil, connect_go.NewError(connect_go.CodeUnimplemented, errors.New("project.ProjectService.LoadProject is not implemented")) } -func (UnimplementedProjectServiceHandler) GetNodeInfo(context.Context, *connect_go.Request[gen.GetNodeInfoRequest]) (*connect_go.Response[gen.GetNodeInfoResponse], error) { - return nil, connect_go.NewError(connect_go.CodeUnimplemented, errors.New("project.ProjectService.GetNodeInfo is not implemented")) +func (UnimplementedProjectServiceHandler) NewNode(context.Context, *connect_go.Request[gen.NewNodeRequest]) (*connect_go.Response[gen.NewNodeResponse], error) { + return nil, connect_go.NewError(connect_go.CodeUnimplemented, errors.New("project.ProjectService.NewNode is not implemented")) } -func (UnimplementedProjectServiceHandler) SaveProject(context.Context, *connect_go.Request[gen.SaveProjectRequest]) (*connect_go.Response[gen.SaveProjectResponse], error) { - return nil, connect_go.NewError(connect_go.CodeUnimplemented, errors.New("project.ProjectService.SaveProject is not implemented")) +func (UnimplementedProjectServiceHandler) RunGRPCMethod(context.Context, *connect_go.Request[gen.RunGRPCMethodRequest], *connect_go.ServerStream[gen.NodeExecution]) error { + return connect_go.NewError(connect_go.CodeUnimplemented, errors.New("project.ProjectService.RunGRPCMethod is not implemented")) } func (UnimplementedProjectServiceHandler) RunWorkflow(context.Context, *connect_go.Request[gen.RunWorkflowRequest], *connect_go.ServerStream[gen.NodeExecution]) error { return connect_go.NewError(connect_go.CodeUnimplemented, errors.New("project.ProjectService.RunWorkflow is not implemented")) } -func (UnimplementedProjectServiceHandler) StopWorkflow(context.Context, *connect_go.Request[gen.StopWorkflowRequest]) (*connect_go.Response[gen.StopWorkflowResponse], error) { - return nil, connect_go.NewError(connect_go.CodeUnimplemented, errors.New("project.ProjectService.StopWorkflow is not implemented")) -} - -func (UnimplementedProjectServiceHandler) GetWorkflowRuns(context.Context, *connect_go.Request[gen.GetWorkflowRunsRequest]) (*connect_go.Response[gen.GetWorkflowRunsResponse], error) { - return nil, connect_go.NewError(connect_go.CodeUnimplemented, errors.New("project.ProjectService.GetWorkflowRuns is not implemented")) +func (UnimplementedProjectServiceHandler) SaveProject(context.Context, *connect_go.Request[gen.SaveProjectRequest]) (*connect_go.Response[gen.SaveProjectResponse], error) { + return nil, connect_go.NewError(connect_go.CodeUnimplemented, errors.New("project.ProjectService.SaveProject is not implemented")) } -func (UnimplementedProjectServiceHandler) GetRunningWorkflows(context.Context, *connect_go.Request[gen.GetRunningWorkflowsRequest]) (*connect_go.Response[gen.GetRunningWorkflowResponse], error) { - return nil, connect_go.NewError(connect_go.CodeUnimplemented, errors.New("project.ProjectService.GetRunningWorkflows is not implemented")) +func (UnimplementedProjectServiceHandler) StopWorkflow(context.Context, *connect_go.Request[gen.StopWorkflowRequest]) (*connect_go.Response[gen.StopWorkflowResponse], error) { + return nil, connect_go.NewError(connect_go.CodeUnimplemented, errors.New("project.ProjectService.StopWorkflow is not implemented")) } diff --git a/gen/project.pb.go b/gen/project.pb.go index 216e37c..549e08a 100644 --- a/gen/project.pb.go +++ b/gen/project.pb.go @@ -70,18 +70,19 @@ func (ProviderState) EnumDescriptor() ([]byte, []int) { return file_project_proto_rawDescGZIP(), []int{0} } -type Project struct { +type AddMethodRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` - Graph *Graph `protobuf:"bytes,3,opt,name=graph,proto3" json:"graph,omitempty"` + File string `protobuf:"bytes,1,opt,name=file,proto3" json:"file,omitempty"` + Package string `protobuf:"bytes,2,opt,name=package,proto3" json:"package,omitempty"` + Service string `protobuf:"bytes,3,opt,name=service,proto3" json:"service,omitempty"` + Method string `protobuf:"bytes,4,opt,name=method,proto3" json:"method,omitempty"` } -func (x *Project) Reset() { - *x = Project{} +func (x *AddMethodRequest) Reset() { + *x = AddMethodRequest{} if protoimpl.UnsafeEnabled { mi := &file_project_proto_msgTypes[0] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -89,13 +90,13 @@ func (x *Project) Reset() { } } -func (x *Project) String() string { +func (x *AddMethodRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*Project) ProtoMessage() {} +func (*AddMethodRequest) ProtoMessage() {} -func (x *Project) ProtoReflect() protoreflect.Message { +func (x *AddMethodRequest) ProtoReflect() protoreflect.Message { mi := &file_project_proto_msgTypes[0] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -107,42 +108,47 @@ func (x *Project) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use Project.ProtoReflect.Descriptor instead. -func (*Project) Descriptor() ([]byte, []int) { +// Deprecated: Use AddMethodRequest.ProtoReflect.Descriptor instead. +func (*AddMethodRequest) Descriptor() ([]byte, []int) { return file_project_proto_rawDescGZIP(), []int{0} } -func (x *Project) GetId() string { +func (x *AddMethodRequest) GetFile() string { if x != nil { - return x.Id + return x.File } return "" } -func (x *Project) GetName() string { +func (x *AddMethodRequest) GetPackage() string { if x != nil { - return x.Name + return x.Package } return "" } -func (x *Project) GetGraph() *Graph { +func (x *AddMethodRequest) GetService() string { if x != nil { - return x.Graph + return x.Service } - return nil + return "" } -type GetRunningWorkflowsRequest struct { +func (x *AddMethodRequest) GetMethod() string { + if x != nil { + return x.Method + } + return "" +} + +type AddMethodResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - - ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"` } -func (x *GetRunningWorkflowsRequest) Reset() { - *x = GetRunningWorkflowsRequest{} +func (x *AddMethodResponse) Reset() { + *x = AddMethodResponse{} if protoimpl.UnsafeEnabled { mi := &file_project_proto_msgTypes[1] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -150,13 +156,13 @@ func (x *GetRunningWorkflowsRequest) Reset() { } } -func (x *GetRunningWorkflowsRequest) String() string { +func (x *AddMethodResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*GetRunningWorkflowsRequest) ProtoMessage() {} +func (*AddMethodResponse) ProtoMessage() {} -func (x *GetRunningWorkflowsRequest) ProtoReflect() protoreflect.Message { +func (x *AddMethodResponse) ProtoReflect() protoreflect.Message { mi := &file_project_proto_msgTypes[1] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -168,28 +174,21 @@ func (x *GetRunningWorkflowsRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use GetRunningWorkflowsRequest.ProtoReflect.Descriptor instead. -func (*GetRunningWorkflowsRequest) Descriptor() ([]byte, []int) { +// Deprecated: Use AddMethodResponse.ProtoReflect.Descriptor instead. +func (*AddMethodResponse) Descriptor() ([]byte, []int) { return file_project_proto_rawDescGZIP(), []int{1} } -func (x *GetRunningWorkflowsRequest) GetProjectId() string { - if x != nil { - return x.ProjectId - } - return "" -} - -type GetRunningWorkflowResponse struct { +type CreateProjectRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Traces []*WorkflowTrace `protobuf:"bytes,1,rep,name=traces,proto3" json:"traces,omitempty"` + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` } -func (x *GetRunningWorkflowResponse) Reset() { - *x = GetRunningWorkflowResponse{} +func (x *CreateProjectRequest) Reset() { + *x = CreateProjectRequest{} if protoimpl.UnsafeEnabled { mi := &file_project_proto_msgTypes[2] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -197,13 +196,13 @@ func (x *GetRunningWorkflowResponse) Reset() { } } -func (x *GetRunningWorkflowResponse) String() string { +func (x *CreateProjectRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*GetRunningWorkflowResponse) ProtoMessage() {} +func (*CreateProjectRequest) ProtoMessage() {} -func (x *GetRunningWorkflowResponse) ProtoReflect() protoreflect.Message { +func (x *CreateProjectRequest) ProtoReflect() protoreflect.Message { mi := &file_project_proto_msgTypes[2] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -215,29 +214,28 @@ func (x *GetRunningWorkflowResponse) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use GetRunningWorkflowResponse.ProtoReflect.Descriptor instead. -func (*GetRunningWorkflowResponse) Descriptor() ([]byte, []int) { +// Deprecated: Use CreateProjectRequest.ProtoReflect.Descriptor instead. +func (*CreateProjectRequest) Descriptor() ([]byte, []int) { return file_project_proto_rawDescGZIP(), []int{2} } -func (x *GetRunningWorkflowResponse) GetTraces() []*WorkflowTrace { +func (x *CreateProjectRequest) GetName() string { if x != nil { - return x.Traces + return x.Name } - return nil + return "" } -type NewNodeRequest struct { +type CreateProjectResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"` - Node *Node `protobuf:"bytes,2,opt,name=node,proto3" json:"node,omitempty"` + Project *Project `protobuf:"bytes,1,opt,name=project,proto3" json:"project,omitempty"` } -func (x *NewNodeRequest) Reset() { - *x = NewNodeRequest{} +func (x *CreateProjectResponse) Reset() { + *x = CreateProjectResponse{} if protoimpl.UnsafeEnabled { mi := &file_project_proto_msgTypes[3] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -245,13 +243,13 @@ func (x *NewNodeRequest) Reset() { } } -func (x *NewNodeRequest) String() string { +func (x *CreateProjectResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*NewNodeRequest) ProtoMessage() {} +func (*CreateProjectResponse) ProtoMessage() {} -func (x *NewNodeRequest) ProtoReflect() protoreflect.Message { +func (x *CreateProjectResponse) ProtoReflect() protoreflect.Message { mi := &file_project_proto_msgTypes[3] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -263,35 +261,28 @@ func (x *NewNodeRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use NewNodeRequest.ProtoReflect.Descriptor instead. -func (*NewNodeRequest) Descriptor() ([]byte, []int) { +// Deprecated: Use CreateProjectResponse.ProtoReflect.Descriptor instead. +func (*CreateProjectResponse) Descriptor() ([]byte, []int) { return file_project_proto_rawDescGZIP(), []int{3} } -func (x *NewNodeRequest) GetProjectId() string { - if x != nil { - return x.ProjectId - } - return "" -} - -func (x *NewNodeRequest) GetNode() *Node { +func (x *CreateProjectResponse) GetProject() *Project { if x != nil { - return x.Node + return x.Project } return nil } -type NewNodeResponse struct { +type Data struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Node *Node `protobuf:"bytes,1,opt,name=node,proto3" json:"node,omitempty"` + Value string `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"` } -func (x *NewNodeResponse) Reset() { - *x = NewNodeResponse{} +func (x *Data) Reset() { + *x = Data{} if protoimpl.UnsafeEnabled { mi := &file_project_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -299,13 +290,13 @@ func (x *NewNodeResponse) Reset() { } } -func (x *NewNodeResponse) String() string { +func (x *Data) String() string { return protoimpl.X.MessageStringOf(x) } -func (*NewNodeResponse) ProtoMessage() {} +func (*Data) ProtoMessage() {} -func (x *NewNodeResponse) ProtoReflect() protoreflect.Message { +func (x *Data) ProtoReflect() protoreflect.Message { mi := &file_project_proto_msgTypes[4] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -317,29 +308,28 @@ func (x *NewNodeResponse) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use NewNodeResponse.ProtoReflect.Descriptor instead. -func (*NewNodeResponse) Descriptor() ([]byte, []int) { +// Deprecated: Use Data.ProtoReflect.Descriptor instead. +func (*Data) Descriptor() ([]byte, []int) { return file_project_proto_rawDescGZIP(), []int{4} } -func (x *NewNodeResponse) GetNode() *Node { +func (x *Data) GetValue() string { if x != nil { - return x.Node + return x.Value } - return nil + return "" } -type ExportProjectRequest struct { +type DeleteProjectRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"` - Path string `protobuf:"bytes,2,opt,name=path,proto3" json:"path,omitempty"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` } -func (x *ExportProjectRequest) Reset() { - *x = ExportProjectRequest{} +func (x *DeleteProjectRequest) Reset() { + *x = DeleteProjectRequest{} if protoimpl.UnsafeEnabled { mi := &file_project_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -347,13 +337,13 @@ func (x *ExportProjectRequest) Reset() { } } -func (x *ExportProjectRequest) String() string { +func (x *DeleteProjectRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ExportProjectRequest) ProtoMessage() {} +func (*DeleteProjectRequest) ProtoMessage() {} -func (x *ExportProjectRequest) ProtoReflect() protoreflect.Message { +func (x *DeleteProjectRequest) ProtoReflect() protoreflect.Message { mi := &file_project_proto_msgTypes[5] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -365,33 +355,28 @@ func (x *ExportProjectRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ExportProjectRequest.ProtoReflect.Descriptor instead. -func (*ExportProjectRequest) Descriptor() ([]byte, []int) { +// Deprecated: Use DeleteProjectRequest.ProtoReflect.Descriptor instead. +func (*DeleteProjectRequest) Descriptor() ([]byte, []int) { return file_project_proto_rawDescGZIP(), []int{5} } -func (x *ExportProjectRequest) GetProjectId() string { - if x != nil { - return x.ProjectId - } - return "" -} - -func (x *ExportProjectRequest) GetPath() string { +func (x *DeleteProjectRequest) GetId() string { if x != nil { - return x.Path + return x.Id } return "" } -type ExportProjectResponse struct { +type DeleteProjectResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields + + Project *Project `protobuf:"bytes,1,opt,name=project,proto3" json:"project,omitempty"` } -func (x *ExportProjectResponse) Reset() { - *x = ExportProjectResponse{} +func (x *DeleteProjectResponse) Reset() { + *x = DeleteProjectResponse{} if protoimpl.UnsafeEnabled { mi := &file_project_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -399,13 +384,13 @@ func (x *ExportProjectResponse) Reset() { } } -func (x *ExportProjectResponse) String() string { +func (x *DeleteProjectResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ExportProjectResponse) ProtoMessage() {} +func (*DeleteProjectResponse) ProtoMessage() {} -func (x *ExportProjectResponse) ProtoReflect() protoreflect.Message { +func (x *DeleteProjectResponse) ProtoReflect() protoreflect.Message { mi := &file_project_proto_msgTypes[6] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -417,21 +402,30 @@ func (x *ExportProjectResponse) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ExportProjectResponse.ProtoReflect.Descriptor instead. -func (*ExportProjectResponse) Descriptor() ([]byte, []int) { +// Deprecated: Use DeleteProjectResponse.ProtoReflect.Descriptor instead. +func (*DeleteProjectResponse) Descriptor() ([]byte, []int) { return file_project_proto_rawDescGZIP(), []int{6} } -type LoadProjectRequest struct { +func (x *DeleteProjectResponse) GetProject() *Project { + if x != nil { + return x.Project + } + return nil +} + +type EnumeratedProvider struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Path string `protobuf:"bytes,1,opt,name=path,proto3" json:"path,omitempty"` + Provider *NodeDetails `protobuf:"bytes,1,opt,name=provider,proto3" json:"provider,omitempty"` + Nodes []*Node `protobuf:"bytes,2,rep,name=nodes,proto3" json:"nodes,omitempty"` + Info *ProviderInfo `protobuf:"bytes,3,opt,name=info,proto3" json:"info,omitempty"` } -func (x *LoadProjectRequest) Reset() { - *x = LoadProjectRequest{} +func (x *EnumeratedProvider) Reset() { + *x = EnumeratedProvider{} if protoimpl.UnsafeEnabled { mi := &file_project_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -439,13 +433,13 @@ func (x *LoadProjectRequest) Reset() { } } -func (x *LoadProjectRequest) String() string { +func (x *EnumeratedProvider) String() string { return protoimpl.X.MessageStringOf(x) } -func (*LoadProjectRequest) ProtoMessage() {} +func (*EnumeratedProvider) ProtoMessage() {} -func (x *LoadProjectRequest) ProtoReflect() protoreflect.Message { +func (x *EnumeratedProvider) ProtoReflect() protoreflect.Message { mi := &file_project_proto_msgTypes[7] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -457,28 +451,43 @@ func (x *LoadProjectRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use LoadProjectRequest.ProtoReflect.Descriptor instead. -func (*LoadProjectRequest) Descriptor() ([]byte, []int) { +// Deprecated: Use EnumeratedProvider.ProtoReflect.Descriptor instead. +func (*EnumeratedProvider) Descriptor() ([]byte, []int) { return file_project_proto_rawDescGZIP(), []int{7} } -func (x *LoadProjectRequest) GetPath() string { +func (x *EnumeratedProvider) GetProvider() *NodeDetails { if x != nil { - return x.Path + return x.Provider } - return "" + return nil } -type LoadProjectResponse struct { +func (x *EnumeratedProvider) GetNodes() []*Node { + if x != nil { + return x.Nodes + } + return nil +} + +func (x *EnumeratedProvider) GetInfo() *ProviderInfo { + if x != nil { + return x.Info + } + return nil +} + +type ExportProjectRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Project *Project `protobuf:"bytes,1,opt,name=project,proto3" json:"project,omitempty"` + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"` + Path string `protobuf:"bytes,2,opt,name=path,proto3" json:"path,omitempty"` } -func (x *LoadProjectResponse) Reset() { - *x = LoadProjectResponse{} +func (x *ExportProjectRequest) Reset() { + *x = ExportProjectRequest{} if protoimpl.UnsafeEnabled { mi := &file_project_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -486,13 +495,13 @@ func (x *LoadProjectResponse) Reset() { } } -func (x *LoadProjectResponse) String() string { +func (x *ExportProjectRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*LoadProjectResponse) ProtoMessage() {} +func (*ExportProjectRequest) ProtoMessage() {} -func (x *LoadProjectResponse) ProtoReflect() protoreflect.Message { +func (x *ExportProjectRequest) ProtoReflect() protoreflect.Message { mi := &file_project_proto_msgTypes[8] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -504,28 +513,33 @@ func (x *LoadProjectResponse) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use LoadProjectResponse.ProtoReflect.Descriptor instead. -func (*LoadProjectResponse) Descriptor() ([]byte, []int) { +// Deprecated: Use ExportProjectRequest.ProtoReflect.Descriptor instead. +func (*ExportProjectRequest) Descriptor() ([]byte, []int) { return file_project_proto_rawDescGZIP(), []int{8} } -func (x *LoadProjectResponse) GetProject() *Project { +func (x *ExportProjectRequest) GetProjectId() string { if x != nil { - return x.Project + return x.ProjectId } - return nil + return "" } -type GetProjectTypesRequest struct { +func (x *ExportProjectRequest) GetPath() string { + if x != nil { + return x.Path + } + return "" +} + +type ExportProjectResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - - ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"` } -func (x *GetProjectTypesRequest) Reset() { - *x = GetProjectTypesRequest{} +func (x *ExportProjectResponse) Reset() { + *x = ExportProjectResponse{} if protoimpl.UnsafeEnabled { mi := &file_project_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -533,13 +547,13 @@ func (x *GetProjectTypesRequest) Reset() { } } -func (x *GetProjectTypesRequest) String() string { +func (x *ExportProjectResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*GetProjectTypesRequest) ProtoMessage() {} +func (*ExportProjectResponse) ProtoMessage() {} -func (x *GetProjectTypesRequest) ProtoReflect() protoreflect.Message { +func (x *ExportProjectResponse) ProtoReflect() protoreflect.Message { mi := &file_project_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -551,31 +565,22 @@ func (x *GetProjectTypesRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use GetProjectTypesRequest.ProtoReflect.Descriptor instead. -func (*GetProjectTypesRequest) Descriptor() ([]byte, []int) { +// Deprecated: Use ExportProjectResponse.ProtoReflect.Descriptor instead. +func (*ExportProjectResponse) Descriptor() ([]byte, []int) { return file_project_proto_rawDescGZIP(), []int{9} } -func (x *GetProjectTypesRequest) GetProjectId() string { - if x != nil { - return x.ProjectId - } - return "" -} - -type ProjectTypes struct { +type GRPCMethod struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - NodeType *descriptorpb.DescriptorProto `protobuf:"bytes,1,opt,name=node_type,json=nodeType,proto3" json:"node_type,omitempty"` - EdgeType *descriptorpb.DescriptorProto `protobuf:"bytes,2,opt,name=edge_type,json=edgeType,proto3" json:"edge_type,omitempty"` - DescLookup map[string]*descriptorpb.DescriptorProto `protobuf:"bytes,3,rep,name=desc_lookup,json=descLookup,proto3" json:"desc_lookup,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - EnumLookup map[string]*descriptorpb.EnumDescriptorProto `protobuf:"bytes,4,rep,name=enum_lookup,json=enumLookup,proto3" json:"enum_lookup,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + TypeInfo *GRPCTypeInfo `protobuf:"bytes,2,opt,name=type_info,json=typeInfo,proto3" json:"type_info,omitempty"` } -func (x *ProjectTypes) Reset() { - *x = ProjectTypes{} +func (x *GRPCMethod) Reset() { + *x = GRPCMethod{} if protoimpl.UnsafeEnabled { mi := &file_project_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -583,13 +588,13 @@ func (x *ProjectTypes) Reset() { } } -func (x *ProjectTypes) String() string { +func (x *GRPCMethod) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ProjectTypes) ProtoMessage() {} +func (*GRPCMethod) ProtoMessage() {} -func (x *ProjectTypes) ProtoReflect() protoreflect.Message { +func (x *GRPCMethod) ProtoReflect() protoreflect.Message { mi := &file_project_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -601,50 +606,38 @@ func (x *ProjectTypes) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ProjectTypes.ProtoReflect.Descriptor instead. -func (*ProjectTypes) Descriptor() ([]byte, []int) { +// Deprecated: Use GRPCMethod.ProtoReflect.Descriptor instead. +func (*GRPCMethod) Descriptor() ([]byte, []int) { return file_project_proto_rawDescGZIP(), []int{10} } -func (x *ProjectTypes) GetNodeType() *descriptorpb.DescriptorProto { - if x != nil { - return x.NodeType - } - return nil -} - -func (x *ProjectTypes) GetEdgeType() *descriptorpb.DescriptorProto { - if x != nil { - return x.EdgeType - } - return nil -} - -func (x *ProjectTypes) GetDescLookup() map[string]*descriptorpb.DescriptorProto { +func (x *GRPCMethod) GetName() string { if x != nil { - return x.DescLookup + return x.Name } - return nil + return "" } -func (x *ProjectTypes) GetEnumLookup() map[string]*descriptorpb.EnumDescriptorProto { +func (x *GRPCMethod) GetTypeInfo() *GRPCTypeInfo { if x != nil { - return x.EnumLookup + return x.TypeInfo } return nil } -type StopWorkflowRequest struct { +type GRPCService struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"` - WorkflowId string `protobuf:"bytes,2,opt,name=workflow_id,json=workflowId,proto3" json:"workflow_id,omitempty"` + Package string `protobuf:"bytes,1,opt,name=package,proto3" json:"package,omitempty"` + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + Methods []*GRPCMethod `protobuf:"bytes,3,rep,name=methods,proto3" json:"methods,omitempty"` + File string `protobuf:"bytes,4,opt,name=file,proto3" json:"file,omitempty"` } -func (x *StopWorkflowRequest) Reset() { - *x = StopWorkflowRequest{} +func (x *GRPCService) Reset() { + *x = GRPCService{} if protoimpl.UnsafeEnabled { mi := &file_project_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -652,13 +645,13 @@ func (x *StopWorkflowRequest) Reset() { } } -func (x *StopWorkflowRequest) String() string { +func (x *GRPCService) String() string { return protoimpl.X.MessageStringOf(x) } -func (*StopWorkflowRequest) ProtoMessage() {} +func (*GRPCService) ProtoMessage() {} -func (x *StopWorkflowRequest) ProtoReflect() protoreflect.Message { +func (x *GRPCService) ProtoReflect() protoreflect.Message { mi := &file_project_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -670,33 +663,54 @@ func (x *StopWorkflowRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use StopWorkflowRequest.ProtoReflect.Descriptor instead. -func (*StopWorkflowRequest) Descriptor() ([]byte, []int) { +// Deprecated: Use GRPCService.ProtoReflect.Descriptor instead. +func (*GRPCService) Descriptor() ([]byte, []int) { return file_project_proto_rawDescGZIP(), []int{11} } -func (x *StopWorkflowRequest) GetProjectId() string { +func (x *GRPCService) GetPackage() string { if x != nil { - return x.ProjectId + return x.Package } return "" } -func (x *StopWorkflowRequest) GetWorkflowId() string { +func (x *GRPCService) GetName() string { if x != nil { - return x.WorkflowId + return x.Name } return "" } -type StopWorkflowResponse struct { +func (x *GRPCService) GetMethods() []*GRPCMethod { + if x != nil { + return x.Methods + } + return nil +} + +func (x *GRPCService) GetFile() string { + if x != nil { + return x.File + } + return "" +} + +type GRPCTypeInfo struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields + + Input *descriptorpb.DescriptorProto `protobuf:"bytes,1,opt,name=input,proto3" json:"input,omitempty"` + Output *descriptorpb.DescriptorProto `protobuf:"bytes,2,opt,name=output,proto3" json:"output,omitempty"` + DescLookup map[string]*descriptorpb.DescriptorProto `protobuf:"bytes,3,rep,name=desc_lookup,json=descLookup,proto3" json:"desc_lookup,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + EnumLookup map[string]*descriptorpb.EnumDescriptorProto `protobuf:"bytes,4,rep,name=enum_lookup,json=enumLookup,proto3" json:"enum_lookup,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + MethodDesc *descriptorpb.MethodDescriptorProto `protobuf:"bytes,5,opt,name=method_desc,json=methodDesc,proto3" json:"method_desc,omitempty"` + PackageName string `protobuf:"bytes,6,opt,name=package_name,json=packageName,proto3" json:"package_name,omitempty"` } -func (x *StopWorkflowResponse) Reset() { - *x = StopWorkflowResponse{} +func (x *GRPCTypeInfo) Reset() { + *x = GRPCTypeInfo{} if protoimpl.UnsafeEnabled { mi := &file_project_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -704,13 +718,13 @@ func (x *StopWorkflowResponse) Reset() { } } -func (x *StopWorkflowResponse) String() string { +func (x *GRPCTypeInfo) String() string { return protoimpl.X.MessageStringOf(x) } -func (*StopWorkflowResponse) ProtoMessage() {} +func (*GRPCTypeInfo) ProtoMessage() {} -func (x *StopWorkflowResponse) ProtoReflect() protoreflect.Message { +func (x *GRPCTypeInfo) ProtoReflect() protoreflect.Message { mi := &file_project_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -722,21 +736,64 @@ func (x *StopWorkflowResponse) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use StopWorkflowResponse.ProtoReflect.Descriptor instead. -func (*StopWorkflowResponse) Descriptor() ([]byte, []int) { +// Deprecated: Use GRPCTypeInfo.ProtoReflect.Descriptor instead. +func (*GRPCTypeInfo) Descriptor() ([]byte, []int) { return file_project_proto_rawDescGZIP(), []int{12} } -type Chat struct { +func (x *GRPCTypeInfo) GetInput() *descriptorpb.DescriptorProto { + if x != nil { + return x.Input + } + return nil +} + +func (x *GRPCTypeInfo) GetOutput() *descriptorpb.DescriptorProto { + if x != nil { + return x.Output + } + return nil +} + +func (x *GRPCTypeInfo) GetDescLookup() map[string]*descriptorpb.DescriptorProto { + if x != nil { + return x.DescLookup + } + return nil +} + +func (x *GRPCTypeInfo) GetEnumLookup() map[string]*descriptorpb.EnumDescriptorProto { + if x != nil { + return x.EnumLookup + } + return nil +} + +func (x *GRPCTypeInfo) GetMethodDesc() *descriptorpb.MethodDescriptorProto { + if x != nil { + return x.MethodDesc + } + return nil +} + +func (x *GRPCTypeInfo) GetPackageName() string { + if x != nil { + return x.PackageName + } + return "" +} + +type GenerateAIStubRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Language string `protobuf:"bytes,1,opt,name=language,proto3" json:"language,omitempty"` + Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` } -func (x *Chat) Reset() { - *x = Chat{} +func (x *GenerateAIStubRequest) Reset() { + *x = GenerateAIStubRequest{} if protoimpl.UnsafeEnabled { mi := &file_project_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -744,13 +801,13 @@ func (x *Chat) Reset() { } } -func (x *Chat) String() string { +func (x *GenerateAIStubRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*Chat) ProtoMessage() {} +func (*GenerateAIStubRequest) ProtoMessage() {} -func (x *Chat) ProtoReflect() protoreflect.Message { +func (x *GenerateAIStubRequest) ProtoReflect() protoreflect.Message { mi := &file_project_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -762,29 +819,35 @@ func (x *Chat) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use Chat.ProtoReflect.Descriptor instead. -func (*Chat) Descriptor() ([]byte, []int) { +// Deprecated: Use GenerateAIStubRequest.ProtoReflect.Descriptor instead. +func (*GenerateAIStubRequest) Descriptor() ([]byte, []int) { return file_project_proto_rawDescGZIP(), []int{13} } -func (x *Chat) GetId() string { +func (x *GenerateAIStubRequest) GetLanguage() string { if x != nil { - return x.Id + return x.Language + } + return "" +} + +func (x *GenerateAIStubRequest) GetDescription() string { + if x != nil { + return x.Description } return "" } -type ChatMessage struct { +type GetGRPCServerInfoRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Role string `protobuf:"bytes,1,opt,name=role,proto3" json:"role,omitempty"` - Message string `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"` + Host string `protobuf:"bytes,1,opt,name=host,proto3" json:"host,omitempty"` } -func (x *ChatMessage) Reset() { - *x = ChatMessage{} +func (x *GetGRPCServerInfoRequest) Reset() { + *x = GetGRPCServerInfoRequest{} if protoimpl.UnsafeEnabled { mi := &file_project_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -792,13 +855,13 @@ func (x *ChatMessage) Reset() { } } -func (x *ChatMessage) String() string { +func (x *GetGRPCServerInfoRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ChatMessage) ProtoMessage() {} +func (*GetGRPCServerInfoRequest) ProtoMessage() {} -func (x *ChatMessage) ProtoReflect() protoreflect.Message { +func (x *GetGRPCServerInfoRequest) ProtoReflect() protoreflect.Message { mi := &file_project_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -810,36 +873,28 @@ func (x *ChatMessage) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ChatMessage.ProtoReflect.Descriptor instead. -func (*ChatMessage) Descriptor() ([]byte, []int) { +// Deprecated: Use GetGRPCServerInfoRequest.ProtoReflect.Descriptor instead. +func (*GetGRPCServerInfoRequest) Descriptor() ([]byte, []int) { return file_project_proto_rawDescGZIP(), []int{14} } -func (x *ChatMessage) GetRole() string { - if x != nil { - return x.Role - } - return "" -} - -func (x *ChatMessage) GetMessage() string { +func (x *GetGRPCServerInfoRequest) GetHost() string { if x != nil { - return x.Message + return x.Host } return "" } -type SendChatRequest struct { +type GetGRPCServerInfoResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Chat *Chat `protobuf:"bytes,1,opt,name=chat,proto3" json:"chat,omitempty"` - Message string `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"` + Services []*GRPCService `protobuf:"bytes,1,rep,name=services,proto3" json:"services,omitempty"` } -func (x *SendChatRequest) Reset() { - *x = SendChatRequest{} +func (x *GetGRPCServerInfoResponse) Reset() { + *x = GetGRPCServerInfoResponse{} if protoimpl.UnsafeEnabled { mi := &file_project_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -847,13 +902,13 @@ func (x *SendChatRequest) Reset() { } } -func (x *SendChatRequest) String() string { +func (x *GetGRPCServerInfoResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*SendChatRequest) ProtoMessage() {} +func (*GetGRPCServerInfoResponse) ProtoMessage() {} -func (x *SendChatRequest) ProtoReflect() protoreflect.Message { +func (x *GetGRPCServerInfoResponse) ProtoReflect() protoreflect.Message { mi := &file_project_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -865,35 +920,29 @@ func (x *SendChatRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use SendChatRequest.ProtoReflect.Descriptor instead. -func (*SendChatRequest) Descriptor() ([]byte, []int) { +// Deprecated: Use GetGRPCServerInfoResponse.ProtoReflect.Descriptor instead. +func (*GetGRPCServerInfoResponse) Descriptor() ([]byte, []int) { return file_project_proto_rawDescGZIP(), []int{15} } -func (x *SendChatRequest) GetChat() *Chat { +func (x *GetGRPCServerInfoResponse) GetServices() []*GRPCService { if x != nil { - return x.Chat + return x.Services } return nil } -func (x *SendChatRequest) GetMessage() string { - if x != nil { - return x.Message - } - return "" -} - -type SendChatResponse struct { +type GetNodeInfoRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Message string `protobuf:"bytes,1,opt,name=message,proto3" json:"message,omitempty"` + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"` + NodeId string `protobuf:"bytes,2,opt,name=node_id,json=nodeId,proto3" json:"node_id,omitempty"` } -func (x *SendChatResponse) Reset() { - *x = SendChatResponse{} +func (x *GetNodeInfoRequest) Reset() { + *x = GetNodeInfoRequest{} if protoimpl.UnsafeEnabled { mi := &file_project_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -901,13 +950,13 @@ func (x *SendChatResponse) Reset() { } } -func (x *SendChatResponse) String() string { +func (x *GetNodeInfoRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*SendChatResponse) ProtoMessage() {} +func (*GetNodeInfoRequest) ProtoMessage() {} -func (x *SendChatResponse) ProtoReflect() protoreflect.Message { +func (x *GetNodeInfoRequest) ProtoReflect() protoreflect.Message { mi := &file_project_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -919,28 +968,36 @@ func (x *SendChatResponse) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use SendChatResponse.ProtoReflect.Descriptor instead. -func (*SendChatResponse) Descriptor() ([]byte, []int) { +// Deprecated: Use GetNodeInfoRequest.ProtoReflect.Descriptor instead. +func (*GetNodeInfoRequest) Descriptor() ([]byte, []int) { return file_project_proto_rawDescGZIP(), []int{16} } -func (x *SendChatResponse) GetMessage() string { +func (x *GetNodeInfoRequest) GetProjectId() string { if x != nil { - return x.Message + return x.ProjectId } return "" } -type GetWorkflowRunsRequest struct { +func (x *GetNodeInfoRequest) GetNodeId() string { + if x != nil { + return x.NodeId + } + return "" +} + +type GetNodeInfoResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"` + MethodProto string `protobuf:"bytes,1,opt,name=method_proto,json=methodProto,proto3" json:"method_proto,omitempty"` + TypeInfo *GRPCTypeInfo `protobuf:"bytes,2,opt,name=type_info,json=typeInfo,proto3" json:"type_info,omitempty"` } -func (x *GetWorkflowRunsRequest) Reset() { - *x = GetWorkflowRunsRequest{} +func (x *GetNodeInfoResponse) Reset() { + *x = GetNodeInfoResponse{} if protoimpl.UnsafeEnabled { mi := &file_project_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -948,13 +1005,13 @@ func (x *GetWorkflowRunsRequest) Reset() { } } -func (x *GetWorkflowRunsRequest) String() string { +func (x *GetNodeInfoResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*GetWorkflowRunsRequest) ProtoMessage() {} +func (*GetNodeInfoResponse) ProtoMessage() {} -func (x *GetWorkflowRunsRequest) ProtoReflect() protoreflect.Message { +func (x *GetNodeInfoResponse) ProtoReflect() protoreflect.Message { mi := &file_project_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -966,28 +1023,35 @@ func (x *GetWorkflowRunsRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use GetWorkflowRunsRequest.ProtoReflect.Descriptor instead. -func (*GetWorkflowRunsRequest) Descriptor() ([]byte, []int) { +// Deprecated: Use GetNodeInfoResponse.ProtoReflect.Descriptor instead. +func (*GetNodeInfoResponse) Descriptor() ([]byte, []int) { return file_project_proto_rawDescGZIP(), []int{17} } -func (x *GetWorkflowRunsRequest) GetProjectId() string { +func (x *GetNodeInfoResponse) GetMethodProto() string { if x != nil { - return x.ProjectId + return x.MethodProto } return "" } -type GetWorkflowRunsResponse struct { +func (x *GetNodeInfoResponse) GetTypeInfo() *GRPCTypeInfo { + if x != nil { + return x.TypeInfo + } + return nil +} + +type GetProjectRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Runs []*WorkflowTrace `protobuf:"bytes,1,rep,name=runs,proto3" json:"runs,omitempty"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` } -func (x *GetWorkflowRunsResponse) Reset() { - *x = GetWorkflowRunsResponse{} +func (x *GetProjectRequest) Reset() { + *x = GetProjectRequest{} if protoimpl.UnsafeEnabled { mi := &file_project_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -995,13 +1059,13 @@ func (x *GetWorkflowRunsResponse) Reset() { } } -func (x *GetWorkflowRunsResponse) String() string { +func (x *GetProjectRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*GetWorkflowRunsResponse) ProtoMessage() {} +func (*GetProjectRequest) ProtoMessage() {} -func (x *GetWorkflowRunsResponse) ProtoReflect() protoreflect.Message { +func (x *GetProjectRequest) ProtoReflect() protoreflect.Message { mi := &file_project_proto_msgTypes[18] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1013,30 +1077,29 @@ func (x *GetWorkflowRunsResponse) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use GetWorkflowRunsResponse.ProtoReflect.Descriptor instead. -func (*GetWorkflowRunsResponse) Descriptor() ([]byte, []int) { +// Deprecated: Use GetProjectRequest.ProtoReflect.Descriptor instead. +func (*GetProjectRequest) Descriptor() ([]byte, []int) { return file_project_proto_rawDescGZIP(), []int{18} } -func (x *GetWorkflowRunsResponse) GetRuns() []*WorkflowTrace { +func (x *GetProjectRequest) GetId() string { if x != nil { - return x.Runs + return x.Id } - return nil + return "" } -type WorkflowTrace struct { +type GetProjectResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Request *RunWorkflowRequest `protobuf:"bytes,2,opt,name=request,proto3" json:"request,omitempty"` - NodeExecs []*NodeExecution `protobuf:"bytes,3,rep,name=node_execs,json=nodeExecs,proto3" json:"node_execs,omitempty"` + Project *Project `protobuf:"bytes,1,opt,name=project,proto3" json:"project,omitempty"` + Types *ProjectTypes `protobuf:"bytes,2,opt,name=types,proto3" json:"types,omitempty"` } -func (x *WorkflowTrace) Reset() { - *x = WorkflowTrace{} +func (x *GetProjectResponse) Reset() { + *x = GetProjectResponse{} if protoimpl.UnsafeEnabled { mi := &file_project_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1044,13 +1107,13 @@ func (x *WorkflowTrace) Reset() { } } -func (x *WorkflowTrace) String() string { +func (x *GetProjectResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*WorkflowTrace) ProtoMessage() {} +func (*GetProjectResponse) ProtoMessage() {} -func (x *WorkflowTrace) ProtoReflect() protoreflect.Message { +func (x *GetProjectResponse) ProtoReflect() protoreflect.Message { mi := &file_project_proto_msgTypes[19] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1062,43 +1125,35 @@ func (x *WorkflowTrace) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use WorkflowTrace.ProtoReflect.Descriptor instead. -func (*WorkflowTrace) Descriptor() ([]byte, []int) { +// Deprecated: Use GetProjectResponse.ProtoReflect.Descriptor instead. +func (*GetProjectResponse) Descriptor() ([]byte, []int) { return file_project_proto_rawDescGZIP(), []int{19} } -func (x *WorkflowTrace) GetId() string { +func (x *GetProjectResponse) GetProject() *Project { if x != nil { - return x.Id - } - return "" -} - -func (x *WorkflowTrace) GetRequest() *RunWorkflowRequest { - if x != nil { - return x.Request + return x.Project } return nil } -func (x *WorkflowTrace) GetNodeExecs() []*NodeExecution { +func (x *GetProjectResponse) GetTypes() *ProjectTypes { if x != nil { - return x.NodeExecs + return x.Types } return nil } -type NodeExecution struct { +type GetProjectTypesRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - NodeId string `protobuf:"bytes,1,opt,name=node_id,json=nodeId,proto3" json:"node_id,omitempty"` - Output string `protobuf:"bytes,2,opt,name=output,proto3" json:"output,omitempty"` + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"` } -func (x *NodeExecution) Reset() { - *x = NodeExecution{} +func (x *GetProjectTypesRequest) Reset() { + *x = GetProjectTypesRequest{} if protoimpl.UnsafeEnabled { mi := &file_project_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1106,13 +1161,13 @@ func (x *NodeExecution) Reset() { } } -func (x *NodeExecution) String() string { +func (x *GetProjectTypesRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*NodeExecution) ProtoMessage() {} +func (*GetProjectTypesRequest) ProtoMessage() {} -func (x *NodeExecution) ProtoReflect() protoreflect.Message { +func (x *GetProjectTypesRequest) ProtoReflect() protoreflect.Message { mi := &file_project_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1124,36 +1179,28 @@ func (x *NodeExecution) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use NodeExecution.ProtoReflect.Descriptor instead. -func (*NodeExecution) Descriptor() ([]byte, []int) { +// Deprecated: Use GetProjectTypesRequest.ProtoReflect.Descriptor instead. +func (*GetProjectTypesRequest) Descriptor() ([]byte, []int) { return file_project_proto_rawDescGZIP(), []int{20} } -func (x *NodeExecution) GetNodeId() string { - if x != nil { - return x.NodeId - } - return "" -} - -func (x *NodeExecution) GetOutput() string { +func (x *GetProjectTypesRequest) GetProjectId() string { if x != nil { - return x.Output + return x.ProjectId } return "" } -type GetNodeInfoRequest struct { +type GetProjectsRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"` - NodeId string `protobuf:"bytes,2,opt,name=node_id,json=nodeId,proto3" json:"node_id,omitempty"` + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` } -func (x *GetNodeInfoRequest) Reset() { - *x = GetNodeInfoRequest{} +func (x *GetProjectsRequest) Reset() { + *x = GetProjectsRequest{} if protoimpl.UnsafeEnabled { mi := &file_project_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1161,13 +1208,13 @@ func (x *GetNodeInfoRequest) Reset() { } } -func (x *GetNodeInfoRequest) String() string { +func (x *GetProjectsRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*GetNodeInfoRequest) ProtoMessage() {} +func (*GetProjectsRequest) ProtoMessage() {} -func (x *GetNodeInfoRequest) ProtoReflect() protoreflect.Message { +func (x *GetProjectsRequest) ProtoReflect() protoreflect.Message { mi := &file_project_proto_msgTypes[21] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1179,41 +1226,28 @@ func (x *GetNodeInfoRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use GetNodeInfoRequest.ProtoReflect.Descriptor instead. -func (*GetNodeInfoRequest) Descriptor() ([]byte, []int) { +// Deprecated: Use GetProjectsRequest.ProtoReflect.Descriptor instead. +func (*GetProjectsRequest) Descriptor() ([]byte, []int) { return file_project_proto_rawDescGZIP(), []int{21} } -func (x *GetNodeInfoRequest) GetProjectId() string { - if x != nil { - return x.ProjectId - } - return "" -} - -func (x *GetNodeInfoRequest) GetNodeId() string { +func (x *GetProjectsRequest) GetName() string { if x != nil { - return x.NodeId + return x.Name } return "" } -// TODO breadchris a file desc contains all this information it would be simpler to use -type GRPCTypeInfo struct { +type GetProjectsResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Input *descriptorpb.DescriptorProto `protobuf:"bytes,1,opt,name=input,proto3" json:"input,omitempty"` - Output *descriptorpb.DescriptorProto `protobuf:"bytes,2,opt,name=output,proto3" json:"output,omitempty"` - DescLookup map[string]*descriptorpb.DescriptorProto `protobuf:"bytes,3,rep,name=desc_lookup,json=descLookup,proto3" json:"desc_lookup,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - EnumLookup map[string]*descriptorpb.EnumDescriptorProto `protobuf:"bytes,4,rep,name=enum_lookup,json=enumLookup,proto3" json:"enum_lookup,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - MethodDesc *descriptorpb.MethodDescriptorProto `protobuf:"bytes,5,opt,name=method_desc,json=methodDesc,proto3" json:"method_desc,omitempty"` - PackageName string `protobuf:"bytes,6,opt,name=package_name,json=packageName,proto3" json:"package_name,omitempty"` + Projects []*GetProjectResponse `protobuf:"bytes,1,rep,name=projects,proto3" json:"projects,omitempty"` } -func (x *GRPCTypeInfo) Reset() { - *x = GRPCTypeInfo{} +func (x *GetProjectsResponse) Reset() { + *x = GetProjectsResponse{} if protoimpl.UnsafeEnabled { mi := &file_project_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1221,13 +1255,13 @@ func (x *GRPCTypeInfo) Reset() { } } -func (x *GRPCTypeInfo) String() string { +func (x *GetProjectsResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*GRPCTypeInfo) ProtoMessage() {} +func (*GetProjectsResponse) ProtoMessage() {} -func (x *GRPCTypeInfo) ProtoReflect() protoreflect.Message { +func (x *GetProjectsResponse) ProtoReflect() protoreflect.Message { mi := &file_project_proto_msgTypes[22] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1239,66 +1273,28 @@ func (x *GRPCTypeInfo) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use GRPCTypeInfo.ProtoReflect.Descriptor instead. -func (*GRPCTypeInfo) Descriptor() ([]byte, []int) { +// Deprecated: Use GetProjectsResponse.ProtoReflect.Descriptor instead. +func (*GetProjectsResponse) Descriptor() ([]byte, []int) { return file_project_proto_rawDescGZIP(), []int{22} } -func (x *GRPCTypeInfo) GetInput() *descriptorpb.DescriptorProto { - if x != nil { - return x.Input - } - return nil -} - -func (x *GRPCTypeInfo) GetOutput() *descriptorpb.DescriptorProto { - if x != nil { - return x.Output - } - return nil -} - -func (x *GRPCTypeInfo) GetDescLookup() map[string]*descriptorpb.DescriptorProto { - if x != nil { - return x.DescLookup - } - return nil -} - -func (x *GRPCTypeInfo) GetEnumLookup() map[string]*descriptorpb.EnumDescriptorProto { - if x != nil { - return x.EnumLookup - } - return nil -} - -func (x *GRPCTypeInfo) GetMethodDesc() *descriptorpb.MethodDescriptorProto { +func (x *GetProjectsResponse) GetProjects() []*GetProjectResponse { if x != nil { - return x.MethodDesc + return x.Projects } return nil } -func (x *GRPCTypeInfo) GetPackageName() string { - if x != nil { - return x.PackageName - } - return "" -} - -type GetNodeInfoResponse struct { +type GetProvidersRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // A compiled view of the method - MethodProto string `protobuf:"bytes,1,opt,name=method_proto,json=methodProto,proto3" json:"method_proto,omitempty"` - // Type information for the input and output - TypeInfo *GRPCTypeInfo `protobuf:"bytes,2,opt,name=type_info,json=typeInfo,proto3" json:"type_info,omitempty"` + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"` } -func (x *GetNodeInfoResponse) Reset() { - *x = GetNodeInfoResponse{} +func (x *GetProvidersRequest) Reset() { + *x = GetProvidersRequest{} if protoimpl.UnsafeEnabled { mi := &file_project_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1306,13 +1302,13 @@ func (x *GetNodeInfoResponse) Reset() { } } -func (x *GetNodeInfoResponse) String() string { +func (x *GetProvidersRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*GetNodeInfoResponse) ProtoMessage() {} +func (*GetProvidersRequest) ProtoMessage() {} -func (x *GetNodeInfoResponse) ProtoReflect() protoreflect.Message { +func (x *GetProvidersRequest) ProtoReflect() protoreflect.Message { mi := &file_project_proto_msgTypes[23] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1324,37 +1320,28 @@ func (x *GetNodeInfoResponse) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use GetNodeInfoResponse.ProtoReflect.Descriptor instead. -func (*GetNodeInfoResponse) Descriptor() ([]byte, []int) { +// Deprecated: Use GetProvidersRequest.ProtoReflect.Descriptor instead. +func (*GetProvidersRequest) Descriptor() ([]byte, []int) { return file_project_proto_rawDescGZIP(), []int{23} } -func (x *GetNodeInfoResponse) GetMethodProto() string { +func (x *GetProvidersRequest) GetProjectId() string { if x != nil { - return x.MethodProto + return x.ProjectId } return "" } -func (x *GetNodeInfoResponse) GetTypeInfo() *GRPCTypeInfo { - if x != nil { - return x.TypeInfo - } - return nil -} - -type RuntimeData struct { +type GetProvidersResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - Calls []string `protobuf:"bytes,2,rep,name=calls,proto3" json:"calls,omitempty"` - Graph *GraphData `protobuf:"bytes,3,opt,name=graph,proto3" json:"graph,omitempty"` + Providers []*EnumeratedProvider `protobuf:"bytes,1,rep,name=providers,proto3" json:"providers,omitempty"` } -func (x *RuntimeData) Reset() { - *x = RuntimeData{} +func (x *GetProvidersResponse) Reset() { + *x = GetProvidersResponse{} if protoimpl.UnsafeEnabled { mi := &file_project_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1362,13 +1349,13 @@ func (x *RuntimeData) Reset() { } } -func (x *RuntimeData) String() string { +func (x *GetProvidersResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*RuntimeData) ProtoMessage() {} +func (*GetProvidersResponse) ProtoMessage() {} -func (x *RuntimeData) ProtoReflect() protoreflect.Message { +func (x *GetProvidersResponse) ProtoReflect() protoreflect.Message { mi := &file_project_proto_msgTypes[24] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1380,43 +1367,28 @@ func (x *RuntimeData) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use RuntimeData.ProtoReflect.Descriptor instead. -func (*RuntimeData) Descriptor() ([]byte, []int) { +// Deprecated: Use GetProvidersResponse.ProtoReflect.Descriptor instead. +func (*GetProvidersResponse) Descriptor() ([]byte, []int) { return file_project_proto_rawDescGZIP(), []int{24} } -func (x *RuntimeData) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *RuntimeData) GetCalls() []string { - if x != nil { - return x.Calls - } - return nil -} - -func (x *RuntimeData) GetGraph() *GraphData { +func (x *GetProvidersResponse) GetProviders() []*EnumeratedProvider { if x != nil { - return x.Graph + return x.Providers } return nil } -type GraphData struct { +type GetRunningWorkflowResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - X float32 `protobuf:"fixed32,1,opt,name=x,proto3" json:"x,omitempty"` - Y float32 `protobuf:"fixed32,2,opt,name=y,proto3" json:"y,omitempty"` + Traces []*WorkflowTrace `protobuf:"bytes,1,rep,name=traces,proto3" json:"traces,omitempty"` } -func (x *GraphData) Reset() { - *x = GraphData{} +func (x *GetRunningWorkflowResponse) Reset() { + *x = GetRunningWorkflowResponse{} if protoimpl.UnsafeEnabled { mi := &file_project_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1424,13 +1396,13 @@ func (x *GraphData) Reset() { } } -func (x *GraphData) String() string { +func (x *GetRunningWorkflowResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*GraphData) ProtoMessage() {} +func (*GetRunningWorkflowResponse) ProtoMessage() {} -func (x *GraphData) ProtoReflect() protoreflect.Message { +func (x *GetRunningWorkflowResponse) ProtoReflect() protoreflect.Message { mi := &file_project_proto_msgTypes[25] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1442,38 +1414,28 @@ func (x *GraphData) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use GraphData.ProtoReflect.Descriptor instead. -func (*GraphData) Descriptor() ([]byte, []int) { +// Deprecated: Use GetRunningWorkflowResponse.ProtoReflect.Descriptor instead. +func (*GetRunningWorkflowResponse) Descriptor() ([]byte, []int) { return file_project_proto_rawDescGZIP(), []int{25} } -func (x *GraphData) GetX() float32 { - if x != nil { - return x.X - } - return 0 -} - -func (x *GraphData) GetY() float32 { +func (x *GetRunningWorkflowResponse) GetTraces() []*WorkflowTrace { if x != nil { - return x.Y + return x.Traces } - return 0 + return nil } -type RunWorkflowRequest struct { +type GetRunningWorkflowsRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"` - NodeId string `protobuf:"bytes,2,opt,name=node_id,json=nodeId,proto3" json:"node_id,omitempty"` - Input string `protobuf:"bytes,3,opt,name=input,proto3" json:"input,omitempty"` - StartServer bool `protobuf:"varint,4,opt,name=start_server,json=startServer,proto3" json:"start_server,omitempty"` + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"` } -func (x *RunWorkflowRequest) Reset() { - *x = RunWorkflowRequest{} +func (x *GetRunningWorkflowsRequest) Reset() { + *x = GetRunningWorkflowsRequest{} if protoimpl.UnsafeEnabled { mi := &file_project_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1481,13 +1443,13 @@ func (x *RunWorkflowRequest) Reset() { } } -func (x *RunWorkflowRequest) String() string { +func (x *GetRunningWorkflowsRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*RunWorkflowRequest) ProtoMessage() {} +func (*GetRunningWorkflowsRequest) ProtoMessage() {} -func (x *RunWorkflowRequest) ProtoReflect() protoreflect.Message { +func (x *GetRunningWorkflowsRequest) ProtoReflect() protoreflect.Message { mi := &file_project_proto_msgTypes[26] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1499,49 +1461,28 @@ func (x *RunWorkflowRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use RunWorkflowRequest.ProtoReflect.Descriptor instead. -func (*RunWorkflowRequest) Descriptor() ([]byte, []int) { +// Deprecated: Use GetRunningWorkflowsRequest.ProtoReflect.Descriptor instead. +func (*GetRunningWorkflowsRequest) Descriptor() ([]byte, []int) { return file_project_proto_rawDescGZIP(), []int{26} } -func (x *RunWorkflowRequest) GetProjectId() string { +func (x *GetRunningWorkflowsRequest) GetProjectId() string { if x != nil { return x.ProjectId } return "" } -func (x *RunWorkflowRequest) GetNodeId() string { - if x != nil { - return x.NodeId - } - return "" -} - -func (x *RunWorkflowRequest) GetInput() string { - if x != nil { - return x.Input - } - return "" -} - -func (x *RunWorkflowRequest) GetStartServer() bool { - if x != nil { - return x.StartServer - } - return false -} - -type Data struct { +type GetWorkflowRunsRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Value string `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"` + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"` } -func (x *Data) Reset() { - *x = Data{} +func (x *GetWorkflowRunsRequest) Reset() { + *x = GetWorkflowRunsRequest{} if protoimpl.UnsafeEnabled { mi := &file_project_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1549,13 +1490,13 @@ func (x *Data) Reset() { } } -func (x *Data) String() string { +func (x *GetWorkflowRunsRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*Data) ProtoMessage() {} +func (*GetWorkflowRunsRequest) ProtoMessage() {} -func (x *Data) ProtoReflect() protoreflect.Message { +func (x *GetWorkflowRunsRequest) ProtoReflect() protoreflect.Message { mi := &file_project_proto_msgTypes[27] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1567,28 +1508,28 @@ func (x *Data) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use Data.ProtoReflect.Descriptor instead. -func (*Data) Descriptor() ([]byte, []int) { +// Deprecated: Use GetWorkflowRunsRequest.ProtoReflect.Descriptor instead. +func (*GetWorkflowRunsRequest) Descriptor() ([]byte, []int) { return file_project_proto_rawDescGZIP(), []int{27} } -func (x *Data) GetValue() string { +func (x *GetWorkflowRunsRequest) GetProjectId() string { if x != nil { - return x.Value + return x.ProjectId } return "" } -type GetProjectRequest struct { +type GetWorkflowRunsResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Runs []*WorkflowTrace `protobuf:"bytes,1,rep,name=runs,proto3" json:"runs,omitempty"` } -func (x *GetProjectRequest) Reset() { - *x = GetProjectRequest{} +func (x *GetWorkflowRunsResponse) Reset() { + *x = GetWorkflowRunsResponse{} if protoimpl.UnsafeEnabled { mi := &file_project_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1596,13 +1537,13 @@ func (x *GetProjectRequest) Reset() { } } -func (x *GetProjectRequest) String() string { +func (x *GetWorkflowRunsResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*GetProjectRequest) ProtoMessage() {} +func (*GetWorkflowRunsResponse) ProtoMessage() {} -func (x *GetProjectRequest) ProtoReflect() protoreflect.Message { +func (x *GetWorkflowRunsResponse) ProtoReflect() protoreflect.Message { mi := &file_project_proto_msgTypes[28] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1614,29 +1555,29 @@ func (x *GetProjectRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use GetProjectRequest.ProtoReflect.Descriptor instead. -func (*GetProjectRequest) Descriptor() ([]byte, []int) { +// Deprecated: Use GetWorkflowRunsResponse.ProtoReflect.Descriptor instead. +func (*GetWorkflowRunsResponse) Descriptor() ([]byte, []int) { return file_project_proto_rawDescGZIP(), []int{28} } -func (x *GetProjectRequest) GetId() string { +func (x *GetWorkflowRunsResponse) GetRuns() []*WorkflowTrace { if x != nil { - return x.Id + return x.Runs } - return "" + return nil } -type GetProjectResponse struct { +type GraphData struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Project *Project `protobuf:"bytes,1,opt,name=project,proto3" json:"project,omitempty"` - Types *ProjectTypes `protobuf:"bytes,2,opt,name=types,proto3" json:"types,omitempty"` + X float32 `protobuf:"fixed32,1,opt,name=x,proto3" json:"x,omitempty"` + Y float32 `protobuf:"fixed32,2,opt,name=y,proto3" json:"y,omitempty"` } -func (x *GetProjectResponse) Reset() { - *x = GetProjectResponse{} +func (x *GraphData) Reset() { + *x = GraphData{} if protoimpl.UnsafeEnabled { mi := &file_project_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1644,13 +1585,13 @@ func (x *GetProjectResponse) Reset() { } } -func (x *GetProjectResponse) String() string { +func (x *GraphData) String() string { return protoimpl.X.MessageStringOf(x) } -func (*GetProjectResponse) ProtoMessage() {} +func (*GraphData) ProtoMessage() {} -func (x *GetProjectResponse) ProtoReflect() protoreflect.Message { +func (x *GraphData) ProtoReflect() protoreflect.Message { mi := &file_project_proto_msgTypes[29] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1662,35 +1603,35 @@ func (x *GetProjectResponse) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use GetProjectResponse.ProtoReflect.Descriptor instead. -func (*GetProjectResponse) Descriptor() ([]byte, []int) { +// Deprecated: Use GraphData.ProtoReflect.Descriptor instead. +func (*GraphData) Descriptor() ([]byte, []int) { return file_project_proto_rawDescGZIP(), []int{29} } -func (x *GetProjectResponse) GetProject() *Project { +func (x *GraphData) GetX() float32 { if x != nil { - return x.Project + return x.X } - return nil + return 0 } -func (x *GetProjectResponse) GetTypes() *ProjectTypes { +func (x *GraphData) GetY() float32 { if x != nil { - return x.Types + return x.Y } - return nil + return 0 } -type GetProjectsRequest struct { +type LoadProjectRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Path string `protobuf:"bytes,1,opt,name=path,proto3" json:"path,omitempty"` } -func (x *GetProjectsRequest) Reset() { - *x = GetProjectsRequest{} +func (x *LoadProjectRequest) Reset() { + *x = LoadProjectRequest{} if protoimpl.UnsafeEnabled { mi := &file_project_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1698,13 +1639,13 @@ func (x *GetProjectsRequest) Reset() { } } -func (x *GetProjectsRequest) String() string { +func (x *LoadProjectRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*GetProjectsRequest) ProtoMessage() {} +func (*LoadProjectRequest) ProtoMessage() {} -func (x *GetProjectsRequest) ProtoReflect() protoreflect.Message { +func (x *LoadProjectRequest) ProtoReflect() protoreflect.Message { mi := &file_project_proto_msgTypes[30] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1716,28 +1657,28 @@ func (x *GetProjectsRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use GetProjectsRequest.ProtoReflect.Descriptor instead. -func (*GetProjectsRequest) Descriptor() ([]byte, []int) { +// Deprecated: Use LoadProjectRequest.ProtoReflect.Descriptor instead. +func (*LoadProjectRequest) Descriptor() ([]byte, []int) { return file_project_proto_rawDescGZIP(), []int{30} } -func (x *GetProjectsRequest) GetName() string { +func (x *LoadProjectRequest) GetPath() string { if x != nil { - return x.Name + return x.Path } return "" } -type GetProjectsResponse struct { +type LoadProjectResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Projects []*GetProjectResponse `protobuf:"bytes,1,rep,name=projects,proto3" json:"projects,omitempty"` + Project *Project `protobuf:"bytes,1,opt,name=project,proto3" json:"project,omitempty"` } -func (x *GetProjectsResponse) Reset() { - *x = GetProjectsResponse{} +func (x *LoadProjectResponse) Reset() { + *x = LoadProjectResponse{} if protoimpl.UnsafeEnabled { mi := &file_project_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1745,13 +1686,13 @@ func (x *GetProjectsResponse) Reset() { } } -func (x *GetProjectsResponse) String() string { +func (x *LoadProjectResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*GetProjectsResponse) ProtoMessage() {} +func (*LoadProjectResponse) ProtoMessage() {} -func (x *GetProjectsResponse) ProtoReflect() protoreflect.Message { +func (x *LoadProjectResponse) ProtoReflect() protoreflect.Message { mi := &file_project_proto_msgTypes[31] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1763,28 +1704,29 @@ func (x *GetProjectsResponse) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use GetProjectsResponse.ProtoReflect.Descriptor instead. -func (*GetProjectsResponse) Descriptor() ([]byte, []int) { +// Deprecated: Use LoadProjectResponse.ProtoReflect.Descriptor instead. +func (*LoadProjectResponse) Descriptor() ([]byte, []int) { return file_project_proto_rawDescGZIP(), []int{31} } -func (x *GetProjectsResponse) GetProjects() []*GetProjectResponse { +func (x *LoadProjectResponse) GetProject() *Project { if x != nil { - return x.Projects + return x.Project } return nil } -type CreateProjectRequest struct { +type NewNodeRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"` + Node *Node `protobuf:"bytes,2,opt,name=node,proto3" json:"node,omitempty"` } -func (x *CreateProjectRequest) Reset() { - *x = CreateProjectRequest{} +func (x *NewNodeRequest) Reset() { + *x = NewNodeRequest{} if protoimpl.UnsafeEnabled { mi := &file_project_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1792,13 +1734,13 @@ func (x *CreateProjectRequest) Reset() { } } -func (x *CreateProjectRequest) String() string { +func (x *NewNodeRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*CreateProjectRequest) ProtoMessage() {} +func (*NewNodeRequest) ProtoMessage() {} -func (x *CreateProjectRequest) ProtoReflect() protoreflect.Message { +func (x *NewNodeRequest) ProtoReflect() protoreflect.Message { mi := &file_project_proto_msgTypes[32] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1810,28 +1752,35 @@ func (x *CreateProjectRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use CreateProjectRequest.ProtoReflect.Descriptor instead. -func (*CreateProjectRequest) Descriptor() ([]byte, []int) { +// Deprecated: Use NewNodeRequest.ProtoReflect.Descriptor instead. +func (*NewNodeRequest) Descriptor() ([]byte, []int) { return file_project_proto_rawDescGZIP(), []int{32} } -func (x *CreateProjectRequest) GetName() string { +func (x *NewNodeRequest) GetProjectId() string { if x != nil { - return x.Name + return x.ProjectId } return "" } -type CreateProjectResponse struct { +func (x *NewNodeRequest) GetNode() *Node { + if x != nil { + return x.Node + } + return nil +} + +type NewNodeResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Project *Project `protobuf:"bytes,1,opt,name=project,proto3" json:"project,omitempty"` + Node *Node `protobuf:"bytes,1,opt,name=node,proto3" json:"node,omitempty"` } -func (x *CreateProjectResponse) Reset() { - *x = CreateProjectResponse{} +func (x *NewNodeResponse) Reset() { + *x = NewNodeResponse{} if protoimpl.UnsafeEnabled { mi := &file_project_proto_msgTypes[33] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1839,13 +1788,13 @@ func (x *CreateProjectResponse) Reset() { } } -func (x *CreateProjectResponse) String() string { +func (x *NewNodeResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*CreateProjectResponse) ProtoMessage() {} +func (*NewNodeResponse) ProtoMessage() {} -func (x *CreateProjectResponse) ProtoReflect() protoreflect.Message { +func (x *NewNodeResponse) ProtoReflect() protoreflect.Message { mi := &file_project_proto_msgTypes[33] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1857,28 +1806,29 @@ func (x *CreateProjectResponse) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use CreateProjectResponse.ProtoReflect.Descriptor instead. -func (*CreateProjectResponse) Descriptor() ([]byte, []int) { +// Deprecated: Use NewNodeResponse.ProtoReflect.Descriptor instead. +func (*NewNodeResponse) Descriptor() ([]byte, []int) { return file_project_proto_rawDescGZIP(), []int{33} } -func (x *CreateProjectResponse) GetProject() *Project { +func (x *NewNodeResponse) GetNode() *Node { if x != nil { - return x.Project + return x.Node } return nil } -type DeleteProjectRequest struct { +type NodeExecution struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + NodeId string `protobuf:"bytes,1,opt,name=node_id,json=nodeId,proto3" json:"node_id,omitempty"` + Output string `protobuf:"bytes,2,opt,name=output,proto3" json:"output,omitempty"` } -func (x *DeleteProjectRequest) Reset() { - *x = DeleteProjectRequest{} +func (x *NodeExecution) Reset() { + *x = NodeExecution{} if protoimpl.UnsafeEnabled { mi := &file_project_proto_msgTypes[34] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1886,13 +1836,13 @@ func (x *DeleteProjectRequest) Reset() { } } -func (x *DeleteProjectRequest) String() string { +func (x *NodeExecution) String() string { return protoimpl.X.MessageStringOf(x) } -func (*DeleteProjectRequest) ProtoMessage() {} +func (*NodeExecution) ProtoMessage() {} -func (x *DeleteProjectRequest) ProtoReflect() protoreflect.Message { +func (x *NodeExecution) ProtoReflect() protoreflect.Message { mi := &file_project_proto_msgTypes[34] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1904,28 +1854,37 @@ func (x *DeleteProjectRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use DeleteProjectRequest.ProtoReflect.Descriptor instead. -func (*DeleteProjectRequest) Descriptor() ([]byte, []int) { +// Deprecated: Use NodeExecution.ProtoReflect.Descriptor instead. +func (*NodeExecution) Descriptor() ([]byte, []int) { return file_project_proto_rawDescGZIP(), []int{34} } -func (x *DeleteProjectRequest) GetId() string { +func (x *NodeExecution) GetNodeId() string { if x != nil { - return x.Id + return x.NodeId } return "" } -type DeleteProjectResponse struct { +func (x *NodeExecution) GetOutput() string { + if x != nil { + return x.Output + } + return "" +} + +type Project struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Project *Project `protobuf:"bytes,1,opt,name=project,proto3" json:"project,omitempty"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + Graph *Graph `protobuf:"bytes,3,opt,name=graph,proto3" json:"graph,omitempty"` } -func (x *DeleteProjectResponse) Reset() { - *x = DeleteProjectResponse{} +func (x *Project) Reset() { + *x = Project{} if protoimpl.UnsafeEnabled { mi := &file_project_proto_msgTypes[35] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1933,13 +1892,13 @@ func (x *DeleteProjectResponse) Reset() { } } -func (x *DeleteProjectResponse) String() string { +func (x *Project) String() string { return protoimpl.X.MessageStringOf(x) } -func (*DeleteProjectResponse) ProtoMessage() {} +func (*Project) ProtoMessage() {} -func (x *DeleteProjectResponse) ProtoReflect() protoreflect.Message { +func (x *Project) ProtoReflect() protoreflect.Message { mi := &file_project_proto_msgTypes[35] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1951,28 +1910,45 @@ func (x *DeleteProjectResponse) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use DeleteProjectResponse.ProtoReflect.Descriptor instead. -func (*DeleteProjectResponse) Descriptor() ([]byte, []int) { +// Deprecated: Use Project.ProtoReflect.Descriptor instead. +func (*Project) Descriptor() ([]byte, []int) { return file_project_proto_rawDescGZIP(), []int{35} } -func (x *DeleteProjectResponse) GetProject() *Project { +func (x *Project) GetId() string { if x != nil { - return x.Project + return x.Id } - return nil + return "" } -type GetProvidersRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"` +func (x *Project) GetName() string { + if x != nil { + return x.Name + } + return "" } -func (x *GetProvidersRequest) Reset() { - *x = GetProvidersRequest{} +func (x *Project) GetGraph() *Graph { + if x != nil { + return x.Graph + } + return nil +} + +type ProjectTypes struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + NodeType *descriptorpb.DescriptorProto `protobuf:"bytes,1,opt,name=node_type,json=nodeType,proto3" json:"node_type,omitempty"` + EdgeType *descriptorpb.DescriptorProto `protobuf:"bytes,2,opt,name=edge_type,json=edgeType,proto3" json:"edge_type,omitempty"` + DescLookup map[string]*descriptorpb.DescriptorProto `protobuf:"bytes,3,rep,name=desc_lookup,json=descLookup,proto3" json:"desc_lookup,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + EnumLookup map[string]*descriptorpb.EnumDescriptorProto `protobuf:"bytes,4,rep,name=enum_lookup,json=enumLookup,proto3" json:"enum_lookup,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` +} + +func (x *ProjectTypes) Reset() { + *x = ProjectTypes{} if protoimpl.UnsafeEnabled { mi := &file_project_proto_msgTypes[36] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1980,13 +1956,13 @@ func (x *GetProvidersRequest) Reset() { } } -func (x *GetProvidersRequest) String() string { +func (x *ProjectTypes) String() string { return protoimpl.X.MessageStringOf(x) } -func (*GetProvidersRequest) ProtoMessage() {} +func (*ProjectTypes) ProtoMessage() {} -func (x *GetProvidersRequest) ProtoReflect() protoreflect.Message { +func (x *ProjectTypes) ProtoReflect() protoreflect.Message { mi := &file_project_proto_msgTypes[36] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1998,30 +1974,50 @@ func (x *GetProvidersRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use GetProvidersRequest.ProtoReflect.Descriptor instead. -func (*GetProvidersRequest) Descriptor() ([]byte, []int) { +// Deprecated: Use ProjectTypes.ProtoReflect.Descriptor instead. +func (*ProjectTypes) Descriptor() ([]byte, []int) { return file_project_proto_rawDescGZIP(), []int{36} } -func (x *GetProvidersRequest) GetProjectId() string { +func (x *ProjectTypes) GetNodeType() *descriptorpb.DescriptorProto { if x != nil { - return x.ProjectId + return x.NodeType } - return "" + return nil } -type EnumeratedProvider struct { +func (x *ProjectTypes) GetEdgeType() *descriptorpb.DescriptorProto { + if x != nil { + return x.EdgeType + } + return nil +} + +func (x *ProjectTypes) GetDescLookup() map[string]*descriptorpb.DescriptorProto { + if x != nil { + return x.DescLookup + } + return nil +} + +func (x *ProjectTypes) GetEnumLookup() map[string]*descriptorpb.EnumDescriptorProto { + if x != nil { + return x.EnumLookup + } + return nil +} + +type ProviderInfo struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Provider *NodeDetails `protobuf:"bytes,1,opt,name=provider,proto3" json:"provider,omitempty"` - Nodes []*Node `protobuf:"bytes,2,rep,name=nodes,proto3" json:"nodes,omitempty"` - Info *ProviderInfo `protobuf:"bytes,3,opt,name=info,proto3" json:"info,omitempty"` + State ProviderState `protobuf:"varint,1,opt,name=state,proto3,enum=project.ProviderState" json:"state,omitempty"` + Error string `protobuf:"bytes,2,opt,name=error,proto3" json:"error,omitempty"` } -func (x *EnumeratedProvider) Reset() { - *x = EnumeratedProvider{} +func (x *ProviderInfo) Reset() { + *x = ProviderInfo{} if protoimpl.UnsafeEnabled { mi := &file_project_proto_msgTypes[37] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -2029,13 +2025,13 @@ func (x *EnumeratedProvider) Reset() { } } -func (x *EnumeratedProvider) String() string { +func (x *ProviderInfo) String() string { return protoimpl.X.MessageStringOf(x) } -func (*EnumeratedProvider) ProtoMessage() {} +func (*ProviderInfo) ProtoMessage() {} -func (x *EnumeratedProvider) ProtoReflect() protoreflect.Message { +func (x *ProviderInfo) ProtoReflect() protoreflect.Message { mi := &file_project_proto_msgTypes[37] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -2047,58 +2043,365 @@ func (x *EnumeratedProvider) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use EnumeratedProvider.ProtoReflect.Descriptor instead. -func (*EnumeratedProvider) Descriptor() ([]byte, []int) { +// Deprecated: Use ProviderInfo.ProtoReflect.Descriptor instead. +func (*ProviderInfo) Descriptor() ([]byte, []int) { return file_project_proto_rawDescGZIP(), []int{37} } -func (x *EnumeratedProvider) GetProvider() *NodeDetails { +func (x *ProviderInfo) GetState() ProviderState { if x != nil { - return x.Provider + return x.State + } + return ProviderState_UNKNOWN +} + +func (x *ProviderInfo) GetError() string { + if x != nil { + return x.Error + } + return "" +} + +type RunGRPCMethodRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Host string `protobuf:"bytes,1,opt,name=host,proto3" json:"host,omitempty"` + Service string `protobuf:"bytes,2,opt,name=service,proto3" json:"service,omitempty"` + Method string `protobuf:"bytes,3,opt,name=method,proto3" json:"method,omitempty"` + Input string `protobuf:"bytes,4,opt,name=input,proto3" json:"input,omitempty"` + Package string `protobuf:"bytes,5,opt,name=package,proto3" json:"package,omitempty"` +} + +func (x *RunGRPCMethodRequest) Reset() { + *x = RunGRPCMethodRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_project_proto_msgTypes[38] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RunGRPCMethodRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RunGRPCMethodRequest) ProtoMessage() {} + +func (x *RunGRPCMethodRequest) ProtoReflect() protoreflect.Message { + mi := &file_project_proto_msgTypes[38] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RunGRPCMethodRequest.ProtoReflect.Descriptor instead. +func (*RunGRPCMethodRequest) Descriptor() ([]byte, []int) { + return file_project_proto_rawDescGZIP(), []int{38} +} + +func (x *RunGRPCMethodRequest) GetHost() string { + if x != nil { + return x.Host + } + return "" +} + +func (x *RunGRPCMethodRequest) GetService() string { + if x != nil { + return x.Service + } + return "" +} + +func (x *RunGRPCMethodRequest) GetMethod() string { + if x != nil { + return x.Method + } + return "" +} + +func (x *RunGRPCMethodRequest) GetInput() string { + if x != nil { + return x.Input + } + return "" +} + +func (x *RunGRPCMethodRequest) GetPackage() string { + if x != nil { + return x.Package + } + return "" +} + +type RunGRPCMethodResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Output string `protobuf:"bytes,1,opt,name=output,proto3" json:"output,omitempty"` +} + +func (x *RunGRPCMethodResponse) Reset() { + *x = RunGRPCMethodResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_project_proto_msgTypes[39] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RunGRPCMethodResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RunGRPCMethodResponse) ProtoMessage() {} + +func (x *RunGRPCMethodResponse) ProtoReflect() protoreflect.Message { + mi := &file_project_proto_msgTypes[39] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RunGRPCMethodResponse.ProtoReflect.Descriptor instead. +func (*RunGRPCMethodResponse) Descriptor() ([]byte, []int) { + return file_project_proto_rawDescGZIP(), []int{39} +} + +func (x *RunGRPCMethodResponse) GetOutput() string { + if x != nil { + return x.Output + } + return "" +} + +type RunWorkflowRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"` + NodeId string `protobuf:"bytes,2,opt,name=node_id,json=nodeId,proto3" json:"node_id,omitempty"` + Input string `protobuf:"bytes,3,opt,name=input,proto3" json:"input,omitempty"` + StartServer bool `protobuf:"varint,4,opt,name=start_server,json=startServer,proto3" json:"start_server,omitempty"` +} + +func (x *RunWorkflowRequest) Reset() { + *x = RunWorkflowRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_project_proto_msgTypes[40] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RunWorkflowRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RunWorkflowRequest) ProtoMessage() {} + +func (x *RunWorkflowRequest) ProtoReflect() protoreflect.Message { + mi := &file_project_proto_msgTypes[40] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RunWorkflowRequest.ProtoReflect.Descriptor instead. +func (*RunWorkflowRequest) Descriptor() ([]byte, []int) { + return file_project_proto_rawDescGZIP(), []int{40} +} + +func (x *RunWorkflowRequest) GetProjectId() string { + if x != nil { + return x.ProjectId + } + return "" +} + +func (x *RunWorkflowRequest) GetNodeId() string { + if x != nil { + return x.NodeId + } + return "" +} + +func (x *RunWorkflowRequest) GetInput() string { + if x != nil { + return x.Input + } + return "" +} + +func (x *RunWorkflowRequest) GetStartServer() bool { + if x != nil { + return x.StartServer + } + return false +} + +type RuntimeData struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Calls []string `protobuf:"bytes,2,rep,name=calls,proto3" json:"calls,omitempty"` + Graph *GraphData `protobuf:"bytes,3,opt,name=graph,proto3" json:"graph,omitempty"` +} + +func (x *RuntimeData) Reset() { + *x = RuntimeData{} + if protoimpl.UnsafeEnabled { + mi := &file_project_proto_msgTypes[41] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RuntimeData) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RuntimeData) ProtoMessage() {} + +func (x *RuntimeData) ProtoReflect() protoreflect.Message { + mi := &file_project_proto_msgTypes[41] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RuntimeData.ProtoReflect.Descriptor instead. +func (*RuntimeData) Descriptor() ([]byte, []int) { + return file_project_proto_rawDescGZIP(), []int{41} +} + +func (x *RuntimeData) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *RuntimeData) GetCalls() []string { + if x != nil { + return x.Calls } return nil } -func (x *EnumeratedProvider) GetNodes() []*Node { +func (x *RuntimeData) GetGraph() *GraphData { if x != nil { - return x.Nodes + return x.Graph } return nil } -func (x *EnumeratedProvider) GetInfo() *ProviderInfo { +type SaveProjectRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"` + Graph *Graph `protobuf:"bytes,2,opt,name=graph,proto3" json:"graph,omitempty"` +} + +func (x *SaveProjectRequest) Reset() { + *x = SaveProjectRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_project_proto_msgTypes[42] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SaveProjectRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SaveProjectRequest) ProtoMessage() {} + +func (x *SaveProjectRequest) ProtoReflect() protoreflect.Message { + mi := &file_project_proto_msgTypes[42] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SaveProjectRequest.ProtoReflect.Descriptor instead. +func (*SaveProjectRequest) Descriptor() ([]byte, []int) { + return file_project_proto_rawDescGZIP(), []int{42} +} + +func (x *SaveProjectRequest) GetProjectId() string { if x != nil { - return x.Info + return x.ProjectId + } + return "" +} + +func (x *SaveProjectRequest) GetGraph() *Graph { + if x != nil { + return x.Graph } return nil } -type ProviderInfo struct { +type SaveProjectResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - State ProviderState `protobuf:"varint,1,opt,name=state,proto3,enum=project.ProviderState" json:"state,omitempty"` - Error string `protobuf:"bytes,2,opt,name=error,proto3" json:"error,omitempty"` + Project *Project `protobuf:"bytes,1,opt,name=project,proto3" json:"project,omitempty"` } -func (x *ProviderInfo) Reset() { - *x = ProviderInfo{} +func (x *SaveProjectResponse) Reset() { + *x = SaveProjectResponse{} if protoimpl.UnsafeEnabled { - mi := &file_project_proto_msgTypes[38] + mi := &file_project_proto_msgTypes[43] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *ProviderInfo) String() string { +func (x *SaveProjectResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ProviderInfo) ProtoMessage() {} +func (*SaveProjectResponse) ProtoMessage() {} -func (x *ProviderInfo) ProtoReflect() protoreflect.Message { - mi := &file_project_proto_msgTypes[38] +func (x *SaveProjectResponse) ProtoReflect() protoreflect.Message { + mi := &file_project_proto_msgTypes[43] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2109,50 +2412,136 @@ func (x *ProviderInfo) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ProviderInfo.ProtoReflect.Descriptor instead. -func (*ProviderInfo) Descriptor() ([]byte, []int) { - return file_project_proto_rawDescGZIP(), []int{38} +// Deprecated: Use SaveProjectResponse.ProtoReflect.Descriptor instead. +func (*SaveProjectResponse) Descriptor() ([]byte, []int) { + return file_project_proto_rawDescGZIP(), []int{43} } -func (x *ProviderInfo) GetState() ProviderState { +func (x *SaveProjectResponse) GetProject() *Project { if x != nil { - return x.State + return x.Project } - return ProviderState_UNKNOWN + return nil } -func (x *ProviderInfo) GetError() string { +type StopWorkflowRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"` + WorkflowId string `protobuf:"bytes,2,opt,name=workflow_id,json=workflowId,proto3" json:"workflow_id,omitempty"` +} + +func (x *StopWorkflowRequest) Reset() { + *x = StopWorkflowRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_project_proto_msgTypes[44] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *StopWorkflowRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StopWorkflowRequest) ProtoMessage() {} + +func (x *StopWorkflowRequest) ProtoReflect() protoreflect.Message { + mi := &file_project_proto_msgTypes[44] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use StopWorkflowRequest.ProtoReflect.Descriptor instead. +func (*StopWorkflowRequest) Descriptor() ([]byte, []int) { + return file_project_proto_rawDescGZIP(), []int{44} +} + +func (x *StopWorkflowRequest) GetProjectId() string { if x != nil { - return x.Error + return x.ProjectId } return "" } -type GetProvidersResponse struct { +func (x *StopWorkflowRequest) GetWorkflowId() string { + if x != nil { + return x.WorkflowId + } + return "" +} + +type StopWorkflowResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - - Providers []*EnumeratedProvider `protobuf:"bytes,1,rep,name=providers,proto3" json:"providers,omitempty"` } -func (x *GetProvidersResponse) Reset() { - *x = GetProvidersResponse{} +func (x *StopWorkflowResponse) Reset() { + *x = StopWorkflowResponse{} if protoimpl.UnsafeEnabled { - mi := &file_project_proto_msgTypes[39] + mi := &file_project_proto_msgTypes[45] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *GetProvidersResponse) String() string { +func (x *StopWorkflowResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*GetProvidersResponse) ProtoMessage() {} +func (*StopWorkflowResponse) ProtoMessage() {} -func (x *GetProvidersResponse) ProtoReflect() protoreflect.Message { - mi := &file_project_proto_msgTypes[39] +func (x *StopWorkflowResponse) ProtoReflect() protoreflect.Message { + mi := &file_project_proto_msgTypes[45] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use StopWorkflowResponse.ProtoReflect.Descriptor instead. +func (*StopWorkflowResponse) Descriptor() ([]byte, []int) { + return file_project_proto_rawDescGZIP(), []int{45} +} + +type Test3Request struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Message string `protobuf:"bytes,1,opt,name=message,proto3" json:"message,omitempty"` +} + +func (x *Test3Request) Reset() { + *x = Test3Request{} + if protoimpl.UnsafeEnabled { + mi := &file_project_proto_msgTypes[46] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Test3Request) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Test3Request) ProtoMessage() {} + +func (x *Test3Request) ProtoReflect() protoreflect.Message { + mi := &file_project_proto_msgTypes[46] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2163,44 +2552,43 @@ func (x *GetProvidersResponse) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use GetProvidersResponse.ProtoReflect.Descriptor instead. -func (*GetProvidersResponse) Descriptor() ([]byte, []int) { - return file_project_proto_rawDescGZIP(), []int{39} +// Deprecated: Use Test3Request.ProtoReflect.Descriptor instead. +func (*Test3Request) Descriptor() ([]byte, []int) { + return file_project_proto_rawDescGZIP(), []int{46} } -func (x *GetProvidersResponse) GetProviders() []*EnumeratedProvider { +func (x *Test3Request) GetMessage() string { if x != nil { - return x.Providers + return x.Message } - return nil + return "" } -type SaveProjectRequest struct { +type Test3Response struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"` - Graph *Graph `protobuf:"bytes,2,opt,name=graph,proto3" json:"graph,omitempty"` + Result string `protobuf:"bytes,1,opt,name=result,proto3" json:"result,omitempty"` } -func (x *SaveProjectRequest) Reset() { - *x = SaveProjectRequest{} +func (x *Test3Response) Reset() { + *x = Test3Response{} if protoimpl.UnsafeEnabled { - mi := &file_project_proto_msgTypes[40] + mi := &file_project_proto_msgTypes[47] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *SaveProjectRequest) String() string { +func (x *Test3Response) String() string { return protoimpl.X.MessageStringOf(x) } -func (*SaveProjectRequest) ProtoMessage() {} +func (*Test3Response) ProtoMessage() {} -func (x *SaveProjectRequest) ProtoReflect() protoreflect.Message { - mi := &file_project_proto_msgTypes[40] +func (x *Test3Response) ProtoReflect() protoreflect.Message { + mi := &file_project_proto_msgTypes[47] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2211,50 +2599,45 @@ func (x *SaveProjectRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use SaveProjectRequest.ProtoReflect.Descriptor instead. -func (*SaveProjectRequest) Descriptor() ([]byte, []int) { - return file_project_proto_rawDescGZIP(), []int{40} +// Deprecated: Use Test3Response.ProtoReflect.Descriptor instead. +func (*Test3Response) Descriptor() ([]byte, []int) { + return file_project_proto_rawDescGZIP(), []int{47} } -func (x *SaveProjectRequest) GetProjectId() string { +func (x *Test3Response) GetResult() string { if x != nil { - return x.ProjectId + return x.Result } return "" } -func (x *SaveProjectRequest) GetGraph() *Graph { - if x != nil { - return x.Graph - } - return nil -} - -type SaveProjectResponse struct { +type WorkflowTrace struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Project *Project `protobuf:"bytes,1,opt,name=project,proto3" json:"project,omitempty"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Request *RunWorkflowRequest `protobuf:"bytes,2,opt,name=request,proto3" json:"request,omitempty"` + NodeExecs []*NodeExecution `protobuf:"bytes,3,rep,name=node_execs,json=nodeExecs,proto3" json:"node_execs,omitempty"` } -func (x *SaveProjectResponse) Reset() { - *x = SaveProjectResponse{} +func (x *WorkflowTrace) Reset() { + *x = WorkflowTrace{} if protoimpl.UnsafeEnabled { - mi := &file_project_proto_msgTypes[41] + mi := &file_project_proto_msgTypes[48] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *SaveProjectResponse) String() string { +func (x *WorkflowTrace) String() string { return protoimpl.X.MessageStringOf(x) } -func (*SaveProjectResponse) ProtoMessage() {} +func (*WorkflowTrace) ProtoMessage() {} -func (x *SaveProjectResponse) ProtoReflect() protoreflect.Message { - mi := &file_project_proto_msgTypes[41] +func (x *WorkflowTrace) ProtoReflect() protoreflect.Message { + mi := &file_project_proto_msgTypes[48] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2265,18 +2648,49 @@ func (x *SaveProjectResponse) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use SaveProjectResponse.ProtoReflect.Descriptor instead. -func (*SaveProjectResponse) Descriptor() ([]byte, []int) { - return file_project_proto_rawDescGZIP(), []int{41} +// Deprecated: Use WorkflowTrace.ProtoReflect.Descriptor instead. +func (*WorkflowTrace) Descriptor() ([]byte, []int) { + return file_project_proto_rawDescGZIP(), []int{48} } -func (x *SaveProjectResponse) GetProject() *Project { +func (x *WorkflowTrace) GetId() string { if x != nil { - return x.Project + return x.Id + } + return "" +} + +func (x *WorkflowTrace) GetRequest() *RunWorkflowRequest { + if x != nil { + return x.Request + } + return nil +} + +func (x *WorkflowTrace) GetNodeExecs() []*NodeExecution { + if x != nil { + return x.NodeExecs } return nil } +var file_project_proto_extTypes = []protoimpl.ExtensionInfo{ + { + ExtendedType: (*descriptorpb.ServiceOptions)(nil), + ExtensionType: (*string)(nil), + Field: 50000, + Name: "project.handler_path", + Tag: "bytes,50000,opt,name=handler_path", + Filename: "project.proto", + }, +} + +// Extension fields to descriptorpb.ServiceOptions. +var ( + // optional string handler_path = 50000; + E_HandlerPath = &file_project_proto_extTypes[0] +) + var File_project_proto protoreflect.FileDescriptor var file_project_proto_rawDesc = []byte{ @@ -2284,64 +2698,85 @@ var file_project_proto_rawDesc = []byte{ 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x1a, 0x20, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x0b, 0x67, 0x72, 0x61, 0x70, - 0x68, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x51, 0x0a, 0x07, 0x50, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, - 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x22, 0x0a, 0x05, 0x67, 0x72, 0x61, 0x70, 0x68, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x2e, 0x47, 0x72, - 0x61, 0x70, 0x68, 0x52, 0x05, 0x67, 0x72, 0x61, 0x70, 0x68, 0x22, 0x3b, 0x0a, 0x1a, 0x47, 0x65, - 0x74, 0x52, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, - 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x22, 0x4c, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x52, 0x75, - 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2e, 0x0a, 0x06, 0x74, 0x72, 0x61, 0x63, 0x65, 0x73, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, - 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x54, 0x72, 0x61, 0x63, 0x65, 0x52, 0x06, 0x74, - 0x72, 0x61, 0x63, 0x65, 0x73, 0x22, 0x50, 0x0a, 0x0e, 0x4e, 0x65, 0x77, 0x4e, 0x6f, 0x64, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x04, 0x6e, 0x6f, 0x64, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x2e, 0x4e, 0x6f, 0x64, - 0x65, 0x52, 0x04, 0x6e, 0x6f, 0x64, 0x65, 0x22, 0x32, 0x0a, 0x0f, 0x4e, 0x65, 0x77, 0x4e, 0x6f, - 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1f, 0x0a, 0x04, 0x6e, 0x6f, - 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, - 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x04, 0x6e, 0x6f, 0x64, 0x65, 0x22, 0x49, 0x0a, 0x14, 0x45, + 0x68, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x08, 0x61, 0x69, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x22, 0x72, 0x0a, 0x10, 0x41, 0x64, 0x64, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x66, 0x69, 0x6c, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x61, 0x63, + 0x6b, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x61, 0x63, 0x6b, + 0x61, 0x67, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x16, 0x0a, + 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6d, + 0x65, 0x74, 0x68, 0x6f, 0x64, 0x22, 0x13, 0x0a, 0x11, 0x41, 0x64, 0x64, 0x4d, 0x65, 0x74, 0x68, + 0x6f, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2a, 0x0a, 0x14, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x43, 0x0a, 0x15, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x2a, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x10, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x1c, 0x0a, 0x04, 0x44, + 0x61, 0x74, 0x61, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x26, 0x0a, 0x14, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, + 0x64, 0x22, 0x43, 0x0a, 0x15, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2a, 0x0a, 0x07, 0x70, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x70, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x07, 0x70, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x92, 0x01, 0x0a, 0x12, 0x45, 0x6e, 0x75, 0x6d, 0x65, + 0x72, 0x61, 0x74, 0x65, 0x64, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x2e, 0x0a, + 0x08, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x12, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x44, 0x65, 0x74, 0x61, + 0x69, 0x6c, 0x73, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x21, 0x0a, + 0x05, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x67, + 0x72, 0x61, 0x70, 0x68, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x05, 0x6e, 0x6f, 0x64, 0x65, 0x73, + 0x12, 0x29, 0x0a, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, + 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, + 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x22, 0x49, 0x0a, 0x14, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x22, 0x17, 0x0a, 0x15, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x28, 0x0a, 0x12, 0x4c, 0x6f, 0x61, 0x64, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x22, 0x41, 0x0a, 0x13, 0x4c, 0x6f, 0x61, - 0x64, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x2a, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x10, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x50, 0x72, 0x6f, 0x6a, - 0x65, 0x63, 0x74, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x37, 0x0a, 0x16, - 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, - 0x65, 0x63, 0x74, 0x49, 0x64, 0x22, 0xe2, 0x03, 0x0a, 0x0c, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x3d, 0x0a, 0x09, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x74, - 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x65, 0x73, 0x63, - 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x52, 0x08, 0x6e, 0x6f, 0x64, - 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x3d, 0x0a, 0x09, 0x65, 0x64, 0x67, 0x65, 0x5f, 0x74, 0x79, - 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x65, 0x73, 0x63, 0x72, - 0x69, 0x70, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x52, 0x08, 0x65, 0x64, 0x67, 0x65, - 0x54, 0x79, 0x70, 0x65, 0x12, 0x46, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x5f, 0x6c, 0x6f, 0x6f, - 0x6b, 0x75, 0x70, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x72, 0x6f, 0x6a, - 0x65, 0x63, 0x74, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, - 0x2e, 0x44, 0x65, 0x73, 0x63, 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x52, 0x0a, 0x64, 0x65, 0x73, 0x63, 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x12, 0x46, 0x0a, 0x0b, - 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x6c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x18, 0x04, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x50, 0x72, 0x6f, 0x6a, - 0x65, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x45, 0x6e, 0x75, 0x6d, 0x4c, 0x6f, 0x6f, - 0x6b, 0x75, 0x70, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x65, 0x6e, 0x75, 0x6d, 0x4c, 0x6f, - 0x6f, 0x6b, 0x75, 0x70, 0x1a, 0x5f, 0x0a, 0x0f, 0x44, 0x65, 0x73, 0x63, 0x4c, 0x6f, 0x6f, 0x6b, + 0x54, 0x0a, 0x0a, 0x47, 0x52, 0x50, 0x43, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12, 0x12, 0x0a, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x12, 0x32, 0x0a, 0x09, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x47, + 0x52, 0x50, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x08, 0x74, 0x79, 0x70, + 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x7e, 0x0a, 0x0b, 0x47, 0x52, 0x50, 0x43, 0x53, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x12, 0x12, + 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x12, 0x2d, 0x0a, 0x07, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x73, 0x18, 0x03, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x47, 0x52, + 0x50, 0x43, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x52, 0x07, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, + 0x73, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x66, 0x69, 0x6c, 0x65, 0x22, 0xc2, 0x04, 0x0a, 0x0c, 0x47, 0x52, 0x50, 0x43, 0x54, 0x79, + 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x36, 0x0a, 0x05, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, + 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x52, 0x05, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x12, 0x38, + 0x0a, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, + 0x52, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x46, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, + 0x5f, 0x6c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, + 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x47, 0x52, 0x50, 0x43, 0x54, 0x79, 0x70, 0x65, + 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x44, 0x65, 0x73, 0x63, 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x64, 0x65, 0x73, 0x63, 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, + 0x12, 0x46, 0x0a, 0x0b, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x6c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x18, + 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, + 0x47, 0x52, 0x50, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x45, 0x6e, 0x75, + 0x6d, 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x65, 0x6e, + 0x75, 0x6d, 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x12, 0x47, 0x0a, 0x0b, 0x6d, 0x65, 0x74, 0x68, + 0x6f, 0x64, 0x5f, 0x64, 0x65, 0x73, 0x63, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, + 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x52, 0x0a, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x44, 0x65, 0x73, + 0x63, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x5f, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, + 0x4e, 0x61, 0x6d, 0x65, 0x1a, 0x5f, 0x0a, 0x0f, 0x44, 0x65, 0x73, 0x63, 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x36, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, @@ -2353,271 +2788,309 @@ var file_project_proto_rawDesc = []byte{ 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6e, 0x75, 0x6d, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x52, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x55, 0x0a, 0x13, 0x53, 0x74, - 0x6f, 0x70, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, - 0x12, 0x1f, 0x0a, 0x0b, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x5f, 0x69, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x49, - 0x64, 0x22, 0x16, 0x0a, 0x14, 0x53, 0x74, 0x6f, 0x70, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, - 0x77, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x16, 0x0a, 0x04, 0x43, 0x68, 0x61, - 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, - 0x64, 0x22, 0x3b, 0x0a, 0x0b, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x12, 0x12, 0x0a, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x72, 0x6f, 0x6c, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x4e, - 0x0a, 0x0f, 0x53, 0x65, 0x6e, 0x64, 0x43, 0x68, 0x61, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x21, 0x0a, 0x04, 0x63, 0x68, 0x61, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x0d, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x52, 0x04, - 0x63, 0x68, 0x61, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x2c, - 0x0a, 0x10, 0x53, 0x65, 0x6e, 0x64, 0x43, 0x68, 0x61, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x37, 0x0a, 0x16, - 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x52, 0x75, 0x6e, 0x73, 0x52, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x55, 0x0a, 0x15, 0x47, 0x65, + 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x41, 0x49, 0x53, 0x74, 0x75, 0x62, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x12, + 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x22, 0x2e, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x47, 0x52, 0x50, 0x43, 0x53, 0x65, 0x72, 0x76, + 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, + 0x04, 0x68, 0x6f, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x68, 0x6f, 0x73, + 0x74, 0x22, 0x4d, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x47, 0x52, 0x50, 0x43, 0x53, 0x65, 0x72, 0x76, + 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x30, + 0x0a, 0x08, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x14, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x47, 0x52, 0x50, 0x43, 0x53, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x08, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, + 0x22, 0x4c, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, - 0x65, 0x63, 0x74, 0x49, 0x64, 0x22, 0x45, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, - 0x66, 0x6c, 0x6f, 0x77, 0x52, 0x75, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x2a, 0x0a, 0x04, 0x72, 0x75, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, - 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, - 0x77, 0x54, 0x72, 0x61, 0x63, 0x65, 0x52, 0x04, 0x72, 0x75, 0x6e, 0x73, 0x22, 0x8d, 0x01, 0x0a, - 0x0d, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x54, 0x72, 0x61, 0x63, 0x65, 0x12, 0x0e, - 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x35, - 0x0a, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1b, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x52, 0x75, 0x6e, 0x57, 0x6f, 0x72, - 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x07, 0x72, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x35, 0x0a, 0x0a, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x65, 0x78, - 0x65, 0x63, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x72, 0x6f, 0x6a, - 0x65, 0x63, 0x74, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x09, 0x6e, 0x6f, 0x64, 0x65, 0x45, 0x78, 0x65, 0x63, 0x73, 0x22, 0x40, 0x0a, 0x0d, - 0x4e, 0x6f, 0x64, 0x65, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x17, 0x0a, - 0x07, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, - 0x6e, 0x6f, 0x64, 0x65, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x22, 0x4c, - 0x0a, 0x12, 0x47, 0x65, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6e, 0x6f, 0x64, 0x65, 0x49, 0x64, 0x22, 0xc2, 0x04, 0x0a, - 0x0c, 0x47, 0x52, 0x50, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x36, 0x0a, - 0x05, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x67, + 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x69, 0x64, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6e, 0x6f, 0x64, 0x65, 0x49, 0x64, 0x22, 0x6c, + 0x0a, 0x13, 0x47, 0x65, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x5f, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6d, 0x65, 0x74, + 0x68, 0x6f, 0x64, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x32, 0x0a, 0x09, 0x74, 0x79, 0x70, 0x65, + 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x70, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x47, 0x52, 0x50, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, + 0x66, 0x6f, 0x52, 0x08, 0x74, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x23, 0x0a, 0x11, + 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, + 0x64, 0x22, 0x6d, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2a, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x12, 0x2b, 0x0a, 0x05, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x50, 0x72, 0x6f, + 0x6a, 0x65, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x52, 0x05, 0x74, 0x79, 0x70, 0x65, 0x73, + 0x22, 0x37, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x79, + 0x70, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, + 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x22, 0x28, 0x0a, 0x12, 0x47, 0x65, 0x74, + 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x22, 0x4e, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, 0x08, 0x70, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x70, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x73, 0x22, 0x34, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, + 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, + 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x22, 0x51, 0x0a, 0x14, 0x47, 0x65, 0x74, + 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x39, 0x0a, 0x09, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x45, + 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, + 0x72, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x22, 0x4c, 0x0a, 0x1a, + 0x47, 0x65, 0x74, 0x52, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, + 0x6f, 0x77, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2e, 0x0a, 0x06, 0x74, 0x72, + 0x61, 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x72, 0x6f, + 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x54, 0x72, 0x61, + 0x63, 0x65, 0x52, 0x06, 0x74, 0x72, 0x61, 0x63, 0x65, 0x73, 0x22, 0x3b, 0x0a, 0x1a, 0x47, 0x65, + 0x74, 0x52, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x22, 0x37, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x57, 0x6f, + 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x52, 0x75, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, + 0x22, 0x45, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x52, + 0x75, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2a, 0x0a, 0x04, 0x72, + 0x75, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x54, 0x72, 0x61, 0x63, + 0x65, 0x52, 0x04, 0x72, 0x75, 0x6e, 0x73, 0x22, 0x27, 0x0a, 0x09, 0x47, 0x72, 0x61, 0x70, 0x68, + 0x44, 0x61, 0x74, 0x61, 0x12, 0x0c, 0x0a, 0x01, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, + 0x01, 0x78, 0x12, 0x0c, 0x0a, 0x01, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x02, 0x52, 0x01, 0x79, + 0x22, 0x28, 0x0a, 0x12, 0x4c, 0x6f, 0x61, 0x64, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x22, 0x41, 0x0a, 0x13, 0x4c, 0x6f, + 0x61, 0x64, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x2a, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x50, 0x72, 0x6f, + 0x6a, 0x65, 0x63, 0x74, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x50, 0x0a, + 0x0e, 0x4e, 0x65, 0x77, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x1f, + 0x0a, 0x04, 0x6e, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x67, + 0x72, 0x61, 0x70, 0x68, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x04, 0x6e, 0x6f, 0x64, 0x65, 0x22, + 0x32, 0x0a, 0x0f, 0x4e, 0x65, 0x77, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x1f, 0x0a, 0x04, 0x6e, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x0b, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x04, 0x6e, + 0x6f, 0x64, 0x65, 0x22, 0x40, 0x0a, 0x0d, 0x4e, 0x6f, 0x64, 0x65, 0x45, 0x78, 0x65, 0x63, 0x75, + 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x17, 0x0a, 0x07, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6e, 0x6f, 0x64, 0x65, 0x49, 0x64, 0x12, 0x16, 0x0a, + 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6f, + 0x75, 0x74, 0x70, 0x75, 0x74, 0x22, 0x51, 0x0a, 0x07, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, + 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x22, 0x0a, 0x05, 0x67, 0x72, 0x61, 0x70, 0x68, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x2e, 0x47, 0x72, 0x61, 0x70, + 0x68, 0x52, 0x05, 0x67, 0x72, 0x61, 0x70, 0x68, 0x22, 0xe2, 0x03, 0x0a, 0x0c, 0x50, 0x72, 0x6f, + 0x6a, 0x65, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x3d, 0x0a, 0x09, 0x6e, 0x6f, 0x64, + 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, - 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x52, 0x05, - 0x69, 0x6e, 0x70, 0x75, 0x74, 0x12, 0x38, 0x0a, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x52, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, - 0x46, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x5f, 0x6c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x18, 0x03, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x47, - 0x52, 0x50, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x44, 0x65, 0x73, 0x63, - 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x64, 0x65, 0x73, - 0x63, 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x12, 0x46, 0x0a, 0x0b, 0x65, 0x6e, 0x75, 0x6d, 0x5f, - 0x6c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x47, 0x52, 0x50, 0x43, 0x54, 0x79, 0x70, 0x65, 0x49, - 0x6e, 0x66, 0x6f, 0x2e, 0x45, 0x6e, 0x75, 0x6d, 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x52, 0x0a, 0x65, 0x6e, 0x75, 0x6d, 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x12, - 0x47, 0x0a, 0x0b, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x5f, 0x64, 0x65, 0x73, 0x63, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x44, 0x65, 0x73, - 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x52, 0x0a, 0x6d, 0x65, - 0x74, 0x68, 0x6f, 0x64, 0x44, 0x65, 0x73, 0x63, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x61, 0x63, 0x6b, - 0x61, 0x67, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, - 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x1a, 0x5f, 0x0a, 0x0f, 0x44, - 0x65, 0x73, 0x63, 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, - 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, - 0x12, 0x36, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x20, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, - 0x6f, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x63, 0x0a, 0x0f, - 0x45, 0x6e, 0x75, 0x6d, 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, - 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, - 0x79, 0x12, 0x3a, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x24, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x45, 0x6e, 0x75, 0x6d, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, - 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, - 0x01, 0x22, 0x6c, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x6d, 0x65, 0x74, 0x68, - 0x6f, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, - 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x32, 0x0a, 0x09, 0x74, - 0x79, 0x70, 0x65, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, - 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x47, 0x52, 0x50, 0x43, 0x54, 0x79, 0x70, - 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x08, 0x74, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x22, - 0x61, 0x0a, 0x0b, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x44, 0x61, 0x74, 0x61, 0x12, 0x12, - 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, - 0x09, 0x52, 0x05, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x12, 0x28, 0x0a, 0x05, 0x67, 0x72, 0x61, 0x70, - 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x2e, 0x47, 0x72, 0x61, 0x70, 0x68, 0x44, 0x61, 0x74, 0x61, 0x52, 0x05, 0x67, 0x72, 0x61, - 0x70, 0x68, 0x22, 0x27, 0x0a, 0x09, 0x47, 0x72, 0x61, 0x70, 0x68, 0x44, 0x61, 0x74, 0x61, 0x12, - 0x0c, 0x0a, 0x01, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x01, 0x78, 0x12, 0x0c, 0x0a, - 0x01, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x02, 0x52, 0x01, 0x79, 0x22, 0x85, 0x01, 0x0a, 0x12, - 0x52, 0x75, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x52, 0x08, + 0x6e, 0x6f, 0x64, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x3d, 0x0a, 0x09, 0x65, 0x64, 0x67, 0x65, + 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x65, + 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x52, 0x08, 0x65, + 0x64, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x46, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x5f, + 0x6c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x79, + 0x70, 0x65, 0x73, 0x2e, 0x44, 0x65, 0x73, 0x63, 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x52, 0x0a, 0x64, 0x65, 0x73, 0x63, 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x12, + 0x46, 0x0a, 0x0b, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x6c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x18, 0x04, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x50, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x45, 0x6e, 0x75, 0x6d, + 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x65, 0x6e, 0x75, + 0x6d, 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x1a, 0x5f, 0x0a, 0x0f, 0x44, 0x65, 0x73, 0x63, 0x4c, + 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, + 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x36, 0x0a, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x65, + 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x52, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x63, 0x0a, 0x0f, 0x45, 0x6e, 0x75, 0x6d, + 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, + 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x3a, 0x0a, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, + 0x6e, 0x75, 0x6d, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, + 0x74, 0x6f, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x52, 0x0a, + 0x0c, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x2c, 0x0a, + 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x16, 0x2e, 0x70, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x53, + 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x65, + 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, + 0x72, 0x22, 0x8c, 0x01, 0x0a, 0x14, 0x52, 0x75, 0x6e, 0x47, 0x52, 0x50, 0x43, 0x4d, 0x65, 0x74, + 0x68, 0x6f, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x6f, + 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x68, 0x6f, 0x73, 0x74, 0x12, 0x18, + 0x0a, 0x07, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x07, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x65, 0x74, 0x68, + 0x6f, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, + 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x05, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, + 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, + 0x22, 0x2f, 0x0a, 0x15, 0x52, 0x75, 0x6e, 0x47, 0x52, 0x50, 0x43, 0x4d, 0x65, 0x74, 0x68, 0x6f, + 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x75, 0x74, + 0x70, 0x75, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, + 0x74, 0x22, 0x85, 0x01, 0x0a, 0x12, 0x52, 0x75, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, + 0x77, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x6e, 0x6f, 0x64, 0x65, 0x5f, + 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6e, 0x6f, 0x64, 0x65, 0x49, 0x64, + 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x05, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, + 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x73, 0x74, + 0x61, 0x72, 0x74, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x22, 0x61, 0x0a, 0x0b, 0x52, 0x75, 0x6e, + 0x74, 0x69, 0x6d, 0x65, 0x44, 0x61, 0x74, 0x61, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, + 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x63, 0x61, 0x6c, + 0x6c, 0x73, 0x12, 0x28, 0x0a, 0x05, 0x67, 0x72, 0x61, 0x70, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x47, 0x72, 0x61, 0x70, + 0x68, 0x44, 0x61, 0x74, 0x61, 0x52, 0x05, 0x67, 0x72, 0x61, 0x70, 0x68, 0x22, 0x57, 0x0a, 0x12, + 0x53, 0x61, 0x76, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, - 0x64, 0x12, 0x17, 0x0a, 0x07, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x06, 0x6e, 0x6f, 0x64, 0x65, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, - 0x70, 0x75, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x69, 0x6e, 0x70, 0x75, 0x74, - 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x73, 0x74, 0x61, 0x72, 0x74, 0x53, 0x65, 0x72, - 0x76, 0x65, 0x72, 0x22, 0x1c, 0x0a, 0x04, 0x44, 0x61, 0x74, 0x61, 0x12, 0x14, 0x0a, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x22, 0x23, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x6d, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, + 0x64, 0x12, 0x22, 0x0a, 0x05, 0x67, 0x72, 0x61, 0x70, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x0c, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x2e, 0x47, 0x72, 0x61, 0x70, 0x68, 0x52, 0x05, + 0x67, 0x72, 0x61, 0x70, 0x68, 0x22, 0x41, 0x0a, 0x13, 0x53, 0x61, 0x76, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2a, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, - 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x2b, 0x0a, 0x05, 0x74, 0x79, 0x70, 0x65, - 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x52, 0x05, - 0x74, 0x79, 0x70, 0x65, 0x73, 0x22, 0x28, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x6a, - 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, - 0x4e, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x22, - 0x2a, 0x0a, 0x14, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x43, 0x0a, 0x15, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2a, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, - 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x22, 0x26, 0x0a, 0x14, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x43, 0x0a, 0x15, 0x44, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x2a, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x50, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x34, 0x0a, - 0x13, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x49, 0x64, 0x22, 0x92, 0x01, 0x0a, 0x12, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, - 0x65, 0x64, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x2e, 0x0a, 0x08, 0x70, 0x72, - 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, - 0x72, 0x61, 0x70, 0x68, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, - 0x52, 0x08, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x21, 0x0a, 0x05, 0x6e, 0x6f, - 0x64, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x67, 0x72, 0x61, 0x70, - 0x68, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x05, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x12, 0x29, 0x0a, - 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x70, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x49, 0x6e, - 0x66, 0x6f, 0x52, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x22, 0x52, 0x0a, 0x0c, 0x50, 0x72, 0x6f, 0x76, - 0x69, 0x64, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x2c, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x16, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x2e, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, - 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x51, 0x0a, 0x14, - 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x39, 0x0a, 0x09, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x2e, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x50, 0x72, 0x6f, 0x76, - 0x69, 0x64, 0x65, 0x72, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x22, - 0x57, 0x0a, 0x12, 0x53, 0x61, 0x76, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x05, 0x67, 0x72, 0x61, 0x70, 0x68, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x2e, 0x47, 0x72, 0x61, 0x70, - 0x68, 0x52, 0x05, 0x67, 0x72, 0x61, 0x70, 0x68, 0x22, 0x41, 0x0a, 0x13, 0x53, 0x61, 0x76, 0x65, - 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x2a, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x10, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2a, 0x32, 0x0a, 0x0d, 0x50, - 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0b, 0x0a, 0x07, - 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x52, 0x45, 0x41, - 0x44, 0x59, 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x02, 0x32, - 0xf8, 0x09, 0x0a, 0x0e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x12, 0x3e, 0x0a, 0x07, 0x4e, 0x65, 0x77, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x17, 0x2e, - 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x4e, 0x65, 0x77, 0x4e, 0x6f, 0x64, 0x65, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x2e, 0x4e, 0x65, 0x77, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x00, 0x12, 0x4b, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x1f, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, - 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x15, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x22, 0x00, 0x12, - 0x43, 0x0a, 0x08, 0x53, 0x65, 0x6e, 0x64, 0x43, 0x68, 0x61, 0x74, 0x12, 0x18, 0x2e, 0x70, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x43, 0x68, 0x61, 0x74, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, - 0x53, 0x65, 0x6e, 0x64, 0x43, 0x68, 0x61, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x00, 0x30, 0x01, 0x12, 0x50, 0x0a, 0x0d, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x50, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x1d, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, - 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x45, - 0x78, 0x70, 0x6f, 0x72, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4a, 0x0a, 0x0b, 0x4c, 0x6f, 0x61, 0x64, 0x50, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x1b, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, - 0x4c, 0x6f, 0x61, 0x64, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x4c, 0x6f, 0x61, - 0x64, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x00, 0x12, 0x47, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x55, 0x0a, 0x13, 0x53, 0x74, 0x6f, 0x70, + 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x1f, + 0x0a, 0x0b, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0a, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x49, 0x64, 0x22, + 0x16, 0x0a, 0x14, 0x53, 0x74, 0x6f, 0x70, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x28, 0x0a, 0x0c, 0x54, 0x65, 0x73, 0x74, 0x33, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x22, 0x27, 0x0a, 0x0d, 0x54, 0x65, 0x73, 0x74, 0x33, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x8d, 0x01, 0x0a, 0x0d, 0x57, + 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x54, 0x72, 0x61, 0x63, 0x65, 0x12, 0x0e, 0x0a, 0x02, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x35, 0x0a, 0x07, + 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, + 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x52, 0x75, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, + 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x07, 0x72, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x35, 0x0a, 0x0a, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x65, 0x78, 0x65, 0x63, + 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x52, + 0x09, 0x6e, 0x6f, 0x64, 0x65, 0x45, 0x78, 0x65, 0x63, 0x73, 0x2a, 0x32, 0x0a, 0x0d, 0x50, 0x72, + 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, + 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x52, 0x45, 0x41, 0x44, + 0x59, 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x02, 0x32, 0xdf, + 0x0b, 0x0a, 0x0e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x12, 0x42, 0x0a, 0x09, 0x41, 0x64, 0x64, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12, 0x19, + 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x41, 0x64, 0x64, 0x4d, 0x65, 0x74, 0x68, + 0x6f, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x2e, 0x41, 0x64, 0x64, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4e, 0x0a, 0x0d, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x1d, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4e, 0x0a, 0x0d, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x1d, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, + 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x51, 0x0a, 0x12, 0x45, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, + 0x74, 0x65, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x12, 0x1c, 0x2e, 0x70, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, + 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x70, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4e, 0x0a, 0x0d, 0x45, 0x78, 0x70, 0x6f, + 0x72, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x1d, 0x2e, 0x70, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x42, 0x0a, 0x0e, 0x47, 0x65, 0x6e, 0x65, + 0x72, 0x61, 0x74, 0x65, 0x41, 0x49, 0x53, 0x74, 0x75, 0x62, 0x12, 0x1e, 0x2e, 0x70, 0x72, 0x6f, + 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x41, 0x49, 0x53, + 0x74, 0x75, 0x62, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x10, 0x2e, 0x61, 0x69, 0x2e, + 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x5a, 0x0a, 0x11, + 0x47, 0x65, 0x74, 0x47, 0x52, 0x50, 0x43, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x49, 0x6e, 0x66, + 0x6f, 0x12, 0x21, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x47, 0x65, 0x74, 0x47, + 0x52, 0x50, 0x43, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x47, + 0x65, 0x74, 0x47, 0x52, 0x50, 0x43, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x4e, + 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1b, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x2e, 0x47, 0x65, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x47, + 0x65, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x45, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4a, 0x0a, 0x0b, 0x47, - 0x65, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x12, 0x1b, 0x2e, 0x70, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x50, 0x0a, 0x0d, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x1d, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x50, 0x0a, 0x0d, 0x44, 0x65, 0x6c, - 0x65, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x1d, 0x2e, 0x70, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x70, 0x72, 0x6f, 0x6a, - 0x65, 0x63, 0x74, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x53, 0x0a, 0x12, 0x45, - 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, - 0x73, 0x12, 0x1c, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x47, 0x65, 0x74, 0x50, - 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x1d, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, - 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, - 0x12, 0x4a, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, - 0x1b, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x47, 0x65, 0x74, 0x4e, 0x6f, 0x64, - 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x70, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x47, 0x65, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x49, 0x6e, - 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4a, 0x0a, 0x0b, - 0x53, 0x61, 0x76, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x1b, 0x2e, 0x70, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x53, 0x61, 0x76, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x2e, 0x53, 0x61, 0x76, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x46, 0x0a, 0x0b, 0x52, 0x75, 0x6e, 0x57, - 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x12, 0x1b, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x2e, 0x52, 0x75, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x4e, - 0x6f, 0x64, 0x65, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x00, 0x30, 0x01, - 0x12, 0x4d, 0x0a, 0x0c, 0x53, 0x74, 0x6f, 0x70, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, - 0x12, 0x1c, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x57, - 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, - 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x57, 0x6f, 0x72, - 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, - 0x56, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x52, 0x75, + 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x49, 0x0a, 0x0f, 0x47, 0x65, 0x74, + 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x1f, 0x2e, 0x70, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x15, 0x2e, + 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x54, + 0x79, 0x70, 0x65, 0x73, 0x12, 0x48, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x73, 0x12, 0x1b, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x47, 0x65, + 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x1c, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5f, + 0x0a, 0x13, 0x47, 0x65, 0x74, 0x52, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x57, 0x6f, 0x72, 0x6b, + 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x12, 0x23, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, + 0x47, 0x65, 0x74, 0x52, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, + 0x6f, 0x77, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x70, 0x72, 0x6f, + 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x57, + 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x54, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x52, 0x75, 0x6e, 0x73, 0x12, 0x1f, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x52, 0x75, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x52, 0x75, 0x6e, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x61, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x52, 0x75, - 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x12, 0x23, - 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x75, 0x6e, 0x6e, - 0x69, 0x6e, 0x67, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x47, 0x65, - 0x74, 0x52, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x80, 0x01, 0x0a, 0x0b, 0x63, - 0x6f, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x42, 0x0c, 0x50, 0x72, 0x6f, 0x6a, - 0x65, 0x63, 0x74, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x27, 0x67, 0x69, 0x74, 0x68, - 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x66, 0x6c, 0x6f, 0x77, - 0x2d, 0x6c, 0x61, 0x62, 0x73, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x66, 0x6c, 0x6f, 0x77, 0x2f, - 0x67, 0x65, 0x6e, 0xa2, 0x02, 0x03, 0x50, 0x58, 0x58, 0xaa, 0x02, 0x07, 0x50, 0x72, 0x6f, 0x6a, - 0x65, 0x63, 0x74, 0xca, 0x02, 0x07, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0xe2, 0x02, 0x13, - 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, - 0x61, 0x74, 0x61, 0xea, 0x02, 0x07, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x62, 0x06, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48, 0x0a, 0x0b, 0x4c, 0x6f, 0x61, 0x64, 0x50, 0x72, 0x6f, + 0x6a, 0x65, 0x63, 0x74, 0x12, 0x1b, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x4c, + 0x6f, 0x61, 0x64, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x1c, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x4c, 0x6f, 0x61, 0x64, + 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x3c, 0x0a, 0x07, 0x4e, 0x65, 0x77, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x17, 0x2e, 0x70, 0x72, 0x6f, + 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x4e, 0x65, 0x77, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x4e, 0x65, + 0x77, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48, 0x0a, + 0x0d, 0x52, 0x75, 0x6e, 0x47, 0x52, 0x50, 0x43, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12, 0x1d, + 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x52, 0x75, 0x6e, 0x47, 0x52, 0x50, 0x43, + 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, + 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x45, 0x78, 0x65, 0x63, + 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x30, 0x01, 0x12, 0x44, 0x0a, 0x0b, 0x52, 0x75, 0x6e, 0x57, 0x6f, + 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x12, 0x1b, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x2e, 0x52, 0x75, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x4e, 0x6f, + 0x64, 0x65, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x30, 0x01, 0x12, 0x48, 0x0a, + 0x0b, 0x53, 0x61, 0x76, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x1b, 0x2e, 0x70, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x53, 0x61, 0x76, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x70, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x2e, 0x53, 0x61, 0x76, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4b, 0x0a, 0x0c, 0x53, 0x74, 0x6f, 0x70, 0x57, + 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x12, 0x1c, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, + 0x53, 0x74, 0x6f, 0x70, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x1a, 0x1a, 0x82, 0xb5, 0x18, 0x16, 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x67, 0x6f, + 0x3a, 0x44, 0x0a, 0x0c, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x72, 0x5f, 0x70, 0x61, 0x74, 0x68, + 0x12, 0x1f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x18, 0xd0, 0x86, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x68, 0x61, 0x6e, 0x64, 0x6c, + 0x65, 0x72, 0x50, 0x61, 0x74, 0x68, 0x42, 0x80, 0x01, 0x0a, 0x0b, 0x63, 0x6f, 0x6d, 0x2e, 0x70, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x42, 0x0c, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x50, + 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x27, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, + 0x6f, 0x6d, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x66, 0x6c, 0x6f, 0x77, 0x2d, 0x6c, 0x61, 0x62, + 0x73, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x66, 0x6c, 0x6f, 0x77, 0x2f, 0x67, 0x65, 0x6e, 0xa2, + 0x02, 0x03, 0x50, 0x58, 0x58, 0xaa, 0x02, 0x07, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0xca, + 0x02, 0x07, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0xe2, 0x02, 0x13, 0x50, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, + 0x02, 0x07, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x33, } var ( @@ -2633,136 +3106,154 @@ func file_project_proto_rawDescGZIP() []byte { } var file_project_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_project_proto_msgTypes = make([]protoimpl.MessageInfo, 46) +var file_project_proto_msgTypes = make([]protoimpl.MessageInfo, 53) var file_project_proto_goTypes = []interface{}{ (ProviderState)(0), // 0: project.ProviderState - (*Project)(nil), // 1: project.Project - (*GetRunningWorkflowsRequest)(nil), // 2: project.GetRunningWorkflowsRequest - (*GetRunningWorkflowResponse)(nil), // 3: project.GetRunningWorkflowResponse - (*NewNodeRequest)(nil), // 4: project.NewNodeRequest - (*NewNodeResponse)(nil), // 5: project.NewNodeResponse - (*ExportProjectRequest)(nil), // 6: project.ExportProjectRequest - (*ExportProjectResponse)(nil), // 7: project.ExportProjectResponse - (*LoadProjectRequest)(nil), // 8: project.LoadProjectRequest - (*LoadProjectResponse)(nil), // 9: project.LoadProjectResponse - (*GetProjectTypesRequest)(nil), // 10: project.GetProjectTypesRequest - (*ProjectTypes)(nil), // 11: project.ProjectTypes - (*StopWorkflowRequest)(nil), // 12: project.StopWorkflowRequest - (*StopWorkflowResponse)(nil), // 13: project.StopWorkflowResponse - (*Chat)(nil), // 14: project.Chat - (*ChatMessage)(nil), // 15: project.ChatMessage - (*SendChatRequest)(nil), // 16: project.SendChatRequest - (*SendChatResponse)(nil), // 17: project.SendChatResponse - (*GetWorkflowRunsRequest)(nil), // 18: project.GetWorkflowRunsRequest - (*GetWorkflowRunsResponse)(nil), // 19: project.GetWorkflowRunsResponse - (*WorkflowTrace)(nil), // 20: project.WorkflowTrace - (*NodeExecution)(nil), // 21: project.NodeExecution - (*GetNodeInfoRequest)(nil), // 22: project.GetNodeInfoRequest - (*GRPCTypeInfo)(nil), // 23: project.GRPCTypeInfo - (*GetNodeInfoResponse)(nil), // 24: project.GetNodeInfoResponse - (*RuntimeData)(nil), // 25: project.RuntimeData - (*GraphData)(nil), // 26: project.GraphData - (*RunWorkflowRequest)(nil), // 27: project.RunWorkflowRequest - (*Data)(nil), // 28: project.Data - (*GetProjectRequest)(nil), // 29: project.GetProjectRequest - (*GetProjectResponse)(nil), // 30: project.GetProjectResponse - (*GetProjectsRequest)(nil), // 31: project.GetProjectsRequest - (*GetProjectsResponse)(nil), // 32: project.GetProjectsResponse - (*CreateProjectRequest)(nil), // 33: project.CreateProjectRequest - (*CreateProjectResponse)(nil), // 34: project.CreateProjectResponse - (*DeleteProjectRequest)(nil), // 35: project.DeleteProjectRequest - (*DeleteProjectResponse)(nil), // 36: project.DeleteProjectResponse - (*GetProvidersRequest)(nil), // 37: project.GetProvidersRequest - (*EnumeratedProvider)(nil), // 38: project.EnumeratedProvider - (*ProviderInfo)(nil), // 39: project.ProviderInfo - (*GetProvidersResponse)(nil), // 40: project.GetProvidersResponse - (*SaveProjectRequest)(nil), // 41: project.SaveProjectRequest - (*SaveProjectResponse)(nil), // 42: project.SaveProjectResponse - nil, // 43: project.ProjectTypes.DescLookupEntry - nil, // 44: project.ProjectTypes.EnumLookupEntry - nil, // 45: project.GRPCTypeInfo.DescLookupEntry - nil, // 46: project.GRPCTypeInfo.EnumLookupEntry - (*Graph)(nil), // 47: graph.Graph - (*Node)(nil), // 48: graph.Node - (*descriptorpb.DescriptorProto)(nil), // 49: google.protobuf.DescriptorProto - (*descriptorpb.MethodDescriptorProto)(nil), // 50: google.protobuf.MethodDescriptorProto - (*NodeDetails)(nil), // 51: graph.NodeDetails - (*descriptorpb.EnumDescriptorProto)(nil), // 52: google.protobuf.EnumDescriptorProto + (*AddMethodRequest)(nil), // 1: project.AddMethodRequest + (*AddMethodResponse)(nil), // 2: project.AddMethodResponse + (*CreateProjectRequest)(nil), // 3: project.CreateProjectRequest + (*CreateProjectResponse)(nil), // 4: project.CreateProjectResponse + (*Data)(nil), // 5: project.Data + (*DeleteProjectRequest)(nil), // 6: project.DeleteProjectRequest + (*DeleteProjectResponse)(nil), // 7: project.DeleteProjectResponse + (*EnumeratedProvider)(nil), // 8: project.EnumeratedProvider + (*ExportProjectRequest)(nil), // 9: project.ExportProjectRequest + (*ExportProjectResponse)(nil), // 10: project.ExportProjectResponse + (*GRPCMethod)(nil), // 11: project.GRPCMethod + (*GRPCService)(nil), // 12: project.GRPCService + (*GRPCTypeInfo)(nil), // 13: project.GRPCTypeInfo + (*GenerateAIStubRequest)(nil), // 14: project.GenerateAIStubRequest + (*GetGRPCServerInfoRequest)(nil), // 15: project.GetGRPCServerInfoRequest + (*GetGRPCServerInfoResponse)(nil), // 16: project.GetGRPCServerInfoResponse + (*GetNodeInfoRequest)(nil), // 17: project.GetNodeInfoRequest + (*GetNodeInfoResponse)(nil), // 18: project.GetNodeInfoResponse + (*GetProjectRequest)(nil), // 19: project.GetProjectRequest + (*GetProjectResponse)(nil), // 20: project.GetProjectResponse + (*GetProjectTypesRequest)(nil), // 21: project.GetProjectTypesRequest + (*GetProjectsRequest)(nil), // 22: project.GetProjectsRequest + (*GetProjectsResponse)(nil), // 23: project.GetProjectsResponse + (*GetProvidersRequest)(nil), // 24: project.GetProvidersRequest + (*GetProvidersResponse)(nil), // 25: project.GetProvidersResponse + (*GetRunningWorkflowResponse)(nil), // 26: project.GetRunningWorkflowResponse + (*GetRunningWorkflowsRequest)(nil), // 27: project.GetRunningWorkflowsRequest + (*GetWorkflowRunsRequest)(nil), // 28: project.GetWorkflowRunsRequest + (*GetWorkflowRunsResponse)(nil), // 29: project.GetWorkflowRunsResponse + (*GraphData)(nil), // 30: project.GraphData + (*LoadProjectRequest)(nil), // 31: project.LoadProjectRequest + (*LoadProjectResponse)(nil), // 32: project.LoadProjectResponse + (*NewNodeRequest)(nil), // 33: project.NewNodeRequest + (*NewNodeResponse)(nil), // 34: project.NewNodeResponse + (*NodeExecution)(nil), // 35: project.NodeExecution + (*Project)(nil), // 36: project.Project + (*ProjectTypes)(nil), // 37: project.ProjectTypes + (*ProviderInfo)(nil), // 38: project.ProviderInfo + (*RunGRPCMethodRequest)(nil), // 39: project.RunGRPCMethodRequest + (*RunGRPCMethodResponse)(nil), // 40: project.RunGRPCMethodResponse + (*RunWorkflowRequest)(nil), // 41: project.RunWorkflowRequest + (*RuntimeData)(nil), // 42: project.RuntimeData + (*SaveProjectRequest)(nil), // 43: project.SaveProjectRequest + (*SaveProjectResponse)(nil), // 44: project.SaveProjectResponse + (*StopWorkflowRequest)(nil), // 45: project.StopWorkflowRequest + (*StopWorkflowResponse)(nil), // 46: project.StopWorkflowResponse + (*Test3Request)(nil), // 47: project.Test3Request + (*Test3Response)(nil), // 48: project.Test3Response + (*WorkflowTrace)(nil), // 49: project.WorkflowTrace + nil, // 50: project.GRPCTypeInfo.DescLookupEntry + nil, // 51: project.GRPCTypeInfo.EnumLookupEntry + nil, // 52: project.ProjectTypes.DescLookupEntry + nil, // 53: project.ProjectTypes.EnumLookupEntry + (*NodeDetails)(nil), // 54: graph.NodeDetails + (*Node)(nil), // 55: graph.Node + (*descriptorpb.DescriptorProto)(nil), // 56: google.protobuf.DescriptorProto + (*descriptorpb.MethodDescriptorProto)(nil), // 57: google.protobuf.MethodDescriptorProto + (*Graph)(nil), // 58: graph.Graph + (*descriptorpb.EnumDescriptorProto)(nil), // 59: google.protobuf.EnumDescriptorProto + (*descriptorpb.ServiceOptions)(nil), // 60: google.protobuf.ServiceOptions + (*GenerateCode)(nil), // 61: ai.GenerateCode } var file_project_proto_depIdxs = []int32{ - 47, // 0: project.Project.graph:type_name -> graph.Graph - 20, // 1: project.GetRunningWorkflowResponse.traces:type_name -> project.WorkflowTrace - 48, // 2: project.NewNodeRequest.node:type_name -> graph.Node - 48, // 3: project.NewNodeResponse.node:type_name -> graph.Node - 1, // 4: project.LoadProjectResponse.project:type_name -> project.Project - 49, // 5: project.ProjectTypes.node_type:type_name -> google.protobuf.DescriptorProto - 49, // 6: project.ProjectTypes.edge_type:type_name -> google.protobuf.DescriptorProto - 43, // 7: project.ProjectTypes.desc_lookup:type_name -> project.ProjectTypes.DescLookupEntry - 44, // 8: project.ProjectTypes.enum_lookup:type_name -> project.ProjectTypes.EnumLookupEntry - 14, // 9: project.SendChatRequest.chat:type_name -> project.Chat - 20, // 10: project.GetWorkflowRunsResponse.runs:type_name -> project.WorkflowTrace - 27, // 11: project.WorkflowTrace.request:type_name -> project.RunWorkflowRequest - 21, // 12: project.WorkflowTrace.node_execs:type_name -> project.NodeExecution - 49, // 13: project.GRPCTypeInfo.input:type_name -> google.protobuf.DescriptorProto - 49, // 14: project.GRPCTypeInfo.output:type_name -> google.protobuf.DescriptorProto - 45, // 15: project.GRPCTypeInfo.desc_lookup:type_name -> project.GRPCTypeInfo.DescLookupEntry - 46, // 16: project.GRPCTypeInfo.enum_lookup:type_name -> project.GRPCTypeInfo.EnumLookupEntry - 50, // 17: project.GRPCTypeInfo.method_desc:type_name -> google.protobuf.MethodDescriptorProto - 23, // 18: project.GetNodeInfoResponse.type_info:type_name -> project.GRPCTypeInfo - 26, // 19: project.RuntimeData.graph:type_name -> project.GraphData - 1, // 20: project.GetProjectResponse.project:type_name -> project.Project - 11, // 21: project.GetProjectResponse.types:type_name -> project.ProjectTypes - 30, // 22: project.GetProjectsResponse.projects:type_name -> project.GetProjectResponse - 1, // 23: project.CreateProjectResponse.project:type_name -> project.Project - 1, // 24: project.DeleteProjectResponse.project:type_name -> project.Project - 51, // 25: project.EnumeratedProvider.provider:type_name -> graph.NodeDetails - 48, // 26: project.EnumeratedProvider.nodes:type_name -> graph.Node - 39, // 27: project.EnumeratedProvider.info:type_name -> project.ProviderInfo + 36, // 0: project.CreateProjectResponse.project:type_name -> project.Project + 36, // 1: project.DeleteProjectResponse.project:type_name -> project.Project + 54, // 2: project.EnumeratedProvider.provider:type_name -> graph.NodeDetails + 55, // 3: project.EnumeratedProvider.nodes:type_name -> graph.Node + 38, // 4: project.EnumeratedProvider.info:type_name -> project.ProviderInfo + 13, // 5: project.GRPCMethod.type_info:type_name -> project.GRPCTypeInfo + 11, // 6: project.GRPCService.methods:type_name -> project.GRPCMethod + 56, // 7: project.GRPCTypeInfo.input:type_name -> google.protobuf.DescriptorProto + 56, // 8: project.GRPCTypeInfo.output:type_name -> google.protobuf.DescriptorProto + 50, // 9: project.GRPCTypeInfo.desc_lookup:type_name -> project.GRPCTypeInfo.DescLookupEntry + 51, // 10: project.GRPCTypeInfo.enum_lookup:type_name -> project.GRPCTypeInfo.EnumLookupEntry + 57, // 11: project.GRPCTypeInfo.method_desc:type_name -> google.protobuf.MethodDescriptorProto + 12, // 12: project.GetGRPCServerInfoResponse.services:type_name -> project.GRPCService + 13, // 13: project.GetNodeInfoResponse.type_info:type_name -> project.GRPCTypeInfo + 36, // 14: project.GetProjectResponse.project:type_name -> project.Project + 37, // 15: project.GetProjectResponse.types:type_name -> project.ProjectTypes + 20, // 16: project.GetProjectsResponse.projects:type_name -> project.GetProjectResponse + 8, // 17: project.GetProvidersResponse.providers:type_name -> project.EnumeratedProvider + 49, // 18: project.GetRunningWorkflowResponse.traces:type_name -> project.WorkflowTrace + 49, // 19: project.GetWorkflowRunsResponse.runs:type_name -> project.WorkflowTrace + 36, // 20: project.LoadProjectResponse.project:type_name -> project.Project + 55, // 21: project.NewNodeRequest.node:type_name -> graph.Node + 55, // 22: project.NewNodeResponse.node:type_name -> graph.Node + 58, // 23: project.Project.graph:type_name -> graph.Graph + 56, // 24: project.ProjectTypes.node_type:type_name -> google.protobuf.DescriptorProto + 56, // 25: project.ProjectTypes.edge_type:type_name -> google.protobuf.DescriptorProto + 52, // 26: project.ProjectTypes.desc_lookup:type_name -> project.ProjectTypes.DescLookupEntry + 53, // 27: project.ProjectTypes.enum_lookup:type_name -> project.ProjectTypes.EnumLookupEntry 0, // 28: project.ProviderInfo.state:type_name -> project.ProviderState - 38, // 29: project.GetProvidersResponse.providers:type_name -> project.EnumeratedProvider - 47, // 30: project.SaveProjectRequest.graph:type_name -> graph.Graph - 1, // 31: project.SaveProjectResponse.project:type_name -> project.Project - 49, // 32: project.ProjectTypes.DescLookupEntry.value:type_name -> google.protobuf.DescriptorProto - 52, // 33: project.ProjectTypes.EnumLookupEntry.value:type_name -> google.protobuf.EnumDescriptorProto - 49, // 34: project.GRPCTypeInfo.DescLookupEntry.value:type_name -> google.protobuf.DescriptorProto - 52, // 35: project.GRPCTypeInfo.EnumLookupEntry.value:type_name -> google.protobuf.EnumDescriptorProto - 4, // 36: project.ProjectService.NewNode:input_type -> project.NewNodeRequest - 10, // 37: project.ProjectService.GetProjectTypes:input_type -> project.GetProjectTypesRequest - 16, // 38: project.ProjectService.SendChat:input_type -> project.SendChatRequest - 6, // 39: project.ProjectService.ExportProject:input_type -> project.ExportProjectRequest - 8, // 40: project.ProjectService.LoadProject:input_type -> project.LoadProjectRequest - 29, // 41: project.ProjectService.GetProject:input_type -> project.GetProjectRequest - 31, // 42: project.ProjectService.GetProjects:input_type -> project.GetProjectsRequest - 33, // 43: project.ProjectService.CreateProject:input_type -> project.CreateProjectRequest - 35, // 44: project.ProjectService.DeleteProject:input_type -> project.DeleteProjectRequest - 37, // 45: project.ProjectService.EnumerateProviders:input_type -> project.GetProvidersRequest - 22, // 46: project.ProjectService.GetNodeInfo:input_type -> project.GetNodeInfoRequest - 41, // 47: project.ProjectService.SaveProject:input_type -> project.SaveProjectRequest - 27, // 48: project.ProjectService.RunWorkflow:input_type -> project.RunWorkflowRequest - 12, // 49: project.ProjectService.StopWorkflow:input_type -> project.StopWorkflowRequest - 18, // 50: project.ProjectService.GetWorkflowRuns:input_type -> project.GetWorkflowRunsRequest - 2, // 51: project.ProjectService.GetRunningWorkflows:input_type -> project.GetRunningWorkflowsRequest - 5, // 52: project.ProjectService.NewNode:output_type -> project.NewNodeResponse - 11, // 53: project.ProjectService.GetProjectTypes:output_type -> project.ProjectTypes - 17, // 54: project.ProjectService.SendChat:output_type -> project.SendChatResponse - 7, // 55: project.ProjectService.ExportProject:output_type -> project.ExportProjectResponse - 9, // 56: project.ProjectService.LoadProject:output_type -> project.LoadProjectResponse - 30, // 57: project.ProjectService.GetProject:output_type -> project.GetProjectResponse - 32, // 58: project.ProjectService.GetProjects:output_type -> project.GetProjectsResponse - 34, // 59: project.ProjectService.CreateProject:output_type -> project.CreateProjectResponse - 36, // 60: project.ProjectService.DeleteProject:output_type -> project.DeleteProjectResponse - 40, // 61: project.ProjectService.EnumerateProviders:output_type -> project.GetProvidersResponse - 24, // 62: project.ProjectService.GetNodeInfo:output_type -> project.GetNodeInfoResponse - 42, // 63: project.ProjectService.SaveProject:output_type -> project.SaveProjectResponse - 21, // 64: project.ProjectService.RunWorkflow:output_type -> project.NodeExecution - 13, // 65: project.ProjectService.StopWorkflow:output_type -> project.StopWorkflowResponse - 19, // 66: project.ProjectService.GetWorkflowRuns:output_type -> project.GetWorkflowRunsResponse - 3, // 67: project.ProjectService.GetRunningWorkflows:output_type -> project.GetRunningWorkflowResponse - 52, // [52:68] is the sub-list for method output_type - 36, // [36:52] is the sub-list for method input_type - 36, // [36:36] is the sub-list for extension type_name - 36, // [36:36] is the sub-list for extension extendee - 0, // [0:36] is the sub-list for field type_name + 30, // 29: project.RuntimeData.graph:type_name -> project.GraphData + 58, // 30: project.SaveProjectRequest.graph:type_name -> graph.Graph + 36, // 31: project.SaveProjectResponse.project:type_name -> project.Project + 41, // 32: project.WorkflowTrace.request:type_name -> project.RunWorkflowRequest + 35, // 33: project.WorkflowTrace.node_execs:type_name -> project.NodeExecution + 56, // 34: project.GRPCTypeInfo.DescLookupEntry.value:type_name -> google.protobuf.DescriptorProto + 59, // 35: project.GRPCTypeInfo.EnumLookupEntry.value:type_name -> google.protobuf.EnumDescriptorProto + 56, // 36: project.ProjectTypes.DescLookupEntry.value:type_name -> google.protobuf.DescriptorProto + 59, // 37: project.ProjectTypes.EnumLookupEntry.value:type_name -> google.protobuf.EnumDescriptorProto + 60, // 38: project.handler_path:extendee -> google.protobuf.ServiceOptions + 1, // 39: project.ProjectService.AddMethod:input_type -> project.AddMethodRequest + 3, // 40: project.ProjectService.CreateProject:input_type -> project.CreateProjectRequest + 6, // 41: project.ProjectService.DeleteProject:input_type -> project.DeleteProjectRequest + 24, // 42: project.ProjectService.EnumerateProviders:input_type -> project.GetProvidersRequest + 9, // 43: project.ProjectService.ExportProject:input_type -> project.ExportProjectRequest + 14, // 44: project.ProjectService.GenerateAIStub:input_type -> project.GenerateAIStubRequest + 15, // 45: project.ProjectService.GetGRPCServerInfo:input_type -> project.GetGRPCServerInfoRequest + 17, // 46: project.ProjectService.GetNodeInfo:input_type -> project.GetNodeInfoRequest + 19, // 47: project.ProjectService.GetProject:input_type -> project.GetProjectRequest + 21, // 48: project.ProjectService.GetProjectTypes:input_type -> project.GetProjectTypesRequest + 22, // 49: project.ProjectService.GetProjects:input_type -> project.GetProjectsRequest + 27, // 50: project.ProjectService.GetRunningWorkflows:input_type -> project.GetRunningWorkflowsRequest + 28, // 51: project.ProjectService.GetWorkflowRuns:input_type -> project.GetWorkflowRunsRequest + 31, // 52: project.ProjectService.LoadProject:input_type -> project.LoadProjectRequest + 33, // 53: project.ProjectService.NewNode:input_type -> project.NewNodeRequest + 39, // 54: project.ProjectService.RunGRPCMethod:input_type -> project.RunGRPCMethodRequest + 41, // 55: project.ProjectService.RunWorkflow:input_type -> project.RunWorkflowRequest + 43, // 56: project.ProjectService.SaveProject:input_type -> project.SaveProjectRequest + 45, // 57: project.ProjectService.StopWorkflow:input_type -> project.StopWorkflowRequest + 2, // 58: project.ProjectService.AddMethod:output_type -> project.AddMethodResponse + 4, // 59: project.ProjectService.CreateProject:output_type -> project.CreateProjectResponse + 7, // 60: project.ProjectService.DeleteProject:output_type -> project.DeleteProjectResponse + 25, // 61: project.ProjectService.EnumerateProviders:output_type -> project.GetProvidersResponse + 10, // 62: project.ProjectService.ExportProject:output_type -> project.ExportProjectResponse + 61, // 63: project.ProjectService.GenerateAIStub:output_type -> ai.GenerateCode + 16, // 64: project.ProjectService.GetGRPCServerInfo:output_type -> project.GetGRPCServerInfoResponse + 18, // 65: project.ProjectService.GetNodeInfo:output_type -> project.GetNodeInfoResponse + 20, // 66: project.ProjectService.GetProject:output_type -> project.GetProjectResponse + 37, // 67: project.ProjectService.GetProjectTypes:output_type -> project.ProjectTypes + 23, // 68: project.ProjectService.GetProjects:output_type -> project.GetProjectsResponse + 26, // 69: project.ProjectService.GetRunningWorkflows:output_type -> project.GetRunningWorkflowResponse + 29, // 70: project.ProjectService.GetWorkflowRuns:output_type -> project.GetWorkflowRunsResponse + 32, // 71: project.ProjectService.LoadProject:output_type -> project.LoadProjectResponse + 34, // 72: project.ProjectService.NewNode:output_type -> project.NewNodeResponse + 35, // 73: project.ProjectService.RunGRPCMethod:output_type -> project.NodeExecution + 35, // 74: project.ProjectService.RunWorkflow:output_type -> project.NodeExecution + 44, // 75: project.ProjectService.SaveProject:output_type -> project.SaveProjectResponse + 46, // 76: project.ProjectService.StopWorkflow:output_type -> project.StopWorkflowResponse + 58, // [58:77] is the sub-list for method output_type + 39, // [39:58] is the sub-list for method input_type + 39, // [39:39] is the sub-list for extension type_name + 38, // [38:39] is the sub-list for extension extendee + 0, // [0:38] is the sub-list for field type_name } func init() { file_project_proto_init() } @@ -2771,9 +3262,10 @@ func file_project_proto_init() { return } file_graph_proto_init() + file_ai_proto_init() if !protoimpl.UnsafeEnabled { file_project_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Project); i { + switch v := v.(*AddMethodRequest); i { case 0: return &v.state case 1: @@ -2785,7 +3277,7 @@ func file_project_proto_init() { } } file_project_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetRunningWorkflowsRequest); i { + switch v := v.(*AddMethodResponse); i { case 0: return &v.state case 1: @@ -2797,7 +3289,7 @@ func file_project_proto_init() { } } file_project_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetRunningWorkflowResponse); i { + switch v := v.(*CreateProjectRequest); i { case 0: return &v.state case 1: @@ -2809,7 +3301,7 @@ func file_project_proto_init() { } } file_project_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*NewNodeRequest); i { + switch v := v.(*CreateProjectResponse); i { case 0: return &v.state case 1: @@ -2821,7 +3313,7 @@ func file_project_proto_init() { } } file_project_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*NewNodeResponse); i { + switch v := v.(*Data); i { case 0: return &v.state case 1: @@ -2833,7 +3325,7 @@ func file_project_proto_init() { } } file_project_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ExportProjectRequest); i { + switch v := v.(*DeleteProjectRequest); i { case 0: return &v.state case 1: @@ -2845,7 +3337,7 @@ func file_project_proto_init() { } } file_project_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ExportProjectResponse); i { + switch v := v.(*DeleteProjectResponse); i { case 0: return &v.state case 1: @@ -2857,7 +3349,7 @@ func file_project_proto_init() { } } file_project_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LoadProjectRequest); i { + switch v := v.(*EnumeratedProvider); i { case 0: return &v.state case 1: @@ -2869,7 +3361,7 @@ func file_project_proto_init() { } } file_project_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LoadProjectResponse); i { + switch v := v.(*ExportProjectRequest); i { case 0: return &v.state case 1: @@ -2881,7 +3373,7 @@ func file_project_proto_init() { } } file_project_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetProjectTypesRequest); i { + switch v := v.(*ExportProjectResponse); i { case 0: return &v.state case 1: @@ -2893,7 +3385,7 @@ func file_project_proto_init() { } } file_project_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ProjectTypes); i { + switch v := v.(*GRPCMethod); i { case 0: return &v.state case 1: @@ -2905,7 +3397,7 @@ func file_project_proto_init() { } } file_project_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StopWorkflowRequest); i { + switch v := v.(*GRPCService); i { case 0: return &v.state case 1: @@ -2917,7 +3409,7 @@ func file_project_proto_init() { } } file_project_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StopWorkflowResponse); i { + switch v := v.(*GRPCTypeInfo); i { case 0: return &v.state case 1: @@ -2929,7 +3421,7 @@ func file_project_proto_init() { } } file_project_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Chat); i { + switch v := v.(*GenerateAIStubRequest); i { case 0: return &v.state case 1: @@ -2941,7 +3433,7 @@ func file_project_proto_init() { } } file_project_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ChatMessage); i { + switch v := v.(*GetGRPCServerInfoRequest); i { case 0: return &v.state case 1: @@ -2953,7 +3445,7 @@ func file_project_proto_init() { } } file_project_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SendChatRequest); i { + switch v := v.(*GetGRPCServerInfoResponse); i { case 0: return &v.state case 1: @@ -2965,7 +3457,7 @@ func file_project_proto_init() { } } file_project_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SendChatResponse); i { + switch v := v.(*GetNodeInfoRequest); i { case 0: return &v.state case 1: @@ -2977,7 +3469,7 @@ func file_project_proto_init() { } } file_project_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetWorkflowRunsRequest); i { + switch v := v.(*GetNodeInfoResponse); i { case 0: return &v.state case 1: @@ -2989,7 +3481,7 @@ func file_project_proto_init() { } } file_project_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetWorkflowRunsResponse); i { + switch v := v.(*GetProjectRequest); i { case 0: return &v.state case 1: @@ -3001,7 +3493,7 @@ func file_project_proto_init() { } } file_project_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WorkflowTrace); i { + switch v := v.(*GetProjectResponse); i { case 0: return &v.state case 1: @@ -3013,7 +3505,7 @@ func file_project_proto_init() { } } file_project_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*NodeExecution); i { + switch v := v.(*GetProjectTypesRequest); i { case 0: return &v.state case 1: @@ -3025,7 +3517,7 @@ func file_project_proto_init() { } } file_project_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetNodeInfoRequest); i { + switch v := v.(*GetProjectsRequest); i { case 0: return &v.state case 1: @@ -3037,7 +3529,7 @@ func file_project_proto_init() { } } file_project_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GRPCTypeInfo); i { + switch v := v.(*GetProjectsResponse); i { case 0: return &v.state case 1: @@ -3049,7 +3541,7 @@ func file_project_proto_init() { } } file_project_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetNodeInfoResponse); i { + switch v := v.(*GetProvidersRequest); i { case 0: return &v.state case 1: @@ -3061,7 +3553,7 @@ func file_project_proto_init() { } } file_project_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RuntimeData); i { + switch v := v.(*GetProvidersResponse); i { case 0: return &v.state case 1: @@ -3073,7 +3565,7 @@ func file_project_proto_init() { } } file_project_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GraphData); i { + switch v := v.(*GetRunningWorkflowResponse); i { case 0: return &v.state case 1: @@ -3085,7 +3577,7 @@ func file_project_proto_init() { } } file_project_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RunWorkflowRequest); i { + switch v := v.(*GetRunningWorkflowsRequest); i { case 0: return &v.state case 1: @@ -3097,7 +3589,7 @@ func file_project_proto_init() { } } file_project_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Data); i { + switch v := v.(*GetWorkflowRunsRequest); i { case 0: return &v.state case 1: @@ -3109,7 +3601,7 @@ func file_project_proto_init() { } } file_project_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetProjectRequest); i { + switch v := v.(*GetWorkflowRunsResponse); i { case 0: return &v.state case 1: @@ -3121,7 +3613,7 @@ func file_project_proto_init() { } } file_project_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetProjectResponse); i { + switch v := v.(*GraphData); i { case 0: return &v.state case 1: @@ -3133,7 +3625,7 @@ func file_project_proto_init() { } } file_project_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetProjectsRequest); i { + switch v := v.(*LoadProjectRequest); i { case 0: return &v.state case 1: @@ -3145,7 +3637,7 @@ func file_project_proto_init() { } } file_project_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetProjectsResponse); i { + switch v := v.(*LoadProjectResponse); i { case 0: return &v.state case 1: @@ -3157,7 +3649,7 @@ func file_project_proto_init() { } } file_project_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CreateProjectRequest); i { + switch v := v.(*NewNodeRequest); i { case 0: return &v.state case 1: @@ -3169,7 +3661,7 @@ func file_project_proto_init() { } } file_project_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CreateProjectResponse); i { + switch v := v.(*NewNodeResponse); i { case 0: return &v.state case 1: @@ -3181,7 +3673,7 @@ func file_project_proto_init() { } } file_project_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeleteProjectRequest); i { + switch v := v.(*NodeExecution); i { case 0: return &v.state case 1: @@ -3193,7 +3685,7 @@ func file_project_proto_init() { } } file_project_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeleteProjectResponse); i { + switch v := v.(*Project); i { case 0: return &v.state case 1: @@ -3205,7 +3697,7 @@ func file_project_proto_init() { } } file_project_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetProvidersRequest); i { + switch v := v.(*ProjectTypes); i { case 0: return &v.state case 1: @@ -3217,7 +3709,7 @@ func file_project_proto_init() { } } file_project_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*EnumeratedProvider); i { + switch v := v.(*ProviderInfo); i { case 0: return &v.state case 1: @@ -3229,7 +3721,7 @@ func file_project_proto_init() { } } file_project_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ProviderInfo); i { + switch v := v.(*RunGRPCMethodRequest); i { case 0: return &v.state case 1: @@ -3241,7 +3733,7 @@ func file_project_proto_init() { } } file_project_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetProvidersResponse); i { + switch v := v.(*RunGRPCMethodResponse); i { case 0: return &v.state case 1: @@ -3253,7 +3745,7 @@ func file_project_proto_init() { } } file_project_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SaveProjectRequest); i { + switch v := v.(*RunWorkflowRequest); i { case 0: return &v.state case 1: @@ -3265,6 +3757,30 @@ func file_project_proto_init() { } } file_project_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RuntimeData); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_project_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SaveProjectRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_project_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SaveProjectResponse); i { case 0: return &v.state @@ -3276,6 +3792,66 @@ func file_project_proto_init() { return nil } } + file_project_proto_msgTypes[44].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*StopWorkflowRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_project_proto_msgTypes[45].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*StopWorkflowResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_project_proto_msgTypes[46].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Test3Request); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_project_proto_msgTypes[47].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Test3Response); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_project_proto_msgTypes[48].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*WorkflowTrace); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } } type x struct{} out := protoimpl.TypeBuilder{ @@ -3283,14 +3859,15 @@ func file_project_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_project_proto_rawDesc, NumEnums: 1, - NumMessages: 46, - NumExtensions: 0, + NumMessages: 53, + NumExtensions: 1, NumServices: 1, }, GoTypes: file_project_proto_goTypes, DependencyIndexes: file_project_proto_depIdxs, EnumInfos: file_project_proto_enumTypes, MessageInfos: file_project_proto_msgTypes, + ExtensionInfos: file_project_proto_extTypes, }.Build() File_project_proto = out.File file_project_proto_rawDesc = nil diff --git a/gen/project_grpc.pb.go b/gen/project_grpc.pb.go index 5d09f44..67c390e 100644 --- a/gen/project_grpc.pb.go +++ b/gen/project_grpc.pb.go @@ -22,24 +22,25 @@ const _ = grpc.SupportPackageIsVersion7 // // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. type ProjectServiceClient interface { - NewNode(ctx context.Context, in *NewNodeRequest, opts ...grpc.CallOption) (*NewNodeResponse, error) - GetProjectTypes(ctx context.Context, in *GetProjectTypesRequest, opts ...grpc.CallOption) (*ProjectTypes, error) - // TODO breadchris unfortunately this is needed because of the buf fetch transport not supporting streaming - // the suggestion is to build a custom transport that uses websockets https://github.com/bufbuild/connect-es/issues/366 - SendChat(ctx context.Context, in *SendChatRequest, opts ...grpc.CallOption) (ProjectService_SendChatClient, error) - ExportProject(ctx context.Context, in *ExportProjectRequest, opts ...grpc.CallOption) (*ExportProjectResponse, error) - LoadProject(ctx context.Context, in *LoadProjectRequest, opts ...grpc.CallOption) (*LoadProjectResponse, error) - GetProject(ctx context.Context, in *GetProjectRequest, opts ...grpc.CallOption) (*GetProjectResponse, error) - GetProjects(ctx context.Context, in *GetProjectsRequest, opts ...grpc.CallOption) (*GetProjectsResponse, error) + AddMethod(ctx context.Context, in *AddMethodRequest, opts ...grpc.CallOption) (*AddMethodResponse, error) CreateProject(ctx context.Context, in *CreateProjectRequest, opts ...grpc.CallOption) (*CreateProjectResponse, error) DeleteProject(ctx context.Context, in *DeleteProjectRequest, opts ...grpc.CallOption) (*DeleteProjectResponse, error) EnumerateProviders(ctx context.Context, in *GetProvidersRequest, opts ...grpc.CallOption) (*GetProvidersResponse, error) + ExportProject(ctx context.Context, in *ExportProjectRequest, opts ...grpc.CallOption) (*ExportProjectResponse, error) + GenerateAIStub(ctx context.Context, in *GenerateAIStubRequest, opts ...grpc.CallOption) (*GenerateCode, error) + GetGRPCServerInfo(ctx context.Context, in *GetGRPCServerInfoRequest, opts ...grpc.CallOption) (*GetGRPCServerInfoResponse, error) GetNodeInfo(ctx context.Context, in *GetNodeInfoRequest, opts ...grpc.CallOption) (*GetNodeInfoResponse, error) - SaveProject(ctx context.Context, in *SaveProjectRequest, opts ...grpc.CallOption) (*SaveProjectResponse, error) + GetProject(ctx context.Context, in *GetProjectRequest, opts ...grpc.CallOption) (*GetProjectResponse, error) + GetProjectTypes(ctx context.Context, in *GetProjectTypesRequest, opts ...grpc.CallOption) (*ProjectTypes, error) + GetProjects(ctx context.Context, in *GetProjectsRequest, opts ...grpc.CallOption) (*GetProjectsResponse, error) + GetRunningWorkflows(ctx context.Context, in *GetRunningWorkflowsRequest, opts ...grpc.CallOption) (*GetRunningWorkflowResponse, error) + GetWorkflowRuns(ctx context.Context, in *GetWorkflowRunsRequest, opts ...grpc.CallOption) (*GetWorkflowRunsResponse, error) + LoadProject(ctx context.Context, in *LoadProjectRequest, opts ...grpc.CallOption) (*LoadProjectResponse, error) + NewNode(ctx context.Context, in *NewNodeRequest, opts ...grpc.CallOption) (*NewNodeResponse, error) + RunGRPCMethod(ctx context.Context, in *RunGRPCMethodRequest, opts ...grpc.CallOption) (ProjectService_RunGRPCMethodClient, error) RunWorkflow(ctx context.Context, in *RunWorkflowRequest, opts ...grpc.CallOption) (ProjectService_RunWorkflowClient, error) + SaveProject(ctx context.Context, in *SaveProjectRequest, opts ...grpc.CallOption) (*SaveProjectResponse, error) StopWorkflow(ctx context.Context, in *StopWorkflowRequest, opts ...grpc.CallOption) (*StopWorkflowResponse, error) - GetWorkflowRuns(ctx context.Context, in *GetWorkflowRunsRequest, opts ...grpc.CallOption) (*GetWorkflowRunsResponse, error) - GetRunningWorkflows(ctx context.Context, in *GetRunningWorkflowsRequest, opts ...grpc.CallOption) (*GetRunningWorkflowResponse, error) } type projectServiceClient struct { @@ -50,68 +51,72 @@ func NewProjectServiceClient(cc grpc.ClientConnInterface) ProjectServiceClient { return &projectServiceClient{cc} } -func (c *projectServiceClient) NewNode(ctx context.Context, in *NewNodeRequest, opts ...grpc.CallOption) (*NewNodeResponse, error) { - out := new(NewNodeResponse) - err := c.cc.Invoke(ctx, "/project.ProjectService/NewNode", in, out, opts...) +func (c *projectServiceClient) AddMethod(ctx context.Context, in *AddMethodRequest, opts ...grpc.CallOption) (*AddMethodResponse, error) { + out := new(AddMethodResponse) + err := c.cc.Invoke(ctx, "/project.ProjectService/AddMethod", in, out, opts...) if err != nil { return nil, err } return out, nil } -func (c *projectServiceClient) GetProjectTypes(ctx context.Context, in *GetProjectTypesRequest, opts ...grpc.CallOption) (*ProjectTypes, error) { - out := new(ProjectTypes) - err := c.cc.Invoke(ctx, "/project.ProjectService/GetProjectTypes", in, out, opts...) +func (c *projectServiceClient) CreateProject(ctx context.Context, in *CreateProjectRequest, opts ...grpc.CallOption) (*CreateProjectResponse, error) { + out := new(CreateProjectResponse) + err := c.cc.Invoke(ctx, "/project.ProjectService/CreateProject", in, out, opts...) if err != nil { return nil, err } return out, nil } -func (c *projectServiceClient) SendChat(ctx context.Context, in *SendChatRequest, opts ...grpc.CallOption) (ProjectService_SendChatClient, error) { - stream, err := c.cc.NewStream(ctx, &ProjectService_ServiceDesc.Streams[0], "/project.ProjectService/SendChat", opts...) +func (c *projectServiceClient) DeleteProject(ctx context.Context, in *DeleteProjectRequest, opts ...grpc.CallOption) (*DeleteProjectResponse, error) { + out := new(DeleteProjectResponse) + err := c.cc.Invoke(ctx, "/project.ProjectService/DeleteProject", in, out, opts...) if err != nil { return nil, err } - x := &projectServiceSendChatClient{stream} - if err := x.ClientStream.SendMsg(in); err != nil { - return nil, err - } - if err := x.ClientStream.CloseSend(); err != nil { - return nil, err - } - return x, nil + return out, nil } -type ProjectService_SendChatClient interface { - Recv() (*SendChatResponse, error) - grpc.ClientStream +func (c *projectServiceClient) EnumerateProviders(ctx context.Context, in *GetProvidersRequest, opts ...grpc.CallOption) (*GetProvidersResponse, error) { + out := new(GetProvidersResponse) + err := c.cc.Invoke(ctx, "/project.ProjectService/EnumerateProviders", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil } -type projectServiceSendChatClient struct { - grpc.ClientStream +func (c *projectServiceClient) ExportProject(ctx context.Context, in *ExportProjectRequest, opts ...grpc.CallOption) (*ExportProjectResponse, error) { + out := new(ExportProjectResponse) + err := c.cc.Invoke(ctx, "/project.ProjectService/ExportProject", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil } -func (x *projectServiceSendChatClient) Recv() (*SendChatResponse, error) { - m := new(SendChatResponse) - if err := x.ClientStream.RecvMsg(m); err != nil { +func (c *projectServiceClient) GenerateAIStub(ctx context.Context, in *GenerateAIStubRequest, opts ...grpc.CallOption) (*GenerateCode, error) { + out := new(GenerateCode) + err := c.cc.Invoke(ctx, "/project.ProjectService/GenerateAIStub", in, out, opts...) + if err != nil { return nil, err } - return m, nil + return out, nil } -func (c *projectServiceClient) ExportProject(ctx context.Context, in *ExportProjectRequest, opts ...grpc.CallOption) (*ExportProjectResponse, error) { - out := new(ExportProjectResponse) - err := c.cc.Invoke(ctx, "/project.ProjectService/ExportProject", in, out, opts...) +func (c *projectServiceClient) GetGRPCServerInfo(ctx context.Context, in *GetGRPCServerInfoRequest, opts ...grpc.CallOption) (*GetGRPCServerInfoResponse, error) { + out := new(GetGRPCServerInfoResponse) + err := c.cc.Invoke(ctx, "/project.ProjectService/GetGRPCServerInfo", in, out, opts...) if err != nil { return nil, err } return out, nil } -func (c *projectServiceClient) LoadProject(ctx context.Context, in *LoadProjectRequest, opts ...grpc.CallOption) (*LoadProjectResponse, error) { - out := new(LoadProjectResponse) - err := c.cc.Invoke(ctx, "/project.ProjectService/LoadProject", in, out, opts...) +func (c *projectServiceClient) GetNodeInfo(ctx context.Context, in *GetNodeInfoRequest, opts ...grpc.CallOption) (*GetNodeInfoResponse, error) { + out := new(GetNodeInfoResponse) + err := c.cc.Invoke(ctx, "/project.ProjectService/GetNodeInfo", in, out, opts...) if err != nil { return nil, err } @@ -127,6 +132,15 @@ func (c *projectServiceClient) GetProject(ctx context.Context, in *GetProjectReq return out, nil } +func (c *projectServiceClient) GetProjectTypes(ctx context.Context, in *GetProjectTypesRequest, opts ...grpc.CallOption) (*ProjectTypes, error) { + out := new(ProjectTypes) + err := c.cc.Invoke(ctx, "/project.ProjectService/GetProjectTypes", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *projectServiceClient) GetProjects(ctx context.Context, in *GetProjectsRequest, opts ...grpc.CallOption) (*GetProjectsResponse, error) { out := new(GetProjectsResponse) err := c.cc.Invoke(ctx, "/project.ProjectService/GetProjects", in, out, opts...) @@ -136,49 +150,72 @@ func (c *projectServiceClient) GetProjects(ctx context.Context, in *GetProjectsR return out, nil } -func (c *projectServiceClient) CreateProject(ctx context.Context, in *CreateProjectRequest, opts ...grpc.CallOption) (*CreateProjectResponse, error) { - out := new(CreateProjectResponse) - err := c.cc.Invoke(ctx, "/project.ProjectService/CreateProject", in, out, opts...) +func (c *projectServiceClient) GetRunningWorkflows(ctx context.Context, in *GetRunningWorkflowsRequest, opts ...grpc.CallOption) (*GetRunningWorkflowResponse, error) { + out := new(GetRunningWorkflowResponse) + err := c.cc.Invoke(ctx, "/project.ProjectService/GetRunningWorkflows", in, out, opts...) if err != nil { return nil, err } return out, nil } -func (c *projectServiceClient) DeleteProject(ctx context.Context, in *DeleteProjectRequest, opts ...grpc.CallOption) (*DeleteProjectResponse, error) { - out := new(DeleteProjectResponse) - err := c.cc.Invoke(ctx, "/project.ProjectService/DeleteProject", in, out, opts...) +func (c *projectServiceClient) GetWorkflowRuns(ctx context.Context, in *GetWorkflowRunsRequest, opts ...grpc.CallOption) (*GetWorkflowRunsResponse, error) { + out := new(GetWorkflowRunsResponse) + err := c.cc.Invoke(ctx, "/project.ProjectService/GetWorkflowRuns", in, out, opts...) if err != nil { return nil, err } return out, nil } -func (c *projectServiceClient) EnumerateProviders(ctx context.Context, in *GetProvidersRequest, opts ...grpc.CallOption) (*GetProvidersResponse, error) { - out := new(GetProvidersResponse) - err := c.cc.Invoke(ctx, "/project.ProjectService/EnumerateProviders", in, out, opts...) +func (c *projectServiceClient) LoadProject(ctx context.Context, in *LoadProjectRequest, opts ...grpc.CallOption) (*LoadProjectResponse, error) { + out := new(LoadProjectResponse) + err := c.cc.Invoke(ctx, "/project.ProjectService/LoadProject", in, out, opts...) if err != nil { return nil, err } return out, nil } -func (c *projectServiceClient) GetNodeInfo(ctx context.Context, in *GetNodeInfoRequest, opts ...grpc.CallOption) (*GetNodeInfoResponse, error) { - out := new(GetNodeInfoResponse) - err := c.cc.Invoke(ctx, "/project.ProjectService/GetNodeInfo", in, out, opts...) +func (c *projectServiceClient) NewNode(ctx context.Context, in *NewNodeRequest, opts ...grpc.CallOption) (*NewNodeResponse, error) { + out := new(NewNodeResponse) + err := c.cc.Invoke(ctx, "/project.ProjectService/NewNode", in, out, opts...) if err != nil { return nil, err } return out, nil } -func (c *projectServiceClient) SaveProject(ctx context.Context, in *SaveProjectRequest, opts ...grpc.CallOption) (*SaveProjectResponse, error) { - out := new(SaveProjectResponse) - err := c.cc.Invoke(ctx, "/project.ProjectService/SaveProject", in, out, opts...) +func (c *projectServiceClient) RunGRPCMethod(ctx context.Context, in *RunGRPCMethodRequest, opts ...grpc.CallOption) (ProjectService_RunGRPCMethodClient, error) { + stream, err := c.cc.NewStream(ctx, &ProjectService_ServiceDesc.Streams[0], "/project.ProjectService/RunGRPCMethod", opts...) if err != nil { return nil, err } - return out, nil + x := &projectServiceRunGRPCMethodClient{stream} + if err := x.ClientStream.SendMsg(in); err != nil { + return nil, err + } + if err := x.ClientStream.CloseSend(); err != nil { + return nil, err + } + return x, nil +} + +type ProjectService_RunGRPCMethodClient interface { + Recv() (*NodeExecution, error) + grpc.ClientStream +} + +type projectServiceRunGRPCMethodClient struct { + grpc.ClientStream +} + +func (x *projectServiceRunGRPCMethodClient) Recv() (*NodeExecution, error) { + m := new(NodeExecution) + if err := x.ClientStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil } func (c *projectServiceClient) RunWorkflow(ctx context.Context, in *RunWorkflowRequest, opts ...grpc.CallOption) (ProjectService_RunWorkflowClient, error) { @@ -213,27 +250,18 @@ func (x *projectServiceRunWorkflowClient) Recv() (*NodeExecution, error) { return m, nil } -func (c *projectServiceClient) StopWorkflow(ctx context.Context, in *StopWorkflowRequest, opts ...grpc.CallOption) (*StopWorkflowResponse, error) { - out := new(StopWorkflowResponse) - err := c.cc.Invoke(ctx, "/project.ProjectService/StopWorkflow", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *projectServiceClient) GetWorkflowRuns(ctx context.Context, in *GetWorkflowRunsRequest, opts ...grpc.CallOption) (*GetWorkflowRunsResponse, error) { - out := new(GetWorkflowRunsResponse) - err := c.cc.Invoke(ctx, "/project.ProjectService/GetWorkflowRuns", in, out, opts...) +func (c *projectServiceClient) SaveProject(ctx context.Context, in *SaveProjectRequest, opts ...grpc.CallOption) (*SaveProjectResponse, error) { + out := new(SaveProjectResponse) + err := c.cc.Invoke(ctx, "/project.ProjectService/SaveProject", in, out, opts...) if err != nil { return nil, err } return out, nil } -func (c *projectServiceClient) GetRunningWorkflows(ctx context.Context, in *GetRunningWorkflowsRequest, opts ...grpc.CallOption) (*GetRunningWorkflowResponse, error) { - out := new(GetRunningWorkflowResponse) - err := c.cc.Invoke(ctx, "/project.ProjectService/GetRunningWorkflows", in, out, opts...) +func (c *projectServiceClient) StopWorkflow(ctx context.Context, in *StopWorkflowRequest, opts ...grpc.CallOption) (*StopWorkflowResponse, error) { + out := new(StopWorkflowResponse) + err := c.cc.Invoke(ctx, "/project.ProjectService/StopWorkflow", in, out, opts...) if err != nil { return nil, err } @@ -244,78 +272,88 @@ func (c *projectServiceClient) GetRunningWorkflows(ctx context.Context, in *GetR // All implementations should embed UnimplementedProjectServiceServer // for forward compatibility type ProjectServiceServer interface { - NewNode(context.Context, *NewNodeRequest) (*NewNodeResponse, error) - GetProjectTypes(context.Context, *GetProjectTypesRequest) (*ProjectTypes, error) - // TODO breadchris unfortunately this is needed because of the buf fetch transport not supporting streaming - // the suggestion is to build a custom transport that uses websockets https://github.com/bufbuild/connect-es/issues/366 - SendChat(*SendChatRequest, ProjectService_SendChatServer) error - ExportProject(context.Context, *ExportProjectRequest) (*ExportProjectResponse, error) - LoadProject(context.Context, *LoadProjectRequest) (*LoadProjectResponse, error) - GetProject(context.Context, *GetProjectRequest) (*GetProjectResponse, error) - GetProjects(context.Context, *GetProjectsRequest) (*GetProjectsResponse, error) + AddMethod(context.Context, *AddMethodRequest) (*AddMethodResponse, error) CreateProject(context.Context, *CreateProjectRequest) (*CreateProjectResponse, error) DeleteProject(context.Context, *DeleteProjectRequest) (*DeleteProjectResponse, error) EnumerateProviders(context.Context, *GetProvidersRequest) (*GetProvidersResponse, error) + ExportProject(context.Context, *ExportProjectRequest) (*ExportProjectResponse, error) + GenerateAIStub(context.Context, *GenerateAIStubRequest) (*GenerateCode, error) + GetGRPCServerInfo(context.Context, *GetGRPCServerInfoRequest) (*GetGRPCServerInfoResponse, error) GetNodeInfo(context.Context, *GetNodeInfoRequest) (*GetNodeInfoResponse, error) - SaveProject(context.Context, *SaveProjectRequest) (*SaveProjectResponse, error) + GetProject(context.Context, *GetProjectRequest) (*GetProjectResponse, error) + GetProjectTypes(context.Context, *GetProjectTypesRequest) (*ProjectTypes, error) + GetProjects(context.Context, *GetProjectsRequest) (*GetProjectsResponse, error) + GetRunningWorkflows(context.Context, *GetRunningWorkflowsRequest) (*GetRunningWorkflowResponse, error) + GetWorkflowRuns(context.Context, *GetWorkflowRunsRequest) (*GetWorkflowRunsResponse, error) + LoadProject(context.Context, *LoadProjectRequest) (*LoadProjectResponse, error) + NewNode(context.Context, *NewNodeRequest) (*NewNodeResponse, error) + RunGRPCMethod(*RunGRPCMethodRequest, ProjectService_RunGRPCMethodServer) error RunWorkflow(*RunWorkflowRequest, ProjectService_RunWorkflowServer) error + SaveProject(context.Context, *SaveProjectRequest) (*SaveProjectResponse, error) StopWorkflow(context.Context, *StopWorkflowRequest) (*StopWorkflowResponse, error) - GetWorkflowRuns(context.Context, *GetWorkflowRunsRequest) (*GetWorkflowRunsResponse, error) - GetRunningWorkflows(context.Context, *GetRunningWorkflowsRequest) (*GetRunningWorkflowResponse, error) } // UnimplementedProjectServiceServer should be embedded to have forward compatible implementations. type UnimplementedProjectServiceServer struct { } -func (UnimplementedProjectServiceServer) NewNode(context.Context, *NewNodeRequest) (*NewNodeResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method NewNode not implemented") +func (UnimplementedProjectServiceServer) AddMethod(context.Context, *AddMethodRequest) (*AddMethodResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method AddMethod not implemented") } -func (UnimplementedProjectServiceServer) GetProjectTypes(context.Context, *GetProjectTypesRequest) (*ProjectTypes, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetProjectTypes not implemented") +func (UnimplementedProjectServiceServer) CreateProject(context.Context, *CreateProjectRequest) (*CreateProjectResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method CreateProject not implemented") } -func (UnimplementedProjectServiceServer) SendChat(*SendChatRequest, ProjectService_SendChatServer) error { - return status.Errorf(codes.Unimplemented, "method SendChat not implemented") +func (UnimplementedProjectServiceServer) DeleteProject(context.Context, *DeleteProjectRequest) (*DeleteProjectResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method DeleteProject not implemented") +} +func (UnimplementedProjectServiceServer) EnumerateProviders(context.Context, *GetProvidersRequest) (*GetProvidersResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method EnumerateProviders not implemented") } func (UnimplementedProjectServiceServer) ExportProject(context.Context, *ExportProjectRequest) (*ExportProjectResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method ExportProject not implemented") } -func (UnimplementedProjectServiceServer) LoadProject(context.Context, *LoadProjectRequest) (*LoadProjectResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method LoadProject not implemented") +func (UnimplementedProjectServiceServer) GenerateAIStub(context.Context, *GenerateAIStubRequest) (*GenerateCode, error) { + return nil, status.Errorf(codes.Unimplemented, "method GenerateAIStub not implemented") +} +func (UnimplementedProjectServiceServer) GetGRPCServerInfo(context.Context, *GetGRPCServerInfoRequest) (*GetGRPCServerInfoResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetGRPCServerInfo not implemented") +} +func (UnimplementedProjectServiceServer) GetNodeInfo(context.Context, *GetNodeInfoRequest) (*GetNodeInfoResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetNodeInfo not implemented") } func (UnimplementedProjectServiceServer) GetProject(context.Context, *GetProjectRequest) (*GetProjectResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method GetProject not implemented") } +func (UnimplementedProjectServiceServer) GetProjectTypes(context.Context, *GetProjectTypesRequest) (*ProjectTypes, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetProjectTypes not implemented") +} func (UnimplementedProjectServiceServer) GetProjects(context.Context, *GetProjectsRequest) (*GetProjectsResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method GetProjects not implemented") } -func (UnimplementedProjectServiceServer) CreateProject(context.Context, *CreateProjectRequest) (*CreateProjectResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method CreateProject not implemented") +func (UnimplementedProjectServiceServer) GetRunningWorkflows(context.Context, *GetRunningWorkflowsRequest) (*GetRunningWorkflowResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetRunningWorkflows not implemented") } -func (UnimplementedProjectServiceServer) DeleteProject(context.Context, *DeleteProjectRequest) (*DeleteProjectResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method DeleteProject not implemented") +func (UnimplementedProjectServiceServer) GetWorkflowRuns(context.Context, *GetWorkflowRunsRequest) (*GetWorkflowRunsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetWorkflowRuns not implemented") } -func (UnimplementedProjectServiceServer) EnumerateProviders(context.Context, *GetProvidersRequest) (*GetProvidersResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method EnumerateProviders not implemented") +func (UnimplementedProjectServiceServer) LoadProject(context.Context, *LoadProjectRequest) (*LoadProjectResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method LoadProject not implemented") } -func (UnimplementedProjectServiceServer) GetNodeInfo(context.Context, *GetNodeInfoRequest) (*GetNodeInfoResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetNodeInfo not implemented") +func (UnimplementedProjectServiceServer) NewNode(context.Context, *NewNodeRequest) (*NewNodeResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method NewNode not implemented") } -func (UnimplementedProjectServiceServer) SaveProject(context.Context, *SaveProjectRequest) (*SaveProjectResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method SaveProject not implemented") +func (UnimplementedProjectServiceServer) RunGRPCMethod(*RunGRPCMethodRequest, ProjectService_RunGRPCMethodServer) error { + return status.Errorf(codes.Unimplemented, "method RunGRPCMethod not implemented") } func (UnimplementedProjectServiceServer) RunWorkflow(*RunWorkflowRequest, ProjectService_RunWorkflowServer) error { return status.Errorf(codes.Unimplemented, "method RunWorkflow not implemented") } +func (UnimplementedProjectServiceServer) SaveProject(context.Context, *SaveProjectRequest) (*SaveProjectResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method SaveProject not implemented") +} func (UnimplementedProjectServiceServer) StopWorkflow(context.Context, *StopWorkflowRequest) (*StopWorkflowResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method StopWorkflow not implemented") } -func (UnimplementedProjectServiceServer) GetWorkflowRuns(context.Context, *GetWorkflowRunsRequest) (*GetWorkflowRunsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetWorkflowRuns not implemented") -} -func (UnimplementedProjectServiceServer) GetRunningWorkflows(context.Context, *GetRunningWorkflowsRequest) (*GetRunningWorkflowResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetRunningWorkflows not implemented") -} // UnsafeProjectServiceServer may be embedded to opt out of forward compatibility for this service. // Use of this interface is not recommended, as added methods to ProjectServiceServer will @@ -328,61 +366,76 @@ func RegisterProjectServiceServer(s grpc.ServiceRegistrar, srv ProjectServiceSer s.RegisterService(&ProjectService_ServiceDesc, srv) } -func _ProjectService_NewNode_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(NewNodeRequest) +func _ProjectService_AddMethod_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(AddMethodRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(ProjectServiceServer).NewNode(ctx, in) + return srv.(ProjectServiceServer).AddMethod(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/project.ProjectService/NewNode", + FullMethod: "/project.ProjectService/AddMethod", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ProjectServiceServer).NewNode(ctx, req.(*NewNodeRequest)) + return srv.(ProjectServiceServer).AddMethod(ctx, req.(*AddMethodRequest)) } return interceptor(ctx, in, info, handler) } -func _ProjectService_GetProjectTypes_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(GetProjectTypesRequest) +func _ProjectService_CreateProject_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateProjectRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(ProjectServiceServer).GetProjectTypes(ctx, in) + return srv.(ProjectServiceServer).CreateProject(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/project.ProjectService/GetProjectTypes", + FullMethod: "/project.ProjectService/CreateProject", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ProjectServiceServer).GetProjectTypes(ctx, req.(*GetProjectTypesRequest)) + return srv.(ProjectServiceServer).CreateProject(ctx, req.(*CreateProjectRequest)) } return interceptor(ctx, in, info, handler) } -func _ProjectService_SendChat_Handler(srv interface{}, stream grpc.ServerStream) error { - m := new(SendChatRequest) - if err := stream.RecvMsg(m); err != nil { - return err +func _ProjectService_DeleteProject_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteProjectRequest) + if err := dec(in); err != nil { + return nil, err } - return srv.(ProjectServiceServer).SendChat(m, &projectServiceSendChatServer{stream}) -} - -type ProjectService_SendChatServer interface { - Send(*SendChatResponse) error - grpc.ServerStream -} - -type projectServiceSendChatServer struct { - grpc.ServerStream + if interceptor == nil { + return srv.(ProjectServiceServer).DeleteProject(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/project.ProjectService/DeleteProject", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ProjectServiceServer).DeleteProject(ctx, req.(*DeleteProjectRequest)) + } + return interceptor(ctx, in, info, handler) } -func (x *projectServiceSendChatServer) Send(m *SendChatResponse) error { - return x.ServerStream.SendMsg(m) +func _ProjectService_EnumerateProviders_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetProvidersRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ProjectServiceServer).EnumerateProviders(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/project.ProjectService/EnumerateProviders", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ProjectServiceServer).EnumerateProviders(ctx, req.(*GetProvidersRequest)) + } + return interceptor(ctx, in, info, handler) } func _ProjectService_ExportProject_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { @@ -403,20 +456,56 @@ func _ProjectService_ExportProject_Handler(srv interface{}, ctx context.Context, return interceptor(ctx, in, info, handler) } -func _ProjectService_LoadProject_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(LoadProjectRequest) +func _ProjectService_GenerateAIStub_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GenerateAIStubRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(ProjectServiceServer).LoadProject(ctx, in) + return srv.(ProjectServiceServer).GenerateAIStub(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/project.ProjectService/LoadProject", + FullMethod: "/project.ProjectService/GenerateAIStub", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ProjectServiceServer).LoadProject(ctx, req.(*LoadProjectRequest)) + return srv.(ProjectServiceServer).GenerateAIStub(ctx, req.(*GenerateAIStubRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ProjectService_GetGRPCServerInfo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetGRPCServerInfoRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ProjectServiceServer).GetGRPCServerInfo(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/project.ProjectService/GetGRPCServerInfo", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ProjectServiceServer).GetGRPCServerInfo(ctx, req.(*GetGRPCServerInfoRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ProjectService_GetNodeInfo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetNodeInfoRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ProjectServiceServer).GetNodeInfo(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/project.ProjectService/GetNodeInfo", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ProjectServiceServer).GetNodeInfo(ctx, req.(*GetNodeInfoRequest)) } return interceptor(ctx, in, info, handler) } @@ -439,114 +528,135 @@ func _ProjectService_GetProject_Handler(srv interface{}, ctx context.Context, de return interceptor(ctx, in, info, handler) } -func _ProjectService_GetProjects_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(GetProjectsRequest) +func _ProjectService_GetProjectTypes_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetProjectTypesRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(ProjectServiceServer).GetProjects(ctx, in) + return srv.(ProjectServiceServer).GetProjectTypes(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/project.ProjectService/GetProjects", + FullMethod: "/project.ProjectService/GetProjectTypes", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ProjectServiceServer).GetProjects(ctx, req.(*GetProjectsRequest)) + return srv.(ProjectServiceServer).GetProjectTypes(ctx, req.(*GetProjectTypesRequest)) } return interceptor(ctx, in, info, handler) } -func _ProjectService_CreateProject_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(CreateProjectRequest) +func _ProjectService_GetProjects_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetProjectsRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(ProjectServiceServer).CreateProject(ctx, in) + return srv.(ProjectServiceServer).GetProjects(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/project.ProjectService/CreateProject", + FullMethod: "/project.ProjectService/GetProjects", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ProjectServiceServer).CreateProject(ctx, req.(*CreateProjectRequest)) + return srv.(ProjectServiceServer).GetProjects(ctx, req.(*GetProjectsRequest)) } return interceptor(ctx, in, info, handler) } -func _ProjectService_DeleteProject_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(DeleteProjectRequest) +func _ProjectService_GetRunningWorkflows_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetRunningWorkflowsRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(ProjectServiceServer).DeleteProject(ctx, in) + return srv.(ProjectServiceServer).GetRunningWorkflows(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/project.ProjectService/DeleteProject", + FullMethod: "/project.ProjectService/GetRunningWorkflows", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ProjectServiceServer).DeleteProject(ctx, req.(*DeleteProjectRequest)) + return srv.(ProjectServiceServer).GetRunningWorkflows(ctx, req.(*GetRunningWorkflowsRequest)) } return interceptor(ctx, in, info, handler) } -func _ProjectService_EnumerateProviders_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(GetProvidersRequest) +func _ProjectService_GetWorkflowRuns_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetWorkflowRunsRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(ProjectServiceServer).EnumerateProviders(ctx, in) + return srv.(ProjectServiceServer).GetWorkflowRuns(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/project.ProjectService/EnumerateProviders", + FullMethod: "/project.ProjectService/GetWorkflowRuns", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ProjectServiceServer).EnumerateProviders(ctx, req.(*GetProvidersRequest)) + return srv.(ProjectServiceServer).GetWorkflowRuns(ctx, req.(*GetWorkflowRunsRequest)) } return interceptor(ctx, in, info, handler) } -func _ProjectService_GetNodeInfo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(GetNodeInfoRequest) +func _ProjectService_LoadProject_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(LoadProjectRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(ProjectServiceServer).GetNodeInfo(ctx, in) + return srv.(ProjectServiceServer).LoadProject(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/project.ProjectService/GetNodeInfo", + FullMethod: "/project.ProjectService/LoadProject", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ProjectServiceServer).GetNodeInfo(ctx, req.(*GetNodeInfoRequest)) + return srv.(ProjectServiceServer).LoadProject(ctx, req.(*LoadProjectRequest)) } return interceptor(ctx, in, info, handler) } -func _ProjectService_SaveProject_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(SaveProjectRequest) +func _ProjectService_NewNode_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(NewNodeRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(ProjectServiceServer).SaveProject(ctx, in) + return srv.(ProjectServiceServer).NewNode(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/project.ProjectService/SaveProject", + FullMethod: "/project.ProjectService/NewNode", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ProjectServiceServer).SaveProject(ctx, req.(*SaveProjectRequest)) + return srv.(ProjectServiceServer).NewNode(ctx, req.(*NewNodeRequest)) } return interceptor(ctx, in, info, handler) } +func _ProjectService_RunGRPCMethod_Handler(srv interface{}, stream grpc.ServerStream) error { + m := new(RunGRPCMethodRequest) + if err := stream.RecvMsg(m); err != nil { + return err + } + return srv.(ProjectServiceServer).RunGRPCMethod(m, &projectServiceRunGRPCMethodServer{stream}) +} + +type ProjectService_RunGRPCMethodServer interface { + Send(*NodeExecution) error + grpc.ServerStream +} + +type projectServiceRunGRPCMethodServer struct { + grpc.ServerStream +} + +func (x *projectServiceRunGRPCMethodServer) Send(m *NodeExecution) error { + return x.ServerStream.SendMsg(m) +} + func _ProjectService_RunWorkflow_Handler(srv interface{}, stream grpc.ServerStream) error { m := new(RunWorkflowRequest) if err := stream.RecvMsg(m); err != nil { @@ -568,56 +678,38 @@ func (x *projectServiceRunWorkflowServer) Send(m *NodeExecution) error { return x.ServerStream.SendMsg(m) } -func _ProjectService_StopWorkflow_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(StopWorkflowRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(ProjectServiceServer).StopWorkflow(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/project.ProjectService/StopWorkflow", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ProjectServiceServer).StopWorkflow(ctx, req.(*StopWorkflowRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _ProjectService_GetWorkflowRuns_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(GetWorkflowRunsRequest) +func _ProjectService_SaveProject_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SaveProjectRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(ProjectServiceServer).GetWorkflowRuns(ctx, in) + return srv.(ProjectServiceServer).SaveProject(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/project.ProjectService/GetWorkflowRuns", + FullMethod: "/project.ProjectService/SaveProject", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ProjectServiceServer).GetWorkflowRuns(ctx, req.(*GetWorkflowRunsRequest)) + return srv.(ProjectServiceServer).SaveProject(ctx, req.(*SaveProjectRequest)) } return interceptor(ctx, in, info, handler) } -func _ProjectService_GetRunningWorkflows_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(GetRunningWorkflowsRequest) +func _ProjectService_StopWorkflow_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(StopWorkflowRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(ProjectServiceServer).GetRunningWorkflows(ctx, in) + return srv.(ProjectServiceServer).StopWorkflow(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/project.ProjectService/GetRunningWorkflows", + FullMethod: "/project.ProjectService/StopWorkflow", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ProjectServiceServer).GetRunningWorkflows(ctx, req.(*GetRunningWorkflowsRequest)) + return srv.(ProjectServiceServer).StopWorkflow(ctx, req.(*StopWorkflowRequest)) } return interceptor(ctx, in, info, handler) } @@ -630,44 +722,64 @@ var ProjectService_ServiceDesc = grpc.ServiceDesc{ HandlerType: (*ProjectServiceServer)(nil), Methods: []grpc.MethodDesc{ { - MethodName: "NewNode", - Handler: _ProjectService_NewNode_Handler, + MethodName: "AddMethod", + Handler: _ProjectService_AddMethod_Handler, }, { - MethodName: "GetProjectTypes", - Handler: _ProjectService_GetProjectTypes_Handler, + MethodName: "CreateProject", + Handler: _ProjectService_CreateProject_Handler, + }, + { + MethodName: "DeleteProject", + Handler: _ProjectService_DeleteProject_Handler, + }, + { + MethodName: "EnumerateProviders", + Handler: _ProjectService_EnumerateProviders_Handler, }, { MethodName: "ExportProject", Handler: _ProjectService_ExportProject_Handler, }, { - MethodName: "LoadProject", - Handler: _ProjectService_LoadProject_Handler, + MethodName: "GenerateAIStub", + Handler: _ProjectService_GenerateAIStub_Handler, + }, + { + MethodName: "GetGRPCServerInfo", + Handler: _ProjectService_GetGRPCServerInfo_Handler, + }, + { + MethodName: "GetNodeInfo", + Handler: _ProjectService_GetNodeInfo_Handler, }, { MethodName: "GetProject", Handler: _ProjectService_GetProject_Handler, }, + { + MethodName: "GetProjectTypes", + Handler: _ProjectService_GetProjectTypes_Handler, + }, { MethodName: "GetProjects", Handler: _ProjectService_GetProjects_Handler, }, { - MethodName: "CreateProject", - Handler: _ProjectService_CreateProject_Handler, + MethodName: "GetRunningWorkflows", + Handler: _ProjectService_GetRunningWorkflows_Handler, }, { - MethodName: "DeleteProject", - Handler: _ProjectService_DeleteProject_Handler, + MethodName: "GetWorkflowRuns", + Handler: _ProjectService_GetWorkflowRuns_Handler, }, { - MethodName: "EnumerateProviders", - Handler: _ProjectService_EnumerateProviders_Handler, + MethodName: "LoadProject", + Handler: _ProjectService_LoadProject_Handler, }, { - MethodName: "GetNodeInfo", - Handler: _ProjectService_GetNodeInfo_Handler, + MethodName: "NewNode", + Handler: _ProjectService_NewNode_Handler, }, { MethodName: "SaveProject", @@ -677,19 +789,11 @@ var ProjectService_ServiceDesc = grpc.ServiceDesc{ MethodName: "StopWorkflow", Handler: _ProjectService_StopWorkflow_Handler, }, - { - MethodName: "GetWorkflowRuns", - Handler: _ProjectService_GetWorkflowRuns_Handler, - }, - { - MethodName: "GetRunningWorkflows", - Handler: _ProjectService_GetRunningWorkflows_Handler, - }, }, Streams: []grpc.StreamDesc{ { - StreamName: "SendChat", - Handler: _ProjectService_SendChat_Handler, + StreamName: "RunGRPCMethod", + Handler: _ProjectService_RunGRPCMethod_Handler, ServerStreams: true, }, { diff --git a/go.mod b/go.mod index 15ecf80..55c0166 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,8 @@ module github.com/protoflow-labs/protoflow -go 1.20 +go 1.21 + +toolchain go1.21.0 require ( github.com/alecthomas/jsonschema v0.0.0-20220216202328-9eeeec9d044b @@ -24,16 +26,16 @@ require ( github.com/iancoleman/strcase v0.2.0 github.com/jhump/protoreflect v1.15.1 github.com/lib/pq v1.10.8 - github.com/mattn/go-sqlite3 v1.14.16 + github.com/mattn/go-sqlite3 v1.14.17 github.com/pkg/errors v0.9.1 github.com/reactivex/rxgo/v2 v2.5.0 github.com/robertkrimen/otto v0.2.1 github.com/rs/zerolog v1.30.0 - github.com/samber/go-gpt-3-encoder v0.3.1 github.com/samber/lo v1.38.1 github.com/sashabaranov/go-openai v1.12.0 github.com/sirupsen/logrus v1.9.0 github.com/stretchr/testify v1.8.4 + github.com/tmc/langchaingo v0.0.0-20231205064123-af36340149bb github.com/urfave/cli/v2 v2.25.1 github.com/xeipuuv/gojsonschema v1.2.0 go.temporal.io/sdk v1.22.1 @@ -41,10 +43,10 @@ require ( go.uber.org/config v1.4.0 go.uber.org/zap v1.24.0 gocloud.dev v0.29.0 - golang.org/x/net v0.11.0 - golang.org/x/sys v0.10.0 + golang.org/x/net v0.17.0 + golang.org/x/sys v0.13.0 golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 - google.golang.org/grpc v1.54.0 + google.golang.org/grpc v1.57.1 google.golang.org/protobuf v1.31.0 gopkg.in/yaml.v3 v3.0.1 gorm.io/driver/mysql v1.5.0 @@ -57,12 +59,18 @@ require ( require ( github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 // indirect github.com/BurntSushi/toml v1.2.1 // indirect + github.com/Masterminds/goutils v1.1.1 // indirect + github.com/Masterminds/semver/v3 v3.2.0 // indirect + github.com/Masterminds/sprig/v3 v3.2.3 // indirect github.com/Microsoft/go-winio v0.6.0 // indirect + github.com/PuerkitoBio/goquery v1.8.1 // indirect + github.com/andybalholm/cascadia v1.3.1 // indirect + github.com/aymerick/douceur v0.2.0 // indirect github.com/bufbuild/protocompile v0.5.1 // indirect github.com/cenkalti/backoff/v4 v4.2.1 // indirect github.com/cpuguy83/go-md2man/v2 v2.0.2 // indirect github.com/davecgh/go-spew v1.1.1 // indirect - github.com/dlclark/regexp2 v1.10.0 // indirect + github.com/dlclark/regexp2 v1.8.1 // indirect github.com/docker/distribution v2.8.1+incompatible // indirect github.com/docker/docker v23.0.2+incompatible // indirect github.com/docker/docker-credential-helpers v0.7.0 // indirect @@ -79,7 +87,7 @@ require ( github.com/go-openapi/jsonpointer v0.19.6 // indirect github.com/go-openapi/jsonreference v0.20.2 // indirect github.com/go-openapi/swag v0.22.3 // indirect - github.com/go-sql-driver/mysql v1.7.0 // indirect + github.com/go-sql-driver/mysql v1.7.1 // indirect github.com/gofrs/flock v0.8.1 // indirect github.com/gofrs/uuid/v5 v5.0.0 // indirect github.com/gogo/googleapis v1.4.1 // indirect @@ -93,13 +101,15 @@ require ( github.com/google/gofuzz v1.2.0 // indirect github.com/google/pprof v0.0.0-20230406165453-00490a63f317 // indirect github.com/google/subcommands v1.2.0 // indirect - github.com/googleapis/gax-go/v2 v2.8.0 // indirect + github.com/googleapis/gax-go/v2 v2.11.0 // indirect + github.com/gorilla/css v1.0.0 // indirect github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 // indirect + github.com/huandu/xstrings v1.3.3 // indirect github.com/imdario/mergo v0.3.16 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/jackc/pgpassfile v1.0.0 // indirect github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a // indirect - github.com/jackc/pgx/v5 v5.3.0 // indirect + github.com/jackc/pgx/v5 v5.4.1 // indirect github.com/jdxcode/netrc v0.0.0-20221124155335-4616370d1a84 // indirect github.com/jinzhu/inflection v1.0.0 // indirect github.com/jinzhu/now v1.1.5 // indirect @@ -107,10 +117,15 @@ require ( github.com/json-iterator/go v1.1.12 // indirect github.com/klauspost/compress v1.16.5 // indirect github.com/klauspost/pgzip v1.2.5 // indirect + github.com/ledongthuc/pdf v0.0.0-20220302134840-0c2507a12d80 // indirect + github.com/lmittmann/tint v1.0.3 // indirect github.com/mailru/easyjson v0.7.7 // indirect github.com/mattn/go-colorable v0.1.13 // indirect github.com/mattn/go-isatty v0.0.19 // indirect + github.com/microcosm-cc/bluemonday v1.0.24 // indirect + github.com/mitchellh/copystructure v1.0.0 // indirect github.com/mitchellh/go-homedir v1.1.0 // indirect + github.com/mitchellh/reflectwalk v1.0.0 // indirect github.com/moby/term v0.0.0-20221205130635-1aeaba878587 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.2 // indirect @@ -121,12 +136,14 @@ require ( github.com/pborman/uuid v1.2.1 // indirect github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8 // indirect github.com/pkg/profile v1.7.0 // indirect + github.com/pkoukk/tiktoken-go v0.1.2 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect github.com/robfig/cron v1.2.0 // indirect - github.com/rogpeppe/go-internal v1.10.1-0.20230508101108-a4f6fabd84c5 // indirect github.com/rs/cors v1.8.3 // indirect github.com/russross/blackfriday/v2 v2.1.0 // indirect + github.com/shopspring/decimal v1.2.0 // indirect + github.com/spf13/cast v1.5.0 // indirect github.com/spf13/cobra v1.7.0 // indirect github.com/spf13/pflag v1.0.5 // indirect github.com/stretchr/objx v0.5.0 // indirect @@ -135,25 +152,31 @@ require ( github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb // indirect github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 // indirect github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 // indirect + gitlab.com/golang-commonmark/html v0.0.0-20191124015941-a22733972181 // indirect + gitlab.com/golang-commonmark/linkify v0.0.0-20191026162114-a0c2df6c8f82 // indirect + gitlab.com/golang-commonmark/markdown v0.0.0-20211110145824-bf3e522c626a // indirect + gitlab.com/golang-commonmark/mdurl v0.0.0-20191124015652-932350d1cb84 // indirect + gitlab.com/golang-commonmark/puny v0.0.0-20191124015043-9f83538fa04f // indirect go.opencensus.io v0.24.0 // indirect go.opentelemetry.io/otel v1.14.0 // indirect go.opentelemetry.io/otel/sdk v1.14.0 // indirect go.opentelemetry.io/otel/trace v1.14.0 // indirect + go.starlark.net v0.0.0-20230302034142-4b1e35fe2254 // indirect go.temporal.io/api v1.19.1-0.20230322213042-07fb271d475b // indirect go.uber.org/multierr v1.11.0 // indirect - golang.org/x/crypto v0.10.0 // indirect + golang.org/x/crypto v0.14.0 // indirect golang.org/x/exp v0.0.0-20230626212559-97b1e661b5df // indirect golang.org/x/lint v0.0.0-20210508222113-6edffad5e616 // indirect golang.org/x/mod v0.11.0 // indirect - golang.org/x/oauth2 v0.7.0 // indirect + golang.org/x/oauth2 v0.10.0 // indirect golang.org/x/sync v0.3.0 // indirect - golang.org/x/term v0.9.0 // indirect - golang.org/x/text v0.10.0 // indirect + golang.org/x/term v0.13.0 // indirect + golang.org/x/text v0.13.0 // indirect golang.org/x/time v0.3.0 // indirect golang.org/x/tools v0.10.0 // indirect - google.golang.org/api v0.123.0 // indirect + google.golang.org/api v0.126.0 // indirect google.golang.org/appengine v1.6.7 // indirect - google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20230530153820-e85fd2cbaebc // indirect gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/sourcemap.v1 v1.0.5 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect diff --git a/go.sum b/go.sum index 5b5dc75..0328966 100644 --- a/go.sum +++ b/go.sum @@ -39,8 +39,8 @@ cloud.google.com/go v0.104.0/go.mod h1:OO6xxXdJyvuJPcEPBLN9BJPD+jep5G1+2U5B5gkRY cloud.google.com/go v0.105.0/go.mod h1:PrLgOJNe5nfE9UMxKxgXj4mD3voiP+YQ6gdt6KMFOKM= cloud.google.com/go v0.107.0/go.mod h1:wpc2eNrD7hXUTy8EKS10jkxpZBjASrORK7goS+3YX2I= cloud.google.com/go v0.109.0/go.mod h1:2sYycXt75t/CSB5R9M2wPU1tJmire7AQZTPtITcGBVE= -cloud.google.com/go v0.110.0 h1:Zc8gqp3+a9/Eyph2KDmcGaPtbKRIoqq4YTlL4NMD0Ys= cloud.google.com/go v0.110.0/go.mod h1:SJnCLqQ0FCFGSZMUNUf84MV3Aia54kn7pi8st7tMzaY= +cloud.google.com/go v0.110.2 h1:sdFPBr6xG9/wkBbfhmUz/JmZC7X6LavQgcrVINrKiVA= cloud.google.com/go/accessapproval v1.4.0/go.mod h1:zybIuC3KpDOvotz59lFe5qxRZx6C75OtwbisN56xYB4= cloud.google.com/go/accessapproval v1.5.0/go.mod h1:HFy3tuiGvMdcd/u+Cu5b9NkO1pEICJ46IR82PoUdplw= cloud.google.com/go/accessapproval v1.6.0/go.mod h1:R0EiYnwV5fsRFiKZkPHr6mwyk2wxUJ30nL4j2pcFY2E= @@ -151,7 +151,7 @@ cloud.google.com/go/compute v1.13.0/go.mod h1:5aPTS0cUNMIc1CE546K+Th6weJUNQErARy cloud.google.com/go/compute v1.14.0/go.mod h1:YfLtxrj9sU4Yxv+sXzZkyPjEyPBZfXHUvjxega5vAdo= cloud.google.com/go/compute v1.15.1/go.mod h1:bjjoF/NtFUrkD/urWfdHaKuOPDR5nWIs63rR+SXhcpA= cloud.google.com/go/compute v1.18.0/go.mod h1:1X7yHxec2Ga+Ss6jPyjxRxpu2uu7PLgsOVXvgU0yacs= -cloud.google.com/go/compute v1.19.0 h1:+9zda3WGgW1ZSTlVppLCYFIr48Pa35q1uG2N1itbCEQ= +cloud.google.com/go/compute v1.20.1 h1:6aKEtlUiwEpJzM001l0yFkpXmUVXaN8W+fbkb2AZNbg= cloud.google.com/go/compute/metadata v0.1.0/go.mod h1:Z1VN+bulIf6bt4P/C37K4DyZYZEXYonfTBHHFPO/4UU= cloud.google.com/go/compute/metadata v0.2.0/go.mod h1:zFmK7XCadkQkj6TtorcaGlCW1hT1fIilQDwofLpJ20k= cloud.google.com/go/compute/metadata v0.2.1/go.mod h1:jgHgmJd2RKBGzXqF5LR2EZMGxBkeanZ9wwa75XHJgOM= @@ -277,7 +277,7 @@ cloud.google.com/go/iam v0.8.0/go.mod h1:lga0/y3iH6CX7sYqypWJ33hf7kkfXJag67naqGE cloud.google.com/go/iam v0.10.0/go.mod h1:nXAECrMt2qHpF6RZUZseteD6QyanL68reN4OXPw0UWM= cloud.google.com/go/iam v0.11.0/go.mod h1:9PiLDanza5D+oWFZiH1uG+RnRCfEGKoyl6yo4cgWZGY= cloud.google.com/go/iam v0.12.0/go.mod h1:knyHGviacl11zrtZUoDuYpDgLjvr28sLQaG0YB2GYAY= -cloud.google.com/go/iam v0.13.0 h1:+CmB+K0J/33d0zSQ9SlFWUeCCEn5XJA0ZMZ3pHE9u8k= +cloud.google.com/go/iam v1.0.1 h1:lyeCAU6jpnVNrE9zGQkTl3WgNgK/X+uWwaw0kynZJMU= cloud.google.com/go/iap v1.4.0/go.mod h1:RGFwRJdihTINIe4wZ2iCP0zF/qu18ZwyKxrhMhygBEc= cloud.google.com/go/iap v1.5.0/go.mod h1:UH/CGgKd4KyohZL5Pt0jSKE4m3FR51qg6FKQ/z/Ix9A= cloud.google.com/go/iap v1.6.0/go.mod h1:NSuvI9C/j7UdjGjIde7t7HBz+QTwBcapPE07+sSRcLk= @@ -305,8 +305,8 @@ cloud.google.com/go/logging v1.7.0/go.mod h1:3xjP2CjkM3ZkO73aj4ASA5wRPGGCRrPIAeN cloud.google.com/go/longrunning v0.1.1/go.mod h1:UUFxuDWkv22EuY93jjmDMFT5GPQKeFVJBIF6QlTqdsE= cloud.google.com/go/longrunning v0.3.0/go.mod h1:qth9Y41RRSUE69rDcOn6DdK3HfQfsUI0YSmW3iIlLJc= cloud.google.com/go/longrunning v0.4.0/go.mod h1:eF3Qsw58iX/bkKtVjMTYpH0LRjQ2goDkjkNQTlzq/ZM= -cloud.google.com/go/longrunning v0.4.1 h1:v+yFJOfKC3yZdY6ZUI933pIYdhyhV8S3NpWrXWmg7jM= cloud.google.com/go/longrunning v0.4.1/go.mod h1:4iWDqhBZ70CvZ6BfETbvam3T8FMvLK+eFj0E6AaRQTo= +cloud.google.com/go/longrunning v0.4.2 h1:WDKiiNXFTaQ6qz/G8FCOkuY9kJmOJGY67wPUC1M2RbE= cloud.google.com/go/managedidentities v1.3.0/go.mod h1:UzlW3cBOiPrzucO5qWkNkh0w33KFtBJU281hacNvsdE= cloud.google.com/go/managedidentities v1.4.0/go.mod h1:NWSBYbEMgqmbZsLIyKvxrYbtqOsxY1ZrGM+9RgDqInM= cloud.google.com/go/managedidentities v1.5.0/go.mod h1:+dWcZ0JlUmpuxpIDfyP5pP5y0bLdRwOS4Lp7gMni/LA= @@ -597,7 +597,13 @@ github.com/HdrHistogram/hdrhistogram-go v1.1.0/go.mod h1:yDgFjdqOqDEKOvasDdhWNXY github.com/HdrHistogram/hdrhistogram-go v1.1.2/go.mod h1:yDgFjdqOqDEKOvasDdhWNXYg9BVp4O+o5f6V/ehm6Oo= github.com/JohnCGriffin/overflow v0.0.0-20211019200055-46fa312c352c/go.mod h1:X0CRv0ky0k6m906ixxpzmDRLvX58TFUKS2eePweuyxk= github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= +github.com/Masterminds/goutils v1.1.1 h1:5nUrii3FMTL5diU80unEVvNevw1nH4+ZV4DSLVJLSYI= +github.com/Masterminds/goutils v1.1.1/go.mod h1:8cTjp+g8YejhMuvIA5y2vz3BpJxksy863GQaJW2MFNU= github.com/Masterminds/semver/v3 v3.1.1/go.mod h1:VPu/7SZ7ePZ3QOrcuXROw5FAcLl4a0cBrbBpGY/8hQs= +github.com/Masterminds/semver/v3 v3.2.0 h1:3MEsd0SM6jqZojhjLWWeBY+Kcjy9i6MQAeY7YgDP83g= +github.com/Masterminds/semver/v3 v3.2.0/go.mod h1:qvl/7zhW3nngYb5+80sSMF+FG2BjYrf8m9wsX0PNOMQ= +github.com/Masterminds/sprig/v3 v3.2.3 h1:eL2fZNezLomi0uOLqjQoN6BfsDD+fyLtgbJMAj9n6YA= +github.com/Masterminds/sprig/v3 v3.2.3/go.mod h1:rXcFaZ2zZbLRJv/xSysmlgIM1u11eBaRMhvYXJNkGuM= github.com/Microsoft/go-winio v0.4.11/go.mod h1:VhR8bwka0BXejwEJY73c50VrPtXAaKcyvVC4A4RozmA= github.com/Microsoft/go-winio v0.4.14/go.mod h1:qXqCSQ3Xa7+6tgxaGTIe4Kpcdsi+P8jBhyzoq1bpyYA= github.com/Microsoft/go-winio v0.4.15-0.20190919025122-fc70bd9a86b5/go.mod h1:tTuCMEN+UleMWgg9dVx4Hu52b1bJo+59jBh3ajtinzw= @@ -625,6 +631,8 @@ github.com/Microsoft/hcsshim/test v0.0.0-20210227013316-43a75bb4edd3/go.mod h1:m github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ= github.com/NYTimes/gziphandler v1.1.1/go.mod h1:n/CVRwUEOgIxrgPvAQhUUr9oeUtvrhMomdKFjzJNB0c= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= +github.com/PuerkitoBio/goquery v1.8.1 h1:uQxhNlArOIdbrH1tr0UXwdVFgDcZDrZVdcpygAcwmWM= +github.com/PuerkitoBio/goquery v1.8.1/go.mod h1:Q8ICL1kNUJ2sXGoAhPGUdYDJvgQgHzJsnnd3H7Ho5jQ= github.com/PuerkitoBio/purell v1.0.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= github.com/PuerkitoBio/urlesc v0.0.0-20160726150825-5bd2802263f2/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= @@ -649,6 +657,8 @@ github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137/go.mod h1:OMCwj8V github.com/alexflint/go-filemutex v0.0.0-20171022225611-72bdc8eae2ae/go.mod h1:CgnQgUtFrFz9mxFNtED3jI5tLDjKlOM+oUF/sTk6ps0= github.com/alexflint/go-filemutex v1.1.0/go.mod h1:7P4iRhttt/nUvUOrYIhcpMzv2G6CY9UnI16Z+UJqRyk= github.com/andybalholm/brotli v1.0.4/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig= +github.com/andybalholm/cascadia v1.3.1 h1:nhxRkql1kdYCc8Snf7D5/D3spOX+dBgjA6u8x004T2c= +github.com/andybalholm/cascadia v1.3.1/go.mod h1:R4bJ1UQfqADjvDa4P6HZHLh/3OxWWEqc0Sk8XGwHqvA= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= github.com/apache/arrow/go/v10 v10.0.1/go.mod h1:YvhnlEePVnBS4+0z3fhPfUy7W1Ikj0Ih0vcRo/gZ1M0= github.com/apache/thrift v0.16.0/go.mod h1:PHK3hniurgQaNMZYaCLEqXKsYK8upmhPbmdP2FXSqgU= @@ -720,6 +730,8 @@ github.com/aws/aws-sdk-go-v2/service/sts v1.18.3/go.mod h1:b+psTJn33Q4qGoDaM7ZiO github.com/aws/smithy-go v1.8.0/go.mod h1:SObp3lf9smib00L/v3U2eAKG8FyQ7iLrJnQiAmR5n+E= github.com/aws/smithy-go v1.13.5 h1:hgz0X/DX0dGqTYpGALqXJoRKRj5oQ7150i5FdTePzO8= github.com/aws/smithy-go v1.13.5/go.mod h1:Tg+OJXh4MB2R/uN61Ko2f6hTZwB/ZYGOtib8J3gBHzA= +github.com/aymerick/douceur v0.2.0 h1:Mv+mAeH1Q+n9Fr+oyamOlAkUNPWPlA8PPGR0QAaYuPk= +github.com/aymerick/douceur v0.2.0/go.mod h1:wlT5vV2O3h55X9m7iVYN0TBM0NH/MmbLnd30/FjWUq4= github.com/benbjohnson/clock v1.0.3/go.mod h1:bGMdMPoPVvcYyt1gHDf4J2KE153Yf9BuiUKYMaxlTDM= github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= github.com/benbjohnson/clock v1.3.0 h1:ip6w0uFQkncKQ979AypyG0ER7mqUSBdKLOgAle/AT8A= @@ -948,8 +960,8 @@ github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8 github.com/dgryski/go-sip13 v0.0.0-20200911182023-62edffca9245/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= github.com/digitalocean/godo v1.78.0/go.mod h1:GBmu8MkjZmNARE7IXRPmkbbnocNN8+uBm0xbEVw2LCs= github.com/digitalocean/godo v1.95.0/go.mod h1:NRpFznZFvhHjBoqZAaOD3khVzsJ3EibzKqFL4R60dmA= -github.com/dlclark/regexp2 v1.10.0 h1:+/GIL799phkJqYW+3YbOd8LCcbHzT0Pbo8zl70MHsq0= -github.com/dlclark/regexp2 v1.10.0/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8= +github.com/dlclark/regexp2 v1.8.1 h1:6Lcdwya6GjPUNsBct8Lg/yRPwMhABj269AAzdGSiR+0= +github.com/dlclark/regexp2 v1.8.1/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8= github.com/dnaeon/go-vcr v1.0.1/go.mod h1:aBB1+wY4s93YsC3HHjMBMrwTj2R9FHDzUr9KyGc8n1E= github.com/dnaeon/go-vcr v1.1.0/go.mod h1:M7tiix8f0r6mKKJ3Yq/kqU1OYf3MnfmBWVbPx/yU9ko= github.com/dnaeon/go-vcr v1.2.0/go.mod h1:R4UdLID7HZT3taECzJs4YgbbH6PIGXB6W/sc5OLb6RQ= @@ -1044,6 +1056,7 @@ github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHqu github.com/franela/goblin v0.0.0-20210519012713-85d372ac71e2/go.mod h1:VzmDKDJVZI3aJmnRI9VjAn9nJ8qPPsN1fqzr9dqInIo= github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20= github.com/frankban/quicktest v1.11.3/go.mod h1:wRf/ReqHper53s+kmmSZizM8NamnL3IM0I9ntUbOk+k= +github.com/frankban/quicktest v1.14.3 h1:FJKSZTDHjyhriyC81FLQ0LY93eSai0ZyR/ZIkd3ZUKE= github.com/frankban/quicktest v1.14.3/go.mod h1:mgiwOwqx65TmIk1wJ6Q7wvnVMocbUorkibMOrVTHZps= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= @@ -1155,8 +1168,9 @@ github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+ github.com/go-playground/validator/v10 v10.2.0/go.mod h1:uOYAAleCW8F/7oMFd6aG0GOhaH6EGOAJShg8Id5JGkI= github.com/go-playground/validator/v10 v10.4.1/go.mod h1:nlOn6nFhuKACm19sB/8EGNn9GlaMV7XkbRSipzJ0Ii4= github.com/go-resty/resty/v2 v2.1.1-0.20191201195748-d7b97669fe48/go.mod h1:dZGr0i9PLlaaTD4H/hoZIDjQ+r6xq8mgbRzHZf7f2J8= -github.com/go-sql-driver/mysql v1.7.0 h1:ueSltNNllEqE3qcWBTD0iQd3IpL/6U+mJxLkazJ7YPc= github.com/go-sql-driver/mysql v1.7.0/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI= +github.com/go-sql-driver/mysql v1.7.1 h1:lUIinVbN1DY0xBg0eMOzmmtGoHwWBbvnWubQUrtU8EI= +github.com/go-sql-driver/mysql v1.7.1/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/go-stack/stack v1.8.1/go.mod h1:dcoOX6HbPZSZptuspn9bctJ+N/CnF5gGygcUP3XYfe4= github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0 h1:p104kn46Q8WdvHunIJ9dAyjPVtrBPhSr3KT2yUst43I= @@ -1334,7 +1348,7 @@ github.com/google/pprof v0.0.0-20230111200839-76d1ae5aea2b/go.mod h1:dDKJzRmX4S3 github.com/google/pprof v0.0.0-20230406165453-00490a63f317 h1:hFhpt7CTmR3DX+b4R19ydQFtofxT0Sv3QsKNMVQYTMQ= github.com/google/pprof v0.0.0-20230406165453-00490a63f317/go.mod h1:79YE0hCXdHag9sBkw2o+N/YnZtTkXi0UT9Nnixa5eYk= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= -github.com/google/s2a-go v0.1.3 h1:FAgZmpLl/SXurPEZyCMPBIiiYeTbqfjlbdnCNTAkbGE= +github.com/google/s2a-go v0.1.4 h1:1kZ/sQM3srePvKs3tXAvQzo66XfcReoqFpIpIccE7Oc= github.com/google/subcommands v1.0.1/go.mod h1:ZjhPrFU+Olkh9WazFPsl27BQ4UPiG37m3yTrtFlrHVk= github.com/google/subcommands v1.2.0 h1:vWQspBTo2nEqTUFita5/KeEWlUL8kQObDFbub/EN9oE= github.com/google/subcommands v1.2.0/go.mod h1:ZjhPrFU+Olkh9WazFPsl27BQ4UPiG37m3yTrtFlrHVk= @@ -1362,8 +1376,8 @@ github.com/googleapis/gax-go/v2 v2.4.0/go.mod h1:XOTVJ59hdnfJLIP/dh8n5CGryZR2LxK github.com/googleapis/gax-go/v2 v2.5.1/go.mod h1:h6B0KMMFNtI2ddbGJn3T3ZbwkeT6yqEF02fYlzkUCyo= github.com/googleapis/gax-go/v2 v2.6.0/go.mod h1:1mjbznJAPHFpesgE5ucqfYEscaz5kMdcIDwU/6+DDoY= github.com/googleapis/gax-go/v2 v2.7.0/go.mod h1:TEop28CZZQ2y+c0VxMUmu1lV+fQx57QpBWsYpwqHJx8= -github.com/googleapis/gax-go/v2 v2.8.0 h1:UBtEZqx1bjXtOQ5BVTkuYghXrr3N4V123VKJK67vJZc= -github.com/googleapis/gax-go/v2 v2.8.0/go.mod h1:4orTrqY6hXxxaUL4LHIPl6lGo8vAE38/qKbhSAKP6QI= +github.com/googleapis/gax-go/v2 v2.11.0 h1:9V9PWXEsWnPpQhu/PeQIkS4eGzMlTLGgt80cUUI8Ki4= +github.com/googleapis/gax-go/v2 v2.11.0/go.mod h1:DxmR61SGKkGLa2xigwuZIQpkCI2S5iydzRfb3peWZJI= github.com/googleapis/gnostic v0.4.1/go.mod h1:LRhVm6pbyptWbWbuZ38d1eyptfvIytN3ir6b65WBswg= github.com/googleapis/gnostic v0.5.1/go.mod h1:6U4PtQXGIEt/Z3h5MAT7FNofLnw9vXk2cUuW7uA/OeU= github.com/googleapis/gnostic v0.5.5/go.mod h1:7+EbHbldMins07ALC74bsA81Ovc97DwqyJO1AENw9kA= @@ -1373,6 +1387,8 @@ github.com/gophercloud/gophercloud v0.24.0/go.mod h1:Q8fZtyi5zZxPS/j9aj3sSxtvj41 github.com/gophercloud/gophercloud v1.1.1/go.mod h1:aAVqcocTSXh2vYFZ1JTvx4EQmfgzxRcNupUfxZbBNDM= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= +github.com/gorilla/css v1.0.0 h1:BQqNyPTi50JCFMTw/b67hByjMVXZRwGha6wxVGkeihY= +github.com/gorilla/css v1.0.0/go.mod h1:Dn721qIggHpt4+EFCcTLTU/vk5ySda2ReITrtgBl60c= github.com/gorilla/handlers v0.0.0-20150720190736-60c7bfde3e33/go.mod h1:Qkdc/uu4tH4g6mTK6auzZ766c4CA0Ng8+o/OAirnOIQ= github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= github.com/gorilla/mux v1.7.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= @@ -1463,6 +1479,8 @@ github.com/hashicorp/serf v0.10.1/go.mod h1:yL2t6BqATOLGc5HF7qbFkTfXoPIY0WZdWHfE github.com/hetznercloud/hcloud-go v1.33.1/go.mod h1:XX/TQub3ge0yWR2yHWmnDVIrB+MQbda1pHxkUmDlUME= github.com/hetznercloud/hcloud-go v1.39.0/go.mod h1:mepQwR6va27S3UQthaEPGS86jtzSY9xWL1e9dyxXpgA= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= +github.com/huandu/xstrings v1.3.3 h1:/Gcsuc1x8JVbJ9/rlye4xZnVAbEkGauT8lbebqcQws4= +github.com/huandu/xstrings v1.3.3/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE= github.com/hudl/fargo v1.4.0/go.mod h1:9Ai6uvFy5fQNq6VPKtg+Ceq1+eTY4nKUlR2JElEOcDo= github.com/iancoleman/orderedmap v0.0.0-20190318233801-ac98e3ecb4b0/go.mod h1:N0Wam8K1arqPXNWjMo21EXnBPOPp36vB07FNRdD2geA= github.com/iancoleman/orderedmap v0.2.0 h1:sq1N/TFpYH++aViPcaKjys3bDClUEU7s5B+z6jq8pNA= @@ -1526,8 +1544,9 @@ github.com/jackc/pgx/v4 v4.0.0-20190421002000-1b8f0016e912/go.mod h1:no/Y67Jkk/9 github.com/jackc/pgx/v4 v4.0.0-pre1.0.20190824185557-6972a5742186/go.mod h1:X+GQnOEnf1dqHGpw7JmHqHc1NxDoalibchSk9/RWuDc= github.com/jackc/pgx/v4 v4.12.1-0.20210724153913-640aa07df17c/go.mod h1:1QD0+tgSXP7iUjYm9C1NxKhny7lq6ee99u/z+IHFcgs= github.com/jackc/pgx/v4 v4.17.2/go.mod h1:lcxIZN44yMIrWI78a5CpucdD14hX0SBDbNRvjDBItsw= -github.com/jackc/pgx/v5 v5.3.0 h1:/NQi8KHMpKWHInxXesC8yD4DhkXPrVhmnwYkjp9AmBA= github.com/jackc/pgx/v5 v5.3.0/go.mod h1:t3JDKnCBlYIc0ewLF0Q7B8MXmoIaBOZj/ic7iHozM/8= +github.com/jackc/pgx/v5 v5.4.1 h1:oKfB/FhuVtit1bBM3zNRRsZ925ZkMN3HXL+LgLUM9lE= +github.com/jackc/pgx/v5 v5.4.1/go.mod h1:q6iHT8uDNXWiFNOlRqJzBTaSH3+2xCXkokxHZC5qWFY= github.com/jackc/puddle v0.0.0-20190413234325-e4ced69a3a2b/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= github.com/jackc/puddle v0.0.0-20190608224051-11cab39313c9/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= github.com/jackc/puddle v1.1.3/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= @@ -1620,6 +1639,8 @@ github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/kylelemons/godebug v0.0.0-20170820004349-d65d576e9348/go.mod h1:B69LEHPfb2qLo0BaaOLcbitczOKLWTsrBG9LczfCD4k= github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= +github.com/ledongthuc/pdf v0.0.0-20220302134840-0c2507a12d80 h1:6Yzfa6GP0rIo/kULo2bwGEkFvCePZ3qHDDTC3/J9Swo= +github.com/ledongthuc/pdf v0.0.0-20220302134840-0c2507a12d80/go.mod h1:imJHygn/1yfhB7XSJJKlFZKl/J+dCPAknuiaGOshXAs= github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII= github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= github.com/lib/pq v1.1.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= @@ -1631,6 +1652,8 @@ github.com/lib/pq v1.10.8/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/linode/linodego v1.4.0/go.mod h1:PVsRxSlOiJyvG4/scTszpmZDTdgS+to3X6eS8pRrWI8= github.com/linode/linodego v1.12.0/go.mod h1:NJlzvlNtdMRRkXb0oN6UWzUkj6t+IBsyveHgZ5Ppjyk= github.com/linuxkit/virtsock v0.0.0-20201010232012-f8cee7dfc7a3/go.mod h1:3r6x7q95whyfWQpmGZTu3gk3v2YkMi05HEzl7Tf7YEo= +github.com/lmittmann/tint v1.0.3 h1:W5PHeA2D8bBJVvabNfQD/XW9HPLZK1XoPZH0cq8NouQ= +github.com/lmittmann/tint v1.0.3/go.mod h1:HIS3gSy7qNwGCj+5oRjAutErFBl4BzdQP6cJZ0NfMwE= github.com/lyft/protoc-gen-star v0.6.0/go.mod h1:TGAoBVkt8w7MPG72TrKIu85MIdXwDuzJYeZuUPFPNwA= github.com/lyft/protoc-gen-star v0.6.1/go.mod h1:TGAoBVkt8w7MPG72TrKIu85MIdXwDuzJYeZuUPFPNwA= github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= @@ -1672,13 +1695,15 @@ github.com/mattn/go-shellwords v1.0.3/go.mod h1:3xCvwCdWdlDJUrvuMn7Wuy9eWs4pE8vq github.com/mattn/go-shellwords v1.0.6/go.mod h1:3xCvwCdWdlDJUrvuMn7Wuy9eWs4pE8vqg+NOMyg4B2o= github.com/mattn/go-shellwords v1.0.12/go.mod h1:EZzvwXDESEeg03EKmM+RmDnNOPKG4lLtQsUlTZDWQ8Y= github.com/mattn/go-sqlite3 v1.14.14/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU= -github.com/mattn/go-sqlite3 v1.14.16 h1:yOQRA0RpS5PFz/oikGwBEqvAWhWg5ufRz4ETLjwpU1Y= -github.com/mattn/go-sqlite3 v1.14.16/go.mod h1:2eHXhiwb8IkHr+BDWZGa96P6+rkvnG63S2DGjv9HUNg= +github.com/mattn/go-sqlite3 v1.14.17 h1:mCRHCLDUBXgpKAqIKsaAaAsrAlbkeomtRFKXh2L6YIM= +github.com/mattn/go-sqlite3 v1.14.17/go.mod h1:2eHXhiwb8IkHr+BDWZGa96P6+rkvnG63S2DGjv9HUNg= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= github.com/matttproud/golang_protobuf_extensions v1.0.2/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= github.com/maxbrunsfeld/counterfeiter/v6 v6.2.2/go.mod h1:eD9eIE7cdwcMi9rYluz88Jz2VyhSmden33/aXg4oVIY= +github.com/microcosm-cc/bluemonday v1.0.24 h1:NGQoPtwGVcbGkKfvyYk1yRqknzBuoMiUrO6R7uFTPlw= +github.com/microcosm-cc/bluemonday v1.0.24/go.mod h1:ArQySAMps0790cHSkdPEJ7bGkF2VePWH773hsJNSHf8= github.com/microsoft/ApplicationInsights-Go v0.4.4/go.mod h1:fKRUseBqkw6bDiXTs3ESTiU/4YTIHsQS4W3fP2ieF4U= github.com/microsoft/go-mssqldb v0.18.0/go.mod h1:ukJCBnnzLzpVF0qYRT+eg1e+eSwjeQ7IvenUv8QPook= github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= @@ -1695,6 +1720,8 @@ github.com/minio/highwayhash v1.0.2/go.mod h1:BQskDq+xkJ12lmlUUi7U0M5Swg3EWR+dLT github.com/mistifyio/go-zfs v2.1.2-0.20190413222219-f784269be439+incompatible/go.mod h1:8AuVvqP/mXw1px98n46wfvcGfQ4ci2FwoAjKYxuo3Z4= github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= github.com/mitchellh/cli v1.1.0/go.mod h1:xcISNoH86gajksDmfB23e/pu+B+GeFRMYmoHXxx3xhI= +github.com/mitchellh/copystructure v1.0.0 h1:Laisrj+bAB6b/yJwB5Bt3ITZhGJdqmxquMKeZ+mmkFQ= +github.com/mitchellh/copystructure v1.0.0/go.mod h1:SNtv71yrdKgLRyLFxmLdkAbkKEFWgYaq1OVrnRcwhnw= github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= @@ -1711,6 +1738,8 @@ github.com/mitchellh/mapstructure v1.4.2/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RR github.com/mitchellh/mapstructure v1.4.3/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/osext v0.0.0-20151018003038-5e2d6d41470f/go.mod h1:OkQIRizQZAeMln+1tSwduZz7+Af5oFlKirV/MSYes2A= +github.com/mitchellh/reflectwalk v1.0.0 h1:9D+8oIskB4VJBN5SFlmc27fSlIBZaov1Wpk/IfikLNY= +github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= github.com/moby/locker v1.0.1/go.mod h1:S7SDdo5zpBK84bzzVlKr2V0hz+7x9hWbYC/kq7oQppc= github.com/moby/spdystream v0.2.0/go.mod h1:f7i0iNDQJ059oMTcWxx8MA/zKFIuD/lY+0GqbN2Wy8c= github.com/moby/sys/mountinfo v0.4.0/go.mod h1:rEr8tzG/lsIZHBtN/JjGG+LMYx9eXgW2JI+6q0qou+A= @@ -1862,6 +1891,8 @@ github.com/pkg/profile v1.7.0 h1:hnbDkaNWPCLMO9wGLdBFTIZvzDrDfBM2072E1S9gJkA= github.com/pkg/profile v1.7.0/go.mod h1:8Uer0jas47ZQMJ7VD+OHknK4YDY07LPUC6dEvqDjvNo= github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI= github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg= +github.com/pkoukk/tiktoken-go v0.1.2 h1:u7PCSBiWJ3nJYoTGShyM9iHXz4dNyYkurwwp+GHtyHY= +github.com/pkoukk/tiktoken-go v0.1.2/go.mod h1:boMWvk9pQCOTx11pgu0DrIdrAKgQzzJKUP6vLXaz7Rw= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= @@ -1942,8 +1973,7 @@ github.com/rogpeppe/go-internal v1.2.2/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFR github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= -github.com/rogpeppe/go-internal v1.10.1-0.20230508101108-a4f6fabd84c5 h1:Tb1D114RozKzV2dDfarvSZn8lVYvjcGSCDaMQ+b4I+E= -github.com/rogpeppe/go-internal v1.10.1-0.20230508101108-a4f6fabd84c5/go.mod h1:ddIwULY96R17DhadqLgMfk9H9tvdUzkipdSkR5nkCZA= +github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M= github.com/rs/cors v1.8.2/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= github.com/rs/cors v1.8.3 h1:O+qNyWn7Z+F9M0ILBHgMVPuB1xTOucVd5gtaYyXBpRo= github.com/rs/cors v1.8.3/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= @@ -1965,8 +1995,6 @@ github.com/ryanuber/columnize v2.1.0+incompatible/go.mod h1:sm1tb6uqfes/u+d4ooFo github.com/safchain/ethtool v0.0.0-20190326074333-42ed695e3de8/go.mod h1:Z0q5wiBQGYcxhMZ6gUqHn6pYNLypFAvaL3UvgZLR0U4= github.com/safchain/ethtool v0.0.0-20210803160452-9aa261dae9b1/go.mod h1:Z0q5wiBQGYcxhMZ6gUqHn6pYNLypFAvaL3UvgZLR0U4= github.com/sagikazarmark/crypt v0.6.0/go.mod h1:U8+INwJo3nBv1m6A/8OBXAq7Jnpspk5AxSgDyEQcea8= -github.com/samber/go-gpt-3-encoder v0.3.1 h1:YWb9GsGYUgSX/wPtsEHjyNGRQXsQ9vDCg9SU2x9uMeU= -github.com/samber/go-gpt-3-encoder v0.3.1/go.mod h1:27nvdvk9ZtALyNtgs9JsPCMYja0Eleow/XzgjqwRtLU= github.com/samber/lo v1.38.1 h1:j2XEAqXKb09Am4ebOg31SpvzUTTs6EN3VfgeLUhPdXM= github.com/samber/lo v1.38.1/go.mod h1:+m/ZKRl6ClXCE2Lgf3MsQlWfh4bn1bz6CXEOxnEXnEA= github.com/sashabaranov/go-openai v1.12.0 h1:aRNHH0gtVfrpIaEolD0sWrLLRnYQNK4cH/bIAHwL8Rk= @@ -1981,6 +2009,7 @@ github.com/seccomp/libseccomp-golang v0.9.1/go.mod h1:GbW5+tmTXfcxTToHLXlScSlAvW github.com/seccomp/libseccomp-golang v0.9.2-0.20210429002308-3879420cc921/go.mod h1:JA8cRccbGaA1s33RQf7Y1+q9gHmZX1yB/z9WDN1C6fg= github.com/shoenig/test v0.6.0/go.mod h1:xYtyGBC5Q3kzCNyJg/SjgNpfAa2kvmgA0i5+lQso8x0= github.com/shopspring/decimal v0.0.0-20180709203117-cd690d0c9e24/go.mod h1:M+9NzErvs504Cn4c5DxATwIqPbtswREoFCre64PpcG4= +github.com/shopspring/decimal v1.2.0 h1:abSATXmQEYyShuxI4/vyW3tV1MrKAJzCZ/0zLUXYbsQ= github.com/shopspring/decimal v1.2.0/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o= github.com/shurcooL/httpfs v0.0.0-20190707220628-8d4bc4ba7749/go.mod h1:ZY1cvUeJuFPAdZ/B6v7RHavJWZn2YPVFQ1OSXhCGOkg= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= @@ -2011,6 +2040,7 @@ github.com/spf13/afero v1.8.2/go.mod h1:CtAatgMJh6bJEIs48Ay/FOnkljP3WeGUG0MC1RfA github.com/spf13/afero v1.9.2/go.mod h1:iUV7ddyEEZPO5gA3zD4fJt6iStLlL+Lg4m2cihcDf8Y= github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= +github.com/spf13/cast v1.5.0 h1:rj3WzYc11XZaIZMPKmwP96zkFEnnAmV8s6XbB2aY32w= github.com/spf13/cast v1.5.0/go.mod h1:SpXXQ5YoyJw6s3/6cMTQuxvgRl3PCJiyaX9p6b155UU= github.com/spf13/cobra v0.0.2-0.20171109065643-2da4a54c5cee/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= @@ -2072,6 +2102,8 @@ github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhV github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tmc/grpc-websocket-proxy v0.0.0-20201229170055-e5319fda7802/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= +github.com/tmc/langchaingo v0.0.0-20231205064123-af36340149bb h1:qVgSLBYPwA09W53X8OyLUJ0ijnN2qg+CMOk5Sow5NZY= +github.com/tmc/langchaingo v0.0.0-20231205064123-af36340149bb/go.mod h1:WgJkGMb5Ac/WpD6YLo3zRAiHtALrgGnH42Hcu5Rs4/A= github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= github.com/tv42/httpunix v0.0.0-20191220191345-2ba4b9c3382c/go.mod h1:hzIxponao9Kjc7aWznkXaL4U4TWaDSs8zcsY4Ka08nM= github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= @@ -2127,6 +2159,18 @@ github.com/yvasiyarov/newrelic_platform_go v0.0.0-20140908184405-b21fdbd4370f/go github.com/zeebo/assert v1.3.0/go.mod h1:Pq9JiuJQpG8JLJdtkwrJESF0Foym2/D9XMU5ciN/wJ0= github.com/zeebo/xxh3 v1.0.2/go.mod h1:5NWz9Sef7zIDm2JHfFlcQvNekmcEl9ekUZQQKCYaDcA= github.com/zenazn/goji v0.9.0/go.mod h1:7S9M489iMyHBNxwZnk9/EHS098H4/F6TATF2mIxtB1Q= +gitlab.com/golang-commonmark/html v0.0.0-20191124015941-a22733972181 h1:K+bMSIx9A7mLES1rtG+qKduLIXq40DAzYHtb0XuCukA= +gitlab.com/golang-commonmark/html v0.0.0-20191124015941-a22733972181/go.mod h1:dzYhVIwWCtzPAa4QP98wfB9+mzt33MSmM8wsKiMi2ow= +gitlab.com/golang-commonmark/linkify v0.0.0-20191026162114-a0c2df6c8f82 h1:oYrL81N608MLZhma3ruL8qTM4xcpYECGut8KSxRY59g= +gitlab.com/golang-commonmark/linkify v0.0.0-20191026162114-a0c2df6c8f82/go.mod h1:Gn+LZmCrhPECMD3SOKlE+BOHwhOYD9j7WT9NUtkCrC8= +gitlab.com/golang-commonmark/markdown v0.0.0-20211110145824-bf3e522c626a h1:O85GKETcmnCNAfv4Aym9tepU8OE0NmcZNqPlXcsBKBs= +gitlab.com/golang-commonmark/markdown v0.0.0-20211110145824-bf3e522c626a/go.mod h1:LaSIs30YPGs1H5jwGgPhLzc8vkNc/k0rDX/fEZqiU/M= +gitlab.com/golang-commonmark/mdurl v0.0.0-20191124015652-932350d1cb84 h1:qqjvoVXdWIcZCLPMlzgA7P9FZWdPGPvP/l3ef8GzV6o= +gitlab.com/golang-commonmark/mdurl v0.0.0-20191124015652-932350d1cb84/go.mod h1:IJZ+fdMvbW2qW6htJx7sLJ04FEs4Ldl/MDsJtMKywfw= +gitlab.com/golang-commonmark/puny v0.0.0-20191124015043-9f83538fa04f h1:Wku8eEdeJqIOFHtrfkYUByc4bCaTeA6fL0UJgfEiFMI= +gitlab.com/golang-commonmark/puny v0.0.0-20191124015043-9f83538fa04f/go.mod h1:Tiuhl+njh/JIg0uS/sOJVYi0x2HEa5rc1OAaVsb5tAs= +gitlab.com/opennota/wd v0.0.0-20180912061657-c5d65f63c638 h1:uPZaMiz6Sz0PZs3IZJWpU5qHKGNy///1pacZC9txiUI= +gitlab.com/opennota/wd v0.0.0-20180912061657-c5d65f63c638/go.mod h1:EGRJaqe2eO9XGmFtQCvV3Lm9NLico3UhFwUpCG/+mVU= go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/bbolt v1.3.5/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ= @@ -2212,6 +2256,8 @@ go.opentelemetry.io/proto/otlp v0.11.0/go.mod h1:QpEjXPrNQzrFDZgoTo49dgHR9RYRSrg go.opentelemetry.io/proto/otlp v0.12.1/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U= go.opentelemetry.io/proto/otlp v0.15.0/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U= go.opentelemetry.io/proto/otlp v0.19.0/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U= +go.starlark.net v0.0.0-20230302034142-4b1e35fe2254 h1:Ss6D3hLXTM0KobyBYEAygXzFfGcjnmfEJOBgSbemCtg= +go.starlark.net v0.0.0-20230302034142-4b1e35fe2254/go.mod h1:jxU+3+j+71eXOW14274+SmmuW82qJzl6iZSeqEtTGds= go.temporal.io/api v1.19.1-0.20230322213042-07fb271d475b h1:6LMc1mbCTwQ1X8a28h9Npn3XBH40mY3YXeDGg/LVhE8= go.temporal.io/api v1.19.1-0.20230322213042-07fb271d475b/go.mod h1:PLQJqp1YZZikmtGm9jIbzWpP3p6zS39WQjhsO/Hiw30= go.temporal.io/sdk v1.22.1 h1:OawvkfZBy22H1W8A+9QQPhwlRLMFIGtmJQXpWaPHpeg= @@ -2294,9 +2340,10 @@ golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0 golang.org/x/crypto v0.0.0-20220829220503-c86fa9a7ed90/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20221012134737-56aed061732a/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw= +golang.org/x/crypto v0.3.0/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58= -golang.org/x/crypto v0.10.0 h1:LKqV2xt9+kDzSTfOhx4FrkEBcMrAgHSYgzywV9zcGmM= -golang.org/x/crypto v0.10.0/go.mod h1:o4eNf7Ede1fv+hwOwZsTHl9EsPFO6q6ZvYR8vYfY45I= +golang.org/x/crypto v0.14.0 h1:wBqGXzWJW6m1XrIKlAH0Hs1JJ7+9KBwnIO8v66Q9cHc= +golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4= golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= @@ -2425,6 +2472,7 @@ golang.org/x/net v0.0.0-20210726213435-c6fcb2dbf985/go.mod h1:9nx3DQGgdP8bBQD5qx golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210813160813-60bc85c4be6d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210825183410-e898025ed96a/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20210916014120-12bc252f5db8/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210917221730-978cfadd31cf/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= @@ -2454,8 +2502,8 @@ golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws= golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= -golang.org/x/net v0.11.0 h1:Gi2tvZIJyBtO9SDr1q9h5hEQCp/4L2RQ+ar0qjx2oNU= -golang.org/x/net v0.11.0/go.mod h1:2L/ixqYpgIVXmeoSA/4Lu7BzTG4KIyPIryS4IsOd1oQ= +golang.org/x/net v0.17.0 h1:pVaXccu2ozPjCXewfr1S7xza/zcXTity9cCdXQYSjIM= +golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -2487,8 +2535,8 @@ golang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783/go.mod h1:h4gKUeWbJ4rQPri golang.org/x/oauth2 v0.3.0/go.mod h1:rQrIauxkUhJ6CuwEXwymO2/eh4xz2ZWF1nBkcxS+tGk= golang.org/x/oauth2 v0.4.0/go.mod h1:RznEsdpjGAINPTOF0UH/t+xJ75L18YO3Ho6Pyn+uRec= golang.org/x/oauth2 v0.5.0/go.mod h1:9/XBHVqLaWO3/BRHs5jbpYCnOZVjj5V0ndyaAM7KB4I= -golang.org/x/oauth2 v0.7.0 h1:qe6s0zUXlPX80/dITx3440hWZ7GwMwgDDyrSGTPJG/g= -golang.org/x/oauth2 v0.7.0/go.mod h1:hPLQkd9LyjfXTiRohC/41GhcFqxisoUQ99sCUOHO9x4= +golang.org/x/oauth2 v0.10.0 h1:zHCpF2Khkwy4mMB4bv0U37YtJdTGW8jI0glAApi0Kh8= +golang.org/x/oauth2 v0.10.0/go.mod h1:kTpgurOux7LqtuxjuyZa4Gj2gdezIt/jQtGnNFfypQI= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -2664,21 +2712,23 @@ golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.10.0 h1:SqMFp9UcQJZa+pmYuAKjd9xq1f0j5rLcDIk0mj4qAsA= golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.13.0 h1:Af8nKPmuFypiUBjVoU9V20FiaFXOcuZI21p0ycVYYGE= +golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210220032956-6a3ed077a48d/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210615171337-6886f2dfbf5b/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.0.0-20220526004731-065cf7ba2467/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= golang.org/x/term v0.3.0/go.mod h1:q750SLmJuPmVoN1blW3UFBPREJfb1KmY3vwxfr+nFDA= golang.org/x/term v0.4.0/go.mod h1:9P2UbLfCdcvo3p/nzKvsmas4TnlujnuoV9hGgYzW1lQ= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= -golang.org/x/term v0.9.0 h1:GRRCnKYhdQrD8kfRAdQ6Zcw1P0OcELxGLKJvtjVMZ28= -golang.org/x/term v0.9.0/go.mod h1:M6DEAAIenWoTxdKrOltXcmDY3rSplQUkrvaDU5FcQyo= +golang.org/x/term v0.13.0 h1:bb+I9cTfFazGW51MZqBVmZy7+JEJMouUHTUSKVQLBek= +golang.org/x/term v0.13.0/go.mod h1:LTmsnFJwVN6bCy1rVCoS+qHT1HhALEFxKncY3WNNh4U= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -2694,8 +2744,8 @@ golang.org/x/text v0.5.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= -golang.org/x/text v0.10.0 h1:UpjohKhiEgNc0CSauXmwYftY1+LlaC75SJwh0SgCX58= -golang.org/x/text v0.10.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k= +golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -2884,8 +2934,8 @@ google.golang.org/api v0.106.0/go.mod h1:2Ts0XTHNVWxypznxWOYUeI4g3WdP9Pk2Qk58+a/ google.golang.org/api v0.107.0/go.mod h1:2Ts0XTHNVWxypznxWOYUeI4g3WdP9Pk2Qk58+a/O9MY= google.golang.org/api v0.108.0/go.mod h1:2Ts0XTHNVWxypznxWOYUeI4g3WdP9Pk2Qk58+a/O9MY= google.golang.org/api v0.110.0/go.mod h1:7FC4Vvx1Mooxh8C5HWjzZHcavuS2f6pmJpZx60ca7iI= -google.golang.org/api v0.123.0 h1:yHVU//vA+qkOhm4reEC9LtzHVUCN/IqqNRl1iQ9xE20= -google.golang.org/api v0.123.0/go.mod h1:gcitW0lvnyWjSp9nKxAbdHKIZ6vF4aajGueeslZOyms= +google.golang.org/api v0.126.0 h1:q4GJq+cAdMAC7XP7njvQ4tvohGLiSlytuL4BQxbIZ+o= +google.golang.org/api v0.126.0/go.mod h1:mBwVAtz+87bEN6CbA1GtZPDOqY2R5ONPqJeIlvyo4Aw= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= @@ -3039,8 +3089,10 @@ google.golang.org/genproto v0.0.0-20230209215440-0dfe4f8abfcc/go.mod h1:RGgjbofJ google.golang.org/genproto v0.0.0-20230216225411-c8e22ba71e44/go.mod h1:8B0gmkoRebU8ukX6HP+4wrVQUY1+6PkQ44BSyIlflHA= google.golang.org/genproto v0.0.0-20230222225845-10f96fb3dbec/go.mod h1:3Dl5ZL0q0isWJt+FVcfpQyirqemEuLAK/iFvg1UP1Hw= google.golang.org/genproto v0.0.0-20230322174352-cde4c949918d/go.mod h1:NWraEVixdDnqcqQ30jipen1STv2r/n24Wb7twVTGR4s= -google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1 h1:KpwkzHKEF7B9Zxg18WzOa7djJ+Ha5DzthMyZYQfEn2A= -google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1/go.mod h1:nKE/iIaLqn2bQwXBg8f1g2Ylh6r5MN5CmZvuzZCgsCU= +google.golang.org/genproto v0.0.0-20230530153820-e85fd2cbaebc h1:8DyZCyvI8mE1IdLy/60bS+52xfymkE72wv1asokgtao= +google.golang.org/genproto/googleapis/api v0.0.0-20230530153820-e85fd2cbaebc h1:kVKPf/IiYSBWEWtkIn6wZXwWGCnLKcC8oWfZvXjsGnM= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230530153820-e85fd2cbaebc h1:XSJ8Vk1SWuNr8S18z1NZSziL0CPIXLCCMDOEFtHBOFc= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230530153820-e85fd2cbaebc/go.mod h1:66JfowdXAEgad5O9NnYcsNPLCPZJD++2L9X0PCMODrA= google.golang.org/grpc v0.0.0-20160317175043-d3ddb4469d5a/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= google.golang.org/grpc v1.12.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= @@ -3086,8 +3138,9 @@ google.golang.org/grpc v1.50.1/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCD google.golang.org/grpc v1.51.0/go.mod h1:wgNDFcnuBGmxLKI/qn4T+m5BtEBYXJPvibbUPsAIPww= google.golang.org/grpc v1.52.1/go.mod h1:pu6fVzoFb+NBYNAvQL08ic+lvB2IojljRYuun5vorUY= google.golang.org/grpc v1.53.0/go.mod h1:OnIrk0ipVdj4N5d9IUoFUx72/VlD7+jUsHwZgwSMQpw= -google.golang.org/grpc v1.54.0 h1:EhTqbhiYeixwWQtAEZAxmV9MGqcjEU2mFx52xCzNyag= google.golang.org/grpc v1.54.0/go.mod h1:PUSEXI6iWghWaB6lXM4knEgpJNu2qUcKfDtNci3EC2g= +google.golang.org/grpc v1.57.1 h1:upNTNqv0ES+2ZOOqACwVtS3Il8M12/+Hz41RCPzAjQg= +google.golang.org/grpc v1.57.1/go.mod h1:Sd+9RMTACXwmub0zcNY2c4arhtrbBYD1AUHI/dt16Mo= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= diff --git a/main.go b/main.go index fee7f3b..3e99186 100644 --- a/main.go +++ b/main.go @@ -2,6 +2,7 @@ package main //go:generate npx buf generate proto //go:generate go run github.com/google/wire/cmd/wire ./... +//go:generate protoc --jsonschema_out=pkg/llm/schemas --proto_path=proto proto/generate.proto proto/ai.proto import ( "encoding/gob" diff --git a/package-lock.json b/package-lock.json index 3dd3e1d..edb6ddf 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,15 +10,19 @@ "dependencies": { "@bufbuild/connect": "^0.8.6", "@bufbuild/connect-web": "^0.8.6", - "@fluentui/react": "^8.110.7", - "@fluentui/react-components": "^9.19.1", + "@fluentui/react": "^8.112.9", + "@fluentui/react-components": "^9.36.0", + "@tailwindcss/typography": "^0.5.10", "@types/node": "18.16.0", "@types/react": "18.0.38", "@types/react-dom": "18.0.11", "@types/react-syntax-highlighter": "^15.5.6", + "@types/vscode": "^1.85.0", "bootstrap": "^5.3.0", "d3-hierarchy": "^3.1.2", + "daisyui": "^4.4.20", "esbuild-plugin-swc": "^1.0.1", + "esbuild-sass-plugin": "^2.16.0", "esbuild-style-plugin": "^1.6.1", "eslint": "8.39.0", "framer-motion": "^10.12.4", @@ -41,23 +45,22 @@ }, "devDependencies": { "@bufbuild/buf": "^1.23.1", - "@bufbuild/connect": "^0.11.0", - "@bufbuild/connect-web": "^0.11.0", - "@bufbuild/protobuf": "^1.2.1", - "@bufbuild/protoc-gen-connect-es": "^0.11.0", - "@bufbuild/protoc-gen-es": "^1.2.1", + "@bufbuild/connect": "^0.13.0", + "@bufbuild/connect-web": "^0.13.0", + "@bufbuild/protobuf": "^1.5.1", + "@bufbuild/protoc-gen-connect-es": "^0.13.0", + "@bufbuild/protoc-gen-es": "^1.5.1", "@esbuild-plugins/node-modules-polyfill": "^0.2.2", "@grpc/grpc-js": "^1.8.14", "@types/uuid": "^9.0.1", "autoprefixer": "^10.4.14", "csstype": "^3.0.10", - "esbuild": "^0.17.18", - "esbuild-sass-plugin": "^2.9.0", + "esbuild": "^0.19.5", "google-protobuf": "^3.13.0", "postcss": "^8.4.23", "protoc-gen-ts": "^0.8.6", "source-map-support": "^0.5.21", - "tailwindcss": "^3.3.1", + "tailwindcss": "^3.4.0", "ts-proto": "^1.146.0", "typescript": "4.x.x", "uuid": "^9.0.0" @@ -67,7 +70,6 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", - "dev": true, "engines": { "node": ">=10" }, @@ -206,36 +208,39 @@ } }, "node_modules/@bufbuild/connect": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@bufbuild/connect/-/connect-0.11.0.tgz", - "integrity": "sha512-a6hrNtBzDzj4hpqylPqpJfMpIP4+O/SnszGgOuRzcuifpTvkwjSmVHLtcvkUYh0wpvjYB0CFmTYzrvAMOftbHw==", + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@bufbuild/connect/-/connect-0.13.0.tgz", + "integrity": "sha512-eZSMbVLyUFtXiZNORgCEvv580xKZeYQdMOWj2i/nxOcpXQcrEzTMTA7SZzWv4k4gveWCOSRoWmYDeOhfWXJv0g==", + "deprecated": "Connect has moved to its own org @connectrpc and has a stable v1. Run `npx @connectrpc/connect-migrate@latest` to update. See https://github.com/connectrpc/connect-es/releases/tag/v0.13.1 for details.", "dev": true, "peerDependencies": { "@bufbuild/protobuf": "^1.2.1" } }, "node_modules/@bufbuild/connect-web": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@bufbuild/connect-web/-/connect-web-0.11.0.tgz", - "integrity": "sha512-H0tSsn7dMJY5EQNHoQyE/TXmmRtJ6GauRl9RWk4GncQCXulo5ab5yn8cEtu7UKnPCvF7nYbK1ESE0vHi5Y2xaw==", + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@bufbuild/connect-web/-/connect-web-0.13.0.tgz", + "integrity": "sha512-Ys9VFDWYktD9yFQSLOlkpsD42LonDNMCysLCfjXFuxlupYuf4f7qg0zkT5bESyTfqk4xtRDSSGR3xygaj/ONIQ==", + "deprecated": "Connect has moved to its own org @connectrpc and has a stable v1. Run `npx @connectrpc/connect-migrate@latest` to update. See https://github.com/connectrpc/connect-es/releases/tag/v0.13.1 for details.", "dev": true, "dependencies": { - "@bufbuild/connect": "0.11.0" + "@bufbuild/connect": "0.13.0" }, "peerDependencies": { "@bufbuild/protobuf": "^1.2.1" } }, "node_modules/@bufbuild/protobuf": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@bufbuild/protobuf/-/protobuf-1.2.1.tgz", - "integrity": "sha512-cwwGvLGqvoaOZmoP5+i4v/rbW+rHkguvTehuZyM2p/xpmaNSdT2h3B7kHw33aiffv35t1XrYHIkdJSEkSEMJuA==", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/@bufbuild/protobuf/-/protobuf-1.5.1.tgz", + "integrity": "sha512-LX+MeB1AzlbqgJXkq83lilQpLGnPvsAMj7SH8KtJAmQfBc55ee78Stxuff/HMw0xLMYJN3P1FBh5TENgjJof1w==", "dev": true }, "node_modules/@bufbuild/protoc-gen-connect-es": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@bufbuild/protoc-gen-connect-es/-/protoc-gen-connect-es-0.11.0.tgz", - "integrity": "sha512-yuEwf4e2+1e2OlQfw5kr5yfdvoe2+obyHzfeI/RP7/loDzpl8ZVfSNDsdrnpWaYYCXIotEax3rpYm3yG4637rw==", + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@bufbuild/protoc-gen-connect-es/-/protoc-gen-connect-es-0.13.0.tgz", + "integrity": "sha512-4HbxWQ799ZLszJJIJsuVMFwkBx8DJ4VEhNDNtKpPJFsTdVUOp1LyFGY66Yjfj9vcuOeH44bS0ALE5pRP3rCxXA==", + "deprecated": "Connect has moved to its own org @connectrpc and has a stable v1. Run `npx @connectrpc/connect-migrate@latest` to update. See https://github.com/connectrpc/connect-es/releases/tag/v0.13.1 for details.", "dev": true, "dependencies": { "@bufbuild/protobuf": "^1.2.1", @@ -248,7 +253,7 @@ "node": ">=16.0.0" }, "peerDependencies": { - "@bufbuild/connect": "0.11.0", + "@bufbuild/connect": "0.13.0", "@bufbuild/protoc-gen-es": "^1.2.1" }, "peerDependenciesMeta": { @@ -261,12 +266,13 @@ } }, "node_modules/@bufbuild/protoc-gen-es": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@bufbuild/protoc-gen-es/-/protoc-gen-es-1.2.1.tgz", - "integrity": "sha512-Nfg4ZTYciAgzqrbuGtRHR2TV4tueP10cRSD/joe57EeT0hfiXT0oQzH4OO3CzqqZvMxfkxpO4jgJgtwdQd941g==", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/@bufbuild/protoc-gen-es/-/protoc-gen-es-1.5.1.tgz", + "integrity": "sha512-o4NNOf49QEjowhpQxm3fq/yv+LstO9aMmNlEE3fz4WlD5fBE8OZ7q38O+WMUVoB4Y41joxk24v7IIm61trwRyg==", "dev": true, "dependencies": { - "@bufbuild/protoplugin": "1.2.1" + "@bufbuild/protobuf": "^1.5.1", + "@bufbuild/protoplugin": "1.5.1" }, "bin": { "protoc-gen-es": "bin/protoc-gen-es" @@ -275,7 +281,7 @@ "node": ">=14" }, "peerDependencies": { - "@bufbuild/protobuf": "1.2.1" + "@bufbuild/protobuf": "1.5.1" }, "peerDependenciesMeta": { "@bufbuild/protobuf": { @@ -284,12 +290,12 @@ } }, "node_modules/@bufbuild/protoplugin": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@bufbuild/protoplugin/-/protoplugin-1.2.1.tgz", - "integrity": "sha512-7VtPgJGXcOszidMpQRQK9wm8QlKqC80Uc5XR9+Ej+DN4Ur64dAW1djZ7kLZ3ij6Z9IY4FteGQT+ubUNxzcW2NA==", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/@bufbuild/protoplugin/-/protoplugin-1.5.1.tgz", + "integrity": "sha512-4qQD3UIEXflPYCEPZxyvi9yoQiX3ONWgLw24uLJrw9AnbY7Pw1xT5v8yIMXIVccBEZNSpvIF6qD/JXfIapjRtw==", "dev": true, "dependencies": { - "@bufbuild/protobuf": "1.2.1", + "@bufbuild/protobuf": "1.5.1", "@typescript/vfs": "^1.4.0", "typescript": "4.5.2" } @@ -341,13 +347,12 @@ } }, "node_modules/@esbuild/android-arm": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.19.tgz", - "integrity": "sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==", + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.5.tgz", + "integrity": "sha512-bhvbzWFF3CwMs5tbjf3ObfGqbl/17ict2/uwOSfr3wmxDE6VdS2GqY/FuzIPe0q0bdhj65zQsvqfArI9MY6+AA==", "cpu": [ "arm" ], - "dev": true, "optional": true, "os": [ "android" @@ -357,13 +362,12 @@ } }, "node_modules/@esbuild/android-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz", - "integrity": "sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==", + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.5.tgz", + "integrity": "sha512-5d1OkoJxnYQfmC+Zd8NBFjkhyCNYwM4n9ODrycTFY6Jk1IGiZ+tjVJDDSwDt77nK+tfpGP4T50iMtVi4dEGzhQ==", "cpu": [ "arm64" ], - "dev": true, "optional": true, "os": [ "android" @@ -373,13 +377,12 @@ } }, "node_modules/@esbuild/android-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.19.tgz", - "integrity": "sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==", + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.5.tgz", + "integrity": "sha512-9t+28jHGL7uBdkBjL90QFxe7DVA+KGqWlHCF8ChTKyaKO//VLuoBricQCgwhOjA1/qOczsw843Fy4cbs4H3DVA==", "cpu": [ "x64" ], - "dev": true, "optional": true, "os": [ "android" @@ -389,13 +392,12 @@ } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz", - "integrity": "sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==", + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.5.tgz", + "integrity": "sha512-mvXGcKqqIqyKoxq26qEDPHJuBYUA5KizJncKOAf9eJQez+L9O+KfvNFu6nl7SCZ/gFb2QPaRqqmG0doSWlgkqw==", "cpu": [ "arm64" ], - "dev": true, "optional": true, "os": [ "darwin" @@ -405,13 +407,12 @@ } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz", - "integrity": "sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==", + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.5.tgz", + "integrity": "sha512-Ly8cn6fGLNet19s0X4unjcniX24I0RqjPv+kurpXabZYSXGM4Pwpmf85WHJN3lAgB8GSth7s5A0r856S+4DyiA==", "cpu": [ "x64" ], - "dev": true, "optional": true, "os": [ "darwin" @@ -421,13 +422,12 @@ } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz", - "integrity": "sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==", + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.5.tgz", + "integrity": "sha512-GGDNnPWTmWE+DMchq1W8Sd0mUkL+APvJg3b11klSGUDvRXh70JqLAO56tubmq1s2cgpVCSKYywEiKBfju8JztQ==", "cpu": [ "arm64" ], - "dev": true, "optional": true, "os": [ "freebsd" @@ -437,13 +437,12 @@ } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz", - "integrity": "sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==", + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.5.tgz", + "integrity": "sha512-1CCwDHnSSoA0HNwdfoNY0jLfJpd7ygaLAp5EHFos3VWJCRX9DMwWODf96s9TSse39Br7oOTLryRVmBoFwXbuuQ==", "cpu": [ "x64" ], - "dev": true, "optional": true, "os": [ "freebsd" @@ -453,13 +452,12 @@ } }, "node_modules/@esbuild/linux-arm": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz", - "integrity": "sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==", + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.5.tgz", + "integrity": "sha512-lrWXLY/vJBzCPC51QN0HM71uWgIEpGSjSZZADQhq7DKhPcI6NH1IdzjfHkDQws2oNpJKpR13kv7/pFHBbDQDwQ==", "cpu": [ "arm" ], - "dev": true, "optional": true, "os": [ "linux" @@ -469,13 +467,12 @@ } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz", - "integrity": "sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==", + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.5.tgz", + "integrity": "sha512-o3vYippBmSrjjQUCEEiTZ2l+4yC0pVJD/Dl57WfPwwlvFkrxoSO7rmBZFii6kQB3Wrn/6GwJUPLU5t52eq2meA==", "cpu": [ "arm64" ], - "dev": true, "optional": true, "os": [ "linux" @@ -485,13 +482,12 @@ } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz", - "integrity": "sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==", + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.5.tgz", + "integrity": "sha512-MkjHXS03AXAkNp1KKkhSKPOCYztRtK+KXDNkBa6P78F8Bw0ynknCSClO/ztGszILZtyO/lVKpa7MolbBZ6oJtQ==", "cpu": [ "ia32" ], - "dev": true, "optional": true, "os": [ "linux" @@ -501,13 +497,12 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz", - "integrity": "sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==", + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.5.tgz", + "integrity": "sha512-42GwZMm5oYOD/JHqHska3Jg0r+XFb/fdZRX+WjADm3nLWLcIsN27YKtqxzQmGNJgu0AyXg4HtcSK9HuOk3v1Dw==", "cpu": [ "loong64" ], - "dev": true, "optional": true, "os": [ "linux" @@ -517,13 +512,12 @@ } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz", - "integrity": "sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==", + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.5.tgz", + "integrity": "sha512-kcjndCSMitUuPJobWCnwQ9lLjiLZUR3QLQmlgaBfMX23UEa7ZOrtufnRds+6WZtIS9HdTXqND4yH8NLoVVIkcg==", "cpu": [ "mips64el" ], - "dev": true, "optional": true, "os": [ "linux" @@ -533,13 +527,12 @@ } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz", - "integrity": "sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==", + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.5.tgz", + "integrity": "sha512-yJAxJfHVm0ZbsiljbtFFP1BQKLc8kUF6+17tjQ78QjqjAQDnhULWiTA6u0FCDmYT1oOKS9PzZ2z0aBI+Mcyj7Q==", "cpu": [ "ppc64" ], - "dev": true, "optional": true, "os": [ "linux" @@ -549,13 +542,12 @@ } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz", - "integrity": "sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==", + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.5.tgz", + "integrity": "sha512-5u8cIR/t3gaD6ad3wNt1MNRstAZO+aNyBxu2We8X31bA8XUNyamTVQwLDA1SLoPCUehNCymhBhK3Qim1433Zag==", "cpu": [ "riscv64" ], - "dev": true, "optional": true, "os": [ "linux" @@ -565,13 +557,12 @@ } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz", - "integrity": "sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==", + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.5.tgz", + "integrity": "sha512-Z6JrMyEw/EmZBD/OFEFpb+gao9xJ59ATsoTNlj39jVBbXqoZm4Xntu6wVmGPB/OATi1uk/DB+yeDPv2E8PqZGw==", "cpu": [ "s390x" ], - "dev": true, "optional": true, "os": [ "linux" @@ -581,13 +572,12 @@ } }, "node_modules/@esbuild/linux-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz", - "integrity": "sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==", + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.5.tgz", + "integrity": "sha512-psagl+2RlK1z8zWZOmVdImisMtrUxvwereIdyJTmtmHahJTKb64pAcqoPlx6CewPdvGvUKe2Jw+0Z/0qhSbG1A==", "cpu": [ "x64" ], - "dev": true, "optional": true, "os": [ "linux" @@ -597,13 +587,12 @@ } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz", - "integrity": "sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==", + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.5.tgz", + "integrity": "sha512-kL2l+xScnAy/E/3119OggX8SrWyBEcqAh8aOY1gr4gPvw76la2GlD4Ymf832UCVbmuWeTf2adkZDK+h0Z/fB4g==", "cpu": [ "x64" ], - "dev": true, "optional": true, "os": [ "netbsd" @@ -613,13 +602,12 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz", - "integrity": "sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==", + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.5.tgz", + "integrity": "sha512-sPOfhtzFufQfTBgRnE1DIJjzsXukKSvZxloZbkJDG383q0awVAq600pc1nfqBcl0ice/WN9p4qLc39WhBShRTA==", "cpu": [ "x64" ], - "dev": true, "optional": true, "os": [ "openbsd" @@ -629,13 +617,12 @@ } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz", - "integrity": "sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==", + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.5.tgz", + "integrity": "sha512-dGZkBXaafuKLpDSjKcB0ax0FL36YXCvJNnztjKV+6CO82tTYVDSH2lifitJ29jxRMoUhgkg9a+VA/B03WK5lcg==", "cpu": [ "x64" ], - "dev": true, "optional": true, "os": [ "sunos" @@ -645,13 +632,12 @@ } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz", - "integrity": "sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==", + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.5.tgz", + "integrity": "sha512-dWVjD9y03ilhdRQ6Xig1NWNgfLtf2o/STKTS+eZuF90fI2BhbwD6WlaiCGKptlqXlURVB5AUOxUj09LuwKGDTg==", "cpu": [ "arm64" ], - "dev": true, "optional": true, "os": [ "win32" @@ -661,13 +647,12 @@ } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz", - "integrity": "sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==", + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.5.tgz", + "integrity": "sha512-4liggWIA4oDgUxqpZwrDhmEfAH4d0iljanDOK7AnVU89T6CzHon/ony8C5LeOdfgx60x5cnQJFZwEydVlYx4iw==", "cpu": [ "ia32" ], - "dev": true, "optional": true, "os": [ "win32" @@ -677,13 +662,12 @@ } }, "node_modules/@esbuild/win32-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz", - "integrity": "sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==", + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.5.tgz", + "integrity": "sha512-czTrygUsB/jlM8qEW5MD8bgYU2Xg14lo6kBDXW6HdxKjh8M5PzETGiSHaz9MtbXBYDloHNUAUW2tMiKW4KM9Mw==", "cpu": [ "x64" ], - "dev": true, "optional": true, "os": [ "win32" @@ -745,56 +729,65 @@ } }, "node_modules/@floating-ui/core": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.3.0.tgz", - "integrity": "sha512-vX1WVAdPjZg9DkDkC+zEx/tKtnST6/qcNpwcjeBgco3XRNHz5PUA+ivi/yr6G3o0kMR60uKBJcfOdfzOFI7PMQ==" + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.5.0.tgz", + "integrity": "sha512-kK1h4m36DQ0UHGj5Ah4db7R0rHemTqqO0QLvUqi1/mUUp3LuAWbWxdxSIf/XsnH9VS6rRVPLJCncjRzUvyCLXg==", + "dependencies": { + "@floating-ui/utils": "^0.1.3" + } }, "node_modules/@floating-ui/dom": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.3.0.tgz", - "integrity": "sha512-qIAwejE3r6NeA107u4ELDKkH8+VtgRKdXqtSPaKflL2S2V+doyN+Wt9s5oHKXPDo4E8TaVXaHT3+6BbagH31xw==", + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.5.3.tgz", + "integrity": "sha512-ClAbQnEqJAKCJOEbbLo5IUlZHkNszqhuxS4fHAVxRPXPya6Ysf2G8KypnYcOTpx6I8xcgF9bbHb6g/2KpbV8qA==", "dependencies": { - "@floating-ui/core": "^1.3.0" + "@floating-ui/core": "^1.4.2", + "@floating-ui/utils": "^0.1.3" } }, + "node_modules/@floating-ui/utils": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.1.6.tgz", + "integrity": "sha512-OfX7E2oUDYxtBvsuS4e/jSn4Q9Qb6DzgeYtsAdkPZ47znpoNsMgZw0+tVijiv3uGNR6dgNlty6r9rzIzHjtd/A==" + }, "node_modules/@fluentui/date-time-utilities": { - "version": "8.5.13", - "resolved": "https://registry.npmjs.org/@fluentui/date-time-utilities/-/date-time-utilities-8.5.13.tgz", - "integrity": "sha512-X3clbPKh0URkDj21QoARw6SNec7dWg7Gt7SkTlkVYFzmZUdC4ZIrYk3n36xKe3U1wcGp26EVmKjhAhB262ugpw==", + "version": "8.5.14", + "resolved": "https://registry.npmjs.org/@fluentui/date-time-utilities/-/date-time-utilities-8.5.14.tgz", + "integrity": "sha512-Kc64ZBj0WiaSW/Bsh4fMy9oM2FIk1TgIqBV6+OgOtdKx9cXwLdmgGk8zuQTcuRnwv5WCk2M6wvW1M+eK3sNRGA==", "dependencies": { - "@fluentui/set-version": "^8.2.11", + "@fluentui/set-version": "^8.2.12", "tslib": "^2.1.0" } }, "node_modules/@fluentui/dom-utilities": { - "version": "2.2.11", - "resolved": "https://registry.npmjs.org/@fluentui/dom-utilities/-/dom-utilities-2.2.11.tgz", - "integrity": "sha512-2tXfg7/9PXu9nfU72/P3o3waHEFEQtHUfQbVexUaYqNNAxMj6sOfsqpUx4vd5nPgO+grSWrl+spqlLN2yej51w==", + "version": "2.2.12", + "resolved": "https://registry.npmjs.org/@fluentui/dom-utilities/-/dom-utilities-2.2.12.tgz", + "integrity": "sha512-safCKQPJTnshYG13/U2Zx1KWhOhU4vl5RAKqW7HEBfLOHds/fAR+EzTvKgO6OgxJq59JAKJvpH2QujkLXZZQ3A==", "dependencies": { - "@fluentui/set-version": "^8.2.11", + "@fluentui/set-version": "^8.2.12", "tslib": "^2.1.0" } }, "node_modules/@fluentui/font-icons-mdl2": { - "version": "8.5.23", - "resolved": "https://registry.npmjs.org/@fluentui/font-icons-mdl2/-/font-icons-mdl2-8.5.23.tgz", - "integrity": "sha512-jZjUtfQm9/84jX34zhwwsoZME86xXXgKAgBYuMvRStKzXGdZcd7YSOlmuT8lbISmtFL/SWwUGOEal1nLCUNeNA==", + "version": "8.5.27", + "resolved": "https://registry.npmjs.org/@fluentui/font-icons-mdl2/-/font-icons-mdl2-8.5.27.tgz", + "integrity": "sha512-u6J9SmdWsr3WjC7zog930IWWySA+mxLfIqfyux9oATJQPUs+76juYYbolDTJTvndVEmb+piA7qBhEubUoaXJjQ==", "dependencies": { - "@fluentui/set-version": "^8.2.11", - "@fluentui/style-utilities": "^8.9.16", - "@fluentui/utilities": "^8.13.18", + "@fluentui/set-version": "^8.2.12", + "@fluentui/style-utilities": "^8.9.20", + "@fluentui/utilities": "^8.13.21", "tslib": "^2.1.0" } }, "node_modules/@fluentui/foundation-legacy": { - "version": "8.2.43", - "resolved": "https://registry.npmjs.org/@fluentui/foundation-legacy/-/foundation-legacy-8.2.43.tgz", - "integrity": "sha512-rXr71KxNcWDH2LmTsFZbP75p8HssLlVLaFAqEdLE+sKf/LNKmqkDVTNhDbHZxzxy0QnguI4aNHcyGhMZUH3MPA==", - "dependencies": { - "@fluentui/merge-styles": "^8.5.12", - "@fluentui/set-version": "^8.2.11", - "@fluentui/style-utilities": "^8.9.16", - "@fluentui/utilities": "^8.13.18", + "version": "8.2.47", + "resolved": "https://registry.npmjs.org/@fluentui/foundation-legacy/-/foundation-legacy-8.2.47.tgz", + "integrity": "sha512-El/8/makZh2fqd2YdLSTy3T2oJ3N6WCsPzkud9CdMF98Oby0jny4EAtzjBNRbAwL4/gppOYIIchVuzRL4V2rcw==", + "dependencies": { + "@fluentui/merge-styles": "^8.5.13", + "@fluentui/set-version": "^8.2.12", + "@fluentui/style-utilities": "^8.9.20", + "@fluentui/utilities": "^8.13.21", "tslib": "^2.1.0" }, "peerDependencies": { @@ -803,55 +796,55 @@ } }, "node_modules/@fluentui/keyboard-key": { - "version": "0.4.11", - "resolved": "https://registry.npmjs.org/@fluentui/keyboard-key/-/keyboard-key-0.4.11.tgz", - "integrity": "sha512-TVB/EloWado9AVp1niChgcdDOQAHGP5B30Dinmtfe7zi8OnstwPoxwFP6dHJDdpLQ6ZEUTaEHViSzvewl7Chag==", + "version": "0.4.12", + "resolved": "https://registry.npmjs.org/@fluentui/keyboard-key/-/keyboard-key-0.4.12.tgz", + "integrity": "sha512-9nPglM58ThbOEQ88KijdYl64hiTAQQ0o60HRc0vboibmr41mJ322FoBz5Q5S5QLIEbBZajrAkrDMs3PKW4CCSw==", "dependencies": { "tslib": "^2.1.0" } }, "node_modules/@fluentui/keyboard-keys": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/@fluentui/keyboard-keys/-/keyboard-keys-9.0.3.tgz", - "integrity": "sha512-40KBVJ9HzsvmPL3rwYaAvxCacNS0xnTmOt6TLxxrAVgVrZ1X7DLgd8OGFZcWROs0dhHdCk2D51bl4nK8Q1r3mQ==", + "version": "9.0.6", + "resolved": "https://registry.npmjs.org/@fluentui/keyboard-keys/-/keyboard-keys-9.0.6.tgz", + "integrity": "sha512-WvJrCKvt8Om04S+IwypeJ3FG2tP2TSNFMSMYouDdeKspKD1EmQyQybs7YA9+Fh98X5ERF14zBCurgtNjpDH6gQ==", "dependencies": { - "@swc/helpers": "^0.4.14" + "@swc/helpers": "^0.5.1" } }, "node_modules/@fluentui/merge-styles": { - "version": "8.5.12", - "resolved": "https://registry.npmjs.org/@fluentui/merge-styles/-/merge-styles-8.5.12.tgz", - "integrity": "sha512-ZnUo0YuMP7AYi68dkknFqVxopIAgbrUnqR/MZlemmRvBYyy1SMj1WQeHcoiLFA8mF8YKn7B+jxQgJbN2bfcrRw==", + "version": "8.5.13", + "resolved": "https://registry.npmjs.org/@fluentui/merge-styles/-/merge-styles-8.5.13.tgz", + "integrity": "sha512-ocgwNlQcQwn5mNlZKFazrFVbYDEQ6BptoW4GyEv6U5TEHE8HKKYuPRf340NXCRGiacSpz3vLkyDjp+L431qUXg==", "dependencies": { - "@fluentui/set-version": "^8.2.11", + "@fluentui/set-version": "^8.2.12", "tslib": "^2.1.0" } }, "node_modules/@fluentui/priority-overflow": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/@fluentui/priority-overflow/-/priority-overflow-9.0.3.tgz", - "integrity": "sha512-lOUfZX3PMyb+nHWcNGQu+EBz2cvRxHgTObG97UTmGBB0nL0cEJCqVL7PKVWhto7zp3moSgRUWyUN/EQVVpZ/hg==", + "version": "9.1.8", + "resolved": "https://registry.npmjs.org/@fluentui/priority-overflow/-/priority-overflow-9.1.8.tgz", + "integrity": "sha512-wd6WvS30LAFfMsQ6MLCunX+qTd9fmVMuyutefD5ogZanois62GzLQoPF9JQUmOY/tN0a51k5dfM9tQrKQgsT+Q==", "dependencies": { - "@swc/helpers": "^0.4.14" + "@swc/helpers": "^0.5.1" } }, "node_modules/@fluentui/react": { - "version": "8.110.7", - "resolved": "https://registry.npmjs.org/@fluentui/react/-/react-8.110.7.tgz", - "integrity": "sha512-3sn4HZL10jghiYFF+Ouc7pNDJ5pR2ueU6ZY1IdmVFgYXTJJ/IwQhVc37mXVf8VoUM7hF4vRcGE4z+loNTpTX0w==", - "dependencies": { - "@fluentui/date-time-utilities": "^8.5.13", - "@fluentui/font-icons-mdl2": "^8.5.23", - "@fluentui/foundation-legacy": "^8.2.43", - "@fluentui/merge-styles": "^8.5.12", - "@fluentui/react-focus": "^8.8.30", - "@fluentui/react-hooks": "^8.6.29", - "@fluentui/react-portal-compat-context": "^9.0.6", - "@fluentui/react-window-provider": "^2.2.15", - "@fluentui/set-version": "^8.2.11", - "@fluentui/style-utilities": "^8.9.16", - "@fluentui/theme": "^2.6.34", - "@fluentui/utilities": "^8.13.18", + "version": "8.112.9", + "resolved": "https://registry.npmjs.org/@fluentui/react/-/react-8.112.9.tgz", + "integrity": "sha512-mSu++f/TA+en+pIiWJE8s2+L6TtIdUpULkh4/knsQ+4NTBjvFnve0bK936VBHK8ff6ypLa0HqiQKFIMlQyH/iw==", + "dependencies": { + "@fluentui/date-time-utilities": "^8.5.14", + "@fluentui/font-icons-mdl2": "^8.5.27", + "@fluentui/foundation-legacy": "^8.2.47", + "@fluentui/merge-styles": "^8.5.13", + "@fluentui/react-focus": "^8.8.34", + "@fluentui/react-hooks": "^8.6.33", + "@fluentui/react-portal-compat-context": "^9.0.10", + "@fluentui/react-window-provider": "^2.2.16", + "@fluentui/set-version": "^8.2.12", + "@fluentui/style-utilities": "^8.9.20", + "@fluentui/theme": "^2.6.38", + "@fluentui/utilities": "^8.13.21", "@microsoft/load-themed-styles": "^1.10.26", "tslib": "^2.1.0" }, @@ -863,376 +856,383 @@ } }, "node_modules/@fluentui/react-accordion": { - "version": "9.1.16", - "resolved": "https://registry.npmjs.org/@fluentui/react-accordion/-/react-accordion-9.1.16.tgz", - "integrity": "sha512-nfvmDIbZU7Ioe3HU4TnRTLowgNS6ZrJOM0CVRtbxM3F0NAUqigjVnwWXnNyXHWSWKkzKVcF9CYvxQavtnvh2fg==", - "dependencies": { - "@fluentui/react-aria": "^9.3.22", - "@fluentui/react-context-selector": "^9.1.22", - "@fluentui/react-icons": "^2.0.196", - "@fluentui/react-jsx-runtime": "9.0.0-alpha.6", - "@fluentui/react-shared-contexts": "^9.5.0", - "@fluentui/react-tabster": "^9.7.5", - "@fluentui/react-theme": "^9.1.8", - "@fluentui/react-utilities": "^9.9.2", - "@griffel/react": "^1.5.7", - "@swc/helpers": "^0.4.14" + "version": "9.3.24", + "resolved": "https://registry.npmjs.org/@fluentui/react-accordion/-/react-accordion-9.3.24.tgz", + "integrity": "sha512-Q/smYyxa1E9bX9opA5SQTo8h48T7R/TidCI4Jz7CXVBBhcVCWU0qoKeFs/JmUbMzbrkuSLEHUlGHZH4pGucf2w==", + "dependencies": { + "@fluentui/react-aria": "^9.3.43", + "@fluentui/react-context-selector": "^9.1.41", + "@fluentui/react-icons": "^2.0.217", + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-shared-contexts": "^9.10.0", + "@fluentui/react-tabster": "^9.14.1", + "@fluentui/react-theme": "^9.1.14", + "@fluentui/react-utilities": "^9.15.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.8.0 <19.0.0", - "@types/react-dom": ">=16.8.0 <19.0.0", - "react": ">=16.8.0 <19.0.0", - "react-dom": ">=16.8.0 <19.0.0", + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.14.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0", "scheduler": "^0.19.0 || ^0.20.0" } }, "node_modules/@fluentui/react-alert": { - "version": "9.0.0-beta.51", - "resolved": "https://registry.npmjs.org/@fluentui/react-alert/-/react-alert-9.0.0-beta.51.tgz", - "integrity": "sha512-0LR4ThWBZO3hA7n7yluvzm3ytE8QRj+WHVdmg21Iu6f8S9EECcMmOwN4TINzXuuyKBbjERl3heuqjeriRLzANg==", - "dependencies": { - "@fluentui/react-avatar": "^9.5.5", - "@fluentui/react-button": "^9.3.16", - "@fluentui/react-icons": "^2.0.196", - "@fluentui/react-jsx-runtime": "9.0.0-alpha.6", - "@fluentui/react-tabster": "^9.7.5", - "@fluentui/react-theme": "^9.1.8", - "@fluentui/react-utilities": "^9.9.2", - "@griffel/react": "^1.5.7", - "@swc/helpers": "^0.4.14" + "version": "9.0.0-beta.88", + "resolved": "https://registry.npmjs.org/@fluentui/react-alert/-/react-alert-9.0.0-beta.88.tgz", + "integrity": "sha512-+HG8ehOOycXrJMwobFcNGUuItNQ4hCrwOhDODfT54F3f/RJW7dSrDNEM3xY1spwZBjxlKhMmkxA4zSn03CittQ==", + "dependencies": { + "@fluentui/react-avatar": "^9.5.42", + "@fluentui/react-button": "^9.3.51", + "@fluentui/react-icons": "^2.0.217", + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-tabster": "^9.14.1", + "@fluentui/react-theme": "^9.1.14", + "@fluentui/react-utilities": "^9.15.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.8.0 <19.0.0", - "@types/react-dom": ">=16.8.0 <19.0.0", - "react": ">=16.8.0 <19.0.0", - "react-dom": ">=16.8.0 <19.0.0" + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.14.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" } }, "node_modules/@fluentui/react-aria": { - "version": "9.3.22", - "resolved": "https://registry.npmjs.org/@fluentui/react-aria/-/react-aria-9.3.22.tgz", - "integrity": "sha512-H/WUp2TKg9XkF5B12Vpv1NN2/UPoV6NTgZZtsHs1kaZvHiBwhgODE5f8DFyUhoWUH4577r5X1kxjlEmfIvg5gw==", + "version": "9.3.43", + "resolved": "https://registry.npmjs.org/@fluentui/react-aria/-/react-aria-9.3.43.tgz", + "integrity": "sha512-LO/u3ea4IgZUlXePO4V/ufwMZnoSILTT8FEgsxkcgauzMxmIRwijtJ9fYImifndu95Npl3OlA77CmMZwFsLsDQ==", "dependencies": { - "@fluentui/keyboard-keys": "^9.0.3", - "@fluentui/react-utilities": "^9.9.2", - "@swc/helpers": "^0.4.14" + "@fluentui/keyboard-keys": "^9.0.6", + "@fluentui/react-utilities": "^9.15.1", + "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.8.0 <19.0.0", - "@types/react-dom": ">=16.8.0 <19.0.0", - "react": ">=16.8.0 <19.0.0", - "react-dom": ">=16.8.0 <19.0.0" + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.14.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" } }, "node_modules/@fluentui/react-avatar": { - "version": "9.5.5", - "resolved": "https://registry.npmjs.org/@fluentui/react-avatar/-/react-avatar-9.5.5.tgz", - "integrity": "sha512-p9CwOxa7+AoMGSa/WPYY7NvgjuSYe54+F4OcuhoM5FVktPPmlDuwXkc7Z/Ud9AiEoqK1z2kUuqizW4k0cVqP0A==", - "dependencies": { - "@fluentui/react-badge": "^9.1.15", - "@fluentui/react-context-selector": "^9.1.22", - "@fluentui/react-icons": "^2.0.196", - "@fluentui/react-jsx-runtime": "9.0.0-alpha.6", - "@fluentui/react-popover": "^9.6.0", - "@fluentui/react-shared-contexts": "^9.5.0", - "@fluentui/react-tabster": "^9.7.5", - "@fluentui/react-theme": "^9.1.8", - "@fluentui/react-tooltip": "^9.2.16", - "@fluentui/react-utilities": "^9.9.2", - "@griffel/react": "^1.5.7", - "@swc/helpers": "^0.4.14" + "version": "9.5.42", + "resolved": "https://registry.npmjs.org/@fluentui/react-avatar/-/react-avatar-9.5.42.tgz", + "integrity": "sha512-jhwG0HclBDavkbMQDu7wonBPP6KJofhuPOfMvKLJRpWcJjBkFxxPbd2EhUiShhux77Jexx9rCx+7HcD0zA4oRg==", + "dependencies": { + "@fluentui/react-badge": "^9.2.10", + "@fluentui/react-context-selector": "^9.1.41", + "@fluentui/react-icons": "^2.0.217", + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-popover": "^9.8.17", + "@fluentui/react-shared-contexts": "^9.10.0", + "@fluentui/react-tabster": "^9.14.1", + "@fluentui/react-theme": "^9.1.14", + "@fluentui/react-tooltip": "^9.3.18", + "@fluentui/react-utilities": "^9.15.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.8.0 <19.0.0", - "@types/react-dom": ">=16.8.0 <19.0.0", - "react": ">=16.8.0 <19.0.0", - "react-dom": ">=16.8.0 <19.0.0", + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.14.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0", "scheduler": "^0.19.0 || ^0.20.0" } }, "node_modules/@fluentui/react-badge": { - "version": "9.1.15", - "resolved": "https://registry.npmjs.org/@fluentui/react-badge/-/react-badge-9.1.15.tgz", - "integrity": "sha512-CgxKzG0Kbm7GRewWn583nTxY41maSLpf99WOaa8TjaFjRx2SdWwh4qPrJj9NxnkqgItdS80ck1NnoSdoF0WueA==", - "dependencies": { - "@fluentui/react-icons": "^2.0.196", - "@fluentui/react-jsx-runtime": "9.0.0-alpha.6", - "@fluentui/react-shared-contexts": "^9.5.0", - "@fluentui/react-theme": "^9.1.8", - "@fluentui/react-utilities": "^9.9.2", - "@griffel/react": "^1.5.7", - "@swc/helpers": "^0.4.14" + "version": "9.2.10", + "resolved": "https://registry.npmjs.org/@fluentui/react-badge/-/react-badge-9.2.10.tgz", + "integrity": "sha512-Z4lS3VHyqTxTEUwuCXD7th5wK+5E+FAyTLgs0S5wvh8B7t347IBEyyhlaTfrjzZA5lKsU2KWL5GKsgBQdPZURg==", + "dependencies": { + "@fluentui/react-icons": "^2.0.217", + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-shared-contexts": "^9.10.0", + "@fluentui/react-theme": "^9.1.14", + "@fluentui/react-utilities": "^9.15.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.8.0 <19.0.0", - "@types/react-dom": ">=16.8.0 <19.0.0", - "react": ">=16.8.0 <19.0.0", - "react-dom": ">=16.8.0 <19.0.0" + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.14.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" } }, "node_modules/@fluentui/react-button": { - "version": "9.3.16", - "resolved": "https://registry.npmjs.org/@fluentui/react-button/-/react-button-9.3.16.tgz", - "integrity": "sha512-fZ5hkmA/RIcke1/lt2YW4q2dyWHgF330yayu3JuR4nhmFqKM/eZFdwQS4mYDBCMkllcbBeeF69lRKGftQ6MX0A==", - "dependencies": { - "@fluentui/keyboard-keys": "^9.0.3", - "@fluentui/react-aria": "^9.3.22", - "@fluentui/react-icons": "^2.0.196", - "@fluentui/react-jsx-runtime": "9.0.0-alpha.6", - "@fluentui/react-shared-contexts": "^9.5.0", - "@fluentui/react-tabster": "^9.7.5", - "@fluentui/react-theme": "^9.1.8", - "@fluentui/react-utilities": "^9.9.2", - "@griffel/react": "^1.5.7", - "@swc/helpers": "^0.4.14" + "version": "9.3.51", + "resolved": "https://registry.npmjs.org/@fluentui/react-button/-/react-button-9.3.51.tgz", + "integrity": "sha512-nHAF2vf8kI1hLr84pW9TKcXlCY7znDzn7L67TjpKdGmYIUAsv8O74H9gQ4wc73qyr47z52wo7lrd2W4vM1RJOw==", + "dependencies": { + "@fluentui/keyboard-keys": "^9.0.6", + "@fluentui/react-aria": "^9.3.43", + "@fluentui/react-icons": "^2.0.217", + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-shared-contexts": "^9.10.0", + "@fluentui/react-tabster": "^9.14.1", + "@fluentui/react-theme": "^9.1.14", + "@fluentui/react-utilities": "^9.15.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.8.0 <19.0.0", - "@types/react-dom": ">=16.8.0 <19.0.0", - "react": ">=16.8.0 <19.0.0", - "react-dom": ">=16.8.0 <19.0.0" + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.14.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" } }, "node_modules/@fluentui/react-card": { - "version": "9.0.14", - "resolved": "https://registry.npmjs.org/@fluentui/react-card/-/react-card-9.0.14.tgz", - "integrity": "sha512-HifE4x+kREZmeXD6YqtcpFIas12RoymeZFDyRx5iy58/H6sL6wwKHchoF5QGWGsQq7In+6QFfoWUPxWou46yMQ==", - "dependencies": { - "@fluentui/keyboard-keys": "^9.0.3", - "@fluentui/react-jsx-runtime": "9.0.0-alpha.6", - "@fluentui/react-tabster": "^9.7.5", - "@fluentui/react-theme": "^9.1.8", - "@fluentui/react-utilities": "^9.9.2", - "@griffel/react": "^1.5.7", - "@swc/helpers": "^0.4.14" + "version": "9.0.50", + "resolved": "https://registry.npmjs.org/@fluentui/react-card/-/react-card-9.0.50.tgz", + "integrity": "sha512-eJA0LI2hb2/PQWZL+Py3smcjV7OF3n2dezcWIMBQuWM7tuwBOGRsqrHUwOrSEPWUySp8Kzw8NSLNabnnnp4Isg==", + "dependencies": { + "@fluentui/keyboard-keys": "^9.0.6", + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-tabster": "^9.14.1", + "@fluentui/react-theme": "^9.1.14", + "@fluentui/react-utilities": "^9.15.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.8.0 <19.0.0", - "@types/react-dom": ">=16.8.0 <19.0.0", - "react": ">=16.8.0 <19.0.0", - "react-dom": ">=16.8.0 <19.0.0" + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.14.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" } }, "node_modules/@fluentui/react-checkbox": { - "version": "9.1.17", - "resolved": "https://registry.npmjs.org/@fluentui/react-checkbox/-/react-checkbox-9.1.17.tgz", - "integrity": "sha512-qgH292TTOBlWGViLtMn4MxJxPaCJHoF1zuygMRgIb988E6W5NUpRZPbROKDyiAYDhAf8S9h1sL6ZkCwff03Bbw==", - "dependencies": { - "@fluentui/react-field": "^9.1.6", - "@fluentui/react-icons": "^2.0.196", - "@fluentui/react-jsx-runtime": "9.0.0-alpha.6", - "@fluentui/react-label": "^9.1.15", - "@fluentui/react-shared-contexts": "^9.5.0", - "@fluentui/react-tabster": "^9.7.5", - "@fluentui/react-theme": "^9.1.8", - "@fluentui/react-utilities": "^9.9.2", - "@griffel/react": "^1.5.7", - "@swc/helpers": "^0.4.14" + "version": "9.1.52", + "resolved": "https://registry.npmjs.org/@fluentui/react-checkbox/-/react-checkbox-9.1.52.tgz", + "integrity": "sha512-yHJzZmW5xcQgOlG0ZER9ua23/TBWrBfoUjv0V94Q0X3Qa5PRpepxbGpkyz5zux9tl3J/tqIHW9tBKkW9RVLI4w==", + "dependencies": { + "@fluentui/react-field": "^9.1.38", + "@fluentui/react-icons": "^2.0.217", + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-label": "^9.1.46", + "@fluentui/react-shared-contexts": "^9.10.0", + "@fluentui/react-tabster": "^9.14.1", + "@fluentui/react-theme": "^9.1.14", + "@fluentui/react-utilities": "^9.15.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.8.0 <19.0.0", - "@types/react-dom": ">=16.8.0 <19.0.0", - "react": ">=16.8.0 <19.0.0", - "react-dom": ">=16.8.0 <19.0.0" + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.14.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" } }, "node_modules/@fluentui/react-combobox": { - "version": "9.4.0", - "resolved": "https://registry.npmjs.org/@fluentui/react-combobox/-/react-combobox-9.4.0.tgz", - "integrity": "sha512-VFPY56PsoyYSdEgH2VsgOGIvwP6FqJ1+YIs77VFL20ZJteI0Escs9KqLukpPrEdQSfNoysKSZA6ntmt6t2rB+w==", - "dependencies": { - "@fluentui/keyboard-keys": "^9.0.3", - "@fluentui/react-context-selector": "^9.1.22", - "@fluentui/react-field": "^9.1.6", - "@fluentui/react-icons": "^2.0.196", - "@fluentui/react-jsx-runtime": "9.0.0-alpha.6", - "@fluentui/react-portal": "^9.2.12", - "@fluentui/react-positioning": "^9.6.0", - "@fluentui/react-shared-contexts": "^9.5.0", - "@fluentui/react-theme": "^9.1.8", - "@fluentui/react-utilities": "^9.9.2", - "@griffel/react": "^1.5.7", - "@swc/helpers": "^0.4.14" + "version": "9.5.26", + "resolved": "https://registry.npmjs.org/@fluentui/react-combobox/-/react-combobox-9.5.26.tgz", + "integrity": "sha512-v1aH7IbU7IXfZ8H6SVMqf0OYywUWfc7ZdcIdLqXq3m86BgXzh9xJ6gctrox27363x/QCKetn99VmVkRTDz3kSg==", + "dependencies": { + "@fluentui/keyboard-keys": "^9.0.6", + "@fluentui/react-context-selector": "^9.1.41", + "@fluentui/react-field": "^9.1.38", + "@fluentui/react-icons": "^2.0.217", + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-portal": "^9.3.25", + "@fluentui/react-positioning": "^9.9.21", + "@fluentui/react-shared-contexts": "^9.10.0", + "@fluentui/react-theme": "^9.1.14", + "@fluentui/react-utilities": "^9.15.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.8.0 <19.0.0", - "@types/react-dom": ">=16.8.0 <19.0.0", - "react": ">=16.8.0 <19.0.0", - "react-dom": ">=16.8.0 <19.0.0", + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.14.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0", "scheduler": "^0.19.0 || ^0.20.0" } }, "node_modules/@fluentui/react-components": { - "version": "9.21.0", - "resolved": "https://registry.npmjs.org/@fluentui/react-components/-/react-components-9.21.0.tgz", - "integrity": "sha512-SysBfRH7dCgfLC/HmyEcwuZFs/RjsNjlY5rTiKjdmQcHVb/mkXvNZD7uMdcDU9zHAkk9ZkV0/45EtDJaw95cTQ==", - "dependencies": { - "@fluentui/react-accordion": "^9.1.16", - "@fluentui/react-alert": "9.0.0-beta.51", - "@fluentui/react-avatar": "^9.5.5", - "@fluentui/react-badge": "^9.1.15", - "@fluentui/react-button": "^9.3.16", - "@fluentui/react-card": "^9.0.14", - "@fluentui/react-checkbox": "^9.1.17", - "@fluentui/react-combobox": "^9.4.0", - "@fluentui/react-dialog": "^9.5.9", - "@fluentui/react-divider": "^9.2.15", - "@fluentui/react-drawer": "9.0.0-beta.1", - "@fluentui/react-field": "^9.1.6", - "@fluentui/react-image": "^9.1.12", - "@fluentui/react-infobutton": "9.0.0-beta.34", - "@fluentui/react-input": "^9.4.16", - "@fluentui/react-label": "^9.1.15", - "@fluentui/react-link": "^9.0.42", - "@fluentui/react-menu": "^9.7.16", - "@fluentui/react-overflow": "^9.0.19", - "@fluentui/react-persona": "^9.2.15", - "@fluentui/react-popover": "^9.6.0", - "@fluentui/react-portal": "^9.2.12", - "@fluentui/react-positioning": "^9.6.0", - "@fluentui/react-progress": "^9.1.16", - "@fluentui/react-provider": "^9.7.2", - "@fluentui/react-radio": "^9.1.17", - "@fluentui/react-select": "^9.1.16", - "@fluentui/react-shared-contexts": "^9.5.0", - "@fluentui/react-skeleton": "^9.0.4", - "@fluentui/react-slider": "^9.1.17", - "@fluentui/react-spinbutton": "^9.2.16", - "@fluentui/react-spinner": "^9.2.2", - "@fluentui/react-switch": "^9.1.17", - "@fluentui/react-table": "^9.3.0", - "@fluentui/react-tabs": "^9.3.17", - "@fluentui/react-tabster": "^9.7.5", - "@fluentui/react-text": "^9.3.12", - "@fluentui/react-textarea": "^9.3.16", - "@fluentui/react-theme": "^9.1.8", - "@fluentui/react-toolbar": "^9.1.17", - "@fluentui/react-tooltip": "^9.2.16", - "@fluentui/react-tree": "9.0.0-beta.18", - "@fluentui/react-utilities": "^9.9.2", - "@fluentui/react-virtualizer": "9.0.0-alpha.22", - "@griffel/react": "^1.5.7", - "@swc/helpers": "^0.4.14" + "version": "9.36.0", + "resolved": "https://registry.npmjs.org/@fluentui/react-components/-/react-components-9.36.0.tgz", + "integrity": "sha512-bO9RAgEy2vLVt9cKxK47FulQvUOKDrO9YzukxPp8sPiw4NCIhkRQqMKO86n9+pv+8ZEnziIzV/IxCQOIX3TOQw==", + "dependencies": { + "@fluentui/react-accordion": "^9.3.24", + "@fluentui/react-alert": "9.0.0-beta.88", + "@fluentui/react-avatar": "^9.5.42", + "@fluentui/react-badge": "^9.2.10", + "@fluentui/react-button": "^9.3.51", + "@fluentui/react-card": "^9.0.50", + "@fluentui/react-checkbox": "^9.1.52", + "@fluentui/react-combobox": "^9.5.26", + "@fluentui/react-dialog": "^9.8.0", + "@fluentui/react-divider": "^9.2.46", + "@fluentui/react-drawer": "9.0.0-beta.37", + "@fluentui/react-field": "^9.1.38", + "@fluentui/react-image": "^9.1.43", + "@fluentui/react-infobutton": "9.0.0-beta.72", + "@fluentui/react-infolabel": "9.0.0", + "@fluentui/react-input": "^9.4.48", + "@fluentui/react-label": "^9.1.46", + "@fluentui/react-link": "^9.1.30", + "@fluentui/react-menu": "^9.12.28", + "@fluentui/react-message-bar": "^9.0.2", + "@fluentui/react-overflow": "^9.0.41", + "@fluentui/react-persona": "^9.2.52", + "@fluentui/react-popover": "^9.8.17", + "@fluentui/react-portal": "^9.3.25", + "@fluentui/react-positioning": "^9.9.21", + "@fluentui/react-progress": "^9.1.48", + "@fluentui/react-provider": "^9.10.9", + "@fluentui/react-radio": "^9.1.52", + "@fluentui/react-select": "^9.1.48", + "@fluentui/react-shared-contexts": "^9.10.0", + "@fluentui/react-skeleton": "^9.0.36", + "@fluentui/react-slider": "^9.1.52", + "@fluentui/react-spinbutton": "^9.2.48", + "@fluentui/react-spinner": "^9.3.26", + "@fluentui/react-switch": "^9.1.52", + "@fluentui/react-table": "^9.10.7", + "@fluentui/react-tabs": "^9.3.53", + "@fluentui/react-tabster": "^9.14.1", + "@fluentui/react-tags": "^9.0.6", + "@fluentui/react-text": "^9.3.43", + "@fluentui/react-textarea": "^9.3.48", + "@fluentui/react-theme": "^9.1.14", + "@fluentui/react-toast": "^9.3.13", + "@fluentui/react-toolbar": "^9.1.52", + "@fluentui/react-tooltip": "^9.3.18", + "@fluentui/react-tree": "^9.4.7", + "@fluentui/react-utilities": "^9.15.1", + "@fluentui/react-virtualizer": "9.0.0-alpha.53", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.8.0 <19.0.0", - "@types/react-dom": ">=16.8.0 <19.0.0", - "react": ">=16.8.0 <19.0.0", - "react-dom": ">=16.8.0 <19.0.0", + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.14.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0", "scheduler": "^0.19.0 || ^0.20.0" } }, "node_modules/@fluentui/react-context-selector": { - "version": "9.1.22", - "resolved": "https://registry.npmjs.org/@fluentui/react-context-selector/-/react-context-selector-9.1.22.tgz", - "integrity": "sha512-iPXjx8QkEc8kV2YdAz7z17phb+ZDDDecRz/DygI7qdiZPtPTyJxZoelpzA8jb6cbz1+P7kzlbaNz9It24+a0qA==", + "version": "9.1.41", + "resolved": "https://registry.npmjs.org/@fluentui/react-context-selector/-/react-context-selector-9.1.41.tgz", + "integrity": "sha512-Q0Gbem5rz7hK9uBrWLOhD4TWzCSqYzA+TNpd8vYE2/9GHFTc16EvKEg1gsnvlA0lNHwTR0JwT0QT8d2KsNHa4w==", "dependencies": { - "@fluentui/react-utilities": "^9.9.2", - "@swc/helpers": "^0.4.14" + "@fluentui/react-utilities": "^9.15.1", + "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.8.0 <19.0.0", - "@types/react-dom": ">=16.8.0 <19.0.0", - "react": ">=16.8.0 <19.0.0", - "react-dom": ">=16.8.0 <19.0.0", + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.14.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0", "scheduler": "^0.19.0 || ^0.20.0" } }, "node_modules/@fluentui/react-dialog": { - "version": "9.5.9", - "resolved": "https://registry.npmjs.org/@fluentui/react-dialog/-/react-dialog-9.5.9.tgz", - "integrity": "sha512-6kZafolihGDggZjH30rjwFBE/QDxTqRpHRLaPur5WBzGv0wkXyYLCVKomFUH4pN0fCPZ8tT7vy1Tm4GAe9SYMw==", - "dependencies": { - "@fluentui/keyboard-keys": "^9.0.3", - "@fluentui/react-aria": "^9.3.22", - "@fluentui/react-context-selector": "^9.1.22", - "@fluentui/react-icons": "^2.0.196", - "@fluentui/react-jsx-runtime": "9.0.0-alpha.6", - "@fluentui/react-portal": "^9.2.12", - "@fluentui/react-shared-contexts": "^9.5.0", - "@fluentui/react-tabster": "^9.7.5", - "@fluentui/react-theme": "^9.1.8", - "@fluentui/react-utilities": "^9.9.2", - "@griffel/react": "^1.5.7", - "@swc/helpers": "^0.4.14" + "version": "9.8.0", + "resolved": "https://registry.npmjs.org/@fluentui/react-dialog/-/react-dialog-9.8.0.tgz", + "integrity": "sha512-fT+nSeJNIDgUSDI1CRmLMa/yBQc6CPUjIkSuvBas0bjvEsG1MRXCecwXfJle4WxMyC3ax///4Ugjc1qlmx8iuA==", + "dependencies": { + "@fluentui/keyboard-keys": "^9.0.6", + "@fluentui/react-aria": "^9.3.43", + "@fluentui/react-context-selector": "^9.1.41", + "@fluentui/react-icons": "^2.0.217", + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-portal": "^9.3.25", + "@fluentui/react-shared-contexts": "^9.10.0", + "@fluentui/react-tabster": "^9.14.1", + "@fluentui/react-theme": "^9.1.14", + "@fluentui/react-utilities": "^9.15.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1", + "react-transition-group": "^4.4.1" }, "peerDependencies": { - "@types/react": ">=16.8.0 <19.0.0", - "@types/react-dom": ">=16.8.0 <19.0.0", - "react": ">=16.8.0 <19.0.0", - "react-dom": ">=16.8.0 <19.0.0" + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.14.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" } }, "node_modules/@fluentui/react-divider": { - "version": "9.2.15", - "resolved": "https://registry.npmjs.org/@fluentui/react-divider/-/react-divider-9.2.15.tgz", - "integrity": "sha512-AHGFkd/g4hBQX5WmFyG9WKisnvloPS7aJuI8zIBPcJ8LQdaDhQKMdXenIBTknOm4mnnUG4ytPZVAijVhb/yxgQ==", + "version": "9.2.46", + "resolved": "https://registry.npmjs.org/@fluentui/react-divider/-/react-divider-9.2.46.tgz", + "integrity": "sha512-+YBrlHz5MZ+gjH36J5orn9MZNXSdz6vOm+4XmJZRyStvfStjcfgVImOfmDs4SYcokwvqq5RTrL9iL/VGseTTMQ==", "dependencies": { - "@fluentui/react-jsx-runtime": "9.0.0-alpha.6", - "@fluentui/react-shared-contexts": "^9.5.0", - "@fluentui/react-theme": "^9.1.8", - "@fluentui/react-utilities": "^9.9.2", - "@griffel/react": "^1.5.7", - "@swc/helpers": "^0.4.14" + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-shared-contexts": "^9.10.0", + "@fluentui/react-theme": "^9.1.14", + "@fluentui/react-utilities": "^9.15.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.8.0 <19.0.0", - "@types/react-dom": ">=16.8.0 <19.0.0", - "react": ">=16.8.0 <19.0.0", - "react-dom": ">=16.8.0 <19.0.0" + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.14.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" } }, "node_modules/@fluentui/react-drawer": { - "version": "9.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@fluentui/react-drawer/-/react-drawer-9.0.0-beta.1.tgz", - "integrity": "sha512-lFlkMI2iJbFKhxLYZQLM+bDtCgg9x2VkznJx62yclcBOJ/BI2k1w7sQ3RBHl/VPxFJCdm5KpuyHDcuR86VJunA==", - "dependencies": { - "@fluentui/react-dialog": "^9.5.9", - "@fluentui/react-jsx-runtime": "9.0.0-alpha.6", - "@fluentui/react-shared-contexts": "^9.5.0", - "@fluentui/react-theme": "^9.1.8", - "@fluentui/react-utilities": "^9.9.2", - "@griffel/react": "^1.5.7", - "@swc/helpers": "^0.4.14" + "version": "9.0.0-beta.37", + "resolved": "https://registry.npmjs.org/@fluentui/react-drawer/-/react-drawer-9.0.0-beta.37.tgz", + "integrity": "sha512-0xbNpPP9HljG7XpFkN8n+rOuUwHvIM/hPBJJvUF464U+HIGX2XbsoSuJ1K7CD96Jbwd2S5NFvgg2/7TSH9s9gg==", + "dependencies": { + "@fluentui/react-dialog": "^9.8.0", + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-motion-preview": "^0.3.4", + "@fluentui/react-shared-contexts": "^9.10.0", + "@fluentui/react-tabster": "^9.14.1", + "@fluentui/react-theme": "^9.1.14", + "@fluentui/react-utilities": "^9.15.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.8.0 <19.0.0", - "@types/react-dom": ">=16.8.0 <19.0.0", - "react": ">=16.8.0 <19.0.0", - "react-dom": ">=16.8.0 <19.0.0" + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.14.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" } }, "node_modules/@fluentui/react-field": { - "version": "9.1.6", - "resolved": "https://registry.npmjs.org/@fluentui/react-field/-/react-field-9.1.6.tgz", - "integrity": "sha512-vJqh8AFvo1G3gxHJglv5TyRgD1P+qEmN9BNaQvnr8sj+iquGDs3Mf7hal5rT+PetuF6Owrh6g0mOrzkaJMyTcQ==", - "dependencies": { - "@fluentui/react-context-selector": "^9.1.22", - "@fluentui/react-icons": "^2.0.196", - "@fluentui/react-jsx-runtime": "9.0.0-alpha.6", - "@fluentui/react-label": "^9.1.15", - "@fluentui/react-theme": "^9.1.8", - "@fluentui/react-utilities": "^9.9.2", - "@griffel/react": "^1.5.7", - "@swc/helpers": "^0.4.14" + "version": "9.1.38", + "resolved": "https://registry.npmjs.org/@fluentui/react-field/-/react-field-9.1.38.tgz", + "integrity": "sha512-P+zOPm2tu7//trczqkQQT0DP9r6oVEwBlaBiAJara464sudCiXbsq8F4wFHxTAw7BNtbqKenOsEJkJq1sx4Exw==", + "dependencies": { + "@fluentui/react-context-selector": "^9.1.41", + "@fluentui/react-icons": "^2.0.217", + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-label": "^9.1.46", + "@fluentui/react-theme": "^9.1.14", + "@fluentui/react-utilities": "^9.15.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.8.0 <19.0.0", - "@types/react-dom": ">=16.8.0 <19.0.0", - "react": ">=16.8.0 <19.0.0", - "react-dom": ">=16.8.0 <19.0.0" + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.14.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" } }, "node_modules/@fluentui/react-focus": { - "version": "8.8.30", - "resolved": "https://registry.npmjs.org/@fluentui/react-focus/-/react-focus-8.8.30.tgz", - "integrity": "sha512-dKQQtNTZbQOE+u/Tmh7AbtJPSpzQNI0L8o55a22y4U7s33rizUd++CIiToXsB+bPvlotcmpZswZQ8V06zM4KIw==", - "dependencies": { - "@fluentui/keyboard-key": "^0.4.11", - "@fluentui/merge-styles": "^8.5.12", - "@fluentui/set-version": "^8.2.11", - "@fluentui/style-utilities": "^8.9.16", - "@fluentui/utilities": "^8.13.18", + "version": "8.8.34", + "resolved": "https://registry.npmjs.org/@fluentui/react-focus/-/react-focus-8.8.34.tgz", + "integrity": "sha512-GNi8MqQRdoIaYpiz5kWIQaX1mNzFz3X+UShezA3gohrXnkONUvrPBuFDyYgQXoqk67juEZ+oGxl2PpKjz08HCA==", + "dependencies": { + "@fluentui/keyboard-key": "^0.4.12", + "@fluentui/merge-styles": "^8.5.13", + "@fluentui/set-version": "^8.2.12", + "@fluentui/style-utilities": "^8.9.20", + "@fluentui/utilities": "^8.13.21", "tslib": "^2.1.0" }, "peerDependencies": { @@ -1241,13 +1241,13 @@ } }, "node_modules/@fluentui/react-hooks": { - "version": "8.6.29", - "resolved": "https://registry.npmjs.org/@fluentui/react-hooks/-/react-hooks-8.6.29.tgz", - "integrity": "sha512-MeVevmGJtrYxdhoarrkVWE0Hs4XdzOc9A3tiOjMBIcwOvoOYOAoOELoHK/wuulPVwUn2R9Y+7JpJ6oCe4ImdJw==", + "version": "8.6.33", + "resolved": "https://registry.npmjs.org/@fluentui/react-hooks/-/react-hooks-8.6.33.tgz", + "integrity": "sha512-3P9RA34QhhjFwHwCvfOqMDgCwvks4hgMsEGvQVTdrcya4uskxBx4FqCLzoMxkXcAJjJCiTJmPx/mZQqQpgoyoA==", "dependencies": { - "@fluentui/react-window-provider": "^2.2.15", - "@fluentui/set-version": "^8.2.11", - "@fluentui/utilities": "^8.13.18", + "@fluentui/react-window-provider": "^2.2.16", + "@fluentui/set-version": "^8.2.12", + "@fluentui/utilities": "^8.13.21", "tslib": "^2.1.0" }, "peerDependencies": { @@ -1256,9 +1256,9 @@ } }, "node_modules/@fluentui/react-icons": { - "version": "2.0.203", - "resolved": "https://registry.npmjs.org/@fluentui/react-icons/-/react-icons-2.0.203.tgz", - "integrity": "sha512-eOV9GnCFzEIgllHEYenfkVB2MYChMRj2B8Vlr4qqdL0Kts7gRMfBIb+0+ADr5a3KIN0GtdAvG7KtsJ99O6gNmw==", + "version": "2.0.221", + "resolved": "https://registry.npmjs.org/@fluentui/react-icons/-/react-icons-2.0.221.tgz", + "integrity": "sha512-Dj5ihpaE4y3gWs81SJGuu8Pz3rPR6ioHHbqz8eETkbhpAW8Q3dRITFcfdYQV/ZEsj33/uSiis8iLMdhY/xWMMw==", "dependencies": { "@griffel/react": "^1.0.0", "tslib": "^2.1.0" @@ -1268,38 +1268,60 @@ } }, "node_modules/@fluentui/react-image": { - "version": "9.1.12", - "resolved": "https://registry.npmjs.org/@fluentui/react-image/-/react-image-9.1.12.tgz", - "integrity": "sha512-NI77BzDNO8wJJ0sDM9g86YC6cI1DH/hJQTqlHaXG8vRwM81qXrsPAqc/7Y9Jh+CBOe408E8d83yrEvoXUfj5cA==", + "version": "9.1.43", + "resolved": "https://registry.npmjs.org/@fluentui/react-image/-/react-image-9.1.43.tgz", + "integrity": "sha512-87ogWT/gwa4DQe4uXjqwFD29Zkf4SxIHHjPzdydYTEpLEa3FEGF9HRW/Sz7v7Qz/pR4Ic9LsBbuwk+/XhpEa7w==", "dependencies": { - "@fluentui/react-jsx-runtime": "9.0.0-alpha.6", - "@fluentui/react-shared-contexts": "^9.5.0", - "@fluentui/react-theme": "^9.1.8", - "@fluentui/react-utilities": "^9.9.2", - "@griffel/react": "^1.5.7", - "@swc/helpers": "^0.4.14" + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-shared-contexts": "^9.10.0", + "@fluentui/react-theme": "^9.1.14", + "@fluentui/react-utilities": "^9.15.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.8.0 <19.0.0", - "@types/react-dom": ">=16.8.0 <19.0.0", - "react": ">=16.8.0 <19.0.0", - "react-dom": ">=16.8.0 <19.0.0" + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.14.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" } }, "node_modules/@fluentui/react-infobutton": { - "version": "9.0.0-beta.34", - "resolved": "https://registry.npmjs.org/@fluentui/react-infobutton/-/react-infobutton-9.0.0-beta.34.tgz", - "integrity": "sha512-0EhZ1iBFPbq1KH4dNTG3bB74fkzK5KLdBCaWlF1mGQyzGE5W1ukpn16Tr9Ul1O6tc8uAgTIJxf/VwRQO3amdjQ==", - "dependencies": { - "@fluentui/react-icons": "^2.0.196", - "@fluentui/react-jsx-runtime": "9.0.0-alpha.6", - "@fluentui/react-label": "^9.1.15", - "@fluentui/react-popover": "^9.6.0", - "@fluentui/react-tabster": "^9.7.5", - "@fluentui/react-theme": "^9.1.8", - "@fluentui/react-utilities": "^9.9.2", - "@griffel/react": "^1.5.7", - "@swc/helpers": "^0.4.14" + "version": "9.0.0-beta.72", + "resolved": "https://registry.npmjs.org/@fluentui/react-infobutton/-/react-infobutton-9.0.0-beta.72.tgz", + "integrity": "sha512-lpuk5xfNR8c5f2eM9uwGOTZdm9dwttSeJKKGyr2myPCGvm9lq0oIft72WsPCqYl2aYTyl4284vjY4b9RIIiCEQ==", + "dependencies": { + "@fluentui/react-icons": "^2.0.217", + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-label": "^9.1.46", + "@fluentui/react-popover": "^9.8.17", + "@fluentui/react-tabster": "^9.14.1", + "@fluentui/react-theme": "^9.1.14", + "@fluentui/react-utilities": "^9.15.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1" + }, + "peerDependencies": { + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.14.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-infolabel": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@fluentui/react-infolabel/-/react-infolabel-9.0.0.tgz", + "integrity": "sha512-vp/XvPB0SbYkGjQnuygsGhGq4ccVbeo3ZRw1OfB9+o7uVDL3Z30Y+SSRkvIcu9e+2lGVU7dn+xk4KRE3un1JPw==", + "dependencies": { + "@fluentui/react-icons": "^2.0.217", + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-label": "^9.1.46", + "@fluentui/react-popover": "^9.8.17", + "@fluentui/react-tabster": "^9.14.1", + "@fluentui/react-theme": "^9.1.14", + "@fluentui/react-utilities": "^9.15.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1" }, "peerDependencies": { "@types/react": ">=16.8.0 <19.0.0", @@ -1309,652 +1331,752 @@ } }, "node_modules/@fluentui/react-input": { - "version": "9.4.16", - "resolved": "https://registry.npmjs.org/@fluentui/react-input/-/react-input-9.4.16.tgz", - "integrity": "sha512-xbeV9jG3C99NOFT89pIQR+P2vpIll2Cm4/Iio/Gu5+86Epa9Wv0aeRRmEYskVWMp69dl7LKqs7bkhpvKYOmu+w==", - "dependencies": { - "@fluentui/react-field": "^9.1.6", - "@fluentui/react-jsx-runtime": "9.0.0-alpha.6", - "@fluentui/react-shared-contexts": "^9.5.0", - "@fluentui/react-theme": "^9.1.8", - "@fluentui/react-utilities": "^9.9.2", - "@griffel/react": "^1.5.7", - "@swc/helpers": "^0.4.14" + "version": "9.4.48", + "resolved": "https://registry.npmjs.org/@fluentui/react-input/-/react-input-9.4.48.tgz", + "integrity": "sha512-uRwwkVQU+USmBMeZf2gBTD5EokVr2hTS43cU5EPWPRb5shPKPCS5OC9uXBvvJmZyqvCzibzeFzf9WRJtFX0geg==", + "dependencies": { + "@fluentui/react-field": "^9.1.38", + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-shared-contexts": "^9.10.0", + "@fluentui/react-theme": "^9.1.14", + "@fluentui/react-utilities": "^9.15.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.8.0 <19.0.0", - "@types/react-dom": ">=16.8.0 <19.0.0", - "react": ">=16.8.0 <19.0.0", - "react-dom": ">=16.8.0 <19.0.0" + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.14.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" } }, "node_modules/@fluentui/react-jsx-runtime": { - "version": "9.0.0-alpha.6", - "resolved": "https://registry.npmjs.org/@fluentui/react-jsx-runtime/-/react-jsx-runtime-9.0.0-alpha.6.tgz", - "integrity": "sha512-in382HEVLAHfTVelJ0H+X5tpenydXe/8eaVTk64X/P48uLcye6MZBQG1jhUxCnRL7ZNu7bB8ya1VXF0GsdTt0g==", + "version": "9.0.18", + "resolved": "https://registry.npmjs.org/@fluentui/react-jsx-runtime/-/react-jsx-runtime-9.0.18.tgz", + "integrity": "sha512-uGuVSWwnNa6LrsPmTcqrF5xkjfc4RffUERART2Z4ojfn1wq7rhLOdWmCcEBnbYl1AhPvD1ohOLc8EqDrlrYPHw==", "dependencies": { - "@fluentui/react-utilities": "^9.9.2", - "@swc/helpers": "^0.4.14" + "@fluentui/react-utilities": "^9.15.1", + "@swc/helpers": "^0.5.1", + "react-is": "^17.0.2" }, "peerDependencies": { - "@types/react": ">=16.8.0 <19.0.0", - "react": ">=16.8.0 <19.0.0" + "@types/react": ">=16.14.0 <19.0.0", + "react": ">=16.14.0 <19.0.0" } }, + "node_modules/@fluentui/react-jsx-runtime/node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" + }, "node_modules/@fluentui/react-label": { - "version": "9.1.15", - "resolved": "https://registry.npmjs.org/@fluentui/react-label/-/react-label-9.1.15.tgz", - "integrity": "sha512-LGPdzlOi6tasfFHqa+N3l9lgAQfipBniVpa0dd9IiGjNvx15ZZPGSSjGs6KkMiPxkIMizJN26OGZ8bXbR3ObgQ==", + "version": "9.1.46", + "resolved": "https://registry.npmjs.org/@fluentui/react-label/-/react-label-9.1.46.tgz", + "integrity": "sha512-BCI6m2PmWbdTAkqpRZ+3nwkHJs1adIIXRuX7ZdUHIlEdW6NzNEB7CljC/35UrQpWAtQvFnPp7fEBRlqyQSpJ2g==", "dependencies": { - "@fluentui/react-jsx-runtime": "9.0.0-alpha.6", - "@fluentui/react-shared-contexts": "^9.5.0", - "@fluentui/react-theme": "^9.1.8", - "@fluentui/react-utilities": "^9.9.2", - "@griffel/react": "^1.5.7", - "@swc/helpers": "^0.4.14" + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-shared-contexts": "^9.10.0", + "@fluentui/react-theme": "^9.1.14", + "@fluentui/react-utilities": "^9.15.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.8.0 <19.0.0", - "@types/react-dom": ">=16.8.0 <19.0.0", - "react": ">=16.8.0 <19.0.0", - "react-dom": ">=16.8.0 <19.0.0" + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.14.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" } }, "node_modules/@fluentui/react-link": { - "version": "9.0.42", - "resolved": "https://registry.npmjs.org/@fluentui/react-link/-/react-link-9.0.42.tgz", - "integrity": "sha512-PJYSUbxikQQVq01v0UwT5hfaZ0jT/aUDvnLDrH96boY8SOyh1zyTIFbrjnOvgLpFeoE4rO+koXb0mVxBW5t4yg==", - "dependencies": { - "@fluentui/keyboard-keys": "^9.0.3", - "@fluentui/react-jsx-runtime": "9.0.0-alpha.6", - "@fluentui/react-tabster": "^9.7.5", - "@fluentui/react-theme": "^9.1.8", - "@fluentui/react-utilities": "^9.9.2", - "@griffel/react": "^1.5.7", - "@swc/helpers": "^0.4.14" + "version": "9.1.30", + "resolved": "https://registry.npmjs.org/@fluentui/react-link/-/react-link-9.1.30.tgz", + "integrity": "sha512-j7hckSz4xZ7Sf/OXfeFVKS+gTphyhMMpxmP4eHgfOeYLSr23+kLqG6F5oothihdOYKyZ22yba+71nY1IMP3jTA==", + "dependencies": { + "@fluentui/keyboard-keys": "^9.0.6", + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-shared-contexts": "^9.10.0", + "@fluentui/react-tabster": "^9.14.1", + "@fluentui/react-theme": "^9.1.14", + "@fluentui/react-utilities": "^9.15.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.8.0 <19.0.0", - "@types/react-dom": ">=16.8.0 <19.0.0", - "react": ">=16.8.0 <19.0.0", - "react-dom": ">=16.8.0 <19.0.0" + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.14.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" } }, "node_modules/@fluentui/react-menu": { - "version": "9.7.16", - "resolved": "https://registry.npmjs.org/@fluentui/react-menu/-/react-menu-9.7.16.tgz", - "integrity": "sha512-iVbBlFpQRO8STLa5cLF4v4wYdfPTVZsT27+E7JYhA1nmHJI8pwED22sTCVSPIGXVT58I5N8aVnQS4o6qf1YMmQ==", - "dependencies": { - "@fluentui/keyboard-keys": "^9.0.3", - "@fluentui/react-aria": "^9.3.22", - "@fluentui/react-context-selector": "^9.1.22", - "@fluentui/react-icons": "^2.0.196", - "@fluentui/react-jsx-runtime": "9.0.0-alpha.6", - "@fluentui/react-portal": "^9.2.12", - "@fluentui/react-positioning": "^9.6.0", - "@fluentui/react-shared-contexts": "^9.5.0", - "@fluentui/react-tabster": "^9.7.5", - "@fluentui/react-theme": "^9.1.8", - "@fluentui/react-utilities": "^9.9.2", - "@griffel/react": "^1.5.7", - "@swc/helpers": "^0.4.14" + "version": "9.12.28", + "resolved": "https://registry.npmjs.org/@fluentui/react-menu/-/react-menu-9.12.28.tgz", + "integrity": "sha512-3nWGWftJd69Ap4pcFa8p2VUtnjm+OOqBX8v+FN3z0Xyhyzdu6SYJquMMsr0YBnRFiuX0kodUqMg42PypaIo9fw==", + "dependencies": { + "@fluentui/keyboard-keys": "^9.0.6", + "@fluentui/react-aria": "^9.3.43", + "@fluentui/react-context-selector": "^9.1.41", + "@fluentui/react-icons": "^2.0.217", + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-portal": "^9.3.25", + "@fluentui/react-positioning": "^9.9.21", + "@fluentui/react-shared-contexts": "^9.10.0", + "@fluentui/react-tabster": "^9.14.1", + "@fluentui/react-theme": "^9.1.14", + "@fluentui/react-utilities": "^9.15.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1" + }, + "peerDependencies": { + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.14.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0", + "scheduler": "^0.19.0 || ^0.20.0" + } + }, + "node_modules/@fluentui/react-message-bar": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/@fluentui/react-message-bar/-/react-message-bar-9.0.2.tgz", + "integrity": "sha512-EKu84Nb04DN+GrawhsQ4lJaZ8X3OjOVYrrhrFBWn/6Eg9V1FWf4UFTxSLwdw7HR/IaokvWn8+lRIPqwHwMdGQg==", + "dependencies": { + "@fluentui/react-button": "^9.3.51", + "@fluentui/react-icons": "^2.0.217", + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-shared-contexts": "^9.10.0", + "@fluentui/react-theme": "^9.1.14", + "@fluentui/react-utilities": "^9.15.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1", + "react-transition-group": "^4.4.1" }, "peerDependencies": { "@types/react": ">=16.8.0 <19.0.0", "@types/react-dom": ">=16.8.0 <19.0.0", "react": ">=16.8.0 <19.0.0", - "react-dom": ">=16.8.0 <19.0.0", - "scheduler": "^0.19.0 || ^0.20.0" + "react-dom": ">=16.8.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-motion-preview": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/@fluentui/react-motion-preview/-/react-motion-preview-0.3.4.tgz", + "integrity": "sha512-5Ru/uoLEMQVDEHJIqfs8TZPN38ABZlVgcnBHmfpYwF+zuL6RgP8VQehGSgDpD/eZ2YLHqa6Cl9uNWZYK4ouXNQ==", + "dependencies": { + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-shared-contexts": "^9.10.0", + "@fluentui/react-theme": "^9.1.14", + "@fluentui/react-utilities": "^9.15.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1" + }, + "peerDependencies": { + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.14.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" } }, "node_modules/@fluentui/react-overflow": { - "version": "9.0.19", - "resolved": "https://registry.npmjs.org/@fluentui/react-overflow/-/react-overflow-9.0.19.tgz", - "integrity": "sha512-78bHljbIUiIkS9Qhdq7SSwefl7mUb92ps9N72P+AYz2oJITEXZyDtgt2LF7Ktb9qWTx1IOis4GzGeskhTTRZsw==", + "version": "9.0.41", + "resolved": "https://registry.npmjs.org/@fluentui/react-overflow/-/react-overflow-9.0.41.tgz", + "integrity": "sha512-zqBiSoqYqmlUt1bQS1+AyhRN57UsYeZE0sj2vUh2e9k03tSCAzijG3OPE3wzKnTsaFg0Ug8p2OTaeL6rytHEJQ==", "dependencies": { - "@fluentui/priority-overflow": "^9.0.3", - "@fluentui/react-context-selector": "^9.1.22", - "@fluentui/react-theme": "^9.1.8", - "@fluentui/react-utilities": "^9.9.2", - "@griffel/react": "^1.5.7", - "@swc/helpers": "^0.4.14" + "@fluentui/priority-overflow": "^9.1.8", + "@fluentui/react-context-selector": "^9.1.41", + "@fluentui/react-theme": "^9.1.14", + "@fluentui/react-utilities": "^9.15.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.8.0 <19.0.0", - "@types/react-dom": ">=16.8.0 <19.0.0", - "react": ">=16.8.0 <19.0.0", - "react-dom": ">=16.8.0 <19.0.0", + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.14.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0", "scheduler": "^0.19.0 || ^0.20.0" } }, "node_modules/@fluentui/react-persona": { - "version": "9.2.15", - "resolved": "https://registry.npmjs.org/@fluentui/react-persona/-/react-persona-9.2.15.tgz", - "integrity": "sha512-7CZ8H6cTomHA2iGtjscFoGoJO0oHVTnf56IZahoo34V06QLZnnIfotDv+t1B+20tv6e2pEpdZOJqp/bD9AjpFQ==", - "dependencies": { - "@fluentui/react-avatar": "^9.5.5", - "@fluentui/react-badge": "^9.1.15", - "@fluentui/react-jsx-runtime": "9.0.0-alpha.6", - "@fluentui/react-shared-contexts": "^9.5.0", - "@fluentui/react-theme": "^9.1.8", - "@fluentui/react-utilities": "^9.9.2", - "@griffel/react": "^1.5.7", - "@swc/helpers": "^0.4.14" + "version": "9.2.52", + "resolved": "https://registry.npmjs.org/@fluentui/react-persona/-/react-persona-9.2.52.tgz", + "integrity": "sha512-oAd21HdByuVZr7S3kEuyWUAAEjCXyfg13472k0DnyzDVSyIhlV823s2xFn+lis5OSk8iubbjLm7LAsnn1NlZxg==", + "dependencies": { + "@fluentui/react-avatar": "^9.5.42", + "@fluentui/react-badge": "^9.2.10", + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-shared-contexts": "^9.10.0", + "@fluentui/react-theme": "^9.1.14", + "@fluentui/react-utilities": "^9.15.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.8.0 <19.0.0", - "@types/react-dom": ">=16.8.0 <19.0.0", - "react": ">=16.8.0 <19.0.0", - "react-dom": ">=16.8.0 <19.0.0" + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.14.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" } }, "node_modules/@fluentui/react-popover": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/@fluentui/react-popover/-/react-popover-9.6.0.tgz", - "integrity": "sha512-0OAjUICqP7UqNm0tMT+AfVs7OWmITfPThUsvEUJmQQsmFhAmHCgwIt5QwdLv5z5IGe+ZDWL8GBAkAgflECDcgw==", - "dependencies": { - "@fluentui/keyboard-keys": "^9.0.3", - "@fluentui/react-aria": "^9.3.22", - "@fluentui/react-context-selector": "^9.1.22", - "@fluentui/react-jsx-runtime": "9.0.0-alpha.6", - "@fluentui/react-portal": "^9.2.12", - "@fluentui/react-positioning": "^9.6.0", - "@fluentui/react-shared-contexts": "^9.5.0", - "@fluentui/react-tabster": "^9.7.5", - "@fluentui/react-theme": "^9.1.8", - "@fluentui/react-utilities": "^9.9.2", - "@griffel/react": "^1.5.7", - "@swc/helpers": "^0.4.14" + "version": "9.8.17", + "resolved": "https://registry.npmjs.org/@fluentui/react-popover/-/react-popover-9.8.17.tgz", + "integrity": "sha512-TI4CGAqIRwQzAVeYvyeewy6nvL2sO80XRfRSzFWH9+YS1SMt6cZKNuhFhHI9Mdx2umWoBSUxwODXhhNMpjmJFA==", + "dependencies": { + "@fluentui/keyboard-keys": "^9.0.6", + "@fluentui/react-aria": "^9.3.43", + "@fluentui/react-context-selector": "^9.1.41", + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-portal": "^9.3.25", + "@fluentui/react-positioning": "^9.9.21", + "@fluentui/react-shared-contexts": "^9.10.0", + "@fluentui/react-tabster": "^9.14.1", + "@fluentui/react-theme": "^9.1.14", + "@fluentui/react-utilities": "^9.15.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.8.0 <19.0.0", - "@types/react-dom": ">=16.8.0 <19.0.0", - "react": ">=16.8.0 <19.0.0", - "react-dom": ">=16.8.0 <19.0.0", + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.14.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0", "scheduler": "^0.19.0 || ^0.20.0" } }, "node_modules/@fluentui/react-portal": { - "version": "9.2.12", - "resolved": "https://registry.npmjs.org/@fluentui/react-portal/-/react-portal-9.2.12.tgz", - "integrity": "sha512-VEdd8v/12p+oIY37ZYf3FCqW2H7q/mwbcieDJI9NeziZoN/zQYPQgyU3bXh/OsafC5vnIIwbNhV/jKFOaKhqow==", - "dependencies": { - "@fluentui/react-shared-contexts": "^9.5.0", - "@fluentui/react-tabster": "^9.7.5", - "@fluentui/react-utilities": "^9.9.2", - "@griffel/react": "^1.5.7", - "@swc/helpers": "^0.4.14", + "version": "9.3.25", + "resolved": "https://registry.npmjs.org/@fluentui/react-portal/-/react-portal-9.3.25.tgz", + "integrity": "sha512-8rFv4CvmMvNdaOyfOnfp2gM2mbrSpZuHhZGSYeWYXeSRFDRlm5uRlCHoCZy2Q2C08ye8OmNp61xBSgPVJzNd9Q==", + "dependencies": { + "@fluentui/react-shared-contexts": "^9.10.0", + "@fluentui/react-tabster": "^9.14.1", + "@fluentui/react-utilities": "^9.15.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1", "use-disposable": "^1.0.1" }, "peerDependencies": { - "@types/react": ">=16.8.0 <19.0.0", - "@types/react-dom": ">=16.8.0 <19.0.0", - "react": ">=16.8.0 <19.0.0", - "react-dom": ">=16.8.0 <19.0.0" + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.14.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" } }, "node_modules/@fluentui/react-portal-compat-context": { - "version": "9.0.6", - "resolved": "https://registry.npmjs.org/@fluentui/react-portal-compat-context/-/react-portal-compat-context-9.0.6.tgz", - "integrity": "sha512-HUt0/YXKRB4chtzlGbZ+7y7FHFyqaI0CeMFAe/QBXVOiOwA01QOr2j4Uky+30vupspIt6mjodLanuw1jMybmqQ==", + "version": "9.0.10", + "resolved": "https://registry.npmjs.org/@fluentui/react-portal-compat-context/-/react-portal-compat-context-9.0.10.tgz", + "integrity": "sha512-l38C+tGb76yyFQ9sxUrY8DDyp2hoYru3pISFivPitFgkP6nqlnZPNd8yPE48RuVWjMhTKQ/1uCdE6ymBH9wBZQ==", "dependencies": { - "@swc/helpers": "^0.4.14" + "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.8.0 <19.0.0", - "react": ">=16.8.0 <19.0.0" + "@types/react": ">=16.14.0 <19.0.0", + "react": ">=16.14.0 <19.0.0" } }, "node_modules/@fluentui/react-positioning": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/@fluentui/react-positioning/-/react-positioning-9.6.0.tgz", - "integrity": "sha512-Sx1gXj2SMm+iF0bTDhevsCZkR6QpvBFuvJ8P447ts/1pN+XT9vXq/WJsrIbCLqK7TLeT9Xxl0rjevGoTt9yaSw==", + "version": "9.9.21", + "resolved": "https://registry.npmjs.org/@fluentui/react-positioning/-/react-positioning-9.9.21.tgz", + "integrity": "sha512-4n3W8WTbEbkcnk3XhxXgFTgF7SSR9FxKfzsHDe56fUgVnpsIcKuR2BZw5sUYDEKVpw/qcxj4aNk/4i4fIPufAw==", "dependencies": { "@floating-ui/dom": "^1.2.0", - "@fluentui/react-shared-contexts": "^9.5.0", - "@fluentui/react-theme": "^9.1.8", - "@fluentui/react-utilities": "^9.9.2", - "@griffel/react": "^1.5.7", - "@swc/helpers": "^0.4.14" + "@fluentui/react-shared-contexts": "^9.10.0", + "@fluentui/react-theme": "^9.1.14", + "@fluentui/react-utilities": "^9.15.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.8.0 <19.0.0", - "@types/react-dom": ">=16.8.0 <19.0.0", - "react": ">=16.8.0 <19.0.0", - "react-dom": ">=16.8.0 <19.0.0" + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.14.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" } }, "node_modules/@fluentui/react-progress": { - "version": "9.1.16", - "resolved": "https://registry.npmjs.org/@fluentui/react-progress/-/react-progress-9.1.16.tgz", - "integrity": "sha512-eVmKu1HcocQaDythgTZgSSzXt+f8NW6fOCdDX5hTG0Xug/5ohpBcbuumhNiZNTxyWHgN4l6ZzPr+h4jyHZdmvQ==", - "dependencies": { - "@fluentui/react-field": "^9.1.6", - "@fluentui/react-jsx-runtime": "9.0.0-alpha.6", - "@fluentui/react-shared-contexts": "^9.5.0", - "@fluentui/react-theme": "^9.1.8", - "@fluentui/react-utilities": "^9.9.2", - "@griffel/react": "^1.5.7", - "@swc/helpers": "^0.4.14" + "version": "9.1.48", + "resolved": "https://registry.npmjs.org/@fluentui/react-progress/-/react-progress-9.1.48.tgz", + "integrity": "sha512-37TOC8NGSd0yI91Xqqo3+vx8gDdqfaxWw5ensohJyMSoCiyU+r1bPR/W1WQehwYQIuDO9f8UkLhb07GTgt7I/g==", + "dependencies": { + "@fluentui/react-field": "^9.1.38", + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-shared-contexts": "^9.10.0", + "@fluentui/react-theme": "^9.1.14", + "@fluentui/react-utilities": "^9.15.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.8.0 <19.0.0", - "@types/react-dom": ">=16.8.0 <19.0.0", - "react": ">=16.8.0 <19.0.0", - "react-dom": ">=16.8.0 <19.0.0" + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.14.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" } }, "node_modules/@fluentui/react-provider": { - "version": "9.7.2", - "resolved": "https://registry.npmjs.org/@fluentui/react-provider/-/react-provider-9.7.2.tgz", - "integrity": "sha512-/D98JvSv8O7fEIv+h05LeWI9YeLw6azLSVG+9nhlETUXRVaLs0tPD94WF8hmFat9YE9CtWDcj/v502WpU/Dwdg==", - "dependencies": { - "@fluentui/react-jsx-runtime": "9.0.0-alpha.6", - "@fluentui/react-shared-contexts": "^9.5.0", - "@fluentui/react-tabster": "^9.7.5", - "@fluentui/react-theme": "^9.1.8", - "@fluentui/react-utilities": "^9.9.2", - "@griffel/core": "^1.11.0", - "@griffel/react": "^1.5.7", - "@swc/helpers": "^0.4.14" + "version": "9.10.9", + "resolved": "https://registry.npmjs.org/@fluentui/react-provider/-/react-provider-9.10.9.tgz", + "integrity": "sha512-8Qetk+lE0MOzHx+Eiu6yi2OYmN1u9PySrtvOjU9oWRbVp7gzLdFg0hd/Hzbdk0C9kIWYxOT5ImTn7HJ+I1dlbg==", + "dependencies": { + "@fluentui/react-icons": "^2.0.217", + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-shared-contexts": "^9.10.0", + "@fluentui/react-tabster": "^9.14.1", + "@fluentui/react-theme": "^9.1.14", + "@fluentui/react-utilities": "^9.15.1", + "@griffel/core": "^1.14.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.8.0 <19.0.0", - "@types/react-dom": ">=16.8.0 <19.0.0", - "react": ">=16.8.0 <19.0.0", - "react-dom": ">=16.8.0 <19.0.0" + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.14.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" } }, "node_modules/@fluentui/react-radio": { - "version": "9.1.17", - "resolved": "https://registry.npmjs.org/@fluentui/react-radio/-/react-radio-9.1.17.tgz", - "integrity": "sha512-bmpGBmYzkN0G/XbtT+slxU9BsltdmcS2wTIYgkNT1SipHzd5oFErMs4j1zjS6kgIYOfNe3N+fAMB2THR6iB13Q==", - "dependencies": { - "@fluentui/react-field": "^9.1.6", - "@fluentui/react-icons": "^2.0.196", - "@fluentui/react-jsx-runtime": "9.0.0-alpha.6", - "@fluentui/react-label": "^9.1.15", - "@fluentui/react-shared-contexts": "^9.5.0", - "@fluentui/react-tabster": "^9.7.5", - "@fluentui/react-theme": "^9.1.8", - "@fluentui/react-utilities": "^9.9.2", - "@griffel/react": "^1.5.7", - "@swc/helpers": "^0.4.14" + "version": "9.1.52", + "resolved": "https://registry.npmjs.org/@fluentui/react-radio/-/react-radio-9.1.52.tgz", + "integrity": "sha512-2bYPNk0JsutYIm1TyLN3YPxyF1soKWEVXTx6rA8iEjbQdRJSd0u1MyGNUFtkryuqxYlA0p6L7dX65RREOxu2pA==", + "dependencies": { + "@fluentui/react-field": "^9.1.38", + "@fluentui/react-icons": "^2.0.217", + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-label": "^9.1.46", + "@fluentui/react-shared-contexts": "^9.10.0", + "@fluentui/react-tabster": "^9.14.1", + "@fluentui/react-theme": "^9.1.14", + "@fluentui/react-utilities": "^9.15.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.8.0 <19.0.0", - "@types/react-dom": ">=16.8.0 <19.0.0", - "react": ">=16.8.0 <19.0.0", - "react-dom": ">=16.8.0 <19.0.0", + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.14.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0", "scheduler": "^0.19.0 || ^0.20.0" } }, "node_modules/@fluentui/react-select": { - "version": "9.1.16", - "resolved": "https://registry.npmjs.org/@fluentui/react-select/-/react-select-9.1.16.tgz", - "integrity": "sha512-LDM+wOA91FDNuvkCJZrb8cQsG5/pG7gYDjBAsRQ1SSuxmKAEx5PcPM6QwmDaU7l6E6rcMI7dndzcB94LqehzZg==", - "dependencies": { - "@fluentui/react-field": "^9.1.6", - "@fluentui/react-icons": "^2.0.196", - "@fluentui/react-jsx-runtime": "9.0.0-alpha.6", - "@fluentui/react-shared-contexts": "^9.5.0", - "@fluentui/react-theme": "^9.1.8", - "@fluentui/react-utilities": "^9.9.2", - "@griffel/react": "^1.5.7", - "@swc/helpers": "^0.4.14" + "version": "9.1.48", + "resolved": "https://registry.npmjs.org/@fluentui/react-select/-/react-select-9.1.48.tgz", + "integrity": "sha512-CmwmlcIlhnD7ojZLDWQ7fUxTo8UDJsEh+wARb4tEm5EmTZltvRhh/C5i85yUZtdWuBPcOll9OlomCX/K/Ag3+g==", + "dependencies": { + "@fluentui/react-field": "^9.1.38", + "@fluentui/react-icons": "^2.0.217", + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-shared-contexts": "^9.10.0", + "@fluentui/react-theme": "^9.1.14", + "@fluentui/react-utilities": "^9.15.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.8.0 <19.0.0", - "@types/react-dom": ">=16.8.0 <19.0.0", - "react": ">=16.8.0 <19.0.0", - "react-dom": ">=16.8.0 <19.0.0" + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.14.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" } }, "node_modules/@fluentui/react-shared-contexts": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/@fluentui/react-shared-contexts/-/react-shared-contexts-9.5.0.tgz", - "integrity": "sha512-7mPrXx81eudpwloO44VREXc710RtZrzmQVw91EGJeTUfMRdg2MgjNGcwG6C3x+K0RkAgdQ8RAMfR3MSbCQvILA==", + "version": "9.10.0", + "resolved": "https://registry.npmjs.org/@fluentui/react-shared-contexts/-/react-shared-contexts-9.10.0.tgz", + "integrity": "sha512-2ubHqWnnd2VX82wAuGV0VVOXuQMQPz3x+8cgcGDI+z0lGrBF679N8W55QuEisvnDojoe6iASxJmc311N3aRzSQ==", "dependencies": { - "@fluentui/react-theme": "^9.1.8", - "@swc/helpers": "^0.4.14" + "@fluentui/react-theme": "^9.1.14", + "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.8.0 <19.0.0", - "react": ">=16.8.0 <19.0.0" + "@types/react": ">=16.14.0 <19.0.0", + "react": ">=16.14.0 <19.0.0" } }, "node_modules/@fluentui/react-skeleton": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/@fluentui/react-skeleton/-/react-skeleton-9.0.4.tgz", - "integrity": "sha512-ImGcbjpI5URcG4v5PfCOS/PZgEBVHhMBJ9HEyLriQMjUgT8QgTiwg+y9JRA+uPq4siioffRkElOqKqJHZLRMlg==", - "dependencies": { - "@fluentui/react-field": "^9.1.6", - "@fluentui/react-jsx-runtime": "9.0.0-alpha.6", - "@fluentui/react-shared-contexts": "^9.5.0", - "@fluentui/react-theme": "^9.1.8", - "@fluentui/react-utilities": "^9.9.2", - "@griffel/react": "^1.5.7", - "@swc/helpers": "^0.4.14" + "version": "9.0.36", + "resolved": "https://registry.npmjs.org/@fluentui/react-skeleton/-/react-skeleton-9.0.36.tgz", + "integrity": "sha512-n3+t0vDUDSV6yx4qGDDh/aUQ8rkvFc2xC3evdTLPf4ovCh2rHbUpemnlkXz3m4wfnr//Fh/uXdNlITIp3duyFA==", + "dependencies": { + "@fluentui/react-field": "^9.1.38", + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-shared-contexts": "^9.10.0", + "@fluentui/react-theme": "^9.1.14", + "@fluentui/react-utilities": "^9.15.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.8.0 <19.0.0", - "@types/react-dom": ">=16.8.0 <19.0.0", - "react": ">=16.8.0 <19.0.0", - "react-dom": ">=16.8.0 <19.0.0" + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.14.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" } }, "node_modules/@fluentui/react-slider": { - "version": "9.1.17", - "resolved": "https://registry.npmjs.org/@fluentui/react-slider/-/react-slider-9.1.17.tgz", - "integrity": "sha512-2gg3JKyPb8O3bpsAEwoFLGMf6ZFeXvsvxtpHh0mbH6rVR6yazPAW0zSPGS+Y7xPw///A9iup8R9Ar46dWctlrw==", - "dependencies": { - "@fluentui/react-field": "^9.1.6", - "@fluentui/react-jsx-runtime": "9.0.0-alpha.6", - "@fluentui/react-shared-contexts": "^9.5.0", - "@fluentui/react-tabster": "^9.7.5", - "@fluentui/react-theme": "^9.1.8", - "@fluentui/react-utilities": "^9.9.2", - "@griffel/react": "^1.5.7", - "@swc/helpers": "^0.4.14" + "version": "9.1.52", + "resolved": "https://registry.npmjs.org/@fluentui/react-slider/-/react-slider-9.1.52.tgz", + "integrity": "sha512-XKDcx3V918KgGdS67TG2aGN3RWOPANrj21ouY2wPDBnsJEg0bjcmIwt+EJM2U6oliM+JqIzwGStVWR24wGm3ZA==", + "dependencies": { + "@fluentui/react-field": "^9.1.38", + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-shared-contexts": "^9.10.0", + "@fluentui/react-tabster": "^9.14.1", + "@fluentui/react-theme": "^9.1.14", + "@fluentui/react-utilities": "^9.15.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.8.0 <19.0.0", - "@types/react-dom": ">=16.8.0 <19.0.0", - "react": ">=16.8.0 <19.0.0", - "react-dom": ">=16.8.0 <19.0.0" + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.14.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" } }, "node_modules/@fluentui/react-spinbutton": { - "version": "9.2.16", - "resolved": "https://registry.npmjs.org/@fluentui/react-spinbutton/-/react-spinbutton-9.2.16.tgz", - "integrity": "sha512-PO3IcV11evj0WFYQ5ntY05ISDtIRAE8E9Q0qe27lWGRDXEeuqRrydfbZuF02rLb6IzNAV+QYXXntxXcO/+ofLA==", - "dependencies": { - "@fluentui/keyboard-keys": "^9.0.3", - "@fluentui/react-field": "^9.1.6", - "@fluentui/react-icons": "^2.0.196", - "@fluentui/react-jsx-runtime": "9.0.0-alpha.6", - "@fluentui/react-shared-contexts": "^9.5.0", - "@fluentui/react-theme": "^9.1.8", - "@fluentui/react-utilities": "^9.9.2", - "@griffel/react": "^1.5.7", - "@swc/helpers": "^0.4.14" + "version": "9.2.48", + "resolved": "https://registry.npmjs.org/@fluentui/react-spinbutton/-/react-spinbutton-9.2.48.tgz", + "integrity": "sha512-KU+Fj8y/s7aozKZ3ClGL87solxH5VG0IbpPr7TA/U1uS+sXP3NF2WBBKfaNqqsUuAYppdKKm7Hqi0qekSDAQEQ==", + "dependencies": { + "@fluentui/keyboard-keys": "^9.0.6", + "@fluentui/react-field": "^9.1.38", + "@fluentui/react-icons": "^2.0.217", + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-shared-contexts": "^9.10.0", + "@fluentui/react-theme": "^9.1.14", + "@fluentui/react-utilities": "^9.15.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.8.0 <19.0.0", - "@types/react-dom": ">=16.8.0 <19.0.0", - "react": ">=16.8.0 <19.0.0", - "react-dom": ">=16.8.0 <19.0.0" + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.14.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" } }, "node_modules/@fluentui/react-spinner": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/@fluentui/react-spinner/-/react-spinner-9.2.2.tgz", - "integrity": "sha512-QVzWLUbTZA/pIhmj3/6KYmS66S+cnVmtb4DXT1WbHFtjxaVNhbYzRPiEKqEv9uvXQdVDcWR55aAVGYtTa/AXpQ==", - "dependencies": { - "@fluentui/react-jsx-runtime": "9.0.0-alpha.6", - "@fluentui/react-label": "^9.1.15", - "@fluentui/react-shared-contexts": "^9.5.0", - "@fluentui/react-theme": "^9.1.8", - "@fluentui/react-utilities": "^9.9.2", - "@griffel/react": "^1.5.7", - "@swc/helpers": "^0.4.14" + "version": "9.3.26", + "resolved": "https://registry.npmjs.org/@fluentui/react-spinner/-/react-spinner-9.3.26.tgz", + "integrity": "sha512-RG5lURyl30Zy46Gitkz2aPaO2YRFnuMFt8nl/p0mdvN3n/Ai8KfNHXN8rqObO6BvuHZF3NowZjIpaXx63Gngiw==", + "dependencies": { + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-label": "^9.1.46", + "@fluentui/react-shared-contexts": "^9.10.0", + "@fluentui/react-theme": "^9.1.14", + "@fluentui/react-utilities": "^9.15.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.8.0 <19.0.0", - "@types/react-dom": ">=16.8.0 <19.0.0", - "react": ">=16.8.0 <19.0.0", - "react-dom": ">=16.8.0 <19.0.0" + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.14.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" } }, "node_modules/@fluentui/react-switch": { - "version": "9.1.17", - "resolved": "https://registry.npmjs.org/@fluentui/react-switch/-/react-switch-9.1.17.tgz", - "integrity": "sha512-6lmzvASB2BIWy+bld29V+fNCQJZbUDxWhjni2fRz6g4mynIROB1zgqNa1E7wJMjx32c4PZCmJAQo3PomZTOi7w==", - "dependencies": { - "@fluentui/react-field": "^9.1.6", - "@fluentui/react-icons": "^2.0.196", - "@fluentui/react-jsx-runtime": "9.0.0-alpha.6", - "@fluentui/react-label": "^9.1.15", - "@fluentui/react-shared-contexts": "^9.5.0", - "@fluentui/react-tabster": "^9.7.5", - "@fluentui/react-theme": "^9.1.8", - "@fluentui/react-utilities": "^9.9.2", - "@griffel/react": "^1.5.7", - "@swc/helpers": "^0.4.14" + "version": "9.1.52", + "resolved": "https://registry.npmjs.org/@fluentui/react-switch/-/react-switch-9.1.52.tgz", + "integrity": "sha512-cRmMeBkVpj07YIK/ma0TmzoNZMD1r5YFnmFXcy0K2mYGcFl74NQakoD/FuCqHbz4iKxgsCg1NucmDnjS+n4aHw==", + "dependencies": { + "@fluentui/react-field": "^9.1.38", + "@fluentui/react-icons": "^2.0.217", + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-label": "^9.1.46", + "@fluentui/react-shared-contexts": "^9.10.0", + "@fluentui/react-tabster": "^9.14.1", + "@fluentui/react-theme": "^9.1.14", + "@fluentui/react-utilities": "^9.15.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.8.0 <19.0.0", - "@types/react-dom": ">=16.8.0 <19.0.0", - "react": ">=16.8.0 <19.0.0", - "react-dom": ">=16.8.0 <19.0.0" + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.14.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" } }, "node_modules/@fluentui/react-table": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/@fluentui/react-table/-/react-table-9.3.0.tgz", - "integrity": "sha512-KikpnQwXOYVtLVdYUH9DWxSUCL+zUzcAvizFOPbkfyi2PRh510Huftz1JATDp303SSLJyJZ/BpOiQ9fWNGbnCg==", - "dependencies": { - "@fluentui/keyboard-keys": "^9.0.3", - "@fluentui/react-aria": "^9.3.22", - "@fluentui/react-avatar": "^9.5.5", - "@fluentui/react-checkbox": "^9.1.17", - "@fluentui/react-context-selector": "^9.1.22", - "@fluentui/react-icons": "^2.0.196", - "@fluentui/react-jsx-runtime": "9.0.0-alpha.6", - "@fluentui/react-radio": "^9.1.17", - "@fluentui/react-shared-contexts": "^9.5.0", - "@fluentui/react-tabster": "^9.7.5", - "@fluentui/react-theme": "^9.1.8", - "@fluentui/react-utilities": "^9.9.2", - "@griffel/react": "^1.5.7", - "@swc/helpers": "^0.4.14" + "version": "9.10.7", + "resolved": "https://registry.npmjs.org/@fluentui/react-table/-/react-table-9.10.7.tgz", + "integrity": "sha512-MoIwMP2a5xUj3jyZcuPwlY1NexQgs91tfhazthsYpifNkZa2JQNtDOSbHH79oU9QjN/olnkE1MkTmfiQ6rz46A==", + "dependencies": { + "@fluentui/keyboard-keys": "^9.0.6", + "@fluentui/react-aria": "^9.3.43", + "@fluentui/react-avatar": "^9.5.42", + "@fluentui/react-checkbox": "^9.1.52", + "@fluentui/react-context-selector": "^9.1.41", + "@fluentui/react-icons": "^2.0.217", + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-radio": "^9.1.52", + "@fluentui/react-shared-contexts": "^9.10.0", + "@fluentui/react-tabster": "^9.14.1", + "@fluentui/react-theme": "^9.1.14", + "@fluentui/react-utilities": "^9.15.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.8.0 <19.0.0", - "@types/react-dom": ">=16.8.0 <19.0.0", - "react": ">=16.8.0 <19.0.0", - "react-dom": ">=16.8.0 <19.0.0" + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.14.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" } }, "node_modules/@fluentui/react-tabs": { - "version": "9.3.17", - "resolved": "https://registry.npmjs.org/@fluentui/react-tabs/-/react-tabs-9.3.17.tgz", - "integrity": "sha512-Eh8ga30dvr8OuqaZm2+B9dOCozIlvkzwXdE2+gF0AyrbWcnTg5R4s4s+qYVAzUyGnTtHrSmIVzwPxSDn/ZY3bA==", - "dependencies": { - "@fluentui/react-context-selector": "^9.1.22", - "@fluentui/react-jsx-runtime": "9.0.0-alpha.6", - "@fluentui/react-shared-contexts": "^9.5.0", - "@fluentui/react-tabster": "^9.7.5", - "@fluentui/react-theme": "^9.1.8", - "@fluentui/react-utilities": "^9.9.2", - "@griffel/react": "^1.5.7", - "@swc/helpers": "^0.4.14" + "version": "9.3.53", + "resolved": "https://registry.npmjs.org/@fluentui/react-tabs/-/react-tabs-9.3.53.tgz", + "integrity": "sha512-BSipSdK1USs9Rt0yQJBWl05JrvNYb+p4huXCL2KbsvSVm/TDerFhUMXoGZZYz7/rlryERjdVjckumx0aC8RrPg==", + "dependencies": { + "@fluentui/react-context-selector": "^9.1.41", + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-shared-contexts": "^9.10.0", + "@fluentui/react-tabster": "^9.14.1", + "@fluentui/react-theme": "^9.1.14", + "@fluentui/react-utilities": "^9.15.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.8.0 <19.0.0", - "@types/react-dom": ">=16.8.0 <19.0.0", - "react": ">=16.8.0 <19.0.0", - "react-dom": ">=16.8.0 <19.0.0", + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.14.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0", "scheduler": "^0.19.0 || ^0.20.0" } }, "node_modules/@fluentui/react-tabster": { - "version": "9.7.5", - "resolved": "https://registry.npmjs.org/@fluentui/react-tabster/-/react-tabster-9.7.5.tgz", - "integrity": "sha512-1dQEDAzhurKup+DLA4xRktVBDdxnx5xXo2h0TXTuHtVOk59QheQewlTzYR5i0UHtTN3hTyo04AguLg8nnzgbTw==", - "dependencies": { - "@fluentui/react-shared-contexts": "^9.5.0", - "@fluentui/react-theme": "^9.1.8", - "@fluentui/react-utilities": "^9.9.2", - "@griffel/react": "^1.5.7", - "@swc/helpers": "^0.4.14", - "keyborg": "^2.0.0", - "tabster": "^4.4.2" + "version": "9.14.1", + "resolved": "https://registry.npmjs.org/@fluentui/react-tabster/-/react-tabster-9.14.1.tgz", + "integrity": "sha512-9TMGBLIpeCjLGL68UKec4o5cVxrb4PKzi57oWd84qqJ+jPcEm5U025uwNm568JdxcneRAV1AHFXOB91HVaLr4Q==", + "dependencies": { + "@fluentui/react-shared-contexts": "^9.10.0", + "@fluentui/react-theme": "^9.1.14", + "@fluentui/react-utilities": "^9.15.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1", + "keyborg": "^2.1.0", + "tabster": "^4.8.0" }, "peerDependencies": { - "@types/react": ">=16.8.0 <19.0.0", - "@types/react-dom": ">=16.8.0 <19.0.0", - "react": ">=16.8.0 <19.0.0", - "react-dom": ">=16.8.0 <19.0.0" + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.14.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-tags": { + "version": "9.0.6", + "resolved": "https://registry.npmjs.org/@fluentui/react-tags/-/react-tags-9.0.6.tgz", + "integrity": "sha512-NYX/nak33NyhdygBCVoPRIaKtRq8wZnXT3YD3p4Iy2WC9d24lg4uy5vS5V3PqgYS7zOPWJ9uSyfUWv0kP/KclA==", + "dependencies": { + "@fluentui/keyboard-keys": "^9.0.6", + "@fluentui/react-aria": "^9.3.43", + "@fluentui/react-avatar": "^9.5.42", + "@fluentui/react-icons": "^2.0.217", + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-shared-contexts": "^9.10.0", + "@fluentui/react-tabster": "^9.14.1", + "@fluentui/react-theme": "^9.1.14", + "@fluentui/react-utilities": "^9.15.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1" + }, + "peerDependencies": { + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.14.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" } }, "node_modules/@fluentui/react-text": { - "version": "9.3.12", - "resolved": "https://registry.npmjs.org/@fluentui/react-text/-/react-text-9.3.12.tgz", - "integrity": "sha512-h4Mq4nKslIi8TR9ysn4Cy1AYtg9j896qQ2HZiTYZmGP9HYCqF3X/3A7ce0eyZimrcXn1zl4iaR6t1LUFRqOC5Q==", + "version": "9.3.43", + "resolved": "https://registry.npmjs.org/@fluentui/react-text/-/react-text-9.3.43.tgz", + "integrity": "sha512-kSDE3tWEXZdOOWrVcmAVkhQAFxWsaMz/ETlBzsHNvVcZ6iJIscRY/JCxbBFxBUh30QxegTMMENaExrt9KJZQsQ==", "dependencies": { - "@fluentui/react-jsx-runtime": "9.0.0-alpha.6", - "@fluentui/react-shared-contexts": "^9.5.0", - "@fluentui/react-theme": "^9.1.8", - "@fluentui/react-utilities": "^9.9.2", - "@griffel/react": "^1.5.7", - "@swc/helpers": "^0.4.14" + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-shared-contexts": "^9.10.0", + "@fluentui/react-theme": "^9.1.14", + "@fluentui/react-utilities": "^9.15.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.8.0 <19.0.0", - "@types/react-dom": ">=16.8.0 <19.0.0", - "react": ">=16.8.0 <19.0.0", - "react-dom": ">=16.8.0 <19.0.0" + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.14.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" } }, "node_modules/@fluentui/react-textarea": { - "version": "9.3.16", - "resolved": "https://registry.npmjs.org/@fluentui/react-textarea/-/react-textarea-9.3.16.tgz", - "integrity": "sha512-hMccy65V4QTBMJCI3jR79+nGKh+vIQi+5pdmhEsAZ5fjODDvi/JViGf12MDxbKnmSz1IHKhFayvdhNlt41nQRg==", - "dependencies": { - "@fluentui/react-field": "^9.1.6", - "@fluentui/react-jsx-runtime": "9.0.0-alpha.6", - "@fluentui/react-shared-contexts": "^9.5.0", - "@fluentui/react-theme": "^9.1.8", - "@fluentui/react-utilities": "^9.9.2", - "@griffel/react": "^1.5.7", - "@swc/helpers": "^0.4.14" + "version": "9.3.48", + "resolved": "https://registry.npmjs.org/@fluentui/react-textarea/-/react-textarea-9.3.48.tgz", + "integrity": "sha512-OSA10BXvyx+fRB5zRnXMODOKtSfxSLPdBLctglNU57oezAkuNipTg12iJj5gvXJQHbrjPSgZaxikdPvHo4tzpQ==", + "dependencies": { + "@fluentui/react-field": "^9.1.38", + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-shared-contexts": "^9.10.0", + "@fluentui/react-theme": "^9.1.14", + "@fluentui/react-utilities": "^9.15.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.8.0 <19.0.0", - "@types/react-dom": ">=16.8.0 <19.0.0", - "react": ">=16.8.0 <19.0.0", - "react-dom": ">=16.8.0 <19.0.0" + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.14.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" } }, "node_modules/@fluentui/react-theme": { - "version": "9.1.8", - "resolved": "https://registry.npmjs.org/@fluentui/react-theme/-/react-theme-9.1.8.tgz", - "integrity": "sha512-KXSPSfg29sHEHw9rFpZjKTU4KwY4F4kxZIcqA83Kz8Khnfw17NiWmz8XcmxXaMUlqfwVRxBIM9um2uFE5gjcpw==", - "dependencies": { - "@fluentui/tokens": "1.0.0-alpha.5", - "@swc/helpers": "^0.4.14" + "version": "9.1.14", + "resolved": "https://registry.npmjs.org/@fluentui/react-theme/-/react-theme-9.1.14.tgz", + "integrity": "sha512-Lc76jjNETV6gOFlE8b03WxcztdMhrYlj7eu6ZfRWtS6jJvyLka2BMm4ES8RyPPKmdbLnN/+BuOE6YySBs2qamg==", + "dependencies": { + "@fluentui/tokens": "1.0.0-alpha.11", + "@swc/helpers": "^0.5.1" + } + }, + "node_modules/@fluentui/react-toast": { + "version": "9.3.13", + "resolved": "https://registry.npmjs.org/@fluentui/react-toast/-/react-toast-9.3.13.tgz", + "integrity": "sha512-wHqCDsHdweGR6tSdUYWq6B/NhhkFn4TWpyShz10JJU5i16JV9hw1jvoAsOm+OLO3uudb7IWx2j8p/mQaYgJrww==", + "dependencies": { + "@fluentui/keyboard-keys": "^9.0.6", + "@fluentui/react-aria": "^9.3.43", + "@fluentui/react-icons": "^2.0.217", + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-portal": "^9.3.25", + "@fluentui/react-shared-contexts": "^9.10.0", + "@fluentui/react-tabster": "^9.14.1", + "@fluentui/react-theme": "^9.1.14", + "@fluentui/react-utilities": "^9.15.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1", + "react-transition-group": "^4.4.1" + }, + "peerDependencies": { + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.14.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" } }, "node_modules/@fluentui/react-toolbar": { - "version": "9.1.17", - "resolved": "https://registry.npmjs.org/@fluentui/react-toolbar/-/react-toolbar-9.1.17.tgz", - "integrity": "sha512-+i3B/CCA3yMAWuFU5Tg3fex2UEK0yw60gw8M4zzbK/AOzej2AXoH0lU2SIWzN7Y/zDWyzYHMWH+Uj1YQD3DSjw==", - "dependencies": { - "@fluentui/react-button": "^9.3.16", - "@fluentui/react-context-selector": "^9.1.22", - "@fluentui/react-divider": "^9.2.15", - "@fluentui/react-jsx-runtime": "9.0.0-alpha.6", - "@fluentui/react-radio": "^9.1.17", - "@fluentui/react-shared-contexts": "^9.5.0", - "@fluentui/react-tabster": "^9.7.5", - "@fluentui/react-theme": "^9.1.8", - "@fluentui/react-utilities": "^9.9.2", - "@griffel/react": "^1.5.7", - "@swc/helpers": "^0.4.14" + "version": "9.1.52", + "resolved": "https://registry.npmjs.org/@fluentui/react-toolbar/-/react-toolbar-9.1.52.tgz", + "integrity": "sha512-8dlLjQUVY7GoVfzugoyRU/1v2123VWe0hHsbPOl7oSG7Pv2MWWxThZ5D0uA+MqzbhnrzuWOI7DjMFpD4z/JTFw==", + "dependencies": { + "@fluentui/react-button": "^9.3.51", + "@fluentui/react-context-selector": "^9.1.41", + "@fluentui/react-divider": "^9.2.46", + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-radio": "^9.1.52", + "@fluentui/react-shared-contexts": "^9.10.0", + "@fluentui/react-tabster": "^9.14.1", + "@fluentui/react-theme": "^9.1.14", + "@fluentui/react-utilities": "^9.15.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.8.0 <19.0.0", - "@types/react-dom": ">=16.8.0 <19.0.0", - "react": ">=16.8.0 <19.0.0", - "react-dom": ">=16.8.0 <19.0.0" + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.14.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" } }, "node_modules/@fluentui/react-tooltip": { - "version": "9.2.16", - "resolved": "https://registry.npmjs.org/@fluentui/react-tooltip/-/react-tooltip-9.2.16.tgz", - "integrity": "sha512-R1DhKCILILzSLCJPig01KqKhqnEH91NoBjHwCfwua8qE9neWUwSD3JSO+dmEfbxFTPfCkrkPrbnuCXb8imu2ig==", - "dependencies": { - "@fluentui/keyboard-keys": "^9.0.3", - "@fluentui/react-jsx-runtime": "9.0.0-alpha.6", - "@fluentui/react-portal": "^9.2.12", - "@fluentui/react-positioning": "^9.6.0", - "@fluentui/react-shared-contexts": "^9.5.0", - "@fluentui/react-theme": "^9.1.8", - "@fluentui/react-utilities": "^9.9.2", - "@griffel/react": "^1.5.7", - "@swc/helpers": "^0.4.14" + "version": "9.3.18", + "resolved": "https://registry.npmjs.org/@fluentui/react-tooltip/-/react-tooltip-9.3.18.tgz", + "integrity": "sha512-CRIh4qSr0CPb4So9WD8ykCzGUwOWwWN6Grza4A5f113W2yOLz4LWK1p75xdxKVnczkvwlPfL36F9K42m3IREIg==", + "dependencies": { + "@fluentui/keyboard-keys": "^9.0.6", + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-portal": "^9.3.25", + "@fluentui/react-positioning": "^9.9.21", + "@fluentui/react-shared-contexts": "^9.10.0", + "@fluentui/react-theme": "^9.1.14", + "@fluentui/react-utilities": "^9.15.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.8.0 <19.0.0", - "@types/react-dom": ">=16.8.0 <19.0.0", - "react": ">=16.8.0 <19.0.0", - "react-dom": ">=16.8.0 <19.0.0" + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.14.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" } }, "node_modules/@fluentui/react-tree": { - "version": "9.0.0-beta.18", - "resolved": "https://registry.npmjs.org/@fluentui/react-tree/-/react-tree-9.0.0-beta.18.tgz", - "integrity": "sha512-ILbm+REJhuYXV88XXyL31Vwqx9vo/LLQE/pOom0iAjG+P6FYm8w1YemSJ+1IQ5PAkKUbfnYWTujx1fLEdXHNAQ==", - "dependencies": { - "@fluentui/keyboard-keys": "^9.0.3", - "@fluentui/react-aria": "^9.3.22", - "@fluentui/react-avatar": "^9.5.5", - "@fluentui/react-button": "^9.3.16", - "@fluentui/react-context-selector": "^9.1.22", - "@fluentui/react-icons": "^2.0.196", - "@fluentui/react-jsx-runtime": "9.0.0-alpha.6", - "@fluentui/react-portal": "^9.2.12", - "@fluentui/react-shared-contexts": "^9.5.0", - "@fluentui/react-tabster": "^9.7.5", - "@fluentui/react-theme": "^9.1.8", - "@fluentui/react-utilities": "^9.9.2", - "@griffel/react": "^1.5.7", - "@swc/helpers": "^0.4.14" + "version": "9.4.7", + "resolved": "https://registry.npmjs.org/@fluentui/react-tree/-/react-tree-9.4.7.tgz", + "integrity": "sha512-DpYv2MlgkxBX5/pW/M5AiEuYoXzIUQiNWYfCPsfyMqiGcmTRj3ll0hNvcMm4VVT/020qws5nVVCgG4I98VJTFg==", + "dependencies": { + "@fluentui/keyboard-keys": "^9.0.6", + "@fluentui/react-aria": "^9.3.43", + "@fluentui/react-avatar": "^9.5.42", + "@fluentui/react-button": "^9.3.51", + "@fluentui/react-checkbox": "^9.1.52", + "@fluentui/react-context-selector": "^9.1.41", + "@fluentui/react-icons": "^2.0.217", + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-radio": "^9.1.52", + "@fluentui/react-shared-contexts": "^9.10.0", + "@fluentui/react-tabster": "^9.14.1", + "@fluentui/react-theme": "^9.1.14", + "@fluentui/react-utilities": "^9.15.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.8.0 <19.0.0", - "@types/react-dom": ">=16.8.0 <19.0.0", - "react": ">=16.8.0 <19.0.0", - "react-dom": ">=16.8.0 <19.0.0" + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.14.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" } }, "node_modules/@fluentui/react-utilities": { - "version": "9.9.2", - "resolved": "https://registry.npmjs.org/@fluentui/react-utilities/-/react-utilities-9.9.2.tgz", - "integrity": "sha512-jFUI11aTpk+EbVm3zYWJwW57Wz4TbR0RSoNPqERpSiOCw4tTEd1Xp4PiBWeknhreXsYwSdrxYBGMXOKIrY3zdg==", + "version": "9.15.1", + "resolved": "https://registry.npmjs.org/@fluentui/react-utilities/-/react-utilities-9.15.1.tgz", + "integrity": "sha512-BQz4SIcdORTJyVrl1KyiKKqawy9SUj+/m4raxIllLHSZyfFgnDHDVLv4YFlZjTRqaqtx16V53atyUu2MtsU3DA==", "dependencies": { - "@fluentui/keyboard-keys": "^9.0.3", - "@swc/helpers": "^0.4.14" + "@fluentui/keyboard-keys": "^9.0.6", + "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.8.0 <19.0.0", - "react": ">=16.8.0 <19.0.0" + "@types/react": ">=16.14.0 <19.0.0", + "react": ">=16.14.0 <19.0.0" } }, "node_modules/@fluentui/react-virtualizer": { - "version": "9.0.0-alpha.22", - "resolved": "https://registry.npmjs.org/@fluentui/react-virtualizer/-/react-virtualizer-9.0.0-alpha.22.tgz", - "integrity": "sha512-w/86u6MwZGo11kwAT32dCLstd23No7BhHJzo0HO13A4rjjN6vUrdh6NTKzyAxRcdHJp0hVG+TJMbs8oWZo2Bww==", + "version": "9.0.0-alpha.53", + "resolved": "https://registry.npmjs.org/@fluentui/react-virtualizer/-/react-virtualizer-9.0.0-alpha.53.tgz", + "integrity": "sha512-3fMq4cyBQ8YQJFxMQy9CcrVscNRuMlOxb7cmvgIuOCZEcputn4ncLf8/7S6ax1GVrzY7lo8owzYRxxnCeehZ0g==", "dependencies": { - "@fluentui/react-jsx-runtime": "9.0.0-alpha.6", - "@fluentui/react-utilities": "^9.9.2", - "@griffel/react": "^1.5.7", - "@swc/helpers": "^0.4.14" + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-shared-contexts": "^9.10.0", + "@fluentui/react-utilities": "^9.15.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.8.0 <19.0.0", - "@types/react-dom": ">=16.8.0 <19.0.0", - "react": ">=16.8.0 <19.0.0", - "react-dom": ">=16.8.0 <19.0.0" + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.14.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" } }, "node_modules/@fluentui/react-window-provider": { - "version": "2.2.15", - "resolved": "https://registry.npmjs.org/@fluentui/react-window-provider/-/react-window-provider-2.2.15.tgz", - "integrity": "sha512-RraWvRe7wakpPJRBX2tlCV/cybOKiqLJ1UBLPNf5xq7ZIs0T0g/hh3G3Zb5teOeipjuRnl6srkdDUT9Dy9wrBg==", + "version": "2.2.16", + "resolved": "https://registry.npmjs.org/@fluentui/react-window-provider/-/react-window-provider-2.2.16.tgz", + "integrity": "sha512-4gkUMSAUjo3cgCGt+0VvTbMy9qbF6zo/cmmfYtfqbSFtXz16lKixSCMIf66gXdKjovqRGVFC/XibqfrXM2QLuw==", "dependencies": { - "@fluentui/set-version": "^8.2.11", + "@fluentui/set-version": "^8.2.12", "tslib": "^2.1.0" }, "peerDependencies": { @@ -1963,34 +2085,34 @@ } }, "node_modules/@fluentui/set-version": { - "version": "8.2.11", - "resolved": "https://registry.npmjs.org/@fluentui/set-version/-/set-version-8.2.11.tgz", - "integrity": "sha512-UI03tysau/adBO1a3q4uFZWQ3lfkiFcAWIFng4k5odWcCokfCm5IxA0urKqj5W5JRYdyoBUaq8QbcNGkFB4dCw==", + "version": "8.2.12", + "resolved": "https://registry.npmjs.org/@fluentui/set-version/-/set-version-8.2.12.tgz", + "integrity": "sha512-I4uXIg9xkL2Heotf1+7CyGcHQskdtMSH0B5mSV0TL3w7WI2qpnzrpKuP2Kq6DHZN6Xrsg4ORFNJSjLxq/s9cUQ==", "dependencies": { "tslib": "^2.1.0" } }, "node_modules/@fluentui/style-utilities": { - "version": "8.9.16", - "resolved": "https://registry.npmjs.org/@fluentui/style-utilities/-/style-utilities-8.9.16.tgz", - "integrity": "sha512-8hS5HscCFYvcWjAdk37frPZJZthr7f/cu5db7gjrPy+DEhf13WAZRHsropWm17+8GhJhvKt98BQf/Kzxtt34Eg==", - "dependencies": { - "@fluentui/merge-styles": "^8.5.12", - "@fluentui/set-version": "^8.2.11", - "@fluentui/theme": "^2.6.34", - "@fluentui/utilities": "^8.13.18", + "version": "8.9.20", + "resolved": "https://registry.npmjs.org/@fluentui/style-utilities/-/style-utilities-8.9.20.tgz", + "integrity": "sha512-oj0ghn21DnqCardlcEp+zob3IEAfA/Z7ZjzuYqlHuPUItwRqGmpr1wErssRC4R1kHsH6gq9ALxVgMa4/FvdzGg==", + "dependencies": { + "@fluentui/merge-styles": "^8.5.13", + "@fluentui/set-version": "^8.2.12", + "@fluentui/theme": "^2.6.38", + "@fluentui/utilities": "^8.13.21", "@microsoft/load-themed-styles": "^1.10.26", "tslib": "^2.1.0" } }, "node_modules/@fluentui/theme": { - "version": "2.6.34", - "resolved": "https://registry.npmjs.org/@fluentui/theme/-/theme-2.6.34.tgz", - "integrity": "sha512-2Ssi3sX2snnbPJ4PmxbpCDCGePRE36tvGj2qKgdKiSh/fPVsg1b+Q50YlpFl9sXmbhl1uFmxjAx6WPsVGTl7vQ==", + "version": "2.6.38", + "resolved": "https://registry.npmjs.org/@fluentui/theme/-/theme-2.6.38.tgz", + "integrity": "sha512-LObK/mZOQFb3aTcDlKBSLpPV0BOp5BOuNqg0Wps51b1RlisI6oS3STmw3BkcAe6jOi/p4cgLpwHMkYHh2o8PmQ==", "dependencies": { - "@fluentui/merge-styles": "^8.5.12", - "@fluentui/set-version": "^8.2.11", - "@fluentui/utilities": "^8.13.18", + "@fluentui/merge-styles": "^8.5.13", + "@fluentui/set-version": "^8.2.12", + "@fluentui/utilities": "^8.13.21", "tslib": "^2.1.0" }, "peerDependencies": { @@ -1999,21 +2121,21 @@ } }, "node_modules/@fluentui/tokens": { - "version": "1.0.0-alpha.5", - "resolved": "https://registry.npmjs.org/@fluentui/tokens/-/tokens-1.0.0-alpha.5.tgz", - "integrity": "sha512-4xCNP/tmeDywmo+PoFqDaUADSvNNzoZHVknC4D77S1RWxVuYmcM15eumKcVRrDuW3wS8eEX4/ZsIlDfqAhnU8g==", + "version": "1.0.0-alpha.11", + "resolved": "https://registry.npmjs.org/@fluentui/tokens/-/tokens-1.0.0-alpha.11.tgz", + "integrity": "sha512-kHKR1/JIGcBXA0qr+MyNg8KQZL4RLJXlhaSV6yNn50rJ0kTdQHUCKbbficvNZoeQBj3x0A8/WgAbPmfppZo0Zg==", "dependencies": { - "@swc/helpers": "^0.4.14" + "@swc/helpers": "^0.5.1" } }, "node_modules/@fluentui/utilities": { - "version": "8.13.18", - "resolved": "https://registry.npmjs.org/@fluentui/utilities/-/utilities-8.13.18.tgz", - "integrity": "sha512-/0rX9EzltLKwU1SS14VV7agWoOzruVTU3oagZq1QgFAvoj8qi7fNqvSX/VEeRy+0gmbsCkrEViUPkmC7drKzPg==", + "version": "8.13.21", + "resolved": "https://registry.npmjs.org/@fluentui/utilities/-/utilities-8.13.21.tgz", + "integrity": "sha512-YPWsRAL1jgbPxf+wAY8p6LjIG4em0NReqgU8ZCFnQx9wpQbe/ZRjQcaU06pD1tYtRGvyCutwhnWDaQHDw843Xg==", "dependencies": { - "@fluentui/dom-utilities": "^2.2.11", - "@fluentui/merge-styles": "^8.5.12", - "@fluentui/set-version": "^8.2.11", + "@fluentui/dom-utilities": "^2.2.12", + "@fluentui/merge-styles": "^8.5.13", + "@fluentui/set-version": "^8.2.12", "tslib": "^2.1.0" }, "peerDependencies": { @@ -2022,29 +2144,38 @@ } }, "node_modules/@griffel/core": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@griffel/core/-/core-1.11.0.tgz", - "integrity": "sha512-3jlrsJVbNC0avRMfNGWmbklptmtH5s63Gt/xa0zY6+Oa3kU/StNAu+d0LqLChb5egwXrisQIeC+tzzJ+YozGjg==", + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/@griffel/core/-/core-1.14.3.tgz", + "integrity": "sha512-d1QqS8mP1fzF8KLLN/nhxNUHguMM9I61Ckjnn5zNUqxUlRaebnhbpa2kLDVBdIy1k22+76+NTg+pIpXXjGf+vg==", "dependencies": { "@emotion/hash": "^0.9.0", + "@griffel/style-types": "^1.0.2", "csstype": "^3.1.2", "rtl-css-js": "^1.16.1", - "stylis": "^4.0.13", + "stylis": "^4.2.0", "tslib": "^2.1.0" } }, "node_modules/@griffel/react": { - "version": "1.5.7", - "resolved": "https://registry.npmjs.org/@griffel/react/-/react-1.5.7.tgz", - "integrity": "sha512-b9/LkkuO512O268jqRpJPso9ROng/kqh81YSTJUL13tT4qPZQnvrdiwoP7ZeqXbG0zzZHLZ3tWUZrCDOl549OQ==", + "version": "1.5.16", + "resolved": "https://registry.npmjs.org/@griffel/react/-/react-1.5.16.tgz", + "integrity": "sha512-F4Gj1B90c7i4rLZuSmo2HaLNFHfrwr1PBsMslWDaPw6wLbiFjqubSpSEPtcq/U8Co3vva4iAX4+hD/RXSA9W8Q==", "dependencies": { - "@griffel/core": "^1.11.0", + "@griffel/core": "^1.14.3", "tslib": "^2.1.0" }, "peerDependencies": { "react": ">=16.8.0 <19.0.0" } }, + "node_modules/@griffel/style-types": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@griffel/style-types/-/style-types-1.0.2.tgz", + "integrity": "sha512-ka/Tpl1WU8js88LObwB/4EvpgXzx/EEJfbHhAr4ZNt29hrQKgL93X1zSY6M/FRhMhWrGIawauWkZP6/y6w/WiQ==", + "dependencies": { + "csstype": "^3.1.2" + } + }, "node_modules/@grpc/grpc-js": { "version": "1.8.14", "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.8.14.tgz", @@ -2200,7 +2331,6 @@ "version": "0.3.3", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", - "dev": true, "dependencies": { "@jridgewell/set-array": "^1.0.1", "@jridgewell/sourcemap-codec": "^1.4.10", @@ -2214,7 +2344,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "dev": true, "engines": { "node": ">=6.0.0" } @@ -2223,7 +2352,6 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "dev": true, "engines": { "node": ">=6.0.0" } @@ -2231,14 +2359,12 @@ "node_modules/@jridgewell/sourcemap-codec": { "version": "1.4.15", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "dev": true + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.18", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", - "dev": true, "dependencies": { "@jridgewell/resolve-uri": "3.1.0", "@jridgewell/sourcemap-codec": "1.4.14" @@ -2247,8 +2373,7 @@ "node_modules/@jridgewell/trace-mapping/node_modules/@jridgewell/sourcemap-codec": { "version": "1.4.14", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" }, "node_modules/@microsoft/load-themed-styles": { "version": "1.10.295", @@ -2625,13 +2750,39 @@ } }, "node_modules/@swc/helpers": { - "version": "0.4.14", - "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.4.14.tgz", - "integrity": "sha512-4C7nX/dvpzB7za4Ql9K81xK3HPxCpHMgwTZVyf+9JQ6VUbn9jjZVN7/Nkdz/Ugzs2CSjqnL/UPXroiVBVHUWUw==", + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.3.tgz", + "integrity": "sha512-FaruWX6KdudYloq1AHD/4nU+UsMTdNE8CKyrseXWEcgjDAbvkwJg2QGPAnfIJLIWsjZOSPLOAykK6fuYp4vp4A==", "dependencies": { "tslib": "^2.4.0" } }, + "node_modules/@tailwindcss/typography": { + "version": "0.5.10", + "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.10.tgz", + "integrity": "sha512-Pe8BuPJQJd3FfRnm6H0ulKIGoMEQS+Vq01R6M5aCrFB/ccR/shT+0kXLjouGC1gFLm9hopTFN+DMP0pfwRWzPw==", + "dependencies": { + "lodash.castarray": "^4.4.0", + "lodash.isplainobject": "^4.0.6", + "lodash.merge": "^4.6.2", + "postcss-selector-parser": "6.0.10" + }, + "peerDependencies": { + "tailwindcss": ">=3.0.0 || insiders" + } + }, + "node_modules/@tailwindcss/typography/node_modules/postcss-selector-parser": { + "version": "6.0.10", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", + "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/@types/d3": { "version": "7.4.0", "resolved": "https://registry.npmjs.org/@types/d3/-/d3-7.4.0.tgz", @@ -2974,6 +3125,11 @@ "integrity": "sha512-kNnC1GFBLuhImSnV7w4njQkUiJi0ZXUycu1rUaouPqiKlXkh77JKgdRnTAp1x5eBwcIwbtI+3otwzuIDEuDoxQ==", "dev": true }, + "node_modules/@types/vscode": { + "version": "1.85.0", + "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.85.0.tgz", + "integrity": "sha512-CF/RBon/GXwdfmnjZj0WTUMZN5H6YITOfBCP4iEZlOtVQXuzw6t7Le7+cR+7JzdMrnlm7Mfp49Oj2TuSXIWo3g==" + }, "node_modules/@typescript/vfs": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/@typescript/vfs/-/vfs-1.4.0.tgz", @@ -3042,8 +3198,7 @@ "node_modules/any-promise": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", - "dev": true + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==" }, "node_modules/anymatch": { "version": "3.1.3", @@ -3060,8 +3215,7 @@ "node_modules/arg": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", - "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", - "dev": true + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==" }, "node_modules/argparse": { "version": "2.0.1", @@ -3211,7 +3365,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", - "dev": true, "engines": { "node": ">= 6" } @@ -3380,7 +3533,6 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", - "dev": true, "engines": { "node": ">= 6" } @@ -3403,6 +3555,15 @@ "node": ">= 8" } }, + "node_modules/css-selector-tokenizer": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.8.0.tgz", + "integrity": "sha512-Jd6Ig3/pe62/qe5SBPTN8h8LeUg/pT4lLgtavPf7updwwHpvFzxvOQBHYj2LZDMjUnBzgvIUSjRcf6oT5HzHFg==", + "dependencies": { + "cssesc": "^3.0.0", + "fastparse": "^1.1.2" + } + }, "node_modules/cssesc": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", @@ -3419,6 +3580,14 @@ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==" }, + "node_modules/culori": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/culori/-/culori-3.3.0.tgz", + "integrity": "sha512-pHJg+jbuFsCjz9iclQBqyL3B2HLCBF71BwVNujUYEvCeQMvV97R59MNK3R2+jgJ3a1fcZgI9B3vYgz8lzr/BFQ==", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, "node_modules/d3-color": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", @@ -3523,6 +3692,24 @@ "node": ">=12" } }, + "node_modules/daisyui": { + "version": "4.4.20", + "resolved": "https://registry.npmjs.org/daisyui/-/daisyui-4.4.20.tgz", + "integrity": "sha512-AR2fuFVVLHVTdbkV+XWAqjtymEoxXksrsEMkdzPQo2wANtWjSXuODUzePNade64gJ0Y2CdQtiQkaZI7fWcp13g==", + "dependencies": { + "css-selector-tokenizer": "^0.8", + "culori": "^3", + "picocolors": "^1", + "postcss-js": "^4" + }, + "engines": { + "node": ">=16.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/daisyui" + } + }, "node_modules/dataloader": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/dataloader/-/dataloader-1.4.0.tgz", @@ -3602,8 +3789,7 @@ "node_modules/didyoumean": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", - "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", - "dev": true + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==" }, "node_modules/diff": { "version": "5.1.0", @@ -3616,8 +3802,7 @@ "node_modules/dlv": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", - "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", - "dev": true + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==" }, "node_modules/doctrine": { "version": "3.0.0", @@ -3630,6 +3815,15 @@ "node": ">=6.0.0" } }, + "node_modules/dom-helpers": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", + "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", + "dependencies": { + "@babel/runtime": "^7.8.7", + "csstype": "^3.0.2" + } + }, "node_modules/dprint-node": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/dprint-node/-/dprint-node-1.0.7.tgz", @@ -3656,10 +3850,9 @@ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "node_modules/esbuild": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.19.tgz", - "integrity": "sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==", - "dev": true, + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.5.tgz", + "integrity": "sha512-bUxalY7b1g8vNhQKdB24QDmHeY4V4tw/s6Ak5z+jJX9laP5MoQseTOMemAr0gxssjNcH0MCViG8ONI2kksvfFQ==", "hasInstallScript": true, "bin": { "esbuild": "bin/esbuild" @@ -3668,28 +3861,28 @@ "node": ">=12" }, "optionalDependencies": { - "@esbuild/android-arm": "0.17.19", - "@esbuild/android-arm64": "0.17.19", - "@esbuild/android-x64": "0.17.19", - "@esbuild/darwin-arm64": "0.17.19", - "@esbuild/darwin-x64": "0.17.19", - "@esbuild/freebsd-arm64": "0.17.19", - "@esbuild/freebsd-x64": "0.17.19", - "@esbuild/linux-arm": "0.17.19", - "@esbuild/linux-arm64": "0.17.19", - "@esbuild/linux-ia32": "0.17.19", - "@esbuild/linux-loong64": "0.17.19", - "@esbuild/linux-mips64el": "0.17.19", - "@esbuild/linux-ppc64": "0.17.19", - "@esbuild/linux-riscv64": "0.17.19", - "@esbuild/linux-s390x": "0.17.19", - "@esbuild/linux-x64": "0.17.19", - "@esbuild/netbsd-x64": "0.17.19", - "@esbuild/openbsd-x64": "0.17.19", - "@esbuild/sunos-x64": "0.17.19", - "@esbuild/win32-arm64": "0.17.19", - "@esbuild/win32-ia32": "0.17.19", - "@esbuild/win32-x64": "0.17.19" + "@esbuild/android-arm": "0.19.5", + "@esbuild/android-arm64": "0.19.5", + "@esbuild/android-x64": "0.19.5", + "@esbuild/darwin-arm64": "0.19.5", + "@esbuild/darwin-x64": "0.19.5", + "@esbuild/freebsd-arm64": "0.19.5", + "@esbuild/freebsd-x64": "0.19.5", + "@esbuild/linux-arm": "0.19.5", + "@esbuild/linux-arm64": "0.19.5", + "@esbuild/linux-ia32": "0.19.5", + "@esbuild/linux-loong64": "0.19.5", + "@esbuild/linux-mips64el": "0.19.5", + "@esbuild/linux-ppc64": "0.19.5", + "@esbuild/linux-riscv64": "0.19.5", + "@esbuild/linux-s390x": "0.19.5", + "@esbuild/linux-x64": "0.19.5", + "@esbuild/netbsd-x64": "0.19.5", + "@esbuild/openbsd-x64": "0.19.5", + "@esbuild/sunos-x64": "0.19.5", + "@esbuild/win32-arm64": "0.19.5", + "@esbuild/win32-ia32": "0.19.5", + "@esbuild/win32-x64": "0.19.5" } }, "node_modules/esbuild-plugin-swc": { @@ -3734,27 +3927,16 @@ } } }, - "node_modules/esbuild-plugin-swc/node_modules/@swc/helpers": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.1.tgz", - "integrity": "sha512-sJ902EfIzn1Fa+qYmjdQqh8tPsoxyBz+8yBKC2HKUxyezKJFwPGOn7pv4WY6QuQW//ySQi5lJjA/ZT9sNWWNTg==", - "optional": true, - "peer": true, - "dependencies": { - "tslib": "^2.4.0" - } - }, "node_modules/esbuild-sass-plugin": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/esbuild-sass-plugin/-/esbuild-sass-plugin-2.9.0.tgz", - "integrity": "sha512-D7c8Ub+C4RfaqhOoo9EEWprYmP5ZCmpmcodmYDtpvCfPZLgsSbLaLHPXdul4TUWUMH5eJ6POw+aes/s42ffwrA==", - "dev": true, + "version": "2.16.0", + "resolved": "https://registry.npmjs.org/esbuild-sass-plugin/-/esbuild-sass-plugin-2.16.0.tgz", + "integrity": "sha512-mGCe9MxNYvZ+j77Q/QFO+rwUGA36mojDXkOhtVmoyz1zwYbMaNrtVrmXwwYDleS/UMKTNU3kXuiTtPiAD3K+Pw==", "dependencies": { - "resolve": "^1.22.2", - "sass": "^1.62.0" + "resolve": "^1.22.6", + "sass": "^1.7.3" }, "peerDependencies": { - "esbuild": "^0.17.17" + "esbuild": "^0.19.4" } }, "node_modules/esbuild-style-plugin": { @@ -3943,10 +4125,9 @@ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, "node_modules/fast-glob": { - "version": "3.2.12", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", - "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", - "dev": true, + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -3962,7 +4143,6 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, "dependencies": { "is-glob": "^4.0.1" }, @@ -3980,6 +4160,11 @@ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" }, + "node_modules/fastparse": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz", + "integrity": "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==" + }, "node_modules/fastq": { "version": "1.15.0", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", @@ -4132,10 +4317,12 @@ } }, "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/generic-names": { "version": "4.0.0", @@ -4241,18 +4428,6 @@ "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==" }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, "node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -4261,6 +4436,17 @@ "node": ">=8" } }, + "node_modules/hasown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", + "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/hast-util-parse-selector": { "version": "2.2.5", "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-2.2.5.tgz", @@ -4425,12 +4611,11 @@ } }, "node_modules/is-core-module": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz", - "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==", - "dev": true, + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", "dependencies": { - "has": "^1.0.3" + "hasown": "^2.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -4531,10 +4716,9 @@ } }, "node_modules/jiti": { - "version": "1.18.2", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.18.2.tgz", - "integrity": "sha512-QAdOptna2NYiSSpv0O/BwoHBSmz4YhpzJHyi+fnMRTXFjp7B8i/YG5Z8IfusxB1ufjcD2Sre1F3R+nX3fvy7gg==", - "dev": true, + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.0.tgz", + "integrity": "sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==", "bin": { "jiti": "bin/jiti.js" } @@ -4575,9 +4759,9 @@ "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==" }, "node_modules/keyborg": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/keyborg/-/keyborg-2.0.0.tgz", - "integrity": "sha512-RWY8nWrzRkwTQLaKyDtbTu5SOb5L4B20UzAsBHlQDFZqVY/+Mid0bQ7MVTC8vbOTrWY2xkkzj8gZF9Ua7re4xA==" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/keyborg/-/keyborg-2.1.0.tgz", + "integrity": "sha512-0+v3/GIYG6gClwBOXrHet31n1UJW49xbKgVPUu6we41aq9tAmMosVXEdctZxsQdebyxtrcxVTkvHjBD1XPOHwg==" }, "node_modules/kleur": { "version": "4.1.5", @@ -4603,7 +4787,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", - "dev": true, "engines": { "node": ">=10" } @@ -4611,8 +4794,7 @@ "node_modules/lines-and-columns": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" }, "node_modules/loader-utils": { "version": "3.2.1", @@ -4646,6 +4828,16 @@ "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==" }, + "node_modules/lodash.castarray": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.castarray/-/lodash.castarray-4.4.0.tgz", + "integrity": "sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q==" + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==" + }, "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", @@ -4770,7 +4962,6 @@ "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, "engines": { "node": ">= 8" } @@ -5200,7 +5391,6 @@ "version": "4.0.5", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, "dependencies": { "braces": "^3.0.2", "picomatch": "^2.3.1" @@ -5245,7 +5435,6 @@ "version": "2.7.0", "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", - "dev": true, "dependencies": { "any-promise": "^1.0.0", "object-assign": "^4.0.1", @@ -5421,8 +5610,7 @@ "node_modules/path-parse": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, "node_modules/path-scurry": { "version": "1.9.2", @@ -5459,7 +5647,6 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -5468,7 +5655,6 @@ "version": "4.0.5", "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", - "dev": true, "engines": { "node": ">= 6" } @@ -5504,7 +5690,6 @@ "version": "15.1.0", "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", - "dev": true, "dependencies": { "postcss-value-parser": "^4.0.0", "read-cache": "^1.0.0", @@ -5521,7 +5706,6 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", - "dev": true, "dependencies": { "camelcase-css": "^2.0.1" }, @@ -5613,7 +5797,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz", "integrity": "sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==", - "dev": true, "dependencies": { "postcss-selector-parser": "^6.0.11" }, @@ -5993,6 +6176,21 @@ "react": ">= 0.14.0" } }, + "node_modules/react-transition-group": { + "version": "4.4.5", + "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", + "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", + "dependencies": { + "@babel/runtime": "^7.5.5", + "dom-helpers": "^5.0.1", + "loose-envify": "^1.4.0", + "prop-types": "^15.6.2" + }, + "peerDependencies": { + "react": ">=16.6.0", + "react-dom": ">=16.6.0" + } + }, "node_modules/reactflow": { "version": "11.7.2", "resolved": "https://registry.npmjs.org/reactflow/-/reactflow-11.7.2.tgz", @@ -6014,7 +6212,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", - "dev": true, "dependencies": { "pify": "^2.3.0" } @@ -6096,12 +6293,11 @@ } }, "node_modules/resolve": { - "version": "1.22.2", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", - "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==", - "dev": true, + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", "dependencies": { - "is-core-module": "^2.11.0", + "is-core-module": "^2.13.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, @@ -6414,15 +6610,14 @@ } }, "node_modules/stylis": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz", - "integrity": "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==" + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.3.0.tgz", + "integrity": "sha512-E87pIogpwUsUwXw7dNyU4QDjdgVMy52m+XEOPEKUn161cCzWjjhPSQhByfd1CcNvrOLnXQ6OnnZDwnJrz/Z4YQ==" }, "node_modules/sucrase": { "version": "3.32.0", "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.32.0.tgz", "integrity": "sha512-ydQOU34rpSyj2TGyz4D2p8rbktIOZ8QY9s+DGLvFU1i5pWJE8vkpruCjGCMHsdXwnD7JDcS+noSwM/a7zyNFDQ==", - "dev": true, "dependencies": { "@jridgewell/gen-mapping": "^0.3.2", "commander": "^4.0.0", @@ -6444,7 +6639,6 @@ "version": "7.1.6", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "dev": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -6475,7 +6669,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, "engines": { "node": ">= 0.4" }, @@ -6484,9 +6677,9 @@ } }, "node_modules/tabster": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/tabster/-/tabster-4.5.1.tgz", - "integrity": "sha512-Zbvy4RN308q2siLBuzAFbx4LbCjeU6EnKcxAoEYhVSu8buZcrPFeUlcwfU5AvkrwYU/rq3lNl5E7millpuWITw==", + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/tabster/-/tabster-4.9.0.tgz", + "integrity": "sha512-wcXpMQxLA7OFcL4ci6Spsv0C1S26HtCD4904XTW78mQ2iPsKyo+SdjBUZ4SHhNMpa1y4P1cByc6dPJ0n+9yVzA==", "dependencies": { "keyborg": "^2.0.0", "tslib": "^2.3.1" @@ -6502,20 +6695,19 @@ } }, "node_modules/tailwindcss": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.2.tgz", - "integrity": "sha512-9jPkMiIBXvPc2KywkraqsUfbfj+dHDb+JPWtSJa9MLFdrPyazI7q6WX2sUrm7R9eVR7qqv3Pas7EvQFzxKnI6w==", - "dev": true, + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.0.tgz", + "integrity": "sha512-VigzymniH77knD1dryXbyxR+ePHihHociZbXnLZHUyzf2MMs2ZVqlUrZ3FvpXP8pno9JzmILt1sZPD19M3IxtA==", "dependencies": { "@alloc/quick-lru": "^5.2.0", "arg": "^5.0.2", "chokidar": "^3.5.3", "didyoumean": "^1.2.2", "dlv": "^1.1.3", - "fast-glob": "^3.2.12", + "fast-glob": "^3.3.0", "glob-parent": "^6.0.2", "is-glob": "^4.0.3", - "jiti": "^1.18.2", + "jiti": "^1.19.1", "lilconfig": "^2.1.0", "micromatch": "^4.0.5", "normalize-path": "^3.0.0", @@ -6527,7 +6719,6 @@ "postcss-load-config": "^4.0.1", "postcss-nested": "^6.0.1", "postcss-selector-parser": "^6.0.11", - "postcss-value-parser": "^4.2.0", "resolve": "^1.22.2", "sucrase": "^3.32.0" }, @@ -6543,7 +6734,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", - "dev": true, "engines": { "node": ">= 6" } @@ -6552,7 +6742,6 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.1.tgz", "integrity": "sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==", - "dev": true, "dependencies": { "lilconfig": "^2.0.5", "yaml": "^2.1.1" @@ -6586,7 +6775,6 @@ "version": "3.3.1", "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", - "dev": true, "dependencies": { "any-promise": "^1.0.0" } @@ -6595,7 +6783,6 @@ "version": "1.6.0", "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", - "dev": true, "dependencies": { "thenify": ">= 3.1.0 < 4" }, @@ -6640,8 +6827,7 @@ "node_modules/ts-interface-checker": { "version": "0.1.13", "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", - "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", - "dev": true + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==" }, "node_modules/ts-poet": { "version": "6.4.1", @@ -6901,9 +7087,9 @@ } }, "node_modules/use-disposable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/use-disposable/-/use-disposable-1.0.1.tgz", - "integrity": "sha512-5Sle1XEmK3lw3xyGqeIY7UKkiUgF+TxwUty7fTsqM5D5AxfQfo2ft+LY9xKCA+W5YbaBFbOkWfQsZY/y5JhInA==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/use-disposable/-/use-disposable-1.0.2.tgz", + "integrity": "sha512-UMaXVlV77dWOu4GqAFNjRzHzowYKUKbJBQfCexvahrYeIz4OkUYUjna4Tjjdf92NH8Nm8J7wEfFRgTIwYjO5jg==", "peerDependencies": { "@types/react": ">=16.8.0 <19.0.0", "@types/react-dom": ">=16.8.0 <19.0.0", @@ -7060,7 +7246,6 @@ "version": "2.3.1", "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.1.tgz", "integrity": "sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==", - "dev": true, "engines": { "node": ">= 14" } @@ -7131,8 +7316,7 @@ "@alloc/quick-lru": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", - "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", - "dev": true + "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==" }, "@babel/runtime": { "version": "7.22.5", @@ -7199,31 +7383,31 @@ "optional": true }, "@bufbuild/connect": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@bufbuild/connect/-/connect-0.11.0.tgz", - "integrity": "sha512-a6hrNtBzDzj4hpqylPqpJfMpIP4+O/SnszGgOuRzcuifpTvkwjSmVHLtcvkUYh0wpvjYB0CFmTYzrvAMOftbHw==", + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@bufbuild/connect/-/connect-0.13.0.tgz", + "integrity": "sha512-eZSMbVLyUFtXiZNORgCEvv580xKZeYQdMOWj2i/nxOcpXQcrEzTMTA7SZzWv4k4gveWCOSRoWmYDeOhfWXJv0g==", "dev": true, "requires": {} }, "@bufbuild/connect-web": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@bufbuild/connect-web/-/connect-web-0.11.0.tgz", - "integrity": "sha512-H0tSsn7dMJY5EQNHoQyE/TXmmRtJ6GauRl9RWk4GncQCXulo5ab5yn8cEtu7UKnPCvF7nYbK1ESE0vHi5Y2xaw==", + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@bufbuild/connect-web/-/connect-web-0.13.0.tgz", + "integrity": "sha512-Ys9VFDWYktD9yFQSLOlkpsD42LonDNMCysLCfjXFuxlupYuf4f7qg0zkT5bESyTfqk4xtRDSSGR3xygaj/ONIQ==", "dev": true, "requires": { - "@bufbuild/connect": "0.11.0" + "@bufbuild/connect": "0.13.0" } }, "@bufbuild/protobuf": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@bufbuild/protobuf/-/protobuf-1.2.1.tgz", - "integrity": "sha512-cwwGvLGqvoaOZmoP5+i4v/rbW+rHkguvTehuZyM2p/xpmaNSdT2h3B7kHw33aiffv35t1XrYHIkdJSEkSEMJuA==", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/@bufbuild/protobuf/-/protobuf-1.5.1.tgz", + "integrity": "sha512-LX+MeB1AzlbqgJXkq83lilQpLGnPvsAMj7SH8KtJAmQfBc55ee78Stxuff/HMw0xLMYJN3P1FBh5TENgjJof1w==", "dev": true }, "@bufbuild/protoc-gen-connect-es": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@bufbuild/protoc-gen-connect-es/-/protoc-gen-connect-es-0.11.0.tgz", - "integrity": "sha512-yuEwf4e2+1e2OlQfw5kr5yfdvoe2+obyHzfeI/RP7/loDzpl8ZVfSNDsdrnpWaYYCXIotEax3rpYm3yG4637rw==", + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@bufbuild/protoc-gen-connect-es/-/protoc-gen-connect-es-0.13.0.tgz", + "integrity": "sha512-4HbxWQ799ZLszJJIJsuVMFwkBx8DJ4VEhNDNtKpPJFsTdVUOp1LyFGY66Yjfj9vcuOeH44bS0ALE5pRP3rCxXA==", "dev": true, "requires": { "@bufbuild/protobuf": "^1.2.1", @@ -7231,21 +7415,22 @@ } }, "@bufbuild/protoc-gen-es": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@bufbuild/protoc-gen-es/-/protoc-gen-es-1.2.1.tgz", - "integrity": "sha512-Nfg4ZTYciAgzqrbuGtRHR2TV4tueP10cRSD/joe57EeT0hfiXT0oQzH4OO3CzqqZvMxfkxpO4jgJgtwdQd941g==", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/@bufbuild/protoc-gen-es/-/protoc-gen-es-1.5.1.tgz", + "integrity": "sha512-o4NNOf49QEjowhpQxm3fq/yv+LstO9aMmNlEE3fz4WlD5fBE8OZ7q38O+WMUVoB4Y41joxk24v7IIm61trwRyg==", "dev": true, "requires": { - "@bufbuild/protoplugin": "1.2.1" + "@bufbuild/protobuf": "^1.5.1", + "@bufbuild/protoplugin": "1.5.1" } }, "@bufbuild/protoplugin": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@bufbuild/protoplugin/-/protoplugin-1.2.1.tgz", - "integrity": "sha512-7VtPgJGXcOszidMpQRQK9wm8QlKqC80Uc5XR9+Ej+DN4Ur64dAW1djZ7kLZ3ij6Z9IY4FteGQT+ubUNxzcW2NA==", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/@bufbuild/protoplugin/-/protoplugin-1.5.1.tgz", + "integrity": "sha512-4qQD3UIEXflPYCEPZxyvi9yoQiX3ONWgLw24uLJrw9AnbY7Pw1xT5v8yIMXIVccBEZNSpvIF6qD/JXfIapjRtw==", "dev": true, "requires": { - "@bufbuild/protobuf": "1.2.1", + "@bufbuild/protobuf": "1.5.1", "@typescript/vfs": "^1.4.0", "typescript": "4.5.2" }, @@ -7289,157 +7474,135 @@ } }, "@esbuild/android-arm": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.19.tgz", - "integrity": "sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==", - "dev": true, + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.5.tgz", + "integrity": "sha512-bhvbzWFF3CwMs5tbjf3ObfGqbl/17ict2/uwOSfr3wmxDE6VdS2GqY/FuzIPe0q0bdhj65zQsvqfArI9MY6+AA==", "optional": true }, "@esbuild/android-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz", - "integrity": "sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==", - "dev": true, + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.5.tgz", + "integrity": "sha512-5d1OkoJxnYQfmC+Zd8NBFjkhyCNYwM4n9ODrycTFY6Jk1IGiZ+tjVJDDSwDt77nK+tfpGP4T50iMtVi4dEGzhQ==", "optional": true }, "@esbuild/android-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.19.tgz", - "integrity": "sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==", - "dev": true, + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.5.tgz", + "integrity": "sha512-9t+28jHGL7uBdkBjL90QFxe7DVA+KGqWlHCF8ChTKyaKO//VLuoBricQCgwhOjA1/qOczsw843Fy4cbs4H3DVA==", "optional": true }, "@esbuild/darwin-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz", - "integrity": "sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==", - "dev": true, + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.5.tgz", + "integrity": "sha512-mvXGcKqqIqyKoxq26qEDPHJuBYUA5KizJncKOAf9eJQez+L9O+KfvNFu6nl7SCZ/gFb2QPaRqqmG0doSWlgkqw==", "optional": true }, "@esbuild/darwin-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz", - "integrity": "sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==", - "dev": true, + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.5.tgz", + "integrity": "sha512-Ly8cn6fGLNet19s0X4unjcniX24I0RqjPv+kurpXabZYSXGM4Pwpmf85WHJN3lAgB8GSth7s5A0r856S+4DyiA==", "optional": true }, "@esbuild/freebsd-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz", - "integrity": "sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==", - "dev": true, + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.5.tgz", + "integrity": "sha512-GGDNnPWTmWE+DMchq1W8Sd0mUkL+APvJg3b11klSGUDvRXh70JqLAO56tubmq1s2cgpVCSKYywEiKBfju8JztQ==", "optional": true }, "@esbuild/freebsd-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz", - "integrity": "sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==", - "dev": true, + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.5.tgz", + "integrity": "sha512-1CCwDHnSSoA0HNwdfoNY0jLfJpd7ygaLAp5EHFos3VWJCRX9DMwWODf96s9TSse39Br7oOTLryRVmBoFwXbuuQ==", "optional": true }, "@esbuild/linux-arm": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz", - "integrity": "sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==", - "dev": true, + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.5.tgz", + "integrity": "sha512-lrWXLY/vJBzCPC51QN0HM71uWgIEpGSjSZZADQhq7DKhPcI6NH1IdzjfHkDQws2oNpJKpR13kv7/pFHBbDQDwQ==", "optional": true }, "@esbuild/linux-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz", - "integrity": "sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==", - "dev": true, + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.5.tgz", + "integrity": "sha512-o3vYippBmSrjjQUCEEiTZ2l+4yC0pVJD/Dl57WfPwwlvFkrxoSO7rmBZFii6kQB3Wrn/6GwJUPLU5t52eq2meA==", "optional": true }, "@esbuild/linux-ia32": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz", - "integrity": "sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==", - "dev": true, + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.5.tgz", + "integrity": "sha512-MkjHXS03AXAkNp1KKkhSKPOCYztRtK+KXDNkBa6P78F8Bw0ynknCSClO/ztGszILZtyO/lVKpa7MolbBZ6oJtQ==", "optional": true }, "@esbuild/linux-loong64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz", - "integrity": "sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==", - "dev": true, + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.5.tgz", + "integrity": "sha512-42GwZMm5oYOD/JHqHska3Jg0r+XFb/fdZRX+WjADm3nLWLcIsN27YKtqxzQmGNJgu0AyXg4HtcSK9HuOk3v1Dw==", "optional": true }, "@esbuild/linux-mips64el": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz", - "integrity": "sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==", - "dev": true, + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.5.tgz", + "integrity": "sha512-kcjndCSMitUuPJobWCnwQ9lLjiLZUR3QLQmlgaBfMX23UEa7ZOrtufnRds+6WZtIS9HdTXqND4yH8NLoVVIkcg==", "optional": true }, "@esbuild/linux-ppc64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz", - "integrity": "sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==", - "dev": true, + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.5.tgz", + "integrity": "sha512-yJAxJfHVm0ZbsiljbtFFP1BQKLc8kUF6+17tjQ78QjqjAQDnhULWiTA6u0FCDmYT1oOKS9PzZ2z0aBI+Mcyj7Q==", "optional": true }, "@esbuild/linux-riscv64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz", - "integrity": "sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==", - "dev": true, + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.5.tgz", + "integrity": "sha512-5u8cIR/t3gaD6ad3wNt1MNRstAZO+aNyBxu2We8X31bA8XUNyamTVQwLDA1SLoPCUehNCymhBhK3Qim1433Zag==", "optional": true }, "@esbuild/linux-s390x": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz", - "integrity": "sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==", - "dev": true, + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.5.tgz", + "integrity": "sha512-Z6JrMyEw/EmZBD/OFEFpb+gao9xJ59ATsoTNlj39jVBbXqoZm4Xntu6wVmGPB/OATi1uk/DB+yeDPv2E8PqZGw==", "optional": true }, "@esbuild/linux-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz", - "integrity": "sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==", - "dev": true, + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.5.tgz", + "integrity": "sha512-psagl+2RlK1z8zWZOmVdImisMtrUxvwereIdyJTmtmHahJTKb64pAcqoPlx6CewPdvGvUKe2Jw+0Z/0qhSbG1A==", "optional": true }, "@esbuild/netbsd-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz", - "integrity": "sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==", - "dev": true, + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.5.tgz", + "integrity": "sha512-kL2l+xScnAy/E/3119OggX8SrWyBEcqAh8aOY1gr4gPvw76la2GlD4Ymf832UCVbmuWeTf2adkZDK+h0Z/fB4g==", "optional": true }, "@esbuild/openbsd-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz", - "integrity": "sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==", - "dev": true, + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.5.tgz", + "integrity": "sha512-sPOfhtzFufQfTBgRnE1DIJjzsXukKSvZxloZbkJDG383q0awVAq600pc1nfqBcl0ice/WN9p4qLc39WhBShRTA==", "optional": true }, "@esbuild/sunos-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz", - "integrity": "sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==", - "dev": true, + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.5.tgz", + "integrity": "sha512-dGZkBXaafuKLpDSjKcB0ax0FL36YXCvJNnztjKV+6CO82tTYVDSH2lifitJ29jxRMoUhgkg9a+VA/B03WK5lcg==", "optional": true }, "@esbuild/win32-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz", - "integrity": "sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==", - "dev": true, + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.5.tgz", + "integrity": "sha512-dWVjD9y03ilhdRQ6Xig1NWNgfLtf2o/STKTS+eZuF90fI2BhbwD6WlaiCGKptlqXlURVB5AUOxUj09LuwKGDTg==", "optional": true }, "@esbuild/win32-ia32": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz", - "integrity": "sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==", - "dev": true, + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.5.tgz", + "integrity": "sha512-4liggWIA4oDgUxqpZwrDhmEfAH4d0iljanDOK7AnVU89T6CzHon/ony8C5LeOdfgx60x5cnQJFZwEydVlYx4iw==", "optional": true }, "@esbuild/win32-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz", - "integrity": "sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==", - "dev": true, + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.5.tgz", + "integrity": "sha512-czTrygUsB/jlM8qEW5MD8bgYU2Xg14lo6kBDXW6HdxKjh8M5PzETGiSHaz9MtbXBYDloHNUAUW2tMiKW4KM9Mw==", "optional": true }, "@eslint-community/eslint-utils": { @@ -7477,980 +7640,1099 @@ "integrity": "sha512-kf9RB0Fg7NZfap83B3QOqOGg9QmD9yBudqQXzzOtn3i4y7ZUXe5ONeW34Gwi+TxhH4mvj72R1Zc300KUMa9Bng==" }, "@floating-ui/core": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.3.0.tgz", - "integrity": "sha512-vX1WVAdPjZg9DkDkC+zEx/tKtnST6/qcNpwcjeBgco3XRNHz5PUA+ivi/yr6G3o0kMR60uKBJcfOdfzOFI7PMQ==" + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.5.0.tgz", + "integrity": "sha512-kK1h4m36DQ0UHGj5Ah4db7R0rHemTqqO0QLvUqi1/mUUp3LuAWbWxdxSIf/XsnH9VS6rRVPLJCncjRzUvyCLXg==", + "requires": { + "@floating-ui/utils": "^0.1.3" + } }, "@floating-ui/dom": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.3.0.tgz", - "integrity": "sha512-qIAwejE3r6NeA107u4ELDKkH8+VtgRKdXqtSPaKflL2S2V+doyN+Wt9s5oHKXPDo4E8TaVXaHT3+6BbagH31xw==", + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.5.3.tgz", + "integrity": "sha512-ClAbQnEqJAKCJOEbbLo5IUlZHkNszqhuxS4fHAVxRPXPya6Ysf2G8KypnYcOTpx6I8xcgF9bbHb6g/2KpbV8qA==", "requires": { - "@floating-ui/core": "^1.3.0" + "@floating-ui/core": "^1.4.2", + "@floating-ui/utils": "^0.1.3" } }, + "@floating-ui/utils": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.1.6.tgz", + "integrity": "sha512-OfX7E2oUDYxtBvsuS4e/jSn4Q9Qb6DzgeYtsAdkPZ47znpoNsMgZw0+tVijiv3uGNR6dgNlty6r9rzIzHjtd/A==" + }, "@fluentui/date-time-utilities": { - "version": "8.5.13", - "resolved": "https://registry.npmjs.org/@fluentui/date-time-utilities/-/date-time-utilities-8.5.13.tgz", - "integrity": "sha512-X3clbPKh0URkDj21QoARw6SNec7dWg7Gt7SkTlkVYFzmZUdC4ZIrYk3n36xKe3U1wcGp26EVmKjhAhB262ugpw==", + "version": "8.5.14", + "resolved": "https://registry.npmjs.org/@fluentui/date-time-utilities/-/date-time-utilities-8.5.14.tgz", + "integrity": "sha512-Kc64ZBj0WiaSW/Bsh4fMy9oM2FIk1TgIqBV6+OgOtdKx9cXwLdmgGk8zuQTcuRnwv5WCk2M6wvW1M+eK3sNRGA==", "requires": { - "@fluentui/set-version": "^8.2.11", + "@fluentui/set-version": "^8.2.12", "tslib": "^2.1.0" } }, "@fluentui/dom-utilities": { - "version": "2.2.11", - "resolved": "https://registry.npmjs.org/@fluentui/dom-utilities/-/dom-utilities-2.2.11.tgz", - "integrity": "sha512-2tXfg7/9PXu9nfU72/P3o3waHEFEQtHUfQbVexUaYqNNAxMj6sOfsqpUx4vd5nPgO+grSWrl+spqlLN2yej51w==", + "version": "2.2.12", + "resolved": "https://registry.npmjs.org/@fluentui/dom-utilities/-/dom-utilities-2.2.12.tgz", + "integrity": "sha512-safCKQPJTnshYG13/U2Zx1KWhOhU4vl5RAKqW7HEBfLOHds/fAR+EzTvKgO6OgxJq59JAKJvpH2QujkLXZZQ3A==", "requires": { - "@fluentui/set-version": "^8.2.11", + "@fluentui/set-version": "^8.2.12", "tslib": "^2.1.0" } }, "@fluentui/font-icons-mdl2": { - "version": "8.5.23", - "resolved": "https://registry.npmjs.org/@fluentui/font-icons-mdl2/-/font-icons-mdl2-8.5.23.tgz", - "integrity": "sha512-jZjUtfQm9/84jX34zhwwsoZME86xXXgKAgBYuMvRStKzXGdZcd7YSOlmuT8lbISmtFL/SWwUGOEal1nLCUNeNA==", + "version": "8.5.27", + "resolved": "https://registry.npmjs.org/@fluentui/font-icons-mdl2/-/font-icons-mdl2-8.5.27.tgz", + "integrity": "sha512-u6J9SmdWsr3WjC7zog930IWWySA+mxLfIqfyux9oATJQPUs+76juYYbolDTJTvndVEmb+piA7qBhEubUoaXJjQ==", "requires": { - "@fluentui/set-version": "^8.2.11", - "@fluentui/style-utilities": "^8.9.16", - "@fluentui/utilities": "^8.13.18", + "@fluentui/set-version": "^8.2.12", + "@fluentui/style-utilities": "^8.9.20", + "@fluentui/utilities": "^8.13.21", "tslib": "^2.1.0" } }, "@fluentui/foundation-legacy": { - "version": "8.2.43", - "resolved": "https://registry.npmjs.org/@fluentui/foundation-legacy/-/foundation-legacy-8.2.43.tgz", - "integrity": "sha512-rXr71KxNcWDH2LmTsFZbP75p8HssLlVLaFAqEdLE+sKf/LNKmqkDVTNhDbHZxzxy0QnguI4aNHcyGhMZUH3MPA==", - "requires": { - "@fluentui/merge-styles": "^8.5.12", - "@fluentui/set-version": "^8.2.11", - "@fluentui/style-utilities": "^8.9.16", - "@fluentui/utilities": "^8.13.18", + "version": "8.2.47", + "resolved": "https://registry.npmjs.org/@fluentui/foundation-legacy/-/foundation-legacy-8.2.47.tgz", + "integrity": "sha512-El/8/makZh2fqd2YdLSTy3T2oJ3N6WCsPzkud9CdMF98Oby0jny4EAtzjBNRbAwL4/gppOYIIchVuzRL4V2rcw==", + "requires": { + "@fluentui/merge-styles": "^8.5.13", + "@fluentui/set-version": "^8.2.12", + "@fluentui/style-utilities": "^8.9.20", + "@fluentui/utilities": "^8.13.21", "tslib": "^2.1.0" } }, "@fluentui/keyboard-key": { - "version": "0.4.11", - "resolved": "https://registry.npmjs.org/@fluentui/keyboard-key/-/keyboard-key-0.4.11.tgz", - "integrity": "sha512-TVB/EloWado9AVp1niChgcdDOQAHGP5B30Dinmtfe7zi8OnstwPoxwFP6dHJDdpLQ6ZEUTaEHViSzvewl7Chag==", + "version": "0.4.12", + "resolved": "https://registry.npmjs.org/@fluentui/keyboard-key/-/keyboard-key-0.4.12.tgz", + "integrity": "sha512-9nPglM58ThbOEQ88KijdYl64hiTAQQ0o60HRc0vboibmr41mJ322FoBz5Q5S5QLIEbBZajrAkrDMs3PKW4CCSw==", "requires": { "tslib": "^2.1.0" } }, "@fluentui/keyboard-keys": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/@fluentui/keyboard-keys/-/keyboard-keys-9.0.3.tgz", - "integrity": "sha512-40KBVJ9HzsvmPL3rwYaAvxCacNS0xnTmOt6TLxxrAVgVrZ1X7DLgd8OGFZcWROs0dhHdCk2D51bl4nK8Q1r3mQ==", + "version": "9.0.6", + "resolved": "https://registry.npmjs.org/@fluentui/keyboard-keys/-/keyboard-keys-9.0.6.tgz", + "integrity": "sha512-WvJrCKvt8Om04S+IwypeJ3FG2tP2TSNFMSMYouDdeKspKD1EmQyQybs7YA9+Fh98X5ERF14zBCurgtNjpDH6gQ==", "requires": { - "@swc/helpers": "^0.4.14" + "@swc/helpers": "^0.5.1" } }, "@fluentui/merge-styles": { - "version": "8.5.12", - "resolved": "https://registry.npmjs.org/@fluentui/merge-styles/-/merge-styles-8.5.12.tgz", - "integrity": "sha512-ZnUo0YuMP7AYi68dkknFqVxopIAgbrUnqR/MZlemmRvBYyy1SMj1WQeHcoiLFA8mF8YKn7B+jxQgJbN2bfcrRw==", + "version": "8.5.13", + "resolved": "https://registry.npmjs.org/@fluentui/merge-styles/-/merge-styles-8.5.13.tgz", + "integrity": "sha512-ocgwNlQcQwn5mNlZKFazrFVbYDEQ6BptoW4GyEv6U5TEHE8HKKYuPRf340NXCRGiacSpz3vLkyDjp+L431qUXg==", "requires": { - "@fluentui/set-version": "^8.2.11", + "@fluentui/set-version": "^8.2.12", "tslib": "^2.1.0" } }, "@fluentui/priority-overflow": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/@fluentui/priority-overflow/-/priority-overflow-9.0.3.tgz", - "integrity": "sha512-lOUfZX3PMyb+nHWcNGQu+EBz2cvRxHgTObG97UTmGBB0nL0cEJCqVL7PKVWhto7zp3moSgRUWyUN/EQVVpZ/hg==", + "version": "9.1.8", + "resolved": "https://registry.npmjs.org/@fluentui/priority-overflow/-/priority-overflow-9.1.8.tgz", + "integrity": "sha512-wd6WvS30LAFfMsQ6MLCunX+qTd9fmVMuyutefD5ogZanois62GzLQoPF9JQUmOY/tN0a51k5dfM9tQrKQgsT+Q==", "requires": { - "@swc/helpers": "^0.4.14" + "@swc/helpers": "^0.5.1" } }, "@fluentui/react": { - "version": "8.110.7", - "resolved": "https://registry.npmjs.org/@fluentui/react/-/react-8.110.7.tgz", - "integrity": "sha512-3sn4HZL10jghiYFF+Ouc7pNDJ5pR2ueU6ZY1IdmVFgYXTJJ/IwQhVc37mXVf8VoUM7hF4vRcGE4z+loNTpTX0w==", - "requires": { - "@fluentui/date-time-utilities": "^8.5.13", - "@fluentui/font-icons-mdl2": "^8.5.23", - "@fluentui/foundation-legacy": "^8.2.43", - "@fluentui/merge-styles": "^8.5.12", - "@fluentui/react-focus": "^8.8.30", - "@fluentui/react-hooks": "^8.6.29", - "@fluentui/react-portal-compat-context": "^9.0.6", - "@fluentui/react-window-provider": "^2.2.15", - "@fluentui/set-version": "^8.2.11", - "@fluentui/style-utilities": "^8.9.16", - "@fluentui/theme": "^2.6.34", - "@fluentui/utilities": "^8.13.18", + "version": "8.112.9", + "resolved": "https://registry.npmjs.org/@fluentui/react/-/react-8.112.9.tgz", + "integrity": "sha512-mSu++f/TA+en+pIiWJE8s2+L6TtIdUpULkh4/knsQ+4NTBjvFnve0bK936VBHK8ff6ypLa0HqiQKFIMlQyH/iw==", + "requires": { + "@fluentui/date-time-utilities": "^8.5.14", + "@fluentui/font-icons-mdl2": "^8.5.27", + "@fluentui/foundation-legacy": "^8.2.47", + "@fluentui/merge-styles": "^8.5.13", + "@fluentui/react-focus": "^8.8.34", + "@fluentui/react-hooks": "^8.6.33", + "@fluentui/react-portal-compat-context": "^9.0.10", + "@fluentui/react-window-provider": "^2.2.16", + "@fluentui/set-version": "^8.2.12", + "@fluentui/style-utilities": "^8.9.20", + "@fluentui/theme": "^2.6.38", + "@fluentui/utilities": "^8.13.21", "@microsoft/load-themed-styles": "^1.10.26", "tslib": "^2.1.0" } }, "@fluentui/react-accordion": { - "version": "9.1.16", - "resolved": "https://registry.npmjs.org/@fluentui/react-accordion/-/react-accordion-9.1.16.tgz", - "integrity": "sha512-nfvmDIbZU7Ioe3HU4TnRTLowgNS6ZrJOM0CVRtbxM3F0NAUqigjVnwWXnNyXHWSWKkzKVcF9CYvxQavtnvh2fg==", - "requires": { - "@fluentui/react-aria": "^9.3.22", - "@fluentui/react-context-selector": "^9.1.22", - "@fluentui/react-icons": "^2.0.196", - "@fluentui/react-jsx-runtime": "9.0.0-alpha.6", - "@fluentui/react-shared-contexts": "^9.5.0", - "@fluentui/react-tabster": "^9.7.5", - "@fluentui/react-theme": "^9.1.8", - "@fluentui/react-utilities": "^9.9.2", - "@griffel/react": "^1.5.7", - "@swc/helpers": "^0.4.14" + "version": "9.3.24", + "resolved": "https://registry.npmjs.org/@fluentui/react-accordion/-/react-accordion-9.3.24.tgz", + "integrity": "sha512-Q/smYyxa1E9bX9opA5SQTo8h48T7R/TidCI4Jz7CXVBBhcVCWU0qoKeFs/JmUbMzbrkuSLEHUlGHZH4pGucf2w==", + "requires": { + "@fluentui/react-aria": "^9.3.43", + "@fluentui/react-context-selector": "^9.1.41", + "@fluentui/react-icons": "^2.0.217", + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-shared-contexts": "^9.10.0", + "@fluentui/react-tabster": "^9.14.1", + "@fluentui/react-theme": "^9.1.14", + "@fluentui/react-utilities": "^9.15.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1" } }, "@fluentui/react-alert": { - "version": "9.0.0-beta.51", - "resolved": "https://registry.npmjs.org/@fluentui/react-alert/-/react-alert-9.0.0-beta.51.tgz", - "integrity": "sha512-0LR4ThWBZO3hA7n7yluvzm3ytE8QRj+WHVdmg21Iu6f8S9EECcMmOwN4TINzXuuyKBbjERl3heuqjeriRLzANg==", + "version": "9.0.0-beta.88", + "resolved": "https://registry.npmjs.org/@fluentui/react-alert/-/react-alert-9.0.0-beta.88.tgz", + "integrity": "sha512-+HG8ehOOycXrJMwobFcNGUuItNQ4hCrwOhDODfT54F3f/RJW7dSrDNEM3xY1spwZBjxlKhMmkxA4zSn03CittQ==", "requires": { - "@fluentui/react-avatar": "^9.5.5", - "@fluentui/react-button": "^9.3.16", - "@fluentui/react-icons": "^2.0.196", - "@fluentui/react-jsx-runtime": "9.0.0-alpha.6", - "@fluentui/react-tabster": "^9.7.5", - "@fluentui/react-theme": "^9.1.8", - "@fluentui/react-utilities": "^9.9.2", - "@griffel/react": "^1.5.7", - "@swc/helpers": "^0.4.14" + "@fluentui/react-avatar": "^9.5.42", + "@fluentui/react-button": "^9.3.51", + "@fluentui/react-icons": "^2.0.217", + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-tabster": "^9.14.1", + "@fluentui/react-theme": "^9.1.14", + "@fluentui/react-utilities": "^9.15.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1" } }, "@fluentui/react-aria": { - "version": "9.3.22", - "resolved": "https://registry.npmjs.org/@fluentui/react-aria/-/react-aria-9.3.22.tgz", - "integrity": "sha512-H/WUp2TKg9XkF5B12Vpv1NN2/UPoV6NTgZZtsHs1kaZvHiBwhgODE5f8DFyUhoWUH4577r5X1kxjlEmfIvg5gw==", + "version": "9.3.43", + "resolved": "https://registry.npmjs.org/@fluentui/react-aria/-/react-aria-9.3.43.tgz", + "integrity": "sha512-LO/u3ea4IgZUlXePO4V/ufwMZnoSILTT8FEgsxkcgauzMxmIRwijtJ9fYImifndu95Npl3OlA77CmMZwFsLsDQ==", "requires": { - "@fluentui/keyboard-keys": "^9.0.3", - "@fluentui/react-utilities": "^9.9.2", - "@swc/helpers": "^0.4.14" + "@fluentui/keyboard-keys": "^9.0.6", + "@fluentui/react-utilities": "^9.15.1", + "@swc/helpers": "^0.5.1" } }, "@fluentui/react-avatar": { - "version": "9.5.5", - "resolved": "https://registry.npmjs.org/@fluentui/react-avatar/-/react-avatar-9.5.5.tgz", - "integrity": "sha512-p9CwOxa7+AoMGSa/WPYY7NvgjuSYe54+F4OcuhoM5FVktPPmlDuwXkc7Z/Ud9AiEoqK1z2kUuqizW4k0cVqP0A==", - "requires": { - "@fluentui/react-badge": "^9.1.15", - "@fluentui/react-context-selector": "^9.1.22", - "@fluentui/react-icons": "^2.0.196", - "@fluentui/react-jsx-runtime": "9.0.0-alpha.6", - "@fluentui/react-popover": "^9.6.0", - "@fluentui/react-shared-contexts": "^9.5.0", - "@fluentui/react-tabster": "^9.7.5", - "@fluentui/react-theme": "^9.1.8", - "@fluentui/react-tooltip": "^9.2.16", - "@fluentui/react-utilities": "^9.9.2", - "@griffel/react": "^1.5.7", - "@swc/helpers": "^0.4.14" + "version": "9.5.42", + "resolved": "https://registry.npmjs.org/@fluentui/react-avatar/-/react-avatar-9.5.42.tgz", + "integrity": "sha512-jhwG0HclBDavkbMQDu7wonBPP6KJofhuPOfMvKLJRpWcJjBkFxxPbd2EhUiShhux77Jexx9rCx+7HcD0zA4oRg==", + "requires": { + "@fluentui/react-badge": "^9.2.10", + "@fluentui/react-context-selector": "^9.1.41", + "@fluentui/react-icons": "^2.0.217", + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-popover": "^9.8.17", + "@fluentui/react-shared-contexts": "^9.10.0", + "@fluentui/react-tabster": "^9.14.1", + "@fluentui/react-theme": "^9.1.14", + "@fluentui/react-tooltip": "^9.3.18", + "@fluentui/react-utilities": "^9.15.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1" } }, "@fluentui/react-badge": { - "version": "9.1.15", - "resolved": "https://registry.npmjs.org/@fluentui/react-badge/-/react-badge-9.1.15.tgz", - "integrity": "sha512-CgxKzG0Kbm7GRewWn583nTxY41maSLpf99WOaa8TjaFjRx2SdWwh4qPrJj9NxnkqgItdS80ck1NnoSdoF0WueA==", + "version": "9.2.10", + "resolved": "https://registry.npmjs.org/@fluentui/react-badge/-/react-badge-9.2.10.tgz", + "integrity": "sha512-Z4lS3VHyqTxTEUwuCXD7th5wK+5E+FAyTLgs0S5wvh8B7t347IBEyyhlaTfrjzZA5lKsU2KWL5GKsgBQdPZURg==", "requires": { - "@fluentui/react-icons": "^2.0.196", - "@fluentui/react-jsx-runtime": "9.0.0-alpha.6", - "@fluentui/react-shared-contexts": "^9.5.0", - "@fluentui/react-theme": "^9.1.8", - "@fluentui/react-utilities": "^9.9.2", - "@griffel/react": "^1.5.7", - "@swc/helpers": "^0.4.14" + "@fluentui/react-icons": "^2.0.217", + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-shared-contexts": "^9.10.0", + "@fluentui/react-theme": "^9.1.14", + "@fluentui/react-utilities": "^9.15.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1" } }, "@fluentui/react-button": { - "version": "9.3.16", - "resolved": "https://registry.npmjs.org/@fluentui/react-button/-/react-button-9.3.16.tgz", - "integrity": "sha512-fZ5hkmA/RIcke1/lt2YW4q2dyWHgF330yayu3JuR4nhmFqKM/eZFdwQS4mYDBCMkllcbBeeF69lRKGftQ6MX0A==", - "requires": { - "@fluentui/keyboard-keys": "^9.0.3", - "@fluentui/react-aria": "^9.3.22", - "@fluentui/react-icons": "^2.0.196", - "@fluentui/react-jsx-runtime": "9.0.0-alpha.6", - "@fluentui/react-shared-contexts": "^9.5.0", - "@fluentui/react-tabster": "^9.7.5", - "@fluentui/react-theme": "^9.1.8", - "@fluentui/react-utilities": "^9.9.2", - "@griffel/react": "^1.5.7", - "@swc/helpers": "^0.4.14" + "version": "9.3.51", + "resolved": "https://registry.npmjs.org/@fluentui/react-button/-/react-button-9.3.51.tgz", + "integrity": "sha512-nHAF2vf8kI1hLr84pW9TKcXlCY7znDzn7L67TjpKdGmYIUAsv8O74H9gQ4wc73qyr47z52wo7lrd2W4vM1RJOw==", + "requires": { + "@fluentui/keyboard-keys": "^9.0.6", + "@fluentui/react-aria": "^9.3.43", + "@fluentui/react-icons": "^2.0.217", + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-shared-contexts": "^9.10.0", + "@fluentui/react-tabster": "^9.14.1", + "@fluentui/react-theme": "^9.1.14", + "@fluentui/react-utilities": "^9.15.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1" } }, "@fluentui/react-card": { - "version": "9.0.14", - "resolved": "https://registry.npmjs.org/@fluentui/react-card/-/react-card-9.0.14.tgz", - "integrity": "sha512-HifE4x+kREZmeXD6YqtcpFIas12RoymeZFDyRx5iy58/H6sL6wwKHchoF5QGWGsQq7In+6QFfoWUPxWou46yMQ==", + "version": "9.0.50", + "resolved": "https://registry.npmjs.org/@fluentui/react-card/-/react-card-9.0.50.tgz", + "integrity": "sha512-eJA0LI2hb2/PQWZL+Py3smcjV7OF3n2dezcWIMBQuWM7tuwBOGRsqrHUwOrSEPWUySp8Kzw8NSLNabnnnp4Isg==", "requires": { - "@fluentui/keyboard-keys": "^9.0.3", - "@fluentui/react-jsx-runtime": "9.0.0-alpha.6", - "@fluentui/react-tabster": "^9.7.5", - "@fluentui/react-theme": "^9.1.8", - "@fluentui/react-utilities": "^9.9.2", - "@griffel/react": "^1.5.7", - "@swc/helpers": "^0.4.14" + "@fluentui/keyboard-keys": "^9.0.6", + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-tabster": "^9.14.1", + "@fluentui/react-theme": "^9.1.14", + "@fluentui/react-utilities": "^9.15.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1" } }, "@fluentui/react-checkbox": { - "version": "9.1.17", - "resolved": "https://registry.npmjs.org/@fluentui/react-checkbox/-/react-checkbox-9.1.17.tgz", - "integrity": "sha512-qgH292TTOBlWGViLtMn4MxJxPaCJHoF1zuygMRgIb988E6W5NUpRZPbROKDyiAYDhAf8S9h1sL6ZkCwff03Bbw==", - "requires": { - "@fluentui/react-field": "^9.1.6", - "@fluentui/react-icons": "^2.0.196", - "@fluentui/react-jsx-runtime": "9.0.0-alpha.6", - "@fluentui/react-label": "^9.1.15", - "@fluentui/react-shared-contexts": "^9.5.0", - "@fluentui/react-tabster": "^9.7.5", - "@fluentui/react-theme": "^9.1.8", - "@fluentui/react-utilities": "^9.9.2", - "@griffel/react": "^1.5.7", - "@swc/helpers": "^0.4.14" + "version": "9.1.52", + "resolved": "https://registry.npmjs.org/@fluentui/react-checkbox/-/react-checkbox-9.1.52.tgz", + "integrity": "sha512-yHJzZmW5xcQgOlG0ZER9ua23/TBWrBfoUjv0V94Q0X3Qa5PRpepxbGpkyz5zux9tl3J/tqIHW9tBKkW9RVLI4w==", + "requires": { + "@fluentui/react-field": "^9.1.38", + "@fluentui/react-icons": "^2.0.217", + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-label": "^9.1.46", + "@fluentui/react-shared-contexts": "^9.10.0", + "@fluentui/react-tabster": "^9.14.1", + "@fluentui/react-theme": "^9.1.14", + "@fluentui/react-utilities": "^9.15.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1" } }, "@fluentui/react-combobox": { - "version": "9.4.0", - "resolved": "https://registry.npmjs.org/@fluentui/react-combobox/-/react-combobox-9.4.0.tgz", - "integrity": "sha512-VFPY56PsoyYSdEgH2VsgOGIvwP6FqJ1+YIs77VFL20ZJteI0Escs9KqLukpPrEdQSfNoysKSZA6ntmt6t2rB+w==", - "requires": { - "@fluentui/keyboard-keys": "^9.0.3", - "@fluentui/react-context-selector": "^9.1.22", - "@fluentui/react-field": "^9.1.6", - "@fluentui/react-icons": "^2.0.196", - "@fluentui/react-jsx-runtime": "9.0.0-alpha.6", - "@fluentui/react-portal": "^9.2.12", - "@fluentui/react-positioning": "^9.6.0", - "@fluentui/react-shared-contexts": "^9.5.0", - "@fluentui/react-theme": "^9.1.8", - "@fluentui/react-utilities": "^9.9.2", - "@griffel/react": "^1.5.7", - "@swc/helpers": "^0.4.14" + "version": "9.5.26", + "resolved": "https://registry.npmjs.org/@fluentui/react-combobox/-/react-combobox-9.5.26.tgz", + "integrity": "sha512-v1aH7IbU7IXfZ8H6SVMqf0OYywUWfc7ZdcIdLqXq3m86BgXzh9xJ6gctrox27363x/QCKetn99VmVkRTDz3kSg==", + "requires": { + "@fluentui/keyboard-keys": "^9.0.6", + "@fluentui/react-context-selector": "^9.1.41", + "@fluentui/react-field": "^9.1.38", + "@fluentui/react-icons": "^2.0.217", + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-portal": "^9.3.25", + "@fluentui/react-positioning": "^9.9.21", + "@fluentui/react-shared-contexts": "^9.10.0", + "@fluentui/react-theme": "^9.1.14", + "@fluentui/react-utilities": "^9.15.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1" } }, "@fluentui/react-components": { - "version": "9.21.0", - "resolved": "https://registry.npmjs.org/@fluentui/react-components/-/react-components-9.21.0.tgz", - "integrity": "sha512-SysBfRH7dCgfLC/HmyEcwuZFs/RjsNjlY5rTiKjdmQcHVb/mkXvNZD7uMdcDU9zHAkk9ZkV0/45EtDJaw95cTQ==", - "requires": { - "@fluentui/react-accordion": "^9.1.16", - "@fluentui/react-alert": "9.0.0-beta.51", - "@fluentui/react-avatar": "^9.5.5", - "@fluentui/react-badge": "^9.1.15", - "@fluentui/react-button": "^9.3.16", - "@fluentui/react-card": "^9.0.14", - "@fluentui/react-checkbox": "^9.1.17", - "@fluentui/react-combobox": "^9.4.0", - "@fluentui/react-dialog": "^9.5.9", - "@fluentui/react-divider": "^9.2.15", - "@fluentui/react-drawer": "9.0.0-beta.1", - "@fluentui/react-field": "^9.1.6", - "@fluentui/react-image": "^9.1.12", - "@fluentui/react-infobutton": "9.0.0-beta.34", - "@fluentui/react-input": "^9.4.16", - "@fluentui/react-label": "^9.1.15", - "@fluentui/react-link": "^9.0.42", - "@fluentui/react-menu": "^9.7.16", - "@fluentui/react-overflow": "^9.0.19", - "@fluentui/react-persona": "^9.2.15", - "@fluentui/react-popover": "^9.6.0", - "@fluentui/react-portal": "^9.2.12", - "@fluentui/react-positioning": "^9.6.0", - "@fluentui/react-progress": "^9.1.16", - "@fluentui/react-provider": "^9.7.2", - "@fluentui/react-radio": "^9.1.17", - "@fluentui/react-select": "^9.1.16", - "@fluentui/react-shared-contexts": "^9.5.0", - "@fluentui/react-skeleton": "^9.0.4", - "@fluentui/react-slider": "^9.1.17", - "@fluentui/react-spinbutton": "^9.2.16", - "@fluentui/react-spinner": "^9.2.2", - "@fluentui/react-switch": "^9.1.17", - "@fluentui/react-table": "^9.3.0", - "@fluentui/react-tabs": "^9.3.17", - "@fluentui/react-tabster": "^9.7.5", - "@fluentui/react-text": "^9.3.12", - "@fluentui/react-textarea": "^9.3.16", - "@fluentui/react-theme": "^9.1.8", - "@fluentui/react-toolbar": "^9.1.17", - "@fluentui/react-tooltip": "^9.2.16", - "@fluentui/react-tree": "9.0.0-beta.18", - "@fluentui/react-utilities": "^9.9.2", - "@fluentui/react-virtualizer": "9.0.0-alpha.22", - "@griffel/react": "^1.5.7", - "@swc/helpers": "^0.4.14" + "version": "9.36.0", + "resolved": "https://registry.npmjs.org/@fluentui/react-components/-/react-components-9.36.0.tgz", + "integrity": "sha512-bO9RAgEy2vLVt9cKxK47FulQvUOKDrO9YzukxPp8sPiw4NCIhkRQqMKO86n9+pv+8ZEnziIzV/IxCQOIX3TOQw==", + "requires": { + "@fluentui/react-accordion": "^9.3.24", + "@fluentui/react-alert": "9.0.0-beta.88", + "@fluentui/react-avatar": "^9.5.42", + "@fluentui/react-badge": "^9.2.10", + "@fluentui/react-button": "^9.3.51", + "@fluentui/react-card": "^9.0.50", + "@fluentui/react-checkbox": "^9.1.52", + "@fluentui/react-combobox": "^9.5.26", + "@fluentui/react-dialog": "^9.8.0", + "@fluentui/react-divider": "^9.2.46", + "@fluentui/react-drawer": "9.0.0-beta.37", + "@fluentui/react-field": "^9.1.38", + "@fluentui/react-image": "^9.1.43", + "@fluentui/react-infobutton": "9.0.0-beta.72", + "@fluentui/react-infolabel": "9.0.0", + "@fluentui/react-input": "^9.4.48", + "@fluentui/react-label": "^9.1.46", + "@fluentui/react-link": "^9.1.30", + "@fluentui/react-menu": "^9.12.28", + "@fluentui/react-message-bar": "^9.0.2", + "@fluentui/react-overflow": "^9.0.41", + "@fluentui/react-persona": "^9.2.52", + "@fluentui/react-popover": "^9.8.17", + "@fluentui/react-portal": "^9.3.25", + "@fluentui/react-positioning": "^9.9.21", + "@fluentui/react-progress": "^9.1.48", + "@fluentui/react-provider": "^9.10.9", + "@fluentui/react-radio": "^9.1.52", + "@fluentui/react-select": "^9.1.48", + "@fluentui/react-shared-contexts": "^9.10.0", + "@fluentui/react-skeleton": "^9.0.36", + "@fluentui/react-slider": "^9.1.52", + "@fluentui/react-spinbutton": "^9.2.48", + "@fluentui/react-spinner": "^9.3.26", + "@fluentui/react-switch": "^9.1.52", + "@fluentui/react-table": "^9.10.7", + "@fluentui/react-tabs": "^9.3.53", + "@fluentui/react-tabster": "^9.14.1", + "@fluentui/react-tags": "^9.0.6", + "@fluentui/react-text": "^9.3.43", + "@fluentui/react-textarea": "^9.3.48", + "@fluentui/react-theme": "^9.1.14", + "@fluentui/react-toast": "^9.3.13", + "@fluentui/react-toolbar": "^9.1.52", + "@fluentui/react-tooltip": "^9.3.18", + "@fluentui/react-tree": "^9.4.7", + "@fluentui/react-utilities": "^9.15.1", + "@fluentui/react-virtualizer": "9.0.0-alpha.53", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1" } }, "@fluentui/react-context-selector": { - "version": "9.1.22", - "resolved": "https://registry.npmjs.org/@fluentui/react-context-selector/-/react-context-selector-9.1.22.tgz", - "integrity": "sha512-iPXjx8QkEc8kV2YdAz7z17phb+ZDDDecRz/DygI7qdiZPtPTyJxZoelpzA8jb6cbz1+P7kzlbaNz9It24+a0qA==", + "version": "9.1.41", + "resolved": "https://registry.npmjs.org/@fluentui/react-context-selector/-/react-context-selector-9.1.41.tgz", + "integrity": "sha512-Q0Gbem5rz7hK9uBrWLOhD4TWzCSqYzA+TNpd8vYE2/9GHFTc16EvKEg1gsnvlA0lNHwTR0JwT0QT8d2KsNHa4w==", "requires": { - "@fluentui/react-utilities": "^9.9.2", - "@swc/helpers": "^0.4.14" + "@fluentui/react-utilities": "^9.15.1", + "@swc/helpers": "^0.5.1" } }, "@fluentui/react-dialog": { - "version": "9.5.9", - "resolved": "https://registry.npmjs.org/@fluentui/react-dialog/-/react-dialog-9.5.9.tgz", - "integrity": "sha512-6kZafolihGDggZjH30rjwFBE/QDxTqRpHRLaPur5WBzGv0wkXyYLCVKomFUH4pN0fCPZ8tT7vy1Tm4GAe9SYMw==", - "requires": { - "@fluentui/keyboard-keys": "^9.0.3", - "@fluentui/react-aria": "^9.3.22", - "@fluentui/react-context-selector": "^9.1.22", - "@fluentui/react-icons": "^2.0.196", - "@fluentui/react-jsx-runtime": "9.0.0-alpha.6", - "@fluentui/react-portal": "^9.2.12", - "@fluentui/react-shared-contexts": "^9.5.0", - "@fluentui/react-tabster": "^9.7.5", - "@fluentui/react-theme": "^9.1.8", - "@fluentui/react-utilities": "^9.9.2", - "@griffel/react": "^1.5.7", - "@swc/helpers": "^0.4.14" + "version": "9.8.0", + "resolved": "https://registry.npmjs.org/@fluentui/react-dialog/-/react-dialog-9.8.0.tgz", + "integrity": "sha512-fT+nSeJNIDgUSDI1CRmLMa/yBQc6CPUjIkSuvBas0bjvEsG1MRXCecwXfJle4WxMyC3ax///4Ugjc1qlmx8iuA==", + "requires": { + "@fluentui/keyboard-keys": "^9.0.6", + "@fluentui/react-aria": "^9.3.43", + "@fluentui/react-context-selector": "^9.1.41", + "@fluentui/react-icons": "^2.0.217", + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-portal": "^9.3.25", + "@fluentui/react-shared-contexts": "^9.10.0", + "@fluentui/react-tabster": "^9.14.1", + "@fluentui/react-theme": "^9.1.14", + "@fluentui/react-utilities": "^9.15.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1", + "react-transition-group": "^4.4.1" } }, "@fluentui/react-divider": { - "version": "9.2.15", - "resolved": "https://registry.npmjs.org/@fluentui/react-divider/-/react-divider-9.2.15.tgz", - "integrity": "sha512-AHGFkd/g4hBQX5WmFyG9WKisnvloPS7aJuI8zIBPcJ8LQdaDhQKMdXenIBTknOm4mnnUG4ytPZVAijVhb/yxgQ==", + "version": "9.2.46", + "resolved": "https://registry.npmjs.org/@fluentui/react-divider/-/react-divider-9.2.46.tgz", + "integrity": "sha512-+YBrlHz5MZ+gjH36J5orn9MZNXSdz6vOm+4XmJZRyStvfStjcfgVImOfmDs4SYcokwvqq5RTrL9iL/VGseTTMQ==", "requires": { - "@fluentui/react-jsx-runtime": "9.0.0-alpha.6", - "@fluentui/react-shared-contexts": "^9.5.0", - "@fluentui/react-theme": "^9.1.8", - "@fluentui/react-utilities": "^9.9.2", - "@griffel/react": "^1.5.7", - "@swc/helpers": "^0.4.14" + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-shared-contexts": "^9.10.0", + "@fluentui/react-theme": "^9.1.14", + "@fluentui/react-utilities": "^9.15.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1" } }, "@fluentui/react-drawer": { - "version": "9.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@fluentui/react-drawer/-/react-drawer-9.0.0-beta.1.tgz", - "integrity": "sha512-lFlkMI2iJbFKhxLYZQLM+bDtCgg9x2VkznJx62yclcBOJ/BI2k1w7sQ3RBHl/VPxFJCdm5KpuyHDcuR86VJunA==", + "version": "9.0.0-beta.37", + "resolved": "https://registry.npmjs.org/@fluentui/react-drawer/-/react-drawer-9.0.0-beta.37.tgz", + "integrity": "sha512-0xbNpPP9HljG7XpFkN8n+rOuUwHvIM/hPBJJvUF464U+HIGX2XbsoSuJ1K7CD96Jbwd2S5NFvgg2/7TSH9s9gg==", "requires": { - "@fluentui/react-dialog": "^9.5.9", - "@fluentui/react-jsx-runtime": "9.0.0-alpha.6", - "@fluentui/react-shared-contexts": "^9.5.0", - "@fluentui/react-theme": "^9.1.8", - "@fluentui/react-utilities": "^9.9.2", - "@griffel/react": "^1.5.7", - "@swc/helpers": "^0.4.14" + "@fluentui/react-dialog": "^9.8.0", + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-motion-preview": "^0.3.4", + "@fluentui/react-shared-contexts": "^9.10.0", + "@fluentui/react-tabster": "^9.14.1", + "@fluentui/react-theme": "^9.1.14", + "@fluentui/react-utilities": "^9.15.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1" } }, "@fluentui/react-field": { - "version": "9.1.6", - "resolved": "https://registry.npmjs.org/@fluentui/react-field/-/react-field-9.1.6.tgz", - "integrity": "sha512-vJqh8AFvo1G3gxHJglv5TyRgD1P+qEmN9BNaQvnr8sj+iquGDs3Mf7hal5rT+PetuF6Owrh6g0mOrzkaJMyTcQ==", + "version": "9.1.38", + "resolved": "https://registry.npmjs.org/@fluentui/react-field/-/react-field-9.1.38.tgz", + "integrity": "sha512-P+zOPm2tu7//trczqkQQT0DP9r6oVEwBlaBiAJara464sudCiXbsq8F4wFHxTAw7BNtbqKenOsEJkJq1sx4Exw==", "requires": { - "@fluentui/react-context-selector": "^9.1.22", - "@fluentui/react-icons": "^2.0.196", - "@fluentui/react-jsx-runtime": "9.0.0-alpha.6", - "@fluentui/react-label": "^9.1.15", - "@fluentui/react-theme": "^9.1.8", - "@fluentui/react-utilities": "^9.9.2", - "@griffel/react": "^1.5.7", - "@swc/helpers": "^0.4.14" + "@fluentui/react-context-selector": "^9.1.41", + "@fluentui/react-icons": "^2.0.217", + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-label": "^9.1.46", + "@fluentui/react-theme": "^9.1.14", + "@fluentui/react-utilities": "^9.15.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1" } }, "@fluentui/react-focus": { - "version": "8.8.30", - "resolved": "https://registry.npmjs.org/@fluentui/react-focus/-/react-focus-8.8.30.tgz", - "integrity": "sha512-dKQQtNTZbQOE+u/Tmh7AbtJPSpzQNI0L8o55a22y4U7s33rizUd++CIiToXsB+bPvlotcmpZswZQ8V06zM4KIw==", - "requires": { - "@fluentui/keyboard-key": "^0.4.11", - "@fluentui/merge-styles": "^8.5.12", - "@fluentui/set-version": "^8.2.11", - "@fluentui/style-utilities": "^8.9.16", - "@fluentui/utilities": "^8.13.18", + "version": "8.8.34", + "resolved": "https://registry.npmjs.org/@fluentui/react-focus/-/react-focus-8.8.34.tgz", + "integrity": "sha512-GNi8MqQRdoIaYpiz5kWIQaX1mNzFz3X+UShezA3gohrXnkONUvrPBuFDyYgQXoqk67juEZ+oGxl2PpKjz08HCA==", + "requires": { + "@fluentui/keyboard-key": "^0.4.12", + "@fluentui/merge-styles": "^8.5.13", + "@fluentui/set-version": "^8.2.12", + "@fluentui/style-utilities": "^8.9.20", + "@fluentui/utilities": "^8.13.21", "tslib": "^2.1.0" } }, "@fluentui/react-hooks": { - "version": "8.6.29", - "resolved": "https://registry.npmjs.org/@fluentui/react-hooks/-/react-hooks-8.6.29.tgz", - "integrity": "sha512-MeVevmGJtrYxdhoarrkVWE0Hs4XdzOc9A3tiOjMBIcwOvoOYOAoOELoHK/wuulPVwUn2R9Y+7JpJ6oCe4ImdJw==", + "version": "8.6.33", + "resolved": "https://registry.npmjs.org/@fluentui/react-hooks/-/react-hooks-8.6.33.tgz", + "integrity": "sha512-3P9RA34QhhjFwHwCvfOqMDgCwvks4hgMsEGvQVTdrcya4uskxBx4FqCLzoMxkXcAJjJCiTJmPx/mZQqQpgoyoA==", "requires": { - "@fluentui/react-window-provider": "^2.2.15", - "@fluentui/set-version": "^8.2.11", - "@fluentui/utilities": "^8.13.18", + "@fluentui/react-window-provider": "^2.2.16", + "@fluentui/set-version": "^8.2.12", + "@fluentui/utilities": "^8.13.21", "tslib": "^2.1.0" } }, "@fluentui/react-icons": { - "version": "2.0.203", - "resolved": "https://registry.npmjs.org/@fluentui/react-icons/-/react-icons-2.0.203.tgz", - "integrity": "sha512-eOV9GnCFzEIgllHEYenfkVB2MYChMRj2B8Vlr4qqdL0Kts7gRMfBIb+0+ADr5a3KIN0GtdAvG7KtsJ99O6gNmw==", + "version": "2.0.221", + "resolved": "https://registry.npmjs.org/@fluentui/react-icons/-/react-icons-2.0.221.tgz", + "integrity": "sha512-Dj5ihpaE4y3gWs81SJGuu8Pz3rPR6ioHHbqz8eETkbhpAW8Q3dRITFcfdYQV/ZEsj33/uSiis8iLMdhY/xWMMw==", "requires": { "@griffel/react": "^1.0.0", "tslib": "^2.1.0" } }, "@fluentui/react-image": { - "version": "9.1.12", - "resolved": "https://registry.npmjs.org/@fluentui/react-image/-/react-image-9.1.12.tgz", - "integrity": "sha512-NI77BzDNO8wJJ0sDM9g86YC6cI1DH/hJQTqlHaXG8vRwM81qXrsPAqc/7Y9Jh+CBOe408E8d83yrEvoXUfj5cA==", + "version": "9.1.43", + "resolved": "https://registry.npmjs.org/@fluentui/react-image/-/react-image-9.1.43.tgz", + "integrity": "sha512-87ogWT/gwa4DQe4uXjqwFD29Zkf4SxIHHjPzdydYTEpLEa3FEGF9HRW/Sz7v7Qz/pR4Ic9LsBbuwk+/XhpEa7w==", "requires": { - "@fluentui/react-jsx-runtime": "9.0.0-alpha.6", - "@fluentui/react-shared-contexts": "^9.5.0", - "@fluentui/react-theme": "^9.1.8", - "@fluentui/react-utilities": "^9.9.2", - "@griffel/react": "^1.5.7", - "@swc/helpers": "^0.4.14" + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-shared-contexts": "^9.10.0", + "@fluentui/react-theme": "^9.1.14", + "@fluentui/react-utilities": "^9.15.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1" } }, "@fluentui/react-infobutton": { - "version": "9.0.0-beta.34", - "resolved": "https://registry.npmjs.org/@fluentui/react-infobutton/-/react-infobutton-9.0.0-beta.34.tgz", - "integrity": "sha512-0EhZ1iBFPbq1KH4dNTG3bB74fkzK5KLdBCaWlF1mGQyzGE5W1ukpn16Tr9Ul1O6tc8uAgTIJxf/VwRQO3amdjQ==", + "version": "9.0.0-beta.72", + "resolved": "https://registry.npmjs.org/@fluentui/react-infobutton/-/react-infobutton-9.0.0-beta.72.tgz", + "integrity": "sha512-lpuk5xfNR8c5f2eM9uwGOTZdm9dwttSeJKKGyr2myPCGvm9lq0oIft72WsPCqYl2aYTyl4284vjY4b9RIIiCEQ==", + "requires": { + "@fluentui/react-icons": "^2.0.217", + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-label": "^9.1.46", + "@fluentui/react-popover": "^9.8.17", + "@fluentui/react-tabster": "^9.14.1", + "@fluentui/react-theme": "^9.1.14", + "@fluentui/react-utilities": "^9.15.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1" + } + }, + "@fluentui/react-infolabel": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@fluentui/react-infolabel/-/react-infolabel-9.0.0.tgz", + "integrity": "sha512-vp/XvPB0SbYkGjQnuygsGhGq4ccVbeo3ZRw1OfB9+o7uVDL3Z30Y+SSRkvIcu9e+2lGVU7dn+xk4KRE3un1JPw==", "requires": { - "@fluentui/react-icons": "^2.0.196", - "@fluentui/react-jsx-runtime": "9.0.0-alpha.6", - "@fluentui/react-label": "^9.1.15", - "@fluentui/react-popover": "^9.6.0", - "@fluentui/react-tabster": "^9.7.5", - "@fluentui/react-theme": "^9.1.8", - "@fluentui/react-utilities": "^9.9.2", - "@griffel/react": "^1.5.7", - "@swc/helpers": "^0.4.14" + "@fluentui/react-icons": "^2.0.217", + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-label": "^9.1.46", + "@fluentui/react-popover": "^9.8.17", + "@fluentui/react-tabster": "^9.14.1", + "@fluentui/react-theme": "^9.1.14", + "@fluentui/react-utilities": "^9.15.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1" } }, "@fluentui/react-input": { - "version": "9.4.16", - "resolved": "https://registry.npmjs.org/@fluentui/react-input/-/react-input-9.4.16.tgz", - "integrity": "sha512-xbeV9jG3C99NOFT89pIQR+P2vpIll2Cm4/Iio/Gu5+86Epa9Wv0aeRRmEYskVWMp69dl7LKqs7bkhpvKYOmu+w==", + "version": "9.4.48", + "resolved": "https://registry.npmjs.org/@fluentui/react-input/-/react-input-9.4.48.tgz", + "integrity": "sha512-uRwwkVQU+USmBMeZf2gBTD5EokVr2hTS43cU5EPWPRb5shPKPCS5OC9uXBvvJmZyqvCzibzeFzf9WRJtFX0geg==", "requires": { - "@fluentui/react-field": "^9.1.6", - "@fluentui/react-jsx-runtime": "9.0.0-alpha.6", - "@fluentui/react-shared-contexts": "^9.5.0", - "@fluentui/react-theme": "^9.1.8", - "@fluentui/react-utilities": "^9.9.2", - "@griffel/react": "^1.5.7", - "@swc/helpers": "^0.4.14" + "@fluentui/react-field": "^9.1.38", + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-shared-contexts": "^9.10.0", + "@fluentui/react-theme": "^9.1.14", + "@fluentui/react-utilities": "^9.15.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1" } }, "@fluentui/react-jsx-runtime": { - "version": "9.0.0-alpha.6", - "resolved": "https://registry.npmjs.org/@fluentui/react-jsx-runtime/-/react-jsx-runtime-9.0.0-alpha.6.tgz", - "integrity": "sha512-in382HEVLAHfTVelJ0H+X5tpenydXe/8eaVTk64X/P48uLcye6MZBQG1jhUxCnRL7ZNu7bB8ya1VXF0GsdTt0g==", + "version": "9.0.18", + "resolved": "https://registry.npmjs.org/@fluentui/react-jsx-runtime/-/react-jsx-runtime-9.0.18.tgz", + "integrity": "sha512-uGuVSWwnNa6LrsPmTcqrF5xkjfc4RffUERART2Z4ojfn1wq7rhLOdWmCcEBnbYl1AhPvD1ohOLc8EqDrlrYPHw==", "requires": { - "@fluentui/react-utilities": "^9.9.2", - "@swc/helpers": "^0.4.14" + "@fluentui/react-utilities": "^9.15.1", + "@swc/helpers": "^0.5.1", + "react-is": "^17.0.2" + }, + "dependencies": { + "react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" + } } }, "@fluentui/react-label": { - "version": "9.1.15", - "resolved": "https://registry.npmjs.org/@fluentui/react-label/-/react-label-9.1.15.tgz", - "integrity": "sha512-LGPdzlOi6tasfFHqa+N3l9lgAQfipBniVpa0dd9IiGjNvx15ZZPGSSjGs6KkMiPxkIMizJN26OGZ8bXbR3ObgQ==", + "version": "9.1.46", + "resolved": "https://registry.npmjs.org/@fluentui/react-label/-/react-label-9.1.46.tgz", + "integrity": "sha512-BCI6m2PmWbdTAkqpRZ+3nwkHJs1adIIXRuX7ZdUHIlEdW6NzNEB7CljC/35UrQpWAtQvFnPp7fEBRlqyQSpJ2g==", "requires": { - "@fluentui/react-jsx-runtime": "9.0.0-alpha.6", - "@fluentui/react-shared-contexts": "^9.5.0", - "@fluentui/react-theme": "^9.1.8", - "@fluentui/react-utilities": "^9.9.2", - "@griffel/react": "^1.5.7", - "@swc/helpers": "^0.4.14" + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-shared-contexts": "^9.10.0", + "@fluentui/react-theme": "^9.1.14", + "@fluentui/react-utilities": "^9.15.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1" } }, "@fluentui/react-link": { - "version": "9.0.42", - "resolved": "https://registry.npmjs.org/@fluentui/react-link/-/react-link-9.0.42.tgz", - "integrity": "sha512-PJYSUbxikQQVq01v0UwT5hfaZ0jT/aUDvnLDrH96boY8SOyh1zyTIFbrjnOvgLpFeoE4rO+koXb0mVxBW5t4yg==", + "version": "9.1.30", + "resolved": "https://registry.npmjs.org/@fluentui/react-link/-/react-link-9.1.30.tgz", + "integrity": "sha512-j7hckSz4xZ7Sf/OXfeFVKS+gTphyhMMpxmP4eHgfOeYLSr23+kLqG6F5oothihdOYKyZ22yba+71nY1IMP3jTA==", "requires": { - "@fluentui/keyboard-keys": "^9.0.3", - "@fluentui/react-jsx-runtime": "9.0.0-alpha.6", - "@fluentui/react-tabster": "^9.7.5", - "@fluentui/react-theme": "^9.1.8", - "@fluentui/react-utilities": "^9.9.2", - "@griffel/react": "^1.5.7", - "@swc/helpers": "^0.4.14" + "@fluentui/keyboard-keys": "^9.0.6", + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-shared-contexts": "^9.10.0", + "@fluentui/react-tabster": "^9.14.1", + "@fluentui/react-theme": "^9.1.14", + "@fluentui/react-utilities": "^9.15.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1" } }, "@fluentui/react-menu": { - "version": "9.7.16", - "resolved": "https://registry.npmjs.org/@fluentui/react-menu/-/react-menu-9.7.16.tgz", - "integrity": "sha512-iVbBlFpQRO8STLa5cLF4v4wYdfPTVZsT27+E7JYhA1nmHJI8pwED22sTCVSPIGXVT58I5N8aVnQS4o6qf1YMmQ==", - "requires": { - "@fluentui/keyboard-keys": "^9.0.3", - "@fluentui/react-aria": "^9.3.22", - "@fluentui/react-context-selector": "^9.1.22", - "@fluentui/react-icons": "^2.0.196", - "@fluentui/react-jsx-runtime": "9.0.0-alpha.6", - "@fluentui/react-portal": "^9.2.12", - "@fluentui/react-positioning": "^9.6.0", - "@fluentui/react-shared-contexts": "^9.5.0", - "@fluentui/react-tabster": "^9.7.5", - "@fluentui/react-theme": "^9.1.8", - "@fluentui/react-utilities": "^9.9.2", - "@griffel/react": "^1.5.7", - "@swc/helpers": "^0.4.14" + "version": "9.12.28", + "resolved": "https://registry.npmjs.org/@fluentui/react-menu/-/react-menu-9.12.28.tgz", + "integrity": "sha512-3nWGWftJd69Ap4pcFa8p2VUtnjm+OOqBX8v+FN3z0Xyhyzdu6SYJquMMsr0YBnRFiuX0kodUqMg42PypaIo9fw==", + "requires": { + "@fluentui/keyboard-keys": "^9.0.6", + "@fluentui/react-aria": "^9.3.43", + "@fluentui/react-context-selector": "^9.1.41", + "@fluentui/react-icons": "^2.0.217", + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-portal": "^9.3.25", + "@fluentui/react-positioning": "^9.9.21", + "@fluentui/react-shared-contexts": "^9.10.0", + "@fluentui/react-tabster": "^9.14.1", + "@fluentui/react-theme": "^9.1.14", + "@fluentui/react-utilities": "^9.15.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1" + } + }, + "@fluentui/react-message-bar": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/@fluentui/react-message-bar/-/react-message-bar-9.0.2.tgz", + "integrity": "sha512-EKu84Nb04DN+GrawhsQ4lJaZ8X3OjOVYrrhrFBWn/6Eg9V1FWf4UFTxSLwdw7HR/IaokvWn8+lRIPqwHwMdGQg==", + "requires": { + "@fluentui/react-button": "^9.3.51", + "@fluentui/react-icons": "^2.0.217", + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-shared-contexts": "^9.10.0", + "@fluentui/react-theme": "^9.1.14", + "@fluentui/react-utilities": "^9.15.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1", + "react-transition-group": "^4.4.1" + } + }, + "@fluentui/react-motion-preview": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/@fluentui/react-motion-preview/-/react-motion-preview-0.3.4.tgz", + "integrity": "sha512-5Ru/uoLEMQVDEHJIqfs8TZPN38ABZlVgcnBHmfpYwF+zuL6RgP8VQehGSgDpD/eZ2YLHqa6Cl9uNWZYK4ouXNQ==", + "requires": { + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-shared-contexts": "^9.10.0", + "@fluentui/react-theme": "^9.1.14", + "@fluentui/react-utilities": "^9.15.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1" } }, "@fluentui/react-overflow": { - "version": "9.0.19", - "resolved": "https://registry.npmjs.org/@fluentui/react-overflow/-/react-overflow-9.0.19.tgz", - "integrity": "sha512-78bHljbIUiIkS9Qhdq7SSwefl7mUb92ps9N72P+AYz2oJITEXZyDtgt2LF7Ktb9qWTx1IOis4GzGeskhTTRZsw==", + "version": "9.0.41", + "resolved": "https://registry.npmjs.org/@fluentui/react-overflow/-/react-overflow-9.0.41.tgz", + "integrity": "sha512-zqBiSoqYqmlUt1bQS1+AyhRN57UsYeZE0sj2vUh2e9k03tSCAzijG3OPE3wzKnTsaFg0Ug8p2OTaeL6rytHEJQ==", "requires": { - "@fluentui/priority-overflow": "^9.0.3", - "@fluentui/react-context-selector": "^9.1.22", - "@fluentui/react-theme": "^9.1.8", - "@fluentui/react-utilities": "^9.9.2", - "@griffel/react": "^1.5.7", - "@swc/helpers": "^0.4.14" + "@fluentui/priority-overflow": "^9.1.8", + "@fluentui/react-context-selector": "^9.1.41", + "@fluentui/react-theme": "^9.1.14", + "@fluentui/react-utilities": "^9.15.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1" } }, "@fluentui/react-persona": { - "version": "9.2.15", - "resolved": "https://registry.npmjs.org/@fluentui/react-persona/-/react-persona-9.2.15.tgz", - "integrity": "sha512-7CZ8H6cTomHA2iGtjscFoGoJO0oHVTnf56IZahoo34V06QLZnnIfotDv+t1B+20tv6e2pEpdZOJqp/bD9AjpFQ==", + "version": "9.2.52", + "resolved": "https://registry.npmjs.org/@fluentui/react-persona/-/react-persona-9.2.52.tgz", + "integrity": "sha512-oAd21HdByuVZr7S3kEuyWUAAEjCXyfg13472k0DnyzDVSyIhlV823s2xFn+lis5OSk8iubbjLm7LAsnn1NlZxg==", "requires": { - "@fluentui/react-avatar": "^9.5.5", - "@fluentui/react-badge": "^9.1.15", - "@fluentui/react-jsx-runtime": "9.0.0-alpha.6", - "@fluentui/react-shared-contexts": "^9.5.0", - "@fluentui/react-theme": "^9.1.8", - "@fluentui/react-utilities": "^9.9.2", - "@griffel/react": "^1.5.7", - "@swc/helpers": "^0.4.14" + "@fluentui/react-avatar": "^9.5.42", + "@fluentui/react-badge": "^9.2.10", + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-shared-contexts": "^9.10.0", + "@fluentui/react-theme": "^9.1.14", + "@fluentui/react-utilities": "^9.15.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1" } }, "@fluentui/react-popover": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/@fluentui/react-popover/-/react-popover-9.6.0.tgz", - "integrity": "sha512-0OAjUICqP7UqNm0tMT+AfVs7OWmITfPThUsvEUJmQQsmFhAmHCgwIt5QwdLv5z5IGe+ZDWL8GBAkAgflECDcgw==", - "requires": { - "@fluentui/keyboard-keys": "^9.0.3", - "@fluentui/react-aria": "^9.3.22", - "@fluentui/react-context-selector": "^9.1.22", - "@fluentui/react-jsx-runtime": "9.0.0-alpha.6", - "@fluentui/react-portal": "^9.2.12", - "@fluentui/react-positioning": "^9.6.0", - "@fluentui/react-shared-contexts": "^9.5.0", - "@fluentui/react-tabster": "^9.7.5", - "@fluentui/react-theme": "^9.1.8", - "@fluentui/react-utilities": "^9.9.2", - "@griffel/react": "^1.5.7", - "@swc/helpers": "^0.4.14" + "version": "9.8.17", + "resolved": "https://registry.npmjs.org/@fluentui/react-popover/-/react-popover-9.8.17.tgz", + "integrity": "sha512-TI4CGAqIRwQzAVeYvyeewy6nvL2sO80XRfRSzFWH9+YS1SMt6cZKNuhFhHI9Mdx2umWoBSUxwODXhhNMpjmJFA==", + "requires": { + "@fluentui/keyboard-keys": "^9.0.6", + "@fluentui/react-aria": "^9.3.43", + "@fluentui/react-context-selector": "^9.1.41", + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-portal": "^9.3.25", + "@fluentui/react-positioning": "^9.9.21", + "@fluentui/react-shared-contexts": "^9.10.0", + "@fluentui/react-tabster": "^9.14.1", + "@fluentui/react-theme": "^9.1.14", + "@fluentui/react-utilities": "^9.15.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1" } }, "@fluentui/react-portal": { - "version": "9.2.12", - "resolved": "https://registry.npmjs.org/@fluentui/react-portal/-/react-portal-9.2.12.tgz", - "integrity": "sha512-VEdd8v/12p+oIY37ZYf3FCqW2H7q/mwbcieDJI9NeziZoN/zQYPQgyU3bXh/OsafC5vnIIwbNhV/jKFOaKhqow==", - "requires": { - "@fluentui/react-shared-contexts": "^9.5.0", - "@fluentui/react-tabster": "^9.7.5", - "@fluentui/react-utilities": "^9.9.2", - "@griffel/react": "^1.5.7", - "@swc/helpers": "^0.4.14", + "version": "9.3.25", + "resolved": "https://registry.npmjs.org/@fluentui/react-portal/-/react-portal-9.3.25.tgz", + "integrity": "sha512-8rFv4CvmMvNdaOyfOnfp2gM2mbrSpZuHhZGSYeWYXeSRFDRlm5uRlCHoCZy2Q2C08ye8OmNp61xBSgPVJzNd9Q==", + "requires": { + "@fluentui/react-shared-contexts": "^9.10.0", + "@fluentui/react-tabster": "^9.14.1", + "@fluentui/react-utilities": "^9.15.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1", "use-disposable": "^1.0.1" } }, "@fluentui/react-portal-compat-context": { - "version": "9.0.6", - "resolved": "https://registry.npmjs.org/@fluentui/react-portal-compat-context/-/react-portal-compat-context-9.0.6.tgz", - "integrity": "sha512-HUt0/YXKRB4chtzlGbZ+7y7FHFyqaI0CeMFAe/QBXVOiOwA01QOr2j4Uky+30vupspIt6mjodLanuw1jMybmqQ==", + "version": "9.0.10", + "resolved": "https://registry.npmjs.org/@fluentui/react-portal-compat-context/-/react-portal-compat-context-9.0.10.tgz", + "integrity": "sha512-l38C+tGb76yyFQ9sxUrY8DDyp2hoYru3pISFivPitFgkP6nqlnZPNd8yPE48RuVWjMhTKQ/1uCdE6ymBH9wBZQ==", "requires": { - "@swc/helpers": "^0.4.14" + "@swc/helpers": "^0.5.1" } }, "@fluentui/react-positioning": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/@fluentui/react-positioning/-/react-positioning-9.6.0.tgz", - "integrity": "sha512-Sx1gXj2SMm+iF0bTDhevsCZkR6QpvBFuvJ8P447ts/1pN+XT9vXq/WJsrIbCLqK7TLeT9Xxl0rjevGoTt9yaSw==", + "version": "9.9.21", + "resolved": "https://registry.npmjs.org/@fluentui/react-positioning/-/react-positioning-9.9.21.tgz", + "integrity": "sha512-4n3W8WTbEbkcnk3XhxXgFTgF7SSR9FxKfzsHDe56fUgVnpsIcKuR2BZw5sUYDEKVpw/qcxj4aNk/4i4fIPufAw==", "requires": { "@floating-ui/dom": "^1.2.0", - "@fluentui/react-shared-contexts": "^9.5.0", - "@fluentui/react-theme": "^9.1.8", - "@fluentui/react-utilities": "^9.9.2", - "@griffel/react": "^1.5.7", - "@swc/helpers": "^0.4.14" + "@fluentui/react-shared-contexts": "^9.10.0", + "@fluentui/react-theme": "^9.1.14", + "@fluentui/react-utilities": "^9.15.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1" } }, "@fluentui/react-progress": { - "version": "9.1.16", - "resolved": "https://registry.npmjs.org/@fluentui/react-progress/-/react-progress-9.1.16.tgz", - "integrity": "sha512-eVmKu1HcocQaDythgTZgSSzXt+f8NW6fOCdDX5hTG0Xug/5ohpBcbuumhNiZNTxyWHgN4l6ZzPr+h4jyHZdmvQ==", + "version": "9.1.48", + "resolved": "https://registry.npmjs.org/@fluentui/react-progress/-/react-progress-9.1.48.tgz", + "integrity": "sha512-37TOC8NGSd0yI91Xqqo3+vx8gDdqfaxWw5ensohJyMSoCiyU+r1bPR/W1WQehwYQIuDO9f8UkLhb07GTgt7I/g==", "requires": { - "@fluentui/react-field": "^9.1.6", - "@fluentui/react-jsx-runtime": "9.0.0-alpha.6", - "@fluentui/react-shared-contexts": "^9.5.0", - "@fluentui/react-theme": "^9.1.8", - "@fluentui/react-utilities": "^9.9.2", - "@griffel/react": "^1.5.7", - "@swc/helpers": "^0.4.14" + "@fluentui/react-field": "^9.1.38", + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-shared-contexts": "^9.10.0", + "@fluentui/react-theme": "^9.1.14", + "@fluentui/react-utilities": "^9.15.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1" } }, "@fluentui/react-provider": { - "version": "9.7.2", - "resolved": "https://registry.npmjs.org/@fluentui/react-provider/-/react-provider-9.7.2.tgz", - "integrity": "sha512-/D98JvSv8O7fEIv+h05LeWI9YeLw6azLSVG+9nhlETUXRVaLs0tPD94WF8hmFat9YE9CtWDcj/v502WpU/Dwdg==", + "version": "9.10.9", + "resolved": "https://registry.npmjs.org/@fluentui/react-provider/-/react-provider-9.10.9.tgz", + "integrity": "sha512-8Qetk+lE0MOzHx+Eiu6yi2OYmN1u9PySrtvOjU9oWRbVp7gzLdFg0hd/Hzbdk0C9kIWYxOT5ImTn7HJ+I1dlbg==", "requires": { - "@fluentui/react-jsx-runtime": "9.0.0-alpha.6", - "@fluentui/react-shared-contexts": "^9.5.0", - "@fluentui/react-tabster": "^9.7.5", - "@fluentui/react-theme": "^9.1.8", - "@fluentui/react-utilities": "^9.9.2", - "@griffel/core": "^1.11.0", - "@griffel/react": "^1.5.7", - "@swc/helpers": "^0.4.14" + "@fluentui/react-icons": "^2.0.217", + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-shared-contexts": "^9.10.0", + "@fluentui/react-tabster": "^9.14.1", + "@fluentui/react-theme": "^9.1.14", + "@fluentui/react-utilities": "^9.15.1", + "@griffel/core": "^1.14.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1" } }, "@fluentui/react-radio": { - "version": "9.1.17", - "resolved": "https://registry.npmjs.org/@fluentui/react-radio/-/react-radio-9.1.17.tgz", - "integrity": "sha512-bmpGBmYzkN0G/XbtT+slxU9BsltdmcS2wTIYgkNT1SipHzd5oFErMs4j1zjS6kgIYOfNe3N+fAMB2THR6iB13Q==", - "requires": { - "@fluentui/react-field": "^9.1.6", - "@fluentui/react-icons": "^2.0.196", - "@fluentui/react-jsx-runtime": "9.0.0-alpha.6", - "@fluentui/react-label": "^9.1.15", - "@fluentui/react-shared-contexts": "^9.5.0", - "@fluentui/react-tabster": "^9.7.5", - "@fluentui/react-theme": "^9.1.8", - "@fluentui/react-utilities": "^9.9.2", - "@griffel/react": "^1.5.7", - "@swc/helpers": "^0.4.14" + "version": "9.1.52", + "resolved": "https://registry.npmjs.org/@fluentui/react-radio/-/react-radio-9.1.52.tgz", + "integrity": "sha512-2bYPNk0JsutYIm1TyLN3YPxyF1soKWEVXTx6rA8iEjbQdRJSd0u1MyGNUFtkryuqxYlA0p6L7dX65RREOxu2pA==", + "requires": { + "@fluentui/react-field": "^9.1.38", + "@fluentui/react-icons": "^2.0.217", + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-label": "^9.1.46", + "@fluentui/react-shared-contexts": "^9.10.0", + "@fluentui/react-tabster": "^9.14.1", + "@fluentui/react-theme": "^9.1.14", + "@fluentui/react-utilities": "^9.15.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1" } }, "@fluentui/react-select": { - "version": "9.1.16", - "resolved": "https://registry.npmjs.org/@fluentui/react-select/-/react-select-9.1.16.tgz", - "integrity": "sha512-LDM+wOA91FDNuvkCJZrb8cQsG5/pG7gYDjBAsRQ1SSuxmKAEx5PcPM6QwmDaU7l6E6rcMI7dndzcB94LqehzZg==", + "version": "9.1.48", + "resolved": "https://registry.npmjs.org/@fluentui/react-select/-/react-select-9.1.48.tgz", + "integrity": "sha512-CmwmlcIlhnD7ojZLDWQ7fUxTo8UDJsEh+wARb4tEm5EmTZltvRhh/C5i85yUZtdWuBPcOll9OlomCX/K/Ag3+g==", "requires": { - "@fluentui/react-field": "^9.1.6", - "@fluentui/react-icons": "^2.0.196", - "@fluentui/react-jsx-runtime": "9.0.0-alpha.6", - "@fluentui/react-shared-contexts": "^9.5.0", - "@fluentui/react-theme": "^9.1.8", - "@fluentui/react-utilities": "^9.9.2", - "@griffel/react": "^1.5.7", - "@swc/helpers": "^0.4.14" + "@fluentui/react-field": "^9.1.38", + "@fluentui/react-icons": "^2.0.217", + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-shared-contexts": "^9.10.0", + "@fluentui/react-theme": "^9.1.14", + "@fluentui/react-utilities": "^9.15.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1" } }, "@fluentui/react-shared-contexts": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/@fluentui/react-shared-contexts/-/react-shared-contexts-9.5.0.tgz", - "integrity": "sha512-7mPrXx81eudpwloO44VREXc710RtZrzmQVw91EGJeTUfMRdg2MgjNGcwG6C3x+K0RkAgdQ8RAMfR3MSbCQvILA==", + "version": "9.10.0", + "resolved": "https://registry.npmjs.org/@fluentui/react-shared-contexts/-/react-shared-contexts-9.10.0.tgz", + "integrity": "sha512-2ubHqWnnd2VX82wAuGV0VVOXuQMQPz3x+8cgcGDI+z0lGrBF679N8W55QuEisvnDojoe6iASxJmc311N3aRzSQ==", "requires": { - "@fluentui/react-theme": "^9.1.8", - "@swc/helpers": "^0.4.14" + "@fluentui/react-theme": "^9.1.14", + "@swc/helpers": "^0.5.1" } }, "@fluentui/react-skeleton": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/@fluentui/react-skeleton/-/react-skeleton-9.0.4.tgz", - "integrity": "sha512-ImGcbjpI5URcG4v5PfCOS/PZgEBVHhMBJ9HEyLriQMjUgT8QgTiwg+y9JRA+uPq4siioffRkElOqKqJHZLRMlg==", + "version": "9.0.36", + "resolved": "https://registry.npmjs.org/@fluentui/react-skeleton/-/react-skeleton-9.0.36.tgz", + "integrity": "sha512-n3+t0vDUDSV6yx4qGDDh/aUQ8rkvFc2xC3evdTLPf4ovCh2rHbUpemnlkXz3m4wfnr//Fh/uXdNlITIp3duyFA==", "requires": { - "@fluentui/react-field": "^9.1.6", - "@fluentui/react-jsx-runtime": "9.0.0-alpha.6", - "@fluentui/react-shared-contexts": "^9.5.0", - "@fluentui/react-theme": "^9.1.8", - "@fluentui/react-utilities": "^9.9.2", - "@griffel/react": "^1.5.7", - "@swc/helpers": "^0.4.14" + "@fluentui/react-field": "^9.1.38", + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-shared-contexts": "^9.10.0", + "@fluentui/react-theme": "^9.1.14", + "@fluentui/react-utilities": "^9.15.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1" } }, "@fluentui/react-slider": { - "version": "9.1.17", - "resolved": "https://registry.npmjs.org/@fluentui/react-slider/-/react-slider-9.1.17.tgz", - "integrity": "sha512-2gg3JKyPb8O3bpsAEwoFLGMf6ZFeXvsvxtpHh0mbH6rVR6yazPAW0zSPGS+Y7xPw///A9iup8R9Ar46dWctlrw==", + "version": "9.1.52", + "resolved": "https://registry.npmjs.org/@fluentui/react-slider/-/react-slider-9.1.52.tgz", + "integrity": "sha512-XKDcx3V918KgGdS67TG2aGN3RWOPANrj21ouY2wPDBnsJEg0bjcmIwt+EJM2U6oliM+JqIzwGStVWR24wGm3ZA==", "requires": { - "@fluentui/react-field": "^9.1.6", - "@fluentui/react-jsx-runtime": "9.0.0-alpha.6", - "@fluentui/react-shared-contexts": "^9.5.0", - "@fluentui/react-tabster": "^9.7.5", - "@fluentui/react-theme": "^9.1.8", - "@fluentui/react-utilities": "^9.9.2", - "@griffel/react": "^1.5.7", - "@swc/helpers": "^0.4.14" + "@fluentui/react-field": "^9.1.38", + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-shared-contexts": "^9.10.0", + "@fluentui/react-tabster": "^9.14.1", + "@fluentui/react-theme": "^9.1.14", + "@fluentui/react-utilities": "^9.15.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1" } }, "@fluentui/react-spinbutton": { - "version": "9.2.16", - "resolved": "https://registry.npmjs.org/@fluentui/react-spinbutton/-/react-spinbutton-9.2.16.tgz", - "integrity": "sha512-PO3IcV11evj0WFYQ5ntY05ISDtIRAE8E9Q0qe27lWGRDXEeuqRrydfbZuF02rLb6IzNAV+QYXXntxXcO/+ofLA==", + "version": "9.2.48", + "resolved": "https://registry.npmjs.org/@fluentui/react-spinbutton/-/react-spinbutton-9.2.48.tgz", + "integrity": "sha512-KU+Fj8y/s7aozKZ3ClGL87solxH5VG0IbpPr7TA/U1uS+sXP3NF2WBBKfaNqqsUuAYppdKKm7Hqi0qekSDAQEQ==", "requires": { - "@fluentui/keyboard-keys": "^9.0.3", - "@fluentui/react-field": "^9.1.6", - "@fluentui/react-icons": "^2.0.196", - "@fluentui/react-jsx-runtime": "9.0.0-alpha.6", - "@fluentui/react-shared-contexts": "^9.5.0", - "@fluentui/react-theme": "^9.1.8", - "@fluentui/react-utilities": "^9.9.2", - "@griffel/react": "^1.5.7", - "@swc/helpers": "^0.4.14" + "@fluentui/keyboard-keys": "^9.0.6", + "@fluentui/react-field": "^9.1.38", + "@fluentui/react-icons": "^2.0.217", + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-shared-contexts": "^9.10.0", + "@fluentui/react-theme": "^9.1.14", + "@fluentui/react-utilities": "^9.15.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1" } }, "@fluentui/react-spinner": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/@fluentui/react-spinner/-/react-spinner-9.2.2.tgz", - "integrity": "sha512-QVzWLUbTZA/pIhmj3/6KYmS66S+cnVmtb4DXT1WbHFtjxaVNhbYzRPiEKqEv9uvXQdVDcWR55aAVGYtTa/AXpQ==", + "version": "9.3.26", + "resolved": "https://registry.npmjs.org/@fluentui/react-spinner/-/react-spinner-9.3.26.tgz", + "integrity": "sha512-RG5lURyl30Zy46Gitkz2aPaO2YRFnuMFt8nl/p0mdvN3n/Ai8KfNHXN8rqObO6BvuHZF3NowZjIpaXx63Gngiw==", "requires": { - "@fluentui/react-jsx-runtime": "9.0.0-alpha.6", - "@fluentui/react-label": "^9.1.15", - "@fluentui/react-shared-contexts": "^9.5.0", - "@fluentui/react-theme": "^9.1.8", - "@fluentui/react-utilities": "^9.9.2", - "@griffel/react": "^1.5.7", - "@swc/helpers": "^0.4.14" + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-label": "^9.1.46", + "@fluentui/react-shared-contexts": "^9.10.0", + "@fluentui/react-theme": "^9.1.14", + "@fluentui/react-utilities": "^9.15.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1" } }, "@fluentui/react-switch": { - "version": "9.1.17", - "resolved": "https://registry.npmjs.org/@fluentui/react-switch/-/react-switch-9.1.17.tgz", - "integrity": "sha512-6lmzvASB2BIWy+bld29V+fNCQJZbUDxWhjni2fRz6g4mynIROB1zgqNa1E7wJMjx32c4PZCmJAQo3PomZTOi7w==", - "requires": { - "@fluentui/react-field": "^9.1.6", - "@fluentui/react-icons": "^2.0.196", - "@fluentui/react-jsx-runtime": "9.0.0-alpha.6", - "@fluentui/react-label": "^9.1.15", - "@fluentui/react-shared-contexts": "^9.5.0", - "@fluentui/react-tabster": "^9.7.5", - "@fluentui/react-theme": "^9.1.8", - "@fluentui/react-utilities": "^9.9.2", - "@griffel/react": "^1.5.7", - "@swc/helpers": "^0.4.14" + "version": "9.1.52", + "resolved": "https://registry.npmjs.org/@fluentui/react-switch/-/react-switch-9.1.52.tgz", + "integrity": "sha512-cRmMeBkVpj07YIK/ma0TmzoNZMD1r5YFnmFXcy0K2mYGcFl74NQakoD/FuCqHbz4iKxgsCg1NucmDnjS+n4aHw==", + "requires": { + "@fluentui/react-field": "^9.1.38", + "@fluentui/react-icons": "^2.0.217", + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-label": "^9.1.46", + "@fluentui/react-shared-contexts": "^9.10.0", + "@fluentui/react-tabster": "^9.14.1", + "@fluentui/react-theme": "^9.1.14", + "@fluentui/react-utilities": "^9.15.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1" } }, "@fluentui/react-table": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/@fluentui/react-table/-/react-table-9.3.0.tgz", - "integrity": "sha512-KikpnQwXOYVtLVdYUH9DWxSUCL+zUzcAvizFOPbkfyi2PRh510Huftz1JATDp303SSLJyJZ/BpOiQ9fWNGbnCg==", - "requires": { - "@fluentui/keyboard-keys": "^9.0.3", - "@fluentui/react-aria": "^9.3.22", - "@fluentui/react-avatar": "^9.5.5", - "@fluentui/react-checkbox": "^9.1.17", - "@fluentui/react-context-selector": "^9.1.22", - "@fluentui/react-icons": "^2.0.196", - "@fluentui/react-jsx-runtime": "9.0.0-alpha.6", - "@fluentui/react-radio": "^9.1.17", - "@fluentui/react-shared-contexts": "^9.5.0", - "@fluentui/react-tabster": "^9.7.5", - "@fluentui/react-theme": "^9.1.8", - "@fluentui/react-utilities": "^9.9.2", - "@griffel/react": "^1.5.7", - "@swc/helpers": "^0.4.14" + "version": "9.10.7", + "resolved": "https://registry.npmjs.org/@fluentui/react-table/-/react-table-9.10.7.tgz", + "integrity": "sha512-MoIwMP2a5xUj3jyZcuPwlY1NexQgs91tfhazthsYpifNkZa2JQNtDOSbHH79oU9QjN/olnkE1MkTmfiQ6rz46A==", + "requires": { + "@fluentui/keyboard-keys": "^9.0.6", + "@fluentui/react-aria": "^9.3.43", + "@fluentui/react-avatar": "^9.5.42", + "@fluentui/react-checkbox": "^9.1.52", + "@fluentui/react-context-selector": "^9.1.41", + "@fluentui/react-icons": "^2.0.217", + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-radio": "^9.1.52", + "@fluentui/react-shared-contexts": "^9.10.0", + "@fluentui/react-tabster": "^9.14.1", + "@fluentui/react-theme": "^9.1.14", + "@fluentui/react-utilities": "^9.15.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1" } }, "@fluentui/react-tabs": { - "version": "9.3.17", - "resolved": "https://registry.npmjs.org/@fluentui/react-tabs/-/react-tabs-9.3.17.tgz", - "integrity": "sha512-Eh8ga30dvr8OuqaZm2+B9dOCozIlvkzwXdE2+gF0AyrbWcnTg5R4s4s+qYVAzUyGnTtHrSmIVzwPxSDn/ZY3bA==", + "version": "9.3.53", + "resolved": "https://registry.npmjs.org/@fluentui/react-tabs/-/react-tabs-9.3.53.tgz", + "integrity": "sha512-BSipSdK1USs9Rt0yQJBWl05JrvNYb+p4huXCL2KbsvSVm/TDerFhUMXoGZZYz7/rlryERjdVjckumx0aC8RrPg==", "requires": { - "@fluentui/react-context-selector": "^9.1.22", - "@fluentui/react-jsx-runtime": "9.0.0-alpha.6", - "@fluentui/react-shared-contexts": "^9.5.0", - "@fluentui/react-tabster": "^9.7.5", - "@fluentui/react-theme": "^9.1.8", - "@fluentui/react-utilities": "^9.9.2", - "@griffel/react": "^1.5.7", - "@swc/helpers": "^0.4.14" + "@fluentui/react-context-selector": "^9.1.41", + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-shared-contexts": "^9.10.0", + "@fluentui/react-tabster": "^9.14.1", + "@fluentui/react-theme": "^9.1.14", + "@fluentui/react-utilities": "^9.15.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1" } }, "@fluentui/react-tabster": { - "version": "9.7.5", - "resolved": "https://registry.npmjs.org/@fluentui/react-tabster/-/react-tabster-9.7.5.tgz", - "integrity": "sha512-1dQEDAzhurKup+DLA4xRktVBDdxnx5xXo2h0TXTuHtVOk59QheQewlTzYR5i0UHtTN3hTyo04AguLg8nnzgbTw==", - "requires": { - "@fluentui/react-shared-contexts": "^9.5.0", - "@fluentui/react-theme": "^9.1.8", - "@fluentui/react-utilities": "^9.9.2", - "@griffel/react": "^1.5.7", - "@swc/helpers": "^0.4.14", - "keyborg": "^2.0.0", - "tabster": "^4.4.2" + "version": "9.14.1", + "resolved": "https://registry.npmjs.org/@fluentui/react-tabster/-/react-tabster-9.14.1.tgz", + "integrity": "sha512-9TMGBLIpeCjLGL68UKec4o5cVxrb4PKzi57oWd84qqJ+jPcEm5U025uwNm568JdxcneRAV1AHFXOB91HVaLr4Q==", + "requires": { + "@fluentui/react-shared-contexts": "^9.10.0", + "@fluentui/react-theme": "^9.1.14", + "@fluentui/react-utilities": "^9.15.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1", + "keyborg": "^2.1.0", + "tabster": "^4.8.0" + } + }, + "@fluentui/react-tags": { + "version": "9.0.6", + "resolved": "https://registry.npmjs.org/@fluentui/react-tags/-/react-tags-9.0.6.tgz", + "integrity": "sha512-NYX/nak33NyhdygBCVoPRIaKtRq8wZnXT3YD3p4Iy2WC9d24lg4uy5vS5V3PqgYS7zOPWJ9uSyfUWv0kP/KclA==", + "requires": { + "@fluentui/keyboard-keys": "^9.0.6", + "@fluentui/react-aria": "^9.3.43", + "@fluentui/react-avatar": "^9.5.42", + "@fluentui/react-icons": "^2.0.217", + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-shared-contexts": "^9.10.0", + "@fluentui/react-tabster": "^9.14.1", + "@fluentui/react-theme": "^9.1.14", + "@fluentui/react-utilities": "^9.15.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1" } }, "@fluentui/react-text": { - "version": "9.3.12", - "resolved": "https://registry.npmjs.org/@fluentui/react-text/-/react-text-9.3.12.tgz", - "integrity": "sha512-h4Mq4nKslIi8TR9ysn4Cy1AYtg9j896qQ2HZiTYZmGP9HYCqF3X/3A7ce0eyZimrcXn1zl4iaR6t1LUFRqOC5Q==", + "version": "9.3.43", + "resolved": "https://registry.npmjs.org/@fluentui/react-text/-/react-text-9.3.43.tgz", + "integrity": "sha512-kSDE3tWEXZdOOWrVcmAVkhQAFxWsaMz/ETlBzsHNvVcZ6iJIscRY/JCxbBFxBUh30QxegTMMENaExrt9KJZQsQ==", "requires": { - "@fluentui/react-jsx-runtime": "9.0.0-alpha.6", - "@fluentui/react-shared-contexts": "^9.5.0", - "@fluentui/react-theme": "^9.1.8", - "@fluentui/react-utilities": "^9.9.2", - "@griffel/react": "^1.5.7", - "@swc/helpers": "^0.4.14" + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-shared-contexts": "^9.10.0", + "@fluentui/react-theme": "^9.1.14", + "@fluentui/react-utilities": "^9.15.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1" } }, "@fluentui/react-textarea": { - "version": "9.3.16", - "resolved": "https://registry.npmjs.org/@fluentui/react-textarea/-/react-textarea-9.3.16.tgz", - "integrity": "sha512-hMccy65V4QTBMJCI3jR79+nGKh+vIQi+5pdmhEsAZ5fjODDvi/JViGf12MDxbKnmSz1IHKhFayvdhNlt41nQRg==", + "version": "9.3.48", + "resolved": "https://registry.npmjs.org/@fluentui/react-textarea/-/react-textarea-9.3.48.tgz", + "integrity": "sha512-OSA10BXvyx+fRB5zRnXMODOKtSfxSLPdBLctglNU57oezAkuNipTg12iJj5gvXJQHbrjPSgZaxikdPvHo4tzpQ==", "requires": { - "@fluentui/react-field": "^9.1.6", - "@fluentui/react-jsx-runtime": "9.0.0-alpha.6", - "@fluentui/react-shared-contexts": "^9.5.0", - "@fluentui/react-theme": "^9.1.8", - "@fluentui/react-utilities": "^9.9.2", - "@griffel/react": "^1.5.7", - "@swc/helpers": "^0.4.14" + "@fluentui/react-field": "^9.1.38", + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-shared-contexts": "^9.10.0", + "@fluentui/react-theme": "^9.1.14", + "@fluentui/react-utilities": "^9.15.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1" } }, "@fluentui/react-theme": { - "version": "9.1.8", - "resolved": "https://registry.npmjs.org/@fluentui/react-theme/-/react-theme-9.1.8.tgz", - "integrity": "sha512-KXSPSfg29sHEHw9rFpZjKTU4KwY4F4kxZIcqA83Kz8Khnfw17NiWmz8XcmxXaMUlqfwVRxBIM9um2uFE5gjcpw==", + "version": "9.1.14", + "resolved": "https://registry.npmjs.org/@fluentui/react-theme/-/react-theme-9.1.14.tgz", + "integrity": "sha512-Lc76jjNETV6gOFlE8b03WxcztdMhrYlj7eu6ZfRWtS6jJvyLka2BMm4ES8RyPPKmdbLnN/+BuOE6YySBs2qamg==", + "requires": { + "@fluentui/tokens": "1.0.0-alpha.11", + "@swc/helpers": "^0.5.1" + } + }, + "@fluentui/react-toast": { + "version": "9.3.13", + "resolved": "https://registry.npmjs.org/@fluentui/react-toast/-/react-toast-9.3.13.tgz", + "integrity": "sha512-wHqCDsHdweGR6tSdUYWq6B/NhhkFn4TWpyShz10JJU5i16JV9hw1jvoAsOm+OLO3uudb7IWx2j8p/mQaYgJrww==", "requires": { - "@fluentui/tokens": "1.0.0-alpha.5", - "@swc/helpers": "^0.4.14" + "@fluentui/keyboard-keys": "^9.0.6", + "@fluentui/react-aria": "^9.3.43", + "@fluentui/react-icons": "^2.0.217", + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-portal": "^9.3.25", + "@fluentui/react-shared-contexts": "^9.10.0", + "@fluentui/react-tabster": "^9.14.1", + "@fluentui/react-theme": "^9.1.14", + "@fluentui/react-utilities": "^9.15.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1", + "react-transition-group": "^4.4.1" } }, "@fluentui/react-toolbar": { - "version": "9.1.17", - "resolved": "https://registry.npmjs.org/@fluentui/react-toolbar/-/react-toolbar-9.1.17.tgz", - "integrity": "sha512-+i3B/CCA3yMAWuFU5Tg3fex2UEK0yw60gw8M4zzbK/AOzej2AXoH0lU2SIWzN7Y/zDWyzYHMWH+Uj1YQD3DSjw==", - "requires": { - "@fluentui/react-button": "^9.3.16", - "@fluentui/react-context-selector": "^9.1.22", - "@fluentui/react-divider": "^9.2.15", - "@fluentui/react-jsx-runtime": "9.0.0-alpha.6", - "@fluentui/react-radio": "^9.1.17", - "@fluentui/react-shared-contexts": "^9.5.0", - "@fluentui/react-tabster": "^9.7.5", - "@fluentui/react-theme": "^9.1.8", - "@fluentui/react-utilities": "^9.9.2", - "@griffel/react": "^1.5.7", - "@swc/helpers": "^0.4.14" + "version": "9.1.52", + "resolved": "https://registry.npmjs.org/@fluentui/react-toolbar/-/react-toolbar-9.1.52.tgz", + "integrity": "sha512-8dlLjQUVY7GoVfzugoyRU/1v2123VWe0hHsbPOl7oSG7Pv2MWWxThZ5D0uA+MqzbhnrzuWOI7DjMFpD4z/JTFw==", + "requires": { + "@fluentui/react-button": "^9.3.51", + "@fluentui/react-context-selector": "^9.1.41", + "@fluentui/react-divider": "^9.2.46", + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-radio": "^9.1.52", + "@fluentui/react-shared-contexts": "^9.10.0", + "@fluentui/react-tabster": "^9.14.1", + "@fluentui/react-theme": "^9.1.14", + "@fluentui/react-utilities": "^9.15.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1" } }, "@fluentui/react-tooltip": { - "version": "9.2.16", - "resolved": "https://registry.npmjs.org/@fluentui/react-tooltip/-/react-tooltip-9.2.16.tgz", - "integrity": "sha512-R1DhKCILILzSLCJPig01KqKhqnEH91NoBjHwCfwua8qE9neWUwSD3JSO+dmEfbxFTPfCkrkPrbnuCXb8imu2ig==", + "version": "9.3.18", + "resolved": "https://registry.npmjs.org/@fluentui/react-tooltip/-/react-tooltip-9.3.18.tgz", + "integrity": "sha512-CRIh4qSr0CPb4So9WD8ykCzGUwOWwWN6Grza4A5f113W2yOLz4LWK1p75xdxKVnczkvwlPfL36F9K42m3IREIg==", "requires": { - "@fluentui/keyboard-keys": "^9.0.3", - "@fluentui/react-jsx-runtime": "9.0.0-alpha.6", - "@fluentui/react-portal": "^9.2.12", - "@fluentui/react-positioning": "^9.6.0", - "@fluentui/react-shared-contexts": "^9.5.0", - "@fluentui/react-theme": "^9.1.8", - "@fluentui/react-utilities": "^9.9.2", - "@griffel/react": "^1.5.7", - "@swc/helpers": "^0.4.14" + "@fluentui/keyboard-keys": "^9.0.6", + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-portal": "^9.3.25", + "@fluentui/react-positioning": "^9.9.21", + "@fluentui/react-shared-contexts": "^9.10.0", + "@fluentui/react-theme": "^9.1.14", + "@fluentui/react-utilities": "^9.15.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1" } }, "@fluentui/react-tree": { - "version": "9.0.0-beta.18", - "resolved": "https://registry.npmjs.org/@fluentui/react-tree/-/react-tree-9.0.0-beta.18.tgz", - "integrity": "sha512-ILbm+REJhuYXV88XXyL31Vwqx9vo/LLQE/pOom0iAjG+P6FYm8w1YemSJ+1IQ5PAkKUbfnYWTujx1fLEdXHNAQ==", - "requires": { - "@fluentui/keyboard-keys": "^9.0.3", - "@fluentui/react-aria": "^9.3.22", - "@fluentui/react-avatar": "^9.5.5", - "@fluentui/react-button": "^9.3.16", - "@fluentui/react-context-selector": "^9.1.22", - "@fluentui/react-icons": "^2.0.196", - "@fluentui/react-jsx-runtime": "9.0.0-alpha.6", - "@fluentui/react-portal": "^9.2.12", - "@fluentui/react-shared-contexts": "^9.5.0", - "@fluentui/react-tabster": "^9.7.5", - "@fluentui/react-theme": "^9.1.8", - "@fluentui/react-utilities": "^9.9.2", - "@griffel/react": "^1.5.7", - "@swc/helpers": "^0.4.14" + "version": "9.4.7", + "resolved": "https://registry.npmjs.org/@fluentui/react-tree/-/react-tree-9.4.7.tgz", + "integrity": "sha512-DpYv2MlgkxBX5/pW/M5AiEuYoXzIUQiNWYfCPsfyMqiGcmTRj3ll0hNvcMm4VVT/020qws5nVVCgG4I98VJTFg==", + "requires": { + "@fluentui/keyboard-keys": "^9.0.6", + "@fluentui/react-aria": "^9.3.43", + "@fluentui/react-avatar": "^9.5.42", + "@fluentui/react-button": "^9.3.51", + "@fluentui/react-checkbox": "^9.1.52", + "@fluentui/react-context-selector": "^9.1.41", + "@fluentui/react-icons": "^2.0.217", + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-radio": "^9.1.52", + "@fluentui/react-shared-contexts": "^9.10.0", + "@fluentui/react-tabster": "^9.14.1", + "@fluentui/react-theme": "^9.1.14", + "@fluentui/react-utilities": "^9.15.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1" } }, "@fluentui/react-utilities": { - "version": "9.9.2", - "resolved": "https://registry.npmjs.org/@fluentui/react-utilities/-/react-utilities-9.9.2.tgz", - "integrity": "sha512-jFUI11aTpk+EbVm3zYWJwW57Wz4TbR0RSoNPqERpSiOCw4tTEd1Xp4PiBWeknhreXsYwSdrxYBGMXOKIrY3zdg==", + "version": "9.15.1", + "resolved": "https://registry.npmjs.org/@fluentui/react-utilities/-/react-utilities-9.15.1.tgz", + "integrity": "sha512-BQz4SIcdORTJyVrl1KyiKKqawy9SUj+/m4raxIllLHSZyfFgnDHDVLv4YFlZjTRqaqtx16V53atyUu2MtsU3DA==", "requires": { - "@fluentui/keyboard-keys": "^9.0.3", - "@swc/helpers": "^0.4.14" + "@fluentui/keyboard-keys": "^9.0.6", + "@swc/helpers": "^0.5.1" } }, "@fluentui/react-virtualizer": { - "version": "9.0.0-alpha.22", - "resolved": "https://registry.npmjs.org/@fluentui/react-virtualizer/-/react-virtualizer-9.0.0-alpha.22.tgz", - "integrity": "sha512-w/86u6MwZGo11kwAT32dCLstd23No7BhHJzo0HO13A4rjjN6vUrdh6NTKzyAxRcdHJp0hVG+TJMbs8oWZo2Bww==", + "version": "9.0.0-alpha.53", + "resolved": "https://registry.npmjs.org/@fluentui/react-virtualizer/-/react-virtualizer-9.0.0-alpha.53.tgz", + "integrity": "sha512-3fMq4cyBQ8YQJFxMQy9CcrVscNRuMlOxb7cmvgIuOCZEcputn4ncLf8/7S6ax1GVrzY7lo8owzYRxxnCeehZ0g==", "requires": { - "@fluentui/react-jsx-runtime": "9.0.0-alpha.6", - "@fluentui/react-utilities": "^9.9.2", - "@griffel/react": "^1.5.7", - "@swc/helpers": "^0.4.14" + "@fluentui/react-jsx-runtime": "^9.0.18", + "@fluentui/react-shared-contexts": "^9.10.0", + "@fluentui/react-utilities": "^9.15.1", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1" } }, "@fluentui/react-window-provider": { - "version": "2.2.15", - "resolved": "https://registry.npmjs.org/@fluentui/react-window-provider/-/react-window-provider-2.2.15.tgz", - "integrity": "sha512-RraWvRe7wakpPJRBX2tlCV/cybOKiqLJ1UBLPNf5xq7ZIs0T0g/hh3G3Zb5teOeipjuRnl6srkdDUT9Dy9wrBg==", + "version": "2.2.16", + "resolved": "https://registry.npmjs.org/@fluentui/react-window-provider/-/react-window-provider-2.2.16.tgz", + "integrity": "sha512-4gkUMSAUjo3cgCGt+0VvTbMy9qbF6zo/cmmfYtfqbSFtXz16lKixSCMIf66gXdKjovqRGVFC/XibqfrXM2QLuw==", "requires": { - "@fluentui/set-version": "^8.2.11", + "@fluentui/set-version": "^8.2.12", "tslib": "^2.1.0" } }, "@fluentui/set-version": { - "version": "8.2.11", - "resolved": "https://registry.npmjs.org/@fluentui/set-version/-/set-version-8.2.11.tgz", - "integrity": "sha512-UI03tysau/adBO1a3q4uFZWQ3lfkiFcAWIFng4k5odWcCokfCm5IxA0urKqj5W5JRYdyoBUaq8QbcNGkFB4dCw==", + "version": "8.2.12", + "resolved": "https://registry.npmjs.org/@fluentui/set-version/-/set-version-8.2.12.tgz", + "integrity": "sha512-I4uXIg9xkL2Heotf1+7CyGcHQskdtMSH0B5mSV0TL3w7WI2qpnzrpKuP2Kq6DHZN6Xrsg4ORFNJSjLxq/s9cUQ==", "requires": { "tslib": "^2.1.0" } }, "@fluentui/style-utilities": { - "version": "8.9.16", - "resolved": "https://registry.npmjs.org/@fluentui/style-utilities/-/style-utilities-8.9.16.tgz", - "integrity": "sha512-8hS5HscCFYvcWjAdk37frPZJZthr7f/cu5db7gjrPy+DEhf13WAZRHsropWm17+8GhJhvKt98BQf/Kzxtt34Eg==", - "requires": { - "@fluentui/merge-styles": "^8.5.12", - "@fluentui/set-version": "^8.2.11", - "@fluentui/theme": "^2.6.34", - "@fluentui/utilities": "^8.13.18", + "version": "8.9.20", + "resolved": "https://registry.npmjs.org/@fluentui/style-utilities/-/style-utilities-8.9.20.tgz", + "integrity": "sha512-oj0ghn21DnqCardlcEp+zob3IEAfA/Z7ZjzuYqlHuPUItwRqGmpr1wErssRC4R1kHsH6gq9ALxVgMa4/FvdzGg==", + "requires": { + "@fluentui/merge-styles": "^8.5.13", + "@fluentui/set-version": "^8.2.12", + "@fluentui/theme": "^2.6.38", + "@fluentui/utilities": "^8.13.21", "@microsoft/load-themed-styles": "^1.10.26", "tslib": "^2.1.0" } }, "@fluentui/theme": { - "version": "2.6.34", - "resolved": "https://registry.npmjs.org/@fluentui/theme/-/theme-2.6.34.tgz", - "integrity": "sha512-2Ssi3sX2snnbPJ4PmxbpCDCGePRE36tvGj2qKgdKiSh/fPVsg1b+Q50YlpFl9sXmbhl1uFmxjAx6WPsVGTl7vQ==", + "version": "2.6.38", + "resolved": "https://registry.npmjs.org/@fluentui/theme/-/theme-2.6.38.tgz", + "integrity": "sha512-LObK/mZOQFb3aTcDlKBSLpPV0BOp5BOuNqg0Wps51b1RlisI6oS3STmw3BkcAe6jOi/p4cgLpwHMkYHh2o8PmQ==", "requires": { - "@fluentui/merge-styles": "^8.5.12", - "@fluentui/set-version": "^8.2.11", - "@fluentui/utilities": "^8.13.18", + "@fluentui/merge-styles": "^8.5.13", + "@fluentui/set-version": "^8.2.12", + "@fluentui/utilities": "^8.13.21", "tslib": "^2.1.0" } }, "@fluentui/tokens": { - "version": "1.0.0-alpha.5", - "resolved": "https://registry.npmjs.org/@fluentui/tokens/-/tokens-1.0.0-alpha.5.tgz", - "integrity": "sha512-4xCNP/tmeDywmo+PoFqDaUADSvNNzoZHVknC4D77S1RWxVuYmcM15eumKcVRrDuW3wS8eEX4/ZsIlDfqAhnU8g==", + "version": "1.0.0-alpha.11", + "resolved": "https://registry.npmjs.org/@fluentui/tokens/-/tokens-1.0.0-alpha.11.tgz", + "integrity": "sha512-kHKR1/JIGcBXA0qr+MyNg8KQZL4RLJXlhaSV6yNn50rJ0kTdQHUCKbbficvNZoeQBj3x0A8/WgAbPmfppZo0Zg==", "requires": { - "@swc/helpers": "^0.4.14" + "@swc/helpers": "^0.5.1" } }, "@fluentui/utilities": { - "version": "8.13.18", - "resolved": "https://registry.npmjs.org/@fluentui/utilities/-/utilities-8.13.18.tgz", - "integrity": "sha512-/0rX9EzltLKwU1SS14VV7agWoOzruVTU3oagZq1QgFAvoj8qi7fNqvSX/VEeRy+0gmbsCkrEViUPkmC7drKzPg==", + "version": "8.13.21", + "resolved": "https://registry.npmjs.org/@fluentui/utilities/-/utilities-8.13.21.tgz", + "integrity": "sha512-YPWsRAL1jgbPxf+wAY8p6LjIG4em0NReqgU8ZCFnQx9wpQbe/ZRjQcaU06pD1tYtRGvyCutwhnWDaQHDw843Xg==", "requires": { - "@fluentui/dom-utilities": "^2.2.11", - "@fluentui/merge-styles": "^8.5.12", - "@fluentui/set-version": "^8.2.11", + "@fluentui/dom-utilities": "^2.2.12", + "@fluentui/merge-styles": "^8.5.13", + "@fluentui/set-version": "^8.2.12", "tslib": "^2.1.0" } }, "@griffel/core": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@griffel/core/-/core-1.11.0.tgz", - "integrity": "sha512-3jlrsJVbNC0avRMfNGWmbklptmtH5s63Gt/xa0zY6+Oa3kU/StNAu+d0LqLChb5egwXrisQIeC+tzzJ+YozGjg==", + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/@griffel/core/-/core-1.14.3.tgz", + "integrity": "sha512-d1QqS8mP1fzF8KLLN/nhxNUHguMM9I61Ckjnn5zNUqxUlRaebnhbpa2kLDVBdIy1k22+76+NTg+pIpXXjGf+vg==", "requires": { "@emotion/hash": "^0.9.0", + "@griffel/style-types": "^1.0.2", "csstype": "^3.1.2", "rtl-css-js": "^1.16.1", - "stylis": "^4.0.13", + "stylis": "^4.2.0", "tslib": "^2.1.0" } }, "@griffel/react": { - "version": "1.5.7", - "resolved": "https://registry.npmjs.org/@griffel/react/-/react-1.5.7.tgz", - "integrity": "sha512-b9/LkkuO512O268jqRpJPso9ROng/kqh81YSTJUL13tT4qPZQnvrdiwoP7ZeqXbG0zzZHLZ3tWUZrCDOl549OQ==", + "version": "1.5.16", + "resolved": "https://registry.npmjs.org/@griffel/react/-/react-1.5.16.tgz", + "integrity": "sha512-F4Gj1B90c7i4rLZuSmo2HaLNFHfrwr1PBsMslWDaPw6wLbiFjqubSpSEPtcq/U8Co3vva4iAX4+hD/RXSA9W8Q==", "requires": { - "@griffel/core": "^1.11.0", + "@griffel/core": "^1.14.3", "tslib": "^2.1.0" } }, + "@griffel/style-types": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@griffel/style-types/-/style-types-1.0.2.tgz", + "integrity": "sha512-ka/Tpl1WU8js88LObwB/4EvpgXzx/EEJfbHhAr4ZNt29hrQKgL93X1zSY6M/FRhMhWrGIawauWkZP6/y6w/WiQ==", + "requires": { + "csstype": "^3.1.2" + } + }, "@grpc/grpc-js": { "version": "1.8.14", "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.8.14.tgz", @@ -8556,7 +8838,6 @@ "version": "0.3.3", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", - "dev": true, "requires": { "@jridgewell/set-array": "^1.0.1", "@jridgewell/sourcemap-codec": "^1.4.10", @@ -8566,26 +8847,22 @@ "@jridgewell/resolve-uri": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "dev": true + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==" }, "@jridgewell/set-array": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "dev": true + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==" }, "@jridgewell/sourcemap-codec": { "version": "1.4.15", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "dev": true + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" }, "@jridgewell/trace-mapping": { "version": "0.3.18", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", - "dev": true, "requires": { "@jridgewell/resolve-uri": "3.1.0", "@jridgewell/sourcemap-codec": "1.4.14" @@ -8594,8 +8871,7 @@ "@jridgewell/sourcemap-codec": { "version": "1.4.14", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" } } }, @@ -8841,13 +9117,35 @@ "optional": true }, "@swc/helpers": { - "version": "0.4.14", - "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.4.14.tgz", - "integrity": "sha512-4C7nX/dvpzB7za4Ql9K81xK3HPxCpHMgwTZVyf+9JQ6VUbn9jjZVN7/Nkdz/Ugzs2CSjqnL/UPXroiVBVHUWUw==", + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.3.tgz", + "integrity": "sha512-FaruWX6KdudYloq1AHD/4nU+UsMTdNE8CKyrseXWEcgjDAbvkwJg2QGPAnfIJLIWsjZOSPLOAykK6fuYp4vp4A==", "requires": { "tslib": "^2.4.0" } }, + "@tailwindcss/typography": { + "version": "0.5.10", + "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.10.tgz", + "integrity": "sha512-Pe8BuPJQJd3FfRnm6H0ulKIGoMEQS+Vq01R6M5aCrFB/ccR/shT+0kXLjouGC1gFLm9hopTFN+DMP0pfwRWzPw==", + "requires": { + "lodash.castarray": "^4.4.0", + "lodash.isplainobject": "^4.0.6", + "lodash.merge": "^4.6.2", + "postcss-selector-parser": "6.0.10" + }, + "dependencies": { + "postcss-selector-parser": { + "version": "6.0.10", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", + "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", + "requires": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + } + } + } + }, "@types/d3": { "version": "7.4.0", "resolved": "https://registry.npmjs.org/@types/d3/-/d3-7.4.0.tgz", @@ -9189,6 +9487,11 @@ "integrity": "sha512-kNnC1GFBLuhImSnV7w4njQkUiJi0ZXUycu1rUaouPqiKlXkh77JKgdRnTAp1x5eBwcIwbtI+3otwzuIDEuDoxQ==", "dev": true }, + "@types/vscode": { + "version": "1.85.0", + "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.85.0.tgz", + "integrity": "sha512-CF/RBon/GXwdfmnjZj0WTUMZN5H6YITOfBCP4iEZlOtVQXuzw6t7Le7+cR+7JzdMrnlm7Mfp49Oj2TuSXIWo3g==" + }, "@typescript/vfs": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/@typescript/vfs/-/vfs-1.4.0.tgz", @@ -9236,8 +9539,7 @@ "any-promise": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", - "dev": true + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==" }, "anymatch": { "version": "3.1.3", @@ -9251,8 +9553,7 @@ "arg": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", - "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", - "dev": true + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==" }, "argparse": { "version": "2.0.1", @@ -9337,8 +9638,7 @@ "camelcase-css": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", - "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", - "dev": true + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==" }, "caniuse-lite": { "version": "1.0.30001503", @@ -9443,8 +9743,7 @@ "commander": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", - "dev": true + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==" }, "concat-map": { "version": "0.0.1", @@ -9461,6 +9760,15 @@ "which": "^2.0.1" } }, + "css-selector-tokenizer": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.8.0.tgz", + "integrity": "sha512-Jd6Ig3/pe62/qe5SBPTN8h8LeUg/pT4lLgtavPf7updwwHpvFzxvOQBHYj2LZDMjUnBzgvIUSjRcf6oT5HzHFg==", + "requires": { + "cssesc": "^3.0.0", + "fastparse": "^1.1.2" + } + }, "cssesc": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", @@ -9471,6 +9779,11 @@ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==" }, + "culori": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/culori/-/culori-3.3.0.tgz", + "integrity": "sha512-pHJg+jbuFsCjz9iclQBqyL3B2HLCBF71BwVNujUYEvCeQMvV97R59MNK3R2+jgJ3a1fcZgI9B3vYgz8lzr/BFQ==" + }, "d3-color": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", @@ -9542,6 +9855,17 @@ "d3-transition": "2 - 3" } }, + "daisyui": { + "version": "4.4.20", + "resolved": "https://registry.npmjs.org/daisyui/-/daisyui-4.4.20.tgz", + "integrity": "sha512-AR2fuFVVLHVTdbkV+XWAqjtymEoxXksrsEMkdzPQo2wANtWjSXuODUzePNade64gJ0Y2CdQtiQkaZI7fWcp13g==", + "requires": { + "css-selector-tokenizer": "^0.8", + "culori": "^3", + "picocolors": "^1", + "postcss-js": "^4" + } + }, "dataloader": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/dataloader/-/dataloader-1.4.0.tgz", @@ -9595,8 +9919,7 @@ "didyoumean": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", - "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", - "dev": true + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==" }, "diff": { "version": "5.1.0", @@ -9606,8 +9929,7 @@ "dlv": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", - "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", - "dev": true + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==" }, "doctrine": { "version": "3.0.0", @@ -9617,6 +9939,15 @@ "esutils": "^2.0.2" } }, + "dom-helpers": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", + "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", + "requires": { + "@babel/runtime": "^7.8.7", + "csstype": "^3.0.2" + } + }, "dprint-node": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/dprint-node/-/dprint-node-1.0.7.tgz", @@ -9643,33 +9974,32 @@ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "esbuild": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.19.tgz", - "integrity": "sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==", - "dev": true, - "requires": { - "@esbuild/android-arm": "0.17.19", - "@esbuild/android-arm64": "0.17.19", - "@esbuild/android-x64": "0.17.19", - "@esbuild/darwin-arm64": "0.17.19", - "@esbuild/darwin-x64": "0.17.19", - "@esbuild/freebsd-arm64": "0.17.19", - "@esbuild/freebsd-x64": "0.17.19", - "@esbuild/linux-arm": "0.17.19", - "@esbuild/linux-arm64": "0.17.19", - "@esbuild/linux-ia32": "0.17.19", - "@esbuild/linux-loong64": "0.17.19", - "@esbuild/linux-mips64el": "0.17.19", - "@esbuild/linux-ppc64": "0.17.19", - "@esbuild/linux-riscv64": "0.17.19", - "@esbuild/linux-s390x": "0.17.19", - "@esbuild/linux-x64": "0.17.19", - "@esbuild/netbsd-x64": "0.17.19", - "@esbuild/openbsd-x64": "0.17.19", - "@esbuild/sunos-x64": "0.17.19", - "@esbuild/win32-arm64": "0.17.19", - "@esbuild/win32-ia32": "0.17.19", - "@esbuild/win32-x64": "0.17.19" + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.5.tgz", + "integrity": "sha512-bUxalY7b1g8vNhQKdB24QDmHeY4V4tw/s6Ak5z+jJX9laP5MoQseTOMemAr0gxssjNcH0MCViG8ONI2kksvfFQ==", + "requires": { + "@esbuild/android-arm": "0.19.5", + "@esbuild/android-arm64": "0.19.5", + "@esbuild/android-x64": "0.19.5", + "@esbuild/darwin-arm64": "0.19.5", + "@esbuild/darwin-x64": "0.19.5", + "@esbuild/freebsd-arm64": "0.19.5", + "@esbuild/freebsd-x64": "0.19.5", + "@esbuild/linux-arm": "0.19.5", + "@esbuild/linux-arm64": "0.19.5", + "@esbuild/linux-ia32": "0.19.5", + "@esbuild/linux-loong64": "0.19.5", + "@esbuild/linux-mips64el": "0.19.5", + "@esbuild/linux-ppc64": "0.19.5", + "@esbuild/linux-riscv64": "0.19.5", + "@esbuild/linux-s390x": "0.19.5", + "@esbuild/linux-x64": "0.19.5", + "@esbuild/netbsd-x64": "0.19.5", + "@esbuild/openbsd-x64": "0.19.5", + "@esbuild/sunos-x64": "0.19.5", + "@esbuild/win32-arm64": "0.19.5", + "@esbuild/win32-ia32": "0.19.5", + "@esbuild/win32-x64": "0.19.5" } }, "esbuild-plugin-swc": { @@ -9697,27 +10027,16 @@ "@swc/core-win32-ia32-msvc": "1.3.64", "@swc/core-win32-x64-msvc": "1.3.64" } - }, - "@swc/helpers": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.1.tgz", - "integrity": "sha512-sJ902EfIzn1Fa+qYmjdQqh8tPsoxyBz+8yBKC2HKUxyezKJFwPGOn7pv4WY6QuQW//ySQi5lJjA/ZT9sNWWNTg==", - "optional": true, - "peer": true, - "requires": { - "tslib": "^2.4.0" - } } } }, "esbuild-sass-plugin": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/esbuild-sass-plugin/-/esbuild-sass-plugin-2.9.0.tgz", - "integrity": "sha512-D7c8Ub+C4RfaqhOoo9EEWprYmP5ZCmpmcodmYDtpvCfPZLgsSbLaLHPXdul4TUWUMH5eJ6POw+aes/s42ffwrA==", - "dev": true, + "version": "2.16.0", + "resolved": "https://registry.npmjs.org/esbuild-sass-plugin/-/esbuild-sass-plugin-2.16.0.tgz", + "integrity": "sha512-mGCe9MxNYvZ+j77Q/QFO+rwUGA36mojDXkOhtVmoyz1zwYbMaNrtVrmXwwYDleS/UMKTNU3kXuiTtPiAD3K+Pw==", "requires": { - "resolve": "^1.22.2", - "sass": "^1.62.0" + "resolve": "^1.22.6", + "sass": "^1.7.3" } }, "esbuild-style-plugin": { @@ -9858,10 +10177,9 @@ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, "fast-glob": { - "version": "3.2.12", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", - "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", - "dev": true, + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", "requires": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -9874,7 +10192,6 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, "requires": { "is-glob": "^4.0.1" } @@ -9891,6 +10208,11 @@ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" }, + "fastparse": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz", + "integrity": "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==" + }, "fastq": { "version": "1.15.0", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", @@ -9987,10 +10309,9 @@ "optional": true }, "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==" }, "generic-names": { "version": "4.0.0", @@ -10069,20 +10390,19 @@ "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==" }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, + "hasown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", + "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "requires": { + "function-bind": "^1.1.2" + } + }, "hast-util-parse-selector": { "version": "2.2.5", "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-2.2.5.tgz", @@ -10187,12 +10507,11 @@ "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==" }, "is-core-module": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz", - "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==", - "dev": true, + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", "requires": { - "has": "^1.0.3" + "hasown": "^2.0.0" } }, "is-decimal": { @@ -10253,10 +10572,9 @@ } }, "jiti": { - "version": "1.18.2", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.18.2.tgz", - "integrity": "sha512-QAdOptna2NYiSSpv0O/BwoHBSmz4YhpzJHyi+fnMRTXFjp7B8i/YG5Z8IfusxB1ufjcD2Sre1F3R+nX3fvy7gg==", - "dev": true + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.0.tgz", + "integrity": "sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==" }, "js-sdsl": { "version": "4.4.1", @@ -10287,9 +10605,9 @@ "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==" }, "keyborg": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/keyborg/-/keyborg-2.0.0.tgz", - "integrity": "sha512-RWY8nWrzRkwTQLaKyDtbTu5SOb5L4B20UzAsBHlQDFZqVY/+Mid0bQ7MVTC8vbOTrWY2xkkzj8gZF9Ua7re4xA==" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/keyborg/-/keyborg-2.1.0.tgz", + "integrity": "sha512-0+v3/GIYG6gClwBOXrHet31n1UJW49xbKgVPUu6we41aq9tAmMosVXEdctZxsQdebyxtrcxVTkvHjBD1XPOHwg==" }, "kleur": { "version": "4.1.5", @@ -10308,14 +10626,12 @@ "lilconfig": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", - "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", - "dev": true + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==" }, "lines-and-columns": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" }, "loader-utils": { "version": "3.2.1", @@ -10340,6 +10656,16 @@ "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==" }, + "lodash.castarray": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.castarray/-/lodash.castarray-4.4.0.tgz", + "integrity": "sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q==" + }, + "lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==" + }, "lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", @@ -10437,8 +10763,7 @@ "merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" }, "micromark": { "version": "3.2.0", @@ -10655,7 +10980,6 @@ "version": "4.0.5", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, "requires": { "braces": "^3.0.2", "picomatch": "^2.3.1" @@ -10688,7 +11012,6 @@ "version": "2.7.0", "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", - "dev": true, "requires": { "any-promise": "^1.0.0", "object-assign": "^4.0.1", @@ -10809,8 +11132,7 @@ "path-parse": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, "path-scurry": { "version": "1.9.2", @@ -10834,14 +11156,12 @@ "pify": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "dev": true + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==" }, "pirates": { "version": "4.0.5", "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", - "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", - "dev": true + "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==" }, "postcss": { "version": "8.4.24", @@ -10857,7 +11177,6 @@ "version": "15.1.0", "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", - "dev": true, "requires": { "postcss-value-parser": "^4.0.0", "read-cache": "^1.0.0", @@ -10868,7 +11187,6 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", - "dev": true, "requires": { "camelcase-css": "^2.0.1" } @@ -10924,7 +11242,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz", "integrity": "sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==", - "dev": true, "requires": { "postcss-selector-parser": "^6.0.11" } @@ -11186,6 +11503,17 @@ "refractor": "^3.6.0" } }, + "react-transition-group": { + "version": "4.4.5", + "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", + "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", + "requires": { + "@babel/runtime": "^7.5.5", + "dom-helpers": "^5.0.1", + "loose-envify": "^1.4.0", + "prop-types": "^15.6.2" + } + }, "reactflow": { "version": "11.7.2", "resolved": "https://registry.npmjs.org/reactflow/-/reactflow-11.7.2.tgz", @@ -11203,7 +11531,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", - "dev": true, "requires": { "pify": "^2.3.0" } @@ -11266,12 +11593,11 @@ "dev": true }, "resolve": { - "version": "1.22.2", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", - "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==", - "dev": true, + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", "requires": { - "is-core-module": "^2.11.0", + "is-core-module": "^2.13.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" } @@ -11494,15 +11820,14 @@ } }, "stylis": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz", - "integrity": "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==" + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.3.0.tgz", + "integrity": "sha512-E87pIogpwUsUwXw7dNyU4QDjdgVMy52m+XEOPEKUn161cCzWjjhPSQhByfd1CcNvrOLnXQ6OnnZDwnJrz/Z4YQ==" }, "sucrase": { "version": "3.32.0", "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.32.0.tgz", "integrity": "sha512-ydQOU34rpSyj2TGyz4D2p8rbktIOZ8QY9s+DGLvFU1i5pWJE8vkpruCjGCMHsdXwnD7JDcS+noSwM/a7zyNFDQ==", - "dev": true, "requires": { "@jridgewell/gen-mapping": "^0.3.2", "commander": "^4.0.0", @@ -11517,7 +11842,6 @@ "version": "7.1.6", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "dev": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -11540,13 +11864,12 @@ "supports-preserve-symlinks-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" }, "tabster": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/tabster/-/tabster-4.5.1.tgz", - "integrity": "sha512-Zbvy4RN308q2siLBuzAFbx4LbCjeU6EnKcxAoEYhVSu8buZcrPFeUlcwfU5AvkrwYU/rq3lNl5E7millpuWITw==", + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/tabster/-/tabster-4.9.0.tgz", + "integrity": "sha512-wcXpMQxLA7OFcL4ci6Spsv0C1S26HtCD4904XTW78mQ2iPsKyo+SdjBUZ4SHhNMpa1y4P1cByc6dPJ0n+9yVzA==", "requires": { "keyborg": "^2.0.0", "tslib": "^2.3.1" @@ -11558,20 +11881,19 @@ "integrity": "sha512-tRtRN22TDokGi2TuYSvuHQuuW6BJ/zlUEG+iYpAQ9i66msc/0eU/+HPccbPnNNH0mCPp0Ob8thaC8Uy9CxHitQ==" }, "tailwindcss": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.2.tgz", - "integrity": "sha512-9jPkMiIBXvPc2KywkraqsUfbfj+dHDb+JPWtSJa9MLFdrPyazI7q6WX2sUrm7R9eVR7qqv3Pas7EvQFzxKnI6w==", - "dev": true, + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.0.tgz", + "integrity": "sha512-VigzymniH77knD1dryXbyxR+ePHihHociZbXnLZHUyzf2MMs2ZVqlUrZ3FvpXP8pno9JzmILt1sZPD19M3IxtA==", "requires": { "@alloc/quick-lru": "^5.2.0", "arg": "^5.0.2", "chokidar": "^3.5.3", "didyoumean": "^1.2.2", "dlv": "^1.1.3", - "fast-glob": "^3.2.12", + "fast-glob": "^3.3.0", "glob-parent": "^6.0.2", "is-glob": "^4.0.3", - "jiti": "^1.18.2", + "jiti": "^1.19.1", "lilconfig": "^2.1.0", "micromatch": "^4.0.5", "normalize-path": "^3.0.0", @@ -11583,7 +11905,6 @@ "postcss-load-config": "^4.0.1", "postcss-nested": "^6.0.1", "postcss-selector-parser": "^6.0.11", - "postcss-value-parser": "^4.2.0", "resolve": "^1.22.2", "sucrase": "^3.32.0" }, @@ -11591,14 +11912,12 @@ "object-hash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", - "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", - "dev": true + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==" }, "postcss-load-config": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.1.tgz", "integrity": "sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==", - "dev": true, "requires": { "lilconfig": "^2.0.5", "yaml": "^2.1.1" @@ -11615,7 +11934,6 @@ "version": "3.3.1", "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", - "dev": true, "requires": { "any-promise": "^1.0.0" } @@ -11624,7 +11942,6 @@ "version": "1.6.0", "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", - "dev": true, "requires": { "thenify": ">= 3.1.0 < 4" } @@ -11655,8 +11972,7 @@ "ts-interface-checker": { "version": "0.1.13", "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", - "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", - "dev": true + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==" }, "ts-poet": { "version": "6.4.1", @@ -11843,9 +12159,9 @@ } }, "use-disposable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/use-disposable/-/use-disposable-1.0.1.tgz", - "integrity": "sha512-5Sle1XEmK3lw3xyGqeIY7UKkiUgF+TxwUty7fTsqM5D5AxfQfo2ft+LY9xKCA+W5YbaBFbOkWfQsZY/y5JhInA==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/use-disposable/-/use-disposable-1.0.2.tgz", + "integrity": "sha512-UMaXVlV77dWOu4GqAFNjRzHzowYKUKbJBQfCexvahrYeIz4OkUYUjna4Tjjdf92NH8Nm8J7wEfFRgTIwYjO5jg==", "requires": {} }, "use-sync-external-store": { @@ -11949,8 +12265,7 @@ "yaml": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.1.tgz", - "integrity": "sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==", - "dev": true + "integrity": "sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==" }, "yargs": { "version": "17.7.2", diff --git a/package.json b/package.json index f099a32..015315b 100644 --- a/package.json +++ b/package.json @@ -4,21 +4,26 @@ "private": true, "type": "module", "scripts": { - "dev": "cd studio && node esbuild.mjs", + "dev": "cd studio && TARGET=site node esbuild.mjs", + "dev:vscode": "cd studio && TARGET=vscode node esbuild.mjs", "build": "cd studio && BUILD=true node esbuild.mjs" }, "dependencies": { "@bufbuild/connect": "^0.8.6", "@bufbuild/connect-web": "^0.8.6", - "@fluentui/react": "^8.110.7", - "@fluentui/react-components": "^9.19.1", + "@fluentui/react": "^8.112.9", + "@fluentui/react-components": "^9.36.0", + "@tailwindcss/typography": "^0.5.10", "@types/node": "18.16.0", "@types/react": "18.0.38", "@types/react-dom": "18.0.11", "@types/react-syntax-highlighter": "^15.5.6", + "@types/vscode": "^1.85.0", "bootstrap": "^5.3.0", "d3-hierarchy": "^3.1.2", + "daisyui": "^4.4.20", "esbuild-plugin-swc": "^1.0.1", + "esbuild-sass-plugin": "^2.16.0", "esbuild-style-plugin": "^1.6.1", "eslint": "8.39.0", "framer-motion": "^10.12.4", @@ -41,22 +46,22 @@ }, "devDependencies": { "@bufbuild/buf": "^1.23.1", - "@bufbuild/connect": "^0.11.0", - "@bufbuild/connect-web": "^0.11.0", - "@bufbuild/protobuf": "^1.2.1", - "@bufbuild/protoc-gen-connect-es": "^0.11.0", - "@bufbuild/protoc-gen-es": "^1.2.1", + "@bufbuild/connect": "^0.13.0", + "@bufbuild/connect-web": "^0.13.0", + "@bufbuild/protobuf": "^1.5.1", + "@bufbuild/protoc-gen-connect-es": "^0.13.0", + "@bufbuild/protoc-gen-es": "^1.5.1", "@esbuild-plugins/node-modules-polyfill": "^0.2.2", "@grpc/grpc-js": "^1.8.14", "@types/uuid": "^9.0.1", "autoprefixer": "^10.4.14", "csstype": "^3.0.10", - "esbuild": "^0.17.18", + "esbuild": "^0.19.5", "google-protobuf": "^3.13.0", "postcss": "^8.4.23", "protoc-gen-ts": "^0.8.6", "source-map-support": "^0.5.21", - "tailwindcss": "^3.3.1", + "tailwindcss": "^3.4.0", "ts-proto": "^1.146.0", "typescript": "4.x.x", "uuid": "^9.0.0" diff --git a/pkg/bucket/builder.go b/pkg/bucket/builder.go new file mode 100644 index 0000000..5d3dac0 --- /dev/null +++ b/pkg/bucket/builder.go @@ -0,0 +1,66 @@ +package bucket + +import ( + "gocloud.dev/blob" + "gocloud.dev/blob/fileblob" + "path" +) + +type Builder struct { + *blob.Bucket + config Config + + path string +} + +func (s *Builder) Dir(name string) *Builder { + ns := *s + ns.path = path.Join(s.config.Path, name) + return &ns +} + +func (s *Builder) Build() (string, error) { + return s.path, ensureDirExists(s.path) +} + +func (s *Builder) File(name string) (string, error) { + return path.Join(s.path, name), ensureDirExists(s.path) +} + +func NewBuilder(config Config) (*Builder, error) { + var ( + err error + ) + if config.Path == "" { + config.Path, err = createLocalDir(config.LocalName) + if err != nil { + return nil, err + } + err = ensureDirExists(path.Join(config.Path, "bucket")) + if err != nil { + return nil, err + } + } + bucket, err := fileblob.OpenBucket(config.Path, &fileblob.Options{ + CreateDir: true, + }) + if err != nil { + return nil, err + } + return &Builder{ + Bucket: bucket, + config: config, + path: config.Path, + }, nil +} + +func NewTestBuilder() *Builder { + return &Builder{ + Bucket: nil, + config: Config{ + LocalName: "test", + Path: "", + }, + path: "", + } +} diff --git a/pkg/bucket/config.go b/pkg/bucket/config.go index f0c4280..4bebc0c 100644 --- a/pkg/bucket/config.go +++ b/pkg/bucket/config.go @@ -9,6 +9,10 @@ const ConfigurationKey = "bucket" type Config struct { Name string `yaml:"name"` + + // TODO breadchris use builder + LocalName string + Path string } func NewDefaultConfig() Config { diff --git a/pkg/cli/cli.go b/pkg/cli/cli.go index 1c73a14..a51d7f7 100644 --- a/pkg/cli/cli.go +++ b/pkg/cli/cli.go @@ -1,14 +1,16 @@ package cli import ( + "fmt" "github.com/bufbuild/connect-go" "github.com/google/wire" "github.com/protoflow-labs/protoflow/gen" + "github.com/protoflow-labs/protoflow/pkg/bucket" "github.com/protoflow-labs/protoflow/pkg/config" "github.com/protoflow-labs/protoflow/pkg/generate" + "github.com/protoflow-labs/protoflow/pkg/server" "github.com/protoflow-labs/protoflow/pkg/util/reload" - "github.com/protoflow-labs/protoflow/pkg/api" logd "github.com/protoflow-labs/protoflow/pkg/log" "github.com/protoflow-labs/protoflow/pkg/project" "github.com/rs/zerolog/log" @@ -22,18 +24,23 @@ var ProviderSet = wire.NewSet( config.ProviderSet, project.ProviderSet, generate.ProviderSet, - api.ProviderSet, + server.ProviderSet, ) func New( - httpHandler *api.HTTPServer, - project *project.Service, + httpHandler *server.HTTPServer, + p *project.Service, l *logd.Log, ) *cli.App { return &cli.App{ Name: "protoflow", Description: "Coding as easy as playing with legos.", - Flags: []cli.Flag{}, + Flags: []cli.Flag{ + &cli.StringFlag{ + Name: "project", + Usage: "Project directory. Defaults to current working directory.", + }, + }, Commands: []*cli.Command{ { Name: "studio", @@ -42,22 +49,104 @@ func New( Name: "dev", Usage: "Start server in dev mode", }, + &cli.IntFlag{ + Name: "port", + Usage: "Port to start the server", + }, }, Action: func(ctx *cli.Context) error { dev := ctx.Bool("dev") + port := ctx.Int("port") if dev { - return liveReload() + return liveReload(port) } + return httpHandler.Start(port) + }, + }, + { + Name: "generate", + Subcommands: []*cli.Command{ + { + Name: "init", + Action: func(ctx *cli.Context) error { + pDir := ctx.String("project") + + // TODO breadchris not friendly + b, err := bucket.NewUserCache(bucket.Config{ + Name: pDir, + }) + if err != nil { + return err + } + + proj, err := project.NewDefaultProject(b) + if err != nil { + return err + } - // TODO breadchris for local dev, add live reload into command https://github.com/makiuchi-d/RELOAD/blob/master/RELOAD.go + w, err := project.FromProto(proj) + if err != nil { + return err + } - return httpHandler.Start() + g, err := generate.NewGenerate(generate.Config{ + ProjectPath: pDir, + }) + if err != nil { + return err + } + + err = g.Init(&project.Project{ + Base: proj, + Workflow: w, + }) + if err != nil { + return err + } + return nil + }, + }, + { + Name: "service", + Flags: []cli.Flag{ + &cli.StringFlag{ + Name: "name", + }, + &cli.StringFlag{ + Name: "language", + Aliases: []string{"l"}, + Usage: "Language to generate", + }, + }, + Action: func(ctx *cli.Context) error { + return nil + }, + }, + { + Name: "method", + Flags: []cli.Flag{ + &cli.StringFlag{ + Name: "name", + }, + &cli.StringFlag{ + Name: "language", + Aliases: []string{"l"}, + Usage: "Language to generate", + }, + }, + Action: func(ctx *cli.Context) error { + return nil + }, + }, + }, + Action: func(ctx *cli.Context) error { + return nil }, }, { Name: "load", Action: func(ctx *cli.Context) error { - res, err := project.LoadProject(ctx.Context, connect.NewRequest(&gen.LoadProjectRequest{})) + res, err := p.LoadProject(ctx.Context, connect.NewRequest(&gen.LoadProjectRequest{})) if err != nil { return err } @@ -71,14 +160,12 @@ func New( } } -func liveReload() error { +func liveReload(port int) error { // TODO breadchris makes this a config that can be set c := reload.Config{ - Cmd: []string{"go", "run", "main.go", "studio"}, - // TODO breadchris the patterns and ignores are not quite working - // ideally we use tilt here - Patterns: []string{"pkg/**/*.go", "templates/**"}, - Ignores: []string{"studio/**", "node_modules/**", ".git/**", "examples/**"}, + Cmd: []string{"go", "run", "main.go", "studio", "--port", fmt.Sprintf("%d", port)}, + Targets: []string{"pkg", "gen"}, + Patterns: []string{"**/*.go"}, } // TODO breadchris this code needs to be refactored to use observability return reload.Reload(c) diff --git a/pkg/cli/wire_gen.go b/pkg/cli/wire_gen.go index cf7efb0..d56b2ec 100644 --- a/pkg/cli/wire_gen.go +++ b/pkg/cli/wire_gen.go @@ -7,14 +7,14 @@ package cli import ( - "github.com/protoflow-labs/protoflow/pkg/api" "github.com/protoflow-labs/protoflow/pkg/bucket" "github.com/protoflow-labs/protoflow/pkg/config" "github.com/protoflow-labs/protoflow/pkg/db" "github.com/protoflow-labs/protoflow/pkg/generate" + "github.com/protoflow-labs/protoflow/pkg/llm" "github.com/protoflow-labs/protoflow/pkg/log" - "github.com/protoflow-labs/protoflow/pkg/openai" "github.com/protoflow-labs/protoflow/pkg/project" + "github.com/protoflow-labs/protoflow/pkg/server" "github.com/protoflow-labs/protoflow/pkg/store" "github.com/protoflow-labs/protoflow/pkg/workflow" "github.com/urfave/cli/v2" @@ -31,7 +31,7 @@ func Wire(cacheConfig bucket.Config) (*cli.App, error) { if err != nil { return nil, err } - apiConfig, err := api.NewConfig(provider) + serverConfig, err := server.NewConfig(provider) if err != nil { return nil, err } @@ -47,22 +47,21 @@ func Wire(cacheConfig bucket.Config) (*cli.App, error) { if err != nil { return nil, err } - openaiConfig, err := openai.NewConfig(provider) + genProject, err := project.NewDefaultProject(localBucket) if err != nil { return nil, err } - openAIQAClient, err := openai.NewOpenAIQAClient(openaiConfig) + workflowManager := workflow.NewWorkflowManager() + managerBuilder := workflow.NewManagerBuilder(workflowManager) + llmConfig, err := llm.NewConfig(provider) if err != nil { return nil, err } - chatServer := openai.NewChat(openAIQAClient) - genProject, err := project.NewDefaultProject(localBucket) + agent, err := llm.NewAgent(llmConfig) if err != nil { return nil, err } - workflowManager := workflow.NewWorkflowManager() - managerBuilder := workflow.NewManagerBuilder(workflowManager) - service, err := project.NewService(projectStore, localBucket, chatServer, genProject, managerBuilder, workflowManager) + service, err := project.NewService(projectStore, localBucket, genProject, managerBuilder, workflowManager, agent) if err != nil { return nil, err } @@ -74,7 +73,7 @@ func Wire(cacheConfig bucket.Config) (*cli.App, error) { if err != nil { return nil, err } - httpServer, err := api.NewHTTPServer(apiConfig, service, generateService) + httpServer, err := server.NewHTTPServer(serverConfig, service, generateService) if err != nil { return nil, err } diff --git a/pkg/config/config.go b/pkg/config/config.go index 1ff24ab..5264dbb 100644 --- a/pkg/config/config.go +++ b/pkg/config/config.go @@ -1,9 +1,9 @@ package config import ( - "github.com/protoflow-labs/protoflow/pkg/api" "github.com/protoflow-labs/protoflow/pkg/generate" - "github.com/protoflow-labs/protoflow/pkg/openai" + "github.com/protoflow-labs/protoflow/pkg/llm" + "github.com/protoflow-labs/protoflow/pkg/server" "os" "path" @@ -26,9 +26,9 @@ type BaseConfig struct { Workflow workflow.Config `yaml:"workflow"` DB db.Config `yaml:"db"` Temporal temporal.Config `yaml:"temporal"` - API api.Config `yaml:"api"` + Server server.Config `yaml:"server"` Generate generate.Config `yaml:"generate"` - OpenAI openai.Config `yaml:"openai"` + LLM llm.Config `yaml:"llm"` } func NewDefaultConfig() BaseConfig { @@ -37,9 +37,9 @@ func NewDefaultConfig() BaseConfig { Workflow: workflow.NewDefaultConfig(), DB: db.NewDefaultConfig(), Temporal: temporal.NewDefaultConfig(), - API: api.NewDefaultConfig(studioProxy), + Server: server.NewDefaultConfig(), Generate: generate.NewDefaultConfig(), - OpenAI: openai.NewDefaultConfig(), + LLM: llm.NewDefaultConfig(), } } diff --git a/pkg/config/dev.go b/pkg/config/dev.go deleted file mode 100644 index 8ee10a0..0000000 --- a/pkg/config/dev.go +++ /dev/null @@ -1,8 +0,0 @@ -//go:build !release - -package config - -// Use these values sparingly. Anything added here should be also added to release.go. -var ( - studioProxy = "http://localhost:8000" -) diff --git a/pkg/generate/dockercompose.go b/pkg/generate/dockercompose.go index 78c6a48..ddd141c 100644 --- a/pkg/generate/dockercompose.go +++ b/pkg/generate/dockercompose.go @@ -46,8 +46,8 @@ func (g *DockerComposeGenerate) Generate(project *project.Project) error { Command: []string{"protoflow", "run"}, Ports: []types.ServicePortConfig{ { - Target: 8080, - Published: 8080, + Target: 8000, + Published: 8000, }, }, Volumes: []types.ServiceVolumeConfig{ @@ -83,8 +83,8 @@ func (g *DockerComposeGenerate) Generate(project *project.Project) error { Command: []string{"node", "index.js"}, Ports: []types.ServicePortConfig{ { - Target: 8080, - Published: 8080, + Target: 8000, + Published: 8000, }, }, }) diff --git a/pkg/generate/generate.go b/pkg/generate/generate.go index 879b3c2..bde44e2 100644 --- a/pkg/generate/generate.go +++ b/pkg/generate/generate.go @@ -7,7 +7,9 @@ import ( "github.com/protoflow-labs/protoflow/pkg/graph" "github.com/protoflow-labs/protoflow/pkg/graph/node/code" "github.com/protoflow-labs/protoflow/pkg/project" + "github.com/protoflow-labs/protoflow/templates" "github.com/rs/zerolog/log" + "io" "os" "path" ) @@ -46,25 +48,82 @@ func NewGenerate(config Config) (*Generate, error) { }, nil } +func copyFile() { + +} + +func (s *Generate) Init(project *project.Project) error { + // TODO breadchris what does the wire frame look like? + + t := templates.Templates + // TODO breadchris someone has done this already https://github.com/leaanthony/debme + pPath := "proto" + entries, err := t.ReadDir(pPath) + if err != nil { + return err + } + dPath, err := s.bucket.GetFolder(pPath) + if err != nil { + return err + } + for _, e := range entries { + f, err := t.Open(path.Join(pPath, e.Name())) + if err != nil { + return err + } + df, err := os.Create(path.Join(dPath, e.Name())) + _, err = io.Copy(df, f) + if err != nil { + return err + } + } + bufFile := "buf.gen.yaml" + tf, err := t.Open(bufFile) + if err != nil { + return err + } + b, err := s.bucket.GetFile(bufFile) + if err != nil { + return err + } + df, err := os.Create(b) + if err != nil { + return err + } + _, err = io.Copy(df, tf) + if err != nil { + return err + } + return nil +} + +func (s *Generate) Service(project *project.Project, n graph.Node) error { + return nil +} + +func (s *Generate) Method(project *project.Project, n graph.Node) error { + return nil +} + func (s *Generate) GenerateImplementation(project *project.Project, n graph.Node) error { r, err := n.Provider() if err != nil { return errors.Wrapf(err, "error getting node provider") } - switch r := r.(type) { + switch c := r.(type) { case *code.Server: - if r.Runtime == pcode.Runtime_NODEJS { + if c.Runtime == pcode.Runtime_NODEJS { jsManager, err := NewNodeJSManager(s.bucket) if err != nil { return errors.Wrap(err, "error creating nodejs manager") } - err = jsManager.GenerateFunctionImpl(r, n) + err = jsManager.GenerateFunctionImpl(c, n) if err != nil { log.Error().Err(err).Msg("error generating function implementation") } - err = jsManager.GenerateGRPCService(r) + err = jsManager.GenerateGRPCService(c) if err != nil { log.Error().Err(err).Msg("error generating service files") } diff --git a/pkg/generate/golang.go b/pkg/generate/golang.go index cfb0e08..74236c1 100644 --- a/pkg/generate/golang.go +++ b/pkg/generate/golang.go @@ -15,8 +15,6 @@ func (g GoManager) GenerateGRPCService(r *code.Server) error { panic("implement me") } -var _ LanguageManager = &GoManager{} - func NewGoManager(c bucket.Bucket) (*GoManager, error) { codeRoot, err := c.WithDir("golang") if err != nil { diff --git a/pkg/generate/nodejs.go b/pkg/generate/nodejs.go index 3507ef0..bc91d6d 100644 --- a/pkg/generate/nodejs.go +++ b/pkg/generate/nodejs.go @@ -12,16 +12,10 @@ import ( "strings" ) -type LanguageManager interface { - GenerateGRPCService(r *code.Server) error -} - type NodeJSManager struct { codeRoot bucket.Bucket } -var _ LanguageManager = &NodeJSManager{} - func NewNodeJSManager(c bucket.Bucket) (*NodeJSManager, error) { codeRoot, err := c.WithDir("nodejs") if err != nil { @@ -71,7 +65,7 @@ func (s *NodeJSManager) UpdateNodeType(n graph.Node, nodeInfo *graph.Info) error if err != nil { return errors.Wrapf(err, "error getting protos dir") } - fileDescs, err := grpc.ParseProtoDir(funcDirPath) + fileDescs, err := grpc.ParseProtoDir(funcDirPath, "nodejs.proto") if err != nil { return errors.Wrapf(err, "error parsing protos") } diff --git a/pkg/graph/node/code/server.go b/pkg/graph/node/code/server.go index d69058b..ff59920 100644 --- a/pkg/graph/node/code/server.go +++ b/pkg/graph/node/code/server.go @@ -34,7 +34,8 @@ func NewServerProto(runtime code.Runtime) *code.Code { Type: &code.Code_Server{ Server: &code.Server{ Runtime: runtime, - Grpc: grpc.NewServerProto("localhost:8080").GetServer(), + // TODO breadchris should there be a default URL? + Grpc: grpc.NewServerProto("localhost:8000").GetServer(), }, }, } diff --git a/pkg/graph/node/grpc/method.go b/pkg/graph/node/grpc/method.go index af1b695..aab5d5d 100644 --- a/pkg/graph/node/grpc/method.go +++ b/pkg/graph/node/grpc/method.go @@ -15,7 +15,6 @@ import ( "github.com/rs/zerolog/log" "google.golang.org/protobuf/reflect/protoreflect" "net/url" - "strings" ) type Method struct { @@ -32,17 +31,13 @@ func NewMethod(b *base.Node, n *pgrpc.Method) *Method { } } -func NewMethodProto(packageService, m string) *pgrpc.GRPC { - ps := strings.Split(packageService, ".") - if len(ps) != 2 { - return nil - } +func NewMethodProto(pack, service, method string) *pgrpc.GRPC { return &pgrpc.GRPC{ Type: &pgrpc.GRPC_Method{ Method: &pgrpc.Method{ - Package: ps[0], - Service: ps[1], - Method: m, + Package: pack, + Service: service, + Method: method, }, }, } diff --git a/pkg/graph/node/reason/reason.go b/pkg/graph/node/reason/reason.go index b5827be..847b597 100644 --- a/pkg/graph/node/reason/reason.go +++ b/pkg/graph/node/reason/reason.go @@ -9,14 +9,11 @@ import ( "github.com/protoflow-labs/protoflow/gen/reason" "github.com/protoflow-labs/protoflow/pkg/graph" "github.com/protoflow-labs/protoflow/pkg/graph/node/base" - "github.com/protoflow-labs/protoflow/pkg/graph/node/data" "github.com/protoflow-labs/protoflow/pkg/grpc" - openaiclient "github.com/protoflow-labs/protoflow/pkg/openai" "github.com/protoflow-labs/protoflow/pkg/util/rx" "github.com/reactivex/rxgo/v2" "github.com/rs/zerolog/log" "github.com/sashabaranov/go-openai" - "go.uber.org/config" ) type PromptNode struct { @@ -73,7 +70,7 @@ func (n *PromptNode) Wire(ctx context.Context, input graph.IO) (graph.IO, error) if err != nil { return graph.IO{}, err } - r, ok := p.(*Engine) + _, ok := p.(*Engine) if !ok { return graph.IO{}, errors.New("error getting reason engine resource") } @@ -116,16 +113,16 @@ func (n *PromptNode) Wire(ctx context.Context, input graph.IO) (graph.IO, error) Content: normalizedItem, }) - s, err := r.QAClient.Ask(c, int(n.MinTokenCount)) - if err != nil { - outputStream <- rx.NewError(errors.Wrapf(err, "error executing prompt: %s", n.NormalizedName())) - } + //s, err := r.QAClient.Ask(c, int(n.MinTokenCount)) + //if err != nil { + // outputStream <- rx.NewError(errors.Wrapf(err, "error executing prompt: %s", n.NormalizedName())) + //} // TODO breadchris react to a function call on s.FunctionCall // TODO breadchris this should be a static type. This is a brittle type that maps to workflow.go:133 outputStream <- rx.NewItem(map[string]any{ - "result": s, + "result": "TODO", }) }, func(err error) { outputStream <- rx.NewError(err) @@ -140,7 +137,7 @@ func (n *PromptNode) Wire(ctx context.Context, input graph.IO) (graph.IO, error) type Engine struct { *base.Node *reason.Engine - QAClient openaiclient.QAClient + //QAClient openaiclient.QAClient } func NewEngineNode(b *base.Node, node *reason.Engine) *Engine { @@ -152,39 +149,40 @@ func NewEngineNode(b *base.Node, node *reason.Engine) *Engine { func (n *Engine) Wire(ctx context.Context, input graph.IO) (graph.IO, error) { // TODO breadchris replace with some type of dependency injection capability - var ( - configProvider config.Provider - err error - ) - staticConfig := map[string]interface{}{ - "openai": openaiclient.NewDefaultConfig(), - } - p, err := n.Provider() - if err != nil { - return graph.IO{}, err - } - t, ok := p.(*data.ConfigNode) - if !ok { - return graph.IO{}, errors.New("error getting config node resource") - } - - // TODO breadchris how do we handle resources that need to be initialized before others? - configProvider, err = t.NewConfigProvider(config.Static(staticConfig)) - if err != nil { - return graph.IO{}, errors.Wrapf(err, "failed to build config provider") - } - - if configProvider == nil { - return graph.IO{}, errors.New("config provider not found") - } - c, err := openaiclient.Wire(configProvider) - if err != nil { - return graph.IO{}, errors.Wrapf(err, "failed to initialize openai client") - } - n.QAClient = c - return graph.IO{ - Observable: input.Observable, - }, nil + //var ( + // configProvider config.Provider + // err error + //) + //staticConfig := map[string]interface{}{ + // "openai": openaiclient.NewDefaultConfig(), + //} + //p, err := n.Provider() + //if err != nil { + // return graph.IO{}, err + //} + //t, ok := p.(*data.ConfigNode) + //if !ok { + // return graph.IO{}, errors.New("error getting config node resource") + //} + // + //// TODO breadchris how do we handle resources that need to be initialized before others? + //configProvider, err = t.NewConfigProvider(config.Static(staticConfig)) + //if err != nil { + // return graph.IO{}, errors.Wrapf(err, "failed to build config provider") + //} + // + //if configProvider == nil { + // return graph.IO{}, errors.New("config provider not found") + //} + //c, err := openaiclient.Wire(configProvider) + //if err != nil { + // return graph.IO{}, errors.Wrapf(err, "failed to initialize openai client") + //} + //n.QAClient = c + //return graph.IO{ + // Observable: input.Observable, + //}, nil + return graph.IO{}, nil } func (n *Engine) Provide() ([]*gen.Node, error) { diff --git a/pkg/grpc/blocks.go b/pkg/grpc/blocks.go index b788f20..d543a02 100644 --- a/pkg/grpc/blocks.go +++ b/pkg/grpc/blocks.go @@ -9,14 +9,66 @@ import ( "github.com/protoflow-labs/protoflow/gen" "github.com/protoflow-labs/protoflow/gen/code" pgrpc "github.com/protoflow-labs/protoflow/gen/grpc" + "github.com/protoflow-labs/protoflow/pkg/grpc/bufcurl" + "github.com/protoflow-labs/protoflow/pkg/grpc/manager" "github.com/rs/zerolog/log" "google.golang.org/grpc" "google.golang.org/grpc/credentials/insecure" "google.golang.org/protobuf/reflect/protoreflect" "google.golang.org/protobuf/types/descriptorpb" + "log/slog" "net/url" ) +func GetGRPCTypeInfo(host string) ([]*gen.GRPCService, error) { + m := manager.NewReflectionManager(host, manager.WithProtocol(bufcurl.ReflectProtocolGRPCV1Alpha)) + cleanup, err := m.Init() + if err != nil { + return nil, errors.Wrapf(err, "error initializing reflection manager") + } + defer cleanup() + + services, err := m.ResolveServices() + if err != nil { + return nil, errors.Wrapf(err, "error resolving services") + } + + var blocks []*gen.GRPCService + seen := map[protoreflect.FullName]struct{}{} + for _, sd := range services { + if _, ok := seen[sd.FullName()]; ok { + continue + } + seen[sd.FullName()] = struct{}{} + + var methods []*gen.GRPCMethod + for i := 0; i < sd.Methods().Len(); i++ { + m := sd.Methods().Get(i) + md, err := NewMethodDescriptor(m) + if err != nil { + return nil, errors.Wrapf(err, "error creating method descriptor") + } + ti, err := md.Proto() + if err != nil { + return nil, errors.Wrapf(err, "error getting proto") + } + methods = append(methods, &gen.GRPCMethod{ + Name: string(m.Name()), + TypeInfo: ti, + }) + } + blocks = append(blocks, &gen.GRPCService{ + Name: string(sd.Name()), + Package: string(sd.ParentFile().Package()), + Methods: methods, + // TODO breadchris what are the cases where passing the file path here is not correct? + // for example, the path is not absolute, it is relative to the proto directory. + File: sd.ParentFile().Path(), + }) + } + return blocks, nil +} + func EnumerateResourceBlocks(server *pgrpc.Server, isLangService bool) ([]*gen.Node, error) { if server.Host == "" { return nil, errors.New("host is required") @@ -33,11 +85,13 @@ func EnumerateResourceBlocks(server *pgrpc.Server, isLangService bool) ([]*gen.N } // TODO breadchris there is some repeat code, the grpc package has some code from Buf that does reflection already - methodDesc, err := allMethodsViaReflection(context.Background(), conn) + svcDesc, err := allMethodsViaReflection(context.Background(), conn) if err != nil { return nil, errors.Wrapf(err, "unable to get all methods via reflection") } + methodDesc := AllMethodsForServices(svcDesc) + log.Debug().Str("server", server.Host).Msgf("found %d methods", len(methodDesc)) var blocks []*gen.Node @@ -135,6 +189,11 @@ func ResolveTypeLookup( oneOfFields := oneOf.Fields() for j := 0; j < oneOfFields.Len(); j++ { c := oneOfFields.Get(j) + if c == nil || c.Message() == nil { + // TODO breadchris should this return an error? + slog.Warn("oneof field is nil", "err", err) + continue + } // TODO breadchris replace with m.FileBuilder.GetMessage msgName := string(c.Message().FullName()) if _, ok := descLookup[msgName]; ok { diff --git a/pkg/grpc/bufcurl/reflection_resolver.go b/pkg/grpc/bufcurl/reflection_resolver.go index 4252c9a..963a1ec 100644 --- a/pkg/grpc/bufcurl/reflection_resolver.go +++ b/pkg/grpc/bufcurl/reflection_resolver.go @@ -19,8 +19,8 @@ import ( "errors" "fmt" "github.com/protoflow-labs/protoflow/pkg/grpc/bufcurl/protoencoding" - "github.com/protoflow-labs/protoflow/pkg/grpc/bufcurl/reflectionv1" "github.com/protoflow-labs/protoflow/pkg/grpc/bufcurl/verbose" + reflectionv1 "google.golang.org/grpc/reflection/grpc_reflection_v1" "net/http" "strconv" "strings" @@ -101,7 +101,7 @@ func NewServerReflectionResolver( reflectProtocol ReflectProtocol, headers http.Header, printer verbose.Printer, -) (r protoencoding.Resolver, closeResolver func()) { +) (r *ReflectionResolver, closeResolver func()) { baseURL = strings.TrimSuffix(baseURL, "/") var v1Client, v1alphaClient *reflectClient if reflectProtocol != ReflectProtocolGRPCV1 { @@ -120,7 +120,7 @@ func NewServerReflectionResolver( // context so that underlying transport can restore them ctx = withUserAgent(ctx, headers) - res := &reflectionResolver{ + res := &ReflectionResolver{ ctx: ctx, v1Client: v1Client, v1alphaClient: v1alphaClient, @@ -135,7 +135,7 @@ func NewServerReflectionResolver( type reflectClient = connect.Client[reflectionv1.ServerReflectionRequest, reflectionv1.ServerReflectionResponse] type reflectStream = connect.BidiStreamForClient[reflectionv1.ServerReflectionRequest, reflectionv1.ServerReflectionResponse] -type reflectionResolver struct { +type ReflectionResolver struct { ctx context.Context headers http.Header printer verbose.Printer @@ -149,7 +149,28 @@ type reflectionResolver struct { cachedExts protoregistry.Types } -func (r *reflectionResolver) FindFileByPath(path string) (protoreflect.FileDescriptor, error) { +func (r *ReflectionResolver) GetServices() ([]protoreflect.ServiceDescriptor, error) { + var services []protoreflect.ServiceDescriptor + files, err := r.enumerateFiles() + if err != nil { + return nil, err + } + if err = r.cacheFilesLocked(files); err != nil { + return nil, err + } + for _, file := range files { + fileDescriptor, err := protodesc.NewFile(file, &r.cachedFiles) + if err != nil { + return nil, err + } + for i := 0; i < fileDescriptor.Services().Len(); i++ { + services = append(services, fileDescriptor.Services().Get(i)) + } + } + return services, nil +} + +func (r *ReflectionResolver) FindFileByPath(path string) (protoreflect.FileDescriptor, error) { r.mu.Lock() defer r.mu.Unlock() @@ -174,7 +195,7 @@ func (r *reflectionResolver) FindFileByPath(path string) (protoreflect.FileDescr return r.cachedFiles.FindFileByPath(path) } -func (r *reflectionResolver) FindDescriptorByName(name protoreflect.FullName) (protoreflect.Descriptor, error) { +func (r *ReflectionResolver) FindDescriptorByName(name protoreflect.FullName) (protoreflect.Descriptor, error) { r.mu.Lock() defer r.mu.Unlock() @@ -199,7 +220,7 @@ func (r *reflectionResolver) FindDescriptorByName(name protoreflect.FullName) (p return r.cachedFiles.FindDescriptorByName(name) } -func (r *reflectionResolver) FindEnumByName(enum protoreflect.FullName) (protoreflect.EnumType, error) { +func (r *ReflectionResolver) FindEnumByName(enum protoreflect.FullName) (protoreflect.EnumType, error) { d, err := r.FindDescriptorByName(enum) if err != nil { return nil, err @@ -211,7 +232,7 @@ func (r *reflectionResolver) FindEnumByName(enum protoreflect.FullName) (protore return dynamicpb.NewEnumType(ed), nil } -func (r *reflectionResolver) FindMessageByName(message protoreflect.FullName) (protoreflect.MessageType, error) { +func (r *ReflectionResolver) FindMessageByName(message protoreflect.FullName) (protoreflect.MessageType, error) { d, err := r.FindDescriptorByName(message) if err != nil { return nil, err @@ -223,13 +244,13 @@ func (r *reflectionResolver) FindMessageByName(message protoreflect.FullName) (p return dynamicpb.NewMessageType(md), nil } -func (r *reflectionResolver) FindMessageByURL(url string) (protoreflect.MessageType, error) { +func (r *ReflectionResolver) FindMessageByURL(url string) (protoreflect.MessageType, error) { pos := strings.LastIndexByte(url, '/') typeName := url[pos+1:] return r.FindMessageByName(protoreflect.FullName(typeName)) } -func (r *reflectionResolver) FindExtensionByName(field protoreflect.FullName) (protoreflect.ExtensionType, error) { +func (r *ReflectionResolver) FindExtensionByName(field protoreflect.FullName) (protoreflect.ExtensionType, error) { d, err := r.FindDescriptorByName(field) if err != nil { return nil, err @@ -241,7 +262,7 @@ func (r *reflectionResolver) FindExtensionByName(field protoreflect.FullName) (p return dynamicpb.NewExtensionType(fd), nil } -func (r *reflectionResolver) FindExtensionByNumber(message protoreflect.FullName, field protoreflect.FieldNumber) (protoreflect.ExtensionType, error) { +func (r *ReflectionResolver) FindExtensionByNumber(message protoreflect.FullName, field protoreflect.FieldNumber) (protoreflect.ExtensionType, error) { r.mu.Lock() defer r.mu.Unlock() @@ -266,7 +287,7 @@ func (r *reflectionResolver) FindExtensionByNumber(message protoreflect.FullName return r.cachedExts.FindExtensionByNumber(message, field) } -func (r *reflectionResolver) fileContainingSymbolLocked(name protoreflect.FullName) ([]*descriptorpb.FileDescriptorProto, error) { +func (r *ReflectionResolver) fileContainingSymbolLocked(name protoreflect.FullName) ([]*descriptorpb.FileDescriptorProto, error) { r.printer.Printf("* Using server reflection to resolve %q\n", name) resp, err := r.sendLocked(&reflectionv1.ServerReflectionRequest{ MessageRequest: &reflectionv1.ServerReflectionRequest_FileContainingSymbol{ @@ -279,7 +300,7 @@ func (r *reflectionResolver) fileContainingSymbolLocked(name protoreflect.FullNa return descriptorsInResponse(resp) } -func (r *reflectionResolver) fileContainingExtensionLocked(message protoreflect.FullName, field protoreflect.FieldNumber) ([]*descriptorpb.FileDescriptorProto, error) { +func (r *ReflectionResolver) fileContainingExtensionLocked(message protoreflect.FullName, field protoreflect.FieldNumber) ([]*descriptorpb.FileDescriptorProto, error) { r.printer.Printf("* Using server reflection to retrieve extension %d for %q\n", field, message) resp, err := r.sendLocked(&reflectionv1.ServerReflectionRequest{ MessageRequest: &reflectionv1.ServerReflectionRequest_FileContainingExtension{ @@ -295,7 +316,39 @@ func (r *reflectionResolver) fileContainingExtensionLocked(message protoreflect. return descriptorsInResponse(resp) } -func (r *reflectionResolver) fileByNameLocked(name string) ([]*descriptorpb.FileDescriptorProto, error) { +func (r *ReflectionResolver) enumerateFiles() ([]*descriptorpb.FileDescriptorProto, error) { + resp, err := r.sendLocked(&reflectionv1.ServerReflectionRequest{ + MessageRequest: &reflectionv1.ServerReflectionRequest_ListServices{ + ListServices: "", + }, + }) + if err != nil { + return nil, fmt.Errorf("failed to send list services request: %w", err) + } + + var fileDescriptors []*descriptorpb.FileDescriptorProto + for _, service := range resp.GetListServicesResponse().GetService() { + serviceResp, err := r.sendLocked(&reflectionv1.ServerReflectionRequest{ + MessageRequest: &reflectionv1.ServerReflectionRequest_FileContainingSymbol{ + FileContainingSymbol: service.GetName(), + }, + }) + if err != nil { + return nil, fmt.Errorf("failed to send file containing symbol request: %w", err) + } + + fds, err := descriptorsInResponse(serviceResp) + if err != nil { + return nil, fmt.Errorf("failed to parse descriptors in response: %w", err) + } + + fileDescriptors = append(fileDescriptors, fds...) + } + + return fileDescriptors, nil +} + +func (r *ReflectionResolver) fileByNameLocked(name string) ([]*descriptorpb.FileDescriptorProto, error) { r.printer.Printf("* Using server reflection to download file %q\n", name) resp, err := r.sendLocked(&reflectionv1.ServerReflectionRequest{ MessageRequest: &reflectionv1.ServerReflectionRequest_FileByFilename{ @@ -327,7 +380,7 @@ func descriptorsInResponse(resp *reflectionv1.ServerReflectionResponse) ([]*desc } } -func (r *reflectionResolver) cacheFilesLocked(files []*descriptorpb.FileDescriptorProto) error { +func (r *ReflectionResolver) cacheFilesLocked(files []*descriptorpb.FileDescriptorProto) error { for _, file := range files { if _, ok := r.downloadedProtos[file.GetName()]; ok { continue // already downloaded, don't bother overwriting @@ -342,7 +395,7 @@ func (r *reflectionResolver) cacheFilesLocked(files []*descriptorpb.FileDescript return nil } -func (r *reflectionResolver) cacheFileLocked(name string, seen []string) error { +func (r *ReflectionResolver) cacheFileLocked(name string, seen []string) error { if _, err := r.cachedFiles.FindFileByPath(name); err == nil { return nil // already processed this file } @@ -393,7 +446,7 @@ func (r *reflectionResolver) cacheFileLocked(name string, seen []string) error { return nil } -func (r *reflectionResolver) sendLocked(req *reflectionv1.ServerReflectionRequest) (*reflectionv1.ServerReflectionResponse, error) { +func (r *ReflectionResolver) sendLocked(req *reflectionv1.ServerReflectionRequest) (*reflectionv1.ServerReflectionResponse, error) { stream, isNew := r.getStreamLocked() resp, err := send(stream, req) if isNotImplemented(err) && !r.useV1Alpha && r.v1alphaClient != nil { @@ -428,7 +481,7 @@ func send(stream *reflectStream, req *reflectionv1.ServerReflectionRequest) (*re return resp, recvErr } -func (r *reflectionResolver) getStreamLocked() (*reflectStream, bool) { +func (r *ReflectionResolver) getStreamLocked() (*reflectStream, bool) { if r.useV1Alpha { isNew := r.maybeCreateStreamLocked(r.v1alphaClient, &r.v1alphaStream) return r.v1alphaStream, isNew @@ -437,7 +490,7 @@ func (r *reflectionResolver) getStreamLocked() (*reflectStream, bool) { return r.v1Stream, isNew } -func (r *reflectionResolver) maybeCreateStreamLocked(client *reflectClient, stream **reflectStream) bool { +func (r *ReflectionResolver) maybeCreateStreamLocked(client *reflectClient, stream **reflectStream) bool { if *stream != nil { return false // already created } @@ -448,13 +501,13 @@ func (r *reflectionResolver) maybeCreateStreamLocked(client *reflectClient, stre return true } -func (r *reflectionResolver) Reset() { +func (r *ReflectionResolver) Reset() { r.mu.Lock() defer r.mu.Unlock() r.resetLocked() } -func (r *reflectionResolver) resetLocked() { +func (r *ReflectionResolver) resetLocked() { if r.v1Stream != nil { reset(r.v1Stream) r.v1Stream = nil diff --git a/pkg/grpc/bufcurl/reflectionv1/reflection.pb.go b/pkg/grpc/bufcurl/reflectionv1/reflection.pb.go deleted file mode 100644 index 15a7d48..0000000 --- a/pkg/grpc/bufcurl/reflectionv1/reflection.pb.go +++ /dev/null @@ -1,961 +0,0 @@ -// Copyright 2020-2023 Buf Technologies, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -// Service exported by server reflection. A more complete description of how -// server reflection works can be found at -// https://github.com/grpc/grpc/blob/master/doc/server-reflection.md -// -// The canonical version of this proto can be found at -// https://github.com/grpc/grpc-proto/blob/master/grpc/reflection/v1/reflection.proto - -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.30.0 -// protoc (unknown) -// source: grpc/reflection/v1/reflection.proto - -package reflectionv1 - -import ( - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - reflect "reflect" - sync "sync" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -// The message sent by the client when calling ServerReflectionInfo method. -type ServerReflectionRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Host string `protobuf:"bytes,1,opt,name=host,proto3" json:"host,omitempty"` - // To use reflection service, the client should set one of the following - // fields in message_request. The server distinguishes requests by their - // defined field and then handles them using corresponding methods. - // - // Types that are assignable to MessageRequest: - // - // *ServerReflectionRequest_FileByFilename - // *ServerReflectionRequest_FileContainingSymbol - // *ServerReflectionRequest_FileContainingExtension - // *ServerReflectionRequest_AllExtensionNumbersOfType - // *ServerReflectionRequest_ListServices - MessageRequest isServerReflectionRequest_MessageRequest `protobuf_oneof:"message_request"` -} - -func (x *ServerReflectionRequest) Reset() { - *x = ServerReflectionRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_reflection_v1_reflection_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ServerReflectionRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ServerReflectionRequest) ProtoMessage() {} - -func (x *ServerReflectionRequest) ProtoReflect() protoreflect.Message { - mi := &file_grpc_reflection_v1_reflection_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ServerReflectionRequest.ProtoReflect.Descriptor instead. -func (*ServerReflectionRequest) Descriptor() ([]byte, []int) { - return file_grpc_reflection_v1_reflection_proto_rawDescGZIP(), []int{0} -} - -func (x *ServerReflectionRequest) GetHost() string { - if x != nil { - return x.Host - } - return "" -} - -func (m *ServerReflectionRequest) GetMessageRequest() isServerReflectionRequest_MessageRequest { - if m != nil { - return m.MessageRequest - } - return nil -} - -func (x *ServerReflectionRequest) GetFileByFilename() string { - if x, ok := x.GetMessageRequest().(*ServerReflectionRequest_FileByFilename); ok { - return x.FileByFilename - } - return "" -} - -func (x *ServerReflectionRequest) GetFileContainingSymbol() string { - if x, ok := x.GetMessageRequest().(*ServerReflectionRequest_FileContainingSymbol); ok { - return x.FileContainingSymbol - } - return "" -} - -func (x *ServerReflectionRequest) GetFileContainingExtension() *ExtensionRequest { - if x, ok := x.GetMessageRequest().(*ServerReflectionRequest_FileContainingExtension); ok { - return x.FileContainingExtension - } - return nil -} - -func (x *ServerReflectionRequest) GetAllExtensionNumbersOfType() string { - if x, ok := x.GetMessageRequest().(*ServerReflectionRequest_AllExtensionNumbersOfType); ok { - return x.AllExtensionNumbersOfType - } - return "" -} - -func (x *ServerReflectionRequest) GetListServices() string { - if x, ok := x.GetMessageRequest().(*ServerReflectionRequest_ListServices); ok { - return x.ListServices - } - return "" -} - -type isServerReflectionRequest_MessageRequest interface { - isServerReflectionRequest_MessageRequest() -} - -type ServerReflectionRequest_FileByFilename struct { - // Find a proto file by the file name. - FileByFilename string `protobuf:"bytes,3,opt,name=file_by_filename,json=fileByFilename,proto3,oneof"` -} - -type ServerReflectionRequest_FileContainingSymbol struct { - // Find the proto file that declares the given fully-qualified symbol name. - // This field should be a fully-qualified symbol name - // (e.g. .[.] or .). - FileContainingSymbol string `protobuf:"bytes,4,opt,name=file_containing_symbol,json=fileContainingSymbol,proto3,oneof"` -} - -type ServerReflectionRequest_FileContainingExtension struct { - // Find the proto file which defines an extension extending the given - // message type with the given field number. - FileContainingExtension *ExtensionRequest `protobuf:"bytes,5,opt,name=file_containing_extension,json=fileContainingExtension,proto3,oneof"` -} - -type ServerReflectionRequest_AllExtensionNumbersOfType struct { - // Finds the tag numbers used by all known extensions of the given message - // type, and appends them to ExtensionNumberResponse in an undefined order. - // Its corresponding method is best-effort: it's not guaranteed that the - // reflection service will implement this method, and it's not guaranteed - // that this method will provide all extensions. Returns - // StatusCode::UNIMPLEMENTED if it's not implemented. - // This field should be a fully-qualified type name. The format is - // . - AllExtensionNumbersOfType string `protobuf:"bytes,6,opt,name=all_extension_numbers_of_type,json=allExtensionNumbersOfType,proto3,oneof"` -} - -type ServerReflectionRequest_ListServices struct { - // List the full names of registered services. The content will not be - // checked. - ListServices string `protobuf:"bytes,7,opt,name=list_services,json=listServices,proto3,oneof"` -} - -func (*ServerReflectionRequest_FileByFilename) isServerReflectionRequest_MessageRequest() {} - -func (*ServerReflectionRequest_FileContainingSymbol) isServerReflectionRequest_MessageRequest() {} - -func (*ServerReflectionRequest_FileContainingExtension) isServerReflectionRequest_MessageRequest() {} - -func (*ServerReflectionRequest_AllExtensionNumbersOfType) isServerReflectionRequest_MessageRequest() { -} - -func (*ServerReflectionRequest_ListServices) isServerReflectionRequest_MessageRequest() {} - -// The type name and extension number sent by the client when requesting -// file_containing_extension. -type ExtensionRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Fully-qualified type name. The format should be . - ContainingType string `protobuf:"bytes,1,opt,name=containing_type,json=containingType,proto3" json:"containing_type,omitempty"` - ExtensionNumber int32 `protobuf:"varint,2,opt,name=extension_number,json=extensionNumber,proto3" json:"extension_number,omitempty"` -} - -func (x *ExtensionRequest) Reset() { - *x = ExtensionRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_reflection_v1_reflection_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ExtensionRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ExtensionRequest) ProtoMessage() {} - -func (x *ExtensionRequest) ProtoReflect() protoreflect.Message { - mi := &file_grpc_reflection_v1_reflection_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ExtensionRequest.ProtoReflect.Descriptor instead. -func (*ExtensionRequest) Descriptor() ([]byte, []int) { - return file_grpc_reflection_v1_reflection_proto_rawDescGZIP(), []int{1} -} - -func (x *ExtensionRequest) GetContainingType() string { - if x != nil { - return x.ContainingType - } - return "" -} - -func (x *ExtensionRequest) GetExtensionNumber() int32 { - if x != nil { - return x.ExtensionNumber - } - return 0 -} - -// The message sent by the server to answer ServerReflectionInfo method. -type ServerReflectionResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - ValidHost string `protobuf:"bytes,1,opt,name=valid_host,json=validHost,proto3" json:"valid_host,omitempty"` - OriginalRequest *ServerReflectionRequest `protobuf:"bytes,2,opt,name=original_request,json=originalRequest,proto3" json:"original_request,omitempty"` - // The server sets one of the following fields according to the message_request - // in the request. - // - // Types that are assignable to MessageResponse: - // - // *ServerReflectionResponse_FileDescriptorResponse - // *ServerReflectionResponse_AllExtensionNumbersResponse - // *ServerReflectionResponse_ListServicesResponse - // *ServerReflectionResponse_ErrorResponse - MessageResponse isServerReflectionResponse_MessageResponse `protobuf_oneof:"message_response"` -} - -func (x *ServerReflectionResponse) Reset() { - *x = ServerReflectionResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_reflection_v1_reflection_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ServerReflectionResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ServerReflectionResponse) ProtoMessage() {} - -func (x *ServerReflectionResponse) ProtoReflect() protoreflect.Message { - mi := &file_grpc_reflection_v1_reflection_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ServerReflectionResponse.ProtoReflect.Descriptor instead. -func (*ServerReflectionResponse) Descriptor() ([]byte, []int) { - return file_grpc_reflection_v1_reflection_proto_rawDescGZIP(), []int{2} -} - -func (x *ServerReflectionResponse) GetValidHost() string { - if x != nil { - return x.ValidHost - } - return "" -} - -func (x *ServerReflectionResponse) GetOriginalRequest() *ServerReflectionRequest { - if x != nil { - return x.OriginalRequest - } - return nil -} - -func (m *ServerReflectionResponse) GetMessageResponse() isServerReflectionResponse_MessageResponse { - if m != nil { - return m.MessageResponse - } - return nil -} - -func (x *ServerReflectionResponse) GetFileDescriptorResponse() *FileDescriptorResponse { - if x, ok := x.GetMessageResponse().(*ServerReflectionResponse_FileDescriptorResponse); ok { - return x.FileDescriptorResponse - } - return nil -} - -func (x *ServerReflectionResponse) GetAllExtensionNumbersResponse() *ExtensionNumberResponse { - if x, ok := x.GetMessageResponse().(*ServerReflectionResponse_AllExtensionNumbersResponse); ok { - return x.AllExtensionNumbersResponse - } - return nil -} - -func (x *ServerReflectionResponse) GetListServicesResponse() *ListServiceResponse { - if x, ok := x.GetMessageResponse().(*ServerReflectionResponse_ListServicesResponse); ok { - return x.ListServicesResponse - } - return nil -} - -func (x *ServerReflectionResponse) GetErrorResponse() *ErrorResponse { - if x, ok := x.GetMessageResponse().(*ServerReflectionResponse_ErrorResponse); ok { - return x.ErrorResponse - } - return nil -} - -type isServerReflectionResponse_MessageResponse interface { - isServerReflectionResponse_MessageResponse() -} - -type ServerReflectionResponse_FileDescriptorResponse struct { - // This message is used to answer file_by_filename, file_containing_symbol, - // file_containing_extension requests with transitive dependencies. - // As the repeated label is not allowed in oneof fields, we use a - // FileDescriptorResponse message to encapsulate the repeated fields. - // The reflection service is allowed to avoid sending FileDescriptorProtos - // that were previously sent in response to earlier requests in the stream. - FileDescriptorResponse *FileDescriptorResponse `protobuf:"bytes,4,opt,name=file_descriptor_response,json=fileDescriptorResponse,proto3,oneof"` -} - -type ServerReflectionResponse_AllExtensionNumbersResponse struct { - // This message is used to answer all_extension_numbers_of_type requests. - AllExtensionNumbersResponse *ExtensionNumberResponse `protobuf:"bytes,5,opt,name=all_extension_numbers_response,json=allExtensionNumbersResponse,proto3,oneof"` -} - -type ServerReflectionResponse_ListServicesResponse struct { - // This message is used to answer list_services requests. - ListServicesResponse *ListServiceResponse `protobuf:"bytes,6,opt,name=list_services_response,json=listServicesResponse,proto3,oneof"` -} - -type ServerReflectionResponse_ErrorResponse struct { - // This message is used when an error occurs. - ErrorResponse *ErrorResponse `protobuf:"bytes,7,opt,name=error_response,json=errorResponse,proto3,oneof"` -} - -func (*ServerReflectionResponse_FileDescriptorResponse) isServerReflectionResponse_MessageResponse() { -} - -func (*ServerReflectionResponse_AllExtensionNumbersResponse) isServerReflectionResponse_MessageResponse() { -} - -func (*ServerReflectionResponse_ListServicesResponse) isServerReflectionResponse_MessageResponse() {} - -func (*ServerReflectionResponse_ErrorResponse) isServerReflectionResponse_MessageResponse() {} - -// Serialized FileDescriptorProto messages sent by the server answering -// a file_by_filename, file_containing_symbol, or file_containing_extension -// request. -type FileDescriptorResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Serialized FileDescriptorProto messages. We avoid taking a dependency on - // descriptor.proto, which uses proto2 only features, by making them opaque - // bytes instead. - FileDescriptorProto [][]byte `protobuf:"bytes,1,rep,name=file_descriptor_proto,json=fileDescriptorProto,proto3" json:"file_descriptor_proto,omitempty"` -} - -func (x *FileDescriptorResponse) Reset() { - *x = FileDescriptorResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_reflection_v1_reflection_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *FileDescriptorResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*FileDescriptorResponse) ProtoMessage() {} - -func (x *FileDescriptorResponse) ProtoReflect() protoreflect.Message { - mi := &file_grpc_reflection_v1_reflection_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use FileDescriptorResponse.ProtoReflect.Descriptor instead. -func (*FileDescriptorResponse) Descriptor() ([]byte, []int) { - return file_grpc_reflection_v1_reflection_proto_rawDescGZIP(), []int{3} -} - -func (x *FileDescriptorResponse) GetFileDescriptorProto() [][]byte { - if x != nil { - return x.FileDescriptorProto - } - return nil -} - -// A list of extension numbers sent by the server answering -// all_extension_numbers_of_type request. -type ExtensionNumberResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Full name of the base type, including the package name. The format - // is . - BaseTypeName string `protobuf:"bytes,1,opt,name=base_type_name,json=baseTypeName,proto3" json:"base_type_name,omitempty"` - ExtensionNumber []int32 `protobuf:"varint,2,rep,packed,name=extension_number,json=extensionNumber,proto3" json:"extension_number,omitempty"` -} - -func (x *ExtensionNumberResponse) Reset() { - *x = ExtensionNumberResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_reflection_v1_reflection_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ExtensionNumberResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ExtensionNumberResponse) ProtoMessage() {} - -func (x *ExtensionNumberResponse) ProtoReflect() protoreflect.Message { - mi := &file_grpc_reflection_v1_reflection_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ExtensionNumberResponse.ProtoReflect.Descriptor instead. -func (*ExtensionNumberResponse) Descriptor() ([]byte, []int) { - return file_grpc_reflection_v1_reflection_proto_rawDescGZIP(), []int{4} -} - -func (x *ExtensionNumberResponse) GetBaseTypeName() string { - if x != nil { - return x.BaseTypeName - } - return "" -} - -func (x *ExtensionNumberResponse) GetExtensionNumber() []int32 { - if x != nil { - return x.ExtensionNumber - } - return nil -} - -// A list of ServiceResponse sent by the server answering list_services request. -type ListServiceResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The information of each service may be expanded in the future, so we use - // ServiceResponse message to encapsulate it. - Service []*ServiceResponse `protobuf:"bytes,1,rep,name=service,proto3" json:"service,omitempty"` -} - -func (x *ListServiceResponse) Reset() { - *x = ListServiceResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_reflection_v1_reflection_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ListServiceResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ListServiceResponse) ProtoMessage() {} - -func (x *ListServiceResponse) ProtoReflect() protoreflect.Message { - mi := &file_grpc_reflection_v1_reflection_proto_msgTypes[5] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ListServiceResponse.ProtoReflect.Descriptor instead. -func (*ListServiceResponse) Descriptor() ([]byte, []int) { - return file_grpc_reflection_v1_reflection_proto_rawDescGZIP(), []int{5} -} - -func (x *ListServiceResponse) GetService() []*ServiceResponse { - if x != nil { - return x.Service - } - return nil -} - -// The information of a single service used by ListServiceResponse to answer -// list_services request. -type ServiceResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Full name of a registered service, including its package name. The format - // is . - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` -} - -func (x *ServiceResponse) Reset() { - *x = ServiceResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_reflection_v1_reflection_proto_msgTypes[6] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ServiceResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ServiceResponse) ProtoMessage() {} - -func (x *ServiceResponse) ProtoReflect() protoreflect.Message { - mi := &file_grpc_reflection_v1_reflection_proto_msgTypes[6] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ServiceResponse.ProtoReflect.Descriptor instead. -func (*ServiceResponse) Descriptor() ([]byte, []int) { - return file_grpc_reflection_v1_reflection_proto_rawDescGZIP(), []int{6} -} - -func (x *ServiceResponse) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -// The error code and error message sent by the server when an error occurs. -type ErrorResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // This field uses the error codes defined in grpc::StatusCode. - ErrorCode int32 `protobuf:"varint,1,opt,name=error_code,json=errorCode,proto3" json:"error_code,omitempty"` - ErrorMessage string `protobuf:"bytes,2,opt,name=error_message,json=errorMessage,proto3" json:"error_message,omitempty"` -} - -func (x *ErrorResponse) Reset() { - *x = ErrorResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_reflection_v1_reflection_proto_msgTypes[7] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ErrorResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ErrorResponse) ProtoMessage() {} - -func (x *ErrorResponse) ProtoReflect() protoreflect.Message { - mi := &file_grpc_reflection_v1_reflection_proto_msgTypes[7] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ErrorResponse.ProtoReflect.Descriptor instead. -func (*ErrorResponse) Descriptor() ([]byte, []int) { - return file_grpc_reflection_v1_reflection_proto_rawDescGZIP(), []int{7} -} - -func (x *ErrorResponse) GetErrorCode() int32 { - if x != nil { - return x.ErrorCode - } - return 0 -} - -func (x *ErrorResponse) GetErrorMessage() string { - if x != nil { - return x.ErrorMessage - } - return "" -} - -var File_grpc_reflection_v1_reflection_proto protoreflect.FileDescriptor - -var file_grpc_reflection_v1_reflection_proto_rawDesc = []byte{ - 0x0a, 0x23, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x72, 0x65, 0x66, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x66, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x12, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x72, 0x65, 0x66, 0x6c, - 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x22, 0xf3, 0x02, 0x0a, 0x17, 0x53, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x52, 0x65, 0x66, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x6f, 0x73, 0x74, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x68, 0x6f, 0x73, 0x74, 0x12, 0x2a, 0x0a, 0x10, 0x66, 0x69, 0x6c, - 0x65, 0x5f, 0x62, 0x79, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0e, 0x66, 0x69, 0x6c, 0x65, 0x42, 0x79, 0x46, 0x69, 0x6c, - 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x36, 0x0a, 0x16, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x63, 0x6f, - 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x14, 0x66, 0x69, 0x6c, 0x65, 0x43, 0x6f, 0x6e, - 0x74, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x12, 0x62, 0x0a, - 0x19, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, - 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x24, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x72, 0x65, 0x66, 0x6c, 0x65, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x17, 0x66, 0x69, 0x6c, 0x65, 0x43, 0x6f, - 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, - 0x6e, 0x12, 0x42, 0x0a, 0x1d, 0x61, 0x6c, 0x6c, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, - 0x6f, 0x6e, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x5f, 0x6f, 0x66, 0x5f, 0x74, 0x79, - 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x19, 0x61, 0x6c, 0x6c, 0x45, - 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x4f, - 0x66, 0x54, 0x79, 0x70, 0x65, 0x12, 0x25, 0x0a, 0x0d, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x73, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0c, - 0x6c, 0x69, 0x73, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x42, 0x11, 0x0a, 0x0f, - 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, - 0x66, 0x0a, 0x10, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x27, 0x0a, 0x0f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x69, 0x6e, - 0x67, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x6f, - 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x54, 0x79, 0x70, 0x65, 0x12, 0x29, 0x0a, 0x10, - 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, - 0x6e, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x22, 0xae, 0x04, 0x0a, 0x18, 0x53, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x52, 0x65, 0x66, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x5f, 0x68, 0x6f, - 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x48, - 0x6f, 0x73, 0x74, 0x12, 0x56, 0x0a, 0x10, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x6c, 0x5f, - 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, - 0x67, 0x72, 0x70, 0x63, 0x2e, 0x72, 0x65, 0x66, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, - 0x76, 0x31, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x52, 0x65, 0x66, 0x6c, 0x65, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x0f, 0x6f, 0x72, 0x69, 0x67, - 0x69, 0x6e, 0x61, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x66, 0x0a, 0x18, 0x66, - 0x69, 0x6c, 0x65, 0x5f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x5f, 0x72, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, - 0x67, 0x72, 0x70, 0x63, 0x2e, 0x72, 0x65, 0x66, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, - 0x76, 0x31, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, - 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x16, 0x66, 0x69, 0x6c, - 0x65, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x72, 0x0a, 0x1e, 0x61, 0x6c, 0x6c, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, - 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x5f, 0x72, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x67, 0x72, - 0x70, 0x63, 0x2e, 0x72, 0x65, 0x66, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, - 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x1b, 0x61, 0x6c, 0x6c, 0x45, - 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5f, 0x0a, 0x16, 0x6c, 0x69, 0x73, 0x74, 0x5f, - 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x72, - 0x65, 0x66, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, - 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x48, 0x00, 0x52, 0x14, 0x6c, 0x69, 0x73, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4a, 0x0a, 0x0e, 0x65, 0x72, 0x72, 0x6f, - 0x72, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x21, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x72, 0x65, 0x66, 0x6c, 0x65, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x0d, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x12, 0x0a, 0x10, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, - 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4c, 0x0a, 0x16, 0x46, 0x69, 0x6c, 0x65, - 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x32, 0x0a, 0x15, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x64, 0x65, 0x73, 0x63, 0x72, - 0x69, 0x70, 0x74, 0x6f, 0x72, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x0c, 0x52, 0x13, 0x66, 0x69, 0x6c, 0x65, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, - 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x6a, 0x0a, 0x17, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, - 0x69, 0x6f, 0x6e, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x24, 0x0a, 0x0e, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x62, 0x61, 0x73, 0x65, 0x54, - 0x79, 0x70, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x29, 0x0a, 0x10, 0x65, 0x78, 0x74, 0x65, 0x6e, - 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x02, 0x20, 0x03, 0x28, - 0x05, 0x52, 0x0f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x4e, 0x75, 0x6d, 0x62, - 0x65, 0x72, 0x22, 0x54, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3d, 0x0a, 0x07, 0x73, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x67, 0x72, 0x70, - 0x63, 0x2e, 0x72, 0x65, 0x66, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, - 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, - 0x07, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x22, 0x25, 0x0a, 0x0f, 0x53, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, - 0x53, 0x0a, 0x0d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x1d, 0x0a, 0x0a, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x12, - 0x23, 0x0a, 0x0d, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x32, 0x89, 0x01, 0x0a, 0x10, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x52, - 0x65, 0x66, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x75, 0x0a, 0x14, 0x53, 0x65, 0x72, - 0x76, 0x65, 0x72, 0x52, 0x65, 0x66, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, - 0x6f, 0x12, 0x2b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x72, 0x65, 0x66, 0x6c, 0x65, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x52, 0x65, 0x66, - 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, - 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x72, 0x65, 0x66, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x52, 0x65, 0x66, 0x6c, 0x65, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x28, 0x01, 0x30, 0x01, - 0x42, 0xe1, 0x01, 0x0a, 0x16, 0x63, 0x6f, 0x6d, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x72, 0x65, - 0x66, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x42, 0x0f, 0x52, 0x65, 0x66, - 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x4c, - 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x62, 0x75, 0x66, 0x62, 0x75, - 0x69, 0x6c, 0x64, 0x2f, 0x62, 0x75, 0x66, 0x2f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2f, - 0x67, 0x65, 0x6e, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x2f, 0x67, 0x72, 0x70, - 0x63, 0x2f, 0x72, 0x65, 0x66, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76, 0x31, 0x3b, - 0x72, 0x65, 0x66, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x47, - 0x52, 0x58, 0xaa, 0x02, 0x12, 0x47, 0x72, 0x70, 0x63, 0x2e, 0x52, 0x65, 0x66, 0x6c, 0x65, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x12, 0x47, 0x72, 0x70, 0x63, 0x5c, 0x52, - 0x65, 0x66, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x1e, 0x47, - 0x72, 0x70, 0x63, 0x5c, 0x52, 0x65, 0x66, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5c, 0x56, - 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x14, - 0x47, 0x72, 0x70, 0x63, 0x3a, 0x3a, 0x52, 0x65, 0x66, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} - -var ( - file_grpc_reflection_v1_reflection_proto_rawDescOnce sync.Once - file_grpc_reflection_v1_reflection_proto_rawDescData = file_grpc_reflection_v1_reflection_proto_rawDesc -) - -func file_grpc_reflection_v1_reflection_proto_rawDescGZIP() []byte { - file_grpc_reflection_v1_reflection_proto_rawDescOnce.Do(func() { - file_grpc_reflection_v1_reflection_proto_rawDescData = protoimpl.X.CompressGZIP(file_grpc_reflection_v1_reflection_proto_rawDescData) - }) - return file_grpc_reflection_v1_reflection_proto_rawDescData -} - -var file_grpc_reflection_v1_reflection_proto_msgTypes = make([]protoimpl.MessageInfo, 8) -var file_grpc_reflection_v1_reflection_proto_goTypes = []interface{}{ - (*ServerReflectionRequest)(nil), // 0: grpc.reflection.v1.ServerReflectionRequest - (*ExtensionRequest)(nil), // 1: grpc.reflection.v1.ExtensionRequest - (*ServerReflectionResponse)(nil), // 2: grpc.reflection.v1.ServerReflectionResponse - (*FileDescriptorResponse)(nil), // 3: grpc.reflection.v1.FileDescriptorResponse - (*ExtensionNumberResponse)(nil), // 4: grpc.reflection.v1.ExtensionNumberResponse - (*ListServiceResponse)(nil), // 5: grpc.reflection.v1.ListServiceResponse - (*ServiceResponse)(nil), // 6: grpc.reflection.v1.ServiceResponse - (*ErrorResponse)(nil), // 7: grpc.reflection.v1.ErrorResponse -} -var file_grpc_reflection_v1_reflection_proto_depIdxs = []int32{ - 1, // 0: grpc.reflection.v1.ServerReflectionRequest.file_containing_extension:type_name -> grpc.reflection.v1.ExtensionRequest - 0, // 1: grpc.reflection.v1.ServerReflectionResponse.original_request:type_name -> grpc.reflection.v1.ServerReflectionRequest - 3, // 2: grpc.reflection.v1.ServerReflectionResponse.file_descriptor_response:type_name -> grpc.reflection.v1.FileDescriptorResponse - 4, // 3: grpc.reflection.v1.ServerReflectionResponse.all_extension_numbers_response:type_name -> grpc.reflection.v1.ExtensionNumberResponse - 5, // 4: grpc.reflection.v1.ServerReflectionResponse.list_services_response:type_name -> grpc.reflection.v1.ListServiceResponse - 7, // 5: grpc.reflection.v1.ServerReflectionResponse.error_response:type_name -> grpc.reflection.v1.ErrorResponse - 6, // 6: grpc.reflection.v1.ListServiceResponse.service:type_name -> grpc.reflection.v1.ServiceResponse - 0, // 7: grpc.reflection.v1.ServerReflection.ServerReflectionInfo:input_type -> grpc.reflection.v1.ServerReflectionRequest - 2, // 8: grpc.reflection.v1.ServerReflection.ServerReflectionInfo:output_type -> grpc.reflection.v1.ServerReflectionResponse - 8, // [8:9] is the sub-list for method output_type - 7, // [7:8] is the sub-list for method input_type - 7, // [7:7] is the sub-list for extension type_name - 7, // [7:7] is the sub-list for extension extendee - 0, // [0:7] is the sub-list for field type_name -} - -func init() { file_grpc_reflection_v1_reflection_proto_init() } -func file_grpc_reflection_v1_reflection_proto_init() { - if File_grpc_reflection_v1_reflection_proto != nil { - return - } - if !protoimpl.UnsafeEnabled { - file_grpc_reflection_v1_reflection_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ServerReflectionRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_reflection_v1_reflection_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ExtensionRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_reflection_v1_reflection_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ServerReflectionResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_reflection_v1_reflection_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*FileDescriptorResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_reflection_v1_reflection_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ExtensionNumberResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_reflection_v1_reflection_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListServiceResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_reflection_v1_reflection_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ServiceResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_reflection_v1_reflection_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ErrorResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - file_grpc_reflection_v1_reflection_proto_msgTypes[0].OneofWrappers = []interface{}{ - (*ServerReflectionRequest_FileByFilename)(nil), - (*ServerReflectionRequest_FileContainingSymbol)(nil), - (*ServerReflectionRequest_FileContainingExtension)(nil), - (*ServerReflectionRequest_AllExtensionNumbersOfType)(nil), - (*ServerReflectionRequest_ListServices)(nil), - } - file_grpc_reflection_v1_reflection_proto_msgTypes[2].OneofWrappers = []interface{}{ - (*ServerReflectionResponse_FileDescriptorResponse)(nil), - (*ServerReflectionResponse_AllExtensionNumbersResponse)(nil), - (*ServerReflectionResponse_ListServicesResponse)(nil), - (*ServerReflectionResponse_ErrorResponse)(nil), - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_grpc_reflection_v1_reflection_proto_rawDesc, - NumEnums: 0, - NumMessages: 8, - NumExtensions: 0, - NumServices: 1, - }, - GoTypes: file_grpc_reflection_v1_reflection_proto_goTypes, - DependencyIndexes: file_grpc_reflection_v1_reflection_proto_depIdxs, - MessageInfos: file_grpc_reflection_v1_reflection_proto_msgTypes, - }.Build() - File_grpc_reflection_v1_reflection_proto = out.File - file_grpc_reflection_v1_reflection_proto_rawDesc = nil - file_grpc_reflection_v1_reflection_proto_goTypes = nil - file_grpc_reflection_v1_reflection_proto_depIdxs = nil -} diff --git a/pkg/grpc/manager/manager.go b/pkg/grpc/manager/manager.go index c2061c6..e59b97f 100644 --- a/pkg/grpc/manager/manager.go +++ b/pkg/grpc/manager/manager.go @@ -6,7 +6,6 @@ import ( "github.com/bufbuild/connect-go" "github.com/pkg/errors" "github.com/protoflow-labs/protoflow/pkg/grpc/bufcurl" - "github.com/protoflow-labs/protoflow/pkg/grpc/bufcurl/protoencoding" "github.com/protoflow-labs/protoflow/pkg/grpc/bufcurl/reflect" "github.com/protoflow-labs/protoflow/pkg/util/rx" "github.com/reactivex/rxgo/v2" @@ -23,7 +22,7 @@ type ReflectionManager struct { Protocol string Headers []string - resolver protoencoding.Resolver + resolver *bufcurl.ReflectionResolver requestHeaders http.Header httpClient connect.HTTPClient reflectOps ReflectionOptions @@ -107,7 +106,11 @@ func (s *ReflectionManager) ExecuteMethod( return invoker.Invoke(ctx, input, s.requestHeaders) } -func (s *ReflectionManager) ResolveMethod(service, methodName string) (protoreflect.MethodDescriptor, error) { +func (s *ReflectionManager) ResolveServices() ([]protoreflect.ServiceDescriptor, error) { + return s.resolver.GetServices() +} + +func (s *ReflectionManager) ResolveService(service string) (protoreflect.ServiceDescriptor, error) { descriptor, err := s.resolver.FindDescriptorByName(protoreflect.FullName(service)) if err == protoregistry.NotFound { return nil, errors.Wrapf(err, "failed to find service in schema") @@ -118,7 +121,14 @@ func (s *ReflectionManager) ResolveMethod(service, methodName string) (protorefl if !ok { return nil, errors.Wrapf(err, "failed to find methodName") } + return serviceDescriptor, nil +} +func (s *ReflectionManager) ResolveMethod(service, methodName string) (protoreflect.MethodDescriptor, error) { + serviceDescriptor, err := s.ResolveService(service) + if err != nil { + return nil, err + } methodDescriptor := serviceDescriptor.Methods().ByName(protoreflect.Name(methodName)) if methodDescriptor == nil { diff --git a/pkg/grpc/methods.go b/pkg/grpc/methods.go index 31cbe6c..ddb5522 100644 --- a/pkg/grpc/methods.go +++ b/pkg/grpc/methods.go @@ -46,7 +46,7 @@ func AllMethodsForServer(svr *grpc.Server) ([]*desc.MethodDescriptor, error) { // reflection.) // This automatically skips the reflection service, since it is assumed this is not // a desired inclusion. -func allMethodsViaReflection(ctx context.Context, cc grpc.ClientConnInterface) ([]*desc.MethodDescriptor, error) { +func allMethodsViaReflection(ctx context.Context, cc grpc.ClientConnInterface) ([]*desc.ServiceDescriptor, error) { stub := rpb.NewServerReflectionClient(cc) cli := grpcreflect.NewClientV1Alpha(ctx, stub) svcNames, err := cli.ListServices() @@ -64,7 +64,7 @@ func allMethodsViaReflection(ctx context.Context, cc grpc.ClientConnInterface) ( } descs = append(descs, sd) } - return AllMethodsForServices(descs), nil + return descs, nil } // AllMethodsViaInProcess returns a slice that contains the method descriptors diff --git a/pkg/grpc/parse.go b/pkg/grpc/parse.go index 19da641..f41792f 100644 --- a/pkg/grpc/parse.go +++ b/pkg/grpc/parse.go @@ -6,8 +6,10 @@ import ( "github.com/pkg/errors" "github.com/protoflow-labs/protoflow/proto" "io" + "io/fs" "os" "path" + "path/filepath" "strings" ) @@ -21,25 +23,11 @@ func FileContentsFromMap(files map[string]string) protoparse.FileAccessor { } } -func ParseProtoDir(dir string) ([]*desc.FileDescriptor, error) { - protoFiles, err := os.ReadDir(dir) +func ParseProtoDir(dir, protofile string) ([]*desc.FileDescriptor, error) { + protoMap, err := protoflowProtoMap(dir, os.ReadDir, os.ReadFile) if err != nil { return nil, errors.Wrapf(err, "error reading proto directory") } - protoMap, err := protoflowProtoMap() - if err != nil { - return nil, errors.Wrapf(err, "error reading proto directory") - } - - for _, protoFile := range protoFiles { - if strings.HasSuffix(protoFile.Name(), ".proto") { - content, err := os.ReadFile(path.Join(dir, protoFile.Name())) - if err != nil { - return nil, errors.Wrapf(err, "error reading file %s", protoFile.Name()) - } - protoMap[protoFile.Name()] = string(content) - } - } parser := protoparse.Parser{ ImportPaths: nil, InferImportPaths: false, @@ -53,25 +41,47 @@ func ParseProtoDir(dir string) ([]*desc.FileDescriptor, error) { ErrorReporter: nil, WarningReporter: nil, } - return parser.ParseFiles("nodejs.proto") + // TODO breadchris these files should be read from proto dir + return parser.ParseFiles(protofile) } -func protoflowProtoMap() (map[string]string, error) { +func protoflowProtoMap( + dir string, + readDir func(dir string) ([]fs.DirEntry, error), + readFile func(name string) ([]byte, error), +) (map[string]string, error) { protoMap := map[string]string{} - protoFiles, err := proto.Proto.ReadDir(".") - if err != nil { - return nil, errors.Wrapf(err, "error reading proto directory") - } - for _, protoFile := range protoFiles { - if strings.HasSuffix(protoFile.Name(), ".proto") { - content, err := proto.Proto.ReadFile(protoFile.Name()) - if err != nil { - return nil, errors.Wrapf(err, "error reading file %s", protoFile.Name()) + var processFiles func(string) error + processFiles = func(p string) error { + protoFiles, err := readDir(p) + if err != nil { + return errors.Wrapf(err, "error reading proto directory") + } + + for _, protoFile := range protoFiles { + fullPath := filepath.Join(p, protoFile.Name()) + + if protoFile.IsDir() { + if err := processFiles(p); err != nil { + return err + } + } else if strings.HasSuffix(protoFile.Name(), ".proto") { + content, err := readFile(fullPath) + if err != nil { + return errors.Wrapf(err, "error reading file %s", fullPath) + } + protoMap[fullPath] = string(content) } - protoMap[protoFile.Name()] = string(content) } + return nil } + + err := processFiles(dir) + if err != nil { + return nil, err + } + return protoMap, nil } @@ -83,7 +93,7 @@ func ParseProto(file string) ([]*desc.FileDescriptor, error) { // split filename from path _, filename := path.Split(file) - protoMap, err := protoflowProtoMap() + protoMap, err := protoflowProtoMap(".", proto.Proto.ReadDir, proto.Proto.ReadFile) if err != nil { return nil, errors.Wrapf(err, "error reading proto directory") } diff --git a/pkg/openai/config.go b/pkg/llm/config.go similarity index 92% rename from pkg/openai/config.go rename to pkg/llm/config.go index 1d9a75c..2fd2812 100644 --- a/pkg/openai/config.go +++ b/pkg/llm/config.go @@ -1,4 +1,4 @@ -package openai +package llm import ( "github.com/pkg/errors" @@ -25,7 +25,7 @@ func NewDefaultConfig() Config { func NewConfig(provider config.Provider) (Config, error) { var c Config - err := provider.Get("openai").Populate(&c) + err := provider.Get("llm").Populate(&c) if err != nil { return Config{}, err } diff --git a/pkg/llm/handler.go b/pkg/llm/handler.go new file mode 100644 index 0000000..f469bf3 --- /dev/null +++ b/pkg/llm/handler.go @@ -0,0 +1,123 @@ +package llm + +import ( + "context" + "fmt" + "github.com/reactivex/rxgo/v2" + "github.com/tmc/langchaingo/callbacks" + "github.com/tmc/langchaingo/llms" + "github.com/tmc/langchaingo/schema" + "log/slog" + "strings" +) + +// LogHandler is a callback handler that prints to the standard output. +type LogHandler struct { + events chan rxgo.Item +} + +var _ callbacks.Handler = &LogHandler{} + +type Option func(*LogHandler) + +func WithEvents(events chan rxgo.Item) Option { + return func(l *LogHandler) { + l.events = events + } +} + +func NewHandler(ops ...Option) *LogHandler { + l := &LogHandler{} + for _, op := range ops { + op(l) + } + return l +} + +func (l *LogHandler) sendEvent(event rxgo.Item) { + if l.events != nil { + l.events <- event + } +} + +func (l *LogHandler) HandleRetrieverEnd(ctx context.Context, query string, documents []schema.Document) { + l.sendEvent(rxgo.Of(fmt.Sprintf("Exiting retriever with documents: %s", documents))) + slog.Debug("retriever end", "documents", documents) +} + +func (l *LogHandler) HandleStreamingFunc(ctx context.Context, chunk []byte) { + l.sendEvent(rxgo.Of(fmt.Sprintf("Streaming function output: %s", chunk))) + slog.Debug("streaming func", "chunk", chunk) +} + +func (l *LogHandler) HandleText(_ context.Context, text string) { + l.sendEvent(rxgo.Of(text)) + slog.Debug("llm text", "text", text) +} + +func (l *LogHandler) HandleLLMStart(_ context.Context, prompts []string) { + l.sendEvent(rxgo.Of(fmt.Sprintf("Entering LLM with prompts: %s", prompts))) + slog.Debug("llm start", "prompts", prompts) +} + +func (l *LogHandler) HandleLLMEnd(_ context.Context, output llms.LLMResult) { + l.sendEvent(rxgo.Of(fmt.Sprintf("Exiting LLM with results: %s", formatLLMResult(output)))) + slog.Debug("llm end", "output", formatLLMResult(output)) +} + +func (l *LogHandler) HandleChainStart(_ context.Context, inputs map[string]any) { + l.sendEvent(rxgo.Of(fmt.Sprintf("Entering chain with inputs: %s", formatChainValues(inputs)))) + slog.Debug("chain start", "inputs", formatChainValues(inputs)) +} + +func (l *LogHandler) HandleChainEnd(_ context.Context, outputs map[string]any) { + l.sendEvent(rxgo.Of(fmt.Sprintf("Exiting chain with outputs: %s", formatChainValues(outputs)))) + slog.Debug("chain end", "outputs", formatChainValues(outputs)) +} + +func (l *LogHandler) HandleToolStart(_ context.Context, input string) { + l.sendEvent(rxgo.Of(fmt.Sprintf("Entering tool with input: %s", removeNewLines(input)))) + slog.Debug("tool start", "input", removeNewLines(input)) +} + +func (l *LogHandler) HandleToolEnd(_ context.Context, output string) { + l.sendEvent(rxgo.Of(fmt.Sprintf("Exiting tool with output: %s", removeNewLines(output)))) + slog.Debug("tool end", "output", removeNewLines(output)) +} + +func (l *LogHandler) HandleAgentAction(_ context.Context, action schema.AgentAction) { + l.sendEvent(rxgo.Of(fmt.Sprintf("Agent selected action: %s", formatAgentAction(action)))) + slog.Debug("agent action", "action", formatAgentAction(action)) +} + +func (l *LogHandler) HandleRetrieverStart(_ context.Context, query string) { + l.sendEvent(rxgo.Of(fmt.Sprintf("Entering retriever with query: %s", removeNewLines(query)))) + slog.Debug("retriever start", "query", removeNewLines(query)) +} + +func formatChainValues(values map[string]any) string { + output := "" + for key, value := range values { + output += fmt.Sprintf("\"%s\" : \"%s\", ", removeNewLines(key), removeNewLines(value)) + } + return output +} + +func formatLLMResult(output llms.LLMResult) string { + results := "[ " + for i := 0; i < len(output.Generations); i++ { + for j := 0; j < len(output.Generations[i]); j++ { + results += output.Generations[i][j].Text + } + } + + return results + " ]" +} + +func formatAgentAction(action schema.AgentAction) string { + return fmt.Sprintf("\"%s\" with input \"%s\"", removeNewLines(action.Tool), removeNewLines(action.ToolInput)) +} + +func removeNewLines(s any) string { + return strings.ReplaceAll(fmt.Sprint(s), "\n", " ") +} diff --git a/pkg/llm/openai.go b/pkg/llm/openai.go new file mode 100644 index 0000000..d18897e --- /dev/null +++ b/pkg/llm/openai.go @@ -0,0 +1,193 @@ +package llm + +import ( + "context" + "encoding/json" + "github.com/google/wire" + "github.com/pkg/errors" + "github.com/reactivex/rxgo/v2" + "github.com/samber/lo" + gopenai "github.com/sashabaranov/go-openai" + "github.com/tmc/langchaingo/chains" + "github.com/tmc/langchaingo/documentloaders" + "github.com/tmc/langchaingo/llms" + "github.com/tmc/langchaingo/llms/openai" + "github.com/tmc/langchaingo/schema" + "github.com/tmc/langchaingo/textsplitter" + "google.golang.org/protobuf/reflect/protoreflect" + "log/slog" + "regexp" + "strings" +) + +var ProviderSet = wire.NewSet( + NewConfig, + NewAgent, +) + +func NewAgent(c Config) (*Agent, error) { + return &Agent{ + config: c, + }, nil +} + +type Agent struct { + config Config +} + +func (c *Agent) GenerateImages(ctx context.Context, prompt string) ([]string, error) { + client := gopenai.NewClient(c.config.APIKey) + resp, err := client.CreateImage(ctx, gopenai.ImageRequest{ + Prompt: prompt, + }) + if err != nil { + return nil, err + } + return lo.Map(resp.Data, func(inner gopenai.ImageResponseDataInner, _ int) string { + return inner.URL + }), nil +} + +type FunctionCallJSON struct { + Schema string `json:"$schema"` + Ref string `json:"$ref"` + Definitions map[string]Definition `json:"definitions"` +} + +type Definition struct { + Properties json.RawMessage `json:"properties"` + AdditionalProperties bool `json:"additionalProperties"` + Type string `json:"type"` + Title string `json:"title"` +} + +func cleanText(text string) string { + // Trim spaces from start and end + text = strings.TrimSpace(text) + + // Replace multiple spaces with a single space + spaceRegex := regexp.MustCompile(`\s+`) + text = spaceRegex.ReplaceAllString(text, " ") + + // Remove non-ASCII characters + asciiOnlyRegex := regexp.MustCompile(`[^\x00-\x7F]+`) + text = asciiOnlyRegex.ReplaceAllString(text, "") + return text +} + +func (c *Agent) Prompt( + ctx context.Context, + prompt string, +) (string, error) { + // TODO breadchris set a max limit for prompt? + llm, err := openai.NewChat(openai.WithToken(c.config.APIKey), openai.WithModel("gpt-3.5-turbo-0613")) + if err != nil { + return "", err + } + + clean := cleanText(prompt) + slog.Debug("calling openai", "prompt", clean) + completion, err := llm.Generate(ctx, [][]schema.ChatMessage{ + { + schema.HumanChatMessage{Content: clean}, + }, + }) + if err != nil { + return "", err + } + slog.Debug("openai response", "completion", completion) + return completion[0].Text, nil +} + +func (c *Agent) PromptToProto( + ctx context.Context, + prompt string, + p protoreflect.ProtoMessage, + jsonSchemaDef []byte, +) error { + var funcCall FunctionCallJSON + err := json.Unmarshal(jsonSchemaDef, &funcCall) + if err != nil { + return err + } + + var funcs []llms.FunctionDefinition + for k, v := range funcCall.Definitions { + f := llms.FunctionDefinition{ + Name: k, + Description: v.Title, + Parameters: v, + } + funcs = append(funcs, f) + } + + slog.Info("calling openai", "prompt", cleanText(prompt), "json schema", funcs[0].Parameters) + call, err := c.Call(ctx, prompt, funcs) + if err != nil { + return err + } + + if call == nil { + return errors.New("no call was found") + } + slog.Info("openai response", "call", call) + err = json.Unmarshal([]byte(call.Arguments), p) + if err != nil { + return err + } + return nil +} + +func (c *Agent) Call( + ctx context.Context, + content string, + functions []llms.FunctionDefinition, +) (*schema.FunctionCall, error) { + llm, err := openai.NewChat(openai.WithToken(c.config.APIKey), openai.WithModel("gpt-3.5-turbo-0613")) + if err != nil { + return nil, err + } + + llm.CallbacksHandler = NewHandler() + + completion, err := llm.Call(ctx, []schema.ChatMessage{ + schema.HumanChatMessage{Content: content}, + }, llms.WithFunctions(functions)) + if err != nil { + return nil, err + } + slog.Info("openai response", "completion", completion) + return completion.FunctionCall, nil +} + +func (c *Agent) Ask( + prompt string, + content string, +) (rxgo.Observable, error) { + client, err := openai.New(openai.WithToken(c.config.APIKey), openai.WithModel("gpt-4")) + if err != nil { + return nil, err + } + + events := make(chan rxgo.Item) + client.CallbacksHandler = NewHandler(WithEvents(events)) + + go func() { + defer close(events) + + // TODO breadchris figure out how to cram more into context? + refineQAChain := chains.LoadRefineQA(client) + docs, err := documentloaders.NewText(strings.NewReader(content)).LoadAndSplit(context.Background(), + textsplitter.NewRecursiveCharacter(), + ) + answer, err := chains.Call(context.Background(), refineQAChain, map[string]any{ + "input_documents": docs, + "question": prompt, + }) + if err != nil { + return + } + events <- rxgo.Of(answer["text"]) + }() + return rxgo.FromChannel(events), nil +} diff --git a/pkg/llm/schemas/GenerateCode.json b/pkg/llm/schemas/GenerateCode.json new file mode 100644 index 0000000..1eb9569 --- /dev/null +++ b/pkg/llm/schemas/GenerateCode.json @@ -0,0 +1,17 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "$ref": "#/definitions/GenerateCode", + "definitions": { + "GenerateCode": { + "properties": { + "code": { + "type": "string", + "description": "Code that has been generated." + } + }, + "additionalProperties": true, + "type": "object", + "title": "Generate Code" + } + } +} \ No newline at end of file diff --git a/pkg/llm/schemas/GenerateImplementationRequest.json b/pkg/llm/schemas/GenerateImplementationRequest.json new file mode 100644 index 0000000..aec1d6a --- /dev/null +++ b/pkg/llm/schemas/GenerateImplementationRequest.json @@ -0,0 +1,19 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "$ref": "#/definitions/GenerateImplementationRequest", + "definitions": { + "GenerateImplementationRequest": { + "properties": { + "project_id": { + "type": "string" + }, + "node_id": { + "type": "string" + } + }, + "additionalProperties": true, + "type": "object", + "title": "Generate Implementation Request" + } + } +} \ No newline at end of file diff --git a/pkg/llm/schemas/GenerateImplementationResponse.json b/pkg/llm/schemas/GenerateImplementationResponse.json new file mode 100644 index 0000000..3f4a014 --- /dev/null +++ b/pkg/llm/schemas/GenerateImplementationResponse.json @@ -0,0 +1,11 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "$ref": "#/definitions/GenerateImplementationResponse", + "definitions": { + "GenerateImplementationResponse": { + "additionalProperties": true, + "type": "object", + "title": "Generate Implementation Response" + } + } +} \ No newline at end of file diff --git a/pkg/llm/schemas/GenerateRequest.json b/pkg/llm/schemas/GenerateRequest.json new file mode 100644 index 0000000..9198fe1 --- /dev/null +++ b/pkg/llm/schemas/GenerateRequest.json @@ -0,0 +1,16 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "$ref": "#/definitions/GenerateRequest", + "definitions": { + "GenerateRequest": { + "properties": { + "project_id": { + "type": "string" + } + }, + "additionalProperties": true, + "type": "object", + "title": "Generate Request" + } + } +} \ No newline at end of file diff --git a/pkg/llm/schemas/GenerateResponse.json b/pkg/llm/schemas/GenerateResponse.json new file mode 100644 index 0000000..8bfd86f --- /dev/null +++ b/pkg/llm/schemas/GenerateResponse.json @@ -0,0 +1,16 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "$ref": "#/definitions/GenerateResponse", + "definitions": { + "GenerateResponse": { + "properties": { + "project_id": { + "type": "string" + } + }, + "additionalProperties": true, + "type": "object", + "title": "Generate Response" + } + } +} \ No newline at end of file diff --git a/pkg/llm/schemas/InferNodeTypeRequest.json b/pkg/llm/schemas/InferNodeTypeRequest.json new file mode 100644 index 0000000..c2706d3 --- /dev/null +++ b/pkg/llm/schemas/InferNodeTypeRequest.json @@ -0,0 +1,19 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "$ref": "#/definitions/InferNodeTypeRequest", + "definitions": { + "InferNodeTypeRequest": { + "properties": { + "project_id": { + "type": "string" + }, + "node_id": { + "type": "string" + } + }, + "additionalProperties": true, + "type": "object", + "title": "Infer Node Type Request" + } + } +} \ No newline at end of file diff --git a/pkg/llm/schemas/InfertNodeTypeResponse.json b/pkg/llm/schemas/InfertNodeTypeResponse.json new file mode 100644 index 0000000..25b833e --- /dev/null +++ b/pkg/llm/schemas/InfertNodeTypeResponse.json @@ -0,0 +1,11 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "$ref": "#/definitions/InfertNodeTypeResponse", + "definitions": { + "InfertNodeTypeResponse": { + "additionalProperties": true, + "type": "object", + "title": "Infert Node Type Response" + } + } +} \ No newline at end of file diff --git a/pkg/llm/schemas/embed.go b/pkg/llm/schemas/embed.go new file mode 100644 index 0000000..2e1923f --- /dev/null +++ b/pkg/llm/schemas/embed.go @@ -0,0 +1,6 @@ +package schemas + +import "embed" + +//go:embed * +var Schemas embed.FS diff --git a/pkg/log/log.go b/pkg/log/log.go index 26767bc..9b2ea50 100644 --- a/pkg/log/log.go +++ b/pkg/log/log.go @@ -17,6 +17,18 @@ type Log struct{} // NewLog creates a new Log. func NewLog(config Config) *Log { + //once.Do(func() { + // logLevel := slog.LevelInfo + // if config.Level == "debug" { + // logLevel = slog.LevelDebug + // } + // slog.SetDefault(slog.New( + // tint.NewHandler(os.Stdout, &tint.Options{ + // Level: logLevel, + // TimeFormat: time.Kitchen, + // }), + // )) + //}) once.Do(func() { logLevel := zerolog.InfoLevel if config.Level == "debug" { diff --git a/pkg/openai/chat.go b/pkg/openai/chat.go deleted file mode 100644 index 8c31cff..0000000 --- a/pkg/openai/chat.go +++ /dev/null @@ -1,55 +0,0 @@ -package openai - -import ( - "github.com/google/wire" - "github.com/protoflow-labs/protoflow/gen" - "github.com/reactivex/rxgo/v2" - "github.com/sashabaranov/go-openai" - "sync" -) - -var ChatProviderSet = wire.NewSet( - NewChat, - ProviderSet, -) - -type ChatState struct { - chatChan chan rxgo.Item - context []openai.ChatCompletionMessage -} - -type ChatServer struct { - chatLock sync.Mutex - chats map[string]*ChatState - qaClient QAClient -} - -func NewChat(qaClient QAClient) *ChatServer { - return &ChatServer{ - chats: make(map[string]*ChatState), - qaClient: qaClient, - } -} - -func (c *ChatServer) getChatState(chat *gen.Chat) *ChatState { - chatState, ok := c.chats[chat.Id] - if !ok { - c.chatLock.Lock() - defer c.chatLock.Unlock() - chatChan := make(chan rxgo.Item) - chatState = &ChatState{ - chatChan: chatChan, - } - c.chats[chat.Id] = chatState - } - return chatState -} - -func (c *ChatServer) Send(chatMsg *gen.SendChatRequest) (rxgo.Observable, error) { - chatState := c.getChatState(chatMsg.Chat) - chatState.context = append(chatState.context, openai.ChatCompletionMessage{ - Role: "user", - Content: chatMsg.Message, - }) - return c.qaClient.StreamResponse(chatState.context) -} diff --git a/pkg/openai/chunker.go b/pkg/openai/chunker.go deleted file mode 100644 index 7dca405..0000000 --- a/pkg/openai/chunker.go +++ /dev/null @@ -1,156 +0,0 @@ -package openai - -import ( - tokenizer "github.com/samber/go-gpt-3-encoder" - "log" - "strings" -) - -type Chunker struct { - encoder *tokenizer.Encoder - splitFns []func(string) []string -} - -func NewChunker() (*Chunker, error) { - encoder, err := tokenizer.NewEncoder() - if err != nil { - return nil, err - } - - var splitFns []func(string) []string - allSeps := []string{" ", ",", "."} - for _, sep := range allSeps { - splitFn := splitBySep(sep, true) - splitFns = append(splitFns, splitFn) - } - - splitFns = append(splitFns, func(text string) []string { - return strings.Split(text, "") - }) - return &Chunker{ - encoder: encoder, - splitFns: splitFns, - }, nil -} - -func splitTextKeepSeparator(text string, separator string) []string { - parts := strings.Split(text, separator) - var result []string - for i, s := range parts { - if i > 0 { - result = append(result, separator+s) - } else { - result = append(result, s) - } - } - - // Filter empty strings - nonEmptyResult := []string{} - for _, s := range result { - if s != "" { - nonEmptyResult = append(nonEmptyResult, s) - } - } - return nonEmptyResult -} - -func splitBySep(sep string, keepSep bool) func(string) []string { - if keepSep { - return func(text string) []string { - return splitTextKeepSeparator(text, sep) - } - } - return func(text string) []string { - return strings.Split(text, sep) - } -} - -func (c *Chunker) SplitText(text string, chunkSize int) ([]string, error) { - if text == "" { - return []string{}, nil - } - - splits, err := c.split(text, chunkSize) - if err != nil { - return nil, err - } - - chunks := c.merge(splits, chunkSize) - - return chunks, nil -} - -func (c *Chunker) split(text string, chunkSize int) ([]string, error) { - tokens, err := c.encoder.Encode(text) - if err != nil { - return nil, err - } - - if len(tokens) <= chunkSize { - return []string{text}, nil - } - - var splits []string - for _, splitFn := range c.splitFns { - splits = splitFn(text) - if len(splits) > 1 { - break - } - } - - var newSplits []string - for _, split := range splits { - tokens, err := c.encoder.Encode(split) - if err != nil { - return nil, err - } - - if len(tokens) <= chunkSize { - newSplits = append(newSplits, split) - } else { - subSplits, err := c.split(split, chunkSize) - if err != nil { - return nil, err - } - newSplits = append(newSplits, subSplits...) - } - } - - return newSplits, nil -} - -func (c *Chunker) merge(splits []string, chunkSize int) []string { - var chunks []string - var curChunk []string - curLen := 0 - - for _, split := range splits { - tokens, err := c.encoder.Encode(split) - if err != nil { - log.Println("Error encoding split:", err) - continue - } - - splitLen := len(tokens) - if splitLen > chunkSize { - log.Printf("Got a split of size %d, larger than chunk size %d.", splitLen, chunkSize) - } - - if curLen+splitLen > chunkSize { - chunk := strings.Join(curChunk, "") - chunks = append(chunks, strings.TrimSpace(chunk)) - curChunk = []string{} - curLen = 0 - } - - curChunk = append(curChunk, split) - curLen += splitLen - } - - if len(curChunk) > 0 { - chunk := strings.Join(curChunk, "") - chunks = append(chunks, strings.TrimSpace(chunk)) - } - - return chunks -} diff --git a/pkg/openai/chunker_test.go b/pkg/openai/chunker_test.go deleted file mode 100644 index 4f4784c..0000000 --- a/pkg/openai/chunker_test.go +++ /dev/null @@ -1,38 +0,0 @@ -package openai - -import ( - "strings" - "testing" -) - -type ChunkerTest struct { - content string - chunkSize int - chunkCount int - sep string -} - -func TestChunker(t *testing.T) { - tests := []ChunkerTest{ - {content: "This is a test", chunkSize: 5, chunkCount: 1, sep: " "}, - {content: "This is a test, This is a test", chunkSize: 5, chunkCount: 2, sep: " "}, - } - chunker, err := NewChunker() - if err != nil { - t.Errorf("NewChunker() error = %v", err) - } - for _, tt := range tests { - t.Run("chunking content", func(t *testing.T) { - chunks, err := chunker.SplitText(tt.content, tt.chunkSize) - if err != nil { - t.Errorf("ChunkChatCtx() error = %v", err) - } - if len(chunks) != tt.chunkCount { - t.Errorf("ChunkChatCtx() got = %v, want %v, chunks: %v", len(chunks), tt.chunkCount, chunks) - } - if strings.Join(chunks, tt.sep) != tt.content { - t.Errorf("ChunkChatCtx() got = %v, want %v", strings.Join(chunks, ""), tt.content) - } - }) - } -} diff --git a/pkg/openai/openai.go b/pkg/openai/openai.go deleted file mode 100644 index 8f7dfe7..0000000 --- a/pkg/openai/openai.go +++ /dev/null @@ -1,208 +0,0 @@ -package openai - -import ( - "context" - "fmt" - "github.com/google/wire" - "github.com/pkg/errors" - "github.com/protoflow-labs/protoflow/pkg/util/rx" - "github.com/reactivex/rxgo/v2" - "github.com/rs/zerolog/log" - "github.com/sashabaranov/go-openai" - "io" - "strings" - "time" -) - -type ModelDetails struct { - MaxTokens int - TokensPerMsg int - TokensPerName int -} - -var ( - models = map[string]ModelDetails{ - openai.GPT3Dot5Turbo: { - MaxTokens: 4096, - TokensPerMsg: 4, - TokensPerName: -1, - }, - openai.GPT4: { - MaxTokens: 8000, - TokensPerMsg: 3, - TokensPerName: 1, - }, - } -) - -var ProviderSet = wire.NewSet( - NewConfig, - NewOpenAIQAClient, - wire.Bind(new(QAClient), new(*OpenAIQAClient)), -) - -type QAClient interface { - Ask(chatCtx []openai.ChatCompletionMessage, minTokenCount int) (string, error) - StreamResponse(chatCtx []openai.ChatCompletionMessage) (rxgo.Observable, error) -} - -func NewOpenAIQAClient(c Config) (*OpenAIQAClient, error) { - if _, ok := models[c.Model]; !ok { - var availableModels []string - for model := range models { - availableModels = append(availableModels, model) - } - return nil, fmt.Errorf("model not supported: %s, available models: %s", c.Model, strings.Join(availableModels, ", ")) - } - - client := openai.NewClient(c.APIKey) - return &OpenAIQAClient{ - client: client, - config: c, - model: c.Model, - modelDetails: models[c.Model], - }, nil -} - -type OpenAIQAClient struct { - client *openai.Client - config Config - model string - modelDetails ModelDetails -} - -var _ QAClient = &OpenAIQAClient{} - -func (c *OpenAIQAClient) fillContext(respSize int, chatCtx []openai.ChatCompletionMessage) ([]openai.ChatCompletionMessage, int, error) { - tokenCount := respSize - var newChatCtx []openai.ChatCompletionMessage - for _, msg := range chatCtx { - s, err := fillMessageContext(tokenCount, msg, c.modelDetails) - if err != nil { - return nil, 0, err - } - newChatCtx = append(newChatCtx, s.Msg) - tokenCount += s.TokenCount - if s.Rest != "" { - log.Warn().Int("token count", tokenCount).Msg("context too large, truncating") - break - } - } - return newChatCtx, tokenCount, nil -} - -func (c *OpenAIQAClient) Ask(chatCtx []openai.ChatCompletionMessage, minTokenCount int) (string, error) { - newCtx, tokenCount, err := c.fillContext(minTokenCount, chatCtx) - if err != nil { - return "", errors.Wrapf(err, "failed to fill context") - } - - log.Debug(). - Int("token count", tokenCount). - Msg("Sending request to OpenAI") - - req := openai.ChatCompletionRequest{ - Model: c.model, - Temperature: float32(0), - MaxTokens: tokenCount, - Messages: newCtx, - } - - // TODO breadchris loading the timeout from the config was not working, debug this - ctx, cancel := context.WithTimeout(context.Background(), time.Minute*1) - defer cancel() - - resp, err := c.client.CreateChatCompletion(ctx, req) - if err != nil { - return "", errors.Wrapf(err, "failed to send request to OpenAI") - } - if len(resp.Choices) == 0 { - return "", errors.New("no response from OpenAI") - } - choice := resp.Choices[0] - return choice.Message.Content, nil -} - -func (c *OpenAIQAClient) StreamResponse(chatCtx []openai.ChatCompletionMessage) (rxgo.Observable, error) { - minRespSize := 100 - newCtx, tokenCount, err := c.fillContext(minRespSize, chatCtx) - if err != nil { - return nil, errors.Wrapf(err, "failed to fill context") - } - log.Debug(). - Int("respTokenCount", tokenCount). - Msg("Sending request to OpenAI") - - req := openai.ChatCompletionRequest{ - Model: c.model, - Temperature: float32(0), - MaxTokens: tokenCount, - Stream: true, - Messages: newCtx, - // TODO breadchris need to validate the context size here - //Functions: []openai.FunctionDefinition{{ - // Name: "test", - // Description: "This is a test function", - // Parameters: &jsonschema.Definition{ - // Type: jsonschema.Object, - // Properties: map[string]jsonschema.Definition{ - // "count": { - // Type: jsonschema.Number, - // Description: "total number of words in sentence", - // }, - // "words": { - // Type: jsonschema.Array, - // Description: "list of words in sentence", - // Items: &jsonschema.Definition{ - // Type: jsonschema.String, - // }, - // }, - // "enumTest": { - // Type: jsonschema.String, - // Enum: []string{"hello", "world"}, - // }, - // }, - // }, - //}}, - } - - // TODO breadchris loading the timeout from the config was not working, debug this - ctx, cancel := context.WithTimeout(context.Background(), time.Minute*1) - - chatStream, err := c.client.CreateChatCompletionStream(ctx, req) - if err != nil { - cancel() - return nil, errors.Wrapf(err, "failed to send request to OpenAI") - } - - msgChan := make(chan rxgo.Item) - go func() { - defer cancel() - defer chatStream.Close() - for { - response, err := chatStream.Recv() - if errors.Is(err, io.EOF) { - break - } - - if err != nil { - log.Error().Err(err).Msg("failed to get response from OpenAI") - msgChan <- rx.NewError(err) - break - } - - d := response.Choices[0].Delta - if d.FunctionCall != nil { - log.Debug(). - Str("name", d.FunctionCall.Name). - Str("arguments", d.FunctionCall.Arguments). - Msg("function call received") - continue - } - - msgChan <- rx.NewItem(d.Content) - } - close(msgChan) - }() - return rxgo.FromEventSource(msgChan), nil -} diff --git a/pkg/openai/tokens.go b/pkg/openai/tokens.go deleted file mode 100644 index 908f711..0000000 --- a/pkg/openai/tokens.go +++ /dev/null @@ -1,123 +0,0 @@ -package openai - -import ( - "github.com/pkg/errors" - "github.com/rs/zerolog/log" - tokenizer "github.com/samber/go-gpt-3-encoder" - "github.com/sashabaranov/go-openai" - "strings" -) - -const ( - promptTokenCount = 3 -) - -type SplitMessage struct { - Msg openai.ChatCompletionMessage - Rest string - TokenCount int -} - -func fillMessageContext(baseTokenCount int, msg openai.ChatCompletionMessage, modelDetails ModelDetails) (*SplitMessage, error) { - calcTokenCount, err := tokenCountForMessage(msg, modelDetails) - if err != nil { - return nil, errors.Wrapf(err, "failed to encode prompt data") - } - if baseTokenCount+calcTokenCount < modelDetails.MaxTokens { - log.Debug(). - Int("base token count", baseTokenCount). - Int("token count", calcTokenCount). - Int("max", modelDetails.MaxTokens). - Msg("context is small enough") - return &SplitMessage{ - Msg: msg, - Rest: "", - TokenCount: calcTokenCount, - }, nil - } - - // attempt to split the chat context into chunks - chunker, err := NewChunker() - if err != nil { - return nil, errors.Wrapf(err, "failed to create chunker") - } - // TODO breadchris determine what a good chunk size would be - chunks, err := chunker.SplitText(msg.Content, 16) - if err != nil { - return nil, errors.Wrapf(err, "failed to split text") - } - if len(chunks) == 0 { - return nil, errors.New("no chunks found") - } - - var chunkIdx int - sep := " " - for chunkIdx, _ = range chunks { - newCntJoined := strings.Join(chunks[:chunkIdx+1], sep) - m := openai.ChatCompletionMessage{ - Content: newCntJoined, - Role: msg.Role, - Name: msg.Name, - } - // TODO breadchris we could incrementally adding tokens instead of guessing and checking like this - tc, err := tokenCountForMessage(m, modelDetails) - if err != nil { - return nil, errors.Wrapf(err, "failed to encode prompt data") - } - if baseTokenCount+tc > modelDetails.MaxTokens { - break - } - calcTokenCount = tc - } - if len(chunks) == 1 { - // TODO breadchris address the case where a single chunk is too large - return &SplitMessage{ - Msg: openai.ChatCompletionMessage{ - Content: chunks[0], - Role: msg.Role, - Name: msg.Name, - }, - Rest: "", - TokenCount: baseTokenCount + calcTokenCount, - }, nil - } - return &SplitMessage{ - Msg: openai.ChatCompletionMessage{ - Content: strings.Join(chunks[:chunkIdx+1], sep), - Role: msg.Role, - Name: msg.Name, - }, - Rest: strings.Join(chunks[chunkIdx+1:], sep), - TokenCount: baseTokenCount + calcTokenCount, - }, nil -} - -func tokenCountForMessage(msg openai.ChatCompletionMessage, modelDetails ModelDetails) (int, error) { - encoder, err := tokenizer.NewEncoder() - if err != nil { - return 0, err - } - - numTokens := 0 - numTokens += modelDetails.TokensPerMsg - encoded, err := encoder.Encode(msg.Content) - if err != nil { - return 0, err - } - numTokens += len(encoded) - role, err := encoder.Encode(msg.Role) - if err != nil { - return 0, err - } - numTokens += len(role) - name, err := encoder.Encode(msg.Name) - if err != nil { - return 0, err - } - numTokens += len(name) - if msg.Name != "" { - numTokens += modelDetails.TokensPerName - } - numTokens += promptTokenCount - return numTokens, nil -} diff --git a/pkg/openai/tokens_test.go b/pkg/openai/tokens_test.go deleted file mode 100644 index 97c28f3..0000000 --- a/pkg/openai/tokens_test.go +++ /dev/null @@ -1,50 +0,0 @@ -package openai - -import ( - "github.com/sashabaranov/go-openai" - "testing" -) - -type ChunkChatTest struct { - c openai.ChatCompletionMessage - maxTokens int - tokenCount int - rest string -} - -func TestChunkChatCtx(t *testing.T) { - md := models[openai.GPT3Dot5Turbo] - c := openai.ChatCompletionMessage{ - Role: openai.ChatMessageRoleUser, - Content: "Hello, my name is", - } - clarge := openai.ChatCompletionMessage{ - Role: openai.ChatMessageRoleUser, - Content: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus lacinia odio vitae vestibulum. Donec in efficitur leo. In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo. Nullam", - } - tests := []ChunkChatTest{ - {c: c, tokenCount: 5 + md.TokensPerMsg + 1 + promptTokenCount}, - {c: clarge, tokenCount: 69 + md.TokensPerMsg + 1 + promptTokenCount, maxTokens: 10, rest: "adipiscing elit. Vivamus lacinia odio vitae vestibulum. Donec in efficitur leo. In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo. Nullam"}, - } - for _, tt := range tests { - t.Run("chunking chat context", func(t *testing.T) { - var m ModelDetails - if tt.maxTokens > 0 { - m = models[openai.GPT3Dot5Turbo] - m.MaxTokens = tt.maxTokens - } else { - m = models[openai.GPT3Dot5Turbo] - } - sm, err := fillMessageContext(0, tt.c, m) - if err != nil { - t.Errorf("ChunkChatCtx() error = %v", err) - } - if sm.Rest != tt.rest { - t.Errorf("ChunkChatCtx() got = %v, want %v", sm.Rest, tt.rest) - } - if sm.TokenCount != tt.tokenCount { - t.Errorf("ChunkChatCtx() got = %v, want %v", sm.TokenCount, tt.tokenCount) - } - }) - } -} diff --git a/pkg/openai/wire.go b/pkg/openai/wire.go deleted file mode 100644 index 8bb2f2a..0000000 --- a/pkg/openai/wire.go +++ /dev/null @@ -1,15 +0,0 @@ -//go:build wireinject -// +build wireinject - -package openai - -import ( - "github.com/google/wire" - "go.uber.org/config" -) - -func Wire(c config.Provider) (QAClient, error) { - panic(wire.Build( - ProviderSet, - )) -} diff --git a/pkg/openai/wire_gen.go b/pkg/openai/wire_gen.go deleted file mode 100644 index 02309dd..0000000 --- a/pkg/openai/wire_gen.go +++ /dev/null @@ -1,25 +0,0 @@ -// Code generated by Wire. DO NOT EDIT. - -//go:generate go run github.com/google/wire/cmd/wire -//go:build !wireinject -// +build !wireinject - -package openai - -import ( - "go.uber.org/config" -) - -// Injectors from wire.go: - -func Wire(c config.Provider) (QAClient, error) { - openaiConfig, err := NewConfig(c) - if err != nil { - return nil, err - } - openAIQAClient, err := NewOpenAIQAClient(openaiConfig) - if err != nil { - return nil, err - } - return openAIQAClient, nil -} diff --git a/pkg/project/provider.go b/pkg/project/provider.go deleted file mode 100644 index 7dac6f1..0000000 --- a/pkg/project/provider.go +++ /dev/null @@ -1 +0,0 @@ -package project diff --git a/pkg/project/service.go b/pkg/project/service.go index 3ac8b1c..d77cdaf 100644 --- a/pkg/project/service.go +++ b/pkg/project/service.go @@ -2,14 +2,21 @@ package project import ( "context" + "encoding/json" + "fmt" "github.com/bufbuild/connect-go" + "github.com/google/uuid" "github.com/google/wire" "github.com/pkg/errors" "github.com/protoflow-labs/protoflow/gen" "github.com/protoflow-labs/protoflow/gen/genconnect" "github.com/protoflow-labs/protoflow/pkg/bucket" + "github.com/protoflow-labs/protoflow/pkg/graph/edge" + ngrpc "github.com/protoflow-labs/protoflow/pkg/graph/node/grpc" "github.com/protoflow-labs/protoflow/pkg/grpc" - openaiclient "github.com/protoflow-labs/protoflow/pkg/openai" + "github.com/protoflow-labs/protoflow/pkg/llm" + "github.com/protoflow-labs/protoflow/pkg/llm/schemas" + "github.com/protoflow-labs/protoflow/pkg/protobuf" "github.com/protoflow-labs/protoflow/pkg/store" "github.com/protoflow-labs/protoflow/pkg/workflow" "github.com/rs/zerolog/log" @@ -18,18 +25,18 @@ import ( type Service struct { store store.Project cache bucket.Bucket - chat *openaiclient.ChatServer defaultProject *gen.Project manager *workflow.ManagerBuilder // TODO breadchris rename this to something that is more relevant workflowManager *workflow.WorkflowManager + llm *llm.Agent } var ProviderSet = wire.NewSet( store.ProviderSet, - openaiclient.ChatProviderSet, NewService, workflow.ProviderSet, + llm.ProviderSet, wire.Bind(new(genconnect.ProjectServiceHandler), new(*Service)), ) @@ -47,18 +54,18 @@ func NewDefaultProject(cache bucket.Bucket) (*gen.Project, error) { func NewService( store store.Project, cache bucket.Bucket, - chat *openaiclient.ChatServer, defaultProject *gen.Project, manager *workflow.ManagerBuilder, workflowManager *workflow.WorkflowManager, + llm *llm.Agent, ) (*Service, error) { return &Service{ store: store, cache: cache, - chat: chat, defaultProject: defaultProject, manager: manager, workflowManager: workflowManager, + llm: llm, }, nil } @@ -148,32 +155,96 @@ func (s *Service) GetProjectTypes(ctx context.Context, c *connect.Request[gen.Ge }, err } -func (s *Service) SendChat(ctx context.Context, c *connect.Request[gen.SendChatRequest], c2 *connect.ServerStream[gen.SendChatResponse]) error { - obs, err := s.chat.Send(c.Msg) - if err != nil { - return errors.Wrapf(err, "failed to create ai chat") - } - msgChan := obs.Observe() - for { - select { - case item := <-msgChan: - if item.Error() { - return errors.Wrapf(item.E, "failed to get message") - } - if item.V == nil { - return nil - } - msg, ok := item.V.(string) - if !ok { - return errors.Errorf("invalid message type: %T", item.V) - } - if err := c2.Send(&gen.SendChatResponse{Message: msg}); err != nil { - return errors.Wrapf(err, "failed to send message") - } - case <-ctx.Done(): - return nil +func (s *Service) AddMethod(ctx context.Context, c *connect.Request[gen.AddMethodRequest]) (*connect.Response[gen.AddMethodResponse], error) { + // TODO breadchris this should be configurable + dir := "./proto" + + err := protobuf.AddMethod(dir, c.Msg.File, c.Msg.Package, c.Msg.Service, c.Msg.Method) + if err != nil { + return nil, errors.Wrapf(err, "failed to add method %s to proto %s", c.Msg.Method, c.Msg.File) + } + return connect.NewResponse( + &gen.AddMethodResponse{}, + ), nil +} + +func (s *Service) RunGRPCMethod(ctx context.Context, c *connect.Request[gen.RunGRPCMethodRequest], c2 *connect.ServerStream[gen.NodeExecution]) error { + pid := uuid.NewString() + server := ngrpc.NewProto("server", ngrpc.NewServerProto(c.Msg.Host)) + method := ngrpc.NewProto("method", ngrpc.NewMethodProto(c.Msg.Package, c.Msg.Service, c.Msg.Method)) + p := &gen.Project{ + Id: pid, + Name: "run-grpc-method", + Graph: &gen.Graph{ + Nodes: []*gen.Node{server, method}, + Edges: []*gen.Edge{edge.NewProvidesProto(server.Id, method.Id)}, + }, + } + + w, err := FromProto(p) + if err != nil { + return err + } + + // TODO breadchris this is a _little_ sketchy, we would like to be able to use the correct type, which might just be some data! + var workflowInput map[string]any + err = json.Unmarshal([]byte(c.Msg.Input), &workflowInput) + if err != nil { + return errors.Wrapf(err, "failed to unmarshal workflow input") + } + + io, err := s.wireWorkflow(ctx, w, method.Id, workflowInput, nil, &gen.RunWorkflowRequest{}) + if err != nil { + return errors.Wrapf(err, "failed to start workflow") + } + obs := io.Observable + log.Debug().Msg("done wiring workflows") + + var ( + obsErr error + ) + <-obs.ForEach(func(item any) { + log.Debug().Interface("item", item).Msg("workflow item") + out, err := json.Marshal(item) + if err != nil { + obsErr = errors.Wrapf(err, "failed to marshal result data") + return } + + // TODO breadchris node executions should be passed to the observable with the node wID, input, and output + err = c2.Send(&gen.NodeExecution{ + Output: string(out), + }) + if err != nil { + obsErr = errors.Wrapf(err, "failed to send node execution") + return + } + }, func(err error) { + obsErr = err + }, func() { + log.Debug(). + Str("workflow", w.ID). + Str("node", method.Id). + Msg("workflow finished") + if err != nil { + obsErr = errors.Wrapf(err, "failed to stop workflow") + return + } + }) + if obsErr != nil { + log.Error().Err(obsErr).Msg("workflow error") } + return obsErr +} + +func (s *Service) GetGRPCServerInfo(ctx context.Context, c *connect.Request[gen.GetGRPCServerInfoRequest]) (*connect.Response[gen.GetGRPCServerInfoResponse], error) { + services, err := grpc.GetGRPCTypeInfo(c.Msg.Host) + if err != nil { + return nil, errors.Wrapf(err, "failed to enumerate resource blocks") + } + return connect.NewResponse(&gen.GetGRPCServerInfoResponse{ + Services: services, + }), nil } func (s *Service) GetNodeInfo(ctx context.Context, c *connect.Request[gen.GetNodeInfoRequest]) (*connect.Response[gen.GetNodeInfoResponse], error) { @@ -215,3 +286,20 @@ func (s *Service) GetNodeInfo(ctx context.Context, c *connect.Request[gen.GetNod TypeInfo: typeInfo, }), nil } + +func (s *Service) GenerateAIStub(ctx context.Context, c *connect.Request[gen.GenerateAIStubRequest]) (*connect.Response[gen.GenerateCode], error) { + t := &gen.GenerateCode{} + + jd, err := schemas.Schemas.ReadFile(fmt.Sprintf("%s.json", t.ProtoReflect().Descriptor().Name())) + if err != nil { + return nil, err + } + + basePrompt := fmt.Sprintf("Generate a %s function that %s", c.Msg.Language, c.Msg.Description) + + err = s.llm.PromptToProto(ctx, basePrompt, t, jd) + if err != nil { + return nil, errors.Wrapf(err, "failed to prompt to proto") + } + return connect.NewResponse(t), nil +} diff --git a/pkg/project/workflow.go b/pkg/project/workflow.go index 1f4bd0b..c57bb38 100644 --- a/pkg/project/workflow.go +++ b/pkg/project/workflow.go @@ -150,10 +150,6 @@ func (s *Service) RunWorkflow(ctx context.Context, c *connect.Request[gen.RunWor Str("workflow", w.ID). Str("node", c.Msg.NodeId). Msg("workflow finished") - if err != nil { - obsErr = errors.Wrapf(err, "failed to stop workflow") - return - } }) if obsErr != nil { log.Error().Err(obsErr).Msg("workflow error") diff --git a/pkg/protobuf/code.go b/pkg/protobuf/code.go new file mode 100644 index 0000000..e44ff21 --- /dev/null +++ b/pkg/protobuf/code.go @@ -0,0 +1,64 @@ +package protobuf + +import ( + "bytes" + "fmt" + "go/ast" + "go/format" + "go/parser" + "go/token" + "os" +) + +func addGoMethodToService(filePath, method string) error { + fset := token.NewFileSet() + node, err := parser.ParseFile(fset, filePath, nil, parser.ParseComments) + if err != nil { + return fmt.Errorf("error parsing file: %w", err) + } + + funcToAdd := fmt.Sprintf(` +func (s *Service) %s(ctx context.Context, c *connect.Request[gen.%sRequest]) (*connect.Response[gen.%sResponse], error) { + return connect.NewResponse(&gen.%sResponse{}), nil +} +`, method, method, method, method) + + funcNode, err := parser.ParseFile(fset, "", "package p\n"+funcToAdd, 0) + if err != nil { + return fmt.Errorf("error parsing function to add: %w", err) + } + funcDecl := funcNode.Decls[0].(*ast.FuncDecl) // Extract the function declaration + + found := false + for _, d := range node.Decls { + if genDecl, ok := d.(*ast.GenDecl); ok { + for _, spec := range genDecl.Specs { + if typeSpec, ok := spec.(*ast.TypeSpec); ok { + if _, ok := typeSpec.Type.(*ast.StructType); ok && typeSpec.Name.Name == "Service" { + // Add the function after the "type Service struct" declaration + node.Decls = append(node.Decls, funcDecl) + found = true + break + } + } + } + } + if found { + break + } + } + + if !found { + return fmt.Errorf("no 'type Service struct' declaration found in the file") + } + + var buf bytes.Buffer + if err := format.Node(&buf, fset, node); err != nil { + return fmt.Errorf("error formatting modified AST: %w", err) + } + + if err := os.WriteFile(filePath, buf.Bytes(), os.ModePerm); err != nil { + return fmt.Errorf("error writing back to file: %w", err) + } + return nil +} diff --git a/pkg/protobuf/protomod.go b/pkg/protobuf/protomod.go new file mode 100644 index 0000000..76dc58d --- /dev/null +++ b/pkg/protobuf/protomod.go @@ -0,0 +1,161 @@ +package protobuf + +import ( + "fmt" + "github.com/jhump/protoreflect/desc" + "github.com/jhump/protoreflect/desc/builder" + "github.com/pkg/errors" + "github.com/protoflow-labs/protoflow/gen" + "github.com/protoflow-labs/protoflow/pkg/grpc" + "github.com/protoflow-labs/protoflow/pkg/grpc/manager" + "github.com/rs/zerolog/log" + "google.golang.org/protobuf/proto" + "os" + "os/exec" + "path" + "strings" +) + +func removeLineContainingString(input, substring string) string { + lines := strings.Split(input, "\n") + var result []string + + for _, line := range lines { + if !strings.Contains(line, substring) { + result = append(result, line) + } + } + + return strings.Join(result, "\n") +} + +func writeProtoFile(filepath string, fd *desc.FileDescriptor) error { + _, protoName := path.Split(filepath) + + file, err := manager.PrintFile(fd) + if err != nil { + return errors.Wrapf(err, "error printing file") + } + + b, err := os.OpenFile(filepath, os.O_WRONLY|os.O_TRUNC|os.O_CREATE, 0644) + if err != nil { + return errors.Wrapf(err, "error opening file") + } + + // TODO breadchris explore why there is an import for the protofile itself + file = removeLineContainingString(file, protoName) + + _, err = b.WriteString(file) + b.Close() + if err != nil { + return errors.Wrapf(err, "error writing file") + } + return nil +} + +func AddMethod(dir, protofile, protoPackage, service, method string) error { + fileDescs, err := grpc.ParseProtoDir(dir, protofile) + if err != nil { + return errors.Wrapf(err, "error parsing protos") + } + + // TODO breadchris when does this fail? what if the strings have problematic characters? + fullname := protoPackage + "." + service + + var handlers []string + for _, fd := range fileDescs { + svc := fd.FindService(fullname) + if svc == nil { + log.Warn().Msgf("service not found in proto %s", fd.GetName()) + continue + } + + // TODO breadchris how can you parse this with unmarshal? + opts := svc.AsServiceDescriptorProto().GetOptions() + var handlerPath string + if proto.HasExtension(opts, gen.E_HandlerPath) { + ext := proto.GetExtension(opts, gen.E_HandlerPath) + + var ok bool + handlerPath, ok = ext.(string) + if !ok { + log.Warn().Msgf("handler path is not a string %s", fullname) + continue + } + } + + sb, err := builder.FromService(svc) + if err != nil { + return errors.Wrapf(err, "error building method") + } + + f, err := builder.FromFile(fd) + if err != nil { + return errors.Wrapf(err, "error building proto file") + } + + // TODO breadchris control if the method should stream or not + + reqMsg := builder.NewMessage(method + "Request") + reqMsg = reqMsg.AddField(builder.NewField("message", builder.FieldTypeString())) + req := builder.RpcTypeMessage(reqMsg, false) + + resMsg := builder.NewMessage(method + "Response") + resMsg = resMsg.AddField(builder.NewField("result", builder.FieldTypeString())) + res := builder.RpcTypeMessage(resMsg, false) + + b := builder.NewMethod(method, req, res) + + //var mb *builder.MethodBuilder + + // see if this method already exists + m := svc.FindMethodByName(method) + if m != nil { + //// refactor the discovered method to match the new node type + //mb, err = builder.FromMethod(m) + //if err != nil { + // return nil, errors.Wrapf(err, "error building method") + //} + //mb = mb.SetRequestType(inputType).SetResponseType(outputType) + //sb = sb.RemoveMethod(m.GetName()) + return errors.Errorf("method %s already exists", method) + } + + // replace the existing method and service with the new one + sb = sb.AddMethod(b) + f = f.AddMessage(reqMsg).AddMessage(resMsg) + f = f.RemoveService(svc.GetName()).AddService(sb) + + if handlerPath != "" { + _, err := os.Stat(handlerPath) + if err != nil { + return errors.Wrapf(err, "error checking handler path: %s", handlerPath) + } + handlers = append(handlers, handlerPath) + } + + nfd, err := f.Build() + if err != nil { + return errors.Wrapf(err, "error building proto file") + } + err = writeProtoFile(path.Join(dir, protofile), nfd) + if err != nil { + return errors.Wrapf(err, "error writing proto file") + } + } + + // TODO breadchris this will only work for one handler because of live reload + for _, handler := range handlers { + err = addGoMethodToService(handler, method) + if err != nil { + return errors.Wrapf(err, "error adding go method to service") + } + } + + cmd := exec.Command("go", "generate") + output, err := cmd.CombinedOutput() + if err != nil { + return fmt.Errorf("error running go generate: %v, output: %s", err, output) + } + return nil +} diff --git a/pkg/protoflow/protoflow.go b/pkg/protoflow/protoflow.go index 4f0cdef..bfc353c 100644 --- a/pkg/protoflow/protoflow.go +++ b/pkg/protoflow/protoflow.go @@ -1,18 +1,18 @@ package protoflow import ( - "github.com/protoflow-labs/protoflow/pkg/api" "github.com/protoflow-labs/protoflow/pkg/project" + "github.com/protoflow-labs/protoflow/pkg/server" "github.com/protoflow-labs/protoflow/pkg/store" ) type Protoflow struct { - HTTPServer *api.HTTPServer + HTTPServer *server.HTTPServer Service *project.Service Store store.Project } -func New(HTTPServer *api.HTTPServer, Service *project.Service, Store store.Project) *Protoflow { +func New(HTTPServer *server.HTTPServer, Service *project.Service, Store store.Project) *Protoflow { return &Protoflow{ HTTPServer: HTTPServer, Service: Service, diff --git a/pkg/protoflow/wire.go b/pkg/protoflow/wire.go index 923a9d3..1bb0e60 100644 --- a/pkg/protoflow/wire.go +++ b/pkg/protoflow/wire.go @@ -6,11 +6,11 @@ package protoflow import ( "github.com/google/wire" "github.com/protoflow-labs/protoflow/gen" - "github.com/protoflow-labs/protoflow/pkg/api" "github.com/protoflow-labs/protoflow/pkg/bucket" "github.com/protoflow-labs/protoflow/pkg/config" "github.com/protoflow-labs/protoflow/pkg/generate" "github.com/protoflow-labs/protoflow/pkg/project" + "github.com/protoflow-labs/protoflow/pkg/server" ) // TODO breadchris should not need a bucket config, should be able to pass config in-memory @@ -19,7 +19,7 @@ func Wire(cacheConfig bucket.Config, defaultProject *gen.Project) (*Protoflow, e config.ProviderSet, project.ProviderSet, generate.ProviderSet, - api.ProviderSet, + server.ProviderSet, New, )) } diff --git a/pkg/protoflow/wire_gen.go b/pkg/protoflow/wire_gen.go index 6fec506..f33dd00 100644 --- a/pkg/protoflow/wire_gen.go +++ b/pkg/protoflow/wire_gen.go @@ -8,13 +8,13 @@ package protoflow import ( "github.com/protoflow-labs/protoflow/gen" - "github.com/protoflow-labs/protoflow/pkg/api" "github.com/protoflow-labs/protoflow/pkg/bucket" "github.com/protoflow-labs/protoflow/pkg/config" "github.com/protoflow-labs/protoflow/pkg/db" "github.com/protoflow-labs/protoflow/pkg/generate" - "github.com/protoflow-labs/protoflow/pkg/openai" + "github.com/protoflow-labs/protoflow/pkg/llm" "github.com/protoflow-labs/protoflow/pkg/project" + "github.com/protoflow-labs/protoflow/pkg/server" "github.com/protoflow-labs/protoflow/pkg/store" "github.com/protoflow-labs/protoflow/pkg/workflow" ) @@ -31,7 +31,7 @@ func Wire(cacheConfig bucket.Config, defaultProject *gen.Project) (*Protoflow, e if err != nil { return nil, err } - apiConfig, err := api.NewConfig(provider) + serverConfig, err := server.NewConfig(provider) if err != nil { return nil, err } @@ -47,18 +47,17 @@ func Wire(cacheConfig bucket.Config, defaultProject *gen.Project) (*Protoflow, e if err != nil { return nil, err } - openaiConfig, err := openai.NewConfig(provider) + workflowManager := workflow.NewWorkflowManager() + managerBuilder := workflow.NewManagerBuilder(workflowManager) + llmConfig, err := llm.NewConfig(provider) if err != nil { return nil, err } - openAIQAClient, err := openai.NewOpenAIQAClient(openaiConfig) + agent, err := llm.NewAgent(llmConfig) if err != nil { return nil, err } - chatServer := openai.NewChat(openAIQAClient) - workflowManager := workflow.NewWorkflowManager() - managerBuilder := workflow.NewManagerBuilder(workflowManager) - service, err := project.NewService(projectStore, localBucket, chatServer, defaultProject, managerBuilder, workflowManager) + service, err := project.NewService(projectStore, localBucket, defaultProject, managerBuilder, workflowManager, agent) if err != nil { return nil, err } @@ -70,7 +69,7 @@ func Wire(cacheConfig bucket.Config, defaultProject *gen.Project) (*Protoflow, e if err != nil { return nil, err } - httpServer, err := api.NewHTTPServer(apiConfig, service, generateService) + httpServer, err := server.NewHTTPServer(serverConfig, service, generateService) if err != nil { return nil, err } diff --git a/pkg/api/config.go b/pkg/server/config.go similarity index 68% rename from pkg/api/config.go rename to pkg/server/config.go index d9953de..c38971e 100644 --- a/pkg/api/config.go +++ b/pkg/server/config.go @@ -1,27 +1,25 @@ -package api +package server import ( "github.com/rs/zerolog/log" "go.uber.org/config" ) -const ConfigurationKey = "api" - type Config struct { Port int `yaml:"port"` StudioProxy string `yaml:"studio_proxy"` } // TODO breadchris studio proxy should not be set by default only turn on when in dev mode -func NewDefaultConfig(studioProxy string) Config { +func NewDefaultConfig() Config { return Config{ - StudioProxy: studioProxy, - Port: 8080, + StudioProxy: "", + Port: 8000, } } func NewConfig(config config.Provider) (cfg Config, err error) { - err = config.Get(ConfigurationKey).Populate(&cfg) + err = config.Get("server").Populate(&cfg) if err != nil { log.Error().Err(err).Msg("failed loading config") return diff --git a/pkg/api/html/layout.gohtml b/pkg/server/html/layout.gohtml similarity index 100% rename from pkg/api/html/layout.gohtml rename to pkg/server/html/layout.gohtml diff --git a/pkg/api/html/node.gohtml b/pkg/server/html/node.gohtml similarity index 100% rename from pkg/api/html/node.gohtml rename to pkg/server/html/node.gohtml diff --git a/pkg/api/http.go b/pkg/server/http.go similarity index 95% rename from pkg/api/http.go rename to pkg/server/http.go index af40558..32d265b 100644 --- a/pkg/api/http.go +++ b/pkg/server/http.go @@ -1,4 +1,4 @@ -package api +package server import ( "context" @@ -10,7 +10,7 @@ import ( phttp "github.com/protoflow-labs/protoflow/gen/http" nhttp "github.com/protoflow-labs/protoflow/pkg/graph/node/http" "github.com/protoflow-labs/protoflow/pkg/util/rx" - "github.com/protoflow-labs/protoflow/studio/public" + "github.com/protoflow-labs/protoflow/studio/dist/site" "github.com/rs/zerolog/log" "io" "net/http" @@ -102,12 +102,12 @@ func NewHTTPServer( // reference userv1.UserServiceName and groupv1.GroupServiceName. ) apiMux.Handle(grpcreflect.NewHandlerV1(reflector, connect.WithRecover(recoverCall))) - // Many tools still expect the older version of the server reflection API, so + // Many tools still expect the older version of the server reflection Server, so // most servers should mount both handlers. apiMux.Handle(grpcreflect.NewHandlerV1Alpha(reflector, connect.WithRecover(recoverCall))) - assets := public.Assets - fs := http.FS(public.Assets) + assets := site.Assets + fs := http.FS(site.Assets) httpFileServer := http.FileServer(fs) // TODO breadchris break this up into a separate function @@ -204,12 +204,16 @@ func NewHTTPServer( }, nil } -func (h *HTTPServer) Start() error { +func (h *HTTPServer) Start(port int) error { + setPort := h.config.Port + if port != 0 { + setPort = port + } log.Debug(). - Int("port", h.config.Port). + Int("port", setPort). Msg("starting http server") return http.ListenAndServe( - fmt.Sprintf(":%d", h.config.Port), + fmt.Sprintf(":%d", setPort), h2c.NewHandler(corsMiddleware(h.mux), &http2.Server{}), ) } diff --git a/pkg/api/studio.go b/pkg/server/studio.go similarity index 99% rename from pkg/api/studio.go rename to pkg/server/studio.go index 0bda83c..9dd1251 100644 --- a/pkg/api/studio.go +++ b/pkg/server/studio.go @@ -1,4 +1,4 @@ -package api +package server import ( "fmt" diff --git a/pkg/tools.go b/pkg/tools.go index fc6e4b7..1ed2c95 100644 --- a/pkg/tools.go +++ b/pkg/tools.go @@ -1,7 +1,11 @@ +//go:build tools +// +build tools + package pkg import ( _ "github.com/bufbuild/buf/cmd/buf" _ "github.com/google/wire/cmd/wire" + _ "google.golang.org/protobuf/cmd/protoc-gen-go" _ "honnef.co/go/tools/cmd/staticcheck" ) diff --git a/pkg/workflow/connector.go b/pkg/workflow/connector.go index bc3a4d4..b669fa8 100644 --- a/pkg/workflow/connector.go +++ b/pkg/workflow/connector.go @@ -47,9 +47,9 @@ func (c *Connector) Connect(ctx context.Context) rxgo.Observable { for _, obs := range c.observers { _, dispose := obs.Observable.Connect(ctx) - obs.Observable.DoOnCompleted(func() { - dispose() - }) + //obs.Observable.DoOnCompleted(func() { + // dispose() + //}) c.cleanup = append(c.cleanup, dispose) } _, _ = o.Connect(ctx) diff --git a/pkg/workflow/workflow.go b/pkg/workflow/workflow.go index 6979250..4c4ea69 100644 --- a/pkg/workflow/workflow.go +++ b/pkg/workflow/workflow.go @@ -408,20 +408,21 @@ func (w *Workflow) WireNodes( return nil, err } } - obs := connector.Connect(ctx) - obs.ForEach(func(item any) {}, func(err error) { - e := manager.Stop() - if e != nil { - log.Error().Err(e).Msgf("error, manager is stopping workflow") - } - }, func() { - log.Debug().Msgf("completed, manager is stopping workflow") - err = manager.Stop() - if err != nil { - log.Error().Err(err).Msgf("error stopping manager") - } - }) - + //obs := connector.Connect(ctx) + //obs.ForEach(func(item any) {}, func(err error) { + // e := manager.Stop() + // if e != nil { + // log.Error().Err(e).Msgf("error, manager is stopping workflow") + // } + //}, func() { + // log.Debug().Msgf("completed, manager is stopping workflow") + // err = manager.Stop() + // if err != nil { + // log.Error().Err(err).Msgf("error stopping manager") + // } + //}) + + // TODO breadchris this observable is not being closed when the workflow input has stopped sending data // TODO breadchris this is returning a trace, not the actual output return &graph.IO{ Observable: connector.Connect(ctx), diff --git a/pkg/workflow/workflow_test.go b/pkg/workflow/workflow_test.go index bd44800..57cf342 100644 --- a/pkg/workflow/workflow_test.go +++ b/pkg/workflow/workflow_test.go @@ -12,7 +12,7 @@ import ( ) func TestRun(t *testing.T) { - // TODO breadchris start server to listen for localhost:8080? + // TODO breadchris start server to listen for localhost:8000? r := code2.NewServer(base.NewNode("test 1"), code2.NewServerProto(pcode.Runtime_NODEJS).GetServer()) diff --git a/proto/ai.proto b/proto/ai.proto new file mode 100644 index 0000000..62da9c7 --- /dev/null +++ b/proto/ai.proto @@ -0,0 +1,8 @@ +syntax = "proto3"; + +package ai; + +message GenerateCode { + // Code that has been generated. + string code = 1; +} \ No newline at end of file diff --git a/proto/embed.go b/proto/embed.go index c2288af..bdae068 100644 --- a/proto/embed.go +++ b/proto/embed.go @@ -2,5 +2,5 @@ package proto import "embed" -//go:embed *.proto +//go:embed * var Proto embed.FS diff --git a/proto/project.proto b/proto/project.proto index 1af6d2e..ce793a3 100644 --- a/proto/project.proto +++ b/proto/project.proto @@ -1,239 +1,221 @@ syntax = "proto3"; - +package project; import "google/protobuf/descriptor.proto"; import "graph.proto"; - -package project; +import "ai.proto"; option go_package = "project"; - -message Project { - string id = 1; - string name = 2; - graph.Graph graph = 3; +message AddMethodRequest { + string file = 1; + string package = 2; + string service = 3; + string method = 4; } - -service ProjectService { - rpc NewNode(NewNodeRequest) returns (NewNodeResponse) {} - rpc GetProjectTypes(GetProjectTypesRequest) returns (ProjectTypes) {} - // TODO breadchris unfortunately this is needed because of the buf fetch transport not supporting streaming - // the suggestion is to build a custom transport that uses websockets https://github.com/bufbuild/connect-es/issues/366 - rpc SendChat(SendChatRequest) returns (stream SendChatResponse) {} - - rpc ExportProject(ExportProjectRequest) returns (ExportProjectResponse) {} - rpc LoadProject(LoadProjectRequest) returns (LoadProjectResponse) {} - - rpc GetProject(GetProjectRequest) returns (GetProjectResponse) {} - rpc GetProjects(GetProjectsRequest) returns (GetProjectsResponse) {} - rpc CreateProject(CreateProjectRequest) returns (CreateProjectResponse) {} - rpc DeleteProject(DeleteProjectRequest) returns (DeleteProjectResponse) {} - - rpc EnumerateProviders(GetProvidersRequest) returns (GetProvidersResponse) {} - - rpc GetNodeInfo(GetNodeInfoRequest) returns (GetNodeInfoResponse) {} - - rpc SaveProject(SaveProjectRequest) returns (SaveProjectResponse) {} - - rpc RunWorkflow(RunWorkflowRequest) returns (stream NodeExecution) {} - rpc StopWorkflow(StopWorkflowRequest) returns (StopWorkflowResponse) {} - - rpc GetWorkflowRuns(GetWorkflowRunsRequest) returns (GetWorkflowRunsResponse) {} - rpc GetRunningWorkflows(GetRunningWorkflowsRequest) returns (GetRunningWorkflowResponse) {} -} - -message GetRunningWorkflowsRequest { - string project_id = 1; +message AddMethodResponse { } - -message GetRunningWorkflowResponse { - repeated WorkflowTrace traces = 1; +message CreateProjectRequest { + string name = 1; } - -message NewNodeRequest { - string project_id = 1; - graph.Node node = 2; +message CreateProjectResponse { + Project project = 1; } - -message NewNodeResponse { - graph.Node node = 1; +message Data { + string value = 1; } - -message ExportProjectRequest { - string project_id = 1; - string path = 2; +message DeleteProjectRequest { + string id = 1; } - -message ExportProjectResponse {} - -message LoadProjectRequest { - string path = 1; +message DeleteProjectResponse { + Project project = 1; } - -message LoadProjectResponse { - Project project = 1; +message EnumeratedProvider { + graph.NodeDetails provider = 1; + repeated graph.Node nodes = 2; + ProviderInfo info = 3; } - -message GetProjectTypesRequest { - string project_id = 1; +message ExportProjectRequest { + string project_id = 1; + string path = 2; } - -message ProjectTypes { - google.protobuf.DescriptorProto node_type = 1; - google.protobuf.DescriptorProto edge_type = 2; - map desc_lookup = 3; - map enum_lookup = 4; +message ExportProjectResponse { } - -message StopWorkflowRequest { - string project_id = 1; - string workflow_id = 2; -} - -message StopWorkflowResponse {} - -message Chat { - string id = 1; -} - -message ChatMessage { - string role = 1; - string message = 2; -} - -message SendChatRequest { - Chat chat = 1; - string message = 2; -} - -message SendChatResponse { - string message = 1; -} - -message GetWorkflowRunsRequest { - string project_id = 1; +message GRPCMethod { + string name = 1; + GRPCTypeInfo type_info = 2; } - -message GetWorkflowRunsResponse { - repeated WorkflowTrace runs = 1; +message GRPCService { + string package = 1; + string name = 2; + repeated GRPCMethod methods = 3; + string file = 4; } - -message WorkflowTrace { - string id = 1; - RunWorkflowRequest request = 2; - repeated NodeExecution node_execs = 3; +message GRPCTypeInfo { + google.protobuf.DescriptorProto input = 1; + google.protobuf.DescriptorProto output = 2; + map desc_lookup = 3; + map enum_lookup = 4; + google.protobuf.MethodDescriptorProto method_desc = 5; + string package_name = 6; } - -message NodeExecution { - string node_id = 1; - string output = 2; +message GenerateAIStubRequest { + string language = 1; + string description = 2; +} +message GetGRPCServerInfoRequest { + string host = 1; +} +message GetGRPCServerInfoResponse { + repeated GRPCService services = 1; } - message GetNodeInfoRequest { - string project_id = 1; - string node_id = 2; + string project_id = 1; + string node_id = 2; } - -// TODO breadchris a file desc contains all this information it would be simpler to use -message GRPCTypeInfo { - google.protobuf.DescriptorProto input = 1; - google.protobuf.DescriptorProto output = 2; - map desc_lookup = 3; - map enum_lookup = 4; - google.protobuf.MethodDescriptorProto method_desc = 5; - string package_name = 6; -} - message GetNodeInfoResponse { - // A compiled view of the method - string method_proto = 1; - // Type information for the input and output - GRPCTypeInfo type_info = 2; + string method_proto = 1; + GRPCTypeInfo type_info = 2; } - -message RuntimeData { +message GetProjectRequest { + string id = 1; +} +message GetProjectResponse { + Project project = 1; + ProjectTypes types = 2; +} +message GetProjectTypesRequest { + string project_id = 1; +} +message GetProjectsRequest { string name = 1; - repeated string calls = 2; - GraphData graph = 3; } - -message GraphData { - float x = 1; - float y = 2; +message GetProjectsResponse { + repeated GetProjectResponse projects = 1; } - -message RunWorkflowRequest { - string project_id = 1; - string node_id = 2; - string input = 3; - bool start_server = 4; +message GetProvidersRequest { + string project_id = 1; } - -message Data { - string value = 1; +message GetProvidersResponse { + repeated EnumeratedProvider providers = 1; } - -message GetProjectRequest { - string id = 1; +message GetRunningWorkflowResponse { + repeated WorkflowTrace traces = 1; } - -message GetProjectResponse { - Project project = 1; - ProjectTypes types = 2; +message GetRunningWorkflowsRequest { + string project_id = 1; } - -message GetProjectsRequest { - string name = 1; +message GetWorkflowRunsRequest { + string project_id = 1; } - -message GetProjectsResponse { - repeated GetProjectResponse projects = 1; +message GetWorkflowRunsResponse { + repeated WorkflowTrace runs = 1; } - -message CreateProjectRequest { - string name = 1; +message GraphData { + float x = 1; + float y = 2; } - -message CreateProjectResponse { - Project project = 1; +message LoadProjectRequest { + string path = 1; } - -message DeleteProjectRequest { - string id = 1; +message LoadProjectResponse { + Project project = 1; } - -message DeleteProjectResponse { - Project project = 1; +message NewNodeRequest { + string project_id = 1; + graph.Node node = 2; } - -message GetProvidersRequest { - string project_id = 1; +message NewNodeResponse { + graph.Node node = 1; } - -message EnumeratedProvider { - graph.NodeDetails provider = 1; - repeated graph.Node nodes = 2; - ProviderInfo info = 3; +message NodeExecution { + string node_id = 1; + string output = 2; +} +message Project { + string id = 1; + string name = 2; + graph.Graph graph = 3; +} +message ProjectTypes { + google.protobuf.DescriptorProto node_type = 1; + google.protobuf.DescriptorProto edge_type = 2; + map desc_lookup = 3; + map enum_lookup = 4; } - message ProviderInfo { - ProviderState state = 1; - string error = 2; + ProviderState state = 1; + string error = 2; } - -enum ProviderState { - UNKNOWN = 0; - READY = 1; - ERROR = 2; +message RunGRPCMethodRequest { + string host = 1; + string service = 2; + string method = 3; + string input = 4; + string package = 5; } - -message GetProvidersResponse { - repeated EnumeratedProvider providers = 1; +message RunGRPCMethodResponse { + string output = 1; +} +message RunWorkflowRequest { + string project_id = 1; + string node_id = 2; + string input = 3; + bool start_server = 4; +} +message RuntimeData { + string name = 1; + repeated string calls = 2; + GraphData graph = 3; } - message SaveProjectRequest { - string project_id = 1; - graph.Graph graph = 2; + string project_id = 1; + graph.Graph graph = 2; } - message SaveProjectResponse { - Project project = 1; + Project project = 1; +} +message StopWorkflowRequest { + string project_id = 1; + string workflow_id = 2; +} +message StopWorkflowResponse { +} +message Test3Request { + string message = 1; +} +message Test3Response { + string result = 1; +} +message WorkflowTrace { + string id = 1; + RunWorkflowRequest request = 2; + repeated NodeExecution node_execs = 3; +} +enum ProviderState { + UNKNOWN = 0; + READY = 1; + ERROR = 2; +} +service ProjectService { + option (handler_path) = "pkg/project/service.go"; + rpc AddMethod ( AddMethodRequest ) returns ( AddMethodResponse ); + rpc CreateProject ( CreateProjectRequest ) returns ( CreateProjectResponse ); + rpc DeleteProject ( DeleteProjectRequest ) returns ( DeleteProjectResponse ); + rpc EnumerateProviders ( GetProvidersRequest ) returns ( GetProvidersResponse ); + rpc ExportProject ( ExportProjectRequest ) returns ( ExportProjectResponse ); + rpc GenerateAIStub ( GenerateAIStubRequest ) returns ( ai.GenerateCode ); + rpc GetGRPCServerInfo ( GetGRPCServerInfoRequest ) returns ( GetGRPCServerInfoResponse ); + rpc GetNodeInfo ( GetNodeInfoRequest ) returns ( GetNodeInfoResponse ); + rpc GetProject ( GetProjectRequest ) returns ( GetProjectResponse ); + rpc GetProjectTypes ( GetProjectTypesRequest ) returns ( ProjectTypes ); + rpc GetProjects ( GetProjectsRequest ) returns ( GetProjectsResponse ); + rpc GetRunningWorkflows ( GetRunningWorkflowsRequest ) returns ( GetRunningWorkflowResponse ); + rpc GetWorkflowRuns ( GetWorkflowRunsRequest ) returns ( GetWorkflowRunsResponse ); + rpc LoadProject ( LoadProjectRequest ) returns ( LoadProjectResponse ); + rpc NewNode ( NewNodeRequest ) returns ( NewNodeResponse ); + rpc RunGRPCMethod ( RunGRPCMethodRequest ) returns ( stream NodeExecution ); + rpc RunWorkflow ( RunWorkflowRequest ) returns ( stream NodeExecution ); + rpc SaveProject ( SaveProjectRequest ) returns ( SaveProjectResponse ); + rpc StopWorkflow ( StopWorkflowRequest ) returns ( StopWorkflowResponse ); +} +extend google.protobuf.ServiceOptions { + string handler_path = 50000; } diff --git a/studio/esbuild.mjs b/studio/esbuild.mjs index d4b615b..fa6b29a 100644 --- a/studio/esbuild.mjs +++ b/studio/esbuild.mjs @@ -1,62 +1,83 @@ import esbuild from "esbuild"; -import {postcssModules, sassPlugin} from "esbuild-sass-plugin"; -import { swcPlugin } from "esbuild-plugin-swc"; -import { NodeModulesPolyfillPlugin } from "@esbuild-plugins/node-modules-polyfill"; -import tailwindcss from 'tailwindcss'; -import autoprefixer from 'autoprefixer'; -import postcss from "postcss"; +import {spawn, spawnSync} from "child_process"; const prodBuild = process.env.BUILD === 'true' +const target = process.env.TARGET || 'site' +const buildDir = prodBuild ? 'dist' : 'build' -const watch = !prodBuild ? { - onRebuild: () => { - console.log("rebuilt!"); - }, -} : undefined; +const buildVSCode = target === 'vscode' || prodBuild +const buildSite = target === 'site' || prodBuild + +const runTailwindBuild = (watch, outfile) => { + console.log("Building Tailwind CSS..."); + try { + const command = 'npx'; + const args = [ + 'tailwindcss', + 'build', + '-i', 'src/styles/tailwind.css', + '-o', outfile + ]; + + if (watch) { + args.push('--watch') + spawn(command, args, { + stdio: 'inherit' + }) + } else { + spawnSync(command, args, { + stdio: 'inherit' + }); + } + console.log("Tailwind CSS build successful!"); + } catch (error) { + console.error("Error building Tailwind CSS:", error.message); + } +}; + +async function doBuild(options, serve) { + // TODO breadchris support tailwind for extension + if (buildSite) { + runTailwindBuild(!prodBuild, `${options.outdir}/tailwind.css`); + } + if (prodBuild) { + await esbuild.build(options); + } else { + try { + const context = await esbuild + .context(options); -const minify = prodBuild; + await context.rebuild() + if (serve) { + console.log('serving', `${buildDir}/site`) + context.serve({ + port: 8001, + servedir: `${buildDir}/site`, + fallback: `${buildDir}/site/index.html`, + onRequest: args => { + console.log(args.method, args.path) + } + }) + } + await context.watch() + } catch (e) { + console.error('failed to build: ' + e) + } + } +} -const nodeEnv = prodBuild ? "'production'" : "'development'"; -const options = { - entryPoints: [ - "./src/index.tsx", - "./src/styles/globals.css", - ], - outdir: "public/build/", +const baseOptions = { bundle: true, loader: { ".ts": "tsx", ".tsx": "tsx", ".woff2": "file", ".woff": "file", + ".html": "copy", + ".json": "copy", + ".ico": "copy", }, - plugins: [ - // TODO breadchris use swc over tsc - // swcPlugin(), - NodeModulesPolyfillPlugin(), - sassPlugin({ - filter: /\.css$/, - type: "style", - // todo: get postcss to live reload properly - async transform(source, resolveDir, filePath) { - const transformed = await postcss([ - tailwindcss( - { - content: [ - './src/**/*.{js,jsx,ts,tsx}', - ], - theme: { - extend: {}, - }, - plugins: [], - } - ), - autoprefixer, - ]).process(source, {from: filePath}); - return transformed.css; - }, - }), - ], + plugins: [], minify: false, sourcemap: "linked", define: { @@ -65,19 +86,25 @@ const options = { logLevel: 'info' }; -if (prodBuild) { - await esbuild.build(options); -} else { - try { - const context = await esbuild - .context(options); - - await context.rebuild() - context.serve({ - servedir: 'public', - }) - await context.watch() - } catch (e) { - console.error('failed to build: ' + e) - } +if (buildSite) { + await doBuild({ + ...baseOptions, + entryPoints: [ + "./src/index.tsx", + "./src/styles/globals.css", + "./src/favicon.ico", + "./src/index.html", + ], + outdir: `${buildDir}/site/`, + }, true); } + +// if (buildVSCode) { +// await doBuild({ +// ...baseOptions, +// entryPoints: [ +// "./src/extension/extension.ts", +// ], +// outdir: `${buildDir}/extension/`, +// }, false); +// } diff --git a/studio/public/static.go b/studio/public/static.go deleted file mode 100644 index c6dbc23..0000000 --- a/studio/public/static.go +++ /dev/null @@ -1,6 +0,0 @@ -package public - -import "embed" - -//go:embed * -var Assets embed.FS diff --git a/studio/src/components/Builder/Builder.tsx b/studio/src/components/Builder/Builder.tsx new file mode 100644 index 0000000..e62cc1f --- /dev/null +++ b/studio/src/components/Builder/Builder.tsx @@ -0,0 +1,40 @@ +import { useProjectContext } from "@/providers/ProjectProvider"; +import {PlugDisconnected20Regular} from "@fluentui/react-icons"; +import React from "react"; +import { ProviderState } from "@/rpc/project_pb"; +import { NodeButton } from "@/components/Chat/ProviderList"; +import {Manipulation} from "@/components/Builder/Manipulation"; +import {Stack} from "@fluentui/react"; +import {Textarea} from "@fluentui/react-components"; +import {EditorPanel} from "@/components/EditorPanel/EditorPanel"; +import {MethodInputForm} from "@/components/Builder/MethodInputForm"; +import {useEditorContext} from "@/providers/EditorProvider"; +import {ServiceSelector} from "@/components/Builder/ServiceSelector"; + +export function Builder() { + const { project, providers } = useProjectContext(); + const { selectedNodes } = useEditorContext(); + + if (!project) { + return null; + } + + console.log(selectedNodes) + + return ( +
+ + +

Builder

+
+ + + + + + + +
+
+ ); +} diff --git a/studio/src/components/Builder/Manipulation.tsx b/studio/src/components/Builder/Manipulation.tsx new file mode 100644 index 0000000..9f6b5ba --- /dev/null +++ b/studio/src/components/Builder/Manipulation.tsx @@ -0,0 +1,255 @@ +import * as React from "react"; +import { + FlatTree, + FlatTreeItem, + TreeItemLayout, + TreeOpenChangeData, + TreeOpenChangeEvent, + HeadlessFlatTreeItemProps, + useHeadlessFlatTree_unstable, + TreeItemValue, + FlatTreeItemProps, +} from "@fluentui/react-components"; +import { Delete20Regular, MoreHorizontal20Regular, Edit20Regular } from "@fluentui/react-icons"; +import { + Button, + Menu, + MenuItem, + MenuList, + MenuPopover, + MenuTrigger, + useRestoreFocusTarget, +} from "@fluentui/react-components"; +import {useProjectContext} from "@/providers/ProjectProvider"; +import { ProviderState } from "@/rpc/project_pb"; +import {useEditorContext} from "@/providers/EditorProvider"; + +type ItemProps = HeadlessFlatTreeItemProps & { content: string }; + +const subtrees: ItemProps[][] = [ + [ + { value: "1", content: "Level 1, item 1" }, + { value: "1-1", parentValue: "1", content: "Item 1-1" }, + { value: "1-2", parentValue: "1", content: "Item 1-2" }, + ], + + [ + { value: "2", content: "Level 1, item 2" }, + { value: "2-1", parentValue: "2", content: "Item 2-1" }, + ], +]; + +type CustomTreeItemProps = FlatTreeItemProps & { + onRemoveItem?: (value: string) => void; +}; + +const ActionsExample: React.FC<{isItemRemovable: boolean, handleRemoveItem: () => void}> = ({ isItemRemovable, handleRemoveItem}) => { + return ( + <> + {isItemRemovable && ( + + + + { + const idx = parseInt(data.optionValue ?? "0"); + setService(services[idx]); + }} + > + {services.map((ep, idx) => { + return ( + + ) + })} + + {service && ( + { + const idx = parseInt(data.optionValue ?? "0"); + setMethod(service.methods[idx]); + }} + > + { + service.methods.map((m, idx) => { + return ( + + ) + }) + } + + )} + + + {method && ( + <> + {method.typeInfo ? ( + { + void runMethod(data); + }} /> + ) : ( +

No type info

+ )} + + )} +
+ + o.output)} onRenderCell={(item?: string) => { + const getText = () => { + if (!item) { + return ''; + } + const parsed = JSON.parse(item); + const p = JSON.parse(parsed.output); + // if (Object.keys(p).length === 1) { + // const value: any = Object.values(p)[0]; + // return ({value.toString()}); + // } + return ; + } + return ( + {getText()} + ); + }} /> + + {service && ( + + { + setMethodName(e.target.value); + }} /> + + + )} + + ); +} diff --git a/studio/src/components/Chat/ProviderList.tsx b/studio/src/components/Chat/ProviderList.tsx index 366b8f8..810a7e8 100644 --- a/studio/src/components/Chat/ProviderList.tsx +++ b/studio/src/components/Chat/ProviderList.tsx @@ -13,7 +13,7 @@ import {BaseNodeCard} from "@/components/BaseNodeCard"; import {BiClipboard} from "react-icons/bi"; import {Node as ProtoNode, NodeDetails} from "@/rpc/graph_pb"; -const NodeButton: React.FC<{ provider: NodeDetails, node: ProtoNode }> = ({ node, provider }) => { +export const NodeButton: React.FC<{ provider: NodeDetails, node: ProtoNode }> = ({ node, provider }) => { const { setDraggedNode } = useEditorContext(); return (
= ({ data, onRun }) => { return null; } - //@ts-ignore const inputFormProps: GRPCInputFormProps = { grpcInfo: nodeInfo.typeInfo, // some random key to separate data from the form @@ -71,7 +70,7 @@ const Form: React.FC = ({ data, onRun }) => { Dialog title - + diff --git a/studio/src/components/EditorPanel/EditorPanel.tsx b/studio/src/components/EditorPanel/EditorPanel.tsx index ce5a62b..b6df63f 100644 --- a/studio/src/components/EditorPanel/EditorPanel.tsx +++ b/studio/src/components/EditorPanel/EditorPanel.tsx @@ -120,6 +120,8 @@ const ActiveNodeEditor: React.FC = ({node}) => { export function EditorPanel() { const { selectedNodes, selectedEdges } = useEditorContext(); + console.log(selectedNodes, selectedEdges) + const getEditor = () => { if (selectedNodes.length > 0) { return ; diff --git a/studio/src/components/ProtoForm/InputFormContents.tsx b/studio/src/components/ProtoForm/InputFormContents.tsx new file mode 100644 index 0000000..12e9f07 --- /dev/null +++ b/studio/src/components/ProtoForm/InputFormContents.tsx @@ -0,0 +1,109 @@ +import {FieldDescriptorProto, FieldDescriptorProto_Type} from "@bufbuild/protobuf"; +import React, {FC, useState} from "react"; +import {useWatch} from "react-hook-form"; +import {GRPCInputFormProps, ProtoForm} from "@/components/ProtoForm/ProtoForm"; +import { GRPCTypeInfo } from "@/rpc/project_pb"; +import {Input} from "@fluentui/react-components"; + +const getFieldName = (baseFieldName: string | undefined, field: FieldDescriptorProto, idx?: number): string => { + if (!baseFieldName) { + return field.name || ''; + } + if (idx !== undefined) { + return `${baseFieldName}.${idx}`; + } + return `${baseFieldName}`; +} + +export interface InputFormContentsProps { + inputFormProps: GRPCInputFormProps + field: FieldDescriptorProto + index?: number +} + +export const InputFormContents: FC = (props) => { + const { + inputFormProps, + field, + index, + } = props; + const { + grpcInfo, + baseFieldName, + register, + control, + fieldPath, + parentFieldName, + setValue, + } = inputFormProps; + const { enumLookup, descLookup } = grpcInfo; + + const fieldFormName = getFieldName(baseFieldName, field, index); + const fieldValue = useWatch({ + control, + name: fieldFormName, + defaultValue: '', + }); + + if (field.typeName) { + // field.typeName == .name.othername, remove the leading dot + const typeName = field.typeName.substring(1); + const fieldType = descLookup[typeName]; + if (fieldType) { + return ( + + ) + } + } + if (field.type === FieldDescriptorProto_Type.ENUM) { + if (!field.typeName) { + throw new Error("Enum field has no type name"); + } + const enumTypeName = `${fieldPath}.${field.name}`; + const enumType = enumLookup[enumTypeName]; + console.log(enumLookup, enumTypeName, enumType) + if (!enumType) { + throw new Error(`Enum type ${fieldPath}.${field.name} not found in ${Object.keys(enumLookup)}`); + } + + return ( + <> + + + + ) + } + if (field.type === FieldDescriptorProto_Type.STRING) { + return ( +
+ +
+ ) + } + if (field.type === FieldDescriptorProto_Type.BOOL) { + return ( +
+ +
+ ) + } + return ( +
+ +
+ ) +} + diff --git a/studio/src/components/ProtoForm/MessageField.tsx b/studio/src/components/ProtoForm/MessageField.tsx new file mode 100644 index 0000000..f7bcd69 --- /dev/null +++ b/studio/src/components/ProtoForm/MessageField.tsx @@ -0,0 +1,214 @@ +import {DescriptorProto, FieldDescriptorProto, FieldDescriptorProto_Label, FieldDescriptorProto_Type} from "@bufbuild/protobuf"; +import React, {FC, useEffect, useState} from "react"; +import {useFieldArray, useWatch} from "react-hook-form"; +import {InputFormContents, InputFormContentsProps} from "@/components/ProtoForm/InputFormContents"; +import {GRPCInputFormProps} from "@/components/ProtoForm/ProtoForm"; +import { typeLookup } from "@/util/proto"; +import {Button} from "@fluentui/react-components"; + +type GrpcFormField = { + type: 'field' + name: string + field: FieldDescriptorProto + fieldType: FieldDescriptorProto_Type | undefined +} + +type GrpcFormOneof = { + type: 'oneof' + name: string + fields: FieldDescriptorProto[] + fieldType: FieldDescriptorProto_Type | undefined +} + +export type ProtobufFormFieldType = GrpcFormField | GrpcFormOneof + +interface GRPCInputFormContentsProps extends GRPCInputFormProps { + field: ProtobufFormFieldType + desc: DescriptorProto +} + +export const MessageField: FC = (props) => { + const { field} = props; + + return ( +
+
+ {field.type === 'field' ? ( + + ) : ( + + )} +
+
+ ); +} + +interface FormattedMessageFieldProps { + grpcProps: GRPCInputFormProps + baseFieldName: string|undefined + field: FieldDescriptorProto +} + +interface RepeatedFieldProps { + fieldProps: FormattedMessageFieldProps + inputFormProps: InputFormContentsProps +} + +const RepeatedField: FC = (props) => { + const { inputFormProps, fieldProps } = props; + const { field, baseFieldName, grpcProps } = fieldProps; + const { control, fieldPath } = grpcProps; + + const { fields: formFields, append, remove } = useFieldArray({ + control, name: baseFieldName || 'input', + }); + + return ( + + + {formFields.map((f, index) => ( + + + + ))} + + + + +
+ + +
+ +
+ ); +} + +const FormattedMessageField: FC = (props) => { + const { field, baseFieldName, grpcProps } = props; + const { fieldPath } = grpcProps; + + const inputProps: InputFormContentsProps = { + inputFormProps: { + ...grpcProps, + fieldPath: `${fieldPath}.${field.name}`, + baseFieldName, + }, + field, + }; + + if (field.label === FieldDescriptorProto_Label.REPEATED) { + return ; + } + return (); +} + +interface OneOfFieldProps { + grpcProps: GRPCInputFormProps + field: GrpcFormOneof +} + +interface FormattedOneOfFieldProps { + grpcProps: GRPCInputFormProps + f: FieldDescriptorProto + currentField: string|undefined + fieldLookup: Record + onChecked: () => void + setCurrentField: (field: string|undefined) => void +} + +const getFieldPath = (grpcProps: GRPCInputFormProps, f: FieldDescriptorProto) => { + return `${grpcProps.parentFieldName}.${f.name}`; +} + +const FormattedOneOfField: FC = (props) => { + const { + f, + onChecked, + fieldLookup, + grpcProps , + currentField, + setCurrentField, + } = props; + const { control } = grpcProps; + + const fieldPath = getFieldPath(grpcProps, f); + const fieldValue = useWatch({ + control, + name: fieldPath, + }); + + useEffect(() => { + if (fieldValue !== undefined) { + setCurrentField(f.name); + } + }, [fieldValue]); + + console.log(fieldPath, fieldValue); + + return ( + + + {f.name}
{f.type && typeLookup[f.type]} + + + + + + {(currentField && currentField == f.name) ? ( + + ) : "unset"} + + + ) +} + +const OneOfField: FC = (props) => { + const [currentField, setCurrentField] = useState(''); + const { field, grpcProps } = props; + const { resetField, control } = grpcProps; + + if (!field.fields) { + return null; + } + const fieldLookup = field.fields.reduce((acc, fd) => ({ + ...acc, + [fd.name || '']: fd, + }), {} as Record); + const resetFields = (except: string|undefined) => { + field.fields.forEach((f) => { + resetField(getFieldPath(grpcProps, f)); + }) + } + return ( +
+ + + {field.fields.map((f) => ( + { + resetFields(f.name); + setCurrentField(f.name) + }} + grpcProps={grpcProps} + f={f} + currentField={currentField} + setCurrentField={setCurrentField} + fieldLookup={fieldLookup} + /> + ))} + +
+
+ ); +} diff --git a/studio/src/components/ProtoForm/ProtoForm.tsx b/studio/src/components/ProtoForm/ProtoForm.tsx new file mode 100644 index 0000000..92113e8 --- /dev/null +++ b/studio/src/components/ProtoForm/ProtoForm.tsx @@ -0,0 +1,85 @@ +import { + FieldDescriptorProto, +} from "@bufbuild/protobuf"; +import React, {FC} from "react"; +import {Control, UseFormRegister} from "react-hook-form"; +import {GRPCTypeInfo} from "@/rpc/project_pb"; +import {MessageField, ProtobufFormFieldType} from "@/components/ProtoForm/MessageField"; +import "./styles.css"; +import {UseFormResetField} from "react-hook-form/dist/types/form"; +import {typeLookup} from "@/util/proto"; + +export interface GRPCInputFormProps { + grpcInfo: GRPCTypeInfo + register: UseFormRegister + control: Control + fieldPath: string + baseFieldName?: string + parentFieldName?: string + setValue: (name: any, value: any) => void + resetField: UseFormResetField +} + +export const ProtoForm: FC = (props) => { + const { + grpcInfo, + } = props; + + const { input: desc } = grpcInfo; + if (!desc) { + return null; + } + + const formattedFields: ProtobufFormFieldType[] = []; + desc.field.forEach((field: FieldDescriptorProto) => { + if (field.oneofIndex !== undefined) { + const oneofType = desc.oneofDecl[field.oneofIndex] + const existingOneof = formattedFields.find((f) => f.type === 'oneof' && f.name === oneofType.name); + if (!existingOneof) { + formattedFields.push({ + type: 'oneof', + name: oneofType.name || 'unknown', + fields: [field], + fieldType: field.type, + }) + } else { + if (existingOneof.type === 'oneof') { + existingOneof.fields.push(field); + } + } + } else { + formattedFields.push({ + type: 'field', + name: field.name || 'unknown', + field, + fieldType: field.type, + }); + } + }); + return ( +
+ + + {/**/} + {/* */} + {/**/} + {formattedFields.map((f) => { + return ( + + + {/**/} + + + ) + })} + +
{desc.name}
+ {f.name}
{f.fieldType && typeLookup[f.fieldType]} +
*/} + {/* */} + {/* + +
+
+ ) +} diff --git a/studio/src/components/ProtoForm/styles.css b/studio/src/components/ProtoForm/styles.css new file mode 100644 index 0000000..374451c --- /dev/null +++ b/studio/src/components/ProtoForm/styles.css @@ -0,0 +1,747 @@ +.grpc-form { + font-family: Roboto, "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 1.0em; +} + +.grpc-desc { + margin-bottom: 0; +} + +.grpc-desc td { + vertical-align: top; +} + +.grpc-desc-selects td { + padding-top: 8px; +} + +.grpc-desc select { + height: 30px; + font-size: 14px; +} + +.grpc-desc pre { + margin: 0 0 0 36px; + padding-left: 20px; + border-left: 1px solid #d8d8d8; + color: #777; +} + +.grpc-desc button.grpc-descriptions-toggle { + position: absolute; + z-index: 3; + padding: 0; + margin-top: 6px; + margin-left: 10px; + border: none; + background: white; + font-size: 150%; +} + +.grpc-desc div.grpc-form-label { + font-size: 110%; + width: 124px; + line-height: 30px; + text-align: right; + margin-right: 12px; +} + +.grpc-descriptions { + width: 100%; + overflow: scroll; +} + +.grpc-service-description { + padding-top: 6px; +} + +.grpc-method-description { + font-weight: bold; + color: #333; + padding-top: 12px; + padding-bottom: 12px; +} + +.grpc-service-description-end { + padding-bottom: 10px; +} + +.grpc-container { + display: flex; +} + +.grpc-request-examples-container { + flex: 1; + max-width: 200px; + margin-right: 10px; + margin-top: 25px; + border: 1px solid #ccc; + border-radius: 5px; + padding: 10px; +} + +.grpc-request-examples-container h3 { + margin: 0; + padding-top: 1px; + padding-bottom: 9px; + border-bottom: 1px solid #d8d8d8; + text-align: center; + font-size: 18px; +} + +.grpc-request-response { + margin-top: 24px; + border: none; + padding: 0; + flex: 1; +} + +.grpc-request-response ul.ui-tabs-nav { + margin: 0; + padding: 0; + border: none; + background: none; +} + +.grpc-request-response li.ui-tabs-tab { + border: 1px solid #ccc; + margin: 0 -1px 0 0; + padding: 4px 8px; + border-top-right-radius: 6px; + border-top-left-radius: 6px; +} + +.grpc-request-response li.ui-tabs-tab a:active { + outline: 0; +} + +.grpc-request-response li.ui-tabs-tab a:focus { + outline: 0; +} + +.grpc-request-response li.ui-tabs-active { + background: none; + z-index: 1; + border: 1px solid #ccc; + border-bottom: 1px solid white; + color: black; +} + +.grpc-request-response li.ui-tabs-active a { + color: black; +} + +.grpc-request-response .grpc-tabcontent.ui-tabs-panel { + border-top-right-radius: 6px; + border-bottom-right-radius: 6px; + border-bottom-left-radius: 6px; + position: relative; + top: -1px; + z-index: 0; + border: 1px solid #ccc; + margin: 0; + padding: 20px; +} + +.grpc-request-response .grpc-tabcontent.ui-tabs-panel h3 { + margin-top: 0; + margin-bottom: 16px; + font-weight: bold; + font-size: 18px; +} + +.grpc-request-examples { + list-style-type: none; + margin: 0; + padding: 0; +} + +ol.grpc-request-examples { + margin-top: 16px; +} + +.grpc-request-examples li { + padding: 10px; +} + +.grpc-request-examples li:hover { + background-color: #f4f4f4; +} + +.grpc-request-examples .ui-selected { + background: #f0f0f0; + font-weight: 500; +} + +.grpc-form button { + border-radius: 3px; + background: #f0f0f0; + border-top: 1px solid #ccc; + border-right: 1px solid #bbb; + border-bottom: 1px solid #aaa; + border-left: 1px solid #ccc; + padding: 10px 20px; + font-size: 110%; +} + +.grpc-form button:disabled { + border: 1px solid #ddd; + color: #ccc; + background: #f8f8f8; +} + +.grpc-form textarea { + width: 100%; + border: 1px solid #aaa; + margin-bottom: 16px; + font-family: "Courier New", Courier, monospace; + font-size: 14px; +} + +textarea.grpc-request-raw-text { + height: 200px; +} + +.grpc-request-timeout { + margin-bottom: 20px; +} + +.grpc-request-timeout input { + border: 1px solid #888; +} + +table.grpc-request-metadata-form { + margin: 0 0 0 4px; + border-collapse: collapse; +} + +.grpc-request-metadata-form th { + background-color: #eee; + border-bottom: 1px solid #ddd; + color: #222; + padding: 4px; + text-align: center; + font-size: 80%; +} + +.grpc-request-metadata-form td { + padding: 8px 0 0 8px; +} + +.grpc-request-metadata-form td:first-child { + padding-left: 0; +} + +.grpc-request-metadata-form th.name { + min-width: 208px; +} + +.grpc-request-metadata-form th.value { + min-width: 328px; +} + +.grpc-request-metadata-form input { + font-family: "Courier New", Courier, monospace; + font-size: 14px; + border: 1px solid #888; +} + +.grpc-request-metadata { + margin-bottom: 20px; +} + +.grpc-request-form { + margin-bottom: 20px; +} + +.grpc-request-form div#root { + margin-left: 4px; +} + +.grpc-request-form div.input_container { + padding: 16px; + border-radius: 2px; + display: inline-block; +} + +.grpc-request-form td { + padding: 16px 0 0 16px; + font-size: 13px; +} + +.grpc-request-form td:first-of-type { + padding-left: 0; +} + +.grpc-request-form tr:first-of-type > td { + padding-top: 0; +} + +.grpc-request-form th { + padding: 16px 0 0 16px; + text-align: left; + color: #888; + font-weight: normal; +} + +.grpc-request-form th:first-of-type { + padding-left: 0; +} + +.grpc-request-form tr:first-of-type > th { + padding-top: 0; +} + +.grpc-request-form h4 { + padding: 0 0 3px 0; + margin: 0; + font-size: 95%; + font-weight: bold; + text-align: center; + font-style: italic; +} + +.grpc-request-form textarea { + margin: 0; + width: auto; +} + +.grpc-request-form td.toggle_presence span.required { + margin: 0 8px 0 18px; + color: #aaa; +} + +.grpc-request-form td.toggle_presence { + text-align: center; +} + +.grpc-request-form td input[type=checkbox] { + margin: 0 8px 0 18px; +} + +.grpc-request-form td input[type=radio] { + margin: 0; +} + +.grpc-request-form td.empty_message { + text-align: center; + font-style: italic; +} + +.grpc-request-form td.name { + text-align: right; + font-family: "Courier New", Courier, monospace; + font-size: 75%; +} + +.grpc-request-form td.oneof_none { + text-align: right; + font-family: "Courier New", Courier, monospace; + font-size: 90%; + font-style: italic; + font-weight: bold; +} + +.grpc-request-form td.name strong { + font-size: 120%; +} + +.grpc-request-form .grpc-bytes-container { + display: flex; + align-items: center; +} + +.grpc-request-form .grpc-bytes-container label.grpc-file-button { + border-radius: 2px; + background: #f0f0f0; + border-top: 1px solid #ccc; + border-right: 1px solid #bbb; + border-bottom: 1px solid #aaa; + border-left: 1px solid #ccc; + padding: 4px 8px; + font-size: 90%; +} + +.grpc-request-form .grpc-bytes-container label.grpc-file-button.disabled { + border: 1px solid #ddd; + color: #ccc; + background: #f8f8f8; +} + +.ui-tooltip.grpc-field-description { + white-space: pre; + font-family: "Courier New", Courier, monospace; + max-width: none; +} + +.grpc-request-form td.toggle_presence { + width: 1px; +} + +.grpc-request-form td.array_button { + width: 1px; +} + +.grpc-request-form div.json-entry { + display: inline-block; +} + +.grpc-request-form div.oneof { + border-left: 2px dotted #ddd; + border-radius: 8px; + padding: 12px 0 12px 16px; +} + +.grpc-request-form div.one-of-3 { + border: 1px dashed #ccc; +} + +.grpc-request-form div.two-of-3 { + border: 1px dotted #d0d0d0; +} + +.grpc-request-form div.three-of-3 { + border: 1px solid #ddd; +} + +.grpc-form .grpc-request-table button { + padding: 2px 4px; + border-radius: 3px; + font-size: 12px; + font-family: "Courier New", Courier, monospace; +} + +.grpc-form .grpc-request-table button.delete { + background-color: #f66; + color: white; + border: 1px solid #c44; +} + +.grpc-form .grpc-request-table button.add { + background-color: #0c0; + color: white; + border: 1px solid #090; +} + +.grpc-request-form textarea:disabled { + color: #ccc; + border: 1px solid #ddd; +} + +.grpc-request-form select:disabled { + color: #ccc; +} + +.grpc-request-form input[type=text]:disabled { + color: #ccc; + border: 1px solid #ccc; +} + +/*.grpc-request-form input[type=text] {*/ +/* border: 1px solid #aaa;*/ +/*}*/ + +.grpc-request-form .unknown { + color: #fa6; + font-style: italic; + font-size: 90%; +} + +.grpc-request-form tr.unknown td { + padding-top: 0; +} + +.grpc-request-form .null { + color: #ccc; + font-style: italic; +} + +.grpc-request-form .duration-unit { + font-style: italic; + margin-left: 6px; +} + +.grpc-request-form div.grpc-timestamp { + display: inline-block; +} + +.grpc-request-form div.grpc-timestamp > input { + margin: 4px; +} + +.grpc-request-form .invalid-input { + border: 3px dotted #f46; + background-color: #ffe0e8; +} + +.grpc-request-form input[type=text].invalid-input { + border: 3px dotted #f46; +} + +.grpc-request-form textarea.invalid-input { + border: 3px dotted #f46; +} + +.grpc-request-form div.invalid-input input { + background-color: #ffe0e8; +} + +.grpc-request-timeout input.invalid-input { + border: 3px dotted #f46; + background-color: #ffe0e8; +} + +.grpc-timestamp-picker.ui-datepicker span.ui-icon { + background: none; + text-indent: 0; + font-size: 12px; + font-weight: normal; + text-align: center; +} + +.grpc-request-form .bool-input { + padding: 3px; + display: inline-block; +} + +.grpc-request-form label { + font-weight: normal; + margin: 0 15px 0 8px; +} + +.grpc-request-form label.disabled { + color: #ccc; +} + +.grpc-form span.add-row-label { + font-size: 13.2px; + margin: 2px; +} + +.grpc-metadata-table td, .grpc-metadata-table th { + padding: 8px; + border: 1px solid #eee; + font-family: "courier new", courier, monospace; + font-size: 14px; +} + +.grpc-metadata-table td.none { + border: none; + font-style: italic; + padding: 0; +} + +textarea.grpc-response-textarea { + font-family: "Courier New", Courier, monospace; + height: 200px; +} + +.grpc-response-error-details textarea.grpc-response-textarea { + height: 100px; +} + +.grpc-response-error-details-container h4 { + margin: 12px 0 6px 0; + font-size: 90%; +} + +.grpc-response-req-stats { + font-size: 110%; + padding-bottom: 8px; + color: #800; + font-style: italic; +} + +.grpc-response-headers { + margin-bottom: 16px; +} + +.grpc-response-data { + padding-bottom: 16px; +} + +.grpc-response-data td { + padding: 12px 0 0 12px; + font-size: 13px; + font-family: "courier new", courier, monospace; +} + +.grpc-response-data td.name { + text-align: right; + font-weight: bold; +} + +.grpc-response-data tr:first-of-type > td { + padding-top: 0; +} + +.grpc-response-data td:first-of-type { + padding-left: 0; +} + +.grpc-response-data div.output_container.root { + display: inline-block; + margin-top: 16px; +} + +.grpc-response-data div.output_container.root:first-of-type { + margin-top: 0; +} + +.grpc-response-data div.output_container { + padding: 16px; + border-radius: 2px; +} + +.grpc-response-data .null { + color: #ccc; + font-style: italic; +} + +.grpc-response-data div.one-of-3 { + border: 1px dashed #ccc; +} + +.grpc-response-data div.two-of-3 { + border: 1px dotted #d0d0d0; +} + +.grpc-response-data div.three-of-3 { + border: 1px solid #ddd; +} + +.grpc-response-error { + font-size: 120%; + color: #f44; + padding-bottom: 16px; +} + +.grpc-response-error .grpc-response-error-num { + color: #faa; +} + +.grpc-response-error .grpc-response-error-msg { + font-size: 14px; + font-family: "Courier New", Courier, monospace; + color: #c00; +} + +button.grpc-history-clear, button.grpc-history-save { + margin-bottom: 16px; + font-size: 96%; + padding: 8px 15px; +} + +.grpc-history-list button.delete { + background-color: #f66; + color: white; + border: 1px solid #c44; + padding: 2px 4px; + border-radius: 3px; + font-size: 12px; + font-family: "Courier New", Courier, monospace; +} + +.grpc-history-list button.load { + padding: 6px 12px 6px; + font-size: 100%; + margin: 0 24px; +} + +.grpc-history-list .history-item-header { + align-items: center; + outline: none; + background: inherit; + border: none; + border-bottom: 1px solid #eee; + border-radius: 0; + margin: 0; + padding: 10px; +} + +.grpc-history-list .history-item-header.ui-state-active { + color: #000; +} + +.grpc-history-list > .ui-accordion:first-child { + border-top: 1px solid #eee; +} + +.grpc-history-list .history-item-panel { + border-radius: 0; +} + +.grpc-history-list .history-item-header span { + display: inline-flex; + align-items: center; +} + +.grpc-history-list .history-item-header .history-item-time { + width: 180px; +} + +.grpc-history-list .history-item-header .history-item-duration { + width: 80px; +} + +.grpc-history-list .history-item-header .history-item-result { + width: 144px; +} + +.grpc-history-list .history-item-header .history-item-result.error { + color: #a00; +} + +.grpc-history-list .history-item-header .history-item-method { + font-weight: bold; +} + +.grpc-history-list .history-item-header .history-item-method.invalid-history { + text-decoration: line-through; + color: #800; +} + +.grpc-history-list .history-item-header .history-item-messages { + color: #888; + font-size: 90%; + padding-left: 30px; +} + +.grpc-history-list .history-item-panel { + background-color: #fcfcfc; + padding: 1em; +} + +.grpc-history-list .history-item-panel .history-detail-heading { + font-weight: bold; +} + +.grpc-history-list .history-item-panel .history-detail-request .request-json { + font-size: 1.0em; + font-family: "Courier New", Courier, monospace; + margin: 1.0em 0 0 0; +} + +.grpc-history-list .history-item-panel .history-detail-metadata .history-detail-heading { + margin: 1.0em 0 0 0; +} + +.grpc-history-list .history-item-panel .history-detail-metadata table { + margin: 1.0em 0 0 0; + font-size: 1.0em; + font-family: "Courier New", Courier, monospace; +} + +.grpc-history-list .history-item-panel .history-detail-metadata th { + font-weight: bold; + text-align: left; + color: #555; +} + +.grpc-history-list .history-item-panel .history-detail-metadata th:after { + content: ":"; +} + +.grpc-history-list .history-item-panel .history-detail-metadata td { + padding-left: 12px; +} diff --git a/studio/src/components/ProtobufForm/AccordionField.tsx b/studio/src/components/ProtobufForm/AccordionField.tsx deleted file mode 100644 index 833819c..0000000 --- a/studio/src/components/ProtobufForm/AccordionField.tsx +++ /dev/null @@ -1,74 +0,0 @@ -import {DescriptorProto, FieldDescriptorProto, FieldDescriptorProto_Label} from "@bufbuild/protobuf"; -import React, {FC} from "react"; -import {useFieldArray} from "react-hook-form"; -import {InputFormContents, InputFormContentsProps} from "@/components/ProtobufForm/InputFormContents"; -import {Accordion, AccordionHeader, AccordionItem, AccordionPanel, Button} from "@fluentui/react-components"; -import {GRPCInputFormProps} from "@/components/ProtobufForm/ProtobufInputForm"; - -type GrpcFormField = { - type: 'field' - name: string - field: FieldDescriptorProto -} - -type GrpcFormOneof = { - type: 'oneof' - name: string - fields: FieldDescriptorProto[] -} - -export type ProtobufFormFieldType = GrpcFormField | GrpcFormOneof - -interface GRPCInputFormContentsProps extends GRPCInputFormProps { - field: ProtobufFormFieldType - desc: DescriptorProto -} - -export const AccordionField: FC = (props) => { - const {control, baseFieldName, field, fieldPath, desc} = props; - - const {fields: formFields, append, prepend, remove, swap, move, insert} = useFieldArray({ - control, name: baseFieldName || 'input', - }); - - const formatField = (field: FieldDescriptorProto) => { - const inputProps: InputFormContentsProps = { - ...props, field, fieldPath: `${fieldPath}.${desc.name}` - } - - // TODO breadchris for some reason FieldDescriptorProto_Label.REPEATED is a number and field.label is a string - // @ts-ignore - if (field.label === 'LABEL_REPEATED' || field.label === FieldDescriptorProto_Label.REPEATED) { - return (
- {formFields.map((f, index) => (
- - -
))} - -
) - } - return (<> - - ) - } - - const panelContents = () => { - if (field.type === 'field') { - return formatField(field.field) - } else { - if (!field.fields) { - return null; - } - return ( - {field.fields.map((f) => ( - {f.name} - {formatField(f)} - ))} - ) - } - } - return ( - {field.name} - {panelContents()} - ) -} diff --git a/studio/src/components/ProtobufForm/InputFormContents.tsx b/studio/src/components/ProtobufForm/InputFormContents.tsx deleted file mode 100644 index fe96ec2..0000000 --- a/studio/src/components/ProtobufForm/InputFormContents.tsx +++ /dev/null @@ -1,109 +0,0 @@ -import {FieldDescriptorProto, FieldDescriptorProto_Type} from "@bufbuild/protobuf"; -import React, {FC, useState} from "react"; -import {useWatch} from "react-hook-form"; -import {Button, Field, Select, Textarea} from "@fluentui/react-components"; -import {GRPCInputFormProps, ProtobufInputForm} from "@/components/ProtobufForm/ProtobufInputForm"; -import { GRPCTypeInfo } from "@/rpc/project_pb"; - -const getFieldName = (baseFieldName: string | undefined, field: FieldDescriptorProto, idx?: number): string => { - if (!baseFieldName) { - return field.name || ''; - } - if (idx !== undefined) { - return `${baseFieldName}.${idx}.${field.name}`; - } - return `${baseFieldName}.${field.name}`; -} - -export interface InputFormContentsProps extends GRPCInputFormProps { - field: FieldDescriptorProto - index?: number -} - -export const InputFormContents: FC = (props) => { - const { - grpcInfo, - baseFieldName, - field, - register, - control, - index, - fieldPath, - setValue, - } = props; - const [visibleTypes, setVisibleTypes] = useState([]); - - const { enumLookup, descLookup } = grpcInfo; - - const fieldFormName = getFieldName(baseFieldName, field, index); - const fieldValue = useWatch({ - control, - name: fieldFormName, - defaultValue: '', - }); - - const useType = (typeName: string) => { - //setValue(fieldFormName, {}); - setVisibleTypes([...visibleTypes, typeName]); - } - - if (field.typeName) { - // field.typeName == .name.othername, remove the leading dot - const typeName = field.typeName.substring(1); - const fieldType = descLookup[typeName]; - if (fieldType) { - return ( -
- {visibleTypes.includes(typeName) ? ( - <> - - - - ) : ( - - )} -
- ) - } - } - // TODO breadchris this should be checking for an actual type, not a string, field.type is a string, not a number - // @ts-ignore - if (field.type === "TYPE_ENUM" || field.type === FieldDescriptorProto_Type.ENUM) { - if (!field.typeName) { - throw new Error("Enum field has no type name"); - } - const enumTypeName = `${fieldPath}.${field.name}`; - const enumType = enumLookup[enumTypeName]; - console.log(enumLookup, enumTypeName, enumType) - if (!enumType) { - throw new Error(`Enum type ${fieldPath}.${field.name} not found in ${Object.keys(enumLookup)}`); - } - - return ( - <> - - - - ) - } - return ( - -