├── ios ├── Runner │ ├── en.lproj │ │ ├── Main.strings │ │ └── LaunchScreen.strings │ ├── zh-Hans.lproj │ │ ├── Main.strings │ │ └── LaunchScreen.strings │ ├── zh-Hant.lproj │ │ ├── Main.strings │ │ └── LaunchScreen.strings │ ├── Runner-Bridging-Header.h │ ├── Assets.xcassets │ │ ├── LaunchImage.imageset │ │ │ ├── LaunchImage.png │ │ │ ├── LaunchImage@2x.png │ │ │ ├── LaunchImage@3x.png │ │ │ ├── LaunchImageDark.png │ │ │ ├── LaunchImageDark@2x.png │ │ │ ├── LaunchImageDark@3x.png │ │ │ ├── README.md │ │ │ └── Contents.json │ │ ├── AppIcon.appiconset │ │ │ ├── Icon-App-20x20@1x.png │ │ │ ├── Icon-App-20x20@2x.png │ │ │ ├── Icon-App-20x20@3x.png │ │ │ ├── Icon-App-29x29@1x.png │ │ │ ├── Icon-App-29x29@2x.png │ │ │ ├── Icon-App-29x29@3x.png │ │ │ ├── Icon-App-38x38@2x.png │ │ │ ├── Icon-App-38x38@3x.png │ │ │ ├── Icon-App-40x40@1x.png │ │ │ ├── Icon-App-40x40@2x.png │ │ │ ├── Icon-App-40x40@3x.png │ │ │ ├── Icon-App-50x50@1x.png │ │ │ ├── Icon-App-50x50@2x.png │ │ │ ├── Icon-App-57x57@1x.png │ │ │ ├── Icon-App-57x57@2x.png │ │ │ ├── Icon-App-60x60@2x.png │ │ │ ├── Icon-App-60x60@3x.png │ │ │ ├── Icon-App-64x64@2x.png │ │ │ ├── Icon-App-64x64@3x.png │ │ │ ├── Icon-App-68x68@2x.png │ │ │ ├── Icon-App-72x72@1x.png │ │ │ ├── Icon-App-72x72@2x.png │ │ │ ├── Icon-App-76x76@1x.png │ │ │ ├── Icon-App-76x76@2x.png │ │ │ ├── Icon-App-1024x1024@1x.png │ │ │ ├── Icon-App-83.5x83.5@2x.png │ │ │ ├── Icon-App-Dark-20x20@2x.png │ │ │ ├── Icon-App-Dark-20x20@3x.png │ │ │ ├── Icon-App-Dark-29x29@2x.png │ │ │ ├── Icon-App-Dark-29x29@3x.png │ │ │ ├── Icon-App-Dark-38x38@2x.png │ │ │ ├── Icon-App-Dark-38x38@3x.png │ │ │ ├── Icon-App-Dark-40x40@2x.png │ │ │ ├── Icon-App-Dark-40x40@3x.png │ │ │ ├── Icon-App-Dark-60x60@2x.png │ │ │ ├── Icon-App-Dark-60x60@3x.png │ │ │ ├── Icon-App-Dark-64x64@2x.png │ │ │ ├── Icon-App-Dark-64x64@3x.png │ │ │ ├── Icon-App-Dark-68x68@2x.png │ │ │ ├── Icon-App-Dark-76x76@2x.png │ │ │ ├── Icon-App-Dark-1024x1024@1x.png │ │ │ └── Icon-App-Dark-83.5x83.5@2x.png │ │ └── LaunchBackground.imageset │ │ │ ├── background.png │ │ │ ├── darkbackground.png │ │ │ └── Contents.json │ └── AppDelegate.swift ├── build │ └── XCBuildData │ │ └── 244ad98267b9bae76c9152f067b8b9d3.xcbuilddata │ │ ├── target-graph.txt │ │ ├── manifest.json │ │ └── build-request.json ├── Flutter │ ├── Debug.xcconfig │ ├── Release.xcconfig │ └── AppFrameworkInfo.plist ├── Runner.xcodeproj │ └── project.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata │ │ ├── WorkspaceSettings.xcsettings │ │ └── IDEWorkspaceChecks.plist ├── Runner.xcworkspace │ ├── contents.xcworkspacedata │ └── xcshareddata │ │ ├── WorkspaceSettings.xcsettings │ │ └── IDEWorkspaceChecks.plist ├── RunnerTests │ └── RunnerTests.swift └── .gitignore ├── linux ├── .gitignore ├── runner │ ├── main.cc │ ├── my_application.h │ └── CMakeLists.txt └── flutter │ ├── generated_plugin_registrant.h │ └── generated_plugins.cmake ├── dependencies ├── flutter_tts │ ├── ios │ │ ├── Assets │ │ │ └── .gitkeep │ │ ├── Classes │ │ │ ├── FlutterTtsPlugin.h │ │ │ ├── AudioCategory.swift │ │ │ ├── FlutterTtsPlugin.m │ │ │ ├── AudioCategoryOptions.swift │ │ │ └── AudioModes.swift │ │ ├── .gitignore │ │ └── flutter_tts.podspec │ ├── .dart_tool │ │ ├── version │ │ └── package_graph.json │ ├── android │ │ ├── settings.gradle │ │ ├── gradle.properties │ │ ├── .gitignore │ │ ├── src │ │ │ └── main │ │ │ │ └── AndroidManifest.xml │ │ ├── gradle │ │ │ └── wrapper │ │ │ │ └── gradle-wrapper.properties │ │ └── build.gradle │ ├── analysis_options.yaml │ ├── pubspec.yaml │ ├── LICENSE │ └── lib │ │ └── interop_types.dart ├── tray_manager │ ├── .github │ │ ├── FUNDING.yml │ │ └── workflows │ │ │ ├── test.yml │ │ │ └── lint.yml │ ├── .gitignore │ ├── packages │ │ └── tray_manager │ │ │ ├── analysis_options.yaml │ │ │ ├── lib │ │ │ ├── tray_manager.dart │ │ │ └── src │ │ │ │ ├── helpers │ │ │ │ └── sandbox.dart │ │ │ │ └── tray_listener.dart │ │ │ ├── .metadata │ │ │ ├── windows │ │ │ ├── .gitignore │ │ │ ├── include │ │ │ │ └── tray_manager │ │ │ │ │ └── tray_manager_plugin.h │ │ │ └── CMakeLists.txt │ │ │ ├── .gitignore │ │ │ ├── linux │ │ │ ├── include │ │ │ │ └── tray_manager │ │ │ │ │ └── tray_manager_plugin.h │ │ │ └── CMakeLists.txt │ │ │ ├── pubspec.yaml │ │ │ ├── macos │ │ │ └── tray_manager.podspec │ │ │ └── LICENSE │ ├── pubspec.yaml │ ├── .clang-format │ ├── melos.yaml │ └── LICENSE ├── mcp_client │ ├── dart_test.yaml │ ├── lib │ │ ├── src │ │ │ └── transport │ │ │ │ ├── event_source.dart │ │ │ │ ├── http_client.dart │ │ │ │ ├── event_source_stub.dart │ │ │ │ └── http_client_stub.dart │ │ └── logger.dart │ ├── .gitignore │ ├── pubspec.yaml │ ├── LICENSE │ └── analysis_options.yaml └── flutter-permission-handler │ └── permission_handler_windows │ ├── AUTHORS │ ├── windows │ ├── .gitignore │ └── include │ │ └── permission_handler_windows │ │ └── permission_handler_windows_plugin.h │ ├── pubspec.yaml │ ├── CHANGELOG.md │ ├── LICENSE │ └── README.md ├── .github ├── ISSUE_TEMPLATE │ ├── config.yml │ └── feature.yml └── FUNDING.yml ├── lib ├── secrets │ └── fallback.dart ├── shared │ ├── widgets │ │ ├── mermaid_bridge.dart │ │ ├── export_capture_scope.dart │ │ ├── mermaid_image_cache.dart │ │ ├── favicon.dart │ │ └── mermaid_cache.dart │ └── responsive │ │ ├── adaptive_spacing.dart │ │ ├── responsive_builder.dart │ │ ├── adaptive_grid.dart │ │ ├── screen_type_helper.dart │ │ ├── breakpoints.dart │ │ └── adaptive_layout.dart ├── features │ └── chat │ │ └── models │ │ └── message_edit_result.dart ├── core │ ├── models │ │ ├── chat_item.dart │ │ ├── chat_input_data.dart │ │ ├── instruction_injection.dart │ │ ├── assistant_memory.dart │ │ ├── assistant_tag.dart │ │ ├── token_usage.dart │ │ ├── quick_phrase.dart │ │ └── preset_message.dart │ ├── services │ │ └── android_process_text.dart │ └── providers │ │ └── memory_provider.dart ├── utils │ ├── url_launcher_ext.dart │ ├── platform_utils.dart │ ├── clipboard_images.dart │ ├── plantuml_encoder.dart │ ├── assistant_regex.dart │ ├── model_grouping.dart │ └── markdown_preview_html.dart ├── theme │ ├── theme_provider.dart │ └── design_tokens.dart └── desktop │ ├── hotkeys │ ├── chat_action_bus.dart │ ├── hotkey_event_bus.dart │ └── sidebar_tab_bus.dart │ ├── menu_anchor.dart │ ├── desktop_chat_page.dart │ ├── desktop_sidebar.dart │ └── macos_window_position.dart ├── web ├── favicon.png ├── icons │ ├── Icon-192.png │ ├── Icon-512.png │ ├── Icon-maskable-192.png │ └── Icon-maskable-512.png ├── splash │ └── img │ │ ├── dark-1x.png │ │ ├── dark-2x.png │ │ ├── dark-3x.png │ │ ├── dark-4x.png │ │ ├── light-1x.png │ │ ├── light-2x.png │ │ ├── light-3x.png │ │ └── light-4x.png └── manifest.json ├── assets ├── start.png ├── app_icon.ico ├── app_icon.png ├── icon_mac.png ├── icons │ ├── exa.png │ ├── bing.png │ ├── kelivo.png │ ├── ling.png │ ├── tavily.png │ ├── juhenext.png │ ├── longcat.png │ ├── Powered-by-dark.png │ ├── Powered-by-light.png │ ├── stop.svg │ ├── list.svg │ ├── list2.svg │ ├── jina-color.svg │ ├── anthropic.svg │ ├── xai.svg │ ├── exa-color.svg │ ├── searxng-color.svg │ ├── siliconflow-color.svg │ ├── deepthink.svg │ ├── qq.svg │ ├── perplexity-color.svg │ ├── stepfun-color.svg │ ├── alibabacloud-color.svg │ ├── mistral-color.svg │ ├── grok.svg │ ├── cohere-color.svg │ ├── github.svg │ ├── openrouter.svg │ ├── google-color.svg │ ├── discord.svg │ ├── codex.svg │ ├── bytedance-color.svg │ ├── cloudflare-color.svg │ ├── doubao-color.svg │ ├── kimi-color.svg │ ├── hunyuan-color.svg │ ├── aihubmix-color.svg │ ├── tavily-color.svg │ ├── web.svg │ ├── metaso-color.svg │ ├── tencent-qq.svg │ ├── minimax-color.svg │ ├── claude-color.svg │ ├── openai.svg │ └── bocha-color.svg ├── app_icon_2.png ├── app_icon_dark.png ├── app_icon_macos.png └── app_icon_macos2.png ├── docx ├── sponsor.jpg ├── screenshot_1.png ├── screenshot_2.png ├── screenshot_3.png └── screenshot_4.png ├── android ├── app │ ├── proguard-rules.pro │ └── src │ │ ├── main │ │ ├── res │ │ │ ├── drawable │ │ │ │ ├── background.png │ │ │ │ └── launch_background.xml │ │ │ ├── drawable-hdpi │ │ │ │ ├── splash.png │ │ │ │ ├── android12splash.png │ │ │ │ └── ic_launcher_foreground.png │ │ │ ├── drawable-mdpi │ │ │ │ ├── splash.png │ │ │ │ ├── android12splash.png │ │ │ │ └── ic_launcher_foreground.png │ │ │ ├── drawable-xhdpi │ │ │ │ ├── splash.png │ │ │ │ ├── android12splash.png │ │ │ │ └── ic_launcher_foreground.png │ │ │ ├── drawable-v21 │ │ │ │ ├── background.png │ │ │ │ └── launch_background.xml │ │ │ ├── drawable-xxhdpi │ │ │ │ ├── splash.png │ │ │ │ ├── android12splash.png │ │ │ │ └── ic_launcher_foreground.png │ │ │ ├── drawable-xxxhdpi │ │ │ │ ├── splash.png │ │ │ │ ├── android12splash.png │ │ │ │ └── ic_launcher_foreground.png │ │ │ ├── mipmap-hdpi │ │ │ │ └── ic_launcher.png │ │ │ ├── mipmap-mdpi │ │ │ │ └── ic_launcher.png │ │ │ ├── mipmap-xhdpi │ │ │ │ └── ic_launcher.png │ │ │ ├── drawable-night-hdpi │ │ │ │ ├── splash.png │ │ │ │ └── android12splash.png │ │ │ ├── drawable-night-mdpi │ │ │ │ ├── splash.png │ │ │ │ └── android12splash.png │ │ │ ├── drawable-night │ │ │ │ ├── background.png │ │ │ │ └── launch_background.xml │ │ │ ├── mipmap-xxhdpi │ │ │ │ └── ic_launcher.png │ │ │ ├── mipmap-xxxhdpi │ │ │ │ └── ic_launcher.png │ │ │ ├── drawable-night-v21 │ │ │ │ ├── background.png │ │ │ │ └── launch_background.xml │ │ │ ├── drawable-night-xhdpi │ │ │ │ ├── splash.png │ │ │ │ └── android12splash.png │ │ │ ├── drawable-night-xxhdpi │ │ │ │ ├── splash.png │ │ │ │ └── android12splash.png │ │ │ ├── drawable-night-xxxhdpi │ │ │ │ ├── splash.png │ │ │ │ └── android12splash.png │ │ │ ├── values │ │ │ │ ├── colors.xml │ │ │ │ └── styles.xml │ │ │ ├── mipmap-anydpi-v26 │ │ │ │ └── ic_launcher.xml │ │ │ ├── values-v31 │ │ │ │ └── styles.xml │ │ │ ├── values-night-v31 │ │ │ │ └── styles.xml │ │ │ └── values-night │ │ │ │ └── styles.xml │ │ └── kotlin │ │ │ └── com │ │ │ └── psyche │ │ │ └── kelivo │ │ │ └── MainActivity.kt │ │ ├── debug │ │ └── AndroidManifest.xml │ │ └── profile │ │ └── AndroidManifest.xml ├── gradle.properties ├── gradle │ └── wrapper │ │ └── gradle-wrapper.properties ├── .gitignore ├── build.gradle.kts └── settings.gradle.kts ├── macos ├── Runner │ ├── Configs │ │ ├── Debug.xcconfig │ │ ├── Release.xcconfig │ │ ├── Warnings.xcconfig │ │ └── AppInfo.xcconfig │ ├── Assets.xcassets │ │ └── AppIcon.appiconset │ │ │ ├── app_icon_16.png │ │ │ ├── app_icon_32.png │ │ │ ├── app_icon_64.png │ │ │ ├── app_icon_1024.png │ │ │ ├── app_icon_128.png │ │ │ ├── app_icon_256.png │ │ │ └── app_icon_512.png │ ├── Release.entitlements │ ├── DebugProfile.entitlements │ ├── AppDelegate.swift │ └── Info.plist ├── .gitignore ├── Flutter │ ├── Flutter-Debug.xcconfig │ └── Flutter-Release.xcconfig ├── Runner.xcworkspace │ ├── contents.xcworkspacedata │ └── xcshareddata │ │ └── IDEWorkspaceChecks.plist ├── Runner.xcodeproj │ └── project.xcworkspace │ │ └── xcshareddata │ │ └── IDEWorkspaceChecks.plist ├── RunnerTests │ └── RunnerTests.swift └── Podfile ├── windows ├── runner │ ├── resources │ │ └── app_icon.ico │ ├── resource.h │ ├── runner.exe.manifest │ ├── utils.h │ └── flutter_window.h ├── .gitignore └── flutter │ ├── generated_plugin_registrant.h │ └── generated_plugins.cmake ├── l10n.yaml ├── devtools_options.yaml ├── flutter_launcher_icons.yaml ├── test └── widget_test.dart ├── .gitignore ├── analysis_options.yaml └── .metadata /ios/Runner/en.lproj/Main.strings: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /linux/.gitignore: -------------------------------------------------------------------------------- 1 | flutter/ephemeral 2 | -------------------------------------------------------------------------------- /ios/Runner/zh-Hans.lproj/Main.strings: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /ios/Runner/zh-Hant.lproj/Main.strings: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /dependencies/flutter_tts/ios/Assets/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ios/Runner/en.lproj/LaunchScreen.strings: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /dependencies/flutter_tts/.dart_tool/version: -------------------------------------------------------------------------------- 1 | 3.35.4 -------------------------------------------------------------------------------- /ios/Runner/zh-Hans.lproj/LaunchScreen.strings: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /ios/Runner/zh-Hant.lproj/LaunchScreen.strings: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/config.yml: -------------------------------------------------------------------------------- 1 | blank_issues_enabled: true -------------------------------------------------------------------------------- /dependencies/tray_manager/.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | liberapay: lijy91 2 | -------------------------------------------------------------------------------- /ios/Runner/Runner-Bridging-Header.h: -------------------------------------------------------------------------------- 1 | #import "GeneratedPluginRegistrant.h" 2 | -------------------------------------------------------------------------------- /lib/secrets/fallback.dart: -------------------------------------------------------------------------------- 1 | const String siliconflowFallbackKey = 'sk-xxxx'; 2 | 3 | -------------------------------------------------------------------------------- /web/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevey339/kelivo/HEAD/web/favicon.png -------------------------------------------------------------------------------- /assets/start.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevey339/kelivo/HEAD/assets/start.png -------------------------------------------------------------------------------- /dependencies/flutter_tts/android/settings.gradle: -------------------------------------------------------------------------------- 1 | rootProject.name = 'flutter_tts' 2 | -------------------------------------------------------------------------------- /docx/sponsor.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevey339/kelivo/HEAD/docx/sponsor.jpg -------------------------------------------------------------------------------- /assets/app_icon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevey339/kelivo/HEAD/assets/app_icon.ico -------------------------------------------------------------------------------- /assets/app_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevey339/kelivo/HEAD/assets/app_icon.png -------------------------------------------------------------------------------- /assets/icon_mac.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevey339/kelivo/HEAD/assets/icon_mac.png -------------------------------------------------------------------------------- /assets/icons/exa.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevey339/kelivo/HEAD/assets/icons/exa.png -------------------------------------------------------------------------------- /assets/app_icon_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevey339/kelivo/HEAD/assets/app_icon_2.png -------------------------------------------------------------------------------- /assets/icons/bing.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevey339/kelivo/HEAD/assets/icons/bing.png -------------------------------------------------------------------------------- /assets/icons/kelivo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevey339/kelivo/HEAD/assets/icons/kelivo.png -------------------------------------------------------------------------------- /assets/icons/ling.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevey339/kelivo/HEAD/assets/icons/ling.png -------------------------------------------------------------------------------- /assets/icons/tavily.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevey339/kelivo/HEAD/assets/icons/tavily.png -------------------------------------------------------------------------------- /docx/screenshot_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevey339/kelivo/HEAD/docx/screenshot_1.png -------------------------------------------------------------------------------- /docx/screenshot_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevey339/kelivo/HEAD/docx/screenshot_2.png -------------------------------------------------------------------------------- /docx/screenshot_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevey339/kelivo/HEAD/docx/screenshot_3.png -------------------------------------------------------------------------------- /docx/screenshot_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevey339/kelivo/HEAD/docx/screenshot_4.png -------------------------------------------------------------------------------- /web/icons/Icon-192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevey339/kelivo/HEAD/web/icons/Icon-192.png -------------------------------------------------------------------------------- /web/icons/Icon-512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevey339/kelivo/HEAD/web/icons/Icon-512.png -------------------------------------------------------------------------------- /assets/app_icon_dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevey339/kelivo/HEAD/assets/app_icon_dark.png -------------------------------------------------------------------------------- /assets/app_icon_macos.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevey339/kelivo/HEAD/assets/app_icon_macos.png -------------------------------------------------------------------------------- /assets/icons/juhenext.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevey339/kelivo/HEAD/assets/icons/juhenext.png -------------------------------------------------------------------------------- /assets/icons/longcat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevey339/kelivo/HEAD/assets/icons/longcat.png -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | custom: 2 | - https://github.com/Chevey339/kelivo/blob/master/docx/sponsor.jpg 3 | -------------------------------------------------------------------------------- /assets/app_icon_macos2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevey339/kelivo/HEAD/assets/app_icon_macos2.png -------------------------------------------------------------------------------- /web/splash/img/dark-1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevey339/kelivo/HEAD/web/splash/img/dark-1x.png -------------------------------------------------------------------------------- /web/splash/img/dark-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevey339/kelivo/HEAD/web/splash/img/dark-2x.png -------------------------------------------------------------------------------- /web/splash/img/dark-3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevey339/kelivo/HEAD/web/splash/img/dark-3x.png -------------------------------------------------------------------------------- /web/splash/img/dark-4x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevey339/kelivo/HEAD/web/splash/img/dark-4x.png -------------------------------------------------------------------------------- /web/splash/img/light-1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevey339/kelivo/HEAD/web/splash/img/light-1x.png -------------------------------------------------------------------------------- /web/splash/img/light-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevey339/kelivo/HEAD/web/splash/img/light-2x.png -------------------------------------------------------------------------------- /web/splash/img/light-3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevey339/kelivo/HEAD/web/splash/img/light-3x.png -------------------------------------------------------------------------------- /web/splash/img/light-4x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevey339/kelivo/HEAD/web/splash/img/light-4x.png -------------------------------------------------------------------------------- /android/app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | -dontwarn com.gemalto.jp2.** 2 | -dontwarn com.tom_roush.pdfbox.filter.JPXFilter 3 | -------------------------------------------------------------------------------- /assets/icons/Powered-by-dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevey339/kelivo/HEAD/assets/icons/Powered-by-dark.png -------------------------------------------------------------------------------- /assets/icons/Powered-by-light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevey339/kelivo/HEAD/assets/icons/Powered-by-light.png -------------------------------------------------------------------------------- /ios/build/XCBuildData/244ad98267b9bae76c9152f067b8b9d3.xcbuilddata/target-graph.txt: -------------------------------------------------------------------------------- 1 | Target dependency graph (0 target) -------------------------------------------------------------------------------- /web/icons/Icon-maskable-192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevey339/kelivo/HEAD/web/icons/Icon-maskable-192.png -------------------------------------------------------------------------------- /web/icons/Icon-maskable-512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevey339/kelivo/HEAD/web/icons/Icon-maskable-512.png -------------------------------------------------------------------------------- /dependencies/tray_manager/.gitignore: -------------------------------------------------------------------------------- 1 | .dart_tool/ 2 | .idea/ 3 | 4 | *.iml 5 | pubspec_overrides.yaml 6 | pubspec.lock 7 | -------------------------------------------------------------------------------- /macos/Runner/Configs/Debug.xcconfig: -------------------------------------------------------------------------------- 1 | #include "../../Flutter/Flutter-Debug.xcconfig" 2 | #include "Warnings.xcconfig" 3 | -------------------------------------------------------------------------------- /lib/shared/widgets/mermaid_bridge.dart: -------------------------------------------------------------------------------- 1 | export 'mermaid_bridge_stub.dart' if (dart.library.html) 'mermaid_bridge_web.dart'; 2 | -------------------------------------------------------------------------------- /macos/Runner/Configs/Release.xcconfig: -------------------------------------------------------------------------------- 1 | #include "../../Flutter/Flutter-Release.xcconfig" 2 | #include "Warnings.xcconfig" 3 | -------------------------------------------------------------------------------- /windows/runner/resources/app_icon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevey339/kelivo/HEAD/windows/runner/resources/app_icon.ico -------------------------------------------------------------------------------- /macos/.gitignore: -------------------------------------------------------------------------------- 1 | # Flutter-related 2 | **/Flutter/ephemeral/ 3 | **/Pods/ 4 | 5 | # Xcode-related 6 | **/dgph 7 | **/xcuserdata/ 8 | -------------------------------------------------------------------------------- /dependencies/tray_manager/packages/tray_manager/analysis_options.yaml: -------------------------------------------------------------------------------- 1 | include: package:mostly_reasonable_lints/analysis_options.yaml 2 | -------------------------------------------------------------------------------- /ios/Flutter/Debug.xcconfig: -------------------------------------------------------------------------------- 1 | #include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" 2 | #include "Generated.xcconfig" 3 | -------------------------------------------------------------------------------- /android/app/src/main/res/drawable/background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevey339/kelivo/HEAD/android/app/src/main/res/drawable/background.png -------------------------------------------------------------------------------- /dependencies/flutter_tts/android/gradle.properties: -------------------------------------------------------------------------------- 1 | org.gradle.jvmargs=-Xmx1536M 2 | android.useAndroidX=true 3 | android.enableJetifier=true 4 | -------------------------------------------------------------------------------- /ios/Flutter/Release.xcconfig: -------------------------------------------------------------------------------- 1 | #include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" 2 | #include "Generated.xcconfig" 3 | -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-hdpi/splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevey339/kelivo/HEAD/android/app/src/main/res/drawable-hdpi/splash.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-mdpi/splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevey339/kelivo/HEAD/android/app/src/main/res/drawable-mdpi/splash.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-xhdpi/splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevey339/kelivo/HEAD/android/app/src/main/res/drawable-xhdpi/splash.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-v21/background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevey339/kelivo/HEAD/android/app/src/main/res/drawable-v21/background.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-xxhdpi/splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevey339/kelivo/HEAD/android/app/src/main/res/drawable-xxhdpi/splash.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-xxxhdpi/splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevey339/kelivo/HEAD/android/app/src/main/res/drawable-xxxhdpi/splash.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevey339/kelivo/HEAD/android/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevey339/kelivo/HEAD/android/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevey339/kelivo/HEAD/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-night-hdpi/splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevey339/kelivo/HEAD/android/app/src/main/res/drawable-night-hdpi/splash.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-night-mdpi/splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevey339/kelivo/HEAD/android/app/src/main/res/drawable-night-mdpi/splash.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-night/background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevey339/kelivo/HEAD/android/app/src/main/res/drawable-night/background.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevey339/kelivo/HEAD/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevey339/kelivo/HEAD/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /dependencies/flutter_tts/ios/Classes/FlutterTtsPlugin.h: -------------------------------------------------------------------------------- 1 | #import 2 | 3 | @interface FlutterTtsPlugin : NSObject 4 | @end 5 | -------------------------------------------------------------------------------- /dependencies/mcp_client/dart_test.yaml: -------------------------------------------------------------------------------- 1 | # Test configuration for mcp_client 2 | platforms: 3 | - vm 4 | - chrome 5 | 6 | # Configure timeouts 7 | timeout: 2m -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-hdpi/android12splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevey339/kelivo/HEAD/android/app/src/main/res/drawable-hdpi/android12splash.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-mdpi/android12splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevey339/kelivo/HEAD/android/app/src/main/res/drawable-mdpi/android12splash.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-night-v21/background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevey339/kelivo/HEAD/android/app/src/main/res/drawable-night-v21/background.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-night-xhdpi/splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevey339/kelivo/HEAD/android/app/src/main/res/drawable-night-xhdpi/splash.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-night-xxhdpi/splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevey339/kelivo/HEAD/android/app/src/main/res/drawable-night-xxhdpi/splash.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-night-xxxhdpi/splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevey339/kelivo/HEAD/android/app/src/main/res/drawable-night-xxxhdpi/splash.png -------------------------------------------------------------------------------- /l10n.yaml: -------------------------------------------------------------------------------- 1 | arb-dir: lib/l10n 2 | template-arb-file: app_en.arb 3 | output-localization-file: app_localizations.dart 4 | untranslated-messages-file: desiredFileName.txt -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-xhdpi/android12splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevey339/kelivo/HEAD/android/app/src/main/res/drawable-xhdpi/android12splash.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-xxhdpi/android12splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevey339/kelivo/HEAD/android/app/src/main/res/drawable-xxhdpi/android12splash.png -------------------------------------------------------------------------------- /dependencies/flutter_tts/android/.gitignore: -------------------------------------------------------------------------------- 1 | *.iml 2 | .gradle 3 | /local.properties 4 | /.idea/workspace.xml 5 | /.idea/libraries 6 | .DS_Store 7 | /build 8 | /captures 9 | -------------------------------------------------------------------------------- /macos/Flutter/Flutter-Debug.xcconfig: -------------------------------------------------------------------------------- 1 | #include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" 2 | #include "ephemeral/Flutter-Generated.xcconfig" 3 | -------------------------------------------------------------------------------- /macos/Flutter/Flutter-Release.xcconfig: -------------------------------------------------------------------------------- 1 | #include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" 2 | #include "ephemeral/Flutter-Generated.xcconfig" 3 | -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-xxxhdpi/android12splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevey339/kelivo/HEAD/android/app/src/main/res/drawable-xxxhdpi/android12splash.png -------------------------------------------------------------------------------- /android/app/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #FFFFFF 4 | -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevey339/kelivo/HEAD/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png -------------------------------------------------------------------------------- /macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevey339/kelivo/HEAD/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png -------------------------------------------------------------------------------- /macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevey339/kelivo/HEAD/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png -------------------------------------------------------------------------------- /macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevey339/kelivo/HEAD/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-hdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevey339/kelivo/HEAD/android/app/src/main/res/drawable-hdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-mdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevey339/kelivo/HEAD/android/app/src/main/res/drawable-mdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-night-hdpi/android12splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevey339/kelivo/HEAD/android/app/src/main/res/drawable-night-hdpi/android12splash.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-night-mdpi/android12splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevey339/kelivo/HEAD/android/app/src/main/res/drawable-night-mdpi/android12splash.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-night-xhdpi/android12splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevey339/kelivo/HEAD/android/app/src/main/res/drawable-night-xhdpi/android12splash.png -------------------------------------------------------------------------------- /macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevey339/kelivo/HEAD/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png -------------------------------------------------------------------------------- /macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevey339/kelivo/HEAD/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png -------------------------------------------------------------------------------- /macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevey339/kelivo/HEAD/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png -------------------------------------------------------------------------------- /macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevey339/kelivo/HEAD/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-night-xxhdpi/android12splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevey339/kelivo/HEAD/android/app/src/main/res/drawable-night-xxhdpi/android12splash.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-night-xxxhdpi/android12splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevey339/kelivo/HEAD/android/app/src/main/res/drawable-night-xxxhdpi/android12splash.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-xhdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevey339/kelivo/HEAD/android/app/src/main/res/drawable-xhdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-xxhdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevey339/kelivo/HEAD/android/app/src/main/res/drawable-xxhdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-xxxhdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevey339/kelivo/HEAD/android/app/src/main/res/drawable-xxxhdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevey339/kelivo/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevey339/kelivo/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevey339/kelivo/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevey339/kelivo/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevey339/kelivo/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevey339/kelivo/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-38x38@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevey339/kelivo/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-38x38@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-38x38@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevey339/kelivo/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-38x38@3x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevey339/kelivo/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevey339/kelivo/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevey339/kelivo/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevey339/kelivo/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevey339/kelivo/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevey339/kelivo/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevey339/kelivo/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevey339/kelivo/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevey339/kelivo/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-64x64@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevey339/kelivo/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-64x64@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-64x64@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevey339/kelivo/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-64x64@3x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-68x68@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevey339/kelivo/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-68x68@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevey339/kelivo/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevey339/kelivo/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevey339/kelivo/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevey339/kelivo/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchBackground.imageset/background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevey339/kelivo/HEAD/ios/Runner/Assets.xcassets/LaunchBackground.imageset/background.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevey339/kelivo/HEAD/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevey339/kelivo/HEAD/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImageDark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevey339/kelivo/HEAD/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImageDark.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImageDark@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevey339/kelivo/HEAD/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImageDark@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImageDark@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevey339/kelivo/HEAD/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImageDark@3x.png -------------------------------------------------------------------------------- /dependencies/flutter_tts/android/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 4 | -------------------------------------------------------------------------------- /dependencies/tray_manager/packages/tray_manager/lib/tray_manager.dart: -------------------------------------------------------------------------------- 1 | export 'package:menu_base/menu_base.dart'; 2 | 3 | export 'src/tray_listener.dart'; 4 | export 'src/tray_manager.dart'; 5 | -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevey339/kelivo/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevey339/kelivo/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Dark-20x20@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevey339/kelivo/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Dark-20x20@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Dark-20x20@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevey339/kelivo/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Dark-20x20@3x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Dark-29x29@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevey339/kelivo/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Dark-29x29@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Dark-29x29@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevey339/kelivo/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Dark-29x29@3x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Dark-38x38@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevey339/kelivo/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Dark-38x38@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Dark-38x38@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevey339/kelivo/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Dark-38x38@3x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Dark-40x40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevey339/kelivo/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Dark-40x40@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Dark-40x40@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevey339/kelivo/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Dark-40x40@3x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Dark-60x60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevey339/kelivo/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Dark-60x60@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Dark-60x60@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevey339/kelivo/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Dark-60x60@3x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Dark-64x64@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevey339/kelivo/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Dark-64x64@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Dark-64x64@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevey339/kelivo/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Dark-64x64@3x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Dark-68x68@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevey339/kelivo/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Dark-68x68@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Dark-76x76@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevey339/kelivo/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Dark-76x76@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchBackground.imageset/darkbackground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevey339/kelivo/HEAD/ios/Runner/Assets.xcassets/LaunchBackground.imageset/darkbackground.png -------------------------------------------------------------------------------- /android/gradle.properties: -------------------------------------------------------------------------------- 1 | org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError 2 | android.useAndroidX=true 3 | android.enableJetifier=true 4 | -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Dark-1024x1024@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevey339/kelivo/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Dark-1024x1024@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Dark-83.5x83.5@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevey339/kelivo/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-Dark-83.5x83.5@2x.png -------------------------------------------------------------------------------- /devtools_options.yaml: -------------------------------------------------------------------------------- 1 | description: This file stores settings for Dart & Flutter DevTools. 2 | documentation: https://docs.flutter.dev/tools/devtools/extensions#configure-extension-enablement-states 3 | extensions: 4 | -------------------------------------------------------------------------------- /assets/icons/stop.svg: -------------------------------------------------------------------------------- 1 | 4 | -------------------------------------------------------------------------------- /ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /lib/features/chat/models/message_edit_result.dart: -------------------------------------------------------------------------------- 1 | class MessageEditResult { 2 | final String content; 3 | final bool shouldSend; 4 | 5 | const MessageEditResult({required this.content, this.shouldSend = false}); 6 | } 7 | -------------------------------------------------------------------------------- /linux/runner/main.cc: -------------------------------------------------------------------------------- 1 | #include "my_application.h" 2 | 3 | int main(int argc, char** argv) { 4 | g_autoptr(MyApplication) app = my_application_new(); 5 | return g_application_run(G_APPLICATION(app), argc, argv); 6 | } 7 | -------------------------------------------------------------------------------- /assets/icons/list.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /assets/icons/list2.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /dependencies/tray_manager/pubspec.yaml: -------------------------------------------------------------------------------- 1 | name: tray_manager_workspace 2 | homepage: https://github.com/leanflutter/tray_manager 3 | publish_to: none 4 | 5 | environment: 6 | sdk: ">=3.0.0 <4.0.0" 7 | 8 | dev_dependencies: 9 | melos: ^3.1.0 10 | -------------------------------------------------------------------------------- /android/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | zipStoreBase=GRADLE_USER_HOME 4 | zipStorePath=wrapper/dists 5 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.12-all.zip 6 | -------------------------------------------------------------------------------- /assets/icons/jina-color.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /dependencies/mcp_client/lib/src/transport/event_source.dart: -------------------------------------------------------------------------------- 1 | library; 2 | 3 | /// Export the appropriate implementation based on platform 4 | export 'event_source_stub.dart' 5 | if (dart.library.io) 'event_source_io.dart' 6 | if (dart.library.html) 'event_source_web.dart'; 7 | -------------------------------------------------------------------------------- /dependencies/mcp_client/.gitignore: -------------------------------------------------------------------------------- 1 | # https://dart.dev/guides/libraries/private-files 2 | # Created by `dart pub` 3 | .dart_tool/ 4 | .idea 5 | 6 | # Avoid committing pubspec.lock for library packages; see 7 | # https://dart.dev/guides/libraries/private-files#pubspeclock. 8 | pubspec.lock 9 | 10 | -------------------------------------------------------------------------------- /ios/Runner.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreviewsEnabled 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /dependencies/flutter_tts/android/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | #Fri Sep 27 12:18:40 PDT 2019 2 | distributionBase=GRADLE_USER_HOME 3 | distributionPath=wrapper/dists 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.2-all.zip 7 | -------------------------------------------------------------------------------- /macos/Runner.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /dependencies/flutter_tts/analysis_options.yaml: -------------------------------------------------------------------------------- 1 | include: package:lints/recommended.yaml 2 | 3 | analyzer: 4 | language: 5 | strict-casts: true 6 | strict-inference: true 7 | strict-raw-types: true 8 | errors: 9 | unused_import: error 10 | unused_local_variable: error 11 | dead_code: error 12 | -------------------------------------------------------------------------------- /dependencies/mcp_client/lib/src/transport/http_client.dart: -------------------------------------------------------------------------------- 1 | /// Platform-specific HTTP client implementation 2 | library; 3 | 4 | /// Export the appropriate implementation based on platform 5 | export 'http_client_stub.dart' 6 | if (dart.library.io) 'http_client_io.dart' 7 | if (dart.library.html) 'http_client_web.dart'; -------------------------------------------------------------------------------- /ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /android/.gitignore: -------------------------------------------------------------------------------- 1 | gradle-wrapper.jar 2 | /.gradle 3 | /captures/ 4 | /gradlew 5 | /gradlew.bat 6 | /local.properties 7 | GeneratedPluginRegistrant.java 8 | .cxx/ 9 | 10 | # Remember to never publicly share your keystore. 11 | # See https://flutter.dev/to/reference-keystore 12 | key.properties 13 | **/*.keystore 14 | **/*.jks 15 | -------------------------------------------------------------------------------- /ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreviewsEnabled 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /ios/RunnerTests/RunnerTests.swift: -------------------------------------------------------------------------------- 1 | import Flutter 2 | import UIKit 3 | import XCTest 4 | 5 | class RunnerTests: XCTestCase { 6 | 7 | func testExample() { 8 | // If you add code to the Runner application, consider adding tests here. 9 | // See https://developer.apple.com/documentation/xctest for more information about using XCTest. 10 | } 11 | 12 | } 13 | -------------------------------------------------------------------------------- /macos/RunnerTests/RunnerTests.swift: -------------------------------------------------------------------------------- 1 | import Cocoa 2 | import FlutterMacOS 3 | import XCTest 4 | 5 | class RunnerTests: XCTestCase { 6 | 7 | func testExample() { 8 | // If you add code to the Runner application, consider adding tests here. 9 | // See https://developer.apple.com/documentation/xctest for more information about using XCTest. 10 | } 11 | 12 | } 13 | -------------------------------------------------------------------------------- /macos/Runner/Release.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | com.apple.security.files.user-selected.read-write 6 | 7 | com.apple.security.network.client 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /windows/.gitignore: -------------------------------------------------------------------------------- 1 | flutter/ephemeral/ 2 | 3 | # Visual Studio user-specific files. 4 | *.suo 5 | *.user 6 | *.userosscache 7 | *.sln.docstates 8 | 9 | # Visual Studio build-related files. 10 | x64/ 11 | x86/ 12 | 13 | # Visual Studio cache files 14 | # files ending in .cache can be ignored 15 | *.[Cc]ache 16 | # but keep track of directories ending in .cache 17 | !*.[Cc]ache/ 18 | -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md: -------------------------------------------------------------------------------- 1 | # Launch Screen Assets 2 | 3 | You can customize the launch screen with your own desired assets by replacing the image files in this directory. 4 | 5 | You can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images. -------------------------------------------------------------------------------- /dependencies/tray_manager/packages/tray_manager/.metadata: -------------------------------------------------------------------------------- 1 | # This file tracks properties of this Flutter project. 2 | # Used by Flutter tool to assess capabilities and perform upgrades etc. 3 | # 4 | # This file should be version controlled and should not be manually edited. 5 | 6 | version: 7 | revision: f4abaa0735eba4dfd8f33f73363911d63931fe03 8 | channel: stable 9 | 10 | project_type: plugin 11 | -------------------------------------------------------------------------------- /android/app/src/main/res/drawable/launch_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /lib/core/models/chat_item.dart: -------------------------------------------------------------------------------- 1 | class ChatItem { 2 | final String id; 3 | final String title; 4 | final DateTime created; 5 | 6 | ChatItem({required this.id, required this.title, required this.created}); 7 | 8 | ChatItem copyWith({String? id, String? title, DateTime? created}) => 9 | ChatItem(id: id ?? this.id, title: title ?? this.title, created: created ?? this.created); 10 | } 11 | 12 | -------------------------------------------------------------------------------- /linux/flutter/generated_plugin_registrant.h: -------------------------------------------------------------------------------- 1 | // 2 | // Generated file. Do not edit. 3 | // 4 | 5 | // clang-format off 6 | 7 | #ifndef GENERATED_PLUGIN_REGISTRANT_ 8 | #define GENERATED_PLUGIN_REGISTRANT_ 9 | 10 | #include 11 | 12 | // Registers Flutter plugins. 13 | void fl_register_plugins(FlPluginRegistry* registry); 14 | 15 | #endif // GENERATED_PLUGIN_REGISTRANT_ 16 | -------------------------------------------------------------------------------- /windows/flutter/generated_plugin_registrant.h: -------------------------------------------------------------------------------- 1 | // 2 | // Generated file. Do not edit. 3 | // 4 | 5 | // clang-format off 6 | 7 | #ifndef GENERATED_PLUGIN_REGISTRANT_ 8 | #define GENERATED_PLUGIN_REGISTRANT_ 9 | 10 | #include 11 | 12 | // Registers Flutter plugins. 13 | void RegisterPlugins(flutter::PluginRegistry* registry); 14 | 15 | #endif // GENERATED_PLUGIN_REGISTRANT_ 16 | -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-night/launch_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-v21/launch_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /dependencies/flutter-permission-handler/permission_handler_windows/AUTHORS: -------------------------------------------------------------------------------- 1 | 2 | # Below is a list of people and organizations that have contributed 3 | # to the Flutter project. Names should be added to the list like so: 4 | # 5 | # Name/Organization 6 | 7 | Baseflow 8 | Alexandre Zollinger Chohfi 9 | Maurits van Beusekom 10 | -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-night-v21/launch_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /dependencies/tray_manager/packages/tray_manager/windows/.gitignore: -------------------------------------------------------------------------------- 1 | flutter/ 2 | 3 | # Visual Studio user-specific files. 4 | *.suo 5 | *.user 6 | *.userosscache 7 | *.sln.docstates 8 | 9 | # Visual Studio build-related files. 10 | x64/ 11 | x86/ 12 | 13 | # Visual Studio cache files 14 | # files ending in .cache can be ignored 15 | *.[Cc]ache 16 | # but keep track of directories ending in .cache 17 | !*.[Cc]ache/ 18 | -------------------------------------------------------------------------------- /dependencies/mcp_client/lib/logger.dart: -------------------------------------------------------------------------------- 1 | // Re-export logging package 2 | export 'package:logging/logging.dart'; 3 | 4 | import 'package:logging/logging.dart'; 5 | 6 | // Extension methods for backward compatibility 7 | extension LoggerExtensions on Logger { 8 | void debug(String message) => fine(message); 9 | void error(String message) => severe(message); 10 | void warn(String message) => warning(message); 11 | } 12 | -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /assets/icons/anthropic.svg: -------------------------------------------------------------------------------- 1 | 3 | Anthropic 4 | 6 | 7 | -------------------------------------------------------------------------------- /assets/icons/xai.svg: -------------------------------------------------------------------------------- 1 | 3 | Grok 4 | 6 | 7 | -------------------------------------------------------------------------------- /ios/build/XCBuildData/244ad98267b9bae76c9152f067b8b9d3.xcbuilddata/manifest.json: -------------------------------------------------------------------------------- 1 | {"client":{"name":"basic","version":0,"file-system":"device-agnostic","perform-ownership-analysis":"no"},"targets":{"":[""]},"commands":{"":{"tool":"phony","inputs":[""],"outputs":[""]},"P0:::Gate WorkspaceHeaderMapVFSFilesWritten":{"tool":"phony","inputs":[],"outputs":[""]}}} -------------------------------------------------------------------------------- /android/app/src/debug/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /android/app/src/profile/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /dependencies/flutter-permission-handler/permission_handler_windows/windows/.gitignore: -------------------------------------------------------------------------------- 1 | flutter/ 2 | 3 | # Visual Studio user-specific files. 4 | *.suo 5 | *.user 6 | *.userosscache 7 | *.sln.docstates 8 | 9 | # Visual Studio build-related files. 10 | x64/ 11 | x86/ 12 | 13 | # Visual Studio cache files 14 | # files ending in .cache can be ignored 15 | *.[Cc]ache 16 | # but keep track of directories ending in .cache 17 | !*.[Cc]ache/ 18 | -------------------------------------------------------------------------------- /dependencies/flutter_tts/ios/.gitignore: -------------------------------------------------------------------------------- 1 | .idea/ 2 | .vagrant/ 3 | .sconsign.dblite 4 | .svn/ 5 | 6 | .DS_Store 7 | *.swp 8 | profile 9 | 10 | DerivedData/ 11 | build/ 12 | 13 | *.pbxuser 14 | *.mode1v3 15 | *.mode2v3 16 | *.perspectivev3 17 | 18 | !default.pbxuser 19 | !default.mode1v3 20 | !default.mode2v3 21 | !default.perspectivev3 22 | 23 | xcuserdata 24 | 25 | *.moved-aside 26 | 27 | *.pyc 28 | *sync/ 29 | Icon? 30 | .tags* 31 | 32 | -------------------------------------------------------------------------------- /lib/shared/responsive/adaptive_spacing.dart: -------------------------------------------------------------------------------- 1 | import 'breakpoints.dart'; 2 | 3 | class AdaptiveSpacing { 4 | static double horizontalPadding(ScreenType t) { 5 | switch (t) { 6 | case ScreenType.mobile: 7 | return 16; 8 | case ScreenType.tablet: 9 | return 24; 10 | case ScreenType.desktop: 11 | return 32; 12 | case ScreenType.wide: 13 | return 48; 14 | } 15 | } 16 | } 17 | 18 | -------------------------------------------------------------------------------- /lib/utils/url_launcher_ext.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:url_launcher/url_launcher.dart'; 3 | 4 | extension BuildContextUrlLauncher on BuildContext { 5 | Future openUrl(String url) async { 6 | final uri = Uri.tryParse(url); 7 | if (uri == null) return; 8 | if (await canLaunchUrl(uri)) { 9 | await launchUrl(uri, mode: LaunchMode.externalApplication); 10 | } 11 | } 12 | } 13 | 14 | -------------------------------------------------------------------------------- /dependencies/tray_manager/packages/tray_manager/lib/src/helpers/sandbox.dart: -------------------------------------------------------------------------------- 1 | import 'dart:io'; 2 | 3 | /// Returns `true` if the app is running in a sandbox, eg. Flatpak, Snap, Docker, Podman. 4 | bool runningInSandbox() { 5 | return Platform.environment.containsKey('FLATPAK_ID') || 6 | Platform.environment.containsKey('SNAP') || 7 | (Platform.environment['container']?.isNotEmpty == true) || 8 | FileSystemEntity.isFileSync('/.dockerenv'); 9 | } 10 | -------------------------------------------------------------------------------- /assets/icons/exa-color.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /lib/shared/responsive/responsive_builder.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/widgets.dart'; 2 | import 'breakpoints.dart'; 3 | 4 | class ResponsiveBuilder extends StatelessWidget { 5 | final Widget Function(BuildContext, ScreenType) builder; 6 | const ResponsiveBuilder({super.key, required this.builder}); 7 | 8 | @override 9 | Widget build(BuildContext context) { 10 | final type = screenTypeForContext(context); 11 | return builder(context, type); 12 | } 13 | } 14 | 15 | -------------------------------------------------------------------------------- /linux/runner/my_application.h: -------------------------------------------------------------------------------- 1 | #ifndef FLUTTER_MY_APPLICATION_H_ 2 | #define FLUTTER_MY_APPLICATION_H_ 3 | 4 | #include 5 | 6 | G_DECLARE_FINAL_TYPE(MyApplication, my_application, MY, APPLICATION, 7 | GtkApplication) 8 | 9 | /** 10 | * my_application_new: 11 | * 12 | * Creates a new Flutter-based application. 13 | * 14 | * Returns: a new #MyApplication. 15 | */ 16 | MyApplication* my_application_new(); 17 | 18 | #endif // FLUTTER_MY_APPLICATION_H_ 19 | -------------------------------------------------------------------------------- /lib/shared/responsive/adaptive_grid.dart: -------------------------------------------------------------------------------- 1 | import 'breakpoints.dart'; 2 | 3 | class AdaptiveGrid { 4 | static int columns(ScreenType t, {int mobileColumns = 1}) { 5 | switch (t) { 6 | case ScreenType.mobile: 7 | return mobileColumns; 8 | case ScreenType.tablet: 9 | return mobileColumns * 2; 10 | case ScreenType.desktop: 11 | return mobileColumns * 3; 12 | case ScreenType.wide: 13 | return mobileColumns * 4; 14 | } 15 | } 16 | } 17 | 18 | -------------------------------------------------------------------------------- /assets/icons/searxng-color.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /macos/Runner/DebugProfile.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | com.apple.security.files.user-selected.read-write 6 | 7 | com.apple.security.cs.allow-jit 8 | 9 | com.apple.security.network.client 10 | 11 | com.apple.security.network.server 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchBackground.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "background.png", 5 | "idiom" : "universal" 6 | }, 7 | { 8 | "appearances" : [ 9 | { 10 | "appearance" : "luminosity", 11 | "value" : "dark" 12 | } 13 | ], 14 | "filename" : "darkbackground.png", 15 | "idiom" : "universal" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /windows/runner/resource.h: -------------------------------------------------------------------------------- 1 | //{{NO_DEPENDENCIES}} 2 | // Microsoft Visual C++ generated include file. 3 | // Used by Runner.rc 4 | // 5 | #define IDI_APP_ICON 101 6 | 7 | // Next default values for new objects 8 | // 9 | #ifdef APSTUDIO_INVOKED 10 | #ifndef APSTUDIO_READONLY_SYMBOLS 11 | #define _APS_NEXT_RESOURCE_VALUE 102 12 | #define _APS_NEXT_COMMAND_VALUE 40001 13 | #define _APS_NEXT_CONTROL_VALUE 1001 14 | #define _APS_NEXT_SYMED_VALUE 101 15 | #endif 16 | #endif 17 | -------------------------------------------------------------------------------- /dependencies/tray_manager/packages/tray_manager/lib/src/tray_listener.dart: -------------------------------------------------------------------------------- 1 | import 'package:menu_base/menu_base.dart'; 2 | 3 | abstract mixin class TrayListener { 4 | /// Emitted when the mouse clicks the tray icon. 5 | void onTrayIconMouseDown() {} 6 | 7 | /// Emitted when the mouse is released from clicking the tray icon. 8 | void onTrayIconMouseUp() {} 9 | 10 | void onTrayIconRightMouseDown() {} 11 | 12 | void onTrayIconRightMouseUp() {} 13 | 14 | void onTrayMenuItemClick(MenuItem menuItem) {} 15 | } 16 | -------------------------------------------------------------------------------- /dependencies/tray_manager/.github/workflows/test.yml: -------------------------------------------------------------------------------- 1 | name: test 2 | 3 | on: 4 | push: 5 | branches: [main, dev] 6 | pull_request: 7 | branches: [main] 8 | 9 | jobs: 10 | test: 11 | runs-on: ubuntu-latest 12 | steps: 13 | - uses: actions/checkout@v3 14 | - uses: subosito/flutter-action@v2 15 | with: 16 | flutter-version: "3.24.5" 17 | channel: "stable" 18 | cache: true 19 | - uses: bluefireteam/melos-action@v3 20 | - run: melos run test --no-select 21 | -------------------------------------------------------------------------------- /assets/icons/siliconflow-color.svg: -------------------------------------------------------------------------------- 1 | SiliconCloud -------------------------------------------------------------------------------- /dependencies/tray_manager/.clang-format: -------------------------------------------------------------------------------- 1 | # Defines the Chromium style for automatic reformatting. 2 | # http://clang.llvm.org/docs/ClangFormatStyleOptions.html 3 | BasedOnStyle: Chromium 4 | # This defaults to 'Auto'. Explicitly set it for a while, so that 5 | # 'vector >' in existing files gets formatted to 6 | # 'vector>'. ('Auto' means that clang-format will only use 7 | # 'int>>' if the file already contains at least one such instance.) 8 | Standard: Cpp11 9 | SortIncludes: true 10 | --- 11 | Language: ObjC 12 | ColumnLimit: 100 13 | -------------------------------------------------------------------------------- /lib/theme/theme_provider.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class ThemeProvider extends ChangeNotifier { 4 | ThemeMode _mode = ThemeMode.system; 5 | 6 | ThemeMode get themeMode => _mode; 7 | 8 | void toggleTheme() { 9 | _mode = _mode == ThemeMode.dark ? ThemeMode.light : ThemeMode.dark; 10 | notifyListeners(); 11 | } 12 | 13 | void followSystem() { 14 | _mode = ThemeMode.system; 15 | notifyListeners(); 16 | } 17 | 18 | void setThemeMode(ThemeMode mode) { 19 | _mode = mode; 20 | notifyListeners(); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /lib/desktop/hotkeys/chat_action_bus.dart: -------------------------------------------------------------------------------- 1 | import 'dart:async'; 2 | 3 | enum ChatAction { 4 | newTopic, 5 | toggleLeftPanelAssistants, 6 | toggleLeftPanelTopics, 7 | focusInput, 8 | switchModel, 9 | } 10 | 11 | class ChatActionBus { 12 | ChatActionBus._(); 13 | static final ChatActionBus instance = ChatActionBus._(); 14 | 15 | final _controller = StreamController.broadcast(); 16 | Stream get stream => _controller.stream; 17 | void fire(ChatAction action) => _controller.add(action); 18 | void dispose() => _controller.close(); 19 | } 20 | -------------------------------------------------------------------------------- /lib/shared/widgets/export_capture_scope.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/widgets.dart'; 2 | 3 | class ExportCaptureScope extends InheritedWidget { 4 | final bool enabled; 5 | const ExportCaptureScope({super.key, required this.enabled, required super.child}); 6 | 7 | static bool of(BuildContext context) { 8 | final scope = context.dependOnInheritedWidgetOfExactType(); 9 | return scope?.enabled ?? false; 10 | } 11 | 12 | @override 13 | bool updateShouldNotify(covariant ExportCaptureScope oldWidget) => oldWidget.enabled != enabled; 14 | } 15 | 16 | -------------------------------------------------------------------------------- /lib/shared/responsive/screen_type_helper.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/widgets.dart'; 2 | import 'breakpoints.dart'; 3 | 4 | class ResponsiveHelper { 5 | static ScreenType screenType(BuildContext context) => screenTypeForContext(context); 6 | static bool isMobile(BuildContext c) => screenTypeForContext(c) == ScreenType.mobile; 7 | static bool isTablet(BuildContext c) => screenTypeForContext(c) == ScreenType.tablet; 8 | static bool isDesktop(BuildContext c) { 9 | final t = screenTypeForContext(c); 10 | return t == ScreenType.desktop || t == ScreenType.wide; 11 | } 12 | } 13 | 14 | -------------------------------------------------------------------------------- /assets/icons/deepthink.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 8 | 9 | 10 | 11 | 12 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /android/build.gradle.kts: -------------------------------------------------------------------------------- 1 | allprojects { 2 | repositories { 3 | google() 4 | mavenCentral() 5 | } 6 | } 7 | 8 | val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() 9 | rootProject.layout.buildDirectory.value(newBuildDir) 10 | 11 | subprojects { 12 | val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) 13 | project.layout.buildDirectory.value(newSubprojectBuildDir) 14 | } 15 | subprojects { 16 | project.evaluationDependsOn(":app") 17 | } 18 | 19 | tasks.register("clean") { 20 | delete(rootProject.layout.buildDirectory) 21 | } 22 | -------------------------------------------------------------------------------- /lib/desktop/menu_anchor.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class DesktopMenuAnchor { 4 | static Offset? _last; 5 | 6 | static void setPosition(Offset globalPosition) { 7 | _last = globalPosition; 8 | } 9 | 10 | static Offset positionOrCenter(BuildContext context) { 11 | if (_last != null) return _last!; 12 | final overlay = Overlay.of(context)?.context.findRenderObject() as RenderBox?; 13 | if (overlay != null) { 14 | final size = overlay.size; 15 | return Offset(size.width / 2, size.height / 2); 16 | } 17 | return const Offset(300, 300); 18 | } 19 | } 20 | 21 | -------------------------------------------------------------------------------- /assets/icons/qq.svg: -------------------------------------------------------------------------------- 1 | QQ -------------------------------------------------------------------------------- /lib/core/models/chat_input_data.dart: -------------------------------------------------------------------------------- 1 | class DocumentAttachment { 2 | final String path; // absolute file path 3 | final String fileName; 4 | final String mime; // e.g. application/pdf, text/plain 5 | 6 | const DocumentAttachment({required this.path, required this.fileName, required this.mime}); 7 | } 8 | 9 | class ChatInputData { 10 | final String text; 11 | final List imagePaths; // absolute file paths or data URLs 12 | final List documents; // selected files 13 | 14 | const ChatInputData({ 15 | required this.text, 16 | this.imagePaths = const [], 17 | this.documents = const [], 18 | }); 19 | } 20 | -------------------------------------------------------------------------------- /assets/icons/perplexity-color.svg: -------------------------------------------------------------------------------- 1 | 2 | Perplexity 3 | 6 | 7 | -------------------------------------------------------------------------------- /flutter_launcher_icons.yaml: -------------------------------------------------------------------------------- 1 | flutter_launcher_icons: 2 | android: true 3 | ios: true 4 | image_path: assets/app_icon_2.png 5 | image_path_ios: "assets/app_icon_2.png" 6 | image_path_ios_dark_transparent: "assets/app_icon_dark.png" 7 | adaptive_icon_background: "#FFFFFF" 8 | adaptive_icon_foreground: assets/app_icon_2.png 9 | min_sdk_android: 21 10 | web: 11 | generate: true 12 | image_path: "assets/app_icon.png" 13 | background_color: "#FFFFFF" 14 | windows: 15 | generate: true 16 | image_path: "assets/app_icon.png" 17 | icon_size: 256 18 | macos: 19 | generate: true 20 | image_path: "assets/app_icon_macos2.png" 21 | -------------------------------------------------------------------------------- /macos/Runner/Configs/Warnings.xcconfig: -------------------------------------------------------------------------------- 1 | WARNING_CFLAGS = -Wall -Wconditional-uninitialized -Wnullable-to-nonnull-conversion -Wmissing-method-return-type -Woverlength-strings 2 | GCC_WARN_UNDECLARED_SELECTOR = YES 3 | CLANG_UNDEFINED_BEHAVIOR_SANITIZER_NULLABILITY = YES 4 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE 5 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES 6 | CLANG_WARN_PRAGMA_PACK = YES 7 | CLANG_WARN_STRICT_PROTOTYPES = YES 8 | CLANG_WARN_COMMA = YES 9 | GCC_WARN_STRICT_SELECTOR_MATCH = YES 10 | CLANG_WARN_OBJC_REPEATED_USE_OF_WEAK = YES 11 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES 12 | GCC_WARN_SHADOW = YES 13 | CLANG_WARN_UNREACHABLE_CODE = YES 14 | -------------------------------------------------------------------------------- /lib/theme/design_tokens.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class AppColors { 4 | static const Color textMuted = Colors.black54; 5 | } 6 | 7 | class AppShadows { 8 | static List soft = [ 9 | BoxShadow( 10 | color: Colors.black.withOpacity(0.05), 11 | blurRadius: 18, 12 | offset: const Offset(0, 6), 13 | ), 14 | ]; 15 | } 16 | 17 | class AppRadii { 18 | static const double capsule = 28; 19 | } 20 | 21 | class AppSpacing { 22 | static const double xxs = 4; 23 | static const double xs = 8; 24 | static const double sm = 12; 25 | static const double md = 16; 26 | static const double lg = 20; 27 | } 28 | -------------------------------------------------------------------------------- /lib/desktop/desktop_chat_page.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import '../features/home/pages/home_page.dart'; 3 | 4 | /// Desktop chat page entry. 5 | /// For phase 1, reuse the tablet layout that already exists in HomePage when the width is large. 6 | /// Later we can extract the tablet branch into a dedicated desktop layout under this folder. 7 | class DesktopChatPage extends StatelessWidget { 8 | const DesktopChatPage({super.key}); 9 | 10 | @override 11 | Widget build(BuildContext context) { 12 | // Reuse existing chat experience (tablet branch) without modifying mobile implementation. 13 | return const HomePage(); 14 | } 15 | } 16 | 17 | -------------------------------------------------------------------------------- /dependencies/flutter_tts/ios/Classes/AudioCategory.swift: -------------------------------------------------------------------------------- 1 | import AVFoundation 2 | 3 | enum AudioCategory: String { 4 | case iosAudioCategoryAmbientSolo 5 | case iosAudioCategoryAmbient 6 | case iosAudioCategoryPlayback 7 | case iosAudioCategoryPlaybackAndRecord 8 | 9 | func toAVAudioSessionCategory() -> AVAudioSession.Category { 10 | switch self { 11 | case .iosAudioCategoryAmbientSolo: 12 | return .soloAmbient 13 | case .iosAudioCategoryAmbient: 14 | return .ambient 15 | case .iosAudioCategoryPlayback: 16 | return .playback 17 | case .iosAudioCategoryPlaybackAndRecord: 18 | return .playAndRecord 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /assets/icons/stepfun-color.svg: -------------------------------------------------------------------------------- 1 | Stepfun -------------------------------------------------------------------------------- /dependencies/flutter_tts/ios/Classes/FlutterTtsPlugin.m: -------------------------------------------------------------------------------- 1 | #import "FlutterTtsPlugin.h" 2 | #if __has_include() 3 | #import 4 | #else 5 | // Support project import fallback if the generated compatibility header 6 | // is not copied when this plugin is created as a library. 7 | // https://forums.swift.org/t/swift-static-libraries-dont-copy-generated-objective-c-header/19816 8 | #import "flutter_tts-Swift.h" 9 | #endif 10 | 11 | @implementation FlutterTtsPlugin 12 | + (void)registerWithRegistrar:(NSObject*)registrar { 13 | [SwiftFlutterTtsPlugin registerWithRegistrar:registrar]; 14 | } 15 | @end 16 | -------------------------------------------------------------------------------- /macos/Runner/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | import Cocoa 2 | import FlutterMacOS 3 | 4 | @main 5 | class AppDelegate: FlutterAppDelegate { 6 | override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { 7 | return false 8 | } 9 | 10 | override func applicationShouldHandleReopen(_ sender: NSApplication, hasVisibleWindows flag: Bool) -> Bool { 11 | if !flag { 12 | for window in sender.windows { 13 | window.makeKeyAndOrderFront(self) 14 | } 15 | } 16 | 17 | return true 18 | } 19 | 20 | override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { 21 | return true 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /macos/Runner/Configs/AppInfo.xcconfig: -------------------------------------------------------------------------------- 1 | // Application-level settings for the Runner target. 2 | // 3 | // This may be replaced with something auto-generated from metadata (e.g., pubspec.yaml) in the 4 | // future. If not, the values below would default to using the project name when this becomes a 5 | // 'flutter create' template. 6 | 7 | // The application's name. By default this is also the title of the Flutter window. 8 | PRODUCT_NAME = kelivo 9 | 10 | // The application's bundle identifier 11 | PRODUCT_BUNDLE_IDENTIFIER = com.psyche.kelivo 12 | 13 | // The copyright displayed in application information 14 | PRODUCT_COPYRIGHT = Copyright © 2025 com.psyche. All rights reserved. 15 | -------------------------------------------------------------------------------- /windows/runner/runner.exe.manifest: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PerMonitorV2 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /dependencies/flutter_tts/pubspec.yaml: -------------------------------------------------------------------------------- 1 | name: flutter_tts 2 | description: A flutter plugin for Text to Speech. This plugin is supported on iOS, macOS, Android, Web, & Windows. 3 | version: 4.2.3 4 | homepage: https://github.com/dlutton/flutter_tts 5 | 6 | dependencies: 7 | flutter: 8 | sdk: flutter 9 | flutter_web_plugins: 10 | sdk: flutter 11 | 12 | flutter: 13 | plugin: 14 | platforms: 15 | android: 16 | package: com.tundralabs.fluttertts 17 | pluginClass: FlutterTtsPlugin 18 | ios: 19 | pluginClass: FlutterTtsPlugin 20 | 21 | environment: 22 | sdk: ">=3.4.0 <4.0.0" 23 | flutter: ">=1.22.0" 24 | dev_dependencies: 25 | lints: ^3.0.0 26 | -------------------------------------------------------------------------------- /dependencies/tray_manager/packages/tray_manager/.gitignore: -------------------------------------------------------------------------------- 1 | # Miscellaneous 2 | *.class 3 | *.log 4 | *.pyc 5 | *.swp 6 | .DS_Store 7 | .atom/ 8 | .buildlog/ 9 | .history 10 | .svn/ 11 | migrate_working_dir/ 12 | 13 | # IntelliJ related 14 | *.iml 15 | *.ipr 16 | *.iws 17 | .idea/ 18 | 19 | # The .vscode folder contains launch configuration and tasks you configure in 20 | # VS Code which you may wish to be included in version control, so this line 21 | # is commented out by default. 22 | #.vscode/ 23 | 24 | # Flutter/Dart/Pub related 25 | # Libraries should not include pubspec.lock, per https://dart.dev/guides/libraries/private-files#pubspeclock. 26 | /pubspec.lock 27 | **/doc/api/ 28 | .dart_tool/ 29 | build/ 30 | -------------------------------------------------------------------------------- /assets/icons/alibabacloud-color.svg: -------------------------------------------------------------------------------- 1 | 2 | AlibabaCloud 3 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /dependencies/tray_manager/packages/tray_manager/windows/include/tray_manager/tray_manager_plugin.h: -------------------------------------------------------------------------------- 1 | #ifndef FLUTTER_PLUGIN_TRAY_MANAGER_PLUGIN_H_ 2 | #define FLUTTER_PLUGIN_TRAY_MANAGER_PLUGIN_H_ 3 | 4 | #include 5 | 6 | #ifdef FLUTTER_PLUGIN_IMPL 7 | #define FLUTTER_PLUGIN_EXPORT __declspec(dllexport) 8 | #else 9 | #define FLUTTER_PLUGIN_EXPORT __declspec(dllimport) 10 | #endif 11 | 12 | #if defined(__cplusplus) 13 | extern "C" { 14 | #endif 15 | 16 | FLUTTER_PLUGIN_EXPORT void TrayManagerPluginRegisterWithRegistrar( 17 | FlutterDesktopPluginRegistrarRef registrar); 18 | 19 | #if defined(__cplusplus) 20 | } // extern "C" 21 | #endif 22 | 23 | #endif // FLUTTER_PLUGIN_TRAY_MANAGER_PLUGIN_H_ 24 | -------------------------------------------------------------------------------- /ios/.gitignore: -------------------------------------------------------------------------------- 1 | **/dgph 2 | *.mode1v3 3 | *.mode2v3 4 | *.moved-aside 5 | *.pbxuser 6 | *.perspectivev3 7 | **/*sync/ 8 | .sconsign.dblite 9 | .tags* 10 | **/.vagrant/ 11 | **/DerivedData/ 12 | Icon? 13 | **/Pods/ 14 | **/.symlinks/ 15 | profile 16 | xcuserdata 17 | **/.generated/ 18 | Flutter/App.framework 19 | Flutter/Flutter.framework 20 | Flutter/Flutter.podspec 21 | Flutter/Generated.xcconfig 22 | Flutter/ephemeral/ 23 | Flutter/app.flx 24 | Flutter/app.zip 25 | Flutter/flutter_assets/ 26 | Flutter/flutter_export_environment.sh 27 | ServiceDefinitions.json 28 | Runner/GeneratedPluginRegistrant.* 29 | 30 | # Exceptions to above rules. 31 | !default.mode1v3 32 | !default.mode2v3 33 | !default.pbxuser 34 | !default.perspectivev3 35 | -------------------------------------------------------------------------------- /assets/icons/mistral-color.svg: -------------------------------------------------------------------------------- 1 | 2 | Mistral 3 | 4 | 5 | 6 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /windows/runner/utils.h: -------------------------------------------------------------------------------- 1 | #ifndef RUNNER_UTILS_H_ 2 | #define RUNNER_UTILS_H_ 3 | 4 | #include 5 | #include 6 | 7 | // Creates a console for the process, and redirects stdout and stderr to 8 | // it for both the runner and the Flutter library. 9 | void CreateAndAttachConsole(); 10 | 11 | // Takes a null-terminated wchar_t* encoded in UTF-16 and returns a std::string 12 | // encoded in UTF-8. Returns an empty std::string on failure. 13 | std::string Utf8FromUtf16(const wchar_t* utf16_string); 14 | 15 | // Gets the command line arguments passed in as a std::vector, 16 | // encoded in UTF-8. Returns an empty std::vector on failure. 17 | std::vector GetCommandLineArguments(); 18 | 19 | #endif // RUNNER_UTILS_H_ 20 | -------------------------------------------------------------------------------- /ios/build/XCBuildData/244ad98267b9bae76c9152f067b8b9d3.xcbuilddata/build-request.json: -------------------------------------------------------------------------------- 1 | { 2 | "buildCommand" : { 3 | "command" : "build", 4 | "skipDependencies" : false, 5 | "style" : "buildOnly" 6 | }, 7 | "configuredTargets" : [ 8 | 9 | ], 10 | "continueBuildingAfterErrors" : false, 11 | "dependencyScope" : "workspace", 12 | "enableIndexBuildArena" : false, 13 | "hideShellScriptEnvironment" : false, 14 | "parameters" : { 15 | "action" : "build", 16 | "overrides" : { 17 | 18 | } 19 | }, 20 | "qos" : "default", 21 | "schemeCommand" : "launch", 22 | "showNonLoggedProgress" : true, 23 | "useDryRun" : false, 24 | "useImplicitDependencies" : false, 25 | "useLegacyBuildLocations" : false, 26 | "useParallelTargets" : true 27 | } -------------------------------------------------------------------------------- /lib/desktop/hotkeys/hotkey_event_bus.dart: -------------------------------------------------------------------------------- 1 | import 'dart:async'; 2 | 3 | /// App-wide hotkey actions broadcast bus. 4 | enum HotkeyAction { 5 | toggleAppVisibility, 6 | closeWindow, 7 | openSettings, 8 | newTopic, 9 | switchModel, 10 | toggleLeftPanelAssistants, 11 | toggleLeftPanelTopics, 12 | } 13 | 14 | class HotkeyEventBus { 15 | HotkeyEventBus._(); 16 | static final HotkeyEventBus instance = HotkeyEventBus._(); 17 | 18 | final _controller = StreamController.broadcast(); 19 | Stream get stream => _controller.stream; 20 | 21 | void fire(HotkeyAction action) { 22 | if (!_controller.isClosed) { 23 | _controller.add(action); 24 | } 25 | } 26 | 27 | void dispose() { 28 | _controller.close(); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /dependencies/flutter-permission-handler/permission_handler_windows/pubspec.yaml: -------------------------------------------------------------------------------- 1 | name: permission_handler_windows 2 | description: Permission plugin for Flutter. This plugin provides the Windows API to request and check permissions. 3 | version: 0.2.1 4 | homepage: https://github.com/baseflow/flutter-permission-handler 5 | 6 | flutter: 7 | plugin: 8 | implements: permission_handler 9 | platforms: 10 | windows: 11 | pluginClass: PermissionHandlerWindowsPlugin 12 | 13 | dependencies: 14 | flutter: 15 | sdk: flutter 16 | permission_handler_platform_interface: ^4.1.0 17 | 18 | dev_dependencies: 19 | flutter_test: 20 | sdk: flutter 21 | plugin_platform_interface: ^2.0.0 22 | 23 | environment: 24 | sdk: ">=2.12.0 <4.0.0" 25 | flutter: ">=2.0.0" 26 | -------------------------------------------------------------------------------- /lib/desktop/hotkeys/sidebar_tab_bus.dart: -------------------------------------------------------------------------------- 1 | import 'dart:async'; 2 | 3 | /// Desktop sidebar tabs control bus (Assistants/Topics) for embedded left panel. 4 | class DesktopSidebarTabBus { 5 | DesktopSidebarTabBus._(); 6 | static final DesktopSidebarTabBus instance = DesktopSidebarTabBus._(); 7 | 8 | final _controller = StreamController.broadcast(); 9 | // 0 = Assistants, 1 = Topics 10 | Stream get stream => _controller.stream; 11 | 12 | int _currentIndex = 0; 13 | int get currentIndex => _currentIndex; 14 | 15 | void setCurrentIndex(int index) { 16 | _currentIndex = index; 17 | } 18 | 19 | void switchToAssistants() => _controller.add(0); 20 | void switchToTopics() => _controller.add(1); 21 | 22 | void dispose() => _controller.close(); 23 | } 24 | 25 | -------------------------------------------------------------------------------- /dependencies/mcp_client/pubspec.yaml: -------------------------------------------------------------------------------- 1 | name: mcp_client 2 | description: Dart implementation of Model Context Protocol (MCP) client v2025-03-26. Supports embedded systems, modern async patterns, and full MCP standard compliance for LLM applications. 3 | version: 1.0.2 4 | homepage: https://app-appplayer.github.io/makemind 5 | repository: https://github.com/app-appplayer/mcp_client 6 | issue_tracker: https://github.com/app-appplayer/mcp_client/issues 7 | 8 | environment: 9 | sdk: ^3.7.0 10 | 11 | dependencies: 12 | http: ^1.2.0 13 | json_annotation: ^4.9.0 14 | uuid: ^4.5.1 15 | meta: ^1.15.0 16 | logging: ^1.2.0 17 | crypto: ^3.0.3 18 | 19 | dev_dependencies: 20 | lints: ^5.0.0 21 | test: ^1.25.0 22 | mockito: ^5.4.4 23 | build_runner: ^2.4.12 24 | json_serializable: ^6.8.0 -------------------------------------------------------------------------------- /assets/icons/grok.svg: -------------------------------------------------------------------------------- 1 | 3 | Grok 4 | 6 | 7 | -------------------------------------------------------------------------------- /lib/shared/responsive/breakpoints.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/widgets.dart'; 2 | 3 | class AppBreakpoints { 4 | static const double mobile = 600.0; 5 | static const double tablet = 900.0; 6 | static const double desktop = 1200.0; 7 | static const double wide = 1600.0; 8 | } 9 | 10 | enum ScreenType { mobile, tablet, desktop, wide } 11 | 12 | ScreenType screenTypeForWidth(double width) { 13 | if (width < AppBreakpoints.tablet) return ScreenType.mobile; 14 | if (width < AppBreakpoints.desktop) return ScreenType.tablet; 15 | if (width < AppBreakpoints.wide) return ScreenType.desktop; 16 | return ScreenType.wide; 17 | } 18 | 19 | ScreenType screenTypeForContext(BuildContext context) { 20 | final w = MediaQuery.sizeOf(context).width; 21 | return screenTypeForWidth(w); 22 | } 23 | 24 | -------------------------------------------------------------------------------- /dependencies/mcp_client/lib/src/transport/event_source_stub.dart: -------------------------------------------------------------------------------- 1 | /// Abstract EventSource interface for cross-platform SSE support 2 | abstract class EventSource { 3 | /// Whether the connection is active 4 | bool get isConnected; 5 | 6 | /// Get the HTTP response (if available) 7 | dynamic get response; 8 | 9 | /// Connect to an SSE endpoint 10 | Future connect( 11 | String url, { 12 | Map? headers, 13 | Function(String?)? onOpen, 14 | Function(dynamic)? onMessage, 15 | Function(dynamic)? onError, 16 | Function(String?)? onEndpoint, 17 | }); 18 | 19 | /// Close the connection 20 | void close(); 21 | 22 | /// Factory constructor that throws an error 23 | factory EventSource() => 24 | throw UnsupportedError('EventSource is not supported on this platform'); 25 | } 26 | -------------------------------------------------------------------------------- /dependencies/tray_manager/packages/tray_manager/linux/include/tray_manager/tray_manager_plugin.h: -------------------------------------------------------------------------------- 1 | #ifndef FLUTTER_PLUGIN_TRAY_MANAGER_PLUGIN_H_ 2 | #define FLUTTER_PLUGIN_TRAY_MANAGER_PLUGIN_H_ 3 | 4 | #include 5 | 6 | G_BEGIN_DECLS 7 | 8 | #ifdef FLUTTER_PLUGIN_IMPL 9 | #define FLUTTER_PLUGIN_EXPORT __attribute__((visibility("default"))) 10 | #else 11 | #define FLUTTER_PLUGIN_EXPORT 12 | #endif 13 | 14 | typedef struct _TrayManagerPlugin TrayManagerPlugin; 15 | typedef struct { 16 | GObjectClass parent_class; 17 | } TrayManagerPluginClass; 18 | 19 | FLUTTER_PLUGIN_EXPORT GType tray_manager_plugin_get_type(); 20 | 21 | FLUTTER_PLUGIN_EXPORT void tray_manager_plugin_register_with_registrar( 22 | FlPluginRegistrar* registrar); 23 | 24 | G_END_DECLS 25 | 26 | #endif // FLUTTER_PLUGIN_TRAY_MANAGER_PLUGIN_H_ 27 | -------------------------------------------------------------------------------- /dependencies/tray_manager/.github/workflows/lint.yml: -------------------------------------------------------------------------------- 1 | name: lint 2 | 3 | on: 4 | push: 5 | branches: [main, dev] 6 | pull_request: 7 | branches: [main] 8 | 9 | jobs: 10 | analyze: 11 | runs-on: ubuntu-latest 12 | steps: 13 | - uses: actions/checkout@v3 14 | - uses: subosito/flutter-action@v2 15 | with: 16 | flutter-version: "3.24.5" 17 | channel: "stable" 18 | - uses: bluefireteam/melos-action@v3 19 | - run: melos run analyze 20 | 21 | format: 22 | runs-on: ubuntu-latest 23 | steps: 24 | - uses: actions/checkout@v3 25 | - uses: subosito/flutter-action@v2 26 | with: 27 | flutter-version: "3.24.5" 28 | channel: "stable" 29 | cache: true 30 | - uses: bluefireteam/melos-action@v3 31 | - run: melos run format-check 32 | -------------------------------------------------------------------------------- /android/settings.gradle.kts: -------------------------------------------------------------------------------- 1 | pluginManagement { 2 | val flutterSdkPath = run { 3 | val properties = java.util.Properties() 4 | file("local.properties").inputStream().use { properties.load(it) } 5 | val flutterSdkPath = properties.getProperty("flutter.sdk") 6 | require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } 7 | flutterSdkPath 8 | } 9 | 10 | includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") 11 | 12 | repositories { 13 | google() 14 | mavenCentral() 15 | gradlePluginPortal() 16 | } 17 | } 18 | 19 | plugins { 20 | id("dev.flutter.flutter-plugin-loader") version "1.0.0" 21 | id("com.android.application") version "8.9.1" apply false 22 | id("org.jetbrains.kotlin.android") version "2.1.0" apply false 23 | } 24 | 25 | include(":app") 26 | -------------------------------------------------------------------------------- /dependencies/flutter_tts/ios/flutter_tts.podspec: -------------------------------------------------------------------------------- 1 | # 2 | # To learn more about a Podspec see http://guides.cocoapods.org/syntax/podspec.html 3 | # 4 | Pod::Spec.new do |s| 5 | s.name = 'flutter_tts' 6 | s.version = '0.0.1' 7 | s.summary = 'A flutter text to speech plugin.' 8 | s.description = <<-DESC 9 | A flutter text to speech plugin 10 | DESC 11 | s.homepage = 'https://github.com/dlutton/flutter_tts' 12 | s.license = { :file => '../LICENSE' } 13 | s.author = { 'tundralabs' => 'eyedea32@gmail.com' } 14 | s.source = { :path => '.' } 15 | s.source_files = 'Classes/**/*' 16 | s.public_header_files = 'Classes/**/*.h' 17 | s.dependency 'Flutter' 18 | s.ios.deployment_target = '8.0' 19 | s.swift_version = '4.2' 20 | s.static_framework = true 21 | end 22 | 23 | -------------------------------------------------------------------------------- /assets/icons/cohere-color.svg: -------------------------------------------------------------------------------- 1 | 2 | CommandA 3 | 6 | 9 | 11 | 12 | -------------------------------------------------------------------------------- /ios/Flutter/AppFrameworkInfo.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | App 9 | CFBundleIdentifier 10 | io.flutter.flutter.app 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | App 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1.0 23 | MinimumOSVersion 24 | 13.0 25 | 26 | 27 | -------------------------------------------------------------------------------- /dependencies/tray_manager/packages/tray_manager/pubspec.yaml: -------------------------------------------------------------------------------- 1 | name: tray_manager 2 | description: This plugin allows Flutter desktop apps to defines system tray. 3 | version: 0.5.2 4 | homepage: https://github.com/leanflutter/tray_manager 5 | 6 | platforms: 7 | linux: 8 | macos: 9 | windows: 10 | 11 | topics: 12 | - tray 13 | - tray-manager 14 | - system-tray 15 | 16 | environment: 17 | sdk: ">=3.0.0 <4.0.0" 18 | flutter: ">=3.3.0" 19 | 20 | dependencies: 21 | flutter: 22 | sdk: flutter 23 | menu_base: ^0.1.0 24 | path: ^1.8.0 25 | shortid: ^0.1.2 26 | 27 | dev_dependencies: 28 | flutter_test: 29 | sdk: flutter 30 | mostly_reasonable_lints: ^0.1.2 31 | 32 | flutter: 33 | plugin: 34 | platforms: 35 | linux: 36 | pluginClass: TrayManagerPlugin 37 | macos: 38 | pluginClass: TrayManagerPlugin 39 | windows: 40 | pluginClass: TrayManagerPlugin 41 | -------------------------------------------------------------------------------- /dependencies/tray_manager/packages/tray_manager/macos/tray_manager.podspec: -------------------------------------------------------------------------------- 1 | # 2 | # To learn more about a Podspec see http://guides.cocoapods.org/syntax/podspec.html. 3 | # Run `pod lib lint tray_manager.podspec` to validate before publishing. 4 | # 5 | Pod::Spec.new do |s| 6 | s.name = 'tray_manager' 7 | s.version = '0.0.1' 8 | s.summary = 'A new flutter plugin project.' 9 | s.description = <<-DESC 10 | A new flutter plugin project. 11 | DESC 12 | s.homepage = 'http://example.com' 13 | s.license = { :file => '../LICENSE' } 14 | s.author = { 'Your Company' => 'email@example.com' } 15 | s.source = { :path => '.' } 16 | s.source_files = 'Classes/**/*' 17 | s.dependency 'FlutterMacOS' 18 | 19 | s.platform = :osx, '10.11' 20 | s.pod_target_xcconfig = { 'DEFINES_MODULE' => 'YES' } 21 | s.swift_version = '5.0' 22 | end 23 | -------------------------------------------------------------------------------- /assets/icons/github.svg: -------------------------------------------------------------------------------- 1 | 3 | Github 4 | 6 | 7 | -------------------------------------------------------------------------------- /assets/icons/openrouter.svg: -------------------------------------------------------------------------------- 1 | 3 | OpenRouter 4 | 6 | 7 | -------------------------------------------------------------------------------- /dependencies/flutter-permission-handler/permission_handler_windows/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | ## 0.2.1 2 | 3 | * Updates the dependency on `permission_handler_platform_interface` to version 4.1.0 (SiriKit support is only available for iOS and macOS). 4 | 5 | ## 0.2.0 6 | 7 | * Implements the `Permission.calendarWriteOnly` and `Permission.calendarFullAccess` permissions. 8 | * Bumps `permission_handler_platform_interface` to version `4.0.0`. 9 | 10 | ## 0.1.3 11 | 12 | * Adds the new Android 13 permission "BODY_SENSORS_BACKGROUND" to PermissionHandlerEnums.h. 13 | 14 | ## 0.1.2 15 | 16 | * Adds the new Android 13 permissions "SCHEDULE_EXACT_ALARM, READ_MEDIA_IMAGES, READ_MEDIA_VIDEO and READ_MEDIA_AUDIO" to permission_constants.h. 17 | 18 | ## 0.1.1 19 | 20 | * Adds the new Android 13 NEARBY_WIFI_DEVICES permission to permission_constants.h. 21 | 22 | ## 0.1.0 23 | 24 | * Adds an initial implementation of Windows support for the permission_handler plugin. 25 | -------------------------------------------------------------------------------- /lib/core/models/instruction_injection.dart: -------------------------------------------------------------------------------- 1 | class InstructionInjection { 2 | final String id; 3 | final String title; 4 | final String prompt; 5 | 6 | const InstructionInjection({ 7 | required this.id, 8 | required this.title, 9 | required this.prompt, 10 | }); 11 | 12 | InstructionInjection copyWith({ 13 | String? id, 14 | String? title, 15 | String? prompt, 16 | }) { 17 | return InstructionInjection( 18 | id: id ?? this.id, 19 | title: title ?? this.title, 20 | prompt: prompt ?? this.prompt, 21 | ); 22 | } 23 | 24 | Map toJson() => { 25 | 'id': id, 26 | 'title': title, 27 | 'prompt': prompt, 28 | }; 29 | 30 | static InstructionInjection fromJson(Map json) => InstructionInjection( 31 | id: (json['id'] as String?) ?? '', 32 | title: (json['title'] as String?) ?? '', 33 | prompt: (json['prompt'] as String?) ?? '', 34 | ); 35 | } 36 | 37 | -------------------------------------------------------------------------------- /lib/shared/widgets/mermaid_image_cache.dart: -------------------------------------------------------------------------------- 1 | import 'dart:typed_data'; 2 | 3 | class MermaidImageCache { 4 | static final Map _map = {}; 5 | static int _maxSize = 120; 6 | 7 | static String _normalize(String code) { 8 | return code.replaceAll('\r\n', '\n').trim(); 9 | } 10 | 11 | static void configure({int? maxSize}) { 12 | if (maxSize != null && maxSize > 0) _maxSize = maxSize; 13 | } 14 | 15 | static Uint8List? get(String code) => _map[_normalize(code)]; 16 | 17 | static void put(String code, Uint8List bytes) { 18 | final key = _normalize(code); 19 | if (_map.containsKey(key)) { 20 | _map.remove(key); 21 | _map[key] = bytes; 22 | return; 23 | } 24 | if (_map.length >= _maxSize) { 25 | final first = _map.keys.isNotEmpty ? _map.keys.first : null; 26 | if (first != null) _map.remove(first); 27 | } 28 | _map[key] = bytes; 29 | } 30 | 31 | static void clear() => _map.clear(); 32 | } 33 | -------------------------------------------------------------------------------- /dependencies/tray_manager/melos.yaml: -------------------------------------------------------------------------------- 1 | name: tray_manager_workspace 2 | repository: https://github.com/leanflutter/tray_manager 3 | 4 | packages: 5 | - examples/** 6 | - packages/** 7 | 8 | command: 9 | bootstrap: 10 | # Uses the pubspec_overrides.yaml instead of having Melos modifying the lock file. 11 | usePubspecOverrides: true 12 | 13 | scripts: 14 | analyze: 15 | exec: flutter analyze --fatal-infos 16 | description: Run `flutter analyze` for all packages. 17 | 18 | test: 19 | exec: flutter test 20 | description: Run `flutter test` for a specific package. 21 | packageFilters: 22 | dirExists: 23 | - test 24 | 25 | format: 26 | exec: dart format . --fix 27 | description: Run `dart format` for all packages. 28 | 29 | format-check: 30 | exec: dart format . --fix --set-exit-if-changed 31 | description: Run `dart format` checks for all packages. 32 | 33 | fix: 34 | exec: dart fix . --apply 35 | description: Run `dart fix` for all packages. 36 | -------------------------------------------------------------------------------- /lib/core/models/assistant_memory.dart: -------------------------------------------------------------------------------- 1 | class AssistantMemory { 2 | final int id; // 0 for new (not used in store), >0 persisted 3 | final String assistantId; 4 | final String content; 5 | 6 | const AssistantMemory({ 7 | required this.id, 8 | required this.assistantId, 9 | required this.content, 10 | }); 11 | 12 | AssistantMemory copyWith({int? id, String? assistantId, String? content}) => 13 | AssistantMemory( 14 | id: id ?? this.id, 15 | assistantId: assistantId ?? this.assistantId, 16 | content: content ?? this.content, 17 | ); 18 | 19 | Map toJson() => { 20 | 'id': id, 21 | 'assistantId': assistantId, 22 | 'content': content, 23 | }; 24 | 25 | static AssistantMemory fromJson(Map json) => AssistantMemory( 26 | id: (json['id'] as num?)?.toInt() ?? 0, 27 | assistantId: (json['assistantId'] ?? '').toString(), 28 | content: (json['content'] ?? '').toString(), 29 | ); 30 | } 31 | 32 | -------------------------------------------------------------------------------- /dependencies/flutter-permission-handler/permission_handler_windows/windows/include/permission_handler_windows/permission_handler_windows_plugin.h: -------------------------------------------------------------------------------- 1 | #ifndef PACKAGES_PERMISSION_HANDLER_PERMISSION_HANDLER_WINDOWS_WINDOWS_INCLUDE_PERMISSION_HANDLER_WINDOWS_PERMISSION_HANDLER_PLUGIN_H_ 2 | #define PACKAGES_PERMISSION_HANDLER_PERMISSION_HANDLER_WINDOWS_WINDOWS_INCLUDE_PERMISSION_HANDLER_WINDOWS_PERMISSION_HANDLER_PLUGIN_H_ 3 | 4 | #include 5 | 6 | #ifdef FLUTTER_PLUGIN_IMPL 7 | #define FLUTTER_PLUGIN_EXPORT __declspec(dllexport) 8 | #else 9 | #define FLUTTER_PLUGIN_EXPORT __declspec(dllimport) 10 | #endif 11 | 12 | #if defined(__cplusplus) 13 | extern "C" { 14 | #endif 15 | 16 | FLUTTER_PLUGIN_EXPORT void PermissionHandlerWindowsPluginRegisterWithRegistrar( 17 | FlutterDesktopPluginRegistrarRef registrar); 18 | 19 | #if defined(__cplusplus) 20 | } // extern "C" 21 | #endif 22 | 23 | #endif // PACKAGES_PERMISSION_HANDLER_PERMISSION_HANDLER_WINDOWS_WINDOWS_INCLUDE_PERMISSION_HANDLER_WINDOWS_PERMISSION_HANDLER_PLUGIN_H_ 24 | -------------------------------------------------------------------------------- /lib/shared/widgets/favicon.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class Favicon extends StatelessWidget { 4 | const Favicon({super.key, required this.url, this.size = 20}); 5 | 6 | final String url; 7 | final double size; 8 | 9 | String _faviconUrl(String raw) { 10 | try { 11 | final u = Uri.parse(raw); 12 | final scheme = u.scheme.isNotEmpty ? u.scheme : 'https'; 13 | final host = u.host.isNotEmpty ? u.host : raw; 14 | return '$scheme://$host/favicon.ico'; 15 | } catch (_) { 16 | return raw; 17 | } 18 | } 19 | 20 | @override 21 | Widget build(BuildContext context) { 22 | final ico = _faviconUrl(url); 23 | return ClipRRect( 24 | borderRadius: BorderRadius.circular(4), 25 | child: Image.network( 26 | ico, 27 | width: size, 28 | height: size, 29 | fit: BoxFit.contain, 30 | errorBuilder: (c, e, s) => Icon(Icons.public, size: size * 0.9, color: Theme.of(context).colorScheme.primary), 31 | ), 32 | ); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /web/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "kelivo", 3 | "short_name": "kelivo", 4 | "start_url": ".", 5 | "display": "standalone", 6 | "background_color": "#FFFFFF", 7 | "theme_color": "#0175C2", 8 | "description": "An LLM chat client.", 9 | "orientation": "portrait-primary", 10 | "prefer_related_applications": false, 11 | "icons": [ 12 | { 13 | "src": "icons/Icon-192.png", 14 | "sizes": "192x192", 15 | "type": "image/png" 16 | }, 17 | { 18 | "src": "icons/Icon-512.png", 19 | "sizes": "512x512", 20 | "type": "image/png" 21 | }, 22 | { 23 | "src": "icons/Icon-maskable-192.png", 24 | "sizes": "192x192", 25 | "type": "image/png", 26 | "purpose": "maskable" 27 | }, 28 | { 29 | "src": "icons/Icon-maskable-512.png", 30 | "sizes": "512x512", 31 | "type": "image/png", 32 | "purpose": "maskable" 33 | } 34 | ] 35 | } -------------------------------------------------------------------------------- /dependencies/tray_manager/packages/tray_manager/windows/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.15) 2 | set(PROJECT_NAME "tray_manager") 3 | project(${PROJECT_NAME} LANGUAGES CXX) 4 | 5 | # This value is used when generating builds using this plugin, so it must 6 | # not be changed 7 | set(PLUGIN_NAME "tray_manager_plugin") 8 | 9 | add_library(${PLUGIN_NAME} SHARED 10 | "tray_manager_plugin.cpp" 11 | ) 12 | apply_standard_settings(${PLUGIN_NAME}) 13 | set_target_properties(${PLUGIN_NAME} PROPERTIES 14 | CXX_VISIBILITY_PRESET hidden) 15 | target_compile_definitions(${PLUGIN_NAME} PRIVATE FLUTTER_PLUGIN_IMPL) 16 | target_compile_definitions(${PLUGIN_NAME} PRIVATE _SILENCE_CXX17_CODECVT_HEADER_DEPRECATION_WARNING) 17 | target_include_directories(${PLUGIN_NAME} INTERFACE 18 | "${CMAKE_CURRENT_SOURCE_DIR}/include") 19 | target_link_libraries(${PLUGIN_NAME} PRIVATE flutter flutter_wrapper_plugin) 20 | 21 | # List of absolute paths to libraries that should be bundled with the plugin 22 | set(tray_manager_bundled_libraries 23 | "" 24 | PARENT_SCOPE 25 | ) 26 | -------------------------------------------------------------------------------- /assets/icons/google-color.svg: -------------------------------------------------------------------------------- 1 | 2 | Google 3 | 6 | 9 | 12 | 15 | 16 | -------------------------------------------------------------------------------- /windows/runner/flutter_window.h: -------------------------------------------------------------------------------- 1 | #ifndef RUNNER_FLUTTER_WINDOW_H_ 2 | #define RUNNER_FLUTTER_WINDOW_H_ 3 | 4 | #include 5 | #include 6 | 7 | #include 8 | 9 | #include "win32_window.h" 10 | 11 | // A window that does nothing but host a Flutter view. 12 | class FlutterWindow : public Win32Window { 13 | public: 14 | // Creates a new FlutterWindow hosting a Flutter view running |project|. 15 | explicit FlutterWindow(const flutter::DartProject& project); 16 | virtual ~FlutterWindow(); 17 | 18 | protected: 19 | // Win32Window: 20 | bool OnCreate() override; 21 | void OnDestroy() override; 22 | LRESULT MessageHandler(HWND window, UINT const message, WPARAM const wparam, 23 | LPARAM const lparam) noexcept override; 24 | 25 | private: 26 | // The project to run. 27 | flutter::DartProject project_; 28 | 29 | // The Flutter instance hosted by this window. 30 | std::unique_ptr flutter_controller_; 31 | }; 32 | 33 | #endif // RUNNER_FLUTTER_WINDOW_H_ 34 | -------------------------------------------------------------------------------- /lib/core/models/assistant_tag.dart: -------------------------------------------------------------------------------- 1 | import 'dart:convert'; 2 | 3 | class AssistantTag { 4 | final String id; 5 | final String name; 6 | 7 | const AssistantTag({required this.id, required this.name}); 8 | 9 | AssistantTag copyWith({String? id, String? name}) => AssistantTag( 10 | id: id ?? this.id, 11 | name: name ?? this.name, 12 | ); 13 | 14 | Map toJson() => { 15 | 'id': id, 16 | 'name': name, 17 | }; 18 | 19 | static AssistantTag fromJson(Map json) => AssistantTag( 20 | id: (json['id'] ?? '').toString(), 21 | name: (json['name'] ?? '').toString(), 22 | ); 23 | 24 | static String encodeList(List list) => jsonEncode(list.map((e) => e.toJson()).toList()); 25 | static List decodeList(String raw) { 26 | try { 27 | final arr = jsonDecode(raw) as List; 28 | return [for (final e in arr) AssistantTag.fromJson(e as Map)]; 29 | } catch (_) { 30 | return const []; 31 | } 32 | } 33 | } 34 | 35 | -------------------------------------------------------------------------------- /lib/utils/platform_utils.dart: -------------------------------------------------------------------------------- 1 | import 'dart:io' show Platform; 2 | 3 | import 'package:flutter/foundation.dart' show defaultTargetPlatform, TargetPlatform; 4 | 5 | abstract final class PlatformUtils { 6 | PlatformUtils._(); 7 | 8 | static bool get isDesktop => 9 | Platform.isMacOS || Platform.isWindows || Platform.isLinux; 10 | 11 | static bool get isMobile => Platform.isAndroid || Platform.isIOS; 12 | 13 | static bool get isDesktopTarget => 14 | defaultTargetPlatform == TargetPlatform.macOS || 15 | defaultTargetPlatform == TargetPlatform.windows || 16 | defaultTargetPlatform == TargetPlatform.linux; 17 | 18 | static bool get isMobileTarget => 19 | defaultTargetPlatform == TargetPlatform.android || 20 | defaultTargetPlatform == TargetPlatform.iOS; 21 | 22 | 23 | static bool get isMacOS => Platform.isMacOS; 24 | 25 | static bool get isWindows => Platform.isWindows; 26 | 27 | static bool get isLinux => Platform.isLinux; 28 | 29 | static bool get isAndroid => Platform.isAndroid; 30 | 31 | static bool get isIOS => Platform.isIOS; 32 | } 33 | -------------------------------------------------------------------------------- /linux/runner/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.13) 2 | project(runner LANGUAGES CXX) 3 | 4 | # Define the application target. To change its name, change BINARY_NAME in the 5 | # top-level CMakeLists.txt, not the value here, or `flutter run` will no longer 6 | # work. 7 | # 8 | # Any new source files that you add to the application should be added here. 9 | add_executable(${BINARY_NAME} 10 | "main.cc" 11 | "my_application.cc" 12 | "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" 13 | ) 14 | 15 | # Apply the standard set of build settings. This can be removed for applications 16 | # that need different build settings. 17 | apply_standard_settings(${BINARY_NAME}) 18 | 19 | # Add preprocessor definitions for the application ID. 20 | add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") 21 | 22 | # Add dependency libraries. Add any application-specific dependencies here. 23 | target_link_libraries(${BINARY_NAME} PRIVATE flutter) 24 | target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) 25 | 26 | target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") 27 | -------------------------------------------------------------------------------- /lib/core/models/token_usage.dart: -------------------------------------------------------------------------------- 1 | class TokenUsage { 2 | final int promptTokens; 3 | final int completionTokens; 4 | final int cachedTokens; 5 | final int totalTokens; 6 | 7 | const TokenUsage({ 8 | this.promptTokens = 0, 9 | this.completionTokens = 0, 10 | this.cachedTokens = 0, 11 | this.totalTokens = 0, 12 | }); 13 | 14 | TokenUsage merge(TokenUsage other) { 15 | // For streaming responses: 16 | // - prompt tokens: take max (usually stays constant after initial value) 17 | // - completion tokens: take max (grows as response streams) 18 | // - cached tokens: take max (usually set once) 19 | final prompt = other.promptTokens > 0 ? other.promptTokens : promptTokens; 20 | final completion = other.completionTokens > 0 ? other.completionTokens : completionTokens; 21 | final cached = other.cachedTokens > 0 ? other.cachedTokens : cachedTokens; 22 | final total = prompt + completion; 23 | return TokenUsage( 24 | promptTokens: prompt, 25 | completionTokens: completion, 26 | cachedTokens: cached, 27 | totalTokens: total, 28 | ); 29 | } 30 | } 31 | 32 | -------------------------------------------------------------------------------- /linux/flutter/generated_plugins.cmake: -------------------------------------------------------------------------------- 1 | # 2 | # Generated file, do not edit. 3 | # 4 | 5 | list(APPEND FLUTTER_PLUGIN_LIST 6 | audioplayers_linux 7 | desktop_drop 8 | dynamic_color 9 | file_selector_linux 10 | hotkey_manager_linux 11 | irondash_engine_context 12 | screen_retriever_linux 13 | super_native_extensions 14 | tray_manager 15 | url_launcher_linux 16 | window_manager 17 | ) 18 | 19 | list(APPEND FLUTTER_FFI_PLUGIN_LIST 20 | ) 21 | 22 | set(PLUGIN_BUNDLED_LIBRARIES) 23 | 24 | foreach(plugin ${FLUTTER_PLUGIN_LIST}) 25 | add_subdirectory(flutter/ephemeral/.plugin_symlinks/${plugin}/linux plugins/${plugin}) 26 | target_link_libraries(${BINARY_NAME} PRIVATE ${plugin}_plugin) 27 | list(APPEND PLUGIN_BUNDLED_LIBRARIES $) 28 | list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries}) 29 | endforeach(plugin) 30 | 31 | foreach(ffi_plugin ${FLUTTER_FFI_PLUGIN_LIST}) 32 | add_subdirectory(flutter/ephemeral/.plugin_symlinks/${ffi_plugin}/linux plugins/${ffi_plugin}) 33 | list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${ffi_plugin}_bundled_libraries}) 34 | endforeach(ffi_plugin) 35 | -------------------------------------------------------------------------------- /assets/icons/discord.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /lib/core/services/android_process_text.dart: -------------------------------------------------------------------------------- 1 | import 'dart:async'; 2 | import 'package:flutter/services.dart'; 3 | 4 | class AndroidProcessText { 5 | static const MethodChannel _channel = MethodChannel('app.process_text'); 6 | static final StreamController _controller = StreamController.broadcast(); 7 | static bool _initialized = false; 8 | 9 | static void ensureInitialized() { 10 | if (_initialized) return; 11 | _initialized = true; 12 | _channel.setMethodCallHandler((call) async { 13 | if (call.method != 'onProcessText') return; 14 | final raw = call.arguments?.toString() ?? ''; 15 | final text = raw.trim(); 16 | if (text.isNotEmpty) { 17 | _controller.add(text); 18 | } 19 | }); 20 | } 21 | 22 | static Stream get stream => _controller.stream; 23 | 24 | static Future getInitialText() async { 25 | try { 26 | final res = await _channel.invokeMethod('getInitialText'); 27 | final text = res?.trim(); 28 | if (text == null || text.isEmpty) return null; 29 | return text; 30 | } catch (_) { 31 | return null; 32 | } 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /dependencies/mcp_client/LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2025 AppPlayer 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /dependencies/flutter_tts/LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 Daniel Lutton 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /assets/icons/codex.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /dependencies/tray_manager/LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022-2024 LiJianying 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. -------------------------------------------------------------------------------- /test/widget_test.dart: -------------------------------------------------------------------------------- 1 | // This is a basic Flutter widget test. 2 | // 3 | // To perform an interaction with a widget in your test, use the WidgetTester 4 | // utility in the flutter_test package. For example, you can send tap and scroll 5 | // gestures. You can also use WidgetTester to find child widgets in the widget 6 | // tree, read text, and verify that the values of widget properties are correct. 7 | 8 | import 'package:flutter/material.dart'; 9 | import 'package:flutter_test/flutter_test.dart'; 10 | 11 | import 'package:Kelivo/main.dart'; 12 | 13 | void main() { 14 | testWidgets('Counter increments smoke test', (WidgetTester tester) async { 15 | // Build our app and trigger a frame. 16 | await tester.pumpWidget(const MyApp()); 17 | 18 | // Verify that our counter starts at 0. 19 | expect(find.text('0'), findsOneWidget); 20 | expect(find.text('1'), findsNothing); 21 | 22 | // Tap the '+' icon and trigger a frame. 23 | await tester.tap(find.byIcon(Icons.add)); 24 | await tester.pump(); 25 | 26 | // Verify that our counter has incremented. 27 | expect(find.text('0'), findsNothing); 28 | expect(find.text('1'), findsOneWidget); 29 | }); 30 | } 31 | -------------------------------------------------------------------------------- /dependencies/mcp_client/analysis_options.yaml: -------------------------------------------------------------------------------- 1 | # This file configures the static analysis results for your project (errors, 2 | # warnings, and lints). 3 | # 4 | # This enables the 'recommended' set of lints from `package:lints`. 5 | # This set helps identify many issues that may lead to problems when running 6 | # or consuming Dart code, and enforces writing Dart using a single, idiomatic 7 | # style and format. 8 | # 9 | # If you want a smaller set of lints you can change this to specify 10 | # 'package:lints/core.yaml'. These are just the most critical lints 11 | # (the recommended set includes the core lints). 12 | # The core lints are also what is used by pub.dev for scoring packages. 13 | 14 | include: package:lints/recommended.yaml 15 | 16 | # Uncomment the following section to specify additional rules. 17 | 18 | # linter: 19 | # rules: 20 | # - camel_case_types 21 | 22 | # analyzer: 23 | # exclude: 24 | # - path/to/excluded/files/** 25 | 26 | # For more information about the core and recommended set of lints, see 27 | # https://dart.dev/go/core-lints 28 | 29 | # For additional information about configuring this file, see 30 | # https://dart.dev/guides/language/analysis-options 31 | -------------------------------------------------------------------------------- /dependencies/flutter-permission-handler/permission_handler_windows/LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 Baseflow 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /lib/shared/widgets/mermaid_cache.dart: -------------------------------------------------------------------------------- 1 | class MermaidHeightCache { 2 | // Simple LRU-ish cache with max size; evict oldest insert when over limit. 3 | static final Map _map = {}; 4 | static int _maxSize = 200; 5 | 6 | static void configure({int? maxSize}) { 7 | if (maxSize != null && maxSize > 0) _maxSize = maxSize; 8 | } 9 | 10 | static double? get(String code) { 11 | final v = _map[code]; 12 | if (v != null) { 13 | // Touch entry to refresh recency: remove and reinsert 14 | _map.remove(code); 15 | _map[code] = v; 16 | } 17 | return v; 18 | } 19 | 20 | static void put(String code, double height) { 21 | // Basic guard: store sensible heights only 22 | final h = height.isFinite ? height.clamp(60, 4000).toDouble() : 160.0; 23 | if (_map.containsKey(code)) { 24 | _map.remove(code); 25 | _map[code] = h; 26 | } else { 27 | if (_map.length >= _maxSize) { 28 | // Evict first/oldest entry 29 | final firstKey = _map.keys.isNotEmpty ? _map.keys.first : null; 30 | if (firstKey != null) _map.remove(firstKey); 31 | } 32 | _map[code] = h; 33 | } 34 | } 35 | } 36 | 37 | -------------------------------------------------------------------------------- /macos/Runner/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIconFile 10 | 11 | CFBundleIdentifier 12 | $(PRODUCT_BUNDLE_IDENTIFIER) 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | $(PRODUCT_NAME) 17 | CFBundlePackageType 18 | APPL 19 | CFBundleShortVersionString 20 | $(FLUTTER_BUILD_NAME) 21 | CFBundleVersion 22 | $(FLUTTER_BUILD_NUMBER) 23 | LSMinimumSystemVersion 24 | $(MACOSX_DEPLOYMENT_TARGET) 25 | NSHumanReadableCopyright 26 | $(PRODUCT_COPYRIGHT) 27 | NSMainNibFile 28 | MainMenu 29 | NSPrincipalClass 30 | NSApplication 31 | 32 | 33 | -------------------------------------------------------------------------------- /dependencies/tray_manager/packages/tray_manager/LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022-present LiJianying 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. -------------------------------------------------------------------------------- /assets/icons/bytedance-color.svg: -------------------------------------------------------------------------------- 1 | 2 | ByteDance 3 | 4 | 7 | 10 | 13 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /windows/flutter/generated_plugins.cmake: -------------------------------------------------------------------------------- 1 | # 2 | # Generated file, do not edit. 3 | # 4 | 5 | list(APPEND FLUTTER_PLUGIN_LIST 6 | audioplayers_windows 7 | desktop_drop 8 | dynamic_color 9 | file_selector_windows 10 | hotkey_manager_windows 11 | irondash_engine_context 12 | permission_handler_windows 13 | screen_retriever_windows 14 | share_plus 15 | super_native_extensions 16 | tray_manager 17 | url_launcher_windows 18 | webview_windows 19 | window_manager 20 | ) 21 | 22 | list(APPEND FLUTTER_FFI_PLUGIN_LIST 23 | ) 24 | 25 | set(PLUGIN_BUNDLED_LIBRARIES) 26 | 27 | foreach(plugin ${FLUTTER_PLUGIN_LIST}) 28 | add_subdirectory(flutter/ephemeral/.plugin_symlinks/${plugin}/windows plugins/${plugin}) 29 | target_link_libraries(${BINARY_NAME} PRIVATE ${plugin}_plugin) 30 | list(APPEND PLUGIN_BUNDLED_LIBRARIES $) 31 | list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries}) 32 | endforeach(plugin) 33 | 34 | foreach(ffi_plugin ${FLUTTER_FFI_PLUGIN_LIST}) 35 | add_subdirectory(flutter/ephemeral/.plugin_symlinks/${ffi_plugin}/windows plugins/${ffi_plugin}) 36 | list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${ffi_plugin}_bundled_libraries}) 37 | endforeach(ffi_plugin) 38 | -------------------------------------------------------------------------------- /assets/icons/cloudflare-color.svg: -------------------------------------------------------------------------------- 1 | 2 | Cloudflare 3 | 4 | 7 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /dependencies/mcp_client/lib/src/transport/http_client_stub.dart: -------------------------------------------------------------------------------- 1 | /// Stub implementation for HTTP client abstraction 2 | /// This file is used for conditional imports to provide platform-specific implementations 3 | library; 4 | 5 | import 'dart:async'; 6 | 7 | /// Abstract HTTP client interface 8 | abstract class PlatformHttpClient { 9 | /// Create a platform-specific HTTP client instance 10 | factory PlatformHttpClient() { 11 | throw UnsupportedError( 12 | 'Cannot create HTTP client - platform implementation not available', 13 | ); 14 | } 15 | 16 | /// Send a POST request 17 | Future post( 18 | Uri url, { 19 | Map? headers, 20 | Object? body, 21 | }); 22 | 23 | /// Send a GET request 24 | Future get( 25 | Uri url, { 26 | Map? headers, 27 | }); 28 | 29 | /// Close the client 30 | void close(); 31 | } 32 | 33 | /// Abstract HTTP response interface 34 | abstract class PlatformHttpResponse { 35 | /// Response status code 36 | int get statusCode; 37 | 38 | /// Response headers 39 | Map get headers; 40 | 41 | /// Response body as string 42 | Future get body; 43 | 44 | /// Response body as stream 45 | Stream> get bodyStream; 46 | } -------------------------------------------------------------------------------- /assets/icons/doubao-color.svg: -------------------------------------------------------------------------------- 1 | 2 | Doubao 3 | 6 | 9 | 12 | 15 | 16 | -------------------------------------------------------------------------------- /assets/icons/kimi-color.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /android/app/src/main/res/values-v31/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 12 | 18 | 21 | 22 | -------------------------------------------------------------------------------- /android/app/src/main/res/values-night-v31/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 12 | 18 | 21 | 22 | -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "LaunchImage.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "appearances" : [ 10 | { 11 | "appearance" : "luminosity", 12 | "value" : "dark" 13 | } 14 | ], 15 | "filename" : "LaunchImageDark.png", 16 | "idiom" : "universal", 17 | "scale" : "1x" 18 | }, 19 | { 20 | "filename" : "LaunchImage@2x.png", 21 | "idiom" : "universal", 22 | "scale" : "2x" 23 | }, 24 | { 25 | "appearances" : [ 26 | { 27 | "appearance" : "luminosity", 28 | "value" : "dark" 29 | } 30 | ], 31 | "filename" : "LaunchImageDark@2x.png", 32 | "idiom" : "universal", 33 | "scale" : "2x" 34 | }, 35 | { 36 | "filename" : "LaunchImage@3x.png", 37 | "idiom" : "universal", 38 | "scale" : "3x" 39 | }, 40 | { 41 | "appearances" : [ 42 | { 43 | "appearance" : "luminosity", 44 | "value" : "dark" 45 | } 46 | ], 47 | "filename" : "LaunchImageDark@3x.png", 48 | "idiom" : "universal", 49 | "scale" : "3x" 50 | } 51 | ], 52 | "info" : { 53 | "author" : "xcode", 54 | "version" : 1 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /android/app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 13 | 19 | 22 | 23 | -------------------------------------------------------------------------------- /android/app/src/main/res/values-night/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 13 | 19 | 22 | 23 | -------------------------------------------------------------------------------- /assets/icons/hunyuan-color.svg: -------------------------------------------------------------------------------- 1 | 2 | Hunyuan 3 | 4 | 5 | 8 | 11 | 14 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /lib/utils/clipboard_images.dart: -------------------------------------------------------------------------------- 1 | import 'dart:async'; 2 | import 'package:flutter/services.dart'; 3 | 4 | class ClipboardImages { 5 | static const MethodChannel _channel = MethodChannel('app.clipboard'); 6 | 7 | static Future> getImagePaths() async { 8 | try { 9 | final res = await _channel.invokeMethod>('getClipboardImages'); 10 | if (res == null) return const []; 11 | return res.map((e) => e.toString()).toList(); 12 | } catch (_) { 13 | return const []; 14 | } 15 | } 16 | 17 | // Set an image to the system clipboard from a file path (desktop only). 18 | static Future setImagePath(String path) async { 19 | try { 20 | final res = await _channel.invokeMethod('setClipboardImage', path); 21 | if (res is bool) return res; 22 | return res == true; 23 | } catch (_) { 24 | return false; 25 | } 26 | } 27 | 28 | // Get file paths from system clipboard (desktop only). 29 | // Returns absolute file system paths for items copied in Finder/Explorer/Files. 30 | static Future> getFilePaths() async { 31 | try { 32 | final res = await _channel.invokeMethod>('getClipboardFiles'); 33 | if (res == null) return const []; 34 | return res.map((e) => e.toString()).toList(); 35 | } catch (_) { 36 | return const []; 37 | } 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Miscellaneous 2 | *.class 3 | *.log 4 | *.pyc 5 | *.swp 6 | .DS_Store 7 | .atom/ 8 | .build/ 9 | .claude/ 10 | .buildlog/ 11 | .history 12 | .svn/ 13 | .swiftpm/ 14 | migrate_working_dir/ 15 | 16 | # IntelliJ related 17 | *.iml 18 | *.ipr 19 | *.iws 20 | .idea/ 21 | 22 | # The .vscode folder contains launch configuration and tasks you configure in 23 | # VS Code which you may wish to be included in version control, so this line 24 | # is commented out by default. 25 | #.vscode/ 26 | 27 | # Flutter/Dart/Pub related 28 | **/doc/api/ 29 | **/ios/Flutter/.last_build_id 30 | .dart_tool/ 31 | .flutter-plugins 32 | .flutter-plugins-dependencies 33 | .pub-cache/ 34 | .pub/ 35 | /build/ 36 | 37 | # Symbolication related 38 | app.*.symbols 39 | 40 | # Obfuscation related 41 | app.*.map.json 42 | 43 | # Android Studio will place build artifacts here 44 | /android/app/debug 45 | /android/app/profile 46 | /android/app/release 47 | 48 | pubspec.lock 49 | /linux/flutter/generated_plugin_registrant.cc 50 | /windows/flutter/generated_plugin_registrant.cc 51 | /linux/flutter/generated_plugin_registrant.h 52 | /windows/flutter/generated_plugin_registrant.h 53 | /linux/flutter/generated_plugins.cmake 54 | /windows/flutter/generated_plugins.cmake 55 | /macos/flutter/GeneratedPluginRegistrant.swift 56 | 57 | internationalization.md 58 | /macos/Podfile.lock 59 | /desiredFileName.txt 60 | /lib/secrets/fallback.dart 61 | .claude/settings.local.json 62 | -------------------------------------------------------------------------------- /lib/core/models/quick_phrase.dart: -------------------------------------------------------------------------------- 1 | class QuickPhrase { 2 | final String id; 3 | final String title; 4 | final String content; 5 | final bool isGlobal; // true = global, false = assistant-specific 6 | final String? assistantId; // null for global phrases 7 | 8 | const QuickPhrase({ 9 | required this.id, 10 | required this.title, 11 | required this.content, 12 | this.isGlobal = true, 13 | this.assistantId, 14 | }); 15 | 16 | QuickPhrase copyWith({ 17 | String? id, 18 | String? title, 19 | String? content, 20 | bool? isGlobal, 21 | String? assistantId, 22 | }) { 23 | return QuickPhrase( 24 | id: id ?? this.id, 25 | title: title ?? this.title, 26 | content: content ?? this.content, 27 | isGlobal: isGlobal ?? this.isGlobal, 28 | assistantId: assistantId ?? this.assistantId, 29 | ); 30 | } 31 | 32 | Map toJson() => { 33 | 'id': id, 34 | 'title': title, 35 | 'content': content, 36 | 'isGlobal': isGlobal, 37 | 'assistantId': assistantId, 38 | }; 39 | 40 | static QuickPhrase fromJson(Map json) => QuickPhrase( 41 | id: json['id'] as String, 42 | title: (json['title'] as String?) ?? '', 43 | content: (json['content'] as String?) ?? '', 44 | isGlobal: json['isGlobal'] as bool? ?? true, 45 | assistantId: json['assistantId'] as String?, 46 | ); 47 | } 48 | -------------------------------------------------------------------------------- /lib/core/models/preset_message.dart: -------------------------------------------------------------------------------- 1 | import 'package:uuid/uuid.dart'; 2 | 3 | class PresetMessage { 4 | final String id; 5 | final String role; // 'user' | 'assistant' 6 | final String content; 7 | 8 | PresetMessage({ 9 | String? id, 10 | required this.role, 11 | required this.content, 12 | }) : id = id ?? const Uuid().v4(); 13 | 14 | PresetMessage copyWith({String? id, String? role, String? content}) => PresetMessage( 15 | id: id ?? this.id, 16 | role: role ?? this.role, 17 | content: content ?? this.content, 18 | ); 19 | 20 | Map toJson() => { 21 | 'id': id, 22 | 'role': role, 23 | 'content': content, 24 | }; 25 | 26 | static PresetMessage fromJson(Map json) => PresetMessage( 27 | id: (json['id'] as String?) ?? const Uuid().v4(), 28 | role: (json['role'] as String?) == 'assistant' ? 'assistant' : 'user', 29 | content: (json['content'] as String?) ?? '', 30 | ); 31 | 32 | static List decodeList(dynamic raw) { 33 | if (raw is List) { 34 | return raw 35 | .whereType() 36 | .map((e) => PresetMessage.fromJson(e.map((k, v) => MapEntry(k.toString(), v)))) 37 | .toList(); 38 | } 39 | return const []; 40 | } 41 | 42 | static List> encodeList(List list) => 43 | list.map((e) => e.toJson()).toList(); 44 | } 45 | 46 | -------------------------------------------------------------------------------- /assets/icons/aihubmix-color.svg: -------------------------------------------------------------------------------- 1 | 2 | AiHubMix 3 | 4 | 7 | 8 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature.yml: -------------------------------------------------------------------------------- 1 | name: Feature request 2 | description: Suggest a new idea for Kelivo. 3 | labels: 4 | - feature 5 | body: 6 | - type: markdown 7 | attributes: 8 | value: | 9 | Thank you for using Kelivo! 10 | 11 | Before filling the form fields, please consider the following: 12 | - Ensure that you have searched the [existing issues](https://github.com/Chevey339/kelivo/issues) 13 | - Check if there's already a similar feature request or discussion 14 | - type: textarea 15 | attributes: 16 | label: Motivation 17 | description: | 18 | 应该建立或改进什么功能?完成后目标用户的生活会有什么改善? 19 | 20 | What capability should be either established or improved? 21 | How is life of the target audience better after it's been done? 22 | validations: 23 | required: true 24 | - type: textarea 25 | attributes: 26 | label: Proposed Solution 27 | description: | 28 | 如果你已经有了实现想法,请在此描述。 29 | 30 | If you already have an idea how this can be implemented, please describe it here. 31 | This allows potential other contributors to join forces and provide meaningful 32 | feedback prior to even starting work on it. 33 | 34 | Consider attaching something showing what you are imagining: 35 | * images 36 | * videos 37 | * code samples 38 | * mockups or wireframes 39 | validations: 40 | required: false -------------------------------------------------------------------------------- /lib/utils/plantuml_encoder.dart: -------------------------------------------------------------------------------- 1 | import 'dart:convert'; 2 | import 'package:archive/archive.dart'; 3 | 4 | // References https://plantuml.com/zh/text-encoding 5 | class PlantUmlEncoder { 6 | static const String _mapping = 7 | "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_"; 8 | 9 | static String encode(String text) { 10 | List bytes = utf8.encode(text); 11 | // Use Deflate algorithm 12 | List compressed = Deflate(bytes).getBytes(); 13 | return _encode64(compressed); 14 | } 15 | 16 | static String _encode64(List data) { 17 | StringBuffer r = StringBuffer(); 18 | for (int i = 0; i < data.length; i += 3) { 19 | if (i + 2 == data.length) { 20 | r.write(_append3bytes(data[i], data[i + 1], 0).substring(0, 3)); 21 | } else if (i + 1 == data.length) { 22 | r.write(_append3bytes(data[i], 0, 0).substring(0, 2)); 23 | } else { 24 | r.write(_append3bytes(data[i], data[i + 1], data[i + 2])); 25 | } 26 | } 27 | return r.toString(); 28 | } 29 | 30 | static String _append3bytes(int b1, int b2, int b3) { 31 | int c1 = b1 >> 2; 32 | int c2 = ((b1 & 0x3) << 4) | (b2 >> 4); 33 | int c3 = ((b2 & 0xF) << 2) | (b3 >> 6); 34 | int c4 = b3 & 0x3F; 35 | StringBuffer r = StringBuffer(); 36 | r.write(_mapping[c1 & 0x3F]); 37 | r.write(_mapping[c2 & 0x3F]); 38 | r.write(_mapping[c3 & 0x3F]); 39 | r.write(_mapping[c4 & 0x3F]); 40 | return r.toString(); 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /assets/icons/tavily-color.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /assets/icons/web.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /macos/Podfile: -------------------------------------------------------------------------------- 1 | platform :osx, '10.15' 2 | 3 | # CocoaPods analytics sends network stats synchronously affecting flutter build latency. 4 | ENV['COCOAPODS_DISABLE_STATS'] = 'true' 5 | 6 | project 'Runner', { 7 | 'Debug' => :debug, 8 | 'Profile' => :release, 9 | 'Release' => :release, 10 | } 11 | 12 | def flutter_root 13 | generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'ephemeral', 'Flutter-Generated.xcconfig'), __FILE__) 14 | unless File.exist?(generated_xcode_build_settings_path) 15 | raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure \"flutter pub get\" is executed first" 16 | end 17 | 18 | File.foreach(generated_xcode_build_settings_path) do |line| 19 | matches = line.match(/FLUTTER_ROOT\=(.*)/) 20 | return matches[1].strip if matches 21 | end 22 | raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Flutter-Generated.xcconfig, then run \"flutter pub get\"" 23 | end 24 | 25 | require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) 26 | 27 | flutter_macos_podfile_setup 28 | 29 | target 'Runner' do 30 | use_frameworks! 31 | 32 | flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) 33 | target 'RunnerTests' do 34 | inherit! :search_paths 35 | end 36 | end 37 | 38 | post_install do |installer| 39 | installer.pods_project.targets.each do |target| 40 | flutter_additional_macos_build_settings(target) 41 | end 42 | end 43 | -------------------------------------------------------------------------------- /assets/icons/metaso-color.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /dependencies/flutter_tts/ios/Classes/AudioCategoryOptions.swift: -------------------------------------------------------------------------------- 1 | import AVFoundation 2 | 3 | enum AudioCategoryOptions: String { 4 | case iosAudioCategoryOptionsMixWithOthers 5 | case iosAudioCategoryOptionsDuckOthers 6 | case iosAudioCategoryOptionsInterruptSpokenAudioAndMixWithOthers 7 | case iosAudioCategoryOptionsAllowBluetooth 8 | case iosAudioCategoryOptionsAllowBluetoothA2DP 9 | case iosAudioCategoryOptionsAllowAirPlay 10 | case iosAudioCategoryOptionsDefaultToSpeaker 11 | 12 | func toAVAudioSessionCategoryOptions() -> AVAudioSession.CategoryOptions? { 13 | switch self { 14 | case .iosAudioCategoryOptionsMixWithOthers: 15 | return .mixWithOthers 16 | case .iosAudioCategoryOptionsDuckOthers: 17 | return .duckOthers 18 | case .iosAudioCategoryOptionsInterruptSpokenAudioAndMixWithOthers: 19 | if #available(iOS 9.0, *) { 20 | return .interruptSpokenAudioAndMixWithOthers 21 | } else { 22 | return nil 23 | } 24 | case .iosAudioCategoryOptionsAllowBluetooth: 25 | return .allowBluetooth 26 | case .iosAudioCategoryOptionsAllowBluetoothA2DP: 27 | if #available(iOS 10.0, *) { 28 | return .allowBluetoothA2DP 29 | } else { 30 | return nil 31 | } 32 | case .iosAudioCategoryOptionsAllowAirPlay: 33 | if #available(iOS 10.0, *) { 34 | return .allowAirPlay 35 | } else { 36 | return nil 37 | } 38 | case .iosAudioCategoryOptionsDefaultToSpeaker: 39 | return .defaultToSpeaker 40 | } 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /analysis_options.yaml: -------------------------------------------------------------------------------- 1 | # This file configures the analyzer, which statically analyzes Dart code to 2 | # check for errors, warnings, and lints. 3 | # 4 | # The issues identified by the analyzer are surfaced in the UI of Dart-enabled 5 | # IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be 6 | # invoked from the command line by running `flutter analyze`. 7 | 8 | # The following line activates a set of recommended lints for Flutter apps, 9 | # packages, and plugins designed to encourage good coding practices. 10 | include: package:flutter_lints/flutter.yaml 11 | 12 | linter: 13 | # The lint rules applied to this project can be customized in the 14 | # section below to disable rules from the `package:flutter_lints/flutter.yaml` 15 | # included above or to enable additional rules. A list of all available lints 16 | # and their documentation is published at https://dart.dev/lints. 17 | # 18 | # Instead of disabling a lint rule for the entire project in the 19 | # section below, it can also be suppressed for a single line of code 20 | # or a specific dart file by using the `// ignore: name_of_lint` and 21 | # `// ignore_for_file: name_of_lint` syntax on the line or in the file 22 | # producing the lint. 23 | rules: 24 | # avoid_print: false # Uncomment to disable the `avoid_print` rule 25 | # prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule 26 | 27 | # Additional information about this file can be found at 28 | # https://dart.dev/guides/language/analysis-options 29 | analyzer: 30 | exclude: 31 | - dependencies/flutter_tts/** -------------------------------------------------------------------------------- /ios/Runner/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | import Flutter 2 | import UIKit 3 | 4 | @main 5 | @objc class AppDelegate: FlutterAppDelegate { 6 | override func application( 7 | _ application: UIApplication, 8 | didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? 9 | ) -> Bool { 10 | GeneratedPluginRegistrant.register(with: self) 11 | if let controller = window?.rootViewController as? FlutterViewController { 12 | let channel = FlutterMethodChannel(name: "app.clipboard", binaryMessenger: controller.binaryMessenger) 13 | channel.setMethodCallHandler { (call: FlutterMethodCall, result: @escaping FlutterResult) in 14 | if call.method == "getClipboardImages" { 15 | var paths: [String] = [] 16 | if let image = UIPasteboard.general.image { 17 | if let data = image.pngData() ?? image.jpegData(compressionQuality: 0.95) { 18 | let tmp = NSTemporaryDirectory() 19 | let filename = "pasted_\(Int(Date().timeIntervalSince1970 * 1000)).png" 20 | let url = URL(fileURLWithPath: tmp).appendingPathComponent(filename) 21 | do { 22 | try data.write(to: url) 23 | paths.append(url.path) 24 | } catch { 25 | // ignore write error 26 | } 27 | } 28 | } 29 | result(paths) 30 | } else { 31 | result(FlutterMethodNotImplemented) 32 | } 33 | } 34 | } 35 | return super.application(application, didFinishLaunchingWithOptions: launchOptions) 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /lib/utils/assistant_regex.dart: -------------------------------------------------------------------------------- 1 | import '../core/models/assistant.dart'; 2 | import '../core/models/assistant_regex.dart'; 3 | 4 | String applyAssistantRegexes( 5 | String input, { 6 | required Assistant? assistant, 7 | required AssistantRegexScope scope, 8 | required bool visual, 9 | }) { 10 | if (input.isEmpty) return input; 11 | if (assistant == null) return input; 12 | if (assistant.regexRules.isEmpty) return input; 13 | 14 | String out = input; 15 | for (final rule in assistant.regexRules) { 16 | if (!rule.enabled) continue; 17 | if (rule.visualOnly != visual) continue; 18 | if (!rule.scopes.contains(scope)) continue; 19 | final pattern = rule.pattern.trim(); 20 | if (pattern.isEmpty) continue; 21 | try { 22 | final regex = RegExp(pattern); 23 | out = out.replaceAllMapped(regex, (match) { 24 | return _expandReplacement(rule.replacement, match); 25 | }); 26 | } catch (_) { 27 | // Ignore invalid regex patterns 28 | } 29 | } 30 | return out; 31 | } 32 | 33 | /// Expands replacement string with capture group references ($0, $1, $2, etc.) 34 | String _expandReplacement(String replacement, Match match) { 35 | // Pattern to match $0, $1, $2, ... $99 36 | final refPattern = RegExp(r'\$(\d{1,2})'); 37 | return replacement.replaceAllMapped(refPattern, (m) { 38 | final groupIndex = int.parse(m.group(1)!); 39 | if (groupIndex <= match.groupCount) { 40 | return match.group(groupIndex) ?? ''; 41 | } 42 | // Return original reference if group doesn't exist 43 | return m.group(0)!; 44 | }); 45 | } 46 | -------------------------------------------------------------------------------- /lib/core/providers/memory_provider.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/foundation.dart'; 2 | import '../models/assistant_memory.dart'; 3 | import '../services/memory_store.dart'; 4 | 5 | class MemoryProvider extends ChangeNotifier { 6 | List _memories = []; 7 | bool _initialized = false; 8 | 9 | List get memories => List.unmodifiable(_memories); 10 | 11 | List getForAssistant(String assistantId) => 12 | _memories.where((m) => m.assistantId == assistantId).toList(); 13 | 14 | Future initialize() async { 15 | if (_initialized) return; 16 | await loadAll(); 17 | _initialized = true; 18 | } 19 | 20 | Future loadAll() async { 21 | try { 22 | _memories = await MemoryStore.getAll(); 23 | notifyListeners(); 24 | } catch (e) { 25 | debugPrint('Failed to load memories: $e'); 26 | _memories = []; 27 | notifyListeners(); 28 | } 29 | } 30 | 31 | Future add({required String assistantId, required String content}) async { 32 | final mem = await MemoryStore.add(assistantId: assistantId, content: content); 33 | await loadAll(); 34 | return mem; 35 | } 36 | 37 | Future update({required int id, required String content}) async { 38 | final mem = await MemoryStore.update(id: id, content: content); 39 | await loadAll(); 40 | return mem; 41 | } 42 | 43 | Future delete({required int id}) async { 44 | final ok = await MemoryStore.delete(id: id); 45 | await loadAll(); 46 | return ok; 47 | } 48 | } 49 | 50 | -------------------------------------------------------------------------------- /dependencies/flutter_tts/lib/interop_types.dart: -------------------------------------------------------------------------------- 1 | import 'dart:js_interop'; 2 | 3 | @JS('speechSynthesis') 4 | external SpeechSynthesis get synth; 5 | 6 | @JS() 7 | extension type SpeechSynthesis._(JSObject _) implements JSObject { 8 | external void cancel(); 9 | 10 | external JSArray getVoices(); 11 | 12 | external void pause(); 13 | 14 | external void resume(); 15 | 16 | external void speak(SpeechSynthesisUtterance utterance); 17 | } 18 | 19 | @JS() 20 | extension type SpeechSynthesisUtterance._(JSObject _) implements JSObject { 21 | external SpeechSynthesisUtterance(); 22 | 23 | external String lang; 24 | 25 | external double pitch; 26 | 27 | external double rate; 28 | 29 | external String text; 30 | 31 | external SpeechSynthesisVoice? voice; 32 | 33 | external double volume; 34 | 35 | // Event listeners 36 | 37 | @JS('onstart') 38 | external set onStart(JSFunction listener); 39 | 40 | @JS('onend') 41 | external set onEnd(JSFunction listener); 42 | 43 | @JS('onpause') 44 | external set onPause(JSFunction listener); 45 | 46 | @JS('onresume') 47 | external set onResume(JSFunction listener); 48 | 49 | @JS('onerror') 50 | external set onError(JSFunction listener); 51 | 52 | @JS('onboundary') 53 | external set onBoundary(JSFunction listener); 54 | } 55 | 56 | @JS() 57 | extension type SpeechSynthesisVoice._(JSObject _) implements JSObject { 58 | @JS('default') 59 | external bool get isDefault; 60 | 61 | external String get lang; 62 | 63 | @JS('localService') 64 | external bool get isLocalService; 65 | 66 | external String get name; 67 | } 68 | -------------------------------------------------------------------------------- /lib/utils/model_grouping.dart: -------------------------------------------------------------------------------- 1 | import '../core/providers/model_provider.dart'; 2 | 3 | class ModelGrouping { 4 | static String groupFor( 5 | ModelInfo m, { 6 | required String embeddingsLabel, 7 | required String otherLabel, 8 | }) { 9 | final id = m.id.toLowerCase(); 10 | if (m.type == ModelType.embedding || id.contains('embedding') || id.contains('embed')) { 11 | return embeddingsLabel; 12 | } 13 | if (id.contains('gpt') || RegExp(r'(^|[^a-z])o[134]').hasMatch(id)) return 'GPT'; 14 | if (id.contains('gemini-3')) return 'Gemini 3'; 15 | if (id.contains('gemini-2.5')) return 'Gemini 2.5'; 16 | if (id.contains('gemini')) return 'Gemini'; 17 | if (id.contains('claude-4')) return 'Claude 4'; 18 | if (id.contains('claude-sonnet')) return 'Claude Sonnet'; 19 | if (id.contains('claude-opus')) return 'Claude Opus'; 20 | if (id.contains('claude-haiku')) return 'Claude Haiku'; 21 | if (id.contains('claude-3.5')) return 'Claude 3.5'; 22 | if (id.contains('claude-3')) return 'Claude 3'; 23 | if (id.contains('deepseek')) return 'DeepSeek'; 24 | if (id.contains('kimi')) return 'Kimi'; 25 | if (RegExp(r'qwen|qwq|qvq|dashscope').hasMatch(id)) return 'Qwen'; 26 | if (RegExp(r'doubao|ark|volc').hasMatch(id)) return 'Doubao'; 27 | if (id.contains('glm') || id.contains('zhipu')) return 'GLM'; 28 | if (id.contains('mistral')) return 'Mistral'; 29 | if (id.contains('minimax')) return 'MiniMax'; 30 | if (id.contains('grok') || id.contains('xai')) return 'Grok'; 31 | if (id.contains('kat')) return 'KAT'; 32 | return otherLabel; 33 | } 34 | } 35 | 36 | -------------------------------------------------------------------------------- /lib/desktop/desktop_sidebar.dart: -------------------------------------------------------------------------------- 1 | import 'dart:async'; 2 | import 'package:flutter/material.dart'; 3 | import '../features/home/widgets/side_drawer.dart'; 4 | 5 | /// Desktop sidebar wrapper. Phase 1: reuse tablet embedded SideDrawer to ensure parity. 6 | /// Later we can evolve this to a dedicated desktop-only sidebar with right-click menus. 7 | class DesktopSidebar extends StatelessWidget { 8 | const DesktopSidebar({ 9 | super.key, 10 | required this.userName, 11 | required this.assistantName, 12 | this.onSelectConversation, 13 | this.onNewConversation, 14 | this.loadingConversationIds = const {}, 15 | }); 16 | 17 | final String userName; 18 | final String assistantName; 19 | /// Callback when a conversation is selected. 20 | /// The [closeDrawer] parameter is ignored on desktop (sidebar is always visible). 21 | final FutureOr Function(String id, {bool closeDrawer})? onSelectConversation; 22 | /// Callback when a new conversation is requested. 23 | /// The [closeDrawer] parameter is ignored on desktop (sidebar is always visible). 24 | final FutureOr Function({bool closeDrawer})? onNewConversation; 25 | final Set loadingConversationIds; 26 | 27 | @override 28 | Widget build(BuildContext context) { 29 | return SideDrawer( 30 | embedded: true, 31 | embeddedWidth: 300, 32 | userName: userName, 33 | assistantName: assistantName, 34 | onSelectConversation: onSelectConversation, 35 | onNewConversation: onNewConversation, 36 | loadingConversationIds: loadingConversationIds, 37 | showBottomBar: false, 38 | ); 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /assets/icons/tencent-qq.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /dependencies/tray_manager/packages/tray_manager/linux/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.10) 2 | set(PROJECT_NAME "tray_manager") 3 | project(${PROJECT_NAME} LANGUAGES CXX) 4 | 5 | # This value is used when generating builds using this plugin, so it must 6 | # not be changed 7 | set(PLUGIN_NAME "tray_manager_plugin") 8 | 9 | find_package(PkgConfig REQUIRED) 10 | 11 | add_library(${PLUGIN_NAME} SHARED 12 | "tray_manager_plugin.cc" 13 | ) 14 | apply_standard_settings(${PLUGIN_NAME}) 15 | set_target_properties(${PLUGIN_NAME} PROPERTIES 16 | CXX_VISIBILITY_PRESET hidden) 17 | target_compile_definitions(${PLUGIN_NAME} PRIVATE FLUTTER_PLUGIN_IMPL) 18 | target_include_directories(${PLUGIN_NAME} INTERFACE 19 | "${CMAKE_CURRENT_SOURCE_DIR}/include") 20 | target_link_libraries(${PLUGIN_NAME} PRIVATE flutter) 21 | target_link_libraries(${PLUGIN_NAME} PRIVATE PkgConfig::GTK) 22 | 23 | pkg_check_modules(APPINDICATOR IMPORTED_TARGET ayatana-appindicator3-0.1) 24 | if(APPINDICATOR_FOUND) 25 | target_compile_definitions(${PLUGIN_NAME} PRIVATE HAVE_AYATANA) 26 | else() 27 | pkg_check_modules(APPINDICATOR IMPORTED_TARGET appindicator3-0.1) 28 | endif() 29 | if(APPINDICATOR_FOUND) 30 | target_link_libraries(${PLUGIN_NAME} PRIVATE PkgConfig::APPINDICATOR) 31 | else() 32 | message( 33 | FATAL_ERROR 34 | "\n" 35 | "The `tray_manager` package requires ayatana-appindicator3-0.1 or appindicator3-0.1. See https://github.com/leanflutter/tray_manager#linux-requirements" 36 | ) 37 | endif() 38 | 39 | # List of absolute paths to libraries that should be bundled with the plugin 40 | set(tray_manager_bundled_libraries 41 | "" 42 | PARENT_SCOPE 43 | ) 44 | -------------------------------------------------------------------------------- /dependencies/flutter_tts/android/build.gradle: -------------------------------------------------------------------------------- 1 | def args = ["-Xlint:deprecation"] 2 | 3 | group 'com.tundralabs.fluttertts' 4 | version '1.0-SNAPSHOT' 5 | 6 | buildscript { 7 | ext.kotlin_version = '1.9.10' 8 | repositories { 9 | google() 10 | mavenCentral() 11 | } 12 | 13 | dependencies { 14 | classpath 'com.android.tools.build:gradle:8.2.0' 15 | classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" 16 | } 17 | } 18 | 19 | rootProject.allprojects { 20 | repositories { 21 | google() 22 | mavenCentral() 23 | } 24 | } 25 | 26 | project.getTasks().withType(JavaCompile).configureEach { 27 | options.compilerArgs.addAll(args) 28 | } 29 | 30 | apply plugin: 'com.android.library' 31 | apply plugin: 'kotlin-android' 32 | 33 | android { 34 | compileSdk 34 35 | if (project.android.hasProperty("namespace")) { 36 | namespace 'com.tundralabs.fluttertts' 37 | } 38 | 39 | defaultConfig { 40 | minSdkVersion 21 41 | testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" 42 | } 43 | 44 | lintOptions { 45 | disable 'InvalidPackage' 46 | disable 'GradleDependency' 47 | } 48 | 49 | compileOptions { 50 | sourceCompatibility JavaVersion.VERSION_1_8 51 | targetCompatibility JavaVersion.VERSION_1_8 52 | } 53 | 54 | kotlinOptions { 55 | jvmTarget = '1.8' 56 | } 57 | } 58 | dependencies { 59 | implementation "androidx.core:core-ktx:1.8.0" 60 | implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version" 61 | } 62 | repositories { 63 | mavenCentral() 64 | } 65 | -------------------------------------------------------------------------------- /assets/icons/minimax-color.svg: -------------------------------------------------------------------------------- 1 | 2 | Minimax 3 | 4 | 5 | 6 | 7 | 8 | 9 | 12 | 13 | -------------------------------------------------------------------------------- /dependencies/flutter_tts/.dart_tool/package_graph.json: -------------------------------------------------------------------------------- 1 | { 2 | "roots": [ 3 | "flutter_tts" 4 | ], 5 | "packages": [ 6 | { 7 | "name": "flutter_tts", 8 | "version": "4.2.3", 9 | "dependencies": [ 10 | "flutter", 11 | "flutter_web_plugins" 12 | ], 13 | "devDependencies": [ 14 | "lints" 15 | ] 16 | }, 17 | { 18 | "name": "lints", 19 | "version": "3.0.0", 20 | "dependencies": [] 21 | }, 22 | { 23 | "name": "flutter_web_plugins", 24 | "version": "0.0.0", 25 | "dependencies": [ 26 | "flutter" 27 | ] 28 | }, 29 | { 30 | "name": "flutter", 31 | "version": "0.0.0", 32 | "dependencies": [ 33 | "characters", 34 | "collection", 35 | "material_color_utilities", 36 | "meta", 37 | "sky_engine", 38 | "vector_math" 39 | ] 40 | }, 41 | { 42 | "name": "vector_math", 43 | "version": "2.2.0", 44 | "dependencies": [] 45 | }, 46 | { 47 | "name": "sky_engine", 48 | "version": "0.0.0", 49 | "dependencies": [] 50 | }, 51 | { 52 | "name": "meta", 53 | "version": "1.16.0", 54 | "dependencies": [] 55 | }, 56 | { 57 | "name": "material_color_utilities", 58 | "version": "0.11.1", 59 | "dependencies": [ 60 | "collection" 61 | ] 62 | }, 63 | { 64 | "name": "collection", 65 | "version": "1.19.1", 66 | "dependencies": [] 67 | }, 68 | { 69 | "name": "characters", 70 | "version": "1.4.0", 71 | "dependencies": [] 72 | } 73 | ], 74 | "configVersion": 1 75 | } -------------------------------------------------------------------------------- /assets/icons/claude-color.svg: -------------------------------------------------------------------------------- 1 | 2 | Claude 3 | 6 | 7 | -------------------------------------------------------------------------------- /assets/icons/openai.svg: -------------------------------------------------------------------------------- 1 | 3 | OpenAI 4 | 6 | 7 | -------------------------------------------------------------------------------- /assets/icons/bocha-color.svg: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 16 | 17 | 23 | 24 | 30 | -------------------------------------------------------------------------------- /lib/utils/markdown_preview_html.dart: -------------------------------------------------------------------------------- 1 | import 'dart:convert'; 2 | import 'package:flutter/material.dart'; 3 | import 'package:flutter/services.dart' show rootBundle; 4 | 5 | class MarkdownPreviewHtmlBuilder { 6 | static Future buildFromMarkdown(BuildContext context, String markdown) async { 7 | final cs = Theme.of(context).colorScheme; 8 | final template = await rootBundle.loadString('assets/html/mark.html'); 9 | return template 10 | .replaceAll('{{MARKDOWN_BASE64}}', base64Encode(utf8.encode(markdown))) 11 | .replaceAll('{{BACKGROUND_COLOR}}', _toCssHex(cs.background)) 12 | .replaceAll('{{ON_BACKGROUND_COLOR}}', _toCssHex(cs.onBackground)) 13 | .replaceAll('{{SURFACE_COLOR}}', _toCssHex(cs.surface)) 14 | .replaceAll('{{ON_SURFACE_COLOR}}', _toCssHex(cs.onSurface)) 15 | .replaceAll('{{SURFACE_VARIANT_COLOR}}', _toCssHex(cs.surfaceVariant)) 16 | .replaceAll('{{ON_SURFACE_VARIANT_COLOR}}', _toCssHex(cs.onSurfaceVariant)) 17 | .replaceAll('{{PRIMARY_COLOR}}', _toCssHex(cs.primary)) 18 | .replaceAll('{{OUTLINE_COLOR}}', _toCssHex(cs.outline)) 19 | .replaceAll('{{OUTLINE_VARIANT_COLOR}}', _toCssHex(cs.outlineVariant)); 20 | } 21 | 22 | static String _toCssHex(Color c) { 23 | final a = c.alpha.toRadixString(16).padLeft(2, '0').toUpperCase(); 24 | final r = c.red.toRadixString(16).padLeft(2, '0').toUpperCase(); 25 | final g = c.green.toRadixString(16).padLeft(2, '0').toUpperCase(); 26 | final b = c.blue.toRadixString(16).padLeft(2, '0').toUpperCase(); 27 | return '#$r$g$b$a'; 28 | } 29 | } 30 | 31 | extension Base64X on String { 32 | String base64EncodeString() => base64Encode(utf8.encode(this)); 33 | String base64DecodeString() => utf8.decode(base64Decode(this)); 34 | } 35 | 36 | -------------------------------------------------------------------------------- /lib/desktop/macos_window_position.dart: -------------------------------------------------------------------------------- 1 | import 'dart:io' show Platform; 2 | import 'package:flutter/services.dart'; 3 | import 'package:flutter/foundation.dart' show kIsWeb; 4 | import 'package:flutter/material.dart'; 5 | 6 | /// Thin wrapper over a macOS-only MethodChannel that gets/sets 7 | /// the NSWindow frame origin (Cocoa coordinates; origin at bottom-left). 8 | class MacOSWindowPosition { 9 | static const MethodChannel _chan = MethodChannel('app.windowPosition'); 10 | 11 | static bool get isSupported => !kIsWeb && Platform.isMacOS; 12 | 13 | /// Returns the window origin (frame.origin.x/y) in Cocoa coordinates. 14 | static Future getOrigin() async { 15 | if (!isSupported) { 16 | throw StateError('MacOSWindowPosition used on unsupported platform'); 17 | } 18 | final List res = await _chan.invokeMethod('getWindowOrigin'); 19 | final dx = (res[0] as num).toDouble(); 20 | final dy = (res[1] as num).toDouble(); 21 | return Offset(dx, dy); 22 | 23 | } 24 | 25 | /// Sets the window origin (frame.origin.x/y) with clamping to visible frame. 26 | static Future setOrigin(Offset origin) async { 27 | if (!isSupported) return false; 28 | final ok = await _chan.invokeMethod('setWindowOrigin', [origin.dx, origin.dy]); 29 | return ok == true; 30 | } 31 | 32 | /// Visible frame for current screen (x,y,width,height) in Cocoa coordinates. 33 | static Future getCurrentVisibleFrame() async { 34 | if (!isSupported) return null; 35 | final List res = await _chan.invokeMethod('getVisibleFrameForCurrentScreen'); 36 | final x = (res[0] as num).toDouble(); 37 | final y = (res[1] as num).toDouble(); 38 | final w = (res[2] as num).toDouble(); 39 | final h = (res[3] as num).toDouble(); 40 | return Rect.fromLTWH(x, y, w, h); 41 | } 42 | } 43 | 44 | -------------------------------------------------------------------------------- /dependencies/flutter-permission-handler/permission_handler_windows/README.md: -------------------------------------------------------------------------------- 1 | # permission_handler_windows 2 | 3 | [![pub package](https://img.shields.io/pub/v/permission_handler_windows.svg)](https://pub.dartlang.org/packages/permission_handler_windows) ![Build status](https://github.com/Baseflow/flutter-permission-handler/workflows/permission_handler_android/badge.svg?branch=master) [![style: flutter lints](https://img.shields.io/badge/style-flutter_lints-40c4ff.svg)](https://pub.dev/packages/flutter_lints) 4 | 5 | The official Windows implementation of the [permission_handler](https://pub.dev/packages/permission_handler) plugin by [Baseflow](https://baseflow.com). 6 | 7 | ## Usage 8 | 9 | Starting from version 9.2.0 of the [permission_handler](https://pub.dev/packages/permission_handler) plugin this is the endorsed Windows implementation. This means it will automatically be added to your dependencies when you depend on `permission_handler: ^9.2.0` in your applications pubspec.yaml. 10 | 11 | More detailed instructions on using the API can be found in the [README.md](../permission_handler/README.md) of the [permission_handler](https://pub.dev/packages/permission_handler) package. 12 | 13 | ## Issues 14 | 15 | Please file any issues, bugs or feature requests as an issue on our [GitHub](https://github.com/Baseflow/flutter-permission-handler/issues) page. Commercial support is available, you can contact us at . 16 | 17 | ## Want to contribute 18 | 19 | If you would like to contribute to the plugin (e.g. by improving the documentation, solving a bug or adding a cool new feature), please carefully review our [contribution guide](../CONTRIBUTING.md) and send us your [pull request](https://github.com/Baseflow/flutter-permission-handler/pulls). 20 | 21 | ## Author 22 | 23 | This permission_handler plugin for Flutter is developed by [Baseflow](https://baseflow.com). 24 | -------------------------------------------------------------------------------- /.metadata: -------------------------------------------------------------------------------- 1 | # This file tracks properties of this Flutter project. 2 | # Used by Flutter tool to assess capabilities and perform upgrades etc. 3 | # 4 | # This file should be version controlled and should not be manually edited. 5 | 6 | version: 7 | revision: "d7b523b356d15fb81e7d340bbe52b47f93937323" 8 | channel: "stable" 9 | 10 | project_type: app 11 | 12 | # Tracks metadata for the flutter migrate command 13 | migration: 14 | platforms: 15 | - platform: root 16 | create_revision: d7b523b356d15fb81e7d340bbe52b47f93937323 17 | base_revision: d7b523b356d15fb81e7d340bbe52b47f93937323 18 | - platform: android 19 | create_revision: d7b523b356d15fb81e7d340bbe52b47f93937323 20 | base_revision: d7b523b356d15fb81e7d340bbe52b47f93937323 21 | - platform: ios 22 | create_revision: d7b523b356d15fb81e7d340bbe52b47f93937323 23 | base_revision: d7b523b356d15fb81e7d340bbe52b47f93937323 24 | - platform: linux 25 | create_revision: d7b523b356d15fb81e7d340bbe52b47f93937323 26 | base_revision: d7b523b356d15fb81e7d340bbe52b47f93937323 27 | - platform: macos 28 | create_revision: d7b523b356d15fb81e7d340bbe52b47f93937323 29 | base_revision: d7b523b356d15fb81e7d340bbe52b47f93937323 30 | - platform: web 31 | create_revision: d7b523b356d15fb81e7d340bbe52b47f93937323 32 | base_revision: d7b523b356d15fb81e7d340bbe52b47f93937323 33 | - platform: windows 34 | create_revision: d7b523b356d15fb81e7d340bbe52b47f93937323 35 | base_revision: d7b523b356d15fb81e7d340bbe52b47f93937323 36 | 37 | # User provided section 38 | 39 | # List of Local paths (relative to this file) that should be 40 | # ignored by the migrate tool. 41 | # 42 | # Files that are not part of the templates will be ignored by default. 43 | unmanaged_files: 44 | - 'lib/main.dart' 45 | - 'ios/Runner.xcodeproj/project.pbxproj' 46 | -------------------------------------------------------------------------------- /dependencies/flutter_tts/ios/Classes/AudioModes.swift: -------------------------------------------------------------------------------- 1 | import AVFoundation 2 | 3 | enum AudioModes: String { 4 | case iosAudioModeDefault 5 | case iosAudioModeGameChat 6 | case iosAudioModeMeasurement 7 | case iosAudioModeMoviePlayback 8 | case iosAudioModeSpokenAudio 9 | case iosAudioModeVideoChat 10 | case iosAudioModeVideoRecording 11 | case iosAudioModeVoiceChat 12 | case iosAudioModeVoicePrompt 13 | 14 | func toAVAudioSessionMode() -> AVAudioSession.Mode? { 15 | switch self { 16 | case .iosAudioModeDefault: 17 | if #available(iOS 12.0, *) { 18 | return .default 19 | } 20 | return nil 21 | case .iosAudioModeGameChat: 22 | if #available(iOS 12.0, *) { 23 | return .gameChat 24 | } 25 | return nil 26 | case .iosAudioModeMeasurement: 27 | if #available(iOS 12.0, *) { 28 | return .measurement 29 | } 30 | return nil 31 | case .iosAudioModeMoviePlayback: 32 | if #available(iOS 12.0, *) { 33 | return .moviePlayback 34 | } 35 | return nil 36 | case .iosAudioModeSpokenAudio: 37 | if #available(iOS 12.0, *) { 38 | return .spokenAudio 39 | } 40 | return nil 41 | case .iosAudioModeVideoChat: 42 | if #available(iOS 12.0, *) { 43 | return .videoChat 44 | } 45 | return nil 46 | case .iosAudioModeVideoRecording: 47 | if #available(iOS 12.0, *) { 48 | return .videoRecording 49 | } 50 | return nil 51 | case .iosAudioModeVoiceChat: 52 | if #available(iOS 12.0, *) { 53 | return .voiceChat 54 | } 55 | return nil 56 | case .iosAudioModeVoicePrompt: 57 | if #available(iOS 12.0, *) { 58 | return .voicePrompt 59 | } 60 | return nil 61 | } 62 | } 63 | } 64 | -------------------------------------------------------------------------------- /android/app/src/main/kotlin/com/psyche/kelivo/MainActivity.kt: -------------------------------------------------------------------------------- 1 | package com.psyche.kelivo 2 | 3 | import android.content.Intent 4 | import io.flutter.embedding.android.FlutterActivity 5 | import io.flutter.embedding.engine.FlutterEngine 6 | import io.flutter.plugin.common.MethodChannel 7 | 8 | class MainActivity : FlutterActivity() { 9 | private val channelName = "app.process_text" 10 | private var channel: MethodChannel? = null 11 | private var pendingProcessText: String? = null 12 | 13 | override fun configureFlutterEngine(flutterEngine: FlutterEngine) { 14 | super.configureFlutterEngine(flutterEngine) 15 | channel = MethodChannel(flutterEngine.dartExecutor.binaryMessenger, channelName) 16 | channel?.setMethodCallHandler { call, result -> 17 | when (call.method) { 18 | "getInitialText" -> { 19 | val text = pendingProcessText ?: extractProcessText(intent) 20 | pendingProcessText = null 21 | result.success(text) 22 | } 23 | else -> result.notImplemented() 24 | } 25 | } 26 | pendingProcessText = extractProcessText(intent) 27 | } 28 | 29 | override fun onNewIntent(intent: Intent) { 30 | super.onNewIntent(intent) 31 | setIntent(intent) 32 | val text = extractProcessText(intent) ?: return 33 | val ch = channel 34 | if (ch != null) { 35 | ch.invokeMethod("onProcessText", text) 36 | } else { 37 | pendingProcessText = text 38 | } 39 | } 40 | 41 | private fun extractProcessText(intent: Intent?): String? { 42 | if (intent?.action != Intent.ACTION_PROCESS_TEXT) return null 43 | val text = intent.getCharSequenceExtra(Intent.EXTRA_PROCESS_TEXT)?.toString() 44 | return text?.trim()?.takeIf { it.isNotEmpty() } 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /lib/shared/responsive/adaptive_layout.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'breakpoints.dart'; 3 | 4 | class AdaptiveLayout extends StatelessWidget { 5 | final Widget? navigationRail; // desktop only (not used for tablet) 6 | final Widget? sidePanel; // tablet/desktop: conversation/history panel 7 | final Widget body; // main content 8 | final double tabletSideWidth; 9 | final double desktopNavWidth; 10 | final double desktopSideWidth; 11 | 12 | const AdaptiveLayout({ 13 | super.key, 14 | this.navigationRail, 15 | this.sidePanel, 16 | required this.body, 17 | this.tabletSideWidth = 300, 18 | this.desktopNavWidth = 80, 19 | this.desktopSideWidth = 320, 20 | }); 21 | 22 | @override 23 | Widget build(BuildContext context) { 24 | final type = screenTypeForContext(context); 25 | 26 | switch (type) { 27 | case ScreenType.mobile: 28 | return body; 29 | case ScreenType.tablet: 30 | return Row( 31 | children: [ 32 | if (sidePanel != null) 33 | SizedBox( 34 | width: tabletSideWidth, 35 | child: sidePanel, 36 | ), 37 | const VerticalDivider(width: 1), 38 | Expanded(child: body), 39 | ], 40 | ); 41 | case ScreenType.desktop: 42 | case ScreenType.wide: 43 | // Basic 3-column skeleton; desktop specific tuning can come later. 44 | return Row( 45 | children: [ 46 | if (navigationRail != null) 47 | SizedBox(width: desktopNavWidth, child: navigationRail), 48 | if (sidePanel != null) ...[ 49 | SizedBox(width: desktopSideWidth, child: sidePanel), 50 | const VerticalDivider(width: 1), 51 | ], 52 | Expanded(child: body), 53 | ], 54 | ); 55 | } 56 | } 57 | } 58 | 59 | --------------------------------------------------------------------------------