neoagent 2.3.1-beta.11 → 2.3.1-beta.111

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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 +579 -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
package/docs/migration.md CHANGED
@@ -6,43 +6,37 @@ sidebar_label: Migration
6
6
 
7
7
  # Migration Guide
8
8
 
9
- Migrate your existing agent setup from **OpenClaw** or **Hermes** to NeoAgent with a single command.
9
+ Migrate your existing agent setup from OpenClaw or Hermes to NeoAgent with a single command.
10
10
 
11
11
  ## Quick Start
12
12
 
13
13
  ```bash
14
- # Detect existing installations and migrate
15
- neoagent migrate
16
-
17
- # Preview what would be migrated (dry run)
18
- neoagent migrate dry-run
19
-
20
- # Check migration status
21
- neoagent migrate status
14
+ neoagent migrate # detect and migrate interactively
15
+ neoagent migrate dry-run # preview what would be migrated
16
+ neoagent migrate status # check what's detected
22
17
  ```
23
18
 
24
19
  ## What Gets Migrated
25
20
 
26
- | Data Type | OpenClaw | Hermes | Destination |
27
- |-----------|----------|--------|-------------|
28
- | **Skills** | `~/.openclaw/skills/*.md` | `~/.hermes/skills/*.md` | `~/.neoagent/agent-data/skills/openclaw-imports/` or `hermes-imports/` |
29
- | **Memory** | `SOUL.md`, `MEMORY.md`, `USER.md` | `MEMORY.md`, `USER.md` | `~/.neoagent/agent-data/memory/openclaw/` or `hermes/` |
30
- | **API Keys** | From `.env` | From `.env` | `~/.neoagent/.env` (merged with prompts on conflict) |
21
+ | Data | OpenClaw source | Hermes source | Destination |
22
+ |---|---|---|---|
23
+ | Skills | `~/.openclaw/skills/*.md` | `~/.hermes/skills/*.md` | `~/.neoagent/agent-data/skills/openclaw-imports/` or `hermes-imports/` |
24
+ | Memory | `SOUL.md`, `MEMORY.md`, `USER.md` | `MEMORY.md`, `USER.md` | `~/.neoagent/agent-data/memory/openclaw/` or `hermes/` |
25
+ | API keys | from `.env` | from `.env` | merged into `~/.neoagent/.env` |
31
26
 
32
27
  ## Prerequisites
33
28
 
34
- - NeoAgent installed (`npm install -g neoagent`)
35
- - Existing OpenClaw (at `~/.openclaw/`) and/or Hermes (at `~/.hermes/`) installation
29
+ - NeoAgent installed: `npm install -g neoagent`
30
+ - An existing OpenClaw (`~/.openclaw/`) or Hermes (`~/.hermes/`) installation
36
31
 
37
- ## Step-by-Step Migration
32
+ ## Running Migration
38
33
 
39
- ### 1. Run Migration Detection
34
+ ### 1. Check what's detected
40
35
 
41
36
  ```bash
42
37
  neoagent migrate status
43
38
  ```
44
39
 
45
- This will show:
46
40
  ```
47
41
  Source agents:
48
42
  OpenClaw: FOUND
@@ -51,13 +45,12 @@ Source agents:
51
45
  Run `neoagent migrate` to start migration.
52
46
  ```
53
47
 
54
- ### 2. Preview Migration (Optional)
48
+ ### 2. Preview (optional)
55
49
 
56
50
  ```bash
57
51
  neoagent migrate dry-run
58
52
  ```
59
53
 
60
- Sample output:
61
54
  ```
62
55
  === Migration Dry Run ===
63
56
 
@@ -65,13 +58,11 @@ OpenClaw detection: FOUND
65
58
  Skills: 5
66
59
  Memories: 3
67
60
  API keys: ANTHROPIC_API_KEY, OPENAI_API_KEY, TELEGRAM_BOT_TOKEN
68
- Config: ~/.openclaw/openclaw.json
69
61
 
70
62
  Hermes detection: FOUND
71
63
  Skills: 3
72
64
  Memories: 2
73
65
  API keys: OPENAI_API_KEY, XAI_API_KEY
74
- Config: ~/.hermes/config.yaml
75
66
 
76
67
  Would migrate to:
77
68
  Skills → ~/.neoagent/agent-data/skills/
@@ -79,60 +70,23 @@ Would migrate to:
79
70
  API keys → ~/.neoagent/.env
80
71
  ```
