neoagent 2.3.1-beta.11 → 2.3.1-beta.110

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 (390) hide show
  1. package/.env.example +53 -5
  2. package/README.md +16 -7
  3. package/com.neoagent.plist +1 -1
  4. package/docs/automation.md +82 -41
  5. package/docs/capabilities.md +85 -89
  6. package/docs/configuration.md +87 -94
  7. package/docs/getting-started.md +46 -27
  8. package/docs/hardware.md +1 -1
  9. package/docs/index.md +24 -30
  10. package/docs/integrations.md +46 -64
  11. package/docs/migration.md +41 -146
  12. package/docs/operations.md +23 -20
  13. package/docs/skills.md +20 -20
  14. package/docs/why-neoagent.md +15 -13
  15. package/extensions/chrome-browser/background.mjs +10 -2
  16. package/flutter_app/.metadata +42 -0
  17. package/flutter_app/DESIGN_SYSTEM.md +166 -0
  18. package/flutter_app/README.md +21 -0
  19. package/flutter_app/analysis_options.yaml +32 -0
  20. package/flutter_app/android/app/build.gradle.kts +111 -0
  21. package/flutter_app/android/app/src/debug/AndroidManifest.xml +7 -0
  22. package/flutter_app/android/app/src/main/AndroidManifest.xml +185 -0
  23. package/flutter_app/android/app/src/main/kotlin/com/neoagent/flutter_app/MainActivity.kt +888 -0
  24. package/flutter_app/android/app/src/main/kotlin/com/neoagent/flutter_app/auto/NeoAgentCarAppService.kt +114 -0
  25. package/flutter_app/android/app/src/main/kotlin/com/neoagent/flutter_app/health/HealthConnectGateway.kt +280 -0
  26. package/flutter_app/android/app/src/main/kotlin/com/neoagent/flutter_app/health/HealthSyncNotifications.kt +113 -0
  27. package/flutter_app/android/app/src/main/kotlin/com/neoagent/flutter_app/health/HealthSyncPayload.kt +57 -0
  28. package/flutter_app/android/app/src/main/kotlin/com/neoagent/flutter_app/health/HealthSyncScheduler.kt +78 -0
  29. package/flutter_app/android/app/src/main/kotlin/com/neoagent/flutter_app/health/HealthSyncWorker.kt +253 -0
  30. package/flutter_app/android/app/src/main/kotlin/com/neoagent/flutter_app/health/PermissionsRationaleActivity.kt +46 -0
  31. package/flutter_app/android/app/src/main/kotlin/com/neoagent/flutter_app/recording/RecordingBootReceiver.kt +21 -0
  32. package/flutter_app/android/app/src/main/kotlin/com/neoagent/flutter_app/recording/RecordingForegroundService.kt +586 -0
  33. package/flutter_app/android/app/src/main/kotlin/com/neoagent/flutter_app/recording/RecordingStateStore.kt +78 -0
  34. package/flutter_app/android/app/src/main/kotlin/com/neoagent/flutter_app/recording/RecordingUploadClient.kt +104 -0
  35. package/flutter_app/android/app/src/main/kotlin/com/neoagent/flutter_app/telecom/NeoAgentConnection.kt +118 -0
  36. package/flutter_app/android/app/src/main/kotlin/com/neoagent/flutter_app/telecom/NeoAgentConnectionService.kt +86 -0
  37. package/flutter_app/android/app/src/main/kotlin/com/neoagent/flutter_app/widgets/AiHomeWidgetProvider.kt +457 -0
  38. package/flutter_app/android/app/src/main/kotlin/com/neoagent/flutter_app/widgets/AiWidgetStore.kt +194 -0
  39. package/flutter_app/android/app/src/main/kotlin/com/neoagent/flutter_app/widgets/VoiceLaunchWidgetProvider.kt +67 -0
  40. package/flutter_app/android/app/src/main/kotlin/com/neoagent/flutter_app/widgets/WidgetConfigActivity.kt +228 -0
  41. package/flutter_app/android/app/src/main/kotlin/com/neoagent/flutter_app/widgets/WidgetSyncScheduler.kt +72 -0
  42. package/flutter_app/android/app/src/main/kotlin/com/neoagent/flutter_app/widgets/WidgetSyncWorker.kt +186 -0
  43. package/flutter_app/android/app/src/main/kotlin/com/neoagent/flutter_app/widgets/WidgetTaskRunWorker.kt +210 -0
  44. package/flutter_app/android/app/src/main/res/drawable/launch_background.xml +12 -0
  45. package/flutter_app/android/app/src/main/res/drawable/neoagent_ai_widget_bg.xml +11 -0
  46. package/flutter_app/android/app/src/main/res/drawable/neoagent_ai_widget_task_bg.xml +8 -0
  47. package/flutter_app/android/app/src/main/res/drawable-v21/launch_background.xml +12 -0
  48. package/flutter_app/android/app/src/main/res/layout/neoagent_ai_widget.xml +138 -0
  49. package/flutter_app/android/app/src/main/res/layout/neoagent_ai_widget_task_row.xml +52 -0
  50. package/flutter_app/android/app/src/main/res/layout/neoagent_voice_widget.xml +49 -0
  51. package/flutter_app/android/app/src/main/res/mipmap-hdpi/ic_launcher.png +0 -0
  52. package/flutter_app/android/app/src/main/res/mipmap-mdpi/ic_launcher.png +0 -0
  53. package/flutter_app/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png +0 -0
  54. package/flutter_app/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png +0 -0
  55. package/flutter_app/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png +0 -0
  56. package/flutter_app/android/app/src/main/res/values/arrays.xml +8 -0
  57. package/flutter_app/android/app/src/main/res/values/strings.xml +12 -0
  58. package/flutter_app/android/app/src/main/res/values/styles.xml +18 -0
  59. package/flutter_app/android/app/src/main/res/values-night/styles.xml +18 -0
  60. package/flutter_app/android/app/src/main/res/xml/automotive_app_desc.xml +4 -0
  61. package/flutter_app/android/app/src/main/res/xml/file_paths.xml +6 -0
  62. package/flutter_app/android/app/src/main/res/xml/neoagent_ai_widget_info.xml +12 -0
  63. package/flutter_app/android/app/src/main/res/xml/neoagent_voice_widget_info.xml +12 -0
  64. package/flutter_app/android/app/src/profile/AndroidManifest.xml +7 -0
  65. package/flutter_app/android/build.gradle.kts +24 -0
  66. package/flutter_app/android/ci-release.keystore +0 -0
  67. package/flutter_app/android/gradle/wrapper/gradle-wrapper.properties +5 -0
  68. package/flutter_app/android/gradle.properties +3 -0
  69. package/flutter_app/android/key.properties +4 -0
  70. package/flutter_app/android/settings.gradle.kts +26 -0
  71. package/flutter_app/assets/branding/app_icon_1024.png +0 -0
  72. package/flutter_app/assets/branding/app_icon_128.png +0 -0
  73. package/flutter_app/assets/branding/app_icon_192.png +0 -0
  74. package/flutter_app/assets/branding/app_icon_256.png +0 -0
  75. package/flutter_app/assets/branding/app_icon_32.png +0 -0
  76. package/flutter_app/assets/branding/app_icon_512.png +0 -0
  77. package/flutter_app/assets/branding/app_icon_64.png +0 -0
  78. package/flutter_app/assets/branding/onboarding_intro.mp4 +0 -0
  79. package/flutter_app/assets/branding/tray_icon_template.png +0 -0
  80. package/flutter_app/lib/features/location/location_service.dart +117 -0
  81. package/flutter_app/lib/features/notifications/notification_interceptor.dart +73 -0
  82. package/flutter_app/lib/features/onboarding/onboarding_chrome.dart +571 -0
  83. package/flutter_app/lib/features/onboarding/onboarding_messaging_step.dart +275 -0
  84. package/flutter_app/lib/features/onboarding/onboarding_model_step.dart +366 -0
  85. package/flutter_app/lib/features/onboarding/onboarding_shell.dart +57 -0
  86. package/flutter_app/lib/features/onboarding/onboarding_video_step.dart +218 -0
  87. package/flutter_app/lib/features/onboarding/onboarding_welcome_step.dart +46 -0
  88. package/flutter_app/lib/main.dart +107 -0
  89. package/flutter_app/lib/main_account_settings.dart +1340 -0
  90. package/flutter_app/lib/main_admin.dart +900 -0
  91. package/flutter_app/lib/main_app_shell.dart +2162 -0
  92. package/flutter_app/lib/main_chat.dart +3902 -0
  93. package/flutter_app/lib/main_controller.dart +7229 -0
  94. package/flutter_app/lib/main_devices.dart +1738 -0
  95. package/flutter_app/lib/main_integrations.dart +917 -0
  96. package/flutter_app/lib/main_launcher.dart +959 -0
  97. package/flutter_app/lib/main_launcher_entry.dart +5 -0
  98. package/flutter_app/lib/main_models.dart +3807 -0
  99. package/flutter_app/lib/main_navigation.dart +206 -0
  100. package/flutter_app/lib/main_operations.dart +5249 -0
  101. package/flutter_app/lib/main_recordings.dart +920 -0
  102. package/flutter_app/lib/main_runtime.dart +869 -0
  103. package/flutter_app/lib/main_settings.dart +2288 -0
  104. package/flutter_app/lib/main_shared.dart +3393 -0
  105. package/flutter_app/lib/main_spacing.dart +33 -0
  106. package/flutter_app/lib/main_theme.dart +276 -0
  107. package/flutter_app/lib/main_unified.dart +388 -0
  108. package/flutter_app/lib/main_voice_assistant.dart +957 -0
  109. package/flutter_app/lib/src/analytics_service.dart +294 -0
  110. package/flutter_app/lib/src/android_apk_drop_zone.dart +32 -0
  111. package/flutter_app/lib/src/android_apk_drop_zone_stub.dart +16 -0
  112. package/flutter_app/lib/src/android_apk_drop_zone_web.dart +348 -0
  113. package/flutter_app/lib/src/android_app_installer.dart +22 -0
  114. package/flutter_app/lib/src/android_app_installer_io.dart +122 -0
  115. package/flutter_app/lib/src/android_app_installer_stub.dart +21 -0
  116. package/flutter_app/lib/src/android_auto_bridge.dart +59 -0
  117. package/flutter_app/lib/src/android_launcher_bridge.dart +239 -0
  118. package/flutter_app/lib/src/app_launch_bridge.dart +58 -0
  119. package/flutter_app/lib/src/app_release_updater.dart +511 -0
  120. package/flutter_app/lib/src/backend_client.dart +1870 -0
  121. package/flutter_app/lib/src/desktop_companion.dart +2 -0
  122. package/flutter_app/lib/src/desktop_companion_actions.dart +586 -0
  123. package/flutter_app/lib/src/desktop_companion_io.dart +538 -0
  124. package/flutter_app/lib/src/desktop_companion_stub.dart +59 -0
  125. package/flutter_app/lib/src/desktop_native_bridge.dart +91 -0
  126. package/flutter_app/lib/src/desktop_screen_capture.dart +21 -0
  127. package/flutter_app/lib/src/desktop_screen_capture_io.dart +142 -0
  128. package/flutter_app/lib/src/desktop_screen_capture_stub.dart +12 -0
  129. package/flutter_app/lib/src/diagnostics_logger.dart +119 -0
  130. package/flutter_app/lib/src/health_bridge.dart +136 -0
  131. package/flutter_app/lib/src/live_voice_capture.dart +85 -0
  132. package/flutter_app/lib/src/messaging_access_summary.dart +46 -0
  133. package/flutter_app/lib/src/network/app_http_client.dart +53 -0
  134. package/flutter_app/lib/src/network/app_http_client_factory.dart +6 -0
  135. package/flutter_app/lib/src/network/app_http_client_io.dart +138 -0
  136. package/flutter_app/lib/src/network/app_http_client_stub.dart +3 -0
  137. package/flutter_app/lib/src/network/app_http_client_web.dart +94 -0
  138. package/flutter_app/lib/src/oauth_launcher.dart +33 -0
  139. package/flutter_app/lib/src/oauth_launcher_io.dart +95 -0
  140. package/flutter_app/lib/src/oauth_launcher_stub.dart +33 -0
  141. package/flutter_app/lib/src/oauth_launcher_web.dart +107 -0
  142. package/flutter_app/lib/src/recording_bridge.dart +232 -0
  143. package/flutter_app/lib/src/recording_bridge_io.dart +1019 -0
  144. package/flutter_app/lib/src/recording_bridge_stub.dart +120 -0
  145. package/flutter_app/lib/src/recording_bridge_web.dart +689 -0
  146. package/flutter_app/lib/src/recording_payloads.dart +86 -0
  147. package/flutter_app/lib/src/theme/palette.dart +81 -0
  148. package/flutter_app/lib/src/web_app_update_monitor.dart +17 -0
  149. package/flutter_app/lib/src/web_app_update_monitor_stub.dart +24 -0
  150. package/flutter_app/lib/src/web_app_update_monitor_web.dart +123 -0
  151. package/flutter_app/lib/src/widget_bridge.dart +49 -0
  152. package/flutter_app/linux/CMakeLists.txt +128 -0
  153. package/flutter_app/linux/flutter/CMakeLists.txt +88 -0
  154. package/flutter_app/linux/flutter/generated_plugin_registrant.cc +47 -0
  155. package/flutter_app/linux/flutter/generated_plugin_registrant.h +15 -0
  156. package/flutter_app/linux/flutter/generated_plugins.cmake +32 -0
  157. package/flutter_app/linux/runner/CMakeLists.txt +26 -0
  158. package/flutter_app/linux/runner/main.cc +6 -0
  159. package/flutter_app/linux/runner/my_application.cc +144 -0
  160. package/flutter_app/linux/runner/my_application.h +18 -0
  161. package/flutter_app/linux/runner/resources/app_icon.png +0 -0
  162. package/flutter_app/macos/Flutter/Flutter-Debug.xcconfig +2 -0
  163. package/flutter_app/macos/Flutter/Flutter-Release.xcconfig +2 -0
  164. package/flutter_app/macos/Flutter/GeneratedPluginRegistrant.swift +48 -0
  165. package/flutter_app/macos/Podfile +42 -0
  166. package/flutter_app/macos/Podfile.lock +87 -0
  167. package/flutter_app/macos/Runner/AppDelegate.swift +576 -0
  168. package/flutter_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json +68 -0
  169. package/flutter_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png +0 -0
  170. package/flutter_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png +0 -0
  171. package/flutter_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png +0 -0
  172. package/flutter_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png +0 -0
  173. package/flutter_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png +0 -0
  174. package/flutter_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png +0 -0
  175. package/flutter_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png +0 -0
  176. package/flutter_app/macos/Runner/Base.lproj/MainMenu.xib +342 -0
  177. package/flutter_app/macos/Runner/Configs/AppInfo.xcconfig +14 -0
  178. package/flutter_app/macos/Runner/Configs/Debug.xcconfig +2 -0
  179. package/flutter_app/macos/Runner/Configs/Release.xcconfig +2 -0
  180. package/flutter_app/macos/Runner/Configs/Warnings.xcconfig +13 -0
  181. package/flutter_app/macos/Runner/DebugProfile.entitlements +16 -0
  182. package/flutter_app/macos/Runner/Info.plist +36 -0
  183. package/flutter_app/macos/Runner/MainFlutterWindow.swift +19 -0
  184. package/flutter_app/macos/Runner/Release.entitlements +12 -0
  185. package/flutter_app/macos/Runner.xcodeproj/project.pbxproj +801 -0
  186. package/flutter_app/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
  187. package/flutter_app/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +99 -0
  188. package/flutter_app/macos/Runner.xcworkspace/contents.xcworkspacedata +10 -0
  189. package/flutter_app/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
  190. package/flutter_app/macos/RunnerTests/RunnerTests.swift +12 -0
  191. package/flutter_app/patch_strings.py +12 -0
  192. package/flutter_app/pubspec.lock +1256 -0
  193. package/flutter_app/pubspec.yaml +59 -0
  194. package/flutter_app/third_party/desktop_audio_capture/LICENSE +21 -0
  195. package/flutter_app/third_party/desktop_audio_capture/README.md +262 -0
  196. package/flutter_app/third_party/desktop_audio_capture/lib/audio_capture.dart +65 -0
  197. package/flutter_app/third_party/desktop_audio_capture/lib/config/mic_audio_config.dart +153 -0
  198. package/flutter_app/third_party/desktop_audio_capture/lib/config/system_adudio_config.dart +110 -0
  199. package/flutter_app/third_party/desktop_audio_capture/lib/mic/mic_audio_capture.dart +461 -0
  200. package/flutter_app/third_party/desktop_audio_capture/lib/model/audio_status.dart +91 -0
  201. package/flutter_app/third_party/desktop_audio_capture/lib/model/decibel_data.dart +106 -0
  202. package/flutter_app/third_party/desktop_audio_capture/lib/model/input_device_type.dart +219 -0
  203. package/flutter_app/third_party/desktop_audio_capture/lib/system/system_audio_capture.dart +336 -0
  204. package/flutter_app/third_party/desktop_audio_capture/linux/CMakeLists.txt +101 -0
  205. package/flutter_app/third_party/desktop_audio_capture/linux/audio_capture_plugin.cc +692 -0
  206. package/flutter_app/third_party/desktop_audio_capture/linux/include/audio_capture/audio_capture_plugin.h +35 -0
  207. package/flutter_app/third_party/desktop_audio_capture/linux/include/audio_capture/mic_capture_plugin.h +36 -0
  208. package/flutter_app/third_party/desktop_audio_capture/linux/include/desktop_audio_capture/audio_capture_plugin.h +32 -0
  209. package/flutter_app/third_party/desktop_audio_capture/linux/include/desktop_audio_capture/mic_capture_plugin.h +32 -0
  210. package/flutter_app/third_party/desktop_audio_capture/linux/mic_capture_plugin.cc +878 -0
  211. package/flutter_app/third_party/desktop_audio_capture/macos/Classes/AudioCapturePlugin.swift +27 -0
  212. package/flutter_app/third_party/desktop_audio_capture/macos/Classes/MicCapturePlugin.swift +1172 -0
  213. package/flutter_app/third_party/desktop_audio_capture/macos/Classes/SystemCapturePlugin.swift +655 -0
  214. package/flutter_app/third_party/desktop_audio_capture/macos/Resources/PrivacyInfo.xcprivacy +12 -0
  215. package/flutter_app/third_party/desktop_audio_capture/macos/desktop_audio_capture.podspec +30 -0
  216. package/flutter_app/third_party/desktop_audio_capture/pubspec.yaml +87 -0
  217. package/flutter_app/third_party/desktop_audio_capture/windows/CMakeLists.txt +105 -0
  218. package/flutter_app/third_party/desktop_audio_capture/windows/audio_capture_plugin.cpp +80 -0
  219. package/flutter_app/third_party/desktop_audio_capture/windows/audio_capture_plugin.h +31 -0
  220. package/flutter_app/third_party/desktop_audio_capture/windows/audio_capture_plugin_c_api.cpp +12 -0
  221. package/flutter_app/third_party/desktop_audio_capture/windows/include/audio_capture/audio_capture_plugin_c_api.h +23 -0
  222. package/flutter_app/third_party/desktop_audio_capture/windows/include/desktop_audio_capture/audio_capture_plugin.h +25 -0
  223. package/flutter_app/third_party/desktop_audio_capture/windows/mic_capture_plugin.cpp +1117 -0
  224. package/flutter_app/third_party/desktop_audio_capture/windows/mic_capture_plugin.h +115 -0
  225. package/flutter_app/third_party/desktop_audio_capture/windows/system_audio_capture_plugin.cpp +777 -0
  226. package/flutter_app/third_party/desktop_audio_capture/windows/system_audio_capture_plugin.h +87 -0
  227. package/flutter_app/third_party/flutter_secure_storage_linux/linux/CMakeLists.txt +30 -0
  228. package/flutter_app/third_party/flutter_secure_storage_linux/linux/flutter_secure_storage_linux_plugin.cc +215 -0
  229. package/flutter_app/third_party/flutter_secure_storage_linux/linux/include/flutter_secure_storage_linux/flutter_secure_storage_linux_plugin.h +27 -0
  230. package/flutter_app/third_party/flutter_secure_storage_linux/pubspec.yaml +20 -0
  231. package/flutter_app/tool/generate_desktop_branding.py +219 -0
  232. package/flutter_app/web/favicon.png +0 -0
  233. package/flutter_app/web/favicon.svg +12 -0
  234. package/flutter_app/web/icons/Icon-192.png +0 -0
  235. package/flutter_app/web/icons/Icon-512.png +0 -0
  236. package/flutter_app/web/icons/Icon-maskable-192.png +0 -0
  237. package/flutter_app/web/icons/Icon-maskable-512.png +0 -0
  238. package/flutter_app/web/index.html +39 -0
  239. package/flutter_app/web/manifest.json +35 -0
  240. package/flutter_app/windows/CMakeLists.txt +108 -0
  241. package/flutter_app/windows/flutter/CMakeLists.txt +109 -0
  242. package/flutter_app/windows/flutter/generated_plugin_registrant.cc +50 -0
  243. package/flutter_app/windows/flutter/generated_plugin_registrant.h +15 -0
  244. package/flutter_app/windows/flutter/generated_plugins.cmake +36 -0
  245. package/flutter_app/windows/runner/CMakeLists.txt +41 -0
  246. package/flutter_app/windows/runner/Runner.rc +121 -0
  247. package/flutter_app/windows/runner/flutter_window.cpp +533 -0
  248. package/flutter_app/windows/runner/flutter_window.h +37 -0
  249. package/flutter_app/windows/runner/main.cpp +53 -0
  250. package/flutter_app/windows/runner/resource.h +16 -0
  251. package/flutter_app/windows/runner/resources/app_icon.ico +0 -0
  252. package/flutter_app/windows/runner/runner.exe.manifest +14 -0
  253. package/flutter_app/windows/runner/utils.cpp +65 -0
  254. package/flutter_app/windows/runner/utils.h +19 -0
  255. package/flutter_app/windows/runner/win32_window.cpp +299 -0
  256. package/flutter_app/windows/runner/win32_window.h +102 -0
  257. package/lib/install_helpers.js +31 -0
  258. package/lib/manager.js +578 -122
  259. package/package.json +10 -3
  260. package/runtime/paths.js +137 -0
  261. package/server/config/analytics.js +30 -0
  262. package/server/db/database.js +296 -22
  263. package/server/guest-agent.android.package.json +13 -0
  264. package/server/guest-agent.browser.package.json +14 -0
  265. package/server/guest_agent.js +98 -52
  266. package/server/http/middleware.js +5 -2
  267. package/server/http/routes.js +3 -0
  268. package/server/http/static.js +41 -1
  269. package/server/index.js +15 -16
  270. package/server/public/.last_build_id +1 -1
  271. package/server/public/assets/AssetManifest.bin +1 -1
  272. package/server/public/assets/AssetManifest.bin.json +1 -1
  273. package/server/public/assets/AssetManifest.json +1 -1
  274. package/server/public/assets/NOTICES +644 -155
  275. package/server/public/assets/assets/branding/onboarding_intro.mp4 +0 -0
  276. package/server/public/assets/fonts/MaterialIcons-Regular.otf +0 -0
  277. package/server/public/assets/packages/mixpanel_flutter/assets/mixpanel.js +3 -0
  278. package/server/public/canvaskit/wimp.wasm +0 -0
  279. package/server/public/flutter_bootstrap.js +2 -2
  280. package/server/public/main.dart.js +96067 -88139
  281. package/server/routes/account.js +26 -1
  282. package/server/routes/agents.js +6 -2
  283. package/server/routes/android.js +22 -6
  284. package/server/routes/auth.js +25 -5
  285. package/server/routes/browser.js +47 -13
  286. package/server/routes/integrations.js +22 -1
  287. package/server/routes/memory.js +168 -6
  288. package/server/routes/runtime.js +14 -0
  289. package/server/routes/settings.js +102 -24
  290. package/server/routes/skills.js +12 -0
  291. package/server/routes/social_video.js +66 -0
  292. package/server/routes/tasks.js +22 -2
  293. package/server/routes/triggers.js +44 -35
  294. package/server/routes/wearable.js +67 -0
  295. package/server/routes/widgets.js +4 -4
  296. package/server/services/ai/capabilityHealth.js +23 -51
  297. package/server/services/ai/compaction.js +1 -1
  298. package/server/services/ai/deliverables/artifact_helpers.js +190 -0
  299. package/server/services/ai/deliverables/contracts.js +113 -0
  300. package/server/services/ai/deliverables/index.js +20 -0
  301. package/server/services/ai/deliverables/selector.js +94 -0
  302. package/server/services/ai/deliverables/validator.js +63 -0
  303. package/server/services/ai/deliverables/workflows.js +207 -0
  304. package/server/services/ai/engine.js +363 -27
  305. package/server/services/ai/hooks.js +127 -0
  306. package/server/services/ai/integrated_tools/index.js +98 -0
  307. package/server/services/ai/integrated_tools/remotion.js +373 -0
  308. package/server/services/ai/integrated_tools/shared.js +204 -0
  309. package/server/services/ai/integrated_tools/slidev.js +207 -0
  310. package/server/services/ai/loopPolicy.js +146 -0
  311. package/server/services/ai/models.js +31 -4
  312. package/server/services/ai/providers/claudeCode.js +49 -0
  313. package/server/services/ai/providers/openai.js +2 -1
  314. package/server/services/ai/providers/openaiCodex.js +422 -15
  315. package/server/services/ai/recordingInsights.js +11 -13
  316. package/server/services/ai/runEvents.js +100 -0
  317. package/server/services/ai/settings.js +12 -2
  318. package/server/services/ai/systemPrompt.js +15 -1
  319. package/server/services/ai/taskAnalysis.js +2 -0
  320. package/server/services/ai/toolResult.js +20 -0
  321. package/server/services/ai/toolRunner.js +46 -6
  322. package/server/services/ai/toolSelector.js +54 -1
  323. package/server/services/ai/tools.js +210 -116
  324. package/server/services/android/android_bootstrap_worker.js +63 -0
  325. package/server/services/android/controller.js +442 -1760
  326. package/server/services/bootstrap_helpers.js +0 -34
  327. package/server/services/browser/controller.js +279 -49
  328. package/server/services/cli/executor.js +40 -1
  329. package/server/services/desktop/screenRecorder.js +65 -9
  330. package/server/services/integrations/figma/provider.js +1 -0
  331. package/server/services/integrations/github/provider.js +3 -3
  332. package/server/services/integrations/google/provider.js +1 -0
  333. package/server/services/integrations/manager.js +25 -5
  334. package/server/services/integrations/microsoft/provider.js +1 -0
  335. package/server/services/integrations/oauth_provider.js +15 -5
  336. package/server/services/integrations/provider_config_store.js +22 -13
  337. package/server/services/integrations/registry.js +2 -4
  338. package/server/services/integrations/spotify/provider.js +1 -0
  339. package/server/services/integrations/trello/provider.js +842 -0
  340. package/server/services/manager.js +88 -155
  341. package/server/services/mcp/client.js +120 -23
  342. package/server/services/memory/llm_transfer.js +218 -0
  343. package/server/services/memory/manager.js +260 -33
  344. package/server/services/messaging/access_policy.js +10 -0
  345. package/server/services/messaging/automation.js +1 -1
  346. package/server/services/messaging/manager.js +64 -1
  347. package/server/services/messaging/meshtastic.js +277 -0
  348. package/server/services/messaging/meshtastic_env.js +40 -0
  349. package/server/services/messaging/meshtastic_protocol.js +530 -0
  350. package/server/services/messaging/meshtastic_tcp_transport.js +25 -0
  351. package/server/services/runtime/backends/local-vm.js +221 -158
  352. package/server/services/runtime/docker-vm-manager.js +392 -0
  353. package/server/services/runtime/guest_bootstrap.js +654 -0
  354. package/server/services/runtime/manager.js +85 -29
  355. package/server/services/runtime/settings.js +22 -31
  356. package/server/services/runtime/validation.js +16 -31
  357. package/server/services/social_video/adapters/base.js +26 -0
  358. package/server/services/social_video/adapters/index.js +27 -0
  359. package/server/services/social_video/adapters/instagram.js +17 -0
  360. package/server/services/social_video/adapters/tiktok.js +17 -0
  361. package/server/services/social_video/adapters/x.js +17 -0
  362. package/server/services/social_video/adapters/youtube.js +17 -0
  363. package/server/services/social_video/captions.js +187 -0
  364. package/server/services/social_video/frame.js +42 -0
  365. package/server/services/social_video/index.js +7 -0
  366. package/server/services/social_video/metadata.js +63 -0
  367. package/server/services/social_video/result.js +63 -0
  368. package/server/services/social_video/service.js +720 -0
  369. package/server/services/social_video/url.js +83 -0
  370. package/server/services/tasks/integration_runtime.js +1 -1
  371. package/server/services/tasks/runtime.js +1 -1
  372. package/server/services/tasks/task_repository.js +3 -6
  373. package/server/services/voice/openaiSpeech.js +6 -1
  374. package/server/services/voice/providers.js +142 -14
  375. package/server/services/voice/runtime.js +8 -8
  376. package/server/services/voice/runtimeManager.js +156 -19
  377. package/server/services/voice/turnRunner.js +29 -9
  378. package/server/services/wearable/firmware_manifest.js +353 -0
  379. package/server/services/wearable/gateway.js +350 -0
  380. package/server/services/wearable/protocol.js +45 -0
  381. package/server/services/wearable/service.js +240 -0
  382. package/server/services/websocket.js +3 -1
  383. package/server/services/widgets/focus_widget.js +137 -0
  384. package/server/services/widgets/service.js +133 -2
  385. package/server/services/workspace/manager.js +301 -0
  386. package/server/utils/deployment.js +16 -9
  387. package/server/services/integrations/home_assistant/provider.js +0 -630
  388. package/server/services/messaging/access_policy.test.js +0 -228
  389. package/server/services/runtime/backends/host.js +0 -37
  390. package/server/services/runtime/qemu.js +0 -391
