neoagent 2.3.1-beta.7 → 2.3.1-beta.71

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 (345) hide show
  1. package/.env.example +46 -5
  2. package/docs/capabilities.md +3 -3
  3. package/docs/configuration.md +18 -10
  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 +111 -0
  10. package/flutter_app/android/app/src/debug/AndroidManifest.xml +7 -0
  11. package/flutter_app/android/app/src/main/AndroidManifest.xml +171 -0
  12. package/flutter_app/android/app/src/main/kotlin/com/neoagent/flutter_app/MainActivity.kt +804 -0
  13. package/flutter_app/android/app/src/main/kotlin/com/neoagent/flutter_app/auto/NeoAgentCarAppService.kt +114 -0
  14. package/flutter_app/android/app/src/main/kotlin/com/neoagent/flutter_app/health/HealthConnectGateway.kt +280 -0
  15. package/flutter_app/android/app/src/main/kotlin/com/neoagent/flutter_app/health/HealthSyncNotifications.kt +113 -0
  16. package/flutter_app/android/app/src/main/kotlin/com/neoagent/flutter_app/health/HealthSyncPayload.kt +57 -0
  17. package/flutter_app/android/app/src/main/kotlin/com/neoagent/flutter_app/health/HealthSyncScheduler.kt +78 -0
  18. package/flutter_app/android/app/src/main/kotlin/com/neoagent/flutter_app/health/HealthSyncWorker.kt +253 -0
  19. package/flutter_app/android/app/src/main/kotlin/com/neoagent/flutter_app/health/PermissionsRationaleActivity.kt +46 -0
  20. package/flutter_app/android/app/src/main/kotlin/com/neoagent/flutter_app/recording/RecordingBootReceiver.kt +21 -0
  21. package/flutter_app/android/app/src/main/kotlin/com/neoagent/flutter_app/recording/RecordingForegroundService.kt +586 -0
  22. package/flutter_app/android/app/src/main/kotlin/com/neoagent/flutter_app/recording/RecordingStateStore.kt +78 -0
  23. package/flutter_app/android/app/src/main/kotlin/com/neoagent/flutter_app/recording/RecordingUploadClient.kt +104 -0
  24. package/flutter_app/android/app/src/main/kotlin/com/neoagent/flutter_app/telecom/NeoAgentConnection.kt +118 -0
  25. package/flutter_app/android/app/src/main/kotlin/com/neoagent/flutter_app/telecom/NeoAgentConnectionService.kt +86 -0
  26. package/flutter_app/android/app/src/main/kotlin/com/neoagent/flutter_app/widgets/AiHomeWidgetProvider.kt +457 -0
  27. package/flutter_app/android/app/src/main/kotlin/com/neoagent/flutter_app/widgets/AiWidgetStore.kt +194 -0
  28. package/flutter_app/android/app/src/main/kotlin/com/neoagent/flutter_app/widgets/VoiceLaunchWidgetProvider.kt +67 -0
  29. package/flutter_app/android/app/src/main/kotlin/com/neoagent/flutter_app/widgets/WidgetConfigActivity.kt +228 -0
  30. package/flutter_app/android/app/src/main/kotlin/com/neoagent/flutter_app/widgets/WidgetSyncScheduler.kt +72 -0
  31. package/flutter_app/android/app/src/main/kotlin/com/neoagent/flutter_app/widgets/WidgetSyncWorker.kt +186 -0
  32. package/flutter_app/android/app/src/main/kotlin/com/neoagent/flutter_app/widgets/WidgetTaskRunWorker.kt +210 -0
  33. package/flutter_app/android/app/src/main/res/drawable/launch_background.xml +12 -0
  34. package/flutter_app/android/app/src/main/res/drawable/neoagent_ai_widget_bg.xml +11 -0
  35. package/flutter_app/android/app/src/main/res/drawable/neoagent_ai_widget_task_bg.xml +8 -0
  36. package/flutter_app/android/app/src/main/res/drawable-v21/launch_background.xml +12 -0
  37. package/flutter_app/android/app/src/main/res/layout/neoagent_ai_widget.xml +138 -0
  38. package/flutter_app/android/app/src/main/res/layout/neoagent_ai_widget_task_row.xml +52 -0
  39. package/flutter_app/android/app/src/main/res/layout/neoagent_voice_widget.xml +49 -0
  40. package/flutter_app/android/app/src/main/res/mipmap-hdpi/ic_launcher.png +0 -0
  41. package/flutter_app/android/app/src/main/res/mipmap-mdpi/ic_launcher.png +0 -0
  42. package/flutter_app/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png +0 -0
  43. package/flutter_app/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png +0 -0
  44. package/flutter_app/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png +0 -0
  45. package/flutter_app/android/app/src/main/res/values/arrays.xml +8 -0
  46. package/flutter_app/android/app/src/main/res/values/strings.xml +12 -0
  47. package/flutter_app/android/app/src/main/res/values/styles.xml +18 -0
  48. package/flutter_app/android/app/src/main/res/values-night/styles.xml +18 -0
  49. package/flutter_app/android/app/src/main/res/xml/automotive_app_desc.xml +4 -0
  50. package/flutter_app/android/app/src/main/res/xml/file_paths.xml +6 -0
  51. package/flutter_app/android/app/src/main/res/xml/neoagent_ai_widget_info.xml +12 -0
  52. package/flutter_app/android/app/src/main/res/xml/neoagent_voice_widget_info.xml +12 -0
  53. package/flutter_app/android/app/src/profile/AndroidManifest.xml +7 -0
  54. package/flutter_app/android/build.gradle.kts +24 -0
  55. package/flutter_app/android/ci-release.keystore +0 -0
  56. package/flutter_app/android/gradle/wrapper/gradle-wrapper.properties +5 -0
  57. package/flutter_app/android/gradle.properties +3 -0
  58. package/flutter_app/android/key.properties +4 -0
  59. package/flutter_app/android/settings.gradle.kts +26 -0
  60. package/flutter_app/assets/branding/app_icon_1024.png +0 -0
  61. package/flutter_app/assets/branding/app_icon_128.png +0 -0
  62. package/flutter_app/assets/branding/app_icon_192.png +0 -0
  63. package/flutter_app/assets/branding/app_icon_256.png +0 -0
  64. package/flutter_app/assets/branding/app_icon_32.png +0 -0
  65. package/flutter_app/assets/branding/app_icon_512.png +0 -0
  66. package/flutter_app/assets/branding/app_icon_64.png +0 -0
  67. package/flutter_app/assets/branding/onboarding_intro.mp4 +0 -0
  68. package/flutter_app/assets/branding/tray_icon_template.png +0 -0
  69. package/flutter_app/lib/features/location/location_service.dart +119 -0
  70. package/flutter_app/lib/features/notifications/notification_interceptor.dart +97 -0
  71. package/flutter_app/lib/features/onboarding/onboarding_chrome.dart +571 -0
  72. package/flutter_app/lib/features/onboarding/onboarding_messaging_step.dart +275 -0
  73. package/flutter_app/lib/features/onboarding/onboarding_model_step.dart +366 -0
  74. package/flutter_app/lib/features/onboarding/onboarding_shell.dart +57 -0
  75. package/flutter_app/lib/features/onboarding/onboarding_video_step.dart +218 -0
  76. package/flutter_app/lib/features/onboarding/onboarding_welcome_step.dart +46 -0
  77. package/flutter_app/lib/main.dart +105 -0
  78. package/flutter_app/lib/main_account_settings.dart +1278 -0
  79. package/flutter_app/lib/main_admin.dart +900 -0
  80. package/flutter_app/lib/main_app_shell.dart +2135 -0
  81. package/flutter_app/lib/main_chat.dart +3629 -0
  82. package/flutter_app/lib/main_controller.dart +7034 -0
  83. package/flutter_app/lib/main_devices.dart +2394 -0
  84. package/flutter_app/lib/main_integrations.dart +917 -0
  85. package/flutter_app/lib/main_launcher.dart +959 -0
  86. package/flutter_app/lib/main_launcher_entry.dart +5 -0
  87. package/flutter_app/lib/main_models.dart +3738 -0
  88. package/flutter_app/lib/main_navigation.dart +206 -0
  89. package/flutter_app/lib/main_operations.dart +5001 -0
  90. package/flutter_app/lib/main_recordings.dart +920 -0
  91. package/flutter_app/lib/main_runtime.dart +860 -0
  92. package/flutter_app/lib/main_settings.dart +2250 -0
  93. package/flutter_app/lib/main_shared.dart +3310 -0
  94. package/flutter_app/lib/main_theme.dart +257 -0
  95. package/flutter_app/lib/main_unified.dart +388 -0
  96. package/flutter_app/lib/main_voice_assistant.dart +957 -0
  97. package/flutter_app/lib/src/analytics_service.dart +294 -0
  98. package/flutter_app/lib/src/android_apk_drop_zone.dart +32 -0
  99. package/flutter_app/lib/src/android_apk_drop_zone_stub.dart +16 -0
  100. package/flutter_app/lib/src/android_apk_drop_zone_web.dart +348 -0
  101. package/flutter_app/lib/src/android_app_installer.dart +22 -0
  102. package/flutter_app/lib/src/android_app_installer_io.dart +122 -0
  103. package/flutter_app/lib/src/android_app_installer_stub.dart +21 -0
  104. package/flutter_app/lib/src/android_auto_bridge.dart +59 -0
  105. package/flutter_app/lib/src/android_launcher_bridge.dart +239 -0
  106. package/flutter_app/lib/src/app_launch_bridge.dart +29 -0
  107. package/flutter_app/lib/src/app_release_updater.dart +511 -0
  108. package/flutter_app/lib/src/backend_client.dart +1841 -0
  109. package/flutter_app/lib/src/desktop_companion.dart +2 -0
  110. package/flutter_app/lib/src/desktop_companion_actions.dart +586 -0
  111. package/flutter_app/lib/src/desktop_companion_io.dart +538 -0
  112. package/flutter_app/lib/src/desktop_companion_stub.dart +59 -0
  113. package/flutter_app/lib/src/desktop_native_bridge.dart +91 -0
  114. package/flutter_app/lib/src/desktop_screen_capture.dart +21 -0
  115. package/flutter_app/lib/src/desktop_screen_capture_io.dart +142 -0
  116. package/flutter_app/lib/src/desktop_screen_capture_stub.dart +12 -0
  117. package/flutter_app/lib/src/diagnostics_logger.dart +119 -0
  118. package/flutter_app/lib/src/health_bridge.dart +136 -0
  119. package/flutter_app/lib/src/live_voice_capture.dart +85 -0
  120. package/flutter_app/lib/src/messaging_access_summary.dart +46 -0
  121. package/flutter_app/lib/src/network/app_http_client.dart +53 -0
  122. package/flutter_app/lib/src/network/app_http_client_factory.dart +6 -0
  123. package/flutter_app/lib/src/network/app_http_client_io.dart +138 -0
  124. package/flutter_app/lib/src/network/app_http_client_stub.dart +3 -0
  125. package/flutter_app/lib/src/network/app_http_client_web.dart +94 -0
  126. package/flutter_app/lib/src/oauth_launcher.dart +33 -0
  127. package/flutter_app/lib/src/oauth_launcher_io.dart +95 -0
  128. package/flutter_app/lib/src/oauth_launcher_stub.dart +33 -0
  129. package/flutter_app/lib/src/oauth_launcher_web.dart +107 -0
  130. package/flutter_app/lib/src/recording_bridge.dart +232 -0
  131. package/flutter_app/lib/src/recording_bridge_io.dart +1019 -0
  132. package/flutter_app/lib/src/recording_bridge_stub.dart +120 -0
  133. package/flutter_app/lib/src/recording_bridge_web.dart +689 -0
  134. package/flutter_app/lib/src/recording_payloads.dart +86 -0
  135. package/flutter_app/lib/src/theme/palette.dart +81 -0
  136. package/flutter_app/lib/src/web_app_update_monitor.dart +17 -0
  137. package/flutter_app/lib/src/web_app_update_monitor_stub.dart +24 -0
  138. package/flutter_app/lib/src/web_app_update_monitor_web.dart +123 -0
  139. package/flutter_app/lib/src/widget_bridge.dart +49 -0
  140. package/flutter_app/linux/CMakeLists.txt +128 -0
  141. package/flutter_app/linux/flutter/CMakeLists.txt +88 -0
  142. package/flutter_app/linux/flutter/generated_plugin_registrant.cc +47 -0
  143. package/flutter_app/linux/flutter/generated_plugin_registrant.h +15 -0
  144. package/flutter_app/linux/flutter/generated_plugins.cmake +32 -0
  145. package/flutter_app/linux/runner/CMakeLists.txt +26 -0
  146. package/flutter_app/linux/runner/main.cc +6 -0
  147. package/flutter_app/linux/runner/my_application.cc +144 -0
  148. package/flutter_app/linux/runner/my_application.h +18 -0
  149. package/flutter_app/linux/runner/resources/app_icon.png +0 -0
  150. package/flutter_app/macos/Flutter/Flutter-Debug.xcconfig +2 -0
  151. package/flutter_app/macos/Flutter/Flutter-Release.xcconfig +2 -0
  152. package/flutter_app/macos/Flutter/GeneratedPluginRegistrant.swift +46 -0
  153. package/flutter_app/macos/Podfile +42 -0
  154. package/flutter_app/macos/Podfile.lock +87 -0
  155. package/flutter_app/macos/Runner/AppDelegate.swift +576 -0
  156. package/flutter_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json +68 -0
  157. package/flutter_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png +0 -0
  158. package/flutter_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png +0 -0
  159. package/flutter_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png +0 -0
  160. package/flutter_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png +0 -0
  161. package/flutter_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png +0 -0
  162. package/flutter_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png +0 -0
  163. package/flutter_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png +0 -0
  164. package/flutter_app/macos/Runner/Base.lproj/MainMenu.xib +342 -0
  165. package/flutter_app/macos/Runner/Configs/AppInfo.xcconfig +14 -0
  166. package/flutter_app/macos/Runner/Configs/Debug.xcconfig +2 -0
  167. package/flutter_app/macos/Runner/Configs/Release.xcconfig +2 -0
  168. package/flutter_app/macos/Runner/Configs/Warnings.xcconfig +13 -0
  169. package/flutter_app/macos/Runner/DebugProfile.entitlements +16 -0
  170. package/flutter_app/macos/Runner/Info.plist +36 -0
  171. package/flutter_app/macos/Runner/MainFlutterWindow.swift +19 -0
  172. package/flutter_app/macos/Runner/Release.entitlements +12 -0
  173. package/flutter_app/macos/Runner.xcodeproj/project.pbxproj +801 -0
  174. package/flutter_app/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
  175. package/flutter_app/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +99 -0
  176. package/flutter_app/macos/Runner.xcworkspace/contents.xcworkspacedata +10 -0
  177. package/flutter_app/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
  178. package/flutter_app/macos/RunnerTests/RunnerTests.swift +12 -0
  179. package/flutter_app/patch_strings.py +12 -0
  180. package/flutter_app/pubspec.lock +1232 -0
  181. package/flutter_app/pubspec.yaml +58 -0
  182. package/flutter_app/third_party/desktop_audio_capture/LICENSE +21 -0
  183. package/flutter_app/third_party/desktop_audio_capture/README.md +262 -0
  184. package/flutter_app/third_party/desktop_audio_capture/lib/audio_capture.dart +65 -0
  185. package/flutter_app/third_party/desktop_audio_capture/lib/config/mic_audio_config.dart +153 -0
  186. package/flutter_app/third_party/desktop_audio_capture/lib/config/system_adudio_config.dart +110 -0
  187. package/flutter_app/third_party/desktop_audio_capture/lib/mic/mic_audio_capture.dart +461 -0
  188. package/flutter_app/third_party/desktop_audio_capture/lib/model/audio_status.dart +91 -0
  189. package/flutter_app/third_party/desktop_audio_capture/lib/model/decibel_data.dart +106 -0
  190. package/flutter_app/third_party/desktop_audio_capture/lib/model/input_device_type.dart +219 -0
  191. package/flutter_app/third_party/desktop_audio_capture/lib/system/system_audio_capture.dart +336 -0
  192. package/flutter_app/third_party/desktop_audio_capture/linux/CMakeLists.txt +101 -0
  193. package/flutter_app/third_party/desktop_audio_capture/linux/audio_capture_plugin.cc +692 -0
  194. package/flutter_app/third_party/desktop_audio_capture/linux/include/audio_capture/audio_capture_plugin.h +35 -0
  195. package/flutter_app/third_party/desktop_audio_capture/linux/include/audio_capture/mic_capture_plugin.h +36 -0
  196. package/flutter_app/third_party/desktop_audio_capture/linux/include/desktop_audio_capture/audio_capture_plugin.h +32 -0
  197. package/flutter_app/third_party/desktop_audio_capture/linux/include/desktop_audio_capture/mic_capture_plugin.h +32 -0
  198. package/flutter_app/third_party/desktop_audio_capture/linux/mic_capture_plugin.cc +878 -0
  199. package/flutter_app/third_party/desktop_audio_capture/macos/Classes/AudioCapturePlugin.swift +27 -0
  200. package/flutter_app/third_party/desktop_audio_capture/macos/Classes/MicCapturePlugin.swift +1172 -0
  201. package/flutter_app/third_party/desktop_audio_capture/macos/Classes/SystemCapturePlugin.swift +655 -0
  202. package/flutter_app/third_party/desktop_audio_capture/macos/Resources/PrivacyInfo.xcprivacy +12 -0
  203. package/flutter_app/third_party/desktop_audio_capture/macos/desktop_audio_capture.podspec +30 -0
  204. package/flutter_app/third_party/desktop_audio_capture/pubspec.yaml +87 -0
  205. package/flutter_app/third_party/desktop_audio_capture/windows/CMakeLists.txt +105 -0
  206. package/flutter_app/third_party/desktop_audio_capture/windows/audio_capture_plugin.cpp +80 -0
  207. package/flutter_app/third_party/desktop_audio_capture/windows/audio_capture_plugin.h +31 -0
  208. package/flutter_app/third_party/desktop_audio_capture/windows/audio_capture_plugin_c_api.cpp +12 -0
  209. package/flutter_app/third_party/desktop_audio_capture/windows/include/audio_capture/audio_capture_plugin_c_api.h +23 -0
  210. package/flutter_app/third_party/desktop_audio_capture/windows/include/desktop_audio_capture/audio_capture_plugin.h +25 -0
  211. package/flutter_app/third_party/desktop_audio_capture/windows/mic_capture_plugin.cpp +1117 -0
  212. package/flutter_app/third_party/desktop_audio_capture/windows/mic_capture_plugin.h +115 -0
  213. package/flutter_app/third_party/desktop_audio_capture/windows/system_audio_capture_plugin.cpp +777 -0
  214. package/flutter_app/third_party/desktop_audio_capture/windows/system_audio_capture_plugin.h +87 -0
  215. package/flutter_app/third_party/flutter_secure_storage_linux/linux/CMakeLists.txt +30 -0
  216. package/flutter_app/third_party/flutter_secure_storage_linux/linux/flutter_secure_storage_linux_plugin.cc +215 -0
  217. package/flutter_app/third_party/flutter_secure_storage_linux/linux/include/flutter_secure_storage_linux/flutter_secure_storage_linux_plugin.h +27 -0
  218. package/flutter_app/third_party/flutter_secure_storage_linux/pubspec.yaml +20 -0
  219. package/flutter_app/tool/generate_desktop_branding.py +219 -0
  220. package/flutter_app/web/favicon.png +0 -0
  221. package/flutter_app/web/favicon.svg +12 -0
  222. package/flutter_app/web/icons/Icon-192.png +0 -0
  223. package/flutter_app/web/icons/Icon-512.png +0 -0
  224. package/flutter_app/web/icons/Icon-maskable-192.png +0 -0
  225. package/flutter_app/web/icons/Icon-maskable-512.png +0 -0
  226. package/flutter_app/web/index.html +40 -0
  227. package/flutter_app/web/manifest.json +35 -0
  228. package/flutter_app/windows/CMakeLists.txt +108 -0
  229. package/flutter_app/windows/flutter/CMakeLists.txt +109 -0
  230. package/flutter_app/windows/flutter/generated_plugin_registrant.cc +50 -0
  231. package/flutter_app/windows/flutter/generated_plugin_registrant.h +15 -0
  232. package/flutter_app/windows/flutter/generated_plugins.cmake +36 -0
  233. package/flutter_app/windows/runner/CMakeLists.txt +41 -0
  234. package/flutter_app/windows/runner/Runner.rc +121 -0
  235. package/flutter_app/windows/runner/flutter_window.cpp +533 -0
  236. package/flutter_app/windows/runner/flutter_window.h +37 -0
  237. package/flutter_app/windows/runner/main.cpp +53 -0
  238. package/flutter_app/windows/runner/resource.h +16 -0
  239. package/flutter_app/windows/runner/resources/app_icon.ico +0 -0
  240. package/flutter_app/windows/runner/runner.exe.manifest +14 -0
  241. package/flutter_app/windows/runner/utils.cpp +65 -0
  242. package/flutter_app/windows/runner/utils.h +19 -0
  243. package/flutter_app/windows/runner/win32_window.cpp +299 -0
  244. package/flutter_app/windows/runner/win32_window.h +102 -0
  245. package/lib/install_helpers.js +31 -0
  246. package/lib/manager.js +214 -7
  247. package/package.json +10 -5
  248. package/runtime/paths.js +136 -0
  249. package/server/config/analytics.js +30 -0
  250. package/server/db/database.js +167 -2
  251. package/server/guest_agent.js +15 -0
  252. package/server/http/middleware.js +5 -2
  253. package/server/http/routes.js +2 -0
  254. package/server/http/static.js +41 -1
  255. package/server/index.js +4 -14
  256. package/server/public/.last_build_id +1 -1
  257. package/server/public/assets/AssetManifest.bin +1 -1
  258. package/server/public/assets/AssetManifest.bin.json +1 -1
  259. package/server/public/assets/AssetManifest.json +1 -1
  260. package/server/public/assets/NOTICES +464 -1
  261. package/server/public/assets/assets/branding/onboarding_intro.mp4 +0 -0
  262. package/server/public/assets/fonts/MaterialIcons-Regular.otf +0 -0
  263. package/server/public/assets/packages/mixpanel_flutter/assets/mixpanel.js +3 -0
  264. package/server/public/canvaskit/wimp.wasm +0 -0
  265. package/server/public/flutter_bootstrap.js +2 -2
  266. package/server/public/index.html +1 -0
  267. package/server/public/main.dart.js +91177 -85587
  268. package/server/routes/agents.js +2 -1
  269. package/server/routes/android.js +1 -5
  270. package/server/routes/auth.js +26 -5
  271. package/server/routes/browser.js +1 -14
  272. package/server/routes/integrations.js +22 -1
  273. package/server/routes/memory.js +75 -3
  274. package/server/routes/runtime.js +14 -0
  275. package/server/routes/settings.js +85 -7
  276. package/server/routes/wearable.js +67 -0
  277. package/server/routes/widgets.js +4 -4
  278. package/server/services/ai/capabilityHealth.js +16 -35
  279. package/server/services/ai/deliverables/artifact_helpers.js +190 -0
  280. package/server/services/ai/deliverables/contracts.js +113 -0
  281. package/server/services/ai/deliverables/index.js +20 -0
  282. package/server/services/ai/deliverables/selector.js +94 -0
  283. package/server/services/ai/deliverables/validator.js +63 -0
  284. package/server/services/ai/deliverables/workflows.js +207 -0
  285. package/server/services/ai/engine.js +271 -8
  286. package/server/services/ai/integrated_tools/index.js +98 -0
  287. package/server/services/ai/integrated_tools/remotion.js +373 -0
  288. package/server/services/ai/integrated_tools/shared.js +204 -0
  289. package/server/services/ai/integrated_tools/slidev.js +207 -0
  290. package/server/services/ai/models.js +31 -37
  291. package/server/services/ai/providers/githubCopilot.js +97 -0
  292. package/server/services/ai/providers/openai.js +2 -1
  293. package/server/services/ai/providers/openaiCodex.js +31 -0
  294. package/server/services/ai/runEvents.js +100 -0
  295. package/server/services/ai/settings.js +20 -20
  296. package/server/services/ai/systemPrompt.js +6 -0
  297. package/server/services/ai/toolRunner.js +34 -6
  298. package/server/services/ai/toolSelector.js +54 -1
  299. package/server/services/ai/tools.js +150 -116
  300. package/server/services/cli/executor.js +4 -0
  301. package/server/services/desktop/screenRecorder.js +65 -9
  302. package/server/services/integrations/figma/provider.js +1 -0
  303. package/server/services/integrations/github/provider.js +3 -3
  304. package/server/services/integrations/google/provider.js +1 -0
  305. package/server/services/integrations/manager.js +25 -5
  306. package/server/services/integrations/microsoft/provider.js +1 -0
  307. package/server/services/integrations/oauth_provider.js +15 -5
  308. package/server/services/integrations/provider_config_store.js +22 -13
  309. package/server/services/integrations/registry.js +2 -4
  310. package/server/services/integrations/spotify/provider.js +1 -0
  311. package/server/services/integrations/trello/provider.js +842 -0
  312. package/server/services/manager.js +73 -155
  313. package/server/services/mcp/client.js +120 -23
  314. package/server/services/memory/manager.js +242 -26
  315. package/server/services/messaging/access_policy.js +10 -0
  316. package/server/services/messaging/manager.js +49 -0
  317. package/server/services/messaging/meshtastic.js +277 -0
  318. package/server/services/messaging/meshtastic_env.js +40 -0
  319. package/server/services/messaging/meshtastic_protocol.js +530 -0
  320. package/server/services/messaging/meshtastic_tcp_transport.js +25 -0
  321. package/server/services/runtime/backends/local-vm.js +20 -0
  322. package/server/services/runtime/manager.js +15 -23
  323. package/server/services/runtime/qemu.js +71 -20
  324. package/server/services/runtime/settings.js +6 -12
  325. package/server/services/runtime/validation.js +10 -1
  326. package/server/services/tasks/runtime.js +1 -1
  327. package/server/services/voice/openaiSpeech.js +6 -1
  328. package/server/services/voice/providers.js +142 -14
  329. package/server/services/voice/runtimeManager.js +156 -19
  330. package/server/services/voice/turnRunner.js +29 -9
  331. package/server/services/wearable/firmware_manifest.js +353 -0
  332. package/server/services/wearable/gateway.js +350 -0
  333. package/server/services/wearable/protocol.js +45 -0
  334. package/server/services/wearable/service.js +240 -0
  335. package/server/services/websocket.js +3 -1
  336. package/server/services/widgets/focus_widget.js +137 -0
  337. package/server/services/widgets/service.js +133 -2
  338. package/server/services/workspace/manager.js +301 -0
  339. package/server/utils/deployment.js +4 -3
  340. package/server/services/ai/providers/codex.js +0 -244
  341. package/server/services/ai/providers/copilot.js +0 -457
  342. package/server/services/integrations/codex/provider.js +0 -281
  343. package/server/services/integrations/home_assistant/provider.js +0 -630
  344. package/server/services/messaging/access_policy.test.js +0 -228
  345. package/server/services/runtime/backends/host.js +0 -37