81
72
 
82
- ### 3. Run Full Migration
73
+ ### 3. Migrate
83
74
 
84
75
  ```bash
85
76
  neoagent migrate
86
77
  ```
87
78
 
88
- Interactive prompts:
89
- ```
90
- === NeoAgent Migration ===
91
-
92
- -> OpenClaw detected at ~/.openclaw/
93
- -> Hermes detected at ~/.hermes/
94
-
95
- What would you like to migrate?
96
- [1] Migrate from all detected sources
97
- [2] Migrate from OpenClaw only
98
- [3] Migrate from Hermes only
99
- [4] Cancel
100
-
101
- Choice [1]: 1
102
-
103
- Scanning sources...
104
- OpenClaw: 5 skills, 3 memories, 3 API keys
105
- Hermes: 3 skills, 2 memories, 2 API keys
106
-
107
- Migrating skills and memories...
108
- → Copied 5 skills to openclaw-imports/
109
- → Copied 3 skills to hermes-imports/
110
- → Copied 5 memory files
79
+ The interactive flow asks which sources to migrate and prompts when an API key exists in multiple sources:
111
80
 
81
+ ```
112
82
  ⚠️ API Key conflicts detected:
113
83
  OPENAI_API_KEY exists in both sources
114
- Existing in: neoagent
115
- Incoming from: openclaw
116
- [1] Keep existing
117
- [2] Overwrite with new
118
- [3] Skip this key
119
- Choice [1]: 1
120
-
121
- Merging API keys...
122
- → Merged 4 API keys
123
-
124
- === Migration Complete ===
125
-
126
- Skills migrated to:
127
- openclaw-imports/
128
- hermes-imports/
129
-
130
- Memories migrated to:
131
- memory/openclaw/
132
- memory/hermes/
133
-
134
- Run `neoagent status` to verify the installation.
135
- Run `neoagent start` to start the server.
84
+ Existing in: neoagent
85
+ Incoming from: openclaw
86
+ [1] Keep existing
87
+ [2] Overwrite with new
88
+ [3] Skip this key
89
+ Choice [1]:
136
90
  ```
137
91
 
138
92
  ## Source Paths
@@ -140,99 +94,40 @@ Run `neoagent start` to start the server.
140
94
  ### OpenClaw
141
95
 
142
96
  | Data | Path |
143
- |------|------|
97
+ |---|---|
144
98
  | Config | `~/.openclaw/openclaw.json` |
145
- | Workspace | `~/.openclaw/workspace/` |
146
99
  | Skills | `~/.openclaw/skills/` |
147
- | Memories | `~/.openclaw/workspace/SOUL.md`, `MEMORY.md`, `USER.md` |
100
+ | Memory | `~/.openclaw/workspace/SOUL.md`, `MEMORY.md`, `USER.md` |
148
101
  | Legacy | `~/.clawdbot/` |
149
102
 
150
103
  ### Hermes
151
104
 
152
105
  | Data | Path |
153
- |------|------|
106
+ |---|---|
154
107
  | Config | `~/.hermes/config.yaml` |
155
108
  | Skills | `~/.hermes/skills/` |
156
- | Memories | `~/.hermes/memories/MEMORY.md`, `USER.md` |
157
- | API Keys | `~/.hermes/.env` |
109
+ | Memory | `~/.hermes/memories/MEMORY.md`, `USER.md` |
110
+ | API keys | `~/.hermes/.env` |
158
111
 
159
- ## Target Paths (NeoAgent)
112
+ ## API Keys Detected and Merged
160
113
 
161
- | Data | Path |
162
- |------|------|
163
- | Config | `~/.neoagent/.env` |
164
- | Skills | `~/.neoagent/agent-data/skills/` |
165
- | Memory | `~/.neoagent/agent-data/memory/` |
166
- | Database | `~/.neoagent/data/neoagent.db` |
167
-
168
- ## API Keys Merged
169
-
170
- The following API keys are automatically detected and merged:
171
-
172
- - `ANTHROPIC_API_KEY`
173
- - `OPENAI_API_KEY`
174
- - `XAI_API_KEY`
175
- - `GOOGLE_AI_KEY`
176
- - `MINIMAX_API_KEY`
177
- - `BRAVE_SEARCH_API_KEY`
178
- - `DEEPGRAM_API_KEY`
179
- - `TELEGRAM_BOT_TOKEN`
180
- - `OPENROUTER_API_KEY`
181
- - `ELEVENLABS_API_KEY`
182
- - `SLACK_BOT_TOKEN`
183
- - `DISCORD_BOT_TOKEN`
184
-
185
- ## Conflict Resolution
186
-
187
- When an API key exists in multiple sources (including your existing NeoAgent config), you'll be prompted:
188
-
189
- ```
190
- ⚠️ Conflict: OPENAI_API_KEY
191
- Existing in: neoagent
192
- Incoming from: openclaw
193
- [1] Keep existing
194
- [2] Overwrite with new
195
- [3] Skip this key
196
- ```
197
-
198
- Choose `1` to keep the NeoAgent value, `2` to overwrite with the imported value, or `3` to skip entirely.
114
+ `ANTHROPIC_API_KEY`, `OPENAI_API_KEY`, `XAI_API_KEY`, `GOOGLE_AI_KEY`, `MINIMAX_API_KEY`, `BRAVE_SEARCH_API_KEY`, `DEEPGRAM_API_KEY`, `TELEGRAM_BOT_TOKEN`, `OPENROUTER_API_KEY`, `ELEVENLABS_API_KEY`, `SLACK_BOT_TOKEN`, `DISCORD_BOT_TOKEN`
199
115
 
200
116
  ## Post-Migration Steps
201
117
 
202
- 1. **Verify installation**: `neoagent status`
203
- 2. **Start server**: `neoagent start`
204
- 3. **Review imported skills**: Check `~/.neoagent/agent-data/skills/openclaw-imports/` and `hermes-imports/`
205
- 4. **Review imported memories**: Check `~/.neoagent/agent-data/memory/`
206
- 5. **Configure messaging channels**: If you had Telegram/Discord configured, verify settings in the NeoAgent UI
118
+ 1. `neoagent status` — verify the installation
119
+ 2. `neoagent start` — start the server
120
+ 3. Review imported skills in `~/.neoagent/agent-data/skills/openclaw-imports/` and `hermes-imports/`
121
+ 4. Review imported memory in `~/.neoagent/agent-data/memory/`
122
+ 5. Reconfigure messaging channels in the NeoAgent UI if you had Telegram or Discord set up
207
123
 
208
124
  ## Troubleshooting
209
125
 
210
- ### "No OpenClaw or Hermes installation detected"
211
-
212
- Ensure your existing installation is at the default path (`~/.openclaw/` or `~/.hermes/`). If it's at a custom path, you can manually copy the data:
213
- - Skills: Copy `.md` files to `~/.neoagent/agent-data/skills/`
214
- - Memories: Copy to `~/.neoagent/agent-data/memory/`
215
- - API keys: Merge into `~/.neoagent/.env`
216
-
217
- ### "Permission denied" errors
218
-
219
- Ensure you have read permissions on the source directories and write permissions on `~/.neoagent/`.
220
-
221
- ### Migration partially failed
222
-
223
- The migration is designed to be idempotent - you can re-run it. Only new files are copied; existing files are not overwritten.
224
-
225
- ## Manual Migration
226
-
227
- If the automated migration doesn't work for your setup:
228
-
229
- 1. **Skills**: Copy skill `.md` files from source `skills/` directory to `~/.neoagent/agent-data/skills/[source]-imports/`
230
- 2. **Memory**: Copy `SOUL.md`, `MEMORY.md`, `USER.md` to `~/.neoagent/agent-data/memory/[source]/`
231
- 3. **API Keys**: Edit `~/.neoagent/.env` and add keys from source `.env` file
126
+ **"No OpenClaw or Hermes installation detected"** — Installation must be at the default path. If it's elsewhere, migrate manually:
127
+ - Copy `.md` skill files to `~/.neoagent/agent-data/skills/`
128
+ - Copy memory files to `~/.neoagent/agent-data/memory/`
129
+ - Merge API keys into `~/.neoagent/.env`
232
130
 
233
- ## Getting Help
131
+ **"Permission denied" errors** — Check read permissions on source directories and write permissions on `~/.neoagent/`.
234
132
 
235
- If you encounter issues:
236
- - Run `neoagent status` to check NeoAgent health
237
- - Run `neoagent logs` to view logs
238
- - Run `neoagent doctor` to diagnose issues
133
+ **Migration partially completed** — Safe to re-run. Only new files are copied; existing files are not overwritten.
@@ -1,36 +1,28 @@
1
1
  # Operations
2
2
 
3
- NeoAgent is a self-hosted service, so operations are part of the product. The CLI exposes the common service, release, and recovery tasks.
4
-
5
3
  ## Service State
6
4
 
7
5
  ```bash