@@ -1,51 +1,36 @@
1
1
  # Configuration
2
2
 
3
- NeoAgent keeps deployment secrets on the server. The default config file is `~/.neoagent/.env`; run `neoagent setup` to regenerate it interactively. You can move the runtime root by setting `NEOAGENT_HOME`.
3
+ NeoAgent reads server config from `~/.neoagent/.env`. Run `neoagent setup` to generate or update it interactively. Set `NEOAGENT_HOME` to move the runtime root.
4
4
 
5
- AI provider credentials, OAuth client secrets, and deployment controls are not configured through the public web client. The Flutter UI can select providers and models, but the secrets stay in server-side environment variables or in the local NeoAgent database where the app explicitly stores channel settings.
5
+ All AI provider credentials, OAuth client secrets, and deployment settings are server-side only never sent to the client or exposed in the UI.
6
6
 
7
- ## Core Variables
7
+ ## Minimal Config
8
8
 
9
- | Variable | Default | Description |
10
- |---|---:|---|
11
- | `PORT` | `3333` | HTTP port for the NeoAgent server. |
12
- | `PUBLIC_URL` | optional | Public base URL used for OAuth callbacks and external links. |
13
- | `SESSION_SECRET` | required | Random string for session signing. Generate one with `openssl rand -hex 32`. |
14
- | `NODE_ENV` | `production` | Set to `development` to enable verbose logs. |
15
- | `SECURE_COOKIES` | `false` | Set `true` when NeoAgent is behind a TLS-terminating proxy. |
16
- | `TRUST_PROXY` | inferred from `PUBLIC_URL`/`SECURE_COOKIES` | Set `true` when NeoAgent runs behind Nginx, Caddy, Cloudflare, Fly, or another reverse proxy that sends `X-Forwarded-*` headers. |
17
- | `ALLOWED_ORIGINS` | none | Comma-separated CORS origins, for example `https://example.com`. |
18
- | `NEOAGENT_DEPLOYMENT_MODE` | `self_hosted` | `self_hosted` enables in-app update controls; `managed` hides operator-only controls for SaaS deployments. |
19
- | `NEOAGENT_RELEASE_CHANNEL` | `stable` | Release track used by the self-hosted updater. |
20
-
21
- ## Service Email
9
+ ```dotenv
10
+ PORT=3333
11
+ SESSION_SECRET=change-me-to-something-random
12
+ ANTHROPIC_API_KEY=sk-ant-...
13
+ ```
22
14
 