package/.env.example CHANGED
@@ -4,7 +4,8 @@
4
4
 
5
5
  PORT=3333
6
6
  NODE_ENV=production
7
- SESSION_SECRET=change-this-to-a-random-secret-in-production
7
+ # Auto-generated on first start or setup if left blank.
8
+ SESSION_SECRET=
8
9
 
9
10
  # Optional: dedicated key for encrypting local at-rest secrets (for example API_KEYS.json).
10
11
  # If unset, encryption falls back to SESSION_SECRET.
@@ -23,7 +24,7 @@ NEOAGENT_DEPLOYMENT_MODE=self_hosted
23
24
  # Deployment profile:
24
25
  # private -> single-user / trusted host runtime
25
26
  # prod -> multi-user / isolated per-user VM runtime
26
- NEOAGENT_PROFILE=private
27
+ NEOAGENT_PROFILE=prod
27
28
 
28
29
  # VM runtime settings used by `prod`.
29
30
  # Set these before switching NEOAGENT_PROFILE=prod.
@@ -38,9 +39,8 @@ NEOAGENT_VM_BASE_IMAGE=
38
39
 
39
40
  # The guest image must boot a Linux guest that runs `npm run start:guest-agent`
40
41
  # and exposes the guest agent on port 8421.
41
- # Replace this placeholder before using NEOAGENT_PROFILE=prod.
42
- # Example: openssl rand -hex 32
43
- NEOAGENT_VM_GUEST_TOKEN=change-this-guest-token-before-prod
42
+ # Auto-generated on first start or setup if left blank.
43
+ NEOAGENT_VM_GUEST_TOKEN=
44
44
  NEOAGENT_VM_MEMORY_MB=4096