8
- neoagent status
9
- neoagent logs
6
+ neoagent status # install root, config path, runtime paths, release channel, service state
7
+ neoagent logs # first stop for unexpected behavior in UI, messaging, OAuth, or tasks
10
8
  neoagent restart
11
9
  ```
12
10
 
13
- `neoagent status` reports the install root, config path, runtime data paths, release channel, and service state. `neoagent logs` is the first place to look when the service starts but the UI, messaging, OAuth, or tasks behave unexpectedly.
14
-
15
11
  ## Release Channels
16
12
 
17
13
  ```bash
18
- neoagent channel
19
- neoagent channel stable
20
- neoagent channel beta
14
+ neoagent channel # show current channel
15
+ neoagent channel stable # switch to stable releases (recommended for most installs)
16
+ neoagent channel beta # switch to prerelease builds
21
17
  ```
22
18
 
23
- The release channel controls what `neoagent update` follows. Use `stable` for normal self-hosted installs and `beta` when you intentionally want prerelease builds.
24
-
25
19
  ## Updates
26
20
 
27
21
  ```bash
28
22
  neoagent update
29
23
  ```
30
24
 
31
- On git installs, the updater follows the channel branch policy and reinstalls dependencies if the source changes. On npm installs, it attempts a global package reinstall from the matching npm tag.
32
-
33
- After updating, NeoAgent verifies that the bundled web client exists and restarts the service.
25
+ Follows the configured release channel. On git installs, pulls the latest source and reinstalls dependencies when they change. On npm installs, reinstalls the global package from the matching npm tag. Verifies the bundled web client and restarts the service.
34
26
 
35
27
  ## Recovery
36
28
 
@@ -38,21 +30,32 @@ After updating, NeoAgent verifies that the bundled web client exists and restart
38
30
  neoagent fix
39
31
  ```