23
- 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.
15
+ Generate a session secret: `openssl rand -hex 32`
24
16
 
25
- This mailbox is only for the NeoAgent server. The agent cannot read, search, or send from it, and it is not exposed as a Gmail, Outlook, or messaging integration account. Configure Gmail/Outlook tools separately under official integrations if you want the agent to work with a mailbox.
17
+ ## Core Variables
26
18
 
27
19
  | Variable | Default | Description |
28
20
  |---|---:|---|
29
- | `NEOAGENT_EMAIL_REQUIRE_SIGNUP_CONFIRMATION` | `true` when enabled | Requires new signup email confirmation before sign-in. |
30
- | `NEOAGENT_EMAIL_REQUIRE_EMAIL_CHANGE_CONFIRMATION` | `true` when enabled | Requires account email changes to be confirmed by the new address. |
31
- | `NEOAGENT_EMAIL_NOTIFY_UNUSUAL_LOGIN` | `true` | Sends a security notice when a login uses a new device or network pattern. |
32
- | `NEOAGENT_EMAIL_NOTIFY_ACCOUNT_CHANGES` | `true` | Sends notices for password and email changes. |
33
- | `NEOAGENT_EMAIL_BRAND_NAME` | `NeoAgent` | Display name used by service email templates. |
34
- | `NEOAGENT_EMAIL_SUPPORT_URL` | optional | Optional operator support URL reserved for service email templates. |
35
- | `NEOAGENT_EMAIL_TOKEN_TTL_HOURS` | `24` | Confirmation link lifetime. |
36
- | `NEOAGENT_EMAIL_FROM` | required when enabled | Sender header, for example `NeoAgent <no-reply@example.com>`. |
37
- | `NEOAGENT_EMAIL_REPLY_TO` | optional | Reply-To header. |
38
- | `NEOAGENT_EMAIL_SMTP_HOST` | required when enabled | SMTP hostname. |
39
- | `NEOAGENT_EMAIL_SMTP_PORT` | `587` | SMTP port. |
40
- | `NEOAGENT_EMAIL_SMTP_SECURE` | `true` on port `465` | Use implicit TLS. |
41
- | `NEOAGENT_EMAIL_SMTP_REQUIRE_TLS` | `true` unless implicit TLS | Require STARTTLS for non-implicit-TLS SMTP. |
42
- | `NEOAGENT_EMAIL_SMTP_REJECT_UNAUTHORIZED` | `true` | Reject invalid TLS certificates. Keep enabled in production. |
43
- | `NEOAGENT_EMAIL_SMTP_USER` | optional | SMTP username. |
44
- | `NEOAGENT_EMAIL_SMTP_PASS` | optional | SMTP password or app password. |
21
+ | `PORT` | `3333` | HTTP port for the NeoAgent server |
22
+ | `PUBLIC_URL` | optional | Public base URL required for OAuth callbacks, messaging webhooks, and mobile access |
23
+ | `SESSION_SECRET` | required | Random string for session signing |
24
+ | `NODE_ENV` | `production` | Set to `development` for verbose logs |
25
+ | `SECURE_COOKIES` | `false` | Set `true` when behind a TLS-terminating proxy |
26
+ | `TRUST_PROXY` | inferred | Set `true` when behind Nginx, Caddy, Cloudflare, Fly, or any proxy sending `X-Forwarded-*` |
27
+ | `ALLOWED_ORIGINS` | none | Comma-separated CORS origins |
28
+ | `NEOAGENT_DEPLOYMENT_MODE` | `self_hosted` | `managed` hides operator-only controls for SaaS deployments |
29
+ | `NEOAGENT_RELEASE_CHANNEL` | `stable` | Release track followed by `neoagent update` |
45
30
 