45
45
  NEOAGENT_VM_CPUS=2
46
46
 
@@ -51,6 +51,15 @@ NEOAGENT_RELEASE_CHANNEL=stable
51
51
  # Example: http://localhost:3333,https://yourdomain.com
52
52
  ALLOWED_ORIGINS=
53
53
 
54
+ ########################################
55
+ # Analytics
56
+ ########################################
57
+
58
+ # Mixpanel project token used by the Flutter app.
59
+ # Leave this blank to disable analytics, or set your own public project token.
60
+ # Keep the token below if you want to support the development of NeoAgent with anonymous usage analytics.
61
+ NEOAGENT_MIXPANEL_TOKEN=4a47ae6a05cf39a8faf0438a1200dde6
62
+
54
63
  ########################################
55
64
  # Service email
56
65
  ########################################
@@ -98,6 +107,18 @@ GOOGLE_AI_KEY=your-google-ai-key-here
98
107
  # • MiniMax-M2.7 via the Anthropic-compatible MiniMax endpoint
99
108
  MINIMAX_API_KEY=your-minimax-api-key-here
100
109
 
110
+ # GitHub Copilot OAuth token — used for:
111
+ # • Copilot-backed chat/coding models (gpt-5.3, gpt-4.1)
112
+ # Set via: neoagent login github-copilot
113
+ GITHUB_COPILOT_ACCESS_TOKEN=
114
+
115
+ # OpenAI Codex OAuth token — used for:
116
+ # • Codex-backed chat/coding models (gpt-5.3-codex, gpt-4.1-codex)
117
+ # Set via: neoagent login openai-codex
118
+ OPENAI_CODEX_ACCESS_TOKEN=
119
+ # Optional refresh token if your login flow returns it.
120
+ OPENAI_CODEX_REFRESH_TOKEN=
121
+
101
122
  ########################################