40
32
 
41
- Use `neoagent fix` if a self-edit or broken local install leaves NeoAgent in a bad state. On git installs it backs up runtime data, saves local tracked changes, resets tracked source files, reinstalls dependencies, and restarts the service.
33
+ Use when NeoAgent is in a broken state after a self-edit or corrupted install. On git installs: backs up runtime data, saves local tracked changes, resets source files, reinstalls dependencies, and restarts.
42
34
 
43
- If the failure is configuration-only, rerun:
35
+ For configuration-only issues:
44
36
 
45
37
  ```bash
46
38
  neoagent setup
47
39
  neoagent restart
48
40
  ```
49
41
 
42
+ ## Troubleshooting
43
+
44
+ | Symptom | First step |
45
+ |---|---|
46
+ | Service won't start | `neoagent logs` — look for startup errors |
47
+ | UI loads but agent doesn't respond | Confirm an AI provider key is set in **Settings → AI Providers** |
48
+ | OAuth integration fails | Confirm `PUBLIC_URL` is reachable and the redirect URI matches |
49
+ | Messaging not delivering | Check credentials in the messaging tab; confirm `PUBLIC_URL` for webhook-based platforms |
50
+ | Tasks not running | Confirm the task is enabled; check **Runs** and **Logs** for error output |
51
+ | Broken after update | `neoagent fix` — resets source, reinstalls, restarts |
52
+
50
53
  ## Runtime Data
51
54
 
52
- | Path | Purpose |
55
+ | Path | Contents |
53
56
  |---|---|
54
57
  | `~/.neoagent/.env` | Server config and secrets |
55
- | `~/.neoagent/data/` | Database, session data, logs, and update status |
56
- | `~/.neoagent/agent-data/` | Skills, memory, and daily data |
58
+ | `~/.neoagent/data/` | Database, session data, logs, update status |
59
+ | `~/.neoagent/agent-data/` | Skills, memory, daily data |
57
60
 
