diff --git a/it0_app/lib/features/agent_instance_chat/presentation/pages/agent_instance_chat_page.dart b/it0_app/lib/features/agent_instance_chat/presentation/pages/agent_instance_chat_page.dart index 79dacc9..d6af530 100644 --- a/it0_app/lib/features/agent_instance_chat/presentation/pages/agent_instance_chat_page.dart +++ b/it0_app/lib/features/agent_instance_chat/presentation/pages/agent_instance_chat_page.dart @@ -1,10 +1,16 @@ import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; +import '../../../auth/data/providers/auth_provider.dart'; +import '../../../chat/data/datasources/chat_local_datasource.dart'; +import '../../../chat/data/models/chat_message_model.dart'; +import '../../../chat/data/repositories/chat_repository_impl.dart'; +import '../../../chat/domain/usecases/send_message.dart'; import '../../../chat/presentation/pages/chat_page.dart'; import '../../../chat/presentation/providers/chat_providers.dart'; import '../../../my_agents/presentation/pages/my_agents_page.dart'; import '../../data/datasources/agent_instance_chat_remote_datasource.dart'; import '../../../../core/network/dio_client.dart'; +import '../../../../core/network/websocket_client.dart'; import '../../../../core/widgets/floating_robot_fab.dart'; import '../../../../core/widgets/robot_painter.dart'; @@ -29,6 +35,28 @@ class AgentInstanceChatPage extends StatelessWidget { return AgentInstanceChatDatasource(dio, instance.id); }), + // chatRepositoryProvider must also be overridden so that sendMessage + // goes through AgentInstanceChatDatasource (instance endpoint) rather + // than the parent scope's ChatRemoteDatasource (iAgent endpoint). + chatRepositoryProvider.overrideWith((ref) { + final remote = ref.watch(chatRemoteDatasourceProvider); + final local = ref.watch(chatLocalDatasourceProvider); + final ws = ref.watch(webSocketClientProvider); + final storage = ref.watch(secureStorageProvider); + return ChatRepositoryImpl( + remoteDatasource: remote, + localDatasource: local ?? _NoOpLocal(), + webSocketClient: ws, + getAccessToken: () => storage.read(key: 'access_token'), + ); + }), + + // sendMessageUseCaseProvider must be overridden so ChatNotifier.sendMessage + // reads the child-scope chatRepositoryProvider (instance endpoint). + sendMessageUseCaseProvider.overrideWith( + (ref) => SendMessage(ref.watch(chatRepositoryProvider)), + ), + // Fresh, isolated chatProvider for this instance — does NOT share // state with iAgent's chatProvider in the parent scope. chatProvider.overrideWith((ref) => ChatNotifier(ref)), @@ -58,3 +86,15 @@ class AgentInstanceChatPage extends StatelessWidget { ); } } + +/// No-op local cache — instance chat sessions are not cached locally. +class _NoOpLocal implements ChatLocalDatasource { + @override + Future cacheMessages(String sessionId, List messages) async {} + @override + List getCachedMessages(String sessionId) => []; + @override + Future clearCache(String sessionId) async {} + @override + Future clearAllCaches() async {} +}