46
31
  ## AI Providers
47
32
 
48
- At least one hosted-provider API key is required unless you only use local Ollama. The active provider and model routing are selected in the app, but credentials are read from server-side config.
33
+ At least one key is required unless you only use local Ollama.
49
34
 
50
35
  | Variable | Provider |
51
36
  |---|---|
@@ -54,96 +39,104 @@ At least one hosted-provider API key is required unless you only use local Ollam
54
39
  | `XAI_API_KEY` | Grok (xAI) |
55
40
  | `XAI_BASE_URL` | Optional xAI-compatible base URL override |
56
41
  | `GOOGLE_AI_KEY` | Gemini (Google) |
57
- | `MINIMAX_API_KEY` | MiniMax Code, including `MiniMax-M2.7` |
58
- | `BRAVE_SEARCH_API_KEY` | Brave Search API for the native `web_search` tool |
42
+ | `MINIMAX_API_KEY` | MiniMax (including `MiniMax-M2.7`) |
43
+ | `BRAVE_SEARCH_API_KEY` | Brave Search for the `web_search` tool |
59
44
  | `OPENAI_BASE_URL` | Optional OpenAI-compatible base URL override |
60
45
  | `ANTHROPIC_BASE_URL` | Optional Anthropic-compatible base URL override |
61
- | `DEEPGRAM_API_KEY` | Recordings transcription with Deepgram |
62
- | `DEEPGRAM_BASE_URL` | Optional Deepgram API base URL override |
63
- | `DEEPGRAM_MODEL` | Deepgram speech model override, defaults to `nova-3` |
64
- | `DEEPGRAM_LANGUAGE` | Deepgram language override, defaults to `multi` |
65
- | `OLLAMA_URL` | Local Ollama server, usually `http://localhost:11434` |
66
-
67
- Recording insight generation is controlled in app AI settings with `auto_recording_insights`. It uses the configured AI providers after Deepgram transcription has produced transcript text.
46
+ | `DEEPGRAM_API_KEY` | Recording transcription |
47
+ | `DEEPGRAM_BASE_URL` | Optional Deepgram base URL override |
48
+ | `DEEPGRAM_MODEL` | Deepgram speech model (default: `nova-3`) |
49
+ | `DEEPGRAM_LANGUAGE` | Deepgram language mode (default: `multi`) |
50
+ | `OLLAMA_URL` | Local Ollama server, e.g. `http://localhost:11434` |
68
51
 