102
123
  # Provider endpoint overrides
103
124
  ########################################
@@ -105,6 +126,10 @@ MINIMAX_API_KEY=your-minimax-api-key-here
105
126
  # OPENAI_BASE_URL=https://your-openai-compatible-endpoint/v1
106
127
  # ANTHROPIC_BASE_URL=https://your-anthropic-compatible-endpoint
107
128
  # XAI_BASE_URL=https://api.x.ai/v1
129
+ # OPENAI_CODEX_BASE_URL=https://chatgpt.com/backend-api/codex
130
+ # OPENAI_CODEX_EDITOR_VERSION=vscode/1.99.0
131
+ # OPENAI_CODEX_EDITOR_PLUGIN_VERSION=neoagent/1.0.0
132
+ # OPENAI_CODEX_USER_AGENT=NeoAgent/1.0.0
108
133
 
109
134
  ########################################
110
135
  # Official integrations
@@ -152,6 +177,17 @@ GITHUB_OAUTH_CLIENT_ID=your-github-oauth-client-id
152
177
  GITHUB_OAUTH_CLIENT_SECRET=your-github-oauth-client-secret
153
178
  GITHUB_OAUTH_REDIRECT_URI=
154
179
 
180
+ # Spotify official integration OAuth client.
181
+ # Redirect URI should match <PUBLIC_URL>/api/integrations/oauth/callback.
182
+ SPOTIFY_OAUTH_CLIENT_ID=your-spotify-oauth-client-id
183
+ SPOTIFY_OAUTH_CLIENT_SECRET=your-spotify-oauth-client-secret
184
+ SPOTIFY_OAUTH_REDIRECT_URI=
185
+
186
+ # Trello official integration API key.
187
+ # This is used for Trello account connections in Official Integrations.
188
+ # Users still connect their own Trello account token per agent in the UI.
189
+ TRELLO_API_KEY=your-trello-api-key
190
+
155
191
  ########################################
