neoagent 2.3.1-beta.90 → 2.3.1-beta.91
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.env.example +4 -0
- package/flutter_app/lib/main_app_shell.dart +6 -4
- package/flutter_app/lib/main_controller.dart +5 -0
- package/flutter_app/lib/main_devices.dart +80 -745
- package/flutter_app/lib/main_settings.dart +50 -0
- package/package.json +1 -1
- package/server/public/.last_build_id +1 -1
- package/server/public/assets/fonts/MaterialIcons-Regular.otf +0 -0
- package/server/public/flutter_bootstrap.js +1 -1
- package/server/public/main.dart.js +47867 -47755
- package/server/services/ai/capabilityHealth.js +2 -3
- package/server/services/android/controller.js +456 -2851
- package/server/services/runtime/backends/local-vm.js +2 -136
- package/server/services/runtime/docker-vm-manager.js +392 -0
- package/server/services/runtime/manager.js +53 -38
- package/server/services/runtime/settings.js +12 -10
- package/server/services/runtime/validation.js +4 -1
- package/server/utils/deployment.js +8 -2
- package/server/services/runtime/qemu.js +0 -1118
package/.env.example
CHANGED
|
@@ -26,6 +26,10 @@ NEOAGENT_DEPLOYMENT_MODE=self_hosted
|
|
|
26
26
|
# prod -> multi-user / isolated per-user VM runtime
|
|
27
27
|
NEOAGENT_PROFILE=prod
|
|
28
28
|
|
|
29
|
+
# Allow new user sign-ups. Set to false to disable registration (the first user
|
|
30
|
+
# can always register regardless of this setting).
|
|
31
|
+
# NEOAGENT_ALLOW_SIGNUP=false
|
|
32
|
+
|
|
29
33
|
# VM runtime settings used by `prod`.
|
|
30
34
|
# Set these before switching NEOAGENT_PROFILE=prod.
|
|
31
35
|
# The app can cache a shared base image automatically from a URL, then create
|
|
@@ -1064,6 +1064,7 @@ class _HomeViewState extends State<HomeView> {
|
|
|
1064
1064
|
bool _blockedDialogOpen = false;
|
|
1065
1065
|
SidebarGroup? _expandedSidebarGroup;
|
|
1066
1066
|
AppSection? _lastSelectedSection;
|
|
1067
|
+
final GlobalKey _devicesPanelKey = GlobalKey();
|
|
1067
1068
|
|
|
1068
1069
|
@override
|
|
1069
1070
|
void initState() {
|
|
@@ -1221,7 +1222,7 @@ class _HomeViewState extends State<HomeView> {
|
|
|
1221
1222
|
key: ValueKey<AppSection>(
|
|
1222
1223
|
controller.selectedSection,
|
|
1223
1224
|
),
|
|
1224
|
-
child: _SectionBody(controller: controller),
|
|
1225
|
+
child: _SectionBody(controller: controller, devicesPanelKey: _devicesPanelKey),
|
|
1225
1226
|
),
|
|
1226
1227
|
),
|
|
1227
1228
|
),
|
|
@@ -1271,7 +1272,7 @@ class _HomeViewState extends State<HomeView> {
|
|
|
1271
1272
|
switchOutCurve: Curves.easeInCubic,
|
|
1272
1273
|
child: KeyedSubtree(
|
|
1273
1274
|
key: ValueKey<AppSection>(controller.selectedSection),
|
|
1274
|
-
child: _SectionBody(controller: controller),
|
|
1275
|
+
child: _SectionBody(controller: controller, devicesPanelKey: _devicesPanelKey),
|
|
1275
1276
|
),
|
|
1276
1277
|
),
|
|
1277
1278
|
),
|
|
@@ -2096,9 +2097,10 @@ class _MobileDrawer extends StatelessWidget {
|
|
|
2096
2097
|
}
|
|
2097
2098
|
|
|
2098
2099
|
class _SectionBody extends StatelessWidget {
|
|
2099
|
-
const _SectionBody({required this.controller});
|
|
2100
|
+
const _SectionBody({required this.controller, this.devicesPanelKey});
|
|
2100
2101
|
|
|
2101
2102
|
final NeoAgentController controller;
|
|
2103
|
+
final GlobalKey? devicesPanelKey;
|
|
2102
2104
|
|
|
2103
2105
|
@override
|
|
2104
2106
|
Widget build(BuildContext context) {
|
|
@@ -2108,7 +2110,7 @@ class _SectionBody extends StatelessWidget {
|
|
|
2108
2110
|
case AppSection.voiceAssistant:
|
|
2109
2111
|
return VoiceAssistantPanel(controller: controller);
|
|
2110
2112
|
case AppSection.devices:
|
|
2111
|
-
return DevicesPanel(controller: controller);
|
|
2113
|
+
return DevicesPanel(key: devicesPanelKey, controller: controller);
|
|
2112
2114
|
case AppSection.recordings:
|
|
2113
2115
|
return RecordingsPanel(controller: controller);
|
|
2114
2116
|
case AppSection.messaging:
|
|
@@ -4560,6 +4560,7 @@ class NeoAgentController extends ChangeNotifier {
|
|
|
4560
4560
|
|
|
4561
4561
|
Future<void> saveSettings({
|
|
4562
4562
|
required String browserBackend,
|
|
4563
|
+
required String cliBackend,
|
|
4563
4564
|
required bool smarterSelector,
|
|
4564
4565
|
required List<String> enabledModels,
|
|
4565
4566
|
required String defaultChatModel,
|
|
@@ -4588,6 +4589,7 @@ class NeoAgentController extends ChangeNotifier {
|
|
|
4588
4589
|
final payload = <String, dynamic>{
|
|
4589
4590
|
'headless_browser': true,
|
|
4590
4591
|
'browser_backend': browserBackend,
|
|
4592
|
+
'cli_backend': cliBackend,
|
|
4591
4593
|
'smarter_model_selector': smarterSelector,
|
|
4592
4594
|
'enabled_models': enabledModels,
|
|
4593
4595
|
'default_chat_model': defaultChatModel,
|
|
@@ -6122,6 +6124,9 @@ class NeoAgentController extends ChangeNotifier {
|
|
|
6122
6124
|
String get browserBackend =>
|
|
6123
6125
|
settings['browser_backend']?.toString().trim().toLowerCase() ?? 'vm';
|
|
6124
6126
|
|
|
6127
|
+
String get cliBackend =>
|
|
6128
|
+
settings['cli_backend']?.toString().trim().toLowerCase() ?? 'vm';
|
|
6129
|
+
|
|
6125
6130
|
String get cloudBrowserBackend {
|
|
6126
6131
|
final browser = browserBackend;
|
|
6127
6132
|
final profile = settings['runtime_profile']
|