69
52
  ## Official Integrations
70
53
 
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.
54
+ OAuth app credentials for structured agent tools. All callbacks default to `PUBLIC_URL + /api/integrations/oauth/callback`.
72
55
 
73
- All OAuth callbacks default to `PUBLIC_URL + /api/integrations/oauth/callback` unless you set a provider-specific redirect URI.
56
+ Home Assistant and Trello can be configured per-user in the Flutter UI without any server-side setup.
74
57
 
75
58
  | Variable | Description |
76
59
  |---|---|
77
- | `GOOGLE_OAUTH_CLIENT_ID` | Google Workspace OAuth client ID |
78
- | `GOOGLE_OAUTH_CLIENT_SECRET` | Google Workspace OAuth client secret |
79
- | `GOOGLE_OAUTH_REDIRECT_URI` | Optional Google Workspace OAuth callback URL |
80
- | `NOTION_OAUTH_CLIENT_ID` | Notion OAuth client ID |
81
- | `NOTION_OAUTH_CLIENT_SECRET` | Notion OAuth client secret |
60
+ | `GOOGLE_OAUTH_CLIENT_ID` | Google Workspace client ID |
61
+ | `GOOGLE_OAUTH_CLIENT_SECRET` | Google Workspace client secret |
62
+ | `GOOGLE_OAUTH_REDIRECT_URI` | Optional Google OAuth callback URL |
63
+ | `NOTION_OAUTH_CLIENT_ID` | Notion client ID |
64
+ | `NOTION_OAUTH_CLIENT_SECRET` | Notion client secret |
82
65
  | `NOTION_OAUTH_REDIRECT_URI` | Optional Notion OAuth callback URL |
83
- | `MICROSOFT_OAUTH_CLIENT_ID` | Microsoft 365 OAuth client ID |
84
- | `MICROSOFT_OAUTH_CLIENT_SECRET` | Microsoft 365 OAuth client secret |
85
- | `MICROSOFT_OAUTH_REDIRECT_URI` | Optional Microsoft 365 OAuth callback URL |
86
- | `MICROSOFT_OAUTH_TENANT_ID` | Optional Entra tenant selector, defaults to `common` |
87
- | `SLACK_OAUTH_CLIENT_ID` | Slack OAuth client ID |
88
- | `SLACK_OAUTH_CLIENT_SECRET` | Slack OAuth client secret |
66
+ | `MICROSOFT_OAUTH_CLIENT_ID` | Microsoft 365 client ID |
67
+ | `MICROSOFT_OAUTH_CLIENT_SECRET` | Microsoft 365 client secret |
68
+ | `MICROSOFT_OAUTH_REDIRECT_URI` | Optional Microsoft OAuth callback URL |
69
+ | `MICROSOFT_OAUTH_TENANT_ID` | Entra tenant selector (default: `common`) |
70
+ | `SLACK_OAUTH_CLIENT_ID` | Slack client ID |
71
+ | `SLACK_OAUTH_CLIENT_SECRET` | Slack client secret |
89
72
  | `SLACK_OAUTH_REDIRECT_URI` | Optional Slack OAuth callback URL |
