neoagent 2.3.1-beta.3 → 2.3.1-beta.30

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.
Files changed (286) hide show
  1. package/.env.example +44 -0
  2. package/docs/capabilities.md +2 -2
  3. package/docs/configuration.md +12 -5
  4. package/docs/hardware.md +1 -1
  5. package/docs/integrations.md +2 -3
  6. package/flutter_app/.metadata +42 -0
  7. package/flutter_app/README.md +21 -0
  8. package/flutter_app/analysis_options.yaml +32 -0
  9. package/flutter_app/android/app/build.gradle.kts +109 -0
  10. package/flutter_app/android/app/src/debug/AndroidManifest.xml +7 -0
  11. package/flutter_app/android/app/src/main/AndroidManifest.xml +147 -0
  12. package/flutter_app/android/app/src/main/kotlin/com/neoagent/flutter_app/MainActivity.kt +747 -0
  13. package/flutter_app/android/app/src/main/kotlin/com/neoagent/flutter_app/health/HealthConnectGateway.kt +280 -0
  14. package/flutter_app/android/app/src/main/kotlin/com/neoagent/flutter_app/health/HealthSyncNotifications.kt +113 -0
  15. package/flutter_app/android/app/src/main/kotlin/com/neoagent/flutter_app/health/HealthSyncPayload.kt +57 -0
  16. package/flutter_app/android/app/src/main/kotlin/com/neoagent/flutter_app/health/HealthSyncScheduler.kt +78 -0
  17. package/flutter_app/android/app/src/main/kotlin/com/neoagent/flutter_app/health/HealthSyncWorker.kt +253 -0
  18. package/flutter_app/android/app/src/main/kotlin/com/neoagent/flutter_app/health/PermissionsRationaleActivity.kt +46 -0
  19. package/flutter_app/android/app/src/main/kotlin/com/neoagent/flutter_app/recording/RecordingBootReceiver.kt +21 -0
  20. package/flutter_app/android/app/src/main/kotlin/com/neoagent/flutter_app/recording/RecordingForegroundService.kt +586 -0
  21. package/flutter_app/android/app/src/main/kotlin/com/neoagent/flutter_app/recording/RecordingStateStore.kt +78 -0
  22. package/flutter_app/android/app/src/main/kotlin/com/neoagent/flutter_app/recording/RecordingUploadClient.kt +104 -0
  23. package/flutter_app/android/app/src/main/kotlin/com/neoagent/flutter_app/widgets/AiHomeWidgetProvider.kt +457 -0
  24. package/flutter_app/android/app/src/main/kotlin/com/neoagent/flutter_app/widgets/AiWidgetStore.kt +194 -0
  25. package/flutter_app/android/app/src/main/kotlin/com/neoagent/flutter_app/widgets/VoiceLaunchWidgetProvider.kt +67 -0
  26. package/flutter_app/android/app/src/main/kotlin/com/neoagent/flutter_app/widgets/WidgetConfigActivity.kt +228 -0
  27. package/flutter_app/android/app/src/main/kotlin/com/neoagent/flutter_app/widgets/WidgetSyncScheduler.kt +72 -0
  28. package/flutter_app/android/app/src/main/kotlin/com/neoagent/flutter_app/widgets/WidgetSyncWorker.kt +186 -0
  29. package/flutter_app/android/app/src/main/kotlin/com/neoagent/flutter_app/widgets/WidgetTaskRunWorker.kt +210 -0
  30. package/flutter_app/android/app/src/main/res/drawable/launch_background.xml +12 -0
  31. package/flutter_app/android/app/src/main/res/drawable/neoagent_ai_widget_bg.xml +11 -0
  32. package/flutter_app/android/app/src/main/res/drawable/neoagent_ai_widget_task_bg.xml +8 -0
  33. package/flutter_app/android/app/src/main/res/drawable-v21/launch_background.xml +12 -0
  34. package/flutter_app/android/app/src/main/res/layout/neoagent_ai_widget.xml +138 -0
  35. package/flutter_app/android/app/src/main/res/layout/neoagent_ai_widget_task_row.xml +52 -0
  36. package/flutter_app/android/app/src/main/res/layout/neoagent_voice_widget.xml +49 -0
  37. package/flutter_app/android/app/src/main/res/mipmap-hdpi/ic_launcher.png +0 -0
  38. package/flutter_app/android/app/src/main/res/mipmap-mdpi/ic_launcher.png +0 -0
  39. package/flutter_app/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png +0 -0
  40. package/flutter_app/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png +0 -0
  41. package/flutter_app/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png +0 -0
  42. package/flutter_app/android/app/src/main/res/values/strings.xml +12 -0
  43. package/flutter_app/android/app/src/main/res/values/styles.xml +18 -0
  44. package/flutter_app/android/app/src/main/res/values-night/styles.xml +18 -0
  45. package/flutter_app/android/app/src/main/res/xml/file_paths.xml +6 -0
  46. package/flutter_app/android/app/src/main/res/xml/neoagent_ai_widget_info.xml +12 -0
  47. package/flutter_app/android/app/src/main/res/xml/neoagent_voice_widget_info.xml +12 -0
  48. package/flutter_app/android/app/src/profile/AndroidManifest.xml +7 -0
  49. package/flutter_app/android/build.gradle.kts +24 -0
  50. package/flutter_app/android/ci-release.keystore +0 -0
  51. package/flutter_app/android/gradle/wrapper/gradle-wrapper.properties +5 -0
  52. package/flutter_app/android/gradle.properties +3 -0
  53. package/flutter_app/android/key.properties +4 -0
  54. package/flutter_app/android/settings.gradle.kts +26 -0
  55. package/flutter_app/assets/branding/app_icon_1024.png +0 -0
  56. package/flutter_app/assets/branding/app_icon_128.png +0 -0
  57. package/flutter_app/assets/branding/app_icon_192.png +0 -0
  58. package/flutter_app/assets/branding/app_icon_256.png +0 -0
  59. package/flutter_app/assets/branding/app_icon_32.png +0 -0
  60. package/flutter_app/assets/branding/app_icon_512.png +0 -0
  61. package/flutter_app/assets/branding/app_icon_64.png +0 -0
  62. package/flutter_app/assets/branding/tray_icon_template.png +0 -0
  63. package/flutter_app/lib/features/location/location_service.dart +119 -0
  64. package/flutter_app/lib/features/notifications/notification_interceptor.dart +97 -0
  65. package/flutter_app/lib/main.dart +99 -0
  66. package/flutter_app/lib/main_account_settings.dart +1250 -0
  67. package/flutter_app/lib/main_admin.dart +886 -0
  68. package/flutter_app/lib/main_app_shell.dart +1682 -0
  69. package/flutter_app/lib/main_chat.dart +3345 -0
  70. package/flutter_app/lib/main_controller.dart +6781 -0
  71. package/flutter_app/lib/main_devices.dart +2301 -0
  72. package/flutter_app/lib/main_integrations.dart +1129 -0
  73. package/flutter_app/lib/main_launcher.dart +959 -0
  74. package/flutter_app/lib/main_launcher_entry.dart +5 -0
  75. package/flutter_app/lib/main_models.dart +3546 -0
  76. package/flutter_app/lib/main_navigation.dart +193 -0
  77. package/flutter_app/lib/main_operations.dart +4851 -0
  78. package/flutter_app/lib/main_recordings.dart +870 -0
  79. package/flutter_app/lib/main_runtime.dart +806 -0
  80. package/flutter_app/lib/main_settings.dart +2024 -0
  81. package/flutter_app/lib/main_shared.dart +2861 -0
  82. package/flutter_app/lib/main_theme.dart +204 -0
  83. package/flutter_app/lib/main_voice_assistant.dart +957 -0
  84. package/flutter_app/lib/src/android_apk_drop_zone.dart +32 -0
  85. package/flutter_app/lib/src/android_apk_drop_zone_stub.dart +16 -0
  86. package/flutter_app/lib/src/android_apk_drop_zone_web.dart +348 -0
  87. package/flutter_app/lib/src/android_app_installer.dart +22 -0
  88. package/flutter_app/lib/src/android_app_installer_io.dart +122 -0
  89. package/flutter_app/lib/src/android_app_installer_stub.dart +21 -0
  90. package/flutter_app/lib/src/android_launcher_bridge.dart +239 -0
  91. package/flutter_app/lib/src/app_launch_bridge.dart +29 -0
  92. package/flutter_app/lib/src/app_release_updater.dart +511 -0
  93. package/flutter_app/lib/src/backend_client.dart +1833 -0
  94. package/flutter_app/lib/src/desktop_companion.dart +2 -0
  95. package/flutter_app/lib/src/desktop_companion_actions.dart +586 -0
  96. package/flutter_app/lib/src/desktop_companion_io.dart +538 -0
  97. package/flutter_app/lib/src/desktop_companion_stub.dart +59 -0
  98. package/flutter_app/lib/src/desktop_native_bridge.dart +91 -0
  99. package/flutter_app/lib/src/desktop_screen_capture.dart +21 -0
  100. package/flutter_app/lib/src/desktop_screen_capture_io.dart +142 -0
  101. package/flutter_app/lib/src/desktop_screen_capture_stub.dart +12 -0
  102. package/flutter_app/lib/src/diagnostics_logger.dart +119 -0
  103. package/flutter_app/lib/src/health_bridge.dart +136 -0
  104. package/flutter_app/lib/src/live_voice_capture.dart +85 -0
  105. package/flutter_app/lib/src/messaging_access_summary.dart +46 -0
  106. package/flutter_app/lib/src/network/app_http_client.dart +53 -0
  107. package/flutter_app/lib/src/network/app_http_client_factory.dart +6 -0
  108. package/flutter_app/lib/src/network/app_http_client_io.dart +138 -0
  109. package/flutter_app/lib/src/network/app_http_client_stub.dart +3 -0
  110. package/flutter_app/lib/src/network/app_http_client_web.dart +94 -0
  111. package/flutter_app/lib/src/oauth_launcher.dart +33 -0
  112. package/flutter_app/lib/src/oauth_launcher_io.dart +77 -0
  113. package/flutter_app/lib/src/oauth_launcher_stub.dart +33 -0
  114. package/flutter_app/lib/src/oauth_launcher_web.dart +107 -0
  115. package/flutter_app/lib/src/recording_bridge.dart +232 -0
  116. package/flutter_app/lib/src/recording_bridge_io.dart +1019 -0
  117. package/flutter_app/lib/src/recording_bridge_stub.dart +120 -0
  118. package/flutter_app/lib/src/recording_bridge_web.dart +689 -0
  119. package/flutter_app/lib/src/recording_payloads.dart +86 -0
  120. package/flutter_app/lib/src/theme/palette.dart +81 -0
  121. package/flutter_app/lib/src/widget_bridge.dart +49 -0
  122. package/flutter_app/linux/CMakeLists.txt +128 -0
  123. package/flutter_app/linux/flutter/CMakeLists.txt +88 -0
  124. package/flutter_app/linux/flutter/generated_plugin_registrant.cc +43 -0
  125. package/flutter_app/linux/flutter/generated_plugin_registrant.h +15 -0
  126. package/flutter_app/linux/flutter/generated_plugins.cmake +31 -0
  127. package/flutter_app/linux/runner/CMakeLists.txt +26 -0
  128. package/flutter_app/linux/runner/main.cc +6 -0
  129. package/flutter_app/linux/runner/my_application.cc +144 -0
  130. package/flutter_app/linux/runner/my_application.h +18 -0
  131. package/flutter_app/linux/runner/resources/app_icon.png +0 -0
  132. package/flutter_app/macos/Flutter/Flutter-Debug.xcconfig +2 -0
  133. package/flutter_app/macos/Flutter/Flutter-Release.xcconfig +2 -0
  134. package/flutter_app/macos/Flutter/GeneratedPluginRegistrant.swift +40 -0
  135. package/flutter_app/macos/Podfile +42 -0
  136. package/flutter_app/macos/Podfile.lock +87 -0
  137. package/flutter_app/macos/Runner/AppDelegate.swift +576 -0
  138. package/flutter_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json +68 -0
  139. package/flutter_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png +0 -0
  140. package/flutter_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png +0 -0
  141. package/flutter_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png +0 -0
  142. package/flutter_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png +0 -0
  143. package/flutter_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png +0 -0
  144. package/flutter_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png +0 -0
  145. package/flutter_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png +0 -0
  146. package/flutter_app/macos/Runner/Base.lproj/MainMenu.xib +342 -0
  147. package/flutter_app/macos/Runner/Configs/AppInfo.xcconfig +14 -0
  148. package/flutter_app/macos/Runner/Configs/Debug.xcconfig +2 -0
  149. package/flutter_app/macos/Runner/Configs/Release.xcconfig +2 -0
  150. package/flutter_app/macos/Runner/Configs/Warnings.xcconfig +13 -0
  151. package/flutter_app/macos/Runner/DebugProfile.entitlements +16 -0
  152. package/flutter_app/macos/Runner/Info.plist +36 -0
  153. package/flutter_app/macos/Runner/MainFlutterWindow.swift +19 -0
  154. package/flutter_app/macos/Runner/Release.entitlements +12 -0
  155. package/flutter_app/macos/Runner.xcodeproj/project.pbxproj +801 -0
  156. package/flutter_app/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
  157. package/flutter_app/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +99 -0
  158. package/flutter_app/macos/Runner.xcworkspace/contents.xcworkspacedata +10 -0
  159. package/flutter_app/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
  160. package/flutter_app/macos/RunnerTests/RunnerTests.swift +12 -0
  161. package/flutter_app/patch_strings.py +12 -0
  162. package/flutter_app/pubspec.lock +1088 -0
  163. package/flutter_app/pubspec.yaml +53 -0
  164. package/flutter_app/test/messaging_access_summary_test.dart +22 -0
  165. package/flutter_app/test/recording_payloads_test.dart +53 -0
  166. package/flutter_app/third_party/desktop_audio_capture/LICENSE +21 -0
  167. package/flutter_app/third_party/desktop_audio_capture/README.md +262 -0
  168. package/flutter_app/third_party/desktop_audio_capture/lib/audio_capture.dart +65 -0
  169. package/flutter_app/third_party/desktop_audio_capture/lib/config/mic_audio_config.dart +153 -0
  170. package/flutter_app/third_party/desktop_audio_capture/lib/config/system_adudio_config.dart +110 -0
  171. package/flutter_app/third_party/desktop_audio_capture/lib/mic/mic_audio_capture.dart +461 -0
  172. package/flutter_app/third_party/desktop_audio_capture/lib/model/audio_status.dart +91 -0
  173. package/flutter_app/third_party/desktop_audio_capture/lib/model/decibel_data.dart +106 -0
  174. package/flutter_app/third_party/desktop_audio_capture/lib/model/input_device_type.dart +219 -0
  175. package/flutter_app/third_party/desktop_audio_capture/lib/system/system_audio_capture.dart +336 -0
  176. package/flutter_app/third_party/desktop_audio_capture/linux/CMakeLists.txt +101 -0
  177. package/flutter_app/third_party/desktop_audio_capture/linux/audio_capture_plugin.cc +692 -0
  178. package/flutter_app/third_party/desktop_audio_capture/linux/include/audio_capture/audio_capture_plugin.h +35 -0
  179. package/flutter_app/third_party/desktop_audio_capture/linux/include/audio_capture/mic_capture_plugin.h +36 -0
  180. package/flutter_app/third_party/desktop_audio_capture/linux/include/desktop_audio_capture/audio_capture_plugin.h +32 -0
  181. package/flutter_app/third_party/desktop_audio_capture/linux/include/desktop_audio_capture/mic_capture_plugin.h +32 -0
  182. package/flutter_app/third_party/desktop_audio_capture/linux/mic_capture_plugin.cc +878 -0
  183. package/flutter_app/third_party/desktop_audio_capture/macos/Classes/AudioCapturePlugin.swift +27 -0
  184. package/flutter_app/third_party/desktop_audio_capture/macos/Classes/MicCapturePlugin.swift +1172 -0
  185. package/flutter_app/third_party/desktop_audio_capture/macos/Classes/SystemCapturePlugin.swift +655 -0
  186. package/flutter_app/third_party/desktop_audio_capture/macos/Resources/PrivacyInfo.xcprivacy +12 -0
  187. package/flutter_app/third_party/desktop_audio_capture/macos/desktop_audio_capture.podspec +30 -0
  188. package/flutter_app/third_party/desktop_audio_capture/pubspec.yaml +87 -0
  189. package/flutter_app/third_party/desktop_audio_capture/windows/CMakeLists.txt +105 -0
  190. package/flutter_app/third_party/desktop_audio_capture/windows/audio_capture_plugin.cpp +80 -0
  191. package/flutter_app/third_party/desktop_audio_capture/windows/audio_capture_plugin.h +31 -0
  192. package/flutter_app/third_party/desktop_audio_capture/windows/audio_capture_plugin_c_api.cpp +12 -0
  193. package/flutter_app/third_party/desktop_audio_capture/windows/include/audio_capture/audio_capture_plugin_c_api.h +23 -0
  194. package/flutter_app/third_party/desktop_audio_capture/windows/include/desktop_audio_capture/audio_capture_plugin.h +25 -0
  195. package/flutter_app/third_party/desktop_audio_capture/windows/mic_capture_plugin.cpp +1117 -0
  196. package/flutter_app/third_party/desktop_audio_capture/windows/mic_capture_plugin.h +115 -0
  197. package/flutter_app/third_party/desktop_audio_capture/windows/system_audio_capture_plugin.cpp +777 -0
  198. package/flutter_app/third_party/desktop_audio_capture/windows/system_audio_capture_plugin.h +87 -0
  199. package/flutter_app/third_party/flutter_secure_storage_linux/linux/CMakeLists.txt +30 -0
  200. package/flutter_app/third_party/flutter_secure_storage_linux/linux/flutter_secure_storage_linux_plugin.cc +215 -0
  201. package/flutter_app/third_party/flutter_secure_storage_linux/linux/include/flutter_secure_storage_linux/flutter_secure_storage_linux_plugin.h +27 -0
  202. package/flutter_app/third_party/flutter_secure_storage_linux/pubspec.yaml +20 -0
  203. package/flutter_app/tool/generate_desktop_branding.py +219 -0
  204. package/flutter_app/web/favicon.png +0 -0
  205. package/flutter_app/web/favicon.svg +12 -0
  206. package/flutter_app/web/icons/Icon-192.png +0 -0
  207. package/flutter_app/web/icons/Icon-512.png +0 -0
  208. package/flutter_app/web/icons/Icon-maskable-192.png +0 -0
  209. package/flutter_app/web/icons/Icon-maskable-512.png +0 -0
  210. package/flutter_app/web/index.html +39 -0
  211. package/flutter_app/web/manifest.json +35 -0
  212. package/flutter_app/windows/CMakeLists.txt +108 -0
  213. package/flutter_app/windows/flutter/CMakeLists.txt +109 -0
  214. package/flutter_app/windows/flutter/generated_plugin_registrant.cc +47 -0
  215. package/flutter_app/windows/flutter/generated_plugin_registrant.h +15 -0
  216. package/flutter_app/windows/flutter/generated_plugins.cmake +35 -0
  217. package/flutter_app/windows/runner/CMakeLists.txt +41 -0
  218. package/flutter_app/windows/runner/Runner.rc +121 -0
  219. package/flutter_app/windows/runner/flutter_window.cpp +533 -0
  220. package/flutter_app/windows/runner/flutter_window.h +37 -0
  221. package/flutter_app/windows/runner/main.cpp +53 -0
  222. package/flutter_app/windows/runner/resource.h +16 -0
  223. package/flutter_app/windows/runner/resources/app_icon.ico +0 -0
  224. package/flutter_app/windows/runner/runner.exe.manifest +14 -0
  225. package/flutter_app/windows/runner/utils.cpp +65 -0
  226. package/flutter_app/windows/runner/utils.h +19 -0
  227. package/flutter_app/windows/runner/win32_window.cpp +299 -0
  228. package/flutter_app/windows/runner/win32_window.h +102 -0
  229. package/lib/install_helpers.js +31 -0
  230. package/lib/manager.js +227 -6
  231. package/package.json +5 -1
  232. package/server/db/database.js +110 -0
  233. package/server/http/middleware.js +55 -2
  234. package/server/http/routes.js +1 -0
  235. package/server/index.js +3 -0
  236. package/server/public/.last_build_id +1 -1
  237. package/server/public/assets/NOTICES +1 -1
  238. package/server/public/assets/fonts/MaterialIcons-Regular.otf +0 -0
  239. package/server/public/canvaskit/wimp.wasm +0 -0
  240. package/server/public/flutter_bootstrap.js +2 -2
  241. package/server/public/main.dart.js +75176 -73986
  242. package/server/routes/integrations.js +108 -1
  243. package/server/routes/memory.js +11 -2
  244. package/server/{http/routes → routes}/screenHistory.js +6 -6
  245. package/server/routes/settings.js +75 -2
  246. package/server/{http/routes → routes}/triggers.js +4 -4
  247. package/server/routes/wearable.js +67 -0
  248. package/server/services/ai/models.js +30 -0
  249. package/server/services/ai/providers/githubCopilot.js +97 -0
  250. package/server/services/ai/providers/openai.js +2 -1
  251. package/server/services/ai/providers/openaiCodex.js +31 -0
  252. package/server/services/ai/settings.js +20 -0
  253. package/server/services/ai/tools.js +71 -3
  254. package/server/services/desktop/screenRecorder.js +71 -15
  255. package/server/services/integrations/env.js +5 -0
  256. package/server/services/integrations/figma/provider.js +1 -0
  257. package/server/services/integrations/github/common.js +106 -0
  258. package/server/services/integrations/github/provider.js +499 -0
  259. package/server/services/integrations/github/repos.js +1124 -0
  260. package/server/services/integrations/google/provider.js +1 -0
  261. package/server/services/integrations/home_assistant/provider.js +325 -26
  262. package/server/services/integrations/manager.js +88 -12
  263. package/server/services/integrations/microsoft/provider.js +1 -0
  264. package/server/services/integrations/oauth_provider.js +25 -8
  265. package/server/services/integrations/provider_config_store.js +85 -0
  266. package/server/services/integrations/registry.js +4 -0
  267. package/server/services/integrations/spotify/provider.js +1 -0
  268. package/server/services/integrations/trello/provider.js +842 -0
  269. package/server/services/manager.js +46 -1
  270. package/server/services/memory/manager.js +39 -2
  271. package/server/services/messaging/access_policy.js +10 -0
  272. package/server/services/messaging/manager.js +49 -0
  273. package/server/services/messaging/meshtastic.js +322 -0
  274. package/server/services/messaging/meshtastic_env.js +100 -0
  275. package/server/services/tasks/runtime.js +1 -1
  276. package/server/services/voice/openaiClient.js +4 -1
  277. package/server/services/voice/openaiSpeech.js +6 -1
  278. package/server/services/voice/providers.js +52 -12
  279. package/server/services/voice/runtimeManager.js +136 -19
  280. package/server/services/voice/turnRunner.js +29 -9
  281. package/server/services/wearable/firmware_manifest.js +370 -0
  282. package/server/services/wearable/gateway.js +350 -0
  283. package/server/services/wearable/protocol.js +45 -0
  284. package/server/services/wearable/service.js +244 -0
  285. package/server/utils/local_secrets.js +56 -0
  286. 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,6 +203,10 @@ 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
  ########################################
@@ -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
 
@@ -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, for example `https://ha.example.com` |
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
- There is no dedicated hardware or wearable firmware bundled with NeoAgent.
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.
@@ -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>