neoagent 2.3.1-beta.11 → 2.3.1-beta.111
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.env.example +53 -5
- package/README.md +16 -7
- package/com.neoagent.plist +1 -1
- package/docs/automation.md +82 -41
- package/docs/capabilities.md +85 -89
- package/docs/configuration.md +87 -94
- package/docs/getting-started.md +46 -27
- package/docs/hardware.md +1 -1
- package/docs/index.md +24 -30
- package/docs/integrations.md +46 -64
- package/docs/migration.md +41 -146
- package/docs/operations.md +23 -20
- package/docs/skills.md +20 -20
- package/docs/why-neoagent.md +15 -13
- package/extensions/chrome-browser/background.mjs +10 -2
- package/flutter_app/.metadata +42 -0
- package/flutter_app/DESIGN_SYSTEM.md +166 -0
- package/flutter_app/README.md +21 -0
- package/flutter_app/analysis_options.yaml +32 -0
- package/flutter_app/android/app/build.gradle.kts +111 -0
- package/flutter_app/android/app/src/debug/AndroidManifest.xml +7 -0
- package/flutter_app/android/app/src/main/AndroidManifest.xml +185 -0
- package/flutter_app/android/app/src/main/kotlin/com/neoagent/flutter_app/MainActivity.kt +888 -0
- package/flutter_app/android/app/src/main/kotlin/com/neoagent/flutter_app/auto/NeoAgentCarAppService.kt +114 -0
- package/flutter_app/android/app/src/main/kotlin/com/neoagent/flutter_app/health/HealthConnectGateway.kt +280 -0
- package/flutter_app/android/app/src/main/kotlin/com/neoagent/flutter_app/health/HealthSyncNotifications.kt +113 -0
- package/flutter_app/android/app/src/main/kotlin/com/neoagent/flutter_app/health/HealthSyncPayload.kt +57 -0
- package/flutter_app/android/app/src/main/kotlin/com/neoagent/flutter_app/health/HealthSyncScheduler.kt +78 -0
- package/flutter_app/android/app/src/main/kotlin/com/neoagent/flutter_app/health/HealthSyncWorker.kt +253 -0
- package/flutter_app/android/app/src/main/kotlin/com/neoagent/flutter_app/health/PermissionsRationaleActivity.kt +46 -0
- package/flutter_app/android/app/src/main/kotlin/com/neoagent/flutter_app/recording/RecordingBootReceiver.kt +21 -0
- package/flutter_app/android/app/src/main/kotlin/com/neoagent/flutter_app/recording/RecordingForegroundService.kt +586 -0
- package/flutter_app/android/app/src/main/kotlin/com/neoagent/flutter_app/recording/RecordingStateStore.kt +78 -0
- package/flutter_app/android/app/src/main/kotlin/com/neoagent/flutter_app/recording/RecordingUploadClient.kt +104 -0
- package/flutter_app/android/app/src/main/kotlin/com/neoagent/flutter_app/telecom/NeoAgentConnection.kt +118 -0
- package/flutter_app/android/app/src/main/kotlin/com/neoagent/flutter_app/telecom/NeoAgentConnectionService.kt +86 -0
- package/flutter_app/android/app/src/main/kotlin/com/neoagent/flutter_app/widgets/AiHomeWidgetProvider.kt +457 -0
- package/flutter_app/android/app/src/main/kotlin/com/neoagent/flutter_app/widgets/AiWidgetStore.kt +194 -0
- package/flutter_app/android/app/src/main/kotlin/com/neoagent/flutter_app/widgets/VoiceLaunchWidgetProvider.kt +67 -0
- package/flutter_app/android/app/src/main/kotlin/com/neoagent/flutter_app/widgets/WidgetConfigActivity.kt +228 -0
- package/flutter_app/android/app/src/main/kotlin/com/neoagent/flutter_app/widgets/WidgetSyncScheduler.kt +72 -0
- package/flutter_app/android/app/src/main/kotlin/com/neoagent/flutter_app/widgets/WidgetSyncWorker.kt +186 -0
- package/flutter_app/android/app/src/main/kotlin/com/neoagent/flutter_app/widgets/WidgetTaskRunWorker.kt +210 -0
- package/flutter_app/android/app/src/main/res/drawable/launch_background.xml +12 -0
- package/flutter_app/android/app/src/main/res/drawable/neoagent_ai_widget_bg.xml +11 -0
- package/flutter_app/android/app/src/main/res/drawable/neoagent_ai_widget_task_bg.xml +8 -0
- package/flutter_app/android/app/src/main/res/drawable-v21/launch_background.xml +12 -0
- package/flutter_app/android/app/src/main/res/layout/neoagent_ai_widget.xml +138 -0
- package/flutter_app/android/app/src/main/res/layout/neoagent_ai_widget_task_row.xml +52 -0
- package/flutter_app/android/app/src/main/res/layout/neoagent_voice_widget.xml +49 -0
- package/flutter_app/android/app/src/main/res/mipmap-hdpi/ic_launcher.png +0 -0
- package/flutter_app/android/app/src/main/res/mipmap-mdpi/ic_launcher.png +0 -0
- package/flutter_app/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png +0 -0
- package/flutter_app/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png +0 -0
- package/flutter_app/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png +0 -0
- package/flutter_app/android/app/src/main/res/values/arrays.xml +8 -0
- package/flutter_app/android/app/src/main/res/values/strings.xml +12 -0
- package/flutter_app/android/app/src/main/res/values/styles.xml +18 -0
- package/flutter_app/android/app/src/main/res/values-night/styles.xml +18 -0
- package/flutter_app/android/app/src/main/res/xml/automotive_app_desc.xml +4 -0
- package/flutter_app/android/app/src/main/res/xml/file_paths.xml +6 -0
- package/flutter_app/android/app/src/main/res/xml/neoagent_ai_widget_info.xml +12 -0
- package/flutter_app/android/app/src/main/res/xml/neoagent_voice_widget_info.xml +12 -0
- package/flutter_app/android/app/src/profile/AndroidManifest.xml +7 -0
- package/flutter_app/android/build.gradle.kts +24 -0
- package/flutter_app/android/ci-release.keystore +0 -0
- package/flutter_app/android/gradle/wrapper/gradle-wrapper.properties +5 -0
- package/flutter_app/android/gradle.properties +3 -0
- package/flutter_app/android/key.properties +4 -0
- package/flutter_app/android/settings.gradle.kts +26 -0
- package/flutter_app/assets/branding/app_icon_1024.png +0 -0
- package/flutter_app/assets/branding/app_icon_128.png +0 -0
- package/flutter_app/assets/branding/app_icon_192.png +0 -0
- package/flutter_app/assets/branding/app_icon_256.png +0 -0
- package/flutter_app/assets/branding/app_icon_32.png +0 -0
- package/flutter_app/assets/branding/app_icon_512.png +0 -0
- package/flutter_app/assets/branding/app_icon_64.png +0 -0
- package/flutter_app/assets/branding/onboarding_intro.mp4 +0 -0
- package/flutter_app/assets/branding/tray_icon_template.png +0 -0
- package/flutter_app/lib/features/location/location_service.dart +117 -0
- package/flutter_app/lib/features/notifications/notification_interceptor.dart +73 -0
- package/flutter_app/lib/features/onboarding/onboarding_chrome.dart +571 -0
- package/flutter_app/lib/features/onboarding/onboarding_messaging_step.dart +275 -0
- package/flutter_app/lib/features/onboarding/onboarding_model_step.dart +366 -0
- package/flutter_app/lib/features/onboarding/onboarding_shell.dart +57 -0
- package/flutter_app/lib/features/onboarding/onboarding_video_step.dart +218 -0
- package/flutter_app/lib/features/onboarding/onboarding_welcome_step.dart +46 -0
- package/flutter_app/lib/main.dart +107 -0
- package/flutter_app/lib/main_account_settings.dart +1340 -0
- package/flutter_app/lib/main_admin.dart +900 -0
- package/flutter_app/lib/main_app_shell.dart +2162 -0
- package/flutter_app/lib/main_chat.dart +3902 -0
- package/flutter_app/lib/main_controller.dart +7229 -0
- package/flutter_app/lib/main_devices.dart +1738 -0
- package/flutter_app/lib/main_integrations.dart +917 -0
- package/flutter_app/lib/main_launcher.dart +959 -0
- package/flutter_app/lib/main_launcher_entry.dart +5 -0
- package/flutter_app/lib/main_models.dart +3807 -0
- package/flutter_app/lib/main_navigation.dart +206 -0
- package/flutter_app/lib/main_operations.dart +5249 -0
- package/flutter_app/lib/main_recordings.dart +920 -0
- package/flutter_app/lib/main_runtime.dart +869 -0
- package/flutter_app/lib/main_settings.dart +2288 -0
- package/flutter_app/lib/main_shared.dart +3393 -0
- package/flutter_app/lib/main_spacing.dart +33 -0
- package/flutter_app/lib/main_theme.dart +276 -0
- package/flutter_app/lib/main_unified.dart +388 -0
- package/flutter_app/lib/main_voice_assistant.dart +957 -0
- package/flutter_app/lib/src/analytics_service.dart +294 -0
- package/flutter_app/lib/src/android_apk_drop_zone.dart +32 -0
- package/flutter_app/lib/src/android_apk_drop_zone_stub.dart +16 -0
- package/flutter_app/lib/src/android_apk_drop_zone_web.dart +348 -0
- package/flutter_app/lib/src/android_app_installer.dart +22 -0
- package/flutter_app/lib/src/android_app_installer_io.dart +122 -0
- package/flutter_app/lib/src/android_app_installer_stub.dart +21 -0
- package/flutter_app/lib/src/android_auto_bridge.dart +59 -0
- package/flutter_app/lib/src/android_launcher_bridge.dart +239 -0
- package/flutter_app/lib/src/app_launch_bridge.dart +58 -0
- package/flutter_app/lib/src/app_release_updater.dart +511 -0
- package/flutter_app/lib/src/backend_client.dart +1870 -0
- package/flutter_app/lib/src/desktop_companion.dart +2 -0
- package/flutter_app/lib/src/desktop_companion_actions.dart +586 -0
- package/flutter_app/lib/src/desktop_companion_io.dart +538 -0
- package/flutter_app/lib/src/desktop_companion_stub.dart +59 -0
- package/flutter_app/lib/src/desktop_native_bridge.dart +91 -0
- package/flutter_app/lib/src/desktop_screen_capture.dart +21 -0
- package/flutter_app/lib/src/desktop_screen_capture_io.dart +142 -0
- package/flutter_app/lib/src/desktop_screen_capture_stub.dart +12 -0
- package/flutter_app/lib/src/diagnostics_logger.dart +119 -0
- package/flutter_app/lib/src/health_bridge.dart +136 -0
- package/flutter_app/lib/src/live_voice_capture.dart +85 -0
- package/flutter_app/lib/src/messaging_access_summary.dart +46 -0
- package/flutter_app/lib/src/network/app_http_client.dart +53 -0
- package/flutter_app/lib/src/network/app_http_client_factory.dart +6 -0
- package/flutter_app/lib/src/network/app_http_client_io.dart +138 -0
- package/flutter_app/lib/src/network/app_http_client_stub.dart +3 -0
- package/flutter_app/lib/src/network/app_http_client_web.dart +94 -0
- package/flutter_app/lib/src/oauth_launcher.dart +33 -0
- package/flutter_app/lib/src/oauth_launcher_io.dart +95 -0
- package/flutter_app/lib/src/oauth_launcher_stub.dart +33 -0
- package/flutter_app/lib/src/oauth_launcher_web.dart +107 -0
- package/flutter_app/lib/src/recording_bridge.dart +232 -0
- package/flutter_app/lib/src/recording_bridge_io.dart +1019 -0
- package/flutter_app/lib/src/recording_bridge_stub.dart +120 -0
- package/flutter_app/lib/src/recording_bridge_web.dart +689 -0
- package/flutter_app/lib/src/recording_payloads.dart +86 -0
- package/flutter_app/lib/src/theme/palette.dart +81 -0
- package/flutter_app/lib/src/web_app_update_monitor.dart +17 -0
- package/flutter_app/lib/src/web_app_update_monitor_stub.dart +24 -0
- package/flutter_app/lib/src/web_app_update_monitor_web.dart +123 -0
- package/flutter_app/lib/src/widget_bridge.dart +49 -0
- package/flutter_app/linux/CMakeLists.txt +128 -0
- package/flutter_app/linux/flutter/CMakeLists.txt +88 -0
- package/flutter_app/linux/flutter/generated_plugin_registrant.cc +47 -0
- package/flutter_app/linux/flutter/generated_plugin_registrant.h +15 -0
- package/flutter_app/linux/flutter/generated_plugins.cmake +32 -0
- package/flutter_app/linux/runner/CMakeLists.txt +26 -0
- package/flutter_app/linux/runner/main.cc +6 -0
- package/flutter_app/linux/runner/my_application.cc +144 -0
- package/flutter_app/linux/runner/my_application.h +18 -0
- package/flutter_app/linux/runner/resources/app_icon.png +0 -0
- package/flutter_app/macos/Flutter/Flutter-Debug.xcconfig +2 -0
- package/flutter_app/macos/Flutter/Flutter-Release.xcconfig +2 -0
- package/flutter_app/macos/Flutter/GeneratedPluginRegistrant.swift +48 -0
- package/flutter_app/macos/Podfile +42 -0
- package/flutter_app/macos/Podfile.lock +87 -0
- package/flutter_app/macos/Runner/AppDelegate.swift +576 -0
- package/flutter_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json +68 -0
- package/flutter_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png +0 -0
- package/flutter_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png +0 -0
- package/flutter_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png +0 -0
- package/flutter_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png +0 -0
- package/flutter_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png +0 -0
- package/flutter_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png +0 -0
- package/flutter_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png +0 -0
- package/flutter_app/macos/Runner/Base.lproj/MainMenu.xib +342 -0
- package/flutter_app/macos/Runner/Configs/AppInfo.xcconfig +14 -0
- package/flutter_app/macos/Runner/Configs/Debug.xcconfig +2 -0
- package/flutter_app/macos/Runner/Configs/Release.xcconfig +2 -0
- package/flutter_app/macos/Runner/Configs/Warnings.xcconfig +13 -0
- package/flutter_app/macos/Runner/DebugProfile.entitlements +16 -0
- package/flutter_app/macos/Runner/Info.plist +36 -0
- package/flutter_app/macos/Runner/MainFlutterWindow.swift +19 -0
- package/flutter_app/macos/Runner/Release.entitlements +12 -0
- package/flutter_app/macos/Runner.xcodeproj/project.pbxproj +801 -0
- package/flutter_app/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
- package/flutter_app/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +99 -0
- package/flutter_app/macos/Runner.xcworkspace/contents.xcworkspacedata +10 -0
- package/flutter_app/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
- package/flutter_app/macos/RunnerTests/RunnerTests.swift +12 -0
- package/flutter_app/patch_strings.py +12 -0
- package/flutter_app/pubspec.lock +1256 -0
- package/flutter_app/pubspec.yaml +59 -0
- package/flutter_app/third_party/desktop_audio_capture/LICENSE +21 -0
- package/flutter_app/third_party/desktop_audio_capture/README.md +262 -0
- package/flutter_app/third_party/desktop_audio_capture/lib/audio_capture.dart +65 -0
- package/flutter_app/third_party/desktop_audio_capture/lib/config/mic_audio_config.dart +153 -0
- package/flutter_app/third_party/desktop_audio_capture/lib/config/system_adudio_config.dart +110 -0
- package/flutter_app/third_party/desktop_audio_capture/lib/mic/mic_audio_capture.dart +461 -0
- package/flutter_app/third_party/desktop_audio_capture/lib/model/audio_status.dart +91 -0
- package/flutter_app/third_party/desktop_audio_capture/lib/model/decibel_data.dart +106 -0
- package/flutter_app/third_party/desktop_audio_capture/lib/model/input_device_type.dart +219 -0
- package/flutter_app/third_party/desktop_audio_capture/lib/system/system_audio_capture.dart +336 -0
- package/flutter_app/third_party/desktop_audio_capture/linux/CMakeLists.txt +101 -0
- package/flutter_app/third_party/desktop_audio_capture/linux/audio_capture_plugin.cc +692 -0
- package/flutter_app/third_party/desktop_audio_capture/linux/include/audio_capture/audio_capture_plugin.h +35 -0
- package/flutter_app/third_party/desktop_audio_capture/linux/include/audio_capture/mic_capture_plugin.h +36 -0
- package/flutter_app/third_party/desktop_audio_capture/linux/include/desktop_audio_capture/audio_capture_plugin.h +32 -0
- package/flutter_app/third_party/desktop_audio_capture/linux/include/desktop_audio_capture/mic_capture_plugin.h +32 -0
- package/flutter_app/third_party/desktop_audio_capture/linux/mic_capture_plugin.cc +878 -0
- package/flutter_app/third_party/desktop_audio_capture/macos/Classes/AudioCapturePlugin.swift +27 -0
- package/flutter_app/third_party/desktop_audio_capture/macos/Classes/MicCapturePlugin.swift +1172 -0
- package/flutter_app/third_party/desktop_audio_capture/macos/Classes/SystemCapturePlugin.swift +655 -0
- package/flutter_app/third_party/desktop_audio_capture/macos/Resources/PrivacyInfo.xcprivacy +12 -0
- package/flutter_app/third_party/desktop_audio_capture/macos/desktop_audio_capture.podspec +30 -0
- package/flutter_app/third_party/desktop_audio_capture/pubspec.yaml +87 -0
- package/flutter_app/third_party/desktop_audio_capture/windows/CMakeLists.txt +105 -0
- package/flutter_app/third_party/desktop_audio_capture/windows/audio_capture_plugin.cpp +80 -0
- package/flutter_app/third_party/desktop_audio_capture/windows/audio_capture_plugin.h +31 -0
- package/flutter_app/third_party/desktop_audio_capture/windows/audio_capture_plugin_c_api.cpp +12 -0
- package/flutter_app/third_party/desktop_audio_capture/windows/include/audio_capture/audio_capture_plugin_c_api.h +23 -0
- package/flutter_app/third_party/desktop_audio_capture/windows/include/desktop_audio_capture/audio_capture_plugin.h +25 -0
- package/flutter_app/third_party/desktop_audio_capture/windows/mic_capture_plugin.cpp +1117 -0
- package/flutter_app/third_party/desktop_audio_capture/windows/mic_capture_plugin.h +115 -0
- package/flutter_app/third_party/desktop_audio_capture/windows/system_audio_capture_plugin.cpp +777 -0
- package/flutter_app/third_party/desktop_audio_capture/windows/system_audio_capture_plugin.h +87 -0
- package/flutter_app/third_party/flutter_secure_storage_linux/linux/CMakeLists.txt +30 -0
- package/flutter_app/third_party/flutter_secure_storage_linux/linux/flutter_secure_storage_linux_plugin.cc +215 -0
- package/flutter_app/third_party/flutter_secure_storage_linux/linux/include/flutter_secure_storage_linux/flutter_secure_storage_linux_plugin.h +27 -0
- package/flutter_app/third_party/flutter_secure_storage_linux/pubspec.yaml +20 -0
- package/flutter_app/tool/generate_desktop_branding.py +219 -0
- package/flutter_app/web/favicon.png +0 -0
- package/flutter_app/web/favicon.svg +12 -0
- package/flutter_app/web/icons/Icon-192.png +0 -0
- package/flutter_app/web/icons/Icon-512.png +0 -0
- package/flutter_app/web/icons/Icon-maskable-192.png +0 -0
- package/flutter_app/web/icons/Icon-maskable-512.png +0 -0
- package/flutter_app/web/index.html +39 -0
- package/flutter_app/web/manifest.json +35 -0
- package/flutter_app/windows/CMakeLists.txt +108 -0
- package/flutter_app/windows/flutter/CMakeLists.txt +109 -0
- package/flutter_app/windows/flutter/generated_plugin_registrant.cc +50 -0
- package/flutter_app/windows/flutter/generated_plugin_registrant.h +15 -0
- package/flutter_app/windows/flutter/generated_plugins.cmake +36 -0
- package/flutter_app/windows/runner/CMakeLists.txt +41 -0
- package/flutter_app/windows/runner/Runner.rc +121 -0
- package/flutter_app/windows/runner/flutter_window.cpp +533 -0
- package/flutter_app/windows/runner/flutter_window.h +37 -0
- package/flutter_app/windows/runner/main.cpp +53 -0
- package/flutter_app/windows/runner/resource.h +16 -0
- package/flutter_app/windows/runner/resources/app_icon.ico +0 -0
- package/flutter_app/windows/runner/runner.exe.manifest +14 -0
- package/flutter_app/windows/runner/utils.cpp +65 -0
- package/flutter_app/windows/runner/utils.h +19 -0
- package/flutter_app/windows/runner/win32_window.cpp +299 -0
- package/flutter_app/windows/runner/win32_window.h +102 -0
- package/lib/install_helpers.js +31 -0
- package/lib/manager.js +579 -122
- package/package.json +10 -3
- package/runtime/paths.js +137 -0
- package/server/config/analytics.js +30 -0
- package/server/db/database.js +296 -22
- package/server/guest-agent.android.package.json +13 -0
- package/server/guest-agent.browser.package.json +14 -0
- package/server/guest_agent.js +98 -52
- package/server/http/middleware.js +5 -2
- package/server/http/routes.js +3 -0
- package/server/http/static.js +41 -1
- package/server/index.js +15 -16
- package/server/public/.last_build_id +1 -1
- package/server/public/assets/AssetManifest.bin +1 -1
- package/server/public/assets/AssetManifest.bin.json +1 -1
- package/server/public/assets/AssetManifest.json +1 -1
- package/server/public/assets/NOTICES +644 -155
- package/server/public/assets/assets/branding/onboarding_intro.mp4 +0 -0
- package/server/public/assets/fonts/MaterialIcons-Regular.otf +0 -0
- package/server/public/assets/packages/mixpanel_flutter/assets/mixpanel.js +3 -0
- package/server/public/canvaskit/wimp.wasm +0 -0
- package/server/public/flutter_bootstrap.js +2 -2
- package/server/public/main.dart.js +96067 -88139
- package/server/routes/account.js +26 -1
- package/server/routes/agents.js +6 -2
- package/server/routes/android.js +22 -6
- package/server/routes/auth.js +25 -5
- package/server/routes/browser.js +47 -13
- package/server/routes/integrations.js +22 -1
- package/server/routes/memory.js +168 -6
- package/server/routes/runtime.js +14 -0
- package/server/routes/settings.js +102 -24
- package/server/routes/skills.js +12 -0
- package/server/routes/social_video.js +66 -0
- package/server/routes/tasks.js +22 -2
- package/server/routes/triggers.js +44 -35
- package/server/routes/wearable.js +67 -0
- package/server/routes/widgets.js +4 -4
- package/server/services/ai/capabilityHealth.js +23 -51
- package/server/services/ai/compaction.js +1 -1
- package/server/services/ai/deliverables/artifact_helpers.js +190 -0
- package/server/services/ai/deliverables/contracts.js +113 -0
- package/server/services/ai/deliverables/index.js +20 -0
- package/server/services/ai/deliverables/selector.js +94 -0
- package/server/services/ai/deliverables/validator.js +63 -0
- package/server/services/ai/deliverables/workflows.js +207 -0
- package/server/services/ai/engine.js +363 -27
- package/server/services/ai/hooks.js +127 -0
- package/server/services/ai/integrated_tools/index.js +98 -0
- package/server/services/ai/integrated_tools/remotion.js +373 -0
- package/server/services/ai/integrated_tools/shared.js +204 -0
- package/server/services/ai/integrated_tools/slidev.js +207 -0
- package/server/services/ai/loopPolicy.js +146 -0
- package/server/services/ai/models.js +31 -4
- package/server/services/ai/providers/claudeCode.js +49 -0
- package/server/services/ai/providers/openai.js +2 -1
- package/server/services/ai/providers/openaiCodex.js +422 -15
- package/server/services/ai/recordingInsights.js +11 -13
- package/server/services/ai/runEvents.js +100 -0
- package/server/services/ai/settings.js +12 -2
- package/server/services/ai/systemPrompt.js +15 -1
- package/server/services/ai/taskAnalysis.js +2 -0
- package/server/services/ai/toolResult.js +20 -0
- package/server/services/ai/toolRunner.js +46 -6
- package/server/services/ai/toolSelector.js +54 -1
- package/server/services/ai/tools.js +210 -116
- package/server/services/android/android_bootstrap_worker.js +63 -0
- package/server/services/android/controller.js +442 -1760
- package/server/services/bootstrap_helpers.js +0 -34
- package/server/services/browser/controller.js +279 -49
- package/server/services/cli/executor.js +40 -1
- package/server/services/desktop/screenRecorder.js +65 -9
- package/server/services/integrations/figma/provider.js +1 -0
- package/server/services/integrations/github/provider.js +3 -3
- package/server/services/integrations/google/provider.js +1 -0
- package/server/services/integrations/manager.js +25 -5
- package/server/services/integrations/microsoft/provider.js +1 -0
- package/server/services/integrations/oauth_provider.js +15 -5
- package/server/services/integrations/provider_config_store.js +22 -13
- package/server/services/integrations/registry.js +2 -4
- package/server/services/integrations/spotify/provider.js +1 -0
- package/server/services/integrations/trello/provider.js +842 -0
- package/server/services/manager.js +88 -155
- package/server/services/mcp/client.js +120 -23
- package/server/services/memory/llm_transfer.js +218 -0
- package/server/services/memory/manager.js +260 -33
- package/server/services/messaging/access_policy.js +10 -0
- package/server/services/messaging/automation.js +1 -1
- package/server/services/messaging/manager.js +64 -1
- package/server/services/messaging/meshtastic.js +277 -0
- package/server/services/messaging/meshtastic_env.js +40 -0
- package/server/services/messaging/meshtastic_protocol.js +530 -0
- package/server/services/messaging/meshtastic_tcp_transport.js +25 -0
- package/server/services/runtime/backends/local-vm.js +221 -158
- package/server/services/runtime/docker-vm-manager.js +392 -0
- package/server/services/runtime/guest_bootstrap.js +654 -0
- package/server/services/runtime/manager.js +85 -29
- package/server/services/runtime/settings.js +22 -31
- package/server/services/runtime/validation.js +16 -31
- package/server/services/social_video/adapters/base.js +26 -0
- package/server/services/social_video/adapters/index.js +27 -0
- package/server/services/social_video/adapters/instagram.js +17 -0
- package/server/services/social_video/adapters/tiktok.js +17 -0
- package/server/services/social_video/adapters/x.js +17 -0
- package/server/services/social_video/adapters/youtube.js +17 -0
- package/server/services/social_video/captions.js +187 -0
- package/server/services/social_video/frame.js +42 -0
- package/server/services/social_video/index.js +7 -0
- package/server/services/social_video/metadata.js +63 -0
- package/server/services/social_video/result.js +63 -0
- package/server/services/social_video/service.js +720 -0
- package/server/services/social_video/url.js +83 -0
- package/server/services/tasks/integration_runtime.js +1 -1
- package/server/services/tasks/runtime.js +1 -1
- package/server/services/tasks/task_repository.js +3 -6
- package/server/services/voice/openaiSpeech.js +6 -1
- package/server/services/voice/providers.js +142 -14
- package/server/services/voice/runtime.js +8 -8
- package/server/services/voice/runtimeManager.js +156 -19
- package/server/services/voice/turnRunner.js +29 -9
- package/server/services/wearable/firmware_manifest.js +353 -0
- package/server/services/wearable/gateway.js +350 -0
- package/server/services/wearable/protocol.js +45 -0
- package/server/services/wearable/service.js +240 -0
- package/server/services/websocket.js +3 -1
- package/server/services/widgets/focus_widget.js +137 -0
- package/server/services/widgets/service.js +133 -2
- package/server/services/workspace/manager.js +301 -0
- package/server/utils/deployment.js +16 -9
- package/server/services/integrations/home_assistant/provider.js +0 -630
- package/server/services/messaging/access_policy.test.js +0 -228
- package/server/services/runtime/backends/host.js +0 -37
- package/server/services/runtime/qemu.js +0 -391
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
# NeoAgent Design System
|
|
2
|
+
|
|
3
|
+
Reference for UI/UX conventions across the Flutter workspace. When adding new screens or widgets, use the tokens and patterns documented here rather than raw values.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Tokens
|
|
8
|
+
|
|
9
|
+
### Spacing — `AppSpacing` (main_spacing.dart)
|
|
10
|
+
|
|
11
|
+
| Token | Value | Use |
|
|
12
|
+
|-------|-------|-----|
|
|
13
|
+
| `AppSpacing.xs` | 8px | Tight internal gaps, icon-to-label |
|
|
14
|
+
| `AppSpacing.sm` | 12px | Component internal padding |
|
|
15
|
+
| `AppSpacing.md` | 16px | Standard padding, list item spacing |
|
|
16
|
+
| `AppSpacing.lg` | 24px | Section gaps |
|
|
17
|
+
| `AppSpacing.xl` | 32px | Screen-level margins |
|
|
18
|
+
|
|
19
|
+
Page-level horizontal padding is handled by `_pagePadding(context)` (20–40px responsive). Do not hardcode page margins.
|
|
20
|
+
|
|
21
|
+
### Border Radius — `AppRadius` (main_spacing.dart)
|
|
22
|
+
|
|
23
|
+
| Token | Value | Use |
|
|
24
|
+
|-------|-------|-----|
|
|
25
|
+
| `AppRadius.tag` | 8px | Code blocks, chips, inline badges |
|
|
26
|
+
| `AppRadius.card` | 14px | Secondary cards, list items, blockquotes |
|
|
27
|
+
| `AppRadius.input` | 18px | Buttons, text fields (matches theme) |
|
|
28
|
+
| `AppRadius.panel` | 28px | Major glass surfaces, primary cards (matches theme) |
|
|
29
|
+
| `AppRadius.pill` | 999px | Avatars, full-pill badges, status indicators |
|
|
30
|
+
|
|
31
|
+
### Typography — `main_theme.dart`
|
|
32
|
+
|
|
33
|
+
| Function | Size | Weight | Use |
|
|
34
|
+
|----------|------|--------|-----|
|
|
35
|
+
| `_displayTitleStyle(size)` | 28px default | w700 | Section headers, page titles |
|
|
36
|
+
| `_heroTitleStyle(size)` | 24px default | w800 | Stats, empty-state headlines, splash copy |
|
|
37
|
+
| `_sectionEyebrowStyle()` | 12px | w700 | Category labels above sections |
|
|
38
|
+
| Theme `titleMedium` | 18px | w600 | App bar titles, panel headers |
|
|
39
|
+
| Theme `bodyMedium` | — | — | Body text (always prefer theme over `TextStyle()`) |
|
|
40
|
+
|
|
41
|
+
**Rules:**
|
|
42
|
+
- Minimum font size: **12px**. Never go below this for legibility.
|
|
43
|
+
- Use `Theme.of(context).textTheme.bodyMedium?.copyWith(color: ...)` instead of bare `TextStyle(color: ...)` to guarantee font-family inheritance.
|
|
44
|
+
- Defined weights: **w600** (sub-labels), **w700** (standard bold), **w800** (hero/display). Do not use w400, w500, or w900.
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
## Color System
|
|
49
|
+
|
|
50
|
+
Colors are defined in `src/theme/palette.dart` and accessed via theme-aware getters in `main_theme.dart`.
|
|
51
|
+
|
|
52
|
+
### Background layers (darkest → lightest prominence)
|
|
53
|
+
|
|
54
|
+
```
|
|
55
|
+
_bgPrimary → _bgSecondary → _bgTertiary → _bgCard
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
### Text hierarchy
|
|
59
|
+
|
|
60
|
+
```
|
|
61
|
+
_textPrimary (readable body) → _textSecondary (supporting) → _textMuted (subtle, disabled)
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
### Accents
|
|
65
|
+
|
|
66
|
+
- `_accent` — gold/brown, primary interactive elements
|
|
67
|
+
- `_accentHover` — lighter gold, hover/focus states
|
|
68
|
+
- `_accentAlt` — teal, secondary highlights, assistant avatar glow
|
|
69
|
+
- `_accentMuted` — low-saturation accent for backgrounds
|
|
70
|
+
|
|
71
|
+
### Semantic status colors
|
|
72
|
+
|
|
73
|
+
| Color | Meaning | Never use for |
|
|
74
|
+
|-------|---------|---------------|
|
|
75
|
+
| `_success` | Completed, connected, healthy | General decoration |
|
|
76
|
+
| `_warning` | In-progress, caution | Errors |
|
|
77
|
+
| `_danger` | Error, destructive action, disconnected | Warnings |
|
|
78
|
+
| `_info` | Informational, neutral status | Alerts requiring action |
|
|
79
|
+
|
|
80
|
+
### Hardcoded color rules
|
|
81
|
+
|
|
82
|
+
- **Do not** use `Color(0x...)` or `Colors.X` literals in widget trees. Use palette getters.
|
|
83
|
+
- **Exception 1:** `Color(0xFF4285F4)` — Google Sign-In brand blue, required by Google branding guidelines.
|
|
84
|
+
- **Exception 2:** `_qrPanel*` constants in `main_app_shell.dart` — intentional deep-space atmosphere for the QR login panel, defined as named constants at file scope.
|
|
85
|
+
- `Colors.transparent` and `Colors.white/black` with `.withValues(alpha:)` for glass overlays are acceptable when no semantic color applies.
|
|
86
|
+
|
|
87
|
+
---
|
|
88
|
+
|
|
89
|
+
## Component Patterns
|
|
90
|
+
|
|
91
|
+
### Glass surface
|
|
92
|
+
|
|
93
|
+
Use `_GlassSurface` from `main_shared.dart`. Do not duplicate the backdrop-blur + fill + border pattern inline.
|
|
94
|
+
|
|
95
|
+
Parameters: `child`, `borderRadius` (default `AppRadius.panel`), `padding`.
|
|
96
|
+
|
|
97
|
+
### Inline status messages
|
|
98
|
+
|
|
99
|
+
- Errors → `_InlineError(message: '...')` from `main_shared.dart`
|
|
100
|
+
- Success → `_InlineSuccess(message: '...')` from `main_shared.dart`
|
|
101
|
+
|
|
102
|
+
Do not inline `Container(color: _danger...)` patterns — use these shared widgets so error styling stays consistent.
|
|
103
|
+
|
|
104
|
+
### Empty states
|
|
105
|
+
|
|
106
|
+
Pattern: eyebrow label → icon → headline (`_heroTitleStyle`) → helper text (`_textSecondary`).
|
|
107
|
+
|
|
108
|
+
### Dialogs
|
|
109
|
+
|
|
110
|
+
- Confirm/cancel: **Cancel** (outlined, left) + **primary action** (filled, right)
|
|
111
|
+
- Destructive: **Cancel** (left) + **Delete** (filled with `_danger` background, right)
|
|
112
|
+
- Avoid "OK" — always use a specific verb (Save, Connect, Remove, etc.)
|
|
113
|
+
|
|
114
|
+
### Buttons
|
|
115
|
+
|
|
116
|
+
- **Primary action:** `FilledButton`
|
|
117
|
+
- **Secondary/cancel:** `OutlinedButton`
|
|
118
|
+
- **Tertiary/nav links:** `TextButton`
|
|
119
|
+
- **Icon-only actions:** `IconButton` — always include `tooltip:` with a descriptive label
|
|
120
|
+
|
|
121
|
+
---
|
|
122
|
+
|
|
123
|
+
## Accessibility
|
|
124
|
+
|
|
125
|
+
- Every `IconButton` must have `tooltip: 'Descriptive action'`.
|
|
126
|
+
- Prefer `InkWell` over `GestureDetector` for tappable surfaces — `InkWell` inherits Material semantics. If you must use `GestureDetector`, wrap it with `Semantics(button: true, label: '...')`.
|
|
127
|
+
- Minimum touch target: 44×44px (Material guideline). Use `minimumSize` on `ButtonStyle` or `IconButton.styleFrom` if needed.
|
|
128
|
+
- Do not rely on color alone to convey state — pair color with an icon or label.
|
|
129
|
+
|
|
130
|
+
---
|
|
131
|
+
|
|
132
|
+
## Animation
|
|
133
|
+
|
|
134
|
+
| Animation | Duration | Curve |
|
|
135
|
+
|-----------|----------|-------|
|
|
136
|
+
| Page entrance (slide + fade) | 700ms | `Curves.easeOutCubic` |
|
|
137
|
+
| Button / container hover | 180ms | `Curves.easeOutCubic` |
|
|
138
|
+
| Ambient background orbs | 24 000ms | `Curves.easeInOut` (looping) |
|
|
139
|
+
| Opacity fades | 140–180ms | default |
|
|
140
|
+
|
|
141
|
+
---
|
|
142
|
+
|
|
143
|
+
## Responsive layout
|
|
144
|
+
|
|
145
|
+
| Breakpoint | Value | Layout change |
|
|
146
|
+
|------------|-------|---------------|
|
|
147
|
+
| `AppBreakpoints.mobile` | 480px | Sidebar becomes modal, single-column |
|
|
148
|
+
| `AppBreakpoints.tablet` | 960px | Two-column layouts activate |
|
|
149
|
+
| Desktop implicit | 1280px+ | Full sidebar + main panel |
|
|
150
|
+
|
|
151
|
+
Use `_pagePadding(context)` for horizontal screen padding. Do not hardcode `EdgeInsets.symmetric(horizontal: 20)` — the helper already handles responsive scaling.
|
|
152
|
+
|
|
153
|
+
---
|
|
154
|
+
|
|
155
|
+
## File conventions
|
|
156
|
+
|
|
157
|
+
| What | Where |
|
|
158
|
+
|------|-------|
|
|
159
|
+
| Color palette | `lib/src/theme/palette.dart` |
|
|
160
|
+
| Theme builder + text styles | `lib/main_theme.dart` |
|
|
161
|
+
| Spacing + radius tokens | `lib/main_spacing.dart` |
|
|
162
|
+
| Shared widgets | `lib/main_shared.dart` |
|
|
163
|
+
| Navigation enums + labels | `lib/main_navigation.dart` |
|
|
164
|
+
| App state | `lib/main_controller.dart` |
|
|
165
|
+
|
|
166
|
+
**Do not** define new reusable widgets in feature files (`main_chat.dart`, `main_operations.dart`, etc.) — add them to `main_shared.dart` so they are available across the app.
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# neoagent_flutter
|
|
2
|
+
|
|
3
|
+
A new Flutter project.
|
|
4
|
+
|
|
5
|
+
## Getting Started
|
|
6
|
+
|
|
7
|
+
This project is a starting point for a Flutter application.
|
|
8
|
+
|
|
9
|
+
A few resources to get you started if this is your first Flutter project:
|
|
10
|
+
|
|
11
|
+
- [Lab: Write your first Flutter app](https://docs.flutter.dev/get-started/codelab)
|
|
12
|
+
- [Cookbook: Useful Flutter samples](https://docs.flutter.dev/cookbook)
|
|
13
|
+
|
|
14
|
+
For help getting started with Flutter development, view the
|
|
15
|
+
[online documentation](https://docs.flutter.dev/), which offers tutorials,
|
|
16
|
+
samples, guidance on mobile development, and a full API reference.
|
|
17
|
+
|
|
18
|
+
## Desktop audio capture note
|
|
19
|
+
|
|
20
|
+
Desktop recording currently depends on `desktop_audio_capture` and is pinned to
|
|
21
|
+
`0.0.2` to avoid unexpected API shifts from automatic minor updates.
|
|
@@ -0,0 +1,32 @@
|
|
|
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
|
+
analyzer:
|
|
13
|
+
exclude:
|
|
14
|
+
- third_party/**
|
|
15
|
+
|
|
16
|
+
linter:
|
|
17
|
+
# The lint rules applied to this project can be customized in the
|
|
18
|
+
# section below to disable rules from the `package:flutter_lints/flutter.yaml`
|
|
19
|
+
# included above or to enable additional rules. A list of all available lints
|
|
20
|
+
# and their documentation is published at https://dart.dev/lints.
|
|
21
|
+
#
|
|
22
|
+
# Instead of disabling a lint rule for the entire project in the
|
|
23
|
+
# section below, it can also be suppressed for a single line of code
|
|
24
|
+
# or a specific dart file by using the `// ignore: name_of_lint` and
|
|
25
|
+
# `// ignore_for_file: name_of_lint` syntax on the line or in the file
|
|
26
|
+
# producing the lint.
|
|
27
|
+
rules:
|
|
28
|
+
# avoid_print: false # Uncomment to disable the `avoid_print` rule
|
|
29
|
+
# prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule
|
|
30
|
+
|
|
31
|
+
# Additional information about this file can be found at
|
|
32
|
+
# https://dart.dev/guides/language/analysis-options
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import java.util.Properties
|
|
2
|
+
|
|
3
|
+
plugins {
|
|
4
|
+
id("com.android.application")
|
|
5
|
+
id("kotlin-android")
|
|
6
|
+
// The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins.
|
|
7
|
+
id("dev.flutter.flutter-gradle-plugin")
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
val envReleaseKeystorePath = System.getenv("ANDROID_KEYSTORE_PATH")?.trim().orEmpty()
|
|
11
|
+
val envReleaseKeystorePassword = System.getenv("ANDROID_KEYSTORE_PASSWORD")?.trim().orEmpty()
|
|
12
|
+
val envReleaseKeyAlias = System.getenv("ANDROID_KEY_ALIAS")?.trim().orEmpty()
|
|
13
|
+
val envReleaseKeyPassword = System.getenv("ANDROID_KEY_PASSWORD")?.trim().orEmpty()
|
|
14
|
+
val keyPropertiesFile = rootProject.file("key.properties")
|
|
15
|
+
val keyProperties = Properties()
|
|
16
|
+
if (keyPropertiesFile.exists()) {
|
|
17
|
+
keyPropertiesFile.inputStream().use(keyProperties::load)
|
|
18
|
+
}
|
|
19
|
+
val repoReleaseKeystorePath = keyProperties.getProperty("storeFile", "").trim()
|
|
20
|
+
val repoReleaseKeystorePassword = keyProperties.getProperty("storePassword", "").trim()
|
|
21
|
+
val repoReleaseKeyAlias = keyProperties.getProperty("keyAlias", "").trim()
|
|
22
|
+
val repoReleaseKeyPassword = keyProperties.getProperty("keyPassword", "").trim()
|
|
23
|
+
val hasEnvReleaseSigning =
|
|
24
|
+
envReleaseKeystorePath.isNotEmpty() &&
|
|
25
|
+
envReleaseKeystorePassword.isNotEmpty() &&
|
|
26
|
+
envReleaseKeyAlias.isNotEmpty() &&
|
|
27
|
+
envReleaseKeyPassword.isNotEmpty()
|
|
28
|
+
val hasRepoReleaseSigning =
|
|
29
|
+
repoReleaseKeystorePath.isNotEmpty() &&
|
|
30
|
+
repoReleaseKeystorePassword.isNotEmpty() &&
|
|
31
|
+
repoReleaseKeyAlias.isNotEmpty() &&
|
|
32
|
+
repoReleaseKeyPassword.isNotEmpty()
|
|
33
|
+
val launcherBuild =
|
|
34
|
+
System.getenv("NEOAGENT_ANDROID_LAUNCHER_MODE")
|
|
35
|
+
?.trim()
|
|
36
|
+
?.lowercase() in setOf("1", "true", "yes", "on")
|
|
37
|
+
val applicationIdValue =
|
|
38
|
+
if (launcherBuild) "com.neoagent.flutter_app.launcher" else "com.neoagent.flutter_app"
|
|
39
|
+
val applicationLabelValue = if (launcherBuild) "NeoAgent Launcher" else "NeoAgent"
|
|
40
|
+
val androidAppModeValue = if (launcherBuild) "launcher" else "standard"
|
|
41
|
+
val launcherHomeEnabledValue = launcherBuild.toString()
|
|
42
|
+
|
|
43
|
+
android {
|
|
44
|
+
namespace = "com.neoagent.flutter_app"
|
|
45
|
+
compileSdk = flutter.compileSdkVersion
|
|
46
|
+
ndkVersion = flutter.ndkVersion
|
|
47
|
+
|
|
48
|
+
compileOptions {
|
|
49
|
+
sourceCompatibility = JavaVersion.VERSION_11
|
|
50
|
+
targetCompatibility = JavaVersion.VERSION_11
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
kotlinOptions {
|
|
54
|
+
jvmTarget = JavaVersion.VERSION_11.toString()
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
defaultConfig {
|
|
58
|
+
applicationId = applicationIdValue
|
|
59
|
+
minSdk = 26
|
|
60
|
+
targetSdk = flutter.targetSdkVersion
|
|
61
|
+
versionCode = flutter.versionCode
|
|
62
|
+
versionName = flutter.versionName
|
|
63
|
+
manifestPlaceholders["neoagentAppLabel"] = applicationLabelValue
|
|
64
|
+
manifestPlaceholders["neoagentAppMode"] = androidAppModeValue
|
|
65
|
+
manifestPlaceholders["neoagentLauncherHomeEnabled"] =
|
|
66
|
+
launcherHomeEnabledValue
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
signingConfigs {
|
|
70
|
+
if (hasEnvReleaseSigning) {
|
|
71
|
+
create("release") {
|
|
72
|
+
storeFile = file(envReleaseKeystorePath)
|
|
73
|
+
storePassword = envReleaseKeystorePassword
|
|
74
|
+
keyAlias = envReleaseKeyAlias
|
|
75
|
+
keyPassword = envReleaseKeyPassword
|
|
76
|
+
}
|
|
77
|
+
} else if (hasRepoReleaseSigning) {
|
|
78
|
+
create("release") {
|
|
79
|
+
storeFile = rootProject.file(repoReleaseKeystorePath)
|
|
80
|
+
storePassword = repoReleaseKeystorePassword
|
|
81
|
+
keyAlias = repoReleaseKeyAlias
|
|
82
|
+
keyPassword = repoReleaseKeyPassword
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
buildTypes {
|
|
88
|
+
release {
|
|
89
|
+
signingConfig =
|
|
90
|
+
if (hasEnvReleaseSigning || hasRepoReleaseSigning) {
|
|
91
|
+
signingConfigs.getByName("release")
|
|
92
|
+
} else {
|
|
93
|
+
signingConfigs.getByName("debug")
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
dependencies {
|
|
100
|
+
implementation("androidx.activity:activity-ktx:1.10.1")
|
|
101
|
+
implementation("androidx.car.app:app:1.7.0")
|
|
102
|
+
implementation("androidx.car.app:app-projected:1.7.0")
|
|
103
|
+
implementation("androidx.health.connect:connect-client:1.1.0")
|
|
104
|
+
implementation("androidx.security:security-crypto:1.1.0")
|
|
105
|
+
implementation("androidx.work:work-runtime-ktx:2.10.1")
|
|
106
|
+
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.9.0")
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
flutter {
|
|
110
|
+
source = "../.."
|
|
111
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
|
|
2
|
+
<!-- The INTERNET permission is required for development. Specifically,
|
|
3
|
+
the Flutter tool needs it to communicate with the running application
|
|
4
|
+
to allow setting breakpoints, to provide hot reload, etc.
|
|
5
|
+
-->
|
|
6
|
+
<uses-permission android:name="android.permission.INTERNET"/>
|
|
7
|
+
</manifest>
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
|
2
|
+
xmlns:tools="http://schemas.android.com/tools">
|
|
3
|
+
<uses-permission android:name="android.permission.INTERNET" />
|
|
4
|
+
<uses-permission android:name="android.permission.MANAGE_OWN_CALLS" />
|
|
5
|
+
<uses-permission android:name="android.permission.CAMERA" />
|
|
6
|
+
<uses-permission android:name="android.permission.RECORD_AUDIO" />
|
|
7
|
+
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
|
|
8
|
+
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
|
|
9
|
+
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_DATA_SYNC" />
|
|
10
|
+
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_MICROPHONE" />
|
|
11
|
+
<uses-permission android:name="android.permission.health.READ_STEPS" />
|
|
12
|
+
<uses-permission android:name="android.permission.health.READ_HEART_RATE" />
|
|
13
|
+
<uses-permission android:name="android.permission.health.READ_SLEEP" />
|
|
14
|
+
<uses-permission android:name="android.permission.health.READ_EXERCISE" />
|
|
15
|
+
<uses-permission android:name="android.permission.health.READ_WEIGHT" />
|
|
16
|
+
<uses-permission android:name="android.permission.health.READ_HEALTH_DATA_IN_BACKGROUND" />
|
|
17
|
+
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
|
|
18
|
+
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
|
|
19
|
+
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
|
|
20
|
+
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
|
|
21
|
+
|
|
22
|
+
<queries>
|
|
23
|
+
<package android:name="com.google.android.apps.healthdata" />
|
|
24
|
+
<intent>
|
|
25
|
+
<action android:name="android.intent.action.PROCESS_TEXT"/>
|
|
26
|
+
<data android:mimeType="text/plain"/>
|
|
27
|
+
</intent>
|
|
28
|
+
</queries>
|
|
29
|
+
|
|
30
|
+
<application
|
|
31
|
+
android:label="${neoagentAppLabel}"
|
|
32
|
+
android:name="${applicationName}"
|
|
33
|
+
android:icon="@mipmap/ic_launcher"
|
|
34
|
+
android:usesCleartextTraffic="true">
|
|
35
|
+
<meta-data
|
|
36
|
+
android:name="com.google.android.gms.car.application"
|
|
37
|
+
android:resource="@xml/automotive_app_desc" />
|
|
38
|
+
<activity
|
|
39
|
+
android:name=".MainActivity"
|
|
40
|
+
android:exported="true"
|
|
41
|
+
android:launchMode="singleTop"
|
|
42
|
+
android:taskAffinity=""
|
|
43
|
+
android:theme="@style/LaunchTheme"
|
|
44
|
+
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
|
|
45
|
+
android:hardwareAccelerated="true"
|
|
46
|
+
android:windowSoftInputMode="adjustResize">
|
|
47
|
+
<!-- Specifies an Android theme to apply to this Activity as soon as
|
|
48
|
+
the Android process has started. This theme is visible to the user
|
|
49
|
+
while the Flutter UI initializes. After that, this theme continues
|
|
50
|
+
to determine the Window background behind the Flutter UI. -->
|
|
51
|
+
<meta-data
|
|
52
|
+
android:name="io.flutter.embedding.android.NormalTheme"
|
|
53
|
+
android:resource="@style/NormalTheme"
|
|
54
|
+
/>
|
|
55
|
+
<intent-filter>
|
|
56
|
+
<action android:name="android.intent.action.MAIN"/>
|
|
57
|
+
<category android:name="android.intent.category.LAUNCHER"/>
|
|
58
|
+
</intent-filter>
|
|
59
|
+
<intent-filter>
|
|
60
|
+
<action android:name="android.intent.action.SEND" />
|
|
61
|
+
<category android:name="android.intent.category.DEFAULT" />
|
|
62
|
+
<data android:mimeType="text/*" />
|
|
63
|
+
<data android:mimeType="video/*" />
|
|
64
|
+
<data android:mimeType="image/*" />
|
|
65
|
+
<data android:mimeType="audio/*" />
|
|
66
|
+
<data android:mimeType="application/*" />
|
|
67
|
+
</intent-filter>
|
|
68
|
+
<intent-filter>
|
|
69
|
+
<action android:name="android.intent.action.SEND_MULTIPLE" />
|
|
70
|
+
<category android:name="android.intent.category.DEFAULT" />
|
|
71
|
+
<data android:mimeType="*/*" />
|
|
72
|
+
</intent-filter>
|
|
73
|
+
</activity>
|
|
74
|
+
<provider
|
|
75
|
+
android:name="androidx.core.content.FileProvider"
|
|
76
|
+
android:authorities="${applicationId}.fileprovider"
|
|
77
|
+
android:exported="false"
|
|
78
|
+
android:grantUriPermissions="true">
|
|
79
|
+
<meta-data
|
|
80
|
+
android:name="android.support.FILE_PROVIDER_PATHS"
|
|
81
|
+
android:resource="@xml/file_paths" />
|
|
82
|
+
</provider>
|
|
83
|
+
<activity-alias
|
|
84
|
+
android:name=".LauncherHomeAlias"
|
|
85
|
+
android:enabled="${neoagentLauncherHomeEnabled}"
|
|
86
|
+
android:exported="true"
|
|
87
|
+
android:label="${neoagentAppLabel}"
|
|
88
|
+
android:targetActivity=".MainActivity">
|
|
89
|
+
<intent-filter>
|
|
90
|
+
<action android:name="android.intent.action.MAIN" />
|
|
91
|
+
<category android:name="android.intent.category.HOME" />
|
|
92
|
+
<category android:name="android.intent.category.DEFAULT" />
|
|
93
|
+
</intent-filter>
|
|
94
|
+
</activity-alias>
|
|
95
|
+
<activity
|
|
96
|
+
android:name=".health.PermissionsRationaleActivity"
|
|
97
|
+
android:exported="false" />
|
|
98
|
+
<activity
|
|
99
|
+
android:name=".widgets.WidgetConfigActivity"
|
|
100
|
+
android:exported="true"
|
|
101
|
+
android:theme="@style/LaunchTheme" />
|
|
102
|
+
<activity-alias
|
|
103
|
+
android:name=".ViewPermissionUsageActivity"
|
|
104
|
+
android:exported="true"
|
|
105
|
+
android:permission="android.permission.START_VIEW_PERMISSION_USAGE"
|
|
106
|
+
android:targetActivity=".health.PermissionsRationaleActivity">
|
|
107
|
+
<intent-filter>
|
|
108
|
+
<action android:name="android.intent.action.VIEW_PERMISSION_USAGE" />
|
|
109
|
+
<category android:name="android.intent.category.HEALTH_PERMISSIONS" />
|
|
110
|
+
</intent-filter>
|
|
111
|
+
</activity-alias>
|
|
112
|
+
<service
|
|
113
|
+
android:name="androidx.work.impl.foreground.SystemForegroundService"
|
|
114
|
+
android:foregroundServiceType="dataSync"
|
|
115
|
+
tools:node="merge" />
|
|
116
|
+
<service
|
|
117
|
+
android:name=".telecom.NeoAgentConnectionService"
|
|
118
|
+
android:exported="true"
|
|
119
|
+
android:permission="android.permission.BIND_TELECOM_CONNECTION_SERVICE">
|
|
120
|
+
<intent-filter>
|
|
121
|
+
<action android:name="android.telecom.ConnectionService" />
|
|
122
|
+
</intent-filter>
|
|
123
|
+
</service>
|
|
124
|
+
|
|
125
|
+
<service
|
|
126
|
+
android:name=".auto.NeoAgentCarAppService"
|
|
127
|
+
android:exported="true">
|
|
128
|
+
<intent-filter>
|
|
129
|
+
<action android:name="androidx.car.app.CarAppService" />
|
|
130
|
+
<category android:name="androidx.car.app.category.IOT" />
|
|
131
|
+
</intent-filter>
|
|
132
|
+
<meta-data
|
|
133
|
+
android:name="androidx.car.app.minCarApiLevel"
|
|
134
|
+
android:value="1" />
|
|
135
|
+
</service>
|
|
136
|
+
<service
|
|
137
|
+
android:name=".recording.RecordingForegroundService"
|
|
138
|
+
android:exported="false"
|
|
139
|
+
android:foregroundServiceType="microphone|connectedDevice" />
|
|
140
|
+
<receiver
|
|
141
|
+
android:name=".recording.RecordingBootReceiver"
|
|
142
|
+
android:enabled="true"
|
|
143
|
+
android:exported="false">
|
|
144
|
+
<intent-filter>
|
|
145
|
+
<action android:name="android.intent.action.BOOT_COMPLETED" />
|
|
146
|
+
</intent-filter>
|
|
147
|
+
</receiver>
|
|
148
|
+
<receiver
|
|
149
|
+
android:name=".widgets.AiHomeWidgetProvider"
|
|
150
|
+
android:exported="true">
|
|
151
|
+
<intent-filter>
|
|
152
|
+
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
|
|
153
|
+
</intent-filter>
|
|
154
|
+
<meta-data
|
|
155
|
+
android:name="android.appwidget.provider"
|
|
156
|
+
android:resource="@xml/neoagent_ai_widget_info" />
|
|
157
|
+
</receiver>
|
|
158
|
+
<receiver
|
|
159
|
+
android:name=".widgets.VoiceLaunchWidgetProvider"
|
|
160
|
+
android:exported="true">
|
|
161
|
+
<intent-filter>
|
|
162
|
+
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
|
|
163
|
+
</intent-filter>
|
|
164
|
+
<meta-data
|
|
165
|
+
android:name="android.appwidget.provider"
|
|
166
|
+
android:resource="@xml/neoagent_voice_widget_info" />
|
|
167
|
+
</receiver>
|
|
168
|
+
<meta-data
|
|
169
|
+
android:name="com.neoagent.APP_MODE"
|
|
170
|
+
android:value="${neoagentAppMode}" />
|
|
171
|
+
<meta-data
|
|
172
|
+
android:name="flutterEmbedding"
|
|
173
|
+
android:value="2" />
|
|
174
|
+
|
|
175
|
+
<!-- Notification Listener Service for Interception -->
|
|
176
|
+
<service android:name="notification.listener.service.NotificationListener"
|
|
177
|
+
android:label="NeoAgent Notifications"
|
|
178
|
+
android:permission="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE"
|
|
179
|
+
android:exported="true">
|
|
180
|
+
<intent-filter>
|
|
181
|
+
<action android:name="android.service.notification.NotificationListenerService" />
|
|
182
|
+
</intent-filter>
|
|
183
|
+
</service>
|
|
184
|
+
</application>
|
|
185
|
+
</manifest>
|