neoagent 2.3.1-beta.4 → 2.3.1-beta.41
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 +45 -0
- package/docs/capabilities.md +2 -2
- package/docs/configuration.md +12 -5
- package/docs/hardware.md +1 -1
- package/docs/integrations.md +2 -3
- package/flutter_app/.metadata +42 -0
- package/flutter_app/README.md +21 -0
- package/flutter_app/analysis_options.yaml +32 -0
- package/flutter_app/android/app/build.gradle.kts +109 -0
- package/flutter_app/android/app/src/debug/AndroidManifest.xml +7 -0
- package/flutter_app/android/app/src/main/AndroidManifest.xml +147 -0
- package/flutter_app/android/app/src/main/kotlin/com/neoagent/flutter_app/MainActivity.kt +747 -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/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/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/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/tray_icon_template.png +0 -0
- package/flutter_app/lib/features/location/location_service.dart +119 -0
- package/flutter_app/lib/features/notifications/notification_interceptor.dart +97 -0
- package/flutter_app/lib/main.dart +99 -0
- package/flutter_app/lib/main_account_settings.dart +1250 -0
- package/flutter_app/lib/main_admin.dart +886 -0
- package/flutter_app/lib/main_app_shell.dart +1682 -0
- package/flutter_app/lib/main_chat.dart +3352 -0
- package/flutter_app/lib/main_controller.dart +6781 -0
- package/flutter_app/lib/main_devices.dart +2301 -0
- package/flutter_app/lib/main_integrations.dart +1129 -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 +3546 -0
- package/flutter_app/lib/main_navigation.dart +193 -0
- package/flutter_app/lib/main_operations.dart +4851 -0
- package/flutter_app/lib/main_recordings.dart +870 -0
- package/flutter_app/lib/main_runtime.dart +806 -0
- package/flutter_app/lib/main_settings.dart +2024 -0
- package/flutter_app/lib/main_shared.dart +2861 -0
- package/flutter_app/lib/main_theme.dart +204 -0
- package/flutter_app/lib/main_voice_assistant.dart +957 -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_launcher_bridge.dart +239 -0
- package/flutter_app/lib/src/app_launch_bridge.dart +29 -0
- package/flutter_app/lib/src/app_release_updater.dart +511 -0
- package/flutter_app/lib/src/backend_client.dart +1833 -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 +77 -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/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 +43 -0
- package/flutter_app/linux/flutter/generated_plugin_registrant.h +15 -0
- package/flutter_app/linux/flutter/generated_plugins.cmake +31 -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 +40 -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 +1088 -0
- package/flutter_app/pubspec.yaml +53 -0
- package/flutter_app/test/messaging_access_summary_test.dart +22 -0
- package/flutter_app/test/recording_payloads_test.dart +53 -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 +47 -0
- package/flutter_app/windows/flutter/generated_plugin_registrant.h +15 -0
- package/flutter_app/windows/flutter/generated_plugins.cmake +35 -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 +227 -6
- package/package.json +3 -1
- package/server/db/database.js +110 -0
- package/server/http/middleware.js +55 -2
- package/server/http/routes.js +1 -0
- package/server/index.js +3 -0
- package/server/public/.last_build_id +1 -1
- package/server/public/assets/NOTICES +1 -1
- package/server/public/assets/fonts/MaterialIcons-Regular.otf +0 -0
- package/server/public/canvaskit/wimp.wasm +0 -0
- package/server/public/flutter_bootstrap.js +2 -2
- package/server/public/main.dart.js +74324 -73132
- package/server/routes/integrations.js +108 -1
- package/server/routes/memory.js +11 -2
- package/server/{http/routes → routes}/screenHistory.js +2 -2
- package/server/routes/settings.js +75 -2
- package/server/{http/routes → routes}/triggers.js +2 -2
- package/server/routes/wearable.js +67 -0
- package/server/services/ai/models.js +30 -0
- package/server/services/ai/providers/githubCopilot.js +97 -0
- package/server/services/ai/providers/openai.js +2 -1
- package/server/services/ai/providers/openaiCodex.js +31 -0
- package/server/services/ai/settings.js +20 -0
- package/server/services/ai/toolSelector.js +14 -1
- package/server/services/ai/tools.js +77 -4
- package/server/services/desktop/screenRecorder.js +65 -9
- package/server/services/integrations/env.js +5 -0
- package/server/services/integrations/figma/provider.js +1 -0
- package/server/services/integrations/github/common.js +106 -0
- package/server/services/integrations/github/provider.js +499 -0
- package/server/services/integrations/github/repos.js +1124 -0
- package/server/services/integrations/google/provider.js +1 -0
- package/server/services/integrations/home_assistant/provider.js +325 -26
- package/server/services/integrations/manager.js +88 -12
- package/server/services/integrations/microsoft/provider.js +1 -0
- package/server/services/integrations/oauth_provider.js +25 -8
- package/server/services/integrations/provider_config_store.js +85 -0
- package/server/services/integrations/registry.js +4 -0
- package/server/services/integrations/spotify/provider.js +1 -0
- package/server/services/integrations/trello/provider.js +842 -0
- package/server/services/manager.js +46 -1
- package/server/services/mcp/client.js +120 -23
- package/server/services/memory/manager.js +39 -2
- package/server/services/messaging/access_policy.js +10 -0
- package/server/services/messaging/manager.js +49 -0
- package/server/services/messaging/meshtastic.js +260 -0
- package/server/services/messaging/meshtastic_env.js +100 -0
- package/server/services/messaging/meshtastic_protocol.js +476 -0
- package/server/services/messaging/meshtastic_tcp_transport.js +25 -0
- package/server/services/tasks/runtime.js +1 -1
- package/server/services/voice/openaiClient.js +4 -1
- package/server/services/voice/openaiSpeech.js +6 -1
- package/server/services/voice/providers.js +52 -12
- package/server/services/voice/runtimeManager.js +136 -19
- package/server/services/voice/turnRunner.js +29 -9
- package/server/services/wearable/firmware_manifest.js +370 -0
- package/server/services/wearable/gateway.js +350 -0
- package/server/services/wearable/protocol.js +45 -0
- package/server/services/wearable/service.js +244 -0
- package/server/utils/local_secrets.js +56 -0
- package/server/utils/logger.js +37 -9
package/.env.example
CHANGED
|
@@ -6,6 +6,10 @@ PORT=3333
|
|
|
6
6
|
NODE_ENV=production
|
|
7
7
|
SESSION_SECRET=change-this-to-a-random-secret-in-production
|
|
8
8
|
|
|
9
|
+
# Optional: dedicated key for encrypting local at-rest secrets (for example API_KEYS.json).
|
|
10
|
+
# If unset, encryption falls back to SESSION_SECRET.
|
|
11
|
+
# NEOAGENT_DATA_ENCRYPTION_KEY=
|
|
12
|
+
|
|
9
13
|
# Public base URL used for OAuth callbacks and external links.
|
|
10
14
|
# Example: https://agent.example.com
|
|
11
15
|
PUBLIC_URL=
|
|
@@ -94,6 +98,18 @@ GOOGLE_AI_KEY=your-google-ai-key-here
|
|
|
94
98
|
# • MiniMax-M2.7 via the Anthropic-compatible MiniMax endpoint
|
|
95
99
|
MINIMAX_API_KEY=your-minimax-api-key-here
|
|
96
100
|
|
|
101
|
+
# GitHub Copilot OAuth token — used for:
|
|
102
|
+
# • Copilot-backed chat/coding models (gpt-5.3, gpt-4.1)
|
|
103
|
+
# Set via: neoagent login github-copilot
|
|
104
|
+
GITHUB_COPILOT_ACCESS_TOKEN=
|
|
105
|
+
|
|
106
|
+
# OpenAI Codex OAuth token — used for:
|
|
107
|
+
# • Codex-backed chat/coding models (gpt-5.3-codex, gpt-4.1-codex)
|
|
108
|
+
# Set via: neoagent login openai-codex
|
|
109
|
+
OPENAI_CODEX_ACCESS_TOKEN=
|
|
110
|
+
# Optional refresh token if your login flow returns it.
|
|
111
|
+
OPENAI_CODEX_REFRESH_TOKEN=
|
|
112
|
+
|
|
97
113
|
########################################
|
|
98
114
|
# Provider endpoint overrides
|
|
99
115
|
########################################
|
|
@@ -101,6 +117,10 @@ MINIMAX_API_KEY=your-minimax-api-key-here
|
|
|
101
117
|
# OPENAI_BASE_URL=https://your-openai-compatible-endpoint/v1
|
|
102
118
|
# ANTHROPIC_BASE_URL=https://your-anthropic-compatible-endpoint
|
|
103
119
|
# XAI_BASE_URL=https://api.x.ai/v1
|
|
120
|
+
# OPENAI_CODEX_BASE_URL=https://chatgpt.com/backend-api/codex
|
|
121
|
+
# OPENAI_CODEX_EDITOR_VERSION=vscode/1.99.0
|
|
122
|
+
# OPENAI_CODEX_EDITOR_PLUGIN_VERSION=neoagent/1.0.0
|
|
123
|
+
# OPENAI_CODEX_USER_AGENT=NeoAgent/1.0.0
|
|
104
124
|
|
|
105
125
|
########################################
|
|
106
126
|
# Official integrations
|
|
@@ -139,6 +159,26 @@ FIGMA_OAUTH_CLIENT_ID=your-figma-oauth-client-id
|
|
|
139
159
|
FIGMA_OAUTH_CLIENT_SECRET=your-figma-oauth-client-secret
|
|
140
160
|
FIGMA_OAUTH_REDIRECT_URI=
|
|
141
161
|
|
|
162
|
+
# GitHub official integration OAuth client.
|
|
163
|
+
# Redirect URI should match <PUBLIC_URL>/api/integrations/oauth/callback.
|
|
164
|
+
# Prefer least-privilege OAuth scopes for your use case.
|
|
165
|
+
# Read-oriented examples: public_repo (public repositories), repo:status (commit status), read:org (org membership).
|
|
166
|
+
# Avoid broad blanket scopes unless explicitly required by a specific write workflow.
|
|
167
|
+
GITHUB_OAUTH_CLIENT_ID=your-github-oauth-client-id
|
|
168
|
+
GITHUB_OAUTH_CLIENT_SECRET=your-github-oauth-client-secret
|
|
169
|
+
GITHUB_OAUTH_REDIRECT_URI=
|
|
170
|
+
|
|
171
|
+
# Spotify official integration OAuth client.
|
|
172
|
+
# Redirect URI should match <PUBLIC_URL>/api/integrations/oauth/callback.
|
|
173
|
+
SPOTIFY_OAUTH_CLIENT_ID=your-spotify-oauth-client-id
|
|
174
|
+
SPOTIFY_OAUTH_CLIENT_SECRET=your-spotify-oauth-client-secret
|
|
175
|
+
SPOTIFY_OAUTH_REDIRECT_URI=
|
|
176
|
+
|
|
177
|
+
# Trello official integration API key.
|
|
178
|
+
# This is used for Trello account connections in Official Integrations.
|
|
179
|
+
# Users still connect their own Trello account token per agent in the UI.
|
|
180
|
+
TRELLO_API_KEY=your-trello-api-key
|
|
181
|
+
|
|
142
182
|
########################################
|
|
143
183
|
# Tools and media services
|
|
144
184
|
########################################
|
|
@@ -163,8 +203,13 @@ DEEPGRAM_LANGUAGE=multi
|
|
|
163
203
|
|
|
164
204
|
OLLAMA_URL=http://localhost:11434
|
|
165
205
|
|
|
206
|
+
# Local screen OCR capture (macOS desktop context recorder).
|
|
207
|
+
# Set to false to disable background screen capture/OCR polling.
|
|
208
|
+
NEOAGENT_SCREEN_RECORDER_ENABLED=true
|
|
209
|
+
|
|
166
210
|
########################################
|
|
167
211
|
# Messaging and voice integrations
|
|
168
212
|
########################################
|
|
169
213
|
|
|
214
|
+
MESHTASTIC_ENABLED=true
|
|
170
215
|
TELNYX_WEBHOOK_TOKEN=
|
package/docs/capabilities.md
CHANGED
|
@@ -75,10 +75,10 @@ The agent tool `read_health_data` returns summaries and recent samples. It is de
|
|
|
75
75
|
|
|
76
76
|
NeoAgent has two separate integration layers:
|
|
77
77
|
|
|
78
|
-
- Official integrations expose structured tools for Google Workspace, Microsoft 365, Notion, Slack, Figma, Home Assistant, Weather, Spotify, and a separate personal WhatsApp connection.
|
|
78
|
+
- Official integrations expose structured tools for Google Workspace, Microsoft 365, Notion, Slack, Figma, Home Assistant, Trello, Weather, Spotify, and a separate personal WhatsApp connection.
|
|
79
79
|
- Messaging platforms let the agent talk through WhatsApp, Telegram, Discord, Slack, Google Chat, Teams, Matrix, Signal, iMessage/BlueBubbles, IRC, Twitch, LINE, Mattermost, configurable webhook bridges, and Telnyx Voice.
|
|
80
80
|
|
|
81
|
-
Official integration examples include Gmail thread search and send mail, Google Calendar events, Drive upload/download/export/share links, Docs create/append/replace, Sheets read/update/append/create, Microsoft Outlook/Calendar/OneDrive/Teams tools, Notion search/page/block/database tools, Slack conversation/message tools, Figma file/node/comment/image tools, Home Assistant entity/config reads and service calls, Weather current/forecast tools plus weather-event task triggers, Spotify playback/search/control tools, and a personal WhatsApp integration with isolated chat read/send tools and per-account read-only versus read/write access.
|
|
81
|
+
Official integration examples include Gmail thread search and send mail, Google Calendar events, Drive upload/download/export/share links, Docs create/append/replace, Sheets read/update/append/create, Microsoft Outlook/Calendar/OneDrive/Teams tools, Notion search/page/block/database tools, Slack conversation/message tools, Figma file/node/comment/image tools, Home Assistant entity/config reads and service calls, Trello board/list/card/comment/search tools, Weather current/forecast tools plus weather-event task triggers, Spotify playback/search/control tools, and a personal WhatsApp integration with isolated chat read/send tools and per-account read-only versus read/write access.
|
|
82
82
|
|
|
83
83
|
Messaging examples include Telegram and Discord messages, Slack channel replies, Matrix room messages, Google Chat and Teams webhook delivery, Signal bridge delivery, iMessage/BlueBubbles sends, WhatsApp text and media sends, Telnyx inbound voice, Telnyx outbound calls, and scheduled-task call delivery.
|
|
84
84
|
|
package/docs/configuration.md
CHANGED
|
@@ -68,7 +68,7 @@ Recording insight generation is controlled in app AI settings with `auto_recordi
|
|
|
68
68
|
|
|
69
69
|
## Official Integrations
|
|
70
70
|
|
|
71
|
-
Official integrations use OAuth or provider-native account linking and expose structured tools to the agent. The built-in registry currently covers Google Workspace, Notion, Microsoft 365, Slack, Figma, Home Assistant, Weather, Spotify, and personal WhatsApp.
|
|
71
|
+
Official integrations use OAuth or provider-native account linking and expose structured tools to the agent. The built-in registry currently covers Google Workspace, Notion, Microsoft 365, Slack, Figma, Home Assistant, Trello, Weather, Spotify, and personal WhatsApp.
|
|
72
72
|
|
|
73
73
|
All OAuth callbacks default to `PUBLIC_URL + /api/integrations/oauth/callback` unless you set a provider-specific redirect URI.
|
|
74
74
|
|
|
@@ -90,14 +90,21 @@ All OAuth callbacks default to `PUBLIC_URL + /api/integrations/oauth/callback` u
|
|
|
90
90
|
| `FIGMA_OAUTH_CLIENT_ID` | Figma OAuth client ID |
|
|
91
91
|
| `FIGMA_OAUTH_CLIENT_SECRET` | Figma OAuth client secret |
|
|
92
92
|
| `FIGMA_OAUTH_REDIRECT_URI` | Optional Figma OAuth callback URL |
|
|
93
|
-
| `HOME_ASSISTANT_BASE_URL` | Home Assistant base URL
|
|
94
|
-
| `HOME_ASSISTANT_OAUTH_CLIENT_ID` | Home Assistant OAuth client ID |
|
|
95
|
-
| `HOME_ASSISTANT_OAUTH_CLIENT_SECRET` | Home Assistant OAuth client secret |
|
|
96
|
-
| `HOME_ASSISTANT_OAUTH_REDIRECT_URI` | Optional Home Assistant OAuth callback URL |
|
|
93
|
+
| `HOME_ASSISTANT_BASE_URL` | Optional fallback Home Assistant base URL. Users can configure this per account in Official Integrations. |
|
|
94
|
+
| `HOME_ASSISTANT_OAUTH_CLIENT_ID` | Optional fallback Home Assistant OAuth client ID. |
|
|
95
|
+
| `HOME_ASSISTANT_OAUTH_CLIENT_SECRET` | Optional fallback Home Assistant OAuth client secret. |
|
|
96
|
+
| `HOME_ASSISTANT_OAUTH_REDIRECT_URI` | Optional fallback Home Assistant OAuth callback URL. |
|
|
97
|
+
| `HOME_ASSISTANT_ALLOW_PRIVATE_BASE_URL` | Optional safety override. Set to `1` only if you intentionally allow Home Assistant base URLs on localhost/private networks. |
|
|
98
|
+
| `TRELLO_API_KEY` | Optional Trello Power-Up API key. If set, users only need to provide their personal token in Official Integrations. |
|
|
97
99
|
| `SPOTIFY_OAUTH_CLIENT_ID` | Spotify OAuth client ID |
|
|
98
100
|
| `SPOTIFY_OAUTH_CLIENT_SECRET` | Spotify OAuth client secret |
|
|
99
101
|
| `SPOTIFY_OAUTH_REDIRECT_URI` | Optional Spotify OAuth callback URL |
|
|
100
102
|
|
|
103
|
+
Home Assistant and Trello no longer require server-side setup. Each user can open Official Integrations and enter their own provider-specific credentials in the Flutter UI.
|
|
104
|
+
For safety, local/private Home Assistant targets are blocked by default unless `HOME_ASSISTANT_ALLOW_PRIVATE_BASE_URL=1` is set on the server.
|
|
105
|
+
|
|
106
|
+
Trello integration is flexible: users can provide both API key and token in the UI, or if `TRELLO_API_KEY` is set as a server environment variable, users only need to authenticate with their personal token. Tokens are stored securely per user and are never added to server environment variables.
|
|
107
|
+
|
|
101
108
|
Weather integration uses Open-Meteo public endpoints and does not require OAuth environment variables.
|
|
102
109
|
|
|
103
110
|
## Messaging
|
package/docs/hardware.md
CHANGED
|
@@ -5,4 +5,4 @@ sidebar_label: Hardware
|
|
|
5
5
|
|
|
6
6
|
# Hardware
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
NeoAgent includes a dedicated ESP-IDF wearable firmware target under `firmware/neoagent_wearable_esp32s3_amoled` for the Waveshare ESP32-S3 Touch AMOLED 1.8 board.
|
package/docs/integrations.md
CHANGED
|
@@ -14,12 +14,11 @@ The built-in registry includes:
|
|
|
14
14
|
| Slack | Conversations, history, posting, search, user info, and Slack Web API requests |
|
|
15
15
|
| Figma | Current user, files, nodes, rendered images, comments, and Figma REST requests |
|
|
16
16
|
| Home Assistant | Entity/config reads, service calls, and Home Assistant REST API requests |
|
|
17
|
+
| Trello | Boards, lists, cards, comments, search, and Trello REST API requests |
|
|
17
18
|
| Weather | Keyless Open-Meteo current weather and forecast tools |
|
|
18
19
|
| Spotify | Playback state, recently played, search, and playback controls |
|
|
19
20
|
|
|
20
|
-
OAuth app credentials are configured through server environment variables. Account connections are created in the Flutter UI under **Integrations**. Connected tools are exposed to the agent as structured tools, so prefer them over browser automation when they can do the job.
|
|
21
|
-
|
|
22
|
-
Weather note: the Weather integration uses Open-Meteo public APIs and does not require OAuth client credentials.
|
|
21
|
+
OAuth app credentials are configured through server environment variables for most providers. Home Assistant and Trello can also be configured per-user in the Flutter **Integrations** UI without any server-side setup. Account connections are created in the Flutter UI under **Integrations**. Connected tools are exposed to the agent as structured tools, so prefer them over browser automation when they can do the job.
|
|
23
22
|
|
|
24
23
|
### Per-Account Access Mode
|
|
25
24
|
|
|
@@ -0,0 +1,42 @@
|
|
|
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: "ac4e799d237041cf905519190471f657b657155a"
|
|
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: ac4e799d237041cf905519190471f657b657155a
|
|
17
|
+
base_revision: ac4e799d237041cf905519190471f657b657155a
|
|
18
|
+
- platform: android
|
|
19
|
+
create_revision: ac4e799d237041cf905519190471f657b657155a
|
|
20
|
+
base_revision: ac4e799d237041cf905519190471f657b657155a
|
|
21
|
+
- platform: linux
|
|
22
|
+
create_revision: ac4e799d237041cf905519190471f657b657155a
|
|
23
|
+
base_revision: ac4e799d237041cf905519190471f657b657155a
|
|
24
|
+
- platform: macos
|
|
25
|
+
create_revision: ac4e799d237041cf905519190471f657b657155a
|
|
26
|
+
base_revision: ac4e799d237041cf905519190471f657b657155a
|
|
27
|
+
- platform: web
|
|
28
|
+
create_revision: ac4e799d237041cf905519190471f657b657155a
|
|
29
|
+
base_revision: ac4e799d237041cf905519190471f657b657155a
|
|
30
|
+
- platform: windows
|
|
31
|
+
create_revision: ac4e799d237041cf905519190471f657b657155a
|
|
32
|
+
base_revision: ac4e799d237041cf905519190471f657b657155a
|
|
33
|
+
|
|
34
|
+
# User provided section
|
|
35
|
+
|
|
36
|
+
# List of Local paths (relative to this file) that should be
|
|
37
|
+
# ignored by the migrate tool.
|
|
38
|
+
#
|
|
39
|
+
# Files that are not part of the templates will be ignored by default.
|
|
40
|
+
unmanaged_files:
|
|
41
|
+
- 'lib/main.dart'
|
|
42
|
+
- 'ios/Runner.xcodeproj/project.pbxproj'
|
|
@@ -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,109 @@
|
|
|
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.health.connect:connect-client:1.1.0")
|
|
102
|
+
implementation("androidx.security:security-crypto:1.1.0")
|
|
103
|
+
implementation("androidx.work:work-runtime-ktx:2.10.1")
|
|
104
|
+
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.9.0")
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
flutter {
|
|
108
|
+
source = "../.."
|
|
109
|
+
}
|
|
@@ -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,147 @@
|
|
|
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.CAMERA" />
|
|
5
|
+
<uses-permission android:name="android.permission.RECORD_AUDIO" />
|
|
6
|
+
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
|
|
7
|
+
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
|
|
8
|
+
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_DATA_SYNC" />
|
|
9
|
+
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_MICROPHONE" />
|
|
10
|
+
<uses-permission android:name="android.permission.health.READ_STEPS" />
|
|
11
|
+
<uses-permission android:name="android.permission.health.READ_HEART_RATE" />
|
|
12
|
+
<uses-permission android:name="android.permission.health.READ_SLEEP" />
|
|
13
|
+
<uses-permission android:name="android.permission.health.READ_EXERCISE" />
|
|
14
|
+
<uses-permission android:name="android.permission.health.READ_WEIGHT" />
|
|
15
|
+
<uses-permission android:name="android.permission.health.READ_HEALTH_DATA_IN_BACKGROUND" />
|
|
16
|
+
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
|
|
17
|
+
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
|
|
18
|
+
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
|
|
19
|
+
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
|
|
20
|
+
|
|
21
|
+
<queries>
|
|
22
|
+
<package android:name="com.google.android.apps.healthdata" />
|
|
23
|
+
<intent>
|
|
24
|
+
<action android:name="android.intent.action.PROCESS_TEXT"/>
|
|
25
|
+
<data android:mimeType="text/plain"/>
|
|
26
|
+
</intent>
|
|
27
|
+
</queries>
|
|
28
|
+
|
|
29
|
+
<application
|
|
30
|
+
android:label="${neoagentAppLabel}"
|
|
31
|
+
android:name="${applicationName}"
|
|
32
|
+
android:icon="@mipmap/ic_launcher"
|
|
33
|
+
android:usesCleartextTraffic="true">
|
|
34
|
+
<activity
|
|
35
|
+
android:name=".MainActivity"
|
|
36
|
+
android:exported="true"
|
|
37
|
+
android:launchMode="singleTop"
|
|
38
|
+
android:taskAffinity=""
|
|
39
|
+
android:theme="@style/LaunchTheme"
|
|
40
|
+
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
|
|
41
|
+
android:hardwareAccelerated="true"
|
|
42
|
+
android:windowSoftInputMode="adjustResize">
|
|
43
|
+
<!-- Specifies an Android theme to apply to this Activity as soon as
|
|
44
|
+
the Android process has started. This theme is visible to the user
|
|
45
|
+
while the Flutter UI initializes. After that, this theme continues
|
|
46
|
+
to determine the Window background behind the Flutter UI. -->
|
|
47
|
+
<meta-data
|
|
48
|
+
android:name="io.flutter.embedding.android.NormalTheme"
|
|
49
|
+
android:resource="@style/NormalTheme"
|
|
50
|
+
/>
|
|
51
|
+
<intent-filter>
|
|
52
|
+
<action android:name="android.intent.action.MAIN"/>
|
|
53
|
+
<category android:name="android.intent.category.LAUNCHER"/>
|
|
54
|
+
</intent-filter>
|
|
55
|
+
</activity>
|
|
56
|
+
<provider
|
|
57
|
+
android:name="androidx.core.content.FileProvider"
|
|
58
|
+
android:authorities="${applicationId}.fileprovider"
|
|
59
|
+
android:exported="false"
|
|
60
|
+
android:grantUriPermissions="true">
|
|
61
|
+
<meta-data
|
|
62
|
+
android:name="android.support.FILE_PROVIDER_PATHS"
|
|
63
|
+
android:resource="@xml/file_paths" />
|
|
64
|
+
</provider>
|
|
65
|
+
<activity-alias
|
|
66
|
+
android:name=".LauncherHomeAlias"
|
|
67
|
+
android:enabled="${neoagentLauncherHomeEnabled}"
|
|
68
|
+
android:exported="true"
|
|
69
|
+
android:label="${neoagentAppLabel}"
|
|
70
|
+
android:targetActivity=".MainActivity">
|
|
71
|
+
<intent-filter>
|
|
72
|
+
<action android:name="android.intent.action.MAIN" />
|
|
73
|
+
<category android:name="android.intent.category.HOME" />
|
|
74
|
+
<category android:name="android.intent.category.DEFAULT" />
|
|
75
|
+
</intent-filter>
|
|
76
|
+
</activity-alias>
|
|
77
|
+
<activity
|
|
78
|
+
android:name=".health.PermissionsRationaleActivity"
|
|
79
|
+
android:exported="false" />
|
|
80
|
+
<activity
|
|
81
|
+
android:name=".widgets.WidgetConfigActivity"
|
|
82
|
+
android:exported="true"
|
|
83
|
+
android:theme="@style/LaunchTheme" />
|
|
84
|
+
<activity-alias
|
|
85
|
+
android:name=".ViewPermissionUsageActivity"
|
|
86
|
+
android:exported="true"
|
|
87
|
+
android:permission="android.permission.START_VIEW_PERMISSION_USAGE"
|
|
88
|
+
android:targetActivity=".health.PermissionsRationaleActivity">
|
|
89
|
+
<intent-filter>
|
|
90
|
+
<action android:name="android.intent.action.VIEW_PERMISSION_USAGE" />
|
|
91
|
+
<category android:name="android.intent.category.HEALTH_PERMISSIONS" />
|
|
92
|
+
</intent-filter>
|
|
93
|
+
</activity-alias>
|
|
94
|
+
<service
|
|
95
|
+
android:name="androidx.work.impl.foreground.SystemForegroundService"
|
|
96
|
+
android:foregroundServiceType="dataSync"
|
|
97
|
+
tools:node="merge" />
|
|
98
|
+
<service
|
|
99
|
+
android:name=".recording.RecordingForegroundService"
|
|
100
|
+
android:exported="false"
|
|
101
|
+
android:foregroundServiceType="microphone|connectedDevice" />
|
|
102
|
+
<receiver
|
|
103
|
+
android:name=".recording.RecordingBootReceiver"
|
|
104
|
+
android:enabled="true"
|
|
105
|
+
android:exported="false">
|
|
106
|
+
<intent-filter>
|
|
107
|
+
<action android:name="android.intent.action.BOOT_COMPLETED" />
|
|
108
|
+
</intent-filter>
|
|
109
|
+
</receiver>
|
|
110
|
+
<receiver
|
|
111
|
+
android:name=".widgets.AiHomeWidgetProvider"
|
|
112
|
+
android:exported="true">
|
|
113
|
+
<intent-filter>
|
|
114
|
+
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
|
|
115
|
+
</intent-filter>
|
|
116
|
+
<meta-data
|
|
117
|
+
android:name="android.appwidget.provider"
|
|
118
|
+
android:resource="@xml/neoagent_ai_widget_info" />
|
|
119
|
+
</receiver>
|
|
120
|
+
<receiver
|
|
121
|
+
android:name=".widgets.VoiceLaunchWidgetProvider"
|
|
122
|
+
android:exported="true">
|
|
123
|
+
<intent-filter>
|
|
124
|
+
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
|
|
125
|
+
</intent-filter>
|
|
126
|
+
<meta-data
|
|
127
|
+
android:name="android.appwidget.provider"
|
|
128
|
+
android:resource="@xml/neoagent_voice_widget_info" />
|
|
129
|
+
</receiver>
|
|
130
|
+
<meta-data
|
|
131
|
+
android:name="com.neoagent.APP_MODE"
|
|
132
|
+
android:value="${neoagentAppMode}" />
|
|
133
|
+
<meta-data
|
|
134
|
+
android:name="flutterEmbedding"
|
|
135
|
+
android:value="2" />
|
|
136
|
+
|
|
137
|
+
<!-- Notification Listener Service for Interception -->
|
|
138
|
+
<service android:name="notification.listener.service.NotificationListener"
|
|
139
|
+
android:label="NeoAgent Notifications"
|
|
140
|
+
android:permission="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE"
|
|
141
|
+
android:exported="true">
|
|
142
|
+
<intent-filter>
|
|
143
|
+
<action android:name="android.service.notification.NotificationListenerService" />
|
|
144
|
+
</intent-filter>
|
|
145
|
+
</service>
|
|
146
|
+
</application>
|
|
147
|
+
</manifest>
|