neoagent 2.4.1-beta.5 → 2.4.1-beta.7

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.
@@ -4574,6 +4574,7 @@ class NeoAgentController extends ChangeNotifier {
4574
4574
  Future<void> saveSettings({
4575
4575
  required String browserBackend,
4576
4576
  required String cliBackend,
4577
+ String? cliDesktopDeviceId,
4577
4578
  required bool smarterSelector,
4578
4579
  required List<String> enabledModels,
4579
4580
  required String defaultChatModel,
@@ -4603,6 +4604,7 @@ class NeoAgentController extends ChangeNotifier {
4603
4604
  'headless_browser': true,
4604
4605
  'browser_backend': browserBackend,
4605
4606
  'cli_backend': cliBackend,
4607
+ if (cliDesktopDeviceId != null) 'cli_desktop_device_id': cliDesktopDeviceId,
4606
4608
  'smarter_model_selector': smarterSelector,
4607
4609
  'enabled_models': enabledModels,
4608
4610
  'default_chat_model': defaultChatModel,
@@ -6140,6 +6142,11 @@ class NeoAgentController extends ChangeNotifier {
6140
6142
  String get cliBackend =>
6141
6143
  settings['cli_backend']?.toString().trim().toLowerCase() ?? 'vm';
6142
6144
 
6145
+ String? get cliDesktopDeviceId {
6146
+ final v = settings['cli_desktop_device_id']?.toString().trim();
6147
+ return (v == null || v.isEmpty) ? null : v;
6148
+ }
6149
+
6143
6150
  String get cloudBrowserBackend {
6144
6151
  final browser = browserBackend;
6145
6152
  final profile = settings['runtime_profile']
@@ -171,6 +171,7 @@ class _SettingsPanelState extends State<SettingsPanel> {
171
171
  late final TextEditingController _searchController;
172
172
  late String _browserBackend;
173
173
  late String _cliBackend;
174
+ String? _cliDesktopDeviceId;
174
175
  late bool _smarterSelector;
175
176
  late Set<String> _enabledModels;
176
177
  late String _defaultChatModel;
@@ -233,6 +234,7 @@ class _SettingsPanelState extends State<SettingsPanel> {
233
234
  .toSet();
234
235
  _browserBackend = _normalizeBrowserBackend(controller.browserBackend);
235
236
  _cliBackend = _normalizeCliBackend(controller.cliBackend);
237
+ _cliDesktopDeviceId = controller.cliDesktopDeviceId;
236
238
  _smarterSelector = controller.smarterSelector;
237
239
  _enabledModels = controller.enabledModelIds
238
240
  .where((id) => knownModels.contains(id))
@@ -475,6 +477,7 @@ class _SettingsPanelState extends State<SettingsPanel> {
475
477
  ? 'extension'
476
478
  : 'vm',
477
479
  cliBackend: _cliBackend == 'desktop' ? 'desktop' : 'vm',
480
+ cliDesktopDeviceId: _cliDesktopDeviceId,
478
481
  smarterSelector: _smarterSelector,
479
482
  enabledModels: _enabledModels.toList(),
480
483
  defaultChatModel: _defaultChatModel,
@@ -714,6 +717,46 @@ class _SettingsPanelState extends State<SettingsPanel> {
714
717
  }
715
718
  },
716
719
  ),
720
+ if (_cliBackend == 'desktop' && controller.desktopDevices.length > 1) ...<Widget>[
721
+ const SizedBox(height: 12),
722
+ DropdownButtonFormField<String>(
723
+ initialValue: controller.desktopDevices.any(
724
+ (d) => d['deviceId']?.toString() == _cliDesktopDeviceId,
725
+ )
726
+ ? _cliDesktopDeviceId
727
+ : null,
728
+ decoration: const InputDecoration(
729
+ labelText: 'Desktop device',
730
+ helperText: 'Choose which desktop companion runs CLI commands.',
731
+ ),
732
+ items: controller.desktopDevices.map((device) {
733
+ final deviceId = device['deviceId']?.toString() ?? '';
734
+ final label = device['hostname']?.toString().isNotEmpty == true
735
+ ? device['hostname']!.toString()
736
+ : deviceId;
737
+ final online = device['online'] == true;
738
+ return DropdownMenuItem<String>(
739
+ value: deviceId,
740
+ child: Row(
741
+ children: <Widget>[
742
+ Icon(
743
+ online ? Icons.circle : Icons.circle_outlined,
744
+ size: 10,
745
+ color: online ? Colors.green : Colors.grey,
746
+ ),
747
+ const SizedBox(width: 8),
748
+ Text(label),
749
+ ],
750
+ ),
751
+ );
752
+ }).toList(),
753
+ onChanged: (value) {
754
+ if (value != null) {
755
+ setState(() => _cliDesktopDeviceId = value);
756
+ }
757
+ },
758
+ ),
759
+ ],
717
760
  const SizedBox(height: 10),
718
761
  _buildInlineTestRow(
719
762
  label: 'CLI',
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "neoagent",
3
- "version": "2.4.1-beta.5",
3
+ "version": "2.4.1-beta.7",
4
4
  "description": "Proactive personal AI agent with no limits",
5
5
  "license": "AGPL-3.0-only",
6
6
  "main": "server/index.js",
@@ -1 +1 @@
1
- 097601d84771e93deda096bce9ab4570
1
+ 547ecdc48f374b4b525ad319e60c921b
@@ -37,6 +37,6 @@ _flutter.buildConfig = {"engineRevision":"4c525dac5ebe5971c5708ef73558ed8edcf4a3
37
37
 
38
38
  _flutter.loader.load({
39
39
  serviceWorkerSettings: {
40
- serviceWorkerVersion: "622837629" /* Flutter's service worker is deprecated and will be removed in a future Flutter release. */
40
+ serviceWorkerVersion: "730484345" /* Flutter's service worker is deprecated and will be removed in a future Flutter release. */
41
41
  }
42
42
  });