156
192
  # Tools and media services
157
193
  ########################################
@@ -176,8 +212,13 @@ DEEPGRAM_LANGUAGE=multi
176
212
 
177
213
  OLLAMA_URL=http://localhost:11434
178
214
 
215
+ # Local screen OCR capture (macOS desktop context recorder).
216
+ # Set to false to disable background screen capture/OCR polling.
217
+ NEOAGENT_SCREEN_RECORDER_ENABLED=true
218
+
179
219
  ########################################
180
220
  # Messaging and voice integrations
181
221
  ########################################
182
222
 
223
+ MESHTASTIC_ENABLED=true
183
224
  TELNYX_WEBHOOK_TOKEN=
@@ -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
 
@@ -112,7 +112,7 @@ Runtime settings let operators choose where higher-risk work runs:
112
112
 
113
113
  | Profile | Runtime shape |
114
114
  |---|---|
115
- | `trusted-host` | CLI, browser, and Android tools run on the host |
115
+ | `trusted-host` | CLI and Android tools run on the host; browser runs in the VM or paired extension |
116
116
  | `secure-vm` | CLI, browser, and Android tools run through the local VM backend |
117
117
 
118
118
  Production policy can require the secure VM profile and a strong VM guest token.
@@ -18,6 +18,17 @@ AI provider credentials, OAuth client secrets, and deployment controls are not c
18
18
  | `NEOAGENT_DEPLOYMENT_MODE` | `self_hosted` | `self_hosted` enables in-app update controls; `managed` hides operator-only controls for SaaS deployments. |