58
- Back up these paths before moving a server or doing manual repair work.
61
+ Back up these paths before moving a server or doing manual repairs.
package/docs/skills.md CHANGED
@@ -1,16 +1,16 @@
1
1
  # Skills
2
2
 
3
- Skills are Markdown files that teach the agent how to use local capabilities or follow a workflow. NeoAgent loads them at runtime from `~/.neoagent/agent-data/skills/` by default, so edits do not require a service restart.
3
+ Skills are Markdown files that instruct the agent on how to use a local capability or follow a multi-step workflow. They load at runtime from `~/.neoagent/agent-data/skills/`, so edits take effect without restarting the service.
4
4
 
5
5
  ## Built-in Skills
6
6
 
7
7
  | Skill | Description |
8
8
  |---|---|
9
- | `browser.md` | Puppeteer-powered web browsing and scraping |
10
- | `cli.md` | Execute shell commands in a persistent terminal |
11
- | `files.md` | Read, write, and search files on the host |
12
- | `memory.md` | Store and recall long-term memories |
13
- | `messaging.md` | Send messages via connected messaging platforms such as WhatsApp, Telegram, Discord, Slack, Matrix, Teams, Google Chat, or webhook bridges |
9
+ | `browser.md` | Web browsing and scraping with Puppeteer |
10
+ | `cli.md` | Shell commands in a persistent PTY terminal |
11
+ | `files.md` | Read, write, and search host files |
12
+ | `memory.md` | Store and recall long-term facts |
13
+ | `messaging.md` | Send via Telegram, WhatsApp, Discord, Slack, Matrix, Teams, Google Chat, or webhooks |
14
14
  | `system-stats.md` | CPU, memory, and disk usage |
15
15
  | `weather.md` | Current weather via wttr.in |
16
16
  | `ip-info.md` | Public IP and geolocation |
@@ -21,16 +21,16 @@ Skills are Markdown files that teach the agent how to use local capabilities or
21
21
  | `find-large-files.md` | Locate large files |
22
22
  | `docker-status.md` | Docker container status |
23
23
  | `tail-log.md` | Tail any log file |
24
- | `news-hackernews.md` | Fetch Hacker News top stories |
24
+ | `news-hackernews.md` | Fetch top Hacker News stories |
25
25
  | `qr-code.md` | Generate QR codes |
26
- | `pdf-toolkit.md` | Inspect, extract, merge, split, and compress PDF files |
26
+ | `pdf-toolkit.md` | Inspect, extract, merge, split, compress PDFs |
27
27
  | `git-summary.md` | Summarize git status, branches, commits, and diffs |
28
- | `csv-toolkit.md` | Inspect and transform CSV or TSV data files |
29
- | `markdown-workbench.md` | Clean up, outline, and convert Markdown notes or docs |
28
+ | `csv-toolkit.md` | Inspect and transform CSV or TSV files |
29
+ | `markdown-workbench.md` | Clean up, outline, and convert Markdown documents |
30
30
 
31
- ## Adding a Skill
31
+ ## Creating a Custom Skill
32
32
 
33
- Create a Markdown file in `~/.neoagent/agent-data/skills/`:
33
+ Add a Markdown file to `~/.neoagent/agent-data/skills/`:
34
34
 
35
35
  ```markdown
36
36
  # My Skill Name
@@ -39,21 +39,21 @@ Brief description of what this skill does and when to use it.
39
39
 
40
40
  ## Usage
41
41
 
42
- Explain the steps or commands the agent should follow.
42
+ Step-by-step instructions or exact commands the agent should follow.
43
43
  ```
44
44
 
45
- The agent reads all `.md` files in the skills directory on each conversation turn. Keep each skill focused, include exact commands or tool names when they matter, and avoid storing secrets in skill files.
45
+ The agent reads all `.md` files in the skills directory on each turn. Keep skills focused. Include exact tool names or shell commands when precision matters. Don't store secrets in skill files.
46
+
47
+ **When to use a custom skill** — repeated workflows involving specific local paths, commands, or multi-step procedures. For connecting to third-party services, prefer official integrations or MCP tools instead.
46
48
 
47
49
  ## Skill Store
48
50
 