90
- | `FIGMA_OAUTH_CLIENT_ID` | Figma OAuth client ID |
91
- | `FIGMA_OAUTH_CLIENT_SECRET` | Figma OAuth client secret |
73
+ | `FIGMA_OAUTH_CLIENT_ID` | Figma client ID |
74
+ | `FIGMA_OAUTH_CLIENT_SECRET` | Figma client secret |
92
75
  | `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. |
98
- | `SPOTIFY_OAUTH_CLIENT_ID` | Spotify OAuth client ID |
99
- | `SPOTIFY_OAUTH_CLIENT_SECRET` | Spotify OAuth client secret |
76
+ | `TRELLO_API_KEY` | Server-side Trello Power-Up key if set, users only need their personal token |
77
+ | `SPOTIFY_OAUTH_CLIENT_ID` | Spotify client ID |
78
+ | `SPOTIFY_OAUTH_CLIENT_SECRET` | Spotify client secret |
100
79
  | `SPOTIFY_OAUTH_REDIRECT_URI` | Optional Spotify OAuth callback URL |
101
80
 
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.
81
+ ## Messaging
104
82
 
105
- Weather integration uses Open-Meteo public endpoints and does not require OAuth environment variables.
83
+ Messaging platform credentials (Telegram, Discord, WhatsApp, Slack, etc.) are configured through the Flutter app messaging tab — not `.env`. The exception is Telnyx, which requires server-side webhook verification.
106
84
 
107
- ## Messaging
85
+ | Variable | Description |
86
+ |---|---|
87
+ | `TELNYX_WEBHOOK_TOKEN` | Telnyx webhook signature verification token |
108
88
 
109
- Messaging platform credentials are stored through the Flutter app messaging tab, not in `.env`. This includes Telegram, Discord, Slack, Google Chat, Microsoft Teams, Matrix, Signal, iMessage/BlueBubbles, IRC, Twitch, LINE, Mattermost, and the configurable webhook bridges. Use the app to set platform tokens, webhook URLs, inbound secrets, polling options, and access lists.
89
+ Generic inbound webhook path: `PUBLIC_URL + /api/messaging/webhook/:platform`
110
90
 
111
- Generic inbound messaging callbacks use:
91
+ ## Service Email
112
92
 
113
- ```text
114
- PUBLIC_URL + /api/messaging/webhook/:platform
115
- ```
93
+ Optional. When configured, NeoAgent uses SMTP for account flows: signup confirmation, password reset, and security notifications. This mailbox is for the NeoAgent server only — it is not exposed as a Gmail or Outlook integration.
94
+
95
+ | Variable | Default | Description |
96
+ |---|---:|---|
97
+ | `NEOAGENT_EMAIL_FROM` | required | Sender address, e.g. `NeoAgent <no-reply@example.com>` |
98
+ | `NEOAGENT_EMAIL_SMTP_HOST` | required | SMTP hostname |
99
+ | `NEOAGENT_EMAIL_SMTP_PORT` | `587` | SMTP port |
100
+ | `NEOAGENT_EMAIL_SMTP_USER` | optional | SMTP username |
101
+ | `NEOAGENT_EMAIL_SMTP_PASS` | optional | SMTP password or app password |
102
+ | `NEOAGENT_EMAIL_SMTP_SECURE` | `true` on port 465 | Use implicit TLS |
103
+ | `NEOAGENT_EMAIL_SMTP_REQUIRE_TLS` | `true` | Require STARTTLS |
104
+ | `NEOAGENT_EMAIL_SMTP_REJECT_UNAUTHORIZED` | `true` | Reject invalid TLS certs — keep enabled in production |
105
+ | `NEOAGENT_EMAIL_REPLY_TO` | optional | Reply-To header |
106
+ | `NEOAGENT_EMAIL_REQUIRE_SIGNUP_CONFIRMATION` | `true` | Require email confirmation before first sign-in |
107
+ | `NEOAGENT_EMAIL_REQUIRE_EMAIL_CHANGE_CONFIRMATION` | `true` | Require confirmation when changing account email |
108
+ | `NEOAGENT_EMAIL_NOTIFY_UNUSUAL_LOGIN` | `true` | Security notice for new device or network logins |
109
+ | `NEOAGENT_EMAIL_NOTIFY_ACCOUNT_CHANGES` | `true` | Notices for password and email changes |
110
+ | `NEOAGENT_EMAIL_BRAND_NAME` | `NeoAgent` | Display name in email templates |
111
+ | `NEOAGENT_EMAIL_SUPPORT_URL` | optional | Support link for email templates |
112
+ | `NEOAGENT_EMAIL_TOKEN_TTL_HOURS` | `24` | Confirmation link expiry |
116
113
 
117
- Telnyx webhook verification is configured through the environment.
114
+ ## Runtime Isolation
118
115
 
119
116
  | Variable | Description |
120
117
  |---|---|
121
- | `TELNYX_WEBHOOK_TOKEN` | Telnyx webhook signature verification token |
122
-
123
- ## Runtime Isolation
118
+ | `NEOAGENT_VM_GUEST_TOKEN` | Required for `secure-vm` policy use 32+ characters, no placeholder values |
124
119
 
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.
120
+ Runtime profiles (`trusted-host`, `secure-vm`) are set in user settings, not `.env`. See [Capabilities: Runtime Modes](capabilities.md#runtime-modes).
126
121
 
127
- 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.
122
+ ## Analytics
128
123
 
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.
124
+ NeoAgent can send anonymous usage events to your own Mixpanel project. Events cover navigation and feature usage only no message content, credentials, or personal data.
130
125
 
131
- ## Secrets Guidance
126
+ | Variable | Description |
127
+ |---|---|
128
+ | `NEOAGENT_MIXPANEL_TOKEN` | Public Mixpanel project token — leave blank to disable analytics |
132
129
 
133
- Treat `SESSION_SECRET`, provider API keys, OAuth client secrets, service email SMTP credentials, messaging credentials, and Telnyx tokens as sensitive. Do not commit them, print them in logs, or expose them in client-side code. Store them in server-side environment variables or a secrets manager, restrict access to operators who need them, and rotate them immediately if you suspect exposure.
130
+ When analytics is enabled, the web client shows a cookie-consent banner until accepted or declined.
134
131
 
135
132
  ## Runtime Paths
136
133
 
137
- | Path | Purpose |
134
+ | Path | Contents |
138
135
  |---|---|
139
- | `~/.neoagent/.env` | Server config and deployment secrets |
140
- | `~/.neoagent/data/` | Database, sessions, update status, and logs |
141
- | `~/.neoagent/agent-data/` | Skills, memory, and daily data files |
136
+ | `~/.neoagent/.env` | Server config and secrets |
137
+ | `~/.neoagent/data/` | Database, sessions, logs, update status |
138
+ | `~/.neoagent/agent-data/` | Skills, memory, daily data |
142
139
 
143
- ## Minimal `.env` Example
140
+ ## Security
144
141
 
145
- ```dotenv
146
- PORT=3333
147
- SESSION_SECRET=change-me-to-something-random
148
- ANTHROPIC_API_KEY=sk-ant-...
149
- ```
142
+ Treat `SESSION_SECRET`, all API keys, OAuth client secrets, SMTP credentials, and messaging tokens as sensitive. Don't commit them, log them, or expose them in client code or screenshots. Rotate immediately if you suspect exposure.
@@ -1,13 +1,26 @@
1
1
  # Getting Started
2
2
 
3
- NeoAgent installs as a Node CLI and runs a self-hosted server with a bundled Flutter web client. The same server can be reached from the Android client when you point it at the deployed backend URL.
3
+ Install takes about 5 minutes. The first VM boot downloads and configures an Ubuntu guest image, which adds a few more minutes on first run.
4
4
 
5
5
  ## Requirements
6
6
 
7
- - Node.js 20 or newer.
8
- - A reachable server URL if you want OAuth callbacks, mobile access, or messaging webhooks.
9
- - At least one hosted AI provider API key, unless you only use local Ollama.
10
- - Android Studio or a Flutter Android toolchain if you build the Android client yourself.
7
+ | | |
8
+ |---|---|
9
+ | Node.js | 20 or newer |
10
+ | QEMU | for VM-isolated browser and Android |
11
+ | AI provider key | Anthropic, OpenAI, Gemini, Grok, MiniMax, or local Ollama |
12
+
13
+ No API key is required if you only use local Ollama.
14
+
15
+ ### Install QEMU
16
+
17
+ ```bash
18
+ # macOS
19
+ brew install qemu
20
+
21
+ # Ubuntu / Debian
22
+ sudo apt-get update && sudo apt-get install -y qemu-system qemu-utils
23
+ ```
11
24
 
12
25
  ## Install
13
26
 
@@ -16,49 +29,55 @@ npm install -g neoagent
16
29
  neoagent install
17
30
  ```