19
19
  | `NEOAGENT_RELEASE_CHANNEL` | `stable` | Release track used by the self-hosted updater. |
20
20
 
21
+ ## Analytics
22
+
23
+ NeoAgent can send anonymous Mixpanel usage events from the Flutter client. The events cover app startup, section navigation, auth success, backend setup, onboarding dismissal, chat sends, recording start/stop, task runs, update checks, and update triggers. They do not include message content, credentials, or other app data.
24
+
25
+ Set `NEOAGENT_MIXPANEL_TOKEN` to your own public Mixpanel project token to enable analytics. Leave it blank to disable analytics entirely.
26
+ When analytics is enabled, the web client shows a dismissible cookie-consent banner until the user accepts or declines.
27
+
28
+ | Variable | Default | Description |
29
+ |---|---:|---|
30
+ | `NEOAGENT_MIXPANEL_TOKEN` | optional | Public Mixpanel project token used by the Flutter client. |
31
+
21
32
  ## Service Email
22
33
 
23
34
  Service email is optional. When `NEOAGENT_EMAIL_FROM` and `NEOAGENT_EMAIL_SMTP_HOST` are set, NeoAgent uses SMTP for account security flows: signup confirmation, password reset, unusual login notifications, password change notifications, and email change notifications. Confirmation and reset links use the same `PUBLIC_URL` base as the other server-generated links.
@@ -68,7 +79,7 @@ Recording insight generation is controlled in app AI settings with `auto_recordi
68
79
 
69
80
  ## Official Integrations
70
81
 
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.
82
+ 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
83
 
73
84
  All OAuth callbacks default to `PUBLIC_URL + /api/integrations/oauth/callback` unless you set a provider-specific redirect URI.
74
85
 
@@ -90,17 +101,14 @@ All OAuth callbacks default to `PUBLIC_URL + /api/integrations/oauth/callback` u
90
101
  | `FIGMA_OAUTH_CLIENT_ID` | Figma OAuth client ID |
91
102
  | `FIGMA_OAUTH_CLIENT_SECRET` | Figma OAuth client secret |
92
103
  | `FIGMA_OAUTH_REDIRECT_URI` | Optional Figma 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. |
104
+ | `TRELLO_API_KEY` | Optional Trello Power-Up API key. If set, users only need to provide their personal token in Official Integrations. |
98
105
  | `SPOTIFY_OAUTH_CLIENT_ID` | Spotify OAuth client ID |
99
106
  | `SPOTIFY_OAUTH_CLIENT_SECRET` | Spotify OAuth client secret |
100
107
  | `SPOTIFY_OAUTH_REDIRECT_URI` | Optional Spotify OAuth callback URL |
101
108
 
102
- Home Assistant no longer requires server-side setup. Each user can open Official Integrations, select Home Assistant, and enter their own base URL and OAuth app credentials.
103
- For safety, local/private Home Assistant targets are blocked by default unless `HOME_ASSISTANT_ALLOW_PRIVATE_BASE_URL=1` is set on the server.
109
+ 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.
110
+
111
+ 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.
104
112
 
105
113
  Weather integration uses Open-Meteo public endpoints and does not require OAuth environment variables.
106
114
 
@@ -122,11 +130,11 @@ Telnyx webhook verification is configured through the environment.
122
130
 
123
131
  ## Runtime Isolation
124
132
 
125
- Runtime profile and backend selection are stored in user settings, not normally in `.env`. The main profiles are `trusted-host` and `secure-vm`. They control whether CLI, browser, and Android tools run on the host or through the local VM backend.
133
+ Runtime profile and backend selection are stored in user settings, not normally in `.env`. The main profiles are `trusted-host` and `secure-vm`. CLI and Android tools may still follow the selected runtime profile, but browser control is always isolated: the non-extension browser backend runs in the VM, not on the host device.
126
134
 
127
135
  Production policy can require the VM backend. In that case, set a strong `NEOAGENT_VM_GUEST_TOKEN` of at least 32 characters and avoid placeholder values.
128
136
 
129
- The app exposes two browser backend choices: Cloud and Chrome extension. Cloud uses the current deployment policy, which means host browser control for trusted private installs and VM browser control for isolated production installs. Chrome extension uses the paired extension connection instead of the server-local Puppeteer browser. To install only the extension on a remote machine, open NeoAgent, download `/api/browser-extension/download`, unzip it, load the folder through `chrome://extensions` with Developer mode enabled, then pair after logging in to NeoAgent. Unpacked Chrome extensions cannot replace themselves automatically; use the extension popup's update check to compare against the server bundle, then download and reload the latest ZIP when needed.
137
+ The app exposes two browser backend choices: VM and Chrome extension. VM uses the local isolated runtime. Chrome extension uses the paired extension connection on the remote machine instead of the server-local browser. To install only the extension on a remote machine, open NeoAgent, download `/api/browser-extension/download`, unzip it, load the folder through `chrome://extensions` with Developer mode enabled, then pair after logging in to NeoAgent. Unpacked Chrome extensions cannot replace themselves automatically; use the extension popup's update check to compare against the server bundle, then download and reload the latest ZIP when needed.
130
138
 
131
139
  ## Secrets Guidance
