From bbc1d41746e4e9de56f6f0e007bc1bbea325502e Mon Sep 17 00:00:00 2001 From: Marc McIntosh Date: Mon, 14 Jul 2025 18:55:50 +0200 Subject: [PATCH 1/3] feat: re-enable viewing the raw thread. --- refact-agent/gui/generated/documents.ts | 170 +++++++++++++++--- refact-agent/gui/generated/graphql/gql.ts | 6 +- refact-agent/gui/generated/graphql/graphql.ts | 133 ++++++++++++-- refact-agent/gui/generated/schema.graphql | 74 ++++++-- refact-agent/gui/src/components/Chat/Chat.tsx | 104 +++++------ .../components/ChatRawJSON/ChatRawJSON.tsx | 9 +- .../features/ThreadHistory/ThreadHistory.tsx | 50 +++--- .../gui/src/services/graphql/flexus.graphql | 2 + 8 files changed, 401 insertions(+), 147 deletions(-) diff --git a/refact-agent/gui/generated/documents.ts b/refact-agent/gui/generated/documents.ts index ee21e5656..ac31069c4 100644 --- a/refact-agent/gui/generated/documents.ts +++ b/refact-agent/gui/generated/documents.ts @@ -66,6 +66,12 @@ export type FAuditRecordOutput = { audit_ts: Scalars['Float']['output']; }; +export type FBotInstallOutput = { + __typename?: 'FBotInstallOutput'; + marketable_name: Scalars['String']['output']; + marketable_version: Scalars['String']['output']; +}; + export type FCloudTool = { __typename?: 'FCloudTool'; ctool_confirmed_exists_ts?: Maybe; @@ -177,6 +183,11 @@ export type FExternalDataSourceSubs = { news_payload_id: Scalars['String']['output']; }; +export type FKanbanTaskInput = { + state: Scalars['String']['input']; + title: Scalars['String']['input']; +}; + export type FKnowledgeItemInput = { iknow_is_core?: Scalars['Boolean']['input']; iknow_memory: Scalars['String']['input']; @@ -220,6 +231,14 @@ export type FKnowledgeItemSubs = { news_pubsub: Scalars['String']['output']; }; +export type FMarketplaceExpertInput = { + fexp_allow_tools: Scalars['String']['input']; + fexp_block_tools: Scalars['String']['input']; + fexp_name: Scalars['String']['input']; + fexp_python_kernel: Scalars['String']['input']; + fexp_system_prompt: Scalars['String']['input']; +}; + export type FMassInvitationOutput = { __typename?: 'FMassInvitationOutput'; fuser_id: Scalars['String']['output']; @@ -252,23 +271,49 @@ export type FPermissionSubs = { export type FPersonaInput = { located_fgroup_id: Scalars['String']['input']; - persona_expert1_fexp_name?: InputMaybe; - persona_expert2_fexp_name?: InputMaybe; - persona_module: Scalars['String']['input']; + persona_discounts?: InputMaybe; + persona_marketable_name: Scalars['String']['input']; + persona_marketable_version: Scalars['String']['input']; persona_name: Scalars['String']['input']; persona_setup: Scalars['String']['input']; }; +export type FPersonaKanbanSubs = { + __typename?: 'FPersonaKanbanSubs'; + news_action: Scalars['String']['output']; + news_bucket: Scalars['String']['output']; + news_payload_id: Scalars['String']['output']; + news_payload_task?: Maybe; +}; + +export type FPersonaKanbanTaskOutput = { + __typename?: 'FPersonaKanbanTaskOutput'; + ktask_blocks_ktask_id?: Maybe; + ktask_budget: Scalars['Int']['output']; + ktask_details: Scalars['JSON']['output']; + ktask_done_ts: Scalars['Float']['output']; + ktask_failed_ts: Scalars['Float']['output']; + ktask_id: Scalars['String']['output']; + ktask_inbox_provenance: Scalars['JSON']['output']; + ktask_inbox_ts: Scalars['Float']['output']; + ktask_inprogress_ft_id: Scalars['String']['output']; + ktask_inprogress_ts: Scalars['Float']['output']; + ktask_title: Scalars['String']['output']; + ktask_todo_ts: Scalars['Float']['output']; + persona_id: Scalars['String']['output']; +}; + export type FPersonaOutput = { __typename?: 'FPersonaOutput'; located_fgroup_id: Scalars['String']['output']; owner_fuser_id: Scalars['String']['output']; persona_archived_ts: Scalars['Float']['output']; persona_created_ts: Scalars['Float']['output']; - persona_expert1_fexp_name?: Maybe; - persona_expert2_fexp_name?: Maybe; + persona_discounts?: Maybe; + persona_enabled: Scalars['Boolean']['output']; persona_id: Scalars['String']['output']; - persona_module: Scalars['String']['output']; + persona_marketable_name: Scalars['String']['output']; + persona_marketable_version: Scalars['String']['output']; persona_name: Scalars['String']['output']; persona_setup: Scalars['JSON']['output']; }; @@ -276,9 +321,8 @@ export type FPersonaOutput = { export type FPersonaPatch = { located_fgroup_id?: InputMaybe; persona_archived_ts?: InputMaybe; - persona_expert1_fexp_name?: InputMaybe; - persona_expert2_fexp_name?: InputMaybe; - persona_module?: InputMaybe; + persona_enabled?: InputMaybe; + persona_marketable_version?: InputMaybe; persona_name?: InputMaybe; persona_setup?: InputMaybe; }; @@ -332,11 +376,12 @@ export type FThreadInput = { ft_app_specific?: Scalars['String']['input']; ft_error?: Scalars['String']['input']; ft_fexp_id: Scalars['String']['input']; + ft_persona_id?: InputMaybe; + ft_subchat_dest_ft_id?: InputMaybe; ft_title: Scalars['String']['input']; ft_toolset?: Scalars['String']['input']; located_fgroup_id: Scalars['String']['input']; owner_shared: Scalars['Boolean']['input']; - parent_ft_id?: InputMaybe; }; export type FThreadMessageInput = { @@ -410,13 +455,14 @@ export type FThreadOutput = { ft_need_assistant: Scalars['Int']['output']; ft_need_tool_calls: Scalars['Int']['output']; ft_need_user: Scalars['Int']['output']; + ft_persona_id?: Maybe; + ft_subchat_dest_ft_id?: Maybe; ft_title: Scalars['String']['output']; ft_toolset?: Maybe; ft_updated_ts: Scalars['Float']['output']; located_fgroup_id: Scalars['String']['output']; owner_fuser_id: Scalars['String']['output']; owner_shared: Scalars['Boolean']['output']; - parent_ft_id?: Maybe; }; export type FThreadPatch = { @@ -426,11 +472,11 @@ export type FThreadPatch = { ft_confirmation_request?: InputMaybe; ft_confirmation_response?: InputMaybe; ft_error?: InputMaybe; + ft_subchat_dest_ft_id?: InputMaybe; ft_title?: InputMaybe; ft_toolset?: InputMaybe; located_fgroup_id?: InputMaybe; owner_shared?: InputMaybe; - parent_ft_id?: InputMaybe; }; export type FThreadSubs = { @@ -504,6 +550,9 @@ export type Mutation = { __typename?: 'Mutation'; api_key_delete: Scalars['Boolean']['output']; api_key_generate: FApiKeyOutput; + bot_activate: FThreadOutput; + bot_arrange_kanban_situation: Scalars['Boolean']['output']; + bot_install_from_marketplace: Scalars['Boolean']['output']; cloudtool_post_result: Scalars['Boolean']['output']; create_captured_thread: FThreadOutput; email_confirm: EmailConfirmResult; @@ -525,6 +574,7 @@ export type Mutation = { knowledge_item_mass_group_patch: Scalars['Int']['output']; knowledge_item_patch: FKnowledgeItemOutput; make_sure_have_expert: Scalars['String']['output']; + marketplace_upsert_dev_bot: FBotInstallOutput; password_change: Scalars['Boolean']['output']; permission_delete: Scalars['Boolean']['output']; permission_patch: FPermissionOutput; @@ -564,6 +614,34 @@ export type MutationApi_Key_DeleteArgs = { }; +export type MutationBot_ActivateArgs = { + activation_type: Scalars['String']['input']; + first_calls: Scalars['String']['input']; + first_question: Scalars['String']['input']; + localtools: Scalars['String']['input']; + persona_id: Scalars['String']['input']; + title: Scalars['String']['input']; + who_is_asking: Scalars['String']['input']; +}; + + +export type MutationBot_Arrange_Kanban_SituationArgs = { + persona_id: Scalars['String']['input']; + tasks: Array; + ws_id: Scalars['String']['input']; +}; + + +export type MutationBot_Install_From_MarketplaceArgs = { + inside_fgroup_id: Scalars['String']['input']; + new_setup: Scalars['String']['input']; + persona_id: Scalars['String']['input']; + persona_marketable_name: Scalars['String']['input']; + persona_marketable_version: Scalars['String']['input']; + persona_name: Scalars['String']['input']; +}; + + export type MutationCloudtool_Post_ResultArgs = { input: CloudtoolResultInput; }; @@ -674,13 +752,29 @@ export type MutationKnowledge_Item_PatchArgs = { export type MutationMake_Sure_Have_ExpertArgs = { - fexp_name_without_version: Scalars['String']['input']; + fexp_name: Scalars['String']['input']; fgroup_id?: InputMaybe; owner_fuser_id?: InputMaybe; + python_kernel: Scalars['String']['input']; system_prompt: Scalars['String']['input']; }; +export type MutationMarketplace_Upsert_Dev_BotArgs = { + marketable_description: Scalars['String']['input']; + marketable_expert_scheduled: FMarketplaceExpertInput; + marketable_expert_setup: FMarketplaceExpertInput; + marketable_expert_subchat: FMarketplaceExpertInput; + marketable_expert_todo: FMarketplaceExpertInput; + marketable_github_repo: Scalars['String']['input']; + marketable_name: Scalars['String']['input']; + marketable_run_this: Scalars['String']['input']; + marketable_setup_default: Scalars['String']['input']; + marketable_version: Scalars['String']['input']; + ws_id: Scalars['String']['input']; +}; + + export type MutationPassword_ChangeArgs = { new_password: Scalars['String']['input']; old_password: Scalars['String']['input']; @@ -1109,6 +1203,7 @@ export type Subscription = { external_data_sources_in_group: FExternalDataSourceSubs; knowledge_items_in_group: FKnowledgeItemSubs; permissions_in_group_subs: FPermissionSubs; + persona_kanban_subs: FPersonaKanbanSubs; personas_in_group: FPersonaSubs; threads_in_group: FThreadSubs; tree_subscription: TreeUpdateSubs; @@ -1157,6 +1252,14 @@ export type SubscriptionPermissions_In_Group_SubsArgs = { }; +export type SubscriptionPersona_Kanban_SubsArgs = { + limit_done?: Scalars['Int']['input']; + limit_garbage?: Scalars['Int']['input']; + limit_inbox?: Scalars['Int']['input']; + persona_id: Scalars['String']['input']; +}; + + export type SubscriptionPersonas_In_GroupArgs = { filter?: Array; limit?: Scalars['Int']['input']; @@ -1233,7 +1336,7 @@ export type MessagesSubscriptionSubscriptionVariables = Exact<{ }>; -export type MessagesSubscriptionSubscription = { __typename?: 'Subscription', comprehensive_thread_subs: { __typename?: 'FThreadMessageSubs', news_action: string, news_payload_id: string, news_payload_thread_message?: { __typename?: 'FThreadMessageOutput', ft_app_specific?: any | null, ftm_belongs_to_ft_id: string, ftm_alt: number, ftm_num: number, ftm_prev_alt: number, ftm_role: string, ftm_content?: any | null, ftm_tool_calls?: any | null, ftm_call_id: string, ftm_usage?: any | null, ftm_created_ts: number, ftm_user_preferences?: any | null } | null, stream_delta?: { __typename?: 'FThreadDelta', ftm_role: string, ftm_content: any } | null, news_payload_thread?: { __typename?: 'FThreadOutput', located_fgroup_id: string, ft_id: string, ft_need_user: number, ft_need_assistant: number, ft_fexp_id: string, ft_confirmation_request?: any | null, ft_confirmation_response?: any | null } | null } }; +export type MessagesSubscriptionSubscription = { __typename?: 'Subscription', comprehensive_thread_subs: { __typename?: 'FThreadMessageSubs', news_action: string, news_payload_id: string, news_payload_thread_message?: { __typename?: 'FThreadMessageOutput', ft_app_specific?: any | null, ftm_belongs_to_ft_id: string, ftm_alt: number, ftm_num: number, ftm_prev_alt: number, ftm_role: string, ftm_content?: any | null, ftm_tool_calls?: any | null, ftm_call_id: string, ftm_usage?: any | null, ftm_created_ts: number, ftm_user_preferences?: any | null } | null, stream_delta?: { __typename?: 'FThreadDelta', ftm_role: string, ftm_content: any } | null, news_payload_thread?: { __typename?: 'FThreadOutput', located_fgroup_id: string, ft_id: string, ft_need_user: number, ft_need_assistant: number, ft_fexp_id: string, ft_confirmation_request?: any | null, ft_confirmation_response?: any | null, ft_title: string } | null } }; export type MessageCreateMultipleMutationVariables = Exact<{ input: FThreadMultipleMessagesInput; @@ -1304,7 +1407,7 @@ export type WorkspaceTreeSubscription = { __typename?: 'Subscription', tree_subs export const ThreadsPageSubsDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"subscription","name":{"kind":"Name","value":"ThreadsPageSubs"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"located_fgroup_id"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"limit"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"Int"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"threads_in_group"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"located_fgroup_id"},"value":{"kind":"Variable","name":{"kind":"Name","value":"located_fgroup_id"}}},{"kind":"Argument","name":{"kind":"Name","value":"limit"},"value":{"kind":"Variable","name":{"kind":"Name","value":"limit"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"news_action"}},{"kind":"Field","name":{"kind":"Name","value":"news_payload_id"}},{"kind":"Field","name":{"kind":"Name","value":"news_payload"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"owner_fuser_id"}},{"kind":"Field","name":{"kind":"Name","value":"owner_shared"}},{"kind":"Field","name":{"kind":"Name","value":"ft_id"}},{"kind":"Field","name":{"kind":"Name","value":"ft_title"}},{"kind":"Field","name":{"kind":"Name","value":"ft_error"}},{"kind":"Field","name":{"kind":"Name","value":"ft_updated_ts"}},{"kind":"Field","name":{"kind":"Name","value":"ft_locked_by"}},{"kind":"Field","name":{"kind":"Name","value":"ft_need_assistant"}},{"kind":"Field","name":{"kind":"Name","value":"ft_need_tool_calls"}},{"kind":"Field","name":{"kind":"Name","value":"ft_archived_ts"}},{"kind":"Field","name":{"kind":"Name","value":"ft_created_ts"}}]}}]}}]}}]} as unknown as DocumentNode; export const DeleteThreadDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"DeleteThread"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"id"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"thread_delete"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"id"},"value":{"kind":"Variable","name":{"kind":"Name","value":"id"}}}]}]}}]} as unknown as DocumentNode; export const CreateThreadDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"CreateThread"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"input"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"FThreadInput"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"thread_create"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"input"},"value":{"kind":"Variable","name":{"kind":"Name","value":"input"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"ft_id"}}]}}]}}]} as unknown as DocumentNode; -export const MessagesSubscriptionDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"subscription","name":{"kind":"Name","value":"MessagesSubscription"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"ft_id"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"want_deltas"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"Boolean"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"comprehensive_thread_subs"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"ft_id"},"value":{"kind":"Variable","name":{"kind":"Name","value":"ft_id"}}},{"kind":"Argument","name":{"kind":"Name","value":"want_deltas"},"value":{"kind":"Variable","name":{"kind":"Name","value":"want_deltas"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"news_action"}},{"kind":"Field","name":{"kind":"Name","value":"news_payload_id"}},{"kind":"Field","name":{"kind":"Name","value":"news_payload_thread_message"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"ft_app_specific"}},{"kind":"Field","name":{"kind":"Name","value":"ftm_belongs_to_ft_id"}},{"kind":"Field","name":{"kind":"Name","value":"ftm_alt"}},{"kind":"Field","name":{"kind":"Name","value":"ftm_num"}},{"kind":"Field","name":{"kind":"Name","value":"ftm_prev_alt"}},{"kind":"Field","name":{"kind":"Name","value":"ftm_role"}},{"kind":"Field","name":{"kind":"Name","value":"ftm_content"}},{"kind":"Field","name":{"kind":"Name","value":"ftm_tool_calls"}},{"kind":"Field","name":{"kind":"Name","value":"ftm_call_id"}},{"kind":"Field","name":{"kind":"Name","value":"ftm_usage"}},{"kind":"Field","name":{"kind":"Name","value":"ftm_created_ts"}},{"kind":"Field","name":{"kind":"Name","value":"ftm_user_preferences"}}]}},{"kind":"Field","name":{"kind":"Name","value":"stream_delta"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"ftm_role"}},{"kind":"Field","name":{"kind":"Name","value":"ftm_content"}}]}},{"kind":"Field","name":{"kind":"Name","value":"news_payload_thread"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"located_fgroup_id"}},{"kind":"Field","name":{"kind":"Name","value":"ft_id"}},{"kind":"Field","name":{"kind":"Name","value":"ft_need_user"}},{"kind":"Field","name":{"kind":"Name","value":"ft_need_assistant"}},{"kind":"Field","name":{"kind":"Name","value":"ft_fexp_id"}},{"kind":"Field","name":{"kind":"Name","value":"ft_confirmation_request"}},{"kind":"Field","name":{"kind":"Name","value":"ft_confirmation_response"}}]}}]}}]}}]} as unknown as DocumentNode; +export const MessagesSubscriptionDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"subscription","name":{"kind":"Name","value":"MessagesSubscription"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"ft_id"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"want_deltas"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"Boolean"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"comprehensive_thread_subs"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"ft_id"},"value":{"kind":"Variable","name":{"kind":"Name","value":"ft_id"}}},{"kind":"Argument","name":{"kind":"Name","value":"want_deltas"},"value":{"kind":"Variable","name":{"kind":"Name","value":"want_deltas"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"news_action"}},{"kind":"Field","name":{"kind":"Name","value":"news_payload_id"}},{"kind":"Field","name":{"kind":"Name","value":"news_payload_thread_message"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"ft_app_specific"}},{"kind":"Field","name":{"kind":"Name","value":"ftm_belongs_to_ft_id"}},{"kind":"Field","name":{"kind":"Name","value":"ftm_alt"}},{"kind":"Field","name":{"kind":"Name","value":"ftm_num"}},{"kind":"Field","name":{"kind":"Name","value":"ftm_prev_alt"}},{"kind":"Field","name":{"kind":"Name","value":"ftm_role"}},{"kind":"Field","name":{"kind":"Name","value":"ftm_content"}},{"kind":"Field","name":{"kind":"Name","value":"ftm_tool_calls"}},{"kind":"Field","name":{"kind":"Name","value":"ftm_call_id"}},{"kind":"Field","name":{"kind":"Name","value":"ftm_usage"}},{"kind":"Field","name":{"kind":"Name","value":"ftm_created_ts"}},{"kind":"Field","name":{"kind":"Name","value":"ftm_user_preferences"}}]}},{"kind":"Field","name":{"kind":"Name","value":"stream_delta"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"ftm_role"}},{"kind":"Field","name":{"kind":"Name","value":"ftm_content"}}]}},{"kind":"Field","name":{"kind":"Name","value":"news_payload_thread"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"located_fgroup_id"}},{"kind":"Field","name":{"kind":"Name","value":"ft_id"}},{"kind":"Field","name":{"kind":"Name","value":"ft_need_user"}},{"kind":"Field","name":{"kind":"Name","value":"ft_need_assistant"}},{"kind":"Field","name":{"kind":"Name","value":"ft_fexp_id"}},{"kind":"Field","name":{"kind":"Name","value":"ft_confirmation_request"}},{"kind":"Field","name":{"kind":"Name","value":"ft_confirmation_response"}},{"kind":"Field","name":{"kind":"Name","value":"ft_title"}}]}}]}}]}}]} as unknown as DocumentNode; export const MessageCreateMultipleDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"MessageCreateMultiple"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"input"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"FThreadMultipleMessagesInput"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"thread_messages_create_multiple"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"input"},"value":{"kind":"Variable","name":{"kind":"Name","value":"input"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"count"}}]}}]}}]} as unknown as DocumentNode; export const ThreadPatchDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"ThreadPatch"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"id"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"message"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"thread_patch"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"id"},"value":{"kind":"Variable","name":{"kind":"Name","value":"id"}}},{"kind":"Argument","name":{"kind":"Name","value":"patch"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"ft_error"},"value":{"kind":"Variable","name":{"kind":"Name","value":"message"}}}]}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"ft_id"}}]}}]}}]} as unknown as DocumentNode; export const ExpertsForGroupDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"ExpertsForGroup"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"located_fgroup_id"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"experts_effective_list"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"located_fgroup_id"},"value":{"kind":"Variable","name":{"kind":"Name","value":"located_fgroup_id"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"fexp_id"}},{"kind":"Field","name":{"kind":"Name","value":"fexp_name"}}]}}]}}]} as unknown as DocumentNode; @@ -1374,6 +1477,13 @@ export function FExternalDataSourcePatchSchema(): z.ZodObject> { + return z.object({ + state: z.string(), + title: z.string() + }) +} + export function FKnowledgeItemInputSchema(): z.ZodObject> { return z.object({ iknow_is_core: z.boolean().default(false), @@ -1394,6 +1504,16 @@ export function FKnowledgeItemPatchSchema(): z.ZodObject> { + return z.object({ + fexp_allow_tools: z.string(), + fexp_block_tools: z.string(), + fexp_name: z.string(), + fexp_python_kernel: z.string(), + fexp_system_prompt: z.string() + }) +} + export function FPermissionPatchSchema(): z.ZodObject> { return z.object({ perm_roles: z.number() @@ -1403,9 +1523,9 @@ export function FPermissionPatchSchema(): z.ZodObject> { return z.object({ located_fgroup_id: z.string(), - persona_expert1_fexp_name: z.string().nullish(), - persona_expert2_fexp_name: z.string().nullish(), - persona_module: z.string(), + persona_discounts: z.string().nullish(), + persona_marketable_name: z.string(), + persona_marketable_version: z.string(), persona_name: z.string(), persona_setup: z.string() }) @@ -1415,9 +1535,8 @@ export function FPersonaPatchSchema(): z.ZodObject> { return z.object({ located_fgroup_id: z.string().nullish(), persona_archived_ts: z.number().nullish(), - persona_expert1_fexp_name: z.string().nullish(), - persona_expert2_fexp_name: z.string().nullish(), - persona_module: z.string().nullish(), + persona_enabled: z.boolean().nullish(), + persona_marketable_version: z.string().nullish(), persona_name: z.string().nullish(), persona_setup: z.string().nullish() }) @@ -1443,11 +1562,12 @@ export function FThreadInputSchema(): z.ZodObject> { ft_app_specific: z.string().default("null"), ft_error: z.string().default("null"), ft_fexp_id: z.string(), + ft_persona_id: z.string().nullish(), + ft_subchat_dest_ft_id: z.string().nullish(), ft_title: z.string(), ft_toolset: z.string().default("null"), located_fgroup_id: z.string(), - owner_shared: z.boolean(), - parent_ft_id: z.string().nullish() + owner_shared: z.boolean() }) } @@ -1483,11 +1603,11 @@ export function FThreadPatchSchema(): z.ZodObject> { ft_confirmation_request: z.string().nullish(), ft_confirmation_response: z.string().nullish(), ft_error: z.string().nullish(), + ft_subchat_dest_ft_id: z.string().nullish(), ft_title: z.string().nullish(), ft_toolset: z.string().nullish(), located_fgroup_id: z.string().nullish(), - owner_shared: z.boolean().nullish(), - parent_ft_id: z.string().nullish() + owner_shared: z.boolean().nullish() }) } diff --git a/refact-agent/gui/generated/graphql/gql.ts b/refact-agent/gui/generated/graphql/gql.ts index 2093aacdd..88cc1928b 100644 --- a/refact-agent/gui/generated/graphql/gql.ts +++ b/refact-agent/gui/generated/graphql/gql.ts @@ -14,10 +14,10 @@ import type { TypedDocumentNode as DocumentNode } from '@graphql-typed-document- * Learn more about it here: https://the-guild.dev/graphql/codegen/plugins/presets/preset-client#reducing-bundle-size */ type Documents = { - "subscription ThreadsPageSubs($located_fgroup_id: String!, $limit: Int!) {\n threads_in_group(located_fgroup_id: $located_fgroup_id, limit: $limit) {\n news_action\n news_payload_id\n news_payload {\n owner_fuser_id\n owner_shared\n ft_id\n ft_title\n ft_error\n ft_updated_ts\n ft_locked_by\n ft_need_assistant\n ft_need_tool_calls\n ft_archived_ts\n ft_created_ts\n }\n }\n}\n\nmutation DeleteThread($id: String!) {\n thread_delete(id: $id)\n}\n\nmutation CreateThread($input: FThreadInput!) {\n thread_create(input: $input) {\n ft_id\n }\n}\n\nsubscription MessagesSubscription($ft_id: String!, $want_deltas: Boolean!) {\n comprehensive_thread_subs(ft_id: $ft_id, want_deltas: $want_deltas) {\n news_action\n news_payload_id\n news_payload_thread_message {\n ft_app_specific\n ftm_belongs_to_ft_id\n ftm_alt\n ftm_num\n ftm_prev_alt\n ftm_role\n ftm_content\n ftm_tool_calls\n ftm_call_id\n ftm_usage\n ftm_created_ts\n ftm_user_preferences\n }\n stream_delta {\n ftm_role\n ftm_content\n }\n news_payload_thread {\n located_fgroup_id\n ft_id\n ft_need_user\n ft_need_assistant\n ft_fexp_id\n ft_confirmation_request\n ft_confirmation_response\n }\n }\n}\n\nmutation MessageCreateMultiple($input: FThreadMultipleMessagesInput!) {\n thread_messages_create_multiple(input: $input) {\n count\n }\n}\n\nmutation ThreadPatch($id: String!, $message: String!) {\n thread_patch(id: $id, patch: {ft_error: $message}) {\n ft_id\n }\n}\n\nquery ExpertsForGroup($located_fgroup_id: String!) {\n experts_effective_list(located_fgroup_id: $located_fgroup_id) {\n fexp_id\n fexp_name\n }\n}\n\nquery ModelsForExpert($fexp_id: String!, $inside_fgroup_id: String!) {\n expert_choice_consequences(\n fexp_id: $fexp_id\n inside_fgroup_id: $inside_fgroup_id\n ) {\n provm_name\n }\n}\n\nquery ToolsForGroup($located_fgroup_id: String!) {\n cloud_tools_list(located_fgroup_id: $located_fgroup_id, include_offline: false) {\n ctool_confirmed_exists_ts\n ctool_description\n ctool_id\n ctool_name\n ctool_parameters\n located_fgroup_id\n owner_fuser_id\n }\n}\n\nmutation ThreadConfirmationResponse($confirmation_response: String = \"\", $ft_id: String = \"\") {\n thread_set_confirmation_response(\n ft_id: $ft_id\n confirmation_response: $confirmation_response\n )\n}\n\nquery BasicStuff {\n query_basic_stuff {\n fuser_id\n my_own_ws_id\n workspaces {\n ws_id\n ws_owner_fuser_id\n ws_root_group_id\n root_group_name\n have_coins_exactly\n have_coins_enough\n have_admin\n }\n }\n}\n\nmutation CreateWorkSpaceGroup($fgroup_name: String!, $fgroup_parent_id: String!) {\n group_create(\n input: {fgroup_name: $fgroup_name, fgroup_parent_id: $fgroup_parent_id}\n ) {\n fgroup_id\n fgroup_name\n ws_id\n fgroup_parent_id\n fgroup_created_ts\n }\n}\n\nsubscription WorkspaceTree($ws_id: String!) {\n tree_subscription(ws_id: $ws_id) {\n treeupd_action\n treeupd_id\n treeupd_path\n treeupd_type\n treeupd_title\n }\n}": typeof types.ThreadsPageSubsDocument, + "subscription ThreadsPageSubs($located_fgroup_id: String!, $limit: Int!) {\n threads_in_group(located_fgroup_id: $located_fgroup_id, limit: $limit) {\n news_action\n news_payload_id\n news_payload {\n owner_fuser_id\n owner_shared\n ft_id\n ft_title\n ft_error\n ft_updated_ts\n ft_locked_by\n ft_need_assistant\n ft_need_tool_calls\n ft_archived_ts\n ft_created_ts\n }\n }\n}\n\nmutation DeleteThread($id: String!) {\n thread_delete(id: $id)\n}\n\nmutation CreateThread($input: FThreadInput!) {\n thread_create(input: $input) {\n ft_id\n }\n}\n\nsubscription MessagesSubscription($ft_id: String!, $want_deltas: Boolean!) {\n comprehensive_thread_subs(ft_id: $ft_id, want_deltas: $want_deltas) {\n news_action\n news_payload_id\n news_payload_thread_message {\n ft_app_specific\n ftm_belongs_to_ft_id\n ftm_alt\n ftm_num\n ftm_prev_alt\n ftm_role\n ftm_content\n ftm_tool_calls\n ftm_call_id\n ftm_usage\n ftm_created_ts\n ftm_user_preferences\n }\n stream_delta {\n ftm_role\n ftm_content\n }\n news_payload_thread {\n located_fgroup_id\n ft_id\n ft_need_user\n ft_need_assistant\n ft_fexp_id\n ft_confirmation_request\n ft_confirmation_response\n ft_title\n }\n }\n}\n\nmutation MessageCreateMultiple($input: FThreadMultipleMessagesInput!) {\n thread_messages_create_multiple(input: $input) {\n count\n }\n}\n\nmutation ThreadPatch($id: String!, $message: String!) {\n thread_patch(id: $id, patch: {ft_error: $message}) {\n ft_id\n }\n}\n\nquery ExpertsForGroup($located_fgroup_id: String!) {\n experts_effective_list(located_fgroup_id: $located_fgroup_id) {\n fexp_id\n fexp_name\n }\n}\n\nquery ModelsForExpert($fexp_id: String!, $inside_fgroup_id: String!) {\n expert_choice_consequences(\n fexp_id: $fexp_id\n inside_fgroup_id: $inside_fgroup_id\n ) {\n provm_name\n }\n}\n\nquery ToolsForGroup($located_fgroup_id: String!) {\n cloud_tools_list(located_fgroup_id: $located_fgroup_id, include_offline: false) {\n ctool_confirmed_exists_ts\n ctool_description\n ctool_id\n ctool_name\n ctool_parameters\n located_fgroup_id\n owner_fuser_id\n }\n}\n\nmutation ThreadConfirmationResponse($confirmation_response: String = \"\", $ft_id: String = \"\") {\n thread_set_confirmation_response(\n ft_id: $ft_id\n confirmation_response: $confirmation_response\n )\n}\n\nquery BasicStuff {\n query_basic_stuff {\n fuser_id\n my_own_ws_id\n workspaces {\n ws_id\n ws_owner_fuser_id\n ws_root_group_id\n root_group_name\n have_coins_exactly\n have_coins_enough\n have_admin\n }\n }\n}\n\nmutation CreateWorkSpaceGroup($fgroup_name: String!, $fgroup_parent_id: String!) {\n group_create(\n input: {fgroup_name: $fgroup_name, fgroup_parent_id: $fgroup_parent_id}\n ) {\n fgroup_id\n fgroup_name\n ws_id\n fgroup_parent_id\n fgroup_created_ts\n }\n}\n\nsubscription WorkspaceTree($ws_id: String!) {\n tree_subscription(ws_id: $ws_id) {\n treeupd_action\n treeupd_id\n treeupd_path\n treeupd_type\n treeupd_title\n }\n}": typeof types.ThreadsPageSubsDocument, }; const documents: Documents = { - "subscription ThreadsPageSubs($located_fgroup_id: String!, $limit: Int!) {\n threads_in_group(located_fgroup_id: $located_fgroup_id, limit: $limit) {\n news_action\n news_payload_id\n news_payload {\n owner_fuser_id\n owner_shared\n ft_id\n ft_title\n ft_error\n ft_updated_ts\n ft_locked_by\n ft_need_assistant\n ft_need_tool_calls\n ft_archived_ts\n ft_created_ts\n }\n }\n}\n\nmutation DeleteThread($id: String!) {\n thread_delete(id: $id)\n}\n\nmutation CreateThread($input: FThreadInput!) {\n thread_create(input: $input) {\n ft_id\n }\n}\n\nsubscription MessagesSubscription($ft_id: String!, $want_deltas: Boolean!) {\n comprehensive_thread_subs(ft_id: $ft_id, want_deltas: $want_deltas) {\n news_action\n news_payload_id\n news_payload_thread_message {\n ft_app_specific\n ftm_belongs_to_ft_id\n ftm_alt\n ftm_num\n ftm_prev_alt\n ftm_role\n ftm_content\n ftm_tool_calls\n ftm_call_id\n ftm_usage\n ftm_created_ts\n ftm_user_preferences\n }\n stream_delta {\n ftm_role\n ftm_content\n }\n news_payload_thread {\n located_fgroup_id\n ft_id\n ft_need_user\n ft_need_assistant\n ft_fexp_id\n ft_confirmation_request\n ft_confirmation_response\n }\n }\n}\n\nmutation MessageCreateMultiple($input: FThreadMultipleMessagesInput!) {\n thread_messages_create_multiple(input: $input) {\n count\n }\n}\n\nmutation ThreadPatch($id: String!, $message: String!) {\n thread_patch(id: $id, patch: {ft_error: $message}) {\n ft_id\n }\n}\n\nquery ExpertsForGroup($located_fgroup_id: String!) {\n experts_effective_list(located_fgroup_id: $located_fgroup_id) {\n fexp_id\n fexp_name\n }\n}\n\nquery ModelsForExpert($fexp_id: String!, $inside_fgroup_id: String!) {\n expert_choice_consequences(\n fexp_id: $fexp_id\n inside_fgroup_id: $inside_fgroup_id\n ) {\n provm_name\n }\n}\n\nquery ToolsForGroup($located_fgroup_id: String!) {\n cloud_tools_list(located_fgroup_id: $located_fgroup_id, include_offline: false) {\n ctool_confirmed_exists_ts\n ctool_description\n ctool_id\n ctool_name\n ctool_parameters\n located_fgroup_id\n owner_fuser_id\n }\n}\n\nmutation ThreadConfirmationResponse($confirmation_response: String = \"\", $ft_id: String = \"\") {\n thread_set_confirmation_response(\n ft_id: $ft_id\n confirmation_response: $confirmation_response\n )\n}\n\nquery BasicStuff {\n query_basic_stuff {\n fuser_id\n my_own_ws_id\n workspaces {\n ws_id\n ws_owner_fuser_id\n ws_root_group_id\n root_group_name\n have_coins_exactly\n have_coins_enough\n have_admin\n }\n }\n}\n\nmutation CreateWorkSpaceGroup($fgroup_name: String!, $fgroup_parent_id: String!) {\n group_create(\n input: {fgroup_name: $fgroup_name, fgroup_parent_id: $fgroup_parent_id}\n ) {\n fgroup_id\n fgroup_name\n ws_id\n fgroup_parent_id\n fgroup_created_ts\n }\n}\n\nsubscription WorkspaceTree($ws_id: String!) {\n tree_subscription(ws_id: $ws_id) {\n treeupd_action\n treeupd_id\n treeupd_path\n treeupd_type\n treeupd_title\n }\n}": types.ThreadsPageSubsDocument, + "subscription ThreadsPageSubs($located_fgroup_id: String!, $limit: Int!) {\n threads_in_group(located_fgroup_id: $located_fgroup_id, limit: $limit) {\n news_action\n news_payload_id\n news_payload {\n owner_fuser_id\n owner_shared\n ft_id\n ft_title\n ft_error\n ft_updated_ts\n ft_locked_by\n ft_need_assistant\n ft_need_tool_calls\n ft_archived_ts\n ft_created_ts\n }\n }\n}\n\nmutation DeleteThread($id: String!) {\n thread_delete(id: $id)\n}\n\nmutation CreateThread($input: FThreadInput!) {\n thread_create(input: $input) {\n ft_id\n }\n}\n\nsubscription MessagesSubscription($ft_id: String!, $want_deltas: Boolean!) {\n comprehensive_thread_subs(ft_id: $ft_id, want_deltas: $want_deltas) {\n news_action\n news_payload_id\n news_payload_thread_message {\n ft_app_specific\n ftm_belongs_to_ft_id\n ftm_alt\n ftm_num\n ftm_prev_alt\n ftm_role\n ftm_content\n ftm_tool_calls\n ftm_call_id\n ftm_usage\n ftm_created_ts\n ftm_user_preferences\n }\n stream_delta {\n ftm_role\n ftm_content\n }\n news_payload_thread {\n located_fgroup_id\n ft_id\n ft_need_user\n ft_need_assistant\n ft_fexp_id\n ft_confirmation_request\n ft_confirmation_response\n ft_title\n }\n }\n}\n\nmutation MessageCreateMultiple($input: FThreadMultipleMessagesInput!) {\n thread_messages_create_multiple(input: $input) {\n count\n }\n}\n\nmutation ThreadPatch($id: String!, $message: String!) {\n thread_patch(id: $id, patch: {ft_error: $message}) {\n ft_id\n }\n}\n\nquery ExpertsForGroup($located_fgroup_id: String!) {\n experts_effective_list(located_fgroup_id: $located_fgroup_id) {\n fexp_id\n fexp_name\n }\n}\n\nquery ModelsForExpert($fexp_id: String!, $inside_fgroup_id: String!) {\n expert_choice_consequences(\n fexp_id: $fexp_id\n inside_fgroup_id: $inside_fgroup_id\n ) {\n provm_name\n }\n}\n\nquery ToolsForGroup($located_fgroup_id: String!) {\n cloud_tools_list(located_fgroup_id: $located_fgroup_id, include_offline: false) {\n ctool_confirmed_exists_ts\n ctool_description\n ctool_id\n ctool_name\n ctool_parameters\n located_fgroup_id\n owner_fuser_id\n }\n}\n\nmutation ThreadConfirmationResponse($confirmation_response: String = \"\", $ft_id: String = \"\") {\n thread_set_confirmation_response(\n ft_id: $ft_id\n confirmation_response: $confirmation_response\n )\n}\n\nquery BasicStuff {\n query_basic_stuff {\n fuser_id\n my_own_ws_id\n workspaces {\n ws_id\n ws_owner_fuser_id\n ws_root_group_id\n root_group_name\n have_coins_exactly\n have_coins_enough\n have_admin\n }\n }\n}\n\nmutation CreateWorkSpaceGroup($fgroup_name: String!, $fgroup_parent_id: String!) {\n group_create(\n input: {fgroup_name: $fgroup_name, fgroup_parent_id: $fgroup_parent_id}\n ) {\n fgroup_id\n fgroup_name\n ws_id\n fgroup_parent_id\n fgroup_created_ts\n }\n}\n\nsubscription WorkspaceTree($ws_id: String!) {\n tree_subscription(ws_id: $ws_id) {\n treeupd_action\n treeupd_id\n treeupd_path\n treeupd_type\n treeupd_title\n }\n}": types.ThreadsPageSubsDocument, }; /** @@ -37,7 +37,7 @@ export function graphql(source: string): unknown; /** * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ -export function graphql(source: "subscription ThreadsPageSubs($located_fgroup_id: String!, $limit: Int!) {\n threads_in_group(located_fgroup_id: $located_fgroup_id, limit: $limit) {\n news_action\n news_payload_id\n news_payload {\n owner_fuser_id\n owner_shared\n ft_id\n ft_title\n ft_error\n ft_updated_ts\n ft_locked_by\n ft_need_assistant\n ft_need_tool_calls\n ft_archived_ts\n ft_created_ts\n }\n }\n}\n\nmutation DeleteThread($id: String!) {\n thread_delete(id: $id)\n}\n\nmutation CreateThread($input: FThreadInput!) {\n thread_create(input: $input) {\n ft_id\n }\n}\n\nsubscription MessagesSubscription($ft_id: String!, $want_deltas: Boolean!) {\n comprehensive_thread_subs(ft_id: $ft_id, want_deltas: $want_deltas) {\n news_action\n news_payload_id\n news_payload_thread_message {\n ft_app_specific\n ftm_belongs_to_ft_id\n ftm_alt\n ftm_num\n ftm_prev_alt\n ftm_role\n ftm_content\n ftm_tool_calls\n ftm_call_id\n ftm_usage\n ftm_created_ts\n ftm_user_preferences\n }\n stream_delta {\n ftm_role\n ftm_content\n }\n news_payload_thread {\n located_fgroup_id\n ft_id\n ft_need_user\n ft_need_assistant\n ft_fexp_id\n ft_confirmation_request\n ft_confirmation_response\n }\n }\n}\n\nmutation MessageCreateMultiple($input: FThreadMultipleMessagesInput!) {\n thread_messages_create_multiple(input: $input) {\n count\n }\n}\n\nmutation ThreadPatch($id: String!, $message: String!) {\n thread_patch(id: $id, patch: {ft_error: $message}) {\n ft_id\n }\n}\n\nquery ExpertsForGroup($located_fgroup_id: String!) {\n experts_effective_list(located_fgroup_id: $located_fgroup_id) {\n fexp_id\n fexp_name\n }\n}\n\nquery ModelsForExpert($fexp_id: String!, $inside_fgroup_id: String!) {\n expert_choice_consequences(\n fexp_id: $fexp_id\n inside_fgroup_id: $inside_fgroup_id\n ) {\n provm_name\n }\n}\n\nquery ToolsForGroup($located_fgroup_id: String!) {\n cloud_tools_list(located_fgroup_id: $located_fgroup_id, include_offline: false) {\n ctool_confirmed_exists_ts\n ctool_description\n ctool_id\n ctool_name\n ctool_parameters\n located_fgroup_id\n owner_fuser_id\n }\n}\n\nmutation ThreadConfirmationResponse($confirmation_response: String = \"\", $ft_id: String = \"\") {\n thread_set_confirmation_response(\n ft_id: $ft_id\n confirmation_response: $confirmation_response\n )\n}\n\nquery BasicStuff {\n query_basic_stuff {\n fuser_id\n my_own_ws_id\n workspaces {\n ws_id\n ws_owner_fuser_id\n ws_root_group_id\n root_group_name\n have_coins_exactly\n have_coins_enough\n have_admin\n }\n }\n}\n\nmutation CreateWorkSpaceGroup($fgroup_name: String!, $fgroup_parent_id: String!) {\n group_create(\n input: {fgroup_name: $fgroup_name, fgroup_parent_id: $fgroup_parent_id}\n ) {\n fgroup_id\n fgroup_name\n ws_id\n fgroup_parent_id\n fgroup_created_ts\n }\n}\n\nsubscription WorkspaceTree($ws_id: String!) {\n tree_subscription(ws_id: $ws_id) {\n treeupd_action\n treeupd_id\n treeupd_path\n treeupd_type\n treeupd_title\n }\n}"): (typeof documents)["subscription ThreadsPageSubs($located_fgroup_id: String!, $limit: Int!) {\n threads_in_group(located_fgroup_id: $located_fgroup_id, limit: $limit) {\n news_action\n news_payload_id\n news_payload {\n owner_fuser_id\n owner_shared\n ft_id\n ft_title\n ft_error\n ft_updated_ts\n ft_locked_by\n ft_need_assistant\n ft_need_tool_calls\n ft_archived_ts\n ft_created_ts\n }\n }\n}\n\nmutation DeleteThread($id: String!) {\n thread_delete(id: $id)\n}\n\nmutation CreateThread($input: FThreadInput!) {\n thread_create(input: $input) {\n ft_id\n }\n}\n\nsubscription MessagesSubscription($ft_id: String!, $want_deltas: Boolean!) {\n comprehensive_thread_subs(ft_id: $ft_id, want_deltas: $want_deltas) {\n news_action\n news_payload_id\n news_payload_thread_message {\n ft_app_specific\n ftm_belongs_to_ft_id\n ftm_alt\n ftm_num\n ftm_prev_alt\n ftm_role\n ftm_content\n ftm_tool_calls\n ftm_call_id\n ftm_usage\n ftm_created_ts\n ftm_user_preferences\n }\n stream_delta {\n ftm_role\n ftm_content\n }\n news_payload_thread {\n located_fgroup_id\n ft_id\n ft_need_user\n ft_need_assistant\n ft_fexp_id\n ft_confirmation_request\n ft_confirmation_response\n }\n }\n}\n\nmutation MessageCreateMultiple($input: FThreadMultipleMessagesInput!) {\n thread_messages_create_multiple(input: $input) {\n count\n }\n}\n\nmutation ThreadPatch($id: String!, $message: String!) {\n thread_patch(id: $id, patch: {ft_error: $message}) {\n ft_id\n }\n}\n\nquery ExpertsForGroup($located_fgroup_id: String!) {\n experts_effective_list(located_fgroup_id: $located_fgroup_id) {\n fexp_id\n fexp_name\n }\n}\n\nquery ModelsForExpert($fexp_id: String!, $inside_fgroup_id: String!) {\n expert_choice_consequences(\n fexp_id: $fexp_id\n inside_fgroup_id: $inside_fgroup_id\n ) {\n provm_name\n }\n}\n\nquery ToolsForGroup($located_fgroup_id: String!) {\n cloud_tools_list(located_fgroup_id: $located_fgroup_id, include_offline: false) {\n ctool_confirmed_exists_ts\n ctool_description\n ctool_id\n ctool_name\n ctool_parameters\n located_fgroup_id\n owner_fuser_id\n }\n}\n\nmutation ThreadConfirmationResponse($confirmation_response: String = \"\", $ft_id: String = \"\") {\n thread_set_confirmation_response(\n ft_id: $ft_id\n confirmation_response: $confirmation_response\n )\n}\n\nquery BasicStuff {\n query_basic_stuff {\n fuser_id\n my_own_ws_id\n workspaces {\n ws_id\n ws_owner_fuser_id\n ws_root_group_id\n root_group_name\n have_coins_exactly\n have_coins_enough\n have_admin\n }\n }\n}\n\nmutation CreateWorkSpaceGroup($fgroup_name: String!, $fgroup_parent_id: String!) {\n group_create(\n input: {fgroup_name: $fgroup_name, fgroup_parent_id: $fgroup_parent_id}\n ) {\n fgroup_id\n fgroup_name\n ws_id\n fgroup_parent_id\n fgroup_created_ts\n }\n}\n\nsubscription WorkspaceTree($ws_id: String!) {\n tree_subscription(ws_id: $ws_id) {\n treeupd_action\n treeupd_id\n treeupd_path\n treeupd_type\n treeupd_title\n }\n}"]; +export function graphql(source: "subscription ThreadsPageSubs($located_fgroup_id: String!, $limit: Int!) {\n threads_in_group(located_fgroup_id: $located_fgroup_id, limit: $limit) {\n news_action\n news_payload_id\n news_payload {\n owner_fuser_id\n owner_shared\n ft_id\n ft_title\n ft_error\n ft_updated_ts\n ft_locked_by\n ft_need_assistant\n ft_need_tool_calls\n ft_archived_ts\n ft_created_ts\n }\n }\n}\n\nmutation DeleteThread($id: String!) {\n thread_delete(id: $id)\n}\n\nmutation CreateThread($input: FThreadInput!) {\n thread_create(input: $input) {\n ft_id\n }\n}\n\nsubscription MessagesSubscription($ft_id: String!, $want_deltas: Boolean!) {\n comprehensive_thread_subs(ft_id: $ft_id, want_deltas: $want_deltas) {\n news_action\n news_payload_id\n news_payload_thread_message {\n ft_app_specific\n ftm_belongs_to_ft_id\n ftm_alt\n ftm_num\n ftm_prev_alt\n ftm_role\n ftm_content\n ftm_tool_calls\n ftm_call_id\n ftm_usage\n ftm_created_ts\n ftm_user_preferences\n }\n stream_delta {\n ftm_role\n ftm_content\n }\n news_payload_thread {\n located_fgroup_id\n ft_id\n ft_need_user\n ft_need_assistant\n ft_fexp_id\n ft_confirmation_request\n ft_confirmation_response\n ft_title\n }\n }\n}\n\nmutation MessageCreateMultiple($input: FThreadMultipleMessagesInput!) {\n thread_messages_create_multiple(input: $input) {\n count\n }\n}\n\nmutation ThreadPatch($id: String!, $message: String!) {\n thread_patch(id: $id, patch: {ft_error: $message}) {\n ft_id\n }\n}\n\nquery ExpertsForGroup($located_fgroup_id: String!) {\n experts_effective_list(located_fgroup_id: $located_fgroup_id) {\n fexp_id\n fexp_name\n }\n}\n\nquery ModelsForExpert($fexp_id: String!, $inside_fgroup_id: String!) {\n expert_choice_consequences(\n fexp_id: $fexp_id\n inside_fgroup_id: $inside_fgroup_id\n ) {\n provm_name\n }\n}\n\nquery ToolsForGroup($located_fgroup_id: String!) {\n cloud_tools_list(located_fgroup_id: $located_fgroup_id, include_offline: false) {\n ctool_confirmed_exists_ts\n ctool_description\n ctool_id\n ctool_name\n ctool_parameters\n located_fgroup_id\n owner_fuser_id\n }\n}\n\nmutation ThreadConfirmationResponse($confirmation_response: String = \"\", $ft_id: String = \"\") {\n thread_set_confirmation_response(\n ft_id: $ft_id\n confirmation_response: $confirmation_response\n )\n}\n\nquery BasicStuff {\n query_basic_stuff {\n fuser_id\n my_own_ws_id\n workspaces {\n ws_id\n ws_owner_fuser_id\n ws_root_group_id\n root_group_name\n have_coins_exactly\n have_coins_enough\n have_admin\n }\n }\n}\n\nmutation CreateWorkSpaceGroup($fgroup_name: String!, $fgroup_parent_id: String!) {\n group_create(\n input: {fgroup_name: $fgroup_name, fgroup_parent_id: $fgroup_parent_id}\n ) {\n fgroup_id\n fgroup_name\n ws_id\n fgroup_parent_id\n fgroup_created_ts\n }\n}\n\nsubscription WorkspaceTree($ws_id: String!) {\n tree_subscription(ws_id: $ws_id) {\n treeupd_action\n treeupd_id\n treeupd_path\n treeupd_type\n treeupd_title\n }\n}"): (typeof documents)["subscription ThreadsPageSubs($located_fgroup_id: String!, $limit: Int!) {\n threads_in_group(located_fgroup_id: $located_fgroup_id, limit: $limit) {\n news_action\n news_payload_id\n news_payload {\n owner_fuser_id\n owner_shared\n ft_id\n ft_title\n ft_error\n ft_updated_ts\n ft_locked_by\n ft_need_assistant\n ft_need_tool_calls\n ft_archived_ts\n ft_created_ts\n }\n }\n}\n\nmutation DeleteThread($id: String!) {\n thread_delete(id: $id)\n}\n\nmutation CreateThread($input: FThreadInput!) {\n thread_create(input: $input) {\n ft_id\n }\n}\n\nsubscription MessagesSubscription($ft_id: String!, $want_deltas: Boolean!) {\n comprehensive_thread_subs(ft_id: $ft_id, want_deltas: $want_deltas) {\n news_action\n news_payload_id\n news_payload_thread_message {\n ft_app_specific\n ftm_belongs_to_ft_id\n ftm_alt\n ftm_num\n ftm_prev_alt\n ftm_role\n ftm_content\n ftm_tool_calls\n ftm_call_id\n ftm_usage\n ftm_created_ts\n ftm_user_preferences\n }\n stream_delta {\n ftm_role\n ftm_content\n }\n news_payload_thread {\n located_fgroup_id\n ft_id\n ft_need_user\n ft_need_assistant\n ft_fexp_id\n ft_confirmation_request\n ft_confirmation_response\n ft_title\n }\n }\n}\n\nmutation MessageCreateMultiple($input: FThreadMultipleMessagesInput!) {\n thread_messages_create_multiple(input: $input) {\n count\n }\n}\n\nmutation ThreadPatch($id: String!, $message: String!) {\n thread_patch(id: $id, patch: {ft_error: $message}) {\n ft_id\n }\n}\n\nquery ExpertsForGroup($located_fgroup_id: String!) {\n experts_effective_list(located_fgroup_id: $located_fgroup_id) {\n fexp_id\n fexp_name\n }\n}\n\nquery ModelsForExpert($fexp_id: String!, $inside_fgroup_id: String!) {\n expert_choice_consequences(\n fexp_id: $fexp_id\n inside_fgroup_id: $inside_fgroup_id\n ) {\n provm_name\n }\n}\n\nquery ToolsForGroup($located_fgroup_id: String!) {\n cloud_tools_list(located_fgroup_id: $located_fgroup_id, include_offline: false) {\n ctool_confirmed_exists_ts\n ctool_description\n ctool_id\n ctool_name\n ctool_parameters\n located_fgroup_id\n owner_fuser_id\n }\n}\n\nmutation ThreadConfirmationResponse($confirmation_response: String = \"\", $ft_id: String = \"\") {\n thread_set_confirmation_response(\n ft_id: $ft_id\n confirmation_response: $confirmation_response\n )\n}\n\nquery BasicStuff {\n query_basic_stuff {\n fuser_id\n my_own_ws_id\n workspaces {\n ws_id\n ws_owner_fuser_id\n ws_root_group_id\n root_group_name\n have_coins_exactly\n have_coins_enough\n have_admin\n }\n }\n}\n\nmutation CreateWorkSpaceGroup($fgroup_name: String!, $fgroup_parent_id: String!) {\n group_create(\n input: {fgroup_name: $fgroup_name, fgroup_parent_id: $fgroup_parent_id}\n ) {\n fgroup_id\n fgroup_name\n ws_id\n fgroup_parent_id\n fgroup_created_ts\n }\n}\n\nsubscription WorkspaceTree($ws_id: String!) {\n tree_subscription(ws_id: $ws_id) {\n treeupd_action\n treeupd_id\n treeupd_path\n treeupd_type\n treeupd_title\n }\n}"]; export function graphql(source: string) { return (documents as any)[source] ?? {}; diff --git a/refact-agent/gui/generated/graphql/graphql.ts b/refact-agent/gui/generated/graphql/graphql.ts index 5b1e1e0a6..5371f18ad 100644 --- a/refact-agent/gui/generated/graphql/graphql.ts +++ b/refact-agent/gui/generated/graphql/graphql.ts @@ -68,6 +68,12 @@ export type FAuditRecordOutput = { audit_ts: Scalars['Float']['output']; }; +export type FBotInstallOutput = { + __typename?: 'FBotInstallOutput'; + marketable_name: Scalars['String']['output']; + marketable_version: Scalars['String']['output']; +}; + export type FCloudTool = { __typename?: 'FCloudTool'; ctool_confirmed_exists_ts?: Maybe; @@ -179,6 +185,11 @@ export type FExternalDataSourceSubs = { news_payload_id: Scalars['String']['output']; }; +export type FKanbanTaskInput = { + state: Scalars['String']['input']; + title: Scalars['String']['input']; +}; + export type FKnowledgeItemInput = { iknow_is_core?: Scalars['Boolean']['input']; iknow_memory: Scalars['String']['input']; @@ -222,6 +233,14 @@ export type FKnowledgeItemSubs = { news_pubsub: Scalars['String']['output']; }; +export type FMarketplaceExpertInput = { + fexp_allow_tools: Scalars['String']['input']; + fexp_block_tools: Scalars['String']['input']; + fexp_name: Scalars['String']['input']; + fexp_python_kernel: Scalars['String']['input']; + fexp_system_prompt: Scalars['String']['input']; +}; + export type FMassInvitationOutput = { __typename?: 'FMassInvitationOutput'; fuser_id: Scalars['String']['output']; @@ -254,23 +273,49 @@ export type FPermissionSubs = { export type FPersonaInput = { located_fgroup_id: Scalars['String']['input']; - persona_expert1_fexp_name?: InputMaybe; - persona_expert2_fexp_name?: InputMaybe; - persona_module: Scalars['String']['input']; + persona_discounts?: InputMaybe; + persona_marketable_name: Scalars['String']['input']; + persona_marketable_version: Scalars['String']['input']; persona_name: Scalars['String']['input']; persona_setup: Scalars['String']['input']; }; +export type FPersonaKanbanSubs = { + __typename?: 'FPersonaKanbanSubs'; + news_action: Scalars['String']['output']; + news_bucket: Scalars['String']['output']; + news_payload_id: Scalars['String']['output']; + news_payload_task?: Maybe; +}; + +export type FPersonaKanbanTaskOutput = { + __typename?: 'FPersonaKanbanTaskOutput'; + ktask_blocks_ktask_id?: Maybe; + ktask_budget: Scalars['Int']['output']; + ktask_details: Scalars['JSON']['output']; + ktask_done_ts: Scalars['Float']['output']; + ktask_failed_ts: Scalars['Float']['output']; + ktask_id: Scalars['String']['output']; + ktask_inbox_provenance: Scalars['JSON']['output']; + ktask_inbox_ts: Scalars['Float']['output']; + ktask_inprogress_ft_id: Scalars['String']['output']; + ktask_inprogress_ts: Scalars['Float']['output']; + ktask_title: Scalars['String']['output']; + ktask_todo_ts: Scalars['Float']['output']; + persona_id: Scalars['String']['output']; +}; + export type FPersonaOutput = { __typename?: 'FPersonaOutput'; located_fgroup_id: Scalars['String']['output']; owner_fuser_id: Scalars['String']['output']; persona_archived_ts: Scalars['Float']['output']; persona_created_ts: Scalars['Float']['output']; - persona_expert1_fexp_name?: Maybe; - persona_expert2_fexp_name?: Maybe; + persona_discounts?: Maybe; + persona_enabled: Scalars['Boolean']['output']; persona_id: Scalars['String']['output']; - persona_module: Scalars['String']['output']; + persona_marketable_name: Scalars['String']['output']; + persona_marketable_version: Scalars['String']['output']; persona_name: Scalars['String']['output']; persona_setup: Scalars['JSON']['output']; }; @@ -278,9 +323,8 @@ export type FPersonaOutput = { export type FPersonaPatch = { located_fgroup_id?: InputMaybe; persona_archived_ts?: InputMaybe; - persona_expert1_fexp_name?: InputMaybe; - persona_expert2_fexp_name?: InputMaybe; - persona_module?: InputMaybe; + persona_enabled?: InputMaybe; + persona_marketable_version?: InputMaybe; persona_name?: InputMaybe; persona_setup?: InputMaybe; }; @@ -334,11 +378,12 @@ export type FThreadInput = { ft_app_specific?: Scalars['String']['input']; ft_error?: Scalars['String']['input']; ft_fexp_id: Scalars['String']['input']; + ft_persona_id?: InputMaybe; + ft_subchat_dest_ft_id?: InputMaybe; ft_title: Scalars['String']['input']; ft_toolset?: Scalars['String']['input']; located_fgroup_id: Scalars['String']['input']; owner_shared: Scalars['Boolean']['input']; - parent_ft_id?: InputMaybe; }; export type FThreadMessageInput = { @@ -412,13 +457,14 @@ export type FThreadOutput = { ft_need_assistant: Scalars['Int']['output']; ft_need_tool_calls: Scalars['Int']['output']; ft_need_user: Scalars['Int']['output']; + ft_persona_id?: Maybe; + ft_subchat_dest_ft_id?: Maybe; ft_title: Scalars['String']['output']; ft_toolset?: Maybe; ft_updated_ts: Scalars['Float']['output']; located_fgroup_id: Scalars['String']['output']; owner_fuser_id: Scalars['String']['output']; owner_shared: Scalars['Boolean']['output']; - parent_ft_id?: Maybe; }; export type FThreadPatch = { @@ -428,11 +474,11 @@ export type FThreadPatch = { ft_confirmation_request?: InputMaybe; ft_confirmation_response?: InputMaybe; ft_error?: InputMaybe; + ft_subchat_dest_ft_id?: InputMaybe; ft_title?: InputMaybe; ft_toolset?: InputMaybe; located_fgroup_id?: InputMaybe; owner_shared?: InputMaybe; - parent_ft_id?: InputMaybe; }; export type FThreadSubs = { @@ -506,6 +552,9 @@ export type Mutation = { __typename?: 'Mutation'; api_key_delete: Scalars['Boolean']['output']; api_key_generate: FApiKeyOutput; + bot_activate: FThreadOutput; + bot_arrange_kanban_situation: Scalars['Boolean']['output']; + bot_install_from_marketplace: Scalars['Boolean']['output']; cloudtool_post_result: Scalars['Boolean']['output']; create_captured_thread: FThreadOutput; email_confirm: EmailConfirmResult; @@ -527,6 +576,7 @@ export type Mutation = { knowledge_item_mass_group_patch: Scalars['Int']['output']; knowledge_item_patch: FKnowledgeItemOutput; make_sure_have_expert: Scalars['String']['output']; + marketplace_upsert_dev_bot: FBotInstallOutput; password_change: Scalars['Boolean']['output']; permission_delete: Scalars['Boolean']['output']; permission_patch: FPermissionOutput; @@ -566,6 +616,34 @@ export type MutationApi_Key_DeleteArgs = { }; +export type MutationBot_ActivateArgs = { + activation_type: Scalars['String']['input']; + first_calls: Scalars['String']['input']; + first_question: Scalars['String']['input']; + localtools: Scalars['String']['input']; + persona_id: Scalars['String']['input']; + title: Scalars['String']['input']; + who_is_asking: Scalars['String']['input']; +}; + + +export type MutationBot_Arrange_Kanban_SituationArgs = { + persona_id: Scalars['String']['input']; + tasks: Array; + ws_id: Scalars['String']['input']; +}; + + +export type MutationBot_Install_From_MarketplaceArgs = { + inside_fgroup_id: Scalars['String']['input']; + new_setup: Scalars['String']['input']; + persona_id: Scalars['String']['input']; + persona_marketable_name: Scalars['String']['input']; + persona_marketable_version: Scalars['String']['input']; + persona_name: Scalars['String']['input']; +}; + + export type MutationCloudtool_Post_ResultArgs = { input: CloudtoolResultInput; }; @@ -676,13 +754,29 @@ export type MutationKnowledge_Item_PatchArgs = { export type MutationMake_Sure_Have_ExpertArgs = { - fexp_name_without_version: Scalars['String']['input']; + fexp_name: Scalars['String']['input']; fgroup_id?: InputMaybe; owner_fuser_id?: InputMaybe; + python_kernel: Scalars['String']['input']; system_prompt: Scalars['String']['input']; }; +export type MutationMarketplace_Upsert_Dev_BotArgs = { + marketable_description: Scalars['String']['input']; + marketable_expert_scheduled: FMarketplaceExpertInput; + marketable_expert_setup: FMarketplaceExpertInput; + marketable_expert_subchat: FMarketplaceExpertInput; + marketable_expert_todo: FMarketplaceExpertInput; + marketable_github_repo: Scalars['String']['input']; + marketable_name: Scalars['String']['input']; + marketable_run_this: Scalars['String']['input']; + marketable_setup_default: Scalars['String']['input']; + marketable_version: Scalars['String']['input']; + ws_id: Scalars['String']['input']; +}; + + export type MutationPassword_ChangeArgs = { new_password: Scalars['String']['input']; old_password: Scalars['String']['input']; @@ -1111,6 +1205,7 @@ export type Subscription = { external_data_sources_in_group: FExternalDataSourceSubs; knowledge_items_in_group: FKnowledgeItemSubs; permissions_in_group_subs: FPermissionSubs; + persona_kanban_subs: FPersonaKanbanSubs; personas_in_group: FPersonaSubs; threads_in_group: FThreadSubs; tree_subscription: TreeUpdateSubs; @@ -1159,6 +1254,14 @@ export type SubscriptionPermissions_In_Group_SubsArgs = { }; +export type SubscriptionPersona_Kanban_SubsArgs = { + limit_done?: Scalars['Int']['input']; + limit_garbage?: Scalars['Int']['input']; + limit_inbox?: Scalars['Int']['input']; + persona_id: Scalars['String']['input']; +}; + + export type SubscriptionPersonas_In_GroupArgs = { filter?: Array; limit?: Scalars['Int']['input']; @@ -1235,7 +1338,7 @@ export type MessagesSubscriptionSubscriptionVariables = Exact<{ }>; -export type MessagesSubscriptionSubscription = { __typename?: 'Subscription', comprehensive_thread_subs: { __typename?: 'FThreadMessageSubs', news_action: string, news_payload_id: string, news_payload_thread_message?: { __typename?: 'FThreadMessageOutput', ft_app_specific?: any | null, ftm_belongs_to_ft_id: string, ftm_alt: number, ftm_num: number, ftm_prev_alt: number, ftm_role: string, ftm_content?: any | null, ftm_tool_calls?: any | null, ftm_call_id: string, ftm_usage?: any | null, ftm_created_ts: number, ftm_user_preferences?: any | null } | null, stream_delta?: { __typename?: 'FThreadDelta', ftm_role: string, ftm_content: any } | null, news_payload_thread?: { __typename?: 'FThreadOutput', located_fgroup_id: string, ft_id: string, ft_need_user: number, ft_need_assistant: number, ft_fexp_id: string, ft_confirmation_request?: any | null, ft_confirmation_response?: any | null } | null } }; +export type MessagesSubscriptionSubscription = { __typename?: 'Subscription', comprehensive_thread_subs: { __typename?: 'FThreadMessageSubs', news_action: string, news_payload_id: string, news_payload_thread_message?: { __typename?: 'FThreadMessageOutput', ft_app_specific?: any | null, ftm_belongs_to_ft_id: string, ftm_alt: number, ftm_num: number, ftm_prev_alt: number, ftm_role: string, ftm_content?: any | null, ftm_tool_calls?: any | null, ftm_call_id: string, ftm_usage?: any | null, ftm_created_ts: number, ftm_user_preferences?: any | null } | null, stream_delta?: { __typename?: 'FThreadDelta', ftm_role: string, ftm_content: any } | null, news_payload_thread?: { __typename?: 'FThreadOutput', located_fgroup_id: string, ft_id: string, ft_need_user: number, ft_need_assistant: number, ft_fexp_id: string, ft_confirmation_request?: any | null, ft_confirmation_response?: any | null, ft_title: string } | null } }; export type MessageCreateMultipleMutationVariables = Exact<{ input: FThreadMultipleMessagesInput; @@ -1306,7 +1409,7 @@ export type WorkspaceTreeSubscription = { __typename?: 'Subscription', tree_subs export const ThreadsPageSubsDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"subscription","name":{"kind":"Name","value":"ThreadsPageSubs"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"located_fgroup_id"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"limit"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"Int"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"threads_in_group"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"located_fgroup_id"},"value":{"kind":"Variable","name":{"kind":"Name","value":"located_fgroup_id"}}},{"kind":"Argument","name":{"kind":"Name","value":"limit"},"value":{"kind":"Variable","name":{"kind":"Name","value":"limit"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"news_action"}},{"kind":"Field","name":{"kind":"Name","value":"news_payload_id"}},{"kind":"Field","name":{"kind":"Name","value":"news_payload"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"owner_fuser_id"}},{"kind":"Field","name":{"kind":"Name","value":"owner_shared"}},{"kind":"Field","name":{"kind":"Name","value":"ft_id"}},{"kind":"Field","name":{"kind":"Name","value":"ft_title"}},{"kind":"Field","name":{"kind":"Name","value":"ft_error"}},{"kind":"Field","name":{"kind":"Name","value":"ft_updated_ts"}},{"kind":"Field","name":{"kind":"Name","value":"ft_locked_by"}},{"kind":"Field","name":{"kind":"Name","value":"ft_need_assistant"}},{"kind":"Field","name":{"kind":"Name","value":"ft_need_tool_calls"}},{"kind":"Field","name":{"kind":"Name","value":"ft_archived_ts"}},{"kind":"Field","name":{"kind":"Name","value":"ft_created_ts"}}]}}]}}]}}]} as unknown as DocumentNode; export const DeleteThreadDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"DeleteThread"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"id"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"thread_delete"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"id"},"value":{"kind":"Variable","name":{"kind":"Name","value":"id"}}}]}]}}]} as unknown as DocumentNode; export const CreateThreadDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"CreateThread"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"input"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"FThreadInput"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"thread_create"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"input"},"value":{"kind":"Variable","name":{"kind":"Name","value":"input"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"ft_id"}}]}}]}}]} as unknown as DocumentNode; -export const MessagesSubscriptionDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"subscription","name":{"kind":"Name","value":"MessagesSubscription"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"ft_id"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"want_deltas"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"Boolean"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"comprehensive_thread_subs"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"ft_id"},"value":{"kind":"Variable","name":{"kind":"Name","value":"ft_id"}}},{"kind":"Argument","name":{"kind":"Name","value":"want_deltas"},"value":{"kind":"Variable","name":{"kind":"Name","value":"want_deltas"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"news_action"}},{"kind":"Field","name":{"kind":"Name","value":"news_payload_id"}},{"kind":"Field","name":{"kind":"Name","value":"news_payload_thread_message"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"ft_app_specific"}},{"kind":"Field","name":{"kind":"Name","value":"ftm_belongs_to_ft_id"}},{"kind":"Field","name":{"kind":"Name","value":"ftm_alt"}},{"kind":"Field","name":{"kind":"Name","value":"ftm_num"}},{"kind":"Field","name":{"kind":"Name","value":"ftm_prev_alt"}},{"kind":"Field","name":{"kind":"Name","value":"ftm_role"}},{"kind":"Field","name":{"kind":"Name","value":"ftm_content"}},{"kind":"Field","name":{"kind":"Name","value":"ftm_tool_calls"}},{"kind":"Field","name":{"kind":"Name","value":"ftm_call_id"}},{"kind":"Field","name":{"kind":"Name","value":"ftm_usage"}},{"kind":"Field","name":{"kind":"Name","value":"ftm_created_ts"}},{"kind":"Field","name":{"kind":"Name","value":"ftm_user_preferences"}}]}},{"kind":"Field","name":{"kind":"Name","value":"stream_delta"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"ftm_role"}},{"kind":"Field","name":{"kind":"Name","value":"ftm_content"}}]}},{"kind":"Field","name":{"kind":"Name","value":"news_payload_thread"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"located_fgroup_id"}},{"kind":"Field","name":{"kind":"Name","value":"ft_id"}},{"kind":"Field","name":{"kind":"Name","value":"ft_need_user"}},{"kind":"Field","name":{"kind":"Name","value":"ft_need_assistant"}},{"kind":"Field","name":{"kind":"Name","value":"ft_fexp_id"}},{"kind":"Field","name":{"kind":"Name","value":"ft_confirmation_request"}},{"kind":"Field","name":{"kind":"Name","value":"ft_confirmation_response"}}]}}]}}]}}]} as unknown as DocumentNode; +export const MessagesSubscriptionDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"subscription","name":{"kind":"Name","value":"MessagesSubscription"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"ft_id"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"want_deltas"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"Boolean"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"comprehensive_thread_subs"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"ft_id"},"value":{"kind":"Variable","name":{"kind":"Name","value":"ft_id"}}},{"kind":"Argument","name":{"kind":"Name","value":"want_deltas"},"value":{"kind":"Variable","name":{"kind":"Name","value":"want_deltas"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"news_action"}},{"kind":"Field","name":{"kind":"Name","value":"news_payload_id"}},{"kind":"Field","name":{"kind":"Name","value":"news_payload_thread_message"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"ft_app_specific"}},{"kind":"Field","name":{"kind":"Name","value":"ftm_belongs_to_ft_id"}},{"kind":"Field","name":{"kind":"Name","value":"ftm_alt"}},{"kind":"Field","name":{"kind":"Name","value":"ftm_num"}},{"kind":"Field","name":{"kind":"Name","value":"ftm_prev_alt"}},{"kind":"Field","name":{"kind":"Name","value":"ftm_role"}},{"kind":"Field","name":{"kind":"Name","value":"ftm_content"}},{"kind":"Field","name":{"kind":"Name","value":"ftm_tool_calls"}},{"kind":"Field","name":{"kind":"Name","value":"ftm_call_id"}},{"kind":"Field","name":{"kind":"Name","value":"ftm_usage"}},{"kind":"Field","name":{"kind":"Name","value":"ftm_created_ts"}},{"kind":"Field","name":{"kind":"Name","value":"ftm_user_preferences"}}]}},{"kind":"Field","name":{"kind":"Name","value":"stream_delta"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"ftm_role"}},{"kind":"Field","name":{"kind":"Name","value":"ftm_content"}}]}},{"kind":"Field","name":{"kind":"Name","value":"news_payload_thread"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"located_fgroup_id"}},{"kind":"Field","name":{"kind":"Name","value":"ft_id"}},{"kind":"Field","name":{"kind":"Name","value":"ft_need_user"}},{"kind":"Field","name":{"kind":"Name","value":"ft_need_assistant"}},{"kind":"Field","name":{"kind":"Name","value":"ft_fexp_id"}},{"kind":"Field","name":{"kind":"Name","value":"ft_confirmation_request"}},{"kind":"Field","name":{"kind":"Name","value":"ft_confirmation_response"}},{"kind":"Field","name":{"kind":"Name","value":"ft_title"}}]}}]}}]}}]} as unknown as DocumentNode; export const MessageCreateMultipleDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"MessageCreateMultiple"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"input"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"FThreadMultipleMessagesInput"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"thread_messages_create_multiple"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"input"},"value":{"kind":"Variable","name":{"kind":"Name","value":"input"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"count"}}]}}]}}]} as unknown as DocumentNode; export const ThreadPatchDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"ThreadPatch"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"id"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"message"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"thread_patch"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"id"},"value":{"kind":"Variable","name":{"kind":"Name","value":"id"}}},{"kind":"Argument","name":{"kind":"Name","value":"patch"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"ft_error"},"value":{"kind":"Variable","name":{"kind":"Name","value":"message"}}}]}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"ft_id"}}]}}]}}]} as unknown as DocumentNode; export const ExpertsForGroupDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"ExpertsForGroup"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"located_fgroup_id"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"experts_effective_list"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"located_fgroup_id"},"value":{"kind":"Variable","name":{"kind":"Name","value":"located_fgroup_id"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"fexp_id"}},{"kind":"Field","name":{"kind":"Name","value":"fexp_name"}}]}}]}}]} as unknown as DocumentNode; diff --git a/refact-agent/gui/generated/schema.graphql b/refact-agent/gui/generated/schema.graphql index acaf6e55f..ab0316236 100644 --- a/refact-agent/gui/generated/schema.graphql +++ b/refact-agent/gui/generated/schema.graphql @@ -48,6 +48,11 @@ type FAuditRecordOutput { audit_ts: Float! } +type FBotInstallOutput { + marketable_name: String! + marketable_version: String! +} + type FCloudTool { ctool_confirmed_exists_ts: Float ctool_description: String! @@ -151,6 +156,11 @@ type FExternalDataSourceSubs { news_payload_id: String! } +input FKanbanTaskInput { + state: String! + title: String! +} + input FKnowledgeItemInput { iknow_is_core: Boolean! = false iknow_memory: String! @@ -192,6 +202,14 @@ type FKnowledgeItemSubs { news_pubsub: String! } +input FMarketplaceExpertInput { + fexp_allow_tools: String! + fexp_block_tools: String! + fexp_name: String! + fexp_python_kernel: String! + fexp_system_prompt: String! +} + type FMassInvitationOutput { fuser_id: String! result: String! @@ -220,22 +238,46 @@ type FPermissionSubs { input FPersonaInput { located_fgroup_id: String! - persona_expert1_fexp_name: String = null - persona_expert2_fexp_name: String = null - persona_module: String! + persona_discounts: String = null + persona_marketable_name: String! + persona_marketable_version: String! persona_name: String! persona_setup: String! } +type FPersonaKanbanSubs { + news_action: String! + news_bucket: String! + news_payload_id: String! + news_payload_task: FPersonaKanbanTaskOutput +} + +type FPersonaKanbanTaskOutput { + ktask_blocks_ktask_id: String + ktask_budget: Int! + ktask_details: JSON! + ktask_done_ts: Float! + ktask_failed_ts: Float! + ktask_id: String! + ktask_inbox_provenance: JSON! + ktask_inbox_ts: Float! + ktask_inprogress_ft_id: String! + ktask_inprogress_ts: Float! + ktask_title: String! + ktask_todo_ts: Float! + persona_id: String! +} + type FPersonaOutput { located_fgroup_id: String! owner_fuser_id: String! persona_archived_ts: Float! persona_created_ts: Float! - persona_expert1_fexp_name: String - persona_expert2_fexp_name: String + persona_discounts: JSON + persona_enabled: Boolean! persona_id: String! - persona_module: String! + persona_marketable_name: String! + persona_marketable_version: String! persona_name: String! persona_setup: JSON! } @@ -243,9 +285,8 @@ type FPersonaOutput { input FPersonaPatch { located_fgroup_id: String = null persona_archived_ts: Float = null - persona_expert1_fexp_name: String = null - persona_expert2_fexp_name: String = null - persona_module: String = null + persona_enabled: Boolean = null + persona_marketable_version: String = null persona_name: String = null persona_setup: String = null } @@ -295,11 +336,12 @@ input FThreadInput { ft_app_specific: String! = "null" ft_error: String! = "null" ft_fexp_id: String! + ft_persona_id: String = null + ft_subchat_dest_ft_id: String = null ft_title: String! ft_toolset: String! = "null" located_fgroup_id: String! owner_shared: Boolean! - parent_ft_id: String = null } input FThreadMessageInput { @@ -369,13 +411,14 @@ type FThreadOutput { ft_need_assistant: Int! ft_need_tool_calls: Int! ft_need_user: Int! + ft_persona_id: String + ft_subchat_dest_ft_id: String ft_title: String! ft_toolset: JSON ft_updated_ts: Float! located_fgroup_id: String! owner_fuser_id: String! owner_shared: Boolean! - parent_ft_id: String } input FThreadPatch { @@ -385,11 +428,11 @@ input FThreadPatch { ft_confirmation_request: String = null ft_confirmation_response: String = null ft_error: String = null + ft_subchat_dest_ft_id: String = null ft_title: String = null ft_toolset: String = null located_fgroup_id: String = null owner_shared: Boolean = null - parent_ft_id: String = null } type FThreadSubs { @@ -462,6 +505,9 @@ scalar JSON type Mutation { api_key_delete(apikey_id: String!): Boolean! api_key_generate: FApiKeyOutput! + bot_activate(activation_type: String!, first_calls: String!, first_question: String!, localtools: String!, persona_id: String!, title: String!, who_is_asking: String!): FThreadOutput! + bot_arrange_kanban_situation(persona_id: String!, tasks: [FKanbanTaskInput!]!, ws_id: String!): Boolean! + bot_install_from_marketplace(inside_fgroup_id: String!, new_setup: String!, persona_id: String!, persona_marketable_name: String!, persona_marketable_version: String!, persona_name: String!): Boolean! cloudtool_post_result(input: CloudtoolResultInput!): Boolean! create_captured_thread(input: FThreadInput!, on_behalf_of_fuser_id: String = null): FThreadOutput! email_confirm(token: String!): EmailConfirmResult! @@ -482,7 +528,8 @@ type Mutation { knowledge_item_delete(id: String!): Boolean! knowledge_item_mass_group_patch(dst_group_id: String!, src_group_id: String!): Int! knowledge_item_patch(id: String!, patch: FKnowledgeItemPatch!): FKnowledgeItemOutput! - make_sure_have_expert(fexp_name_without_version: String!, fgroup_id: String, owner_fuser_id: String, system_prompt: String!): String! + make_sure_have_expert(fexp_name: String!, fgroup_id: String, owner_fuser_id: String, python_kernel: String!, system_prompt: String!): String! + marketplace_upsert_dev_bot(marketable_description: String!, marketable_expert_scheduled: FMarketplaceExpertInput!, marketable_expert_setup: FMarketplaceExpertInput!, marketable_expert_subchat: FMarketplaceExpertInput!, marketable_expert_todo: FMarketplaceExpertInput!, marketable_github_repo: String!, marketable_name: String!, marketable_run_this: String!, marketable_setup_default: String!, marketable_version: String!, ws_id: String!): FBotInstallOutput! password_change(new_password: String!, old_password: String!): Boolean! permission_delete(fgroup_id: String!, fuser_id: String!): Boolean! permission_patch(fgroup_id: String!, fuser_id: String!, patch: FPermissionPatch!): FPermissionOutput! @@ -578,6 +625,7 @@ type Subscription { external_data_sources_in_group(filter: [String!]! = [], limit: Int! = 0, located_fgroup_id: String!, sort_by: [String!]! = []): FExternalDataSourceSubs! knowledge_items_in_group(filter: [String!]! = [], limit: Int! = 0, located_fgroup_id: String!, sort_by: [String!]! = []): FKnowledgeItemSubs! permissions_in_group_subs(fgroup_id: String!, limit: Int!, quicksearch: String!): FPermissionSubs! + persona_kanban_subs(limit_done: Int! = 30, limit_garbage: Int! = 30, limit_inbox: Int! = 30, persona_id: String!): FPersonaKanbanSubs! personas_in_group(filter: [String!]! = [], limit: Int! = 0, located_fgroup_id: String!, sort_by: [String!]! = []): FPersonaSubs! threads_in_group(filter: [String!]! = [], limit: Int! = 0, located_fgroup_id: String!, sort_by: [String!]! = []): FThreadSubs! tree_subscription(ws_id: String!): TreeUpdateSubs! diff --git a/refact-agent/gui/src/components/Chat/Chat.tsx b/refact-agent/gui/src/components/Chat/Chat.tsx index 84f871a68..0d85ee1fa 100644 --- a/refact-agent/gui/src/components/Chat/Chat.tsx +++ b/refact-agent/gui/src/components/Chat/Chat.tsx @@ -1,17 +1,23 @@ -import React, { useCallback, useState } from "react"; +import React, { useCallback, useMemo, useState } from "react"; import { ChatForm, ChatFormProps } from "../ChatForm"; import { ChatContent } from "../ChatContent"; import { Flex } from "@radix-ui/themes"; -import { useAppSelector, useSendMessages } from "../../hooks"; -import { type Config } from "../../features/Config/configSlice"; +import { useAppDispatch, useAppSelector, useSendMessages } from "../../hooks"; +import { selectConfig, type Config } from "../../features/Config/configSlice"; import { DropzoneProvider } from "../Dropzone"; import { useCheckpoints } from "../../hooks/useCheckpoints"; import { Checkpoints } from "../../features/Checkpoints"; -// TODO: remove this? -// import { SuggestNewChat } from "../ChatForm/SuggestNewChat"; + import { useMessageSubscription } from "./useMessageSubscription"; -import { selectThreadId } from "../../features/ThreadMessages"; +import { + selectIsStreaming, + selectIsWaiting, + selectThreadId, + selectTotalMessagesInThread, +} from "../../features/ThreadMessages"; +import { ThreadHistoryButton } from "../Buttons"; +import { push } from "../../features/Pages/pagesSlice"; export type ChatProps = { host: Config["host"]; @@ -23,34 +29,36 @@ export type ChatProps = { }; export const Chat: React.FC = ({ style, maybeSendToSidebar }) => { - // const dispatch = useAppDispatch(); + const dispatch = useAppDispatch(); // const unCalledTools = useAppSelector(selectBranchHasUncalledTools); const [isViewingRawJSON, setIsViewingRawJSON] = useState(false); - // const isStreaming = useAppSelector(selectIsStreaming); + const isStreaming = useAppSelector(selectIsStreaming); + const isWaiting = useAppSelector(selectIsWaiting); useMessageSubscription(); const { sendMessage } = useSendMessages(); - // const totalMessages = useAppSelector(selectTotalMessagesInThread, { - // devModeChecks: { stabilityCheck: "never" }, - // }); + const totalMessages = useAppSelector(selectTotalMessagesInThread, { + devModeChecks: { stabilityCheck: "never" }, + }); + + const config = useAppSelector(selectConfig); + + const canShowDebugButton = useMemo(() => { + if (config.host === "web") return true; + if (config.features?.connections) return true; + return !isWaiting && !isStreaming && totalMessages > 0; + }, [ + config.features?.connections, + config.host, + isStreaming, + isWaiting, + totalMessages, + ]); const chatId = useAppSelector(selectThreadId); - // TODO: figure out features removed here - // const { submit, abort, retryFromIndex } = useSendChatRequest(); - - // const chatToolUse = useAppSelector(getSelectedToolUse); - // const threadNewChatSuggested = useAppSelector(selectThreadNewChatSuggested); - // const messages = useAppSelector(selectMessages); - // const capsForToolUse = useCapsForToolUse(); const { shouldCheckpointsPopupBeShown } = useCheckpoints(); - // const [isDebugChatHistoryVisible, setIsDebugChatHistoryVisible] = - // useState(false); - - // const preventSend = useAppSelector(selectPreventSend); - // const onEnableSend = () => dispatch(enableSend({ id: chatId })); - const handleSummit = useCallback( (value: string) => { // submit({ question: value }); @@ -63,9 +71,9 @@ export const Chat: React.FC = ({ style, maybeSendToSidebar }) => { ); // TODO: this - // const handleThreadHistoryPage = useCallback(() => { - // dispatch(push({ name: "thread history page", chatId })); - // }, [chatId, dispatch]); + const handleThreadHistoryPage = useCallback(() => { + dispatch(push({ name: "thread history page", chatId: chatId ?? "" })); + }, [chatId, dispatch]); return ( @@ -82,44 +90,24 @@ export const Chat: React.FC = ({ style, maybeSendToSidebar }) => { {shouldCheckpointsPopupBeShown && } - {/* */} - - {/* */} - {/* Two flexboxes are left for the future UI element on the right side */} - {/* {totalMessages > 0 && ( - - - model: {capsForToolUse.currentModel} •{" "} - setIsDebugChatHistoryVisible((prev) => !prev)} - > - mode: {chatToolUse}{" "} - - - {totalMessages !== 0 && - !isStreaming && - isDebugChatHistoryVisible && ( - - )} + + {/* Two flexboxes are left for the future UI element on the right side */} + {canShowDebugButton && ( + + - )} */} - {/* */} + )} + ); diff --git a/refact-agent/gui/src/components/ChatRawJSON/ChatRawJSON.tsx b/refact-agent/gui/src/components/ChatRawJSON/ChatRawJSON.tsx index a9e989632..89a3f3f1a 100644 --- a/refact-agent/gui/src/components/ChatRawJSON/ChatRawJSON.tsx +++ b/refact-agent/gui/src/components/ChatRawJSON/ChatRawJSON.tsx @@ -1,14 +1,11 @@ import { Box, Button, Flex, Heading } from "@radix-ui/themes"; import { ScrollArea } from "../ScrollArea"; import { MarkdownCodeBlock } from "../Markdown/CodeBlock"; -import { - FThreadMessageOutput, - FThreadOutput, -} from "../../../generated/documents"; +import { MessagesSubscriptionSubscription } from "../../../generated/documents"; type ChatRawJSONProps = { - thread: FThreadOutput; - messages: FThreadMessageOutput; + thread: MessagesSubscriptionSubscription["comprehensive_thread_subs"]["news_payload_thread"]; + messages: MessagesSubscriptionSubscription["comprehensive_thread_subs"]["news_payload_thread_message"][]; copyHandler: () => void; }; diff --git a/refact-agent/gui/src/features/ThreadHistory/ThreadHistory.tsx b/refact-agent/gui/src/features/ThreadHistory/ThreadHistory.tsx index 55d9192f7..fbb0e3420 100644 --- a/refact-agent/gui/src/features/ThreadHistory/ThreadHistory.tsx +++ b/refact-agent/gui/src/features/ThreadHistory/ThreadHistory.tsx @@ -2,25 +2,22 @@ import { FC, useCallback } from "react"; import { Config } from "../Config/configSlice"; import { Button, Flex } from "@radix-ui/themes"; import { ArrowLeftIcon } from "@radix-ui/react-icons"; -// import { ChatRawJSON } from "../../components/ChatRawJSON"; +import { ChatRawJSON } from "../../components/ChatRawJSON"; import { useAppDispatch, useAppSelector } from "../../hooks"; -// import { copyChatHistoryToClipboard } from "../../utils/copyChatHistoryToClipboard"; -import { - clearError, - getErrorMessage, - // setError -} from "../Errors/errorsSlice"; +import { copyChatHistoryToClipboard } from "../../utils/copyChatHistoryToClipboard"; +import { clearError, getErrorMessage, setError } from "../Errors/errorsSlice"; import { clearInformation, getInformationMessage, - // setInformation, + setInformation, } from "../Errors/informationSlice"; import { ErrorCallout, InformationCallout, } from "../../components/Callout/Callout"; import styles from "./ThreadHistory.module.css"; +import { useMessageSubscription } from "../../components/Chat/useMessageSubscription"; type ThreadHistoryProps = { onCloseThreadHistory: () => void; @@ -39,14 +36,12 @@ export const ThreadHistory: FC = ({ }) => { const dispatch = useAppDispatch(); - // const historyThread = useAppSelector((state) => getChatById(state, chatId), { - // devModeChecks: { stabilityCheck: "never" }, - // }); + // TODO: move this to the hooks directory + useMessageSubscription(); - // const historyThreadToPass = historyThread && { - // ...historyThread, - // model: historyThread.model || "gpt-4o-mini", - // }; + const state = useAppSelector((state) => state.threadMessages, { + devModeChecks: { stabilityCheck: "never" }, + }); const error = useAppSelector(getErrorMessage); const information = useAppSelector(getInformationMessage); @@ -57,16 +52,16 @@ export const ThreadHistory: FC = ({ [dispatch], ); - // const handleCopyToClipboardJSON = useCallback(() => { - // if (!historyThread) { - // dispatch(setError("No history thread found")); - // return; - // } + const handleCopyToClipboardJSON = useCallback(() => { + if (!Object.values(state.messages).length) { + dispatch(setError("No history thread found")); + return; + } - // void copyChatHistoryToClipboard(historyThread).then(() => { - // dispatch(setInformation("Chat history copied to clipboard")); - // }); - // }, [dispatch, historyThread]); + void copyChatHistoryToClipboard(state).then(() => { + dispatch(setInformation("Chat history copied to clipboard")); + }); + }, [dispatch, state]); const handleBackFromThreadHistory = useCallback( (customBackFunction: () => void) => { @@ -103,12 +98,13 @@ export const ThreadHistory: FC = ({ Back )} - {/* {historyThreadToPass && ( + {state.thread && ( - )} */} + )} {information && ( Date: Mon, 14 Jul 2025 18:56:18 +0200 Subject: [PATCH 2/3] fix: remove streaming animation and stop button when reloading a chat. --- .../gui/src/features/ThreadMessages/threadMessagesSlice.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/refact-agent/gui/src/features/ThreadMessages/threadMessagesSlice.ts b/refact-agent/gui/src/features/ThreadMessages/threadMessagesSlice.ts index 9df1c9893..1ec4778f1 100644 --- a/refact-agent/gui/src/features/ThreadMessages/threadMessagesSlice.ts +++ b/refact-agent/gui/src/features/ThreadMessages/threadMessagesSlice.ts @@ -231,6 +231,10 @@ export const threadMessagesSlice = createSlice({ if (action.payload.news_action === "UPDATE") { state.messages[action.payload.news_payload_id] = action.payload.news_payload_thread_message; + + state.waitingBranches = state.waitingBranches.filter( + (n) => n !== action.payload.news_payload_thread_message.ftm_alt, + ); } if (action.payload.news_action === "INSERT") { From dde0fe2cdb28e0bba2c9592cc0db1246f4996c22 Mon Sep 17 00:00:00 2001 From: Marc McIntosh Date: Mon, 14 Jul 2025 20:02:52 +0200 Subject: [PATCH 3/3] chore: fix types. --- refact-agent/gui/src/components/ChatRawJSON/ChatRawJSON.tsx | 2 +- .../gui/src/components/UsageCounter/UsageCounter.stories.tsx | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/refact-agent/gui/src/components/ChatRawJSON/ChatRawJSON.tsx b/refact-agent/gui/src/components/ChatRawJSON/ChatRawJSON.tsx index 89a3f3f1a..9e7925199 100644 --- a/refact-agent/gui/src/components/ChatRawJSON/ChatRawJSON.tsx +++ b/refact-agent/gui/src/components/ChatRawJSON/ChatRawJSON.tsx @@ -36,7 +36,7 @@ export const ChatRawJSON = ({ Thread History - {thread.ft_title && ( + {thread?.ft_title && ( {thread.ft_title} diff --git a/refact-agent/gui/src/components/UsageCounter/UsageCounter.stories.tsx b/refact-agent/gui/src/components/UsageCounter/UsageCounter.stories.tsx index e8bb4f155..f232420f2 100644 --- a/refact-agent/gui/src/components/UsageCounter/UsageCounter.stories.tsx +++ b/refact-agent/gui/src/components/UsageCounter/UsageCounter.stories.tsx @@ -36,6 +36,7 @@ const MockedStore: React.FC<{ ft_need_assistant: -1, ft_fexp_id: "id:ask:1.0", located_fgroup_id: "0000000", + ft_title: "test", }, ft_id: "foo", streamingBranches: [],