18
31
 
19
- `neoagent install` runs setup if `~/.neoagent/.env` does not exist, installs dependencies, builds or verifies the bundled web client, and starts the service through the host service manager when available.
32
+ This runs setup (if no existing config), installs dependencies, and starts the service.
20
33
 
21
- On macOS, NeoAgent uses a `launchd` user service. On Linux, it uses a `systemd --user` service. On unsupported platforms it falls back to a background Node process.
34
+ Open **http://localhost:3333** in your browser when the install finishes.
22
35
 
23
- ## Setup
36
+ ## First Run
24
37
 
25
- Run setup again whenever you need to regenerate server config:
38
+ 1. Create an account.
39
+ 2. Open **Settings → AI Providers** and add at least one API key.
40
+ 3. Send a message in **Chat** to confirm the agent responds.
26
41
 
27
- ```bash
28
- neoagent setup
29
- ```
30
-
31
- The setup flow asks for the server port, public URL, release channel, AI provider keys, Ollama URL, and official integration OAuth settings. Provider credentials live in server-side config, not in the web client.
42
+ Everything else — integrations, messaging, tasks, Android control — is configured inside the app.
32
43
 
33
44
  ## Service Commands
34
45
 
35
46
  ```bash
36
- neoagent status
47
+ neoagent status # check install root, config path, and service state
37
48
  neoagent start
38
49
  neoagent stop
39
50
  neoagent restart
40
- neoagent logs
51
+ neoagent logs # first stop when something behaves unexpectedly
52
+ ```
53
+
54
+ ## Re-running Setup
55
+
56
+ Run this to regenerate config or change provider keys:
57
+
58
+ ```bash
59
+ neoagent setup
41
60
  ```
42
61
 
43
- Use `neoagent status` to confirm the install root, config path, release channel, and service state. Use `neoagent logs` when the service starts but the UI or integrations do not behave as expected.
62
+ The wizard prompts for port, public URL, release channel, AI keys, Ollama URL, and OAuth credentials.
44
63
 
45
- ## Updates And Recovery
64
+ ## Updates and Recovery
46
65
 
47
66
  ```bash
48
- neoagent channel stable
49
- neoagent channel beta
50
- neoagent update
51
- neoagent fix
67
+ neoagent channel stable # switch to stable releases
68
+ neoagent channel beta # switch to prerelease builds
69
+ neoagent update # update to latest on the current channel
70
+ neoagent fix # reset after a broken install or self-edit
52
71
  ```
53
72
 
54
- `neoagent update` follows the configured release channel. `neoagent fix` is for recovery after a self-edit or broken local install. On git installs it backs up runtime data, saves local tracked changes, resets tracked source files, reinstalls dependencies, and restarts the service.
73
+ `neoagent fix` backs up runtime data, resets source files, reinstalls dependencies, and restarts the service. Use it when `neoagent setup && neoagent restart` hasn't resolved an issue.
55
74
 
56
75
  ## Runtime Paths
57
76
 
58
- | Path | Purpose |
77
+ | Path | Contents |
59
78
  |---|---|
60
79
  | `~/.neoagent/.env` | Server config and secrets |
61
- | `~/.neoagent/data/` | Database, sessions, update status, and logs |
62
- | `~/.neoagent/agent-data/` | Skills, memory, and daily data files |
80
+ | `~/.neoagent/data/` | Database, session data, logs |
81
+ | `~/.neoagent/agent-data/` | Skills, memory, daily data |
63
82
 
64
- Set `NEOAGENT_HOME` if you need to move the runtime root.
83
+ Set `NEOAGENT_HOME` to move the runtime root.
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.
package/docs/index.md CHANGED
@@ -6,9 +6,7 @@ sidebar_label: Overview
6
6
 
7
7
  # NeoAgent
8
8
 
9
- NeoAgent is a self-hosted proactive AI agent with a bundled Flutter client for web and Android. It runs on your server, keeps credentials server-side, and gives you an operator UI for chat, runs, logs, tasks, skills, integrations, MCP, memory, Android control, recordings, Health Connect data, and settings.
10
-
11
- It is designed for people who want a focused personal automation server rather than a broad gateway platform. NeoAgent can run triggered tasks, control a browser, operate a server-attached Android emulator or device, manage files, remember long-term context, connect to hosted AI providers or local Ollama, search recordings, read synced health summaries, and send results through Telegram, Discord, WhatsApp, or Telnyx Voice.
9
+ Self-hosted AI agent server. Runs as a system service, keeps all credentials on your machine, and provides a full operator UI for chat, automation, Android device control, recordings, integrations, and memory.
12
10
 
13
11
  ## Quick Start
14
12
 
@@ -17,34 +15,30 @@ npm install -g neoagent
17
15
  neoagent install
18
16
  ```
19
17
 
20
- Open the server URL, sign in, configure providers and messaging, then create a task or chat run.
18
+ Opens at `http://localhost:3333` when complete. See [Getting Started](getting-started.md) for prerequisites and first-run steps.
21
19
 
22
- ## What NeoAgent Does
20
+ ## What You Can Do
23
21
 
24
- | Area | Capability |
22
+ | | |
25
23
  |---|---|
26
- | AI providers | OpenAI, Anthropic, xAI, Google, MiniMax Code, and local Ollama |
27
- | Operator UI | Chat, live runs, logs, tasks, skills, integrations, MCP, memory, devices, recordings, health, settings |
28
- | Automation | Triggered tasks, one-time runs, browser control, file access, CLI skills, subagents, and messaging delivery |
29
- | Android control | AI control of a server-attached Android emulator or device: screenshots, UI dumps, taps, typing, intents, APK installs, and ADB shell |
30
- | Recordings | Web and Android audio sessions with transcript search and AI insights |
31
- | Integrations | Google Workspace, Notion, Microsoft 365, Slack, Figma, and remote MCP servers |
32
- | Messaging | Telegram, Discord, WhatsApp text/media, and Telnyx Voice calls |
33
- | Outputs | Artifacts, Grok image generation, vision analysis, markdown tables, and Mermaid graphs |
34
- | Recovery | `neoagent status`, `neoagent logs`, `neoagent update`, release channels, and `neoagent fix` |
35
-
36
- ## Main Paths
37
-
38
- | Need | Start here |
24
+ | **Chat with tools** | Browse the web, run shell commands, read/write files, call APIs, generate images |
25
+ | **Automate** | Schedule tasks on cron, trigger from integrations or weather events, deliver results via messaging |
26
+ | **Control Android** | Screenshot, observe UI, tap, type, swipe, launch apps, install APKs, run `adb shell` |
27
+ | **Connect accounts** | Google Workspace, Microsoft 365, Notion, Slack, Figma, Home Assistant, Trello, Spotify |
28
+ | **Message anywhere** | Telegram, WhatsApp, Discord, Signal, Matrix, iMessage, Teams, Telnyx Voice, and more |
29
+ | **Record and transcribe** | Audio sessions from browser or Android, transcript search, AI-generated insights |
30
+ | **Remember** | Long-term semantic memory, session logs, core facts, daily summaries |
31
+
32
+ ## Documentation
33
+
34
+ | | |
39
35
  |---|---|