132
140
 
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 for most providers. Home Assistant 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.
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,111 @@
1
+ import java.util.Properties
2
+
3
+ plugins {
4
+ id("com.android.application")
5
+ id("kotlin-android")
6
+ // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins.
7
+ id("dev.flutter.flutter-gradle-plugin")
8
+ }
9
+
10
+ val envReleaseKeystorePath = System.getenv("ANDROID_KEYSTORE_PATH")?.trim().orEmpty()
11
+ val envReleaseKeystorePassword = System.getenv("ANDROID_KEYSTORE_PASSWORD")?.trim().orEmpty()
12
+ val envReleaseKeyAlias = System.getenv("ANDROID_KEY_ALIAS")?.trim().orEmpty()
13
+ val envReleaseKeyPassword = System.getenv("ANDROID_KEY_PASSWORD")?.trim().orEmpty()
14
+ val keyPropertiesFile = rootProject.file("key.properties")
15
+ val keyProperties = Properties()
16
+ if (keyPropertiesFile.exists()) {
17
+ keyPropertiesFile.inputStream().use(keyProperties::load)
18
+ }
19
+ val repoReleaseKeystorePath = keyProperties.getProperty("storeFile", "").trim()
20
+ val repoReleaseKeystorePassword = keyProperties.getProperty("storePassword", "").trim()
21
+ val repoReleaseKeyAlias = keyProperties.getProperty("keyAlias", "").trim()
22
+ val repoReleaseKeyPassword = keyProperties.getProperty("keyPassword", "").trim()
23
+ val hasEnvReleaseSigning =
24
+ envReleaseKeystorePath.isNotEmpty() &&
25
+ envReleaseKeystorePassword.isNotEmpty() &&
26
+ envReleaseKeyAlias.isNotEmpty() &&
27
+ envReleaseKeyPassword.isNotEmpty()
28
+ val hasRepoReleaseSigning =
29
+ repoReleaseKeystorePath.isNotEmpty() &&
30
+ repoReleaseKeystorePassword.isNotEmpty() &&
31
+ repoReleaseKeyAlias.isNotEmpty() &&
32
+ repoReleaseKeyPassword.isNotEmpty()
33
+ val launcherBuild =
34
+ System.getenv("NEOAGENT_ANDROID_LAUNCHER_MODE")
35
+ ?.trim()
36
+ ?.lowercase() in setOf("1", "true", "yes", "on")
37
+ val applicationIdValue =
38
+ if (launcherBuild) "com.neoagent.flutter_app.launcher" else "com.neoagent.flutter_app"
39
+ val applicationLabelValue = if (launcherBuild) "NeoAgent Launcher" else "NeoAgent"
40
+ val androidAppModeValue = if (launcherBuild) "launcher" else "standard"
41
+ val launcherHomeEnabledValue = launcherBuild.toString()
42
+
43
+ android {
44
+ namespace = "com.neoagent.flutter_app"
45
+ compileSdk = flutter.compileSdkVersion
46
+ ndkVersion = flutter.ndkVersion
47
+
48
+ compileOptions {
49
+ sourceCompatibility = JavaVersion.VERSION_11
50
+ targetCompatibility = JavaVersion.VERSION_11
51
+ }
52
+
53
+ kotlinOptions {
54
+ jvmTarget = JavaVersion.VERSION_11.toString()
55
+ }
56
+
57
+ defaultConfig {
58
+ applicationId = applicationIdValue
59
+ minSdk = 26
60
+ targetSdk = flutter.targetSdkVersion
61
+ versionCode = flutter.versionCode
62
+ versionName = flutter.versionName
63
+ manifestPlaceholders["neoagentAppLabel"] = applicationLabelValue
64
+ manifestPlaceholders["neoagentAppMode"] = androidAppModeValue
65
+ manifestPlaceholders["neoagentLauncherHomeEnabled"] =
66
+ launcherHomeEnabledValue
67
+ }
68
+
69
+ signingConfigs {
70
+ if (hasEnvReleaseSigning) {
71
+ create("release") {
72
+ storeFile = file(envReleaseKeystorePath)
73
+ storePassword = envReleaseKeystorePassword
74
+ keyAlias = envReleaseKeyAlias
75
+ keyPassword = envReleaseKeyPassword
76
+ }
77
+ } else if (hasRepoReleaseSigning) {
78
+ create("release") {
79
+ storeFile = rootProject.file(repoReleaseKeystorePath)
80
+ storePassword = repoReleaseKeystorePassword
81
+ keyAlias = repoReleaseKeyAlias
82
+ keyPassword = repoReleaseKeyPassword
83
+ }
84
+ }
85
+ }
86
+
87
+ buildTypes {
88
+ release {
89
+ signingConfig =
90
+ if (hasEnvReleaseSigning || hasRepoReleaseSigning) {
91
+ signingConfigs.getByName("release")
92
+ } else {
93
+ signingConfigs.getByName("debug")
94
+ }
95
+ }
96
+ }
97
+ }
98
+
99
+ dependencies {
100
+ implementation("androidx.activity:activity-ktx:1.10.1")
101
+ implementation("androidx.car.app:app:1.7.0")
102
+ implementation("androidx.car.app:app-projected:1.7.0")
103
+ implementation("androidx.health.connect:connect-client:1.1.0")
104
+ implementation("androidx.security:security-crypto:1.1.0")
105
+ implementation("androidx.work:work-runtime-ktx:2.10.1")
106
+ implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.9.0")
107
+ }
108
+
109
+ flutter {
110
+ source = "../.."
111
+ }
@@ -0,0 +1,7 @@
1
+ <manifest xmlns:android="http://schemas.android.com/apk/res/android">
2
+ <!-- The INTERNET permission is required for development. Specifically,
3
+ the Flutter tool needs it to communicate with the running application
4
+ to allow setting breakpoints, to provide hot reload, etc.
5
+ -->
6
+ <uses-permission android:name="android.permission.INTERNET"/>
7
+ </manifest>
@@ -0,0 +1,171 @@
1
+ <manifest xmlns:android="http://schemas.android.com/apk/res/android"
2
+ xmlns:tools="http://schemas.android.com/tools">
3
+ <uses-permission android:name="android.permission.INTERNET" />
4
+ <uses-permission android:name="android.permission.MANAGE_OWN_CALLS" />
5
+ <uses-permission android:name="android.permission.CAMERA" />
6
+ <uses-permission android:name="android.permission.RECORD_AUDIO" />
7
+ <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
8
+ <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
9
+ <uses-permission android:name="android.permission.FOREGROUND_SERVICE_DATA_SYNC" />
10
+ <uses-permission android:name="android.permission.FOREGROUND_SERVICE_MICROPHONE" />
11
+ <uses-permission android:name="android.permission.health.READ_STEPS" />
12
+ <uses-permission android:name="android.permission.health.READ_HEART_RATE" />
13
+ <uses-permission android:name="android.permission.health.READ_SLEEP" />
14
+ <uses-permission android:name="android.permission.health.READ_EXERCISE" />
15
+ <uses-permission android:name="android.permission.health.READ_WEIGHT" />
16
+ <uses-permission android:name="android.permission.health.READ_HEALTH_DATA_IN_BACKGROUND" />
17
+ <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
18
+ <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
19
+ <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
20
+ <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
21
+
22
+ <queries>
23
+ <package android:name="com.google.android.apps.healthdata" />
24
+ <intent>
25
+ <action android:name="android.intent.action.PROCESS_TEXT"/>
26
+ <data android:mimeType="text/plain"/>
27
+ </intent>
28
+ </queries>
29
+
30
+ <application
31
+ android:label="${neoagentAppLabel}"
32
+ android:name="${applicationName}"
33
+ android:icon="@mipmap/ic_launcher"
34
+ android:usesCleartextTraffic="true">
35
+ <meta-data
36
+ android:name="com.google.android.gms.car.application"
37
+ android:resource="@xml/automotive_app_desc" />
38
+ <activity
39
+ android:name=".MainActivity"
40
+ android:exported="true"
41
+ android:launchMode="singleTop"
42
+ android:taskAffinity=""
43
+ android:theme="@style/LaunchTheme"
44
+ android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
45
+ android:hardwareAccelerated="true"
46
+ android:windowSoftInputMode="adjustResize">
47
+ <!-- Specifies an Android theme to apply to this Activity as soon as
48
+ the Android process has started. This theme is visible to the user
49
+ while the Flutter UI initializes. After that, this theme continues
50
+ to determine the Window background behind the Flutter UI. -->
51
+ <meta-data
52
+ android:name="io.flutter.embedding.android.NormalTheme"
53
+ android:resource="@style/NormalTheme"
54
+ />
55
+ <intent-filter>
56
+ <action android:name="android.intent.action.MAIN"/>
57
+ <category android:name="android.intent.category.LAUNCHER"/>
58
+ </intent-filter>
59
+ </activity>
60
+ <provider
61
+ android:name="androidx.core.content.FileProvider"
62
+ android:authorities="${applicationId}.fileprovider"
63
+ android:exported="false"
64
+ android:grantUriPermissions="true">
65
+ <meta-data
66
+ android:name="android.support.FILE_PROVIDER_PATHS"
67
+ android:resource="@xml/file_paths" />
68
+ </provider>
69
+ <activity-alias
70
+ android:name=".LauncherHomeAlias"
71
+ android:enabled="${neoagentLauncherHomeEnabled}"
72
+ android:exported="true"
73
+ android:label="${neoagentAppLabel}"
74
+ android:targetActivity=".MainActivity">
75
+ <intent-filter>
76
+ <action android:name="android.intent.action.MAIN" />
77
+ <category android:name="android.intent.category.HOME" />
78
+ <category android:name="android.intent.category.DEFAULT" />
79
+ </intent-filter>
80
+ </activity-alias>
81
+ <activity
82
+ android:name=".health.PermissionsRationaleActivity"
83
+ android:exported="false" />
84
+ <activity
85
+ android:name=".widgets.WidgetConfigActivity"
86
+ android:exported="true"
87
+ android:theme="@style/LaunchTheme" />
88
+ <activity-alias
89
+ android:name=".ViewPermissionUsageActivity"
90
+ android:exported="true"
91
+ android:permission="android.permission.START_VIEW_PERMISSION_USAGE"
92
+ android:targetActivity=".health.PermissionsRationaleActivity">
93
+ <intent-filter>
94
+ <action android:name="android.intent.action.VIEW_PERMISSION_USAGE" />
95
+ <category android:name="android.intent.category.HEALTH_PERMISSIONS" />
96
+ </intent-filter>
97
+ </activity-alias>
98
+ <service
99
+ android:name="androidx.work.impl.foreground.SystemForegroundService"
100
+ android:foregroundServiceType="dataSync"
101
+ tools:node="merge" />
102
+ <service
103
+ android:name=".telecom.NeoAgentConnectionService"
104
+ android:exported="true"
105
+ android:permission="android.permission.BIND_TELECOM_CONNECTION_SERVICE">
106
+ <intent-filter>
107
+ <action android:name="android.telecom.ConnectionService" />
108
+ </intent-filter>
109
+ </service>
110
+
111
+ <service
112
+ android:name=".auto.NeoAgentCarAppService"
113
+ android:exported="true">
114
+ <intent-filter>
115
+ <action android:name="androidx.car.app.CarAppService" />
116
+ <category android:name="androidx.car.app.category.IOT" />
117
+ </intent-filter>
118
+ <meta-data
119
+ android:name="androidx.car.app.minCarApiLevel"
120
+ android:value="1" />
121
+ </service>
122
+ <service
123
+ android:name=".recording.RecordingForegroundService"
124
+ android:exported="false"
125
+ android:foregroundServiceType="microphone|connectedDevice" />
126
+ <receiver
127
+ android:name=".recording.RecordingBootReceiver"
128
+ android:enabled="true"
129
+ android:exported="false">
130
+ <intent-filter>
131
+ <action android:name="android.intent.action.BOOT_COMPLETED" />
132
+ </intent-filter>
133
+ </receiver>
134
+ <receiver
135
+ android:name=".widgets.AiHomeWidgetProvider"
136
+ android:exported="true">
137
+ <intent-filter>
138
+ <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
139
+ </intent-filter>
140
+ <meta-data
141
+ android:name="android.appwidget.provider"
142
+ android:resource="@xml/neoagent_ai_widget_info" />
143
+ </receiver>
144
+ <receiver
145
+ android:name=".widgets.VoiceLaunchWidgetProvider"
146
+ android:exported="true">
147
+ <intent-filter>
148
+ <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
149
+ </intent-filter>
150
+ <meta-data
151
+ android:name="android.appwidget.provider"
152
+ android:resource="@xml/neoagent_voice_widget_info" />
153
+ </receiver>
154
+ <meta-data
155
+ android:name="com.neoagent.APP_MODE"
156
+ android:value="${neoagentAppMode}" />
157
+ <meta-data
158
+ android:name="flutterEmbedding"
159
+ android:value="2" />
160
+
161
+ <!-- Notification Listener Service for Interception -->
162
+ <service android:name="notification.listener.service.NotificationListener"
163
+ android:label="NeoAgent Notifications"
164
+ android:permission="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE"
165
+ android:exported="true">
166
+ <intent-filter>
167
+ <action android:name="android.service.notification.NotificationListenerService" />
168
+ </intent-filter>
169
+ </service>
170
+ </application>
171
+ </manifest>