49
- The **Skills** section also exposes a built-in catalog through `/api/store`. Catalog entries install into the same runtime skills directory, so they stay GitHub-readable Markdown files and can be edited or removed after installation.
51
+ The **Skills** section in the UI includes a built-in catalog from `/api/store`. Skills install as Markdown files into the runtime skills directory editable and removable after installation.
50
52
 
51
- The catalog includes system, network, info, document, data, and git helpers such as disk usage, process monitoring, tail logs, finding large files, ping, DNS lookup, SSL certificate checks, weather, crypto prices, PDFs, CSV or TSV data, Markdown cleanup, and git summaries.
53
+ Catalog categories: system, network, info, document, data, and git helpers.
52
54
 
53
55
  ## MCP Tools
54
56
 
55
- External tools are connected via the [Model Context Protocol](https://modelcontextprotocol.io). Configure MCP servers in the Flutter app under **Models / Settings -> MCP**. Connected tools appear alongside built-in skills automatically.
56
-
57
- Use official integrations or structured MCP tools when they exist. They are usually safer and more reliable than browser automation or shell scraping.
57
+ External tools connect via the [Model Context Protocol](https://modelcontextprotocol.io). Configure MCP servers in **Settings MCP**. Connected tools appear alongside built-in skills automatically.
58
58
 
59
- See [Capabilities](capabilities.md) for the broader built-in agent tool surface beyond Markdown skills.
59
+ Use official integrations or MCP tools when they exist they are more reliable than browser automation or shell scraping and easier to audit.
@@ -1,19 +1,21 @@
1
1
  # Why NeoAgent
2
2
 
3
- NeoAgent is not trying to beat OpenClaw at every surface. OpenClaw is broader. NeoAgent is better if you want a focused self-hosted server where the AI can operate a server-attached Android emulator or device, use recordings and health data, keep credentials server-side, and stay on a smaller set of common messaging paths.
3
+ NeoAgent is the right choice if you want a focused self-hosted agent with real Android device control, recordings, health data, and a practical operator UI. OpenClaw covers more platforms but is a different kind of product.
4
4
 
5
- This comparison is based on the public [OpenClaw README](https://raw.githubusercontent.com/openclaw/openclaw/main/README.md) checked on April 7, 2026 and the current NeoAgent repository behavior.
5
+ This comparison is based on the public [OpenClaw README](https://raw.githubusercontent.com/openclaw/openclaw/main/README.md) as of April 7, 2026 and the current NeoAgent repository.
6
6
 
7
- | Category | NeoAgent | OpenClaw |
7
+ | | NeoAgent | OpenClaw |
8
8
  |---|---|---|
9
- | Best fit | A focused personal automation server with Android device control, recordings, health data, and built-in operator controls. | A broad personal assistant gateway with many channels, nodes, and companion surfaces. |
10
- | Setup shape | `npm install -g neoagent` followed by `neoagent install`. | `openclaw onboard` is the preferred guided setup path. |
11
- | Architecture | Self-hosted Node server, SQLite runtime data, built-in web UI, Android client, server-side credentials. | Gateway control plane with channel connections, optional apps/nodes, and a much wider platform surface. |
12
- | Android control | AI control of a server-attached Android emulator or device: screenshots, UI dumps, visible node inspection, app launch, intent launch, taps, long press, typing, swipes, key presses, wait-for-element, APK installs, and `adb shell`. | Broader node/app ecosystem with Android node capabilities documented publicly. |
13
- | Messaging breadth | Broad built-in messaging tab coverage: WhatsApp, Telegram, Discord, Slack, Google Chat, Signal, iMessage/BlueBubbles, IRC, Teams, Matrix, LINE, Mattermost, Twitch, and configurable webhook bridges for Feishu, Nextcloud Talk, Nostr, Synology Chat, Tlon, Zalo, WeChat, and WebChat, plus Telnyx Voice. | Still broader as a gateway ecosystem: the public README lists the same major channels plus a larger channel/node/app surface around them. |
14
- | Operator UX | Built-in UI sections for chat, runs, logs, tasks, skills, integrations, MCP, memory, devices, recordings, health, and settings. | Broader gateway, web, canvas, platform, node, and channel surfaces. |
15
- | Credentials | AI provider keys and OAuth client secrets are server-side; channel settings are stored through the app where supported. | Public docs describe a broader config and auth surface across gateway, channels, nodes, and apps. |
16
- | Automation | Trigger-based tasks, one-time runs, browser/file/CLI skills, MCP tools, official integrations, subagents, recording search, health summaries, and messaging delivery. | Broader automation platform including cron, webhooks, nodes, and channel-specific actions. |
17
- | Recovery | CLI-first service operations: `neoagent status`, `neoagent logs`, release channels, `neoagent update`, and `neoagent fix`. | Public README highlights onboarding, updating, and doctor-style diagnostics. |
9
+ | **Best for** | Personal automation server with Android control, recordings, and health data | Broad AI gateway with many channels, nodes, and companion surfaces |
10
+ | **Setup** | `npm install -g neoagent && neoagent install` | `openclaw onboard` guided setup |
11
+ | **Architecture** | Self-hosted Node server, SQLite, bundled web UI, server-side credentials | Gateway control plane with channels, optional nodes, wider platform surface |
12
+ | **Android control** | Full AI control: screenshots, UI dumps, tap, swipe, type, intent launch, APK install, `adb shell` | Android node capabilities via the node ecosystem |
13
+ | **Messaging** | 15+ platforms built-in Telegram, WhatsApp, Discord, Slack, Signal, Matrix, iMessage, Teams, IRC, LINE, Mattermost, Telnyx Voice, webhook bridges | Larger channel/node ecosystem |
14
+ | **Operator UI** | Chat, runs, logs, tasks, skills, integrations, MCP, memory, devices, recordings, health, settings | Gateway, canvas, platform, node, and channel surfaces |
15
+ | **Credentials** | All secrets server-side; channel settings stored through the app | Broader config surface across gateway, channels, and nodes |
16
+ | **Automation** | Cron tasks, integration triggers, browser/CLI skills, MCP, subagents, recording search, health summaries, messaging delivery | Cron, webhooks, nodes, channel-specific actions |
17
+ | **Recovery** | `neoagent status`, `neoagent logs`, `neoagent update`, `neoagent fix` | Doctor-style diagnostics plus channel/node tooling |
18
18
 
19
- Choose NeoAgent when you want the shortest path to a self-hosted proactive agent with a practical operator UI. Choose OpenClaw when you need maximum channel coverage, gateway/node architecture, or the larger companion-app ecosystem.
19
+ **Choose NeoAgent** when you want the shortest path to a self-hosted proactive agent with Android control and a practical operator UI.
20
+
21
+ **Choose OpenClaw** when you need maximum channel coverage, a gateway/node architecture, or the larger companion-app ecosystem.
@@ -40,6 +40,9 @@ async function resolveServerUrl(preferred) {
40
40
  function websocketUrl(serverUrl, token) {
41
41
  const url = new URL('/api/browser-extension/ws', serverUrl);
42
42
  url.protocol = url.protocol === 'https:' ? 'wss:' : 'ws:';
43
+ // Token in the URL is required for the HTTP upgrade handshake; the browser
44
+ // WebSocket API does not support custom headers. Ensure the server's access
45
+ // log scrubs query strings on this path to avoid persisting the token.
43
46
  url.searchParams.set('token', token);
44
47
  return url.toString();
45
48
  }
@@ -192,14 +195,19 @@ async function startPairing(serverUrl) {
192
195
  });
193
196
  const payload = await response.json().catch(() => ({}));
194
197
  if (!response.ok) throw new Error(payload.error || `Pairing failed: ${response.status}`);
198
+ const approvalUrl = String(payload.approvalUrl || '');
199
+ const approvalParsed = (() => { try { return new URL(approvalUrl); } catch { return null; } })();
200
+ if (!approvalParsed || !['http:', 'https:'].includes(approvalParsed.protocol)) {
201
+ throw new Error('Invalid approval URL returned by server.');
202
+ }
195
203
  await setStorage({
196
204
  serverUrl: normalized,
197
205
  pairingId: payload.pairingId,
198
206
  pairingSecret: payload.pairingSecret,
199
- approvalUrl: payload.approvalUrl,
207
+ approvalUrl,
200
208
  status: 'approval_pending',
201
209
  });
202
- await chrome.tabs.create({ url: payload.approvalUrl, active: true });
210
+ await chrome.tabs.create({ url: approvalUrl, active: true });
203
211
  return payload;
204
212
  }
205
213
 
@@ -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'