40
- | Install and first run | [Getting Started](getting-started.md) |
41
- | Full product surface | [Capabilities](capabilities.md) |
42
- | Android device control | [Capabilities: Android Control](capabilities.md#android-control) |
43
- | Recordings and transcripts | [Capabilities: Recordings](capabilities.md#recordings) |
44
- | Scheduled tasks | [Automation](automation.md) |
45
- | OAuth apps and messaging | [Integrations](integrations.md) |
46
- | Skills and MCP | [Skills](skills.md) |
47
- | Secrets and runtime settings | [Configuration](configuration.md) |
48
- | Logs, updates, and repair | [Operations](operations.md) |
49
- | OpenClaw comparison | [Why NeoAgent](why-neoagent.md) |
50
- | Migration from OpenClaw/Hermes | [Migration Guide](migration.md) |
36
+ | [Getting Started](getting-started.md) | Install, first run, service commands |
37
+ | [Capabilities](capabilities.md) | Full tool and feature inventory |
38
+ | [Configuration](configuration.md) | Environment variables, provider keys, OAuth setup |
39
+ | [Automation](automation.md) | Tasks, cron scheduling, integration triggers |
40
+ | [Integrations](integrations.md) | OAuth accounts and messaging platforms |
41
+ | [Skills](skills.md) | Built-in skills catalog, custom skills, MCP |
42
+ | [Operations](operations.md) | Updates, logs, recovery |
43
+ | [Why NeoAgent](why-neoagent.md) | Comparison with OpenClaw |
44
+ | [Migration](migration.md) | Migrate from OpenClaw or Hermes |
@@ -1,84 +1,66 @@
1
1
  # Integrations
2
2
 
3
- NeoAgent has two integration layers: official integrations for structured app tools, and messaging platforms for talking to the agent.
3
+ NeoAgent has two integration layers: official integrations for structured app tools, and messaging platforms for communicating with the agent.
4
4
 
5
5
  ## Official Integrations
6
6
 
7
- The built-in registry includes:
7
+ Structured OAuth-backed tools the agent can use in chat and automation. Connect accounts in the Flutter app under **Integrations**.
8
8
 
9
- | Provider | Use |
9
+ | Provider | What the agent can do |
10
10
  |---|---|
11
- | Google Workspace | Gmail, Calendar, Drive, Docs, and Sheets tools |
12
- | Notion | Search, pages, databases, blocks, comments, and raw Notion API requests |
13
- | Microsoft 365 | Outlook, Calendar, OneDrive, Teams, and Microsoft Graph requests |
14
- | Slack | Conversations, history, posting, search, user info, and Slack Web API requests |
15
- | Figma | Current user, files, nodes, rendered images, comments, and Figma REST requests |
16
- | Home Assistant | Entity/config reads, service calls, and Home Assistant REST API requests |
17
- | Weather | Keyless Open-Meteo current weather and forecast tools |
18
- | Spotify | Playback state, recently played, search, and playback controls |
11
+ | **Google Workspace** | Search and send Gmail, read/create Calendar events, Drive upload/download/share, Docs create/append, Sheets read/write |
12
+ | **Microsoft 365** | Outlook mail, Calendar, OneDrive, Teams messages, Graph API |
13
+ | **Notion** | Search pages, read/write databases and blocks, manage comments |
14
+ | **Slack** | Read and send messages, search conversations |
15
+ | **Figma** | Read files and nodes, get rendered images, manage comments |
16
+ | **Home Assistant** | Read entity state, call services |
17
+ | **Trello** | Manage boards, lists, cards, comments, and search |
18
+ | **Spotify** | Playback controls, search, queue management |
19
+ | **Weather** | Current conditions and forecasts — no API key needed |
20
+ | **Personal WhatsApp** | Per-account read and send with isolated access |
19
21
 
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.
22
+ ### Access Modes
21
23
 
22
- Weather note: the Weather integration uses Open-Meteo public APIs and does not require OAuth client credentials.
24
+ Each connected account can be set to **Read/Write** (default) or **Read Only**. Read-only blocks all write operations server-side sending, creating, updating, and deleting.
23
25
 
24
- ### Per-Account Access Mode
26
+ ### OAuth Setup
25
27
 
26
- Each connected official integration account can be configured per connection as:
28
+ Most providers require OAuth app credentials in server config before users can connect. See [Configuration: Official Integrations](configuration.md#official-integrations) for the required environment variables.
27
29
 
28
- - `Read / Write` (default)
29
- - `Read Only`
30
+ Home Assistant and Trello can be configured per-user in the **Integrations** UI without any server-side setup.
30
31
 
31
- When an account is set to `Read Only`, write operations are blocked for that connection (for example: sending email, posting messages, creating/updating/deleting resources, or write-method API requests).
32
+ The default OAuth callback URL is `PUBLIC_URL + /api/integrations/oauth/callback`.
32
33
 
33
- This setting is managed in the Flutter **Integrations** UI on each connected account row and is enforced server-side during tool execution.
34
-
35
- The default callback is:
36
-
37
- ```text
38
- PUBLIC_URL + /api/integrations/oauth/callback
39
- ```
40
-
41
- You can override it with provider-specific redirect URI variables listed in [Configuration](configuration.md).
34
+ **If an OAuth connection fails:**
35
+ 1. Confirm `PUBLIC_URL` is reachable by the provider
36
+ 2. Confirm the redirect URI in your OAuth app matches NeoAgent's callback URL
37
+ 3. Confirm the client ID and secret are set in server config
38
+ 4. Restart after changing environment variables: `neoagent restart`
42
39
 
43
40
  ## Messaging Platforms
44
41
 
45
- NeoAgent can talk through:
42
+ Channels through which users and the agent communicate. Configure credentials in the Flutter app under **Settings → Messaging** — not in `.env`.
46
43
 
47
44
  | Platform | Notes |
48
45
  |---|---|
49
- | WhatsApp | Messaging-platform bridge in app settings for talking to the agent; separate official personal WhatsApp integration for structured read/send tools |
50
- | Telegram | Bot token plus approved chats |
51
- | Discord | Bot token plus server or channel access |
52
- | Slack | Bot token sends plus Events API callbacks |
53
- | Google Chat | Space webhook sends plus app callback ingestion |
54
- | Microsoft Teams | Incoming webhook sends plus outgoing webhook ingestion |
55
- | Matrix | Homeserver access token with room send and polling |
56
- | Signal | signal-cli REST API bridge |
57
- | iMessage / BlueBubbles | BlueBubbles-compatible bridge for macOS-hosted iMessage |
58
- | IRC and Twitch | IRC-style channel connections |
59
- | LINE and Mattermost | Native send paths with webhook ingestion |
60
- | Feishu, Nextcloud Talk, Nostr, Synology Chat, Tlon, Zalo, Zalo Personal, WeChat, and WebChat | Configurable webhook bridges |
61
- | Telnyx Voice | Inbound and outbound calling with text-to-speech; tasks can call a number |
62
-
63
- Messaging channel credentials are configured through the Flutter app messaging tab (not `.env`) for channel setup and inbound callback routing. The generic inbound callback path is:
64
-
65
- ```text
66
- PUBLIC_URL + /api/messaging/webhook/:platform
67
- ```
68
-
69
- Use the per-platform inbound secret or native signature fields in the messaging tab for webhook callbacks.
70
-
71
- Telnyx exception: only the Telnyx voice webhook verification token stays in server environment variables as `TELNYX_WEBHOOK_TOKEN`, because webhook request verification is performed server-side. Other Telnyx and messaging channel credentials should be configured in the Flutter app messaging tab as part of channel/client configuration.
72
-
73
- ## Credentials
74
-
75
- Keep provider API keys, OAuth client secrets, and messaging tokens on the server. Do not put them in docs, skill files, client-side code, screenshots, or logs.
76
-
77
- If an OAuth provider fails to connect, check:
78
-
79
- - `PUBLIC_URL` is reachable by the provider.
80
- - The provider redirect URI matches NeoAgent's callback URL.
81
- - The provider client ID and client secret are set on the server.
82
- - The NeoAgent service was restarted after changing environment variables.
83
-
84
- See [Capabilities](capabilities.md) for examples of the structured tools exposed by each provider.
46
+ | **WhatsApp** | Messaging bridge for agent chat; separate official integration for structured read/send tools |
47
+ | **Telegram** | Bot token plus approved chat IDs |
48
+ | **Discord** | Bot token plus server or channel access |
49
+ | **Slack** | Bot token sends, Events API callbacks |
50
+ | **Google Chat** | Space webhook sends, app callback ingestion |
51
+ | **Microsoft Teams** | Incoming webhook sends, outgoing webhook ingestion |
52
+ | **Matrix** | Homeserver access token, room send, polling |
53
+ | **Signal** | signal-cli REST API bridge |
54
+ | **iMessage / BlueBubbles** | BlueBubbles-compatible bridge on a macOS host |
55
+ | **IRC and Twitch** | IRC-style channel connections |
56
+ | **LINE and Mattermost** | Native send, webhook ingestion |
57
+ | **Telnyx Voice** | Inbound and outbound calls with text-to-speech |
58
+ | **Webhook bridges** | Feishu, Nextcloud Talk, Nostr, Synology Chat, Tlon, Zalo, WeChat, WebChat |
59
+
60
+ Inbound webhook path: `PUBLIC_URL + /api/messaging/webhook/:platform`
61
+
62
+ `TELNYX_WEBHOOK_TOKEN` is the only messaging credential that goes in `.env` — all others are configured through the app messaging tab.
63
+
64
+ ## Security
65
+
66
+ Keep OAuth client secrets, bot tokens, and API keys on the server. Don't put them in skill files, task prompts, screenshots, or logs. Rotate immediately if a credential is exposed.