neoagent 3.1.1-beta.9 → 3.2.1-beta.0
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 +2 -2
- package/README.md +5 -1
- package/docs/architecture.md +1 -1
- package/docs/benchmarking.md +68 -87
- package/docs/capabilities.md +1 -1
- package/docs/clients-and-devices.md +3 -4
- package/docs/configuration.md +1 -1
- package/docs/devices.md +1 -2
- package/docs/health.md +24 -0
- package/docs/index.md +2 -2
- package/docs/integrations-architecture.md +6 -0
- package/docs/integrations.md +15 -1
- package/docs/models.md +1 -1
- package/docs/persistence.md +1 -1
- package/docs/why-neoagent.md +1 -1
- package/flutter_app/README.md +0 -5
- package/flutter_app/android/app/src/main/AndroidManifest.xml +0 -14
- package/flutter_app/android/app/src/main/kotlin/com/neoagent/flutter_app/MainActivity.kt +0 -98
- package/flutter_app/lib/main.dart +0 -6
- package/flutter_app/lib/main_app_shell.dart +0 -2
- package/flutter_app/lib/main_controller.dart +2 -867
- package/flutter_app/lib/main_devices.dart +0 -73
- package/flutter_app/lib/main_integrations.dart +339 -187
- package/flutter_app/lib/main_launcher.dart +2 -212
- package/flutter_app/lib/main_models.dart +0 -259
- package/flutter_app/lib/main_navigation.dart +2 -14
- package/flutter_app/lib/main_operations.dart +875 -383
- package/flutter_app/lib/main_runtime.dart +9 -208
- package/flutter_app/lib/main_settings.dart +17 -199
- package/flutter_app/lib/main_shared.dart +20 -591
- package/flutter_app/lib/main_timeline.dart +26 -122
- package/flutter_app/lib/main_voice_assistant.dart +0 -5
- package/flutter_app/lib/src/backend_client.dart +0 -102
- package/flutter_app/lib/src/desktop_companion_io.dart +1 -65
- package/flutter_app/lib/src/desktop_companion_stub.dart +0 -12
- package/flutter_app/linux/flutter/generated_plugin_registrant.cc +0 -4
- package/flutter_app/linux/flutter/generated_plugins.cmake +0 -1
- package/flutter_app/macos/Flutter/GeneratedPluginRegistrant.swift +0 -2
- package/flutter_app/macos/Podfile.lock +56 -5
- package/flutter_app/pubspec.lock +0 -7
- package/flutter_app/pubspec.yaml +0 -2
- package/flutter_app/web/index.html +174 -0
- package/flutter_app/windows/flutter/generated_plugin_registrant.cc +0 -3
- package/flutter_app/windows/flutter/generated_plugins.cmake +0 -1
- package/landing/index.html +0 -2
- package/lib/manager.js +1 -1
- package/lib/schema_migrations.js +75 -0
- package/package.json +1 -4
- package/server/db/database.js +1 -133
- package/server/http/middleware.js +2 -16
- package/server/http/routes.js +0 -2
- package/server/public/.last_build_id +1 -1
- package/server/public/assets/NOTICES +0 -25
- package/server/public/assets/fonts/MaterialIcons-Regular.otf +0 -0
- package/server/public/flutter_bootstrap.js +2 -2
- package/server/public/index.html +174 -0
- package/server/public/main.dart.js +92036 -91145
- package/server/routes/auth.js +11 -2
- package/server/routes/settings.js +0 -5
- package/server/routes/voice_assistant.js +1 -128
- package/server/services/account/erasure.js +0 -3
- package/server/services/ai/deliverables/artifact_helpers.js +1 -1
- package/server/services/ai/loop/conversation_loop.js +6 -2
- package/server/services/ai/loop/tool_dispatch.js +0 -3
- package/server/services/ai/messagingFallback.js +1 -1
- package/server/services/ai/settings.js +0 -6
- package/server/services/ai/toolEvidence.js +1 -4
- package/server/services/ai/tools.js +0 -234
- package/server/services/desktop/auth.js +0 -3
- package/server/services/desktop/registry.js +2 -50
- package/server/services/integrations/neoarchive/provider.js +616 -0
- package/server/services/integrations/neorecall/client.js +140 -0
- package/server/services/integrations/neorecall/constants.js +87 -0
- package/server/services/integrations/neorecall/provider.js +163 -0
- package/server/services/integrations/registry.js +4 -2
- package/server/services/manager.js +0 -22
- package/server/services/memory/manager.js +44 -19
- package/server/services/memory/retrieval_reasoning.js +36 -14
- package/server/services/messaging/formatting_guides.js +1 -0
- package/server/services/messaging/whatsapp.js +18 -0
- package/server/services/security/tool_categories.js +0 -5
- package/server/services/social_video/service.js +2 -20
- package/server/services/tasks/adapters/index.js +1 -1
- package/server/services/tasks/integration_runtime.js +3 -67
- package/server/services/tasks/runtime.js +1 -6
- package/server/services/tasks/task_repository.js +6 -13
- package/server/services/timeline/service.js +0 -224
- package/server/services/voice/message.js +0 -24
- package/server/services/voice/providers.js +42 -1
- package/server/services/voice/runtimeManager.js +9 -5
- package/server/services/voice/turnRunner.js +0 -22
- package/server/services/wearable/service.js +0 -5
- package/docs/recordings-and-health.md +0 -41
- package/flutter_app/android/app/src/main/kotlin/com/neoagent/flutter_app/recording/RecordingBootReceiver.kt +0 -21
- package/flutter_app/android/app/src/main/kotlin/com/neoagent/flutter_app/recording/RecordingForegroundService.kt +0 -586
- package/flutter_app/android/app/src/main/kotlin/com/neoagent/flutter_app/recording/RecordingStateStore.kt +0 -78
- package/flutter_app/android/app/src/main/kotlin/com/neoagent/flutter_app/recording/RecordingUploadClient.kt +0 -104
- package/flutter_app/lib/main_recordings.dart +0 -920
- package/flutter_app/lib/src/desktop_ocr_bridge.dart +0 -2
- package/flutter_app/lib/src/desktop_ocr_bridge_io.dart +0 -125
- package/flutter_app/lib/src/desktop_ocr_bridge_stub.dart +0 -30
- package/flutter_app/lib/src/desktop_passive_history.dart +0 -332
- package/flutter_app/lib/src/recording_bridge.dart +0 -232
- package/flutter_app/lib/src/recording_bridge_io.dart +0 -1027
- package/flutter_app/lib/src/recording_bridge_stub.dart +0 -120
- package/flutter_app/lib/src/recording_bridge_web.dart +0 -702
- package/flutter_app/lib/src/recording_chunk_queue.dart +0 -149
- package/flutter_app/lib/src/recording_chunk_queue_io.dart +0 -182
- package/flutter_app/lib/src/recording_payloads.dart +0 -95
- package/flutter_app/third_party/desktop_audio_capture/LICENSE +0 -21
- package/flutter_app/third_party/desktop_audio_capture/README.md +0 -262
- package/flutter_app/third_party/desktop_audio_capture/lib/audio_capture.dart +0 -65
- package/flutter_app/third_party/desktop_audio_capture/lib/config/mic_audio_config.dart +0 -153
- package/flutter_app/third_party/desktop_audio_capture/lib/config/system_adudio_config.dart +0 -110
- package/flutter_app/third_party/desktop_audio_capture/lib/mic/mic_audio_capture.dart +0 -461
- package/flutter_app/third_party/desktop_audio_capture/lib/model/audio_status.dart +0 -91
- package/flutter_app/third_party/desktop_audio_capture/lib/model/decibel_data.dart +0 -106
- package/flutter_app/third_party/desktop_audio_capture/lib/model/input_device_type.dart +0 -219
- package/flutter_app/third_party/desktop_audio_capture/lib/system/system_audio_capture.dart +0 -336
- package/flutter_app/third_party/desktop_audio_capture/linux/CMakeLists.txt +0 -101
- package/flutter_app/third_party/desktop_audio_capture/linux/audio_capture_plugin.cc +0 -692
- package/flutter_app/third_party/desktop_audio_capture/linux/include/audio_capture/audio_capture_plugin.h +0 -35
- package/flutter_app/third_party/desktop_audio_capture/linux/include/audio_capture/mic_capture_plugin.h +0 -36
- package/flutter_app/third_party/desktop_audio_capture/linux/include/desktop_audio_capture/audio_capture_plugin.h +0 -32
- package/flutter_app/third_party/desktop_audio_capture/linux/include/desktop_audio_capture/mic_capture_plugin.h +0 -32
- package/flutter_app/third_party/desktop_audio_capture/linux/mic_capture_plugin.cc +0 -878
- package/flutter_app/third_party/desktop_audio_capture/macos/Classes/AudioCapturePlugin.swift +0 -27
- package/flutter_app/third_party/desktop_audio_capture/macos/Classes/MicCapturePlugin.swift +0 -1172
- package/flutter_app/third_party/desktop_audio_capture/macos/Classes/SystemCapturePlugin.swift +0 -655
- package/flutter_app/third_party/desktop_audio_capture/macos/Resources/PrivacyInfo.xcprivacy +0 -12
- package/flutter_app/third_party/desktop_audio_capture/macos/desktop_audio_capture.podspec +0 -30
- package/flutter_app/third_party/desktop_audio_capture/pubspec.yaml +0 -87
- package/flutter_app/third_party/desktop_audio_capture/windows/CMakeLists.txt +0 -105
- package/flutter_app/third_party/desktop_audio_capture/windows/audio_capture_plugin.cpp +0 -80
- package/flutter_app/third_party/desktop_audio_capture/windows/audio_capture_plugin.h +0 -31
- package/flutter_app/third_party/desktop_audio_capture/windows/audio_capture_plugin_c_api.cpp +0 -12
- package/flutter_app/third_party/desktop_audio_capture/windows/include/audio_capture/audio_capture_plugin_c_api.h +0 -23
- package/flutter_app/third_party/desktop_audio_capture/windows/include/desktop_audio_capture/audio_capture_plugin.h +0 -25
- package/flutter_app/third_party/desktop_audio_capture/windows/mic_capture_plugin.cpp +0 -1117
- package/flutter_app/third_party/desktop_audio_capture/windows/mic_capture_plugin.h +0 -115
- package/flutter_app/third_party/desktop_audio_capture/windows/system_audio_capture_plugin.cpp +0 -777
- package/flutter_app/third_party/desktop_audio_capture/windows/system_audio_capture_plugin.h +0 -87
- package/server/routes/recordings.js +0 -335
- package/server/routes/screenHistory.js +0 -190
- package/server/services/ai/recordingInsights.js +0 -105
- package/server/services/integrations/neomail/provider.js +0 -993
- package/server/services/recordings/deepgram.js +0 -58
- package/server/services/recordings/manager.js +0 -1273
- package/server/services/tasks/adapters/neomail_email_received.js +0 -46
- package/server/services/voice/screenshotContext.js +0 -73
- package/server/services/voice/turnCoordinator.js +0 -51
|
@@ -23,25 +23,17 @@ class _NeoAgentAppState extends State<NeoAgentApp>
|
|
|
23
23
|
Timer? _assistantHotKeyHoldTimer;
|
|
24
24
|
bool _desktopShellInitialized = false;
|
|
25
25
|
bool _handlingDesktopClose = false;
|
|
26
|
-
bool _desktopToolbarWindowMode = false;
|
|
27
26
|
bool _desktopAssistantPopupWindowMode = false;
|
|
28
|
-
bool _syncingDesktopPresentation = false;
|
|
29
27
|
bool _assistantHotKeyPressed = false;
|
|
30
28
|
bool _assistantHotKeyHandledAsHold = false;
|
|
31
29
|
bool _assistantPttActive = false;
|
|
32
|
-
bool _desktopAssistantBlockedHintVisible = false;
|
|
33
30
|
bool _desktopAssistantReturnToHidden = false;
|
|
34
|
-
bool _desktopToolbarReturnToHidden = false;
|
|
35
31
|
Rect? _desktopNormalWindowBounds;
|
|
36
32
|
|
|
37
|
-
static const Size _desktopToolbarWindowSize = Size(840, 128);
|
|
38
33
|
static const Size _desktopAssistantPopupWindowSize = Size(460, 112);
|
|
39
34
|
static const Duration _desktopAssistantHoldThreshold = Duration(
|
|
40
35
|
milliseconds: 220,
|
|
41
36
|
);
|
|
42
|
-
static const Duration _desktopAssistantBlockedHintDuration = Duration(
|
|
43
|
-
milliseconds: 1400,
|
|
44
|
-
);
|
|
45
37
|
|
|
46
38
|
@override
|
|
47
39
|
void initState() {
|
|
@@ -52,7 +44,6 @@ class _NeoAgentAppState extends State<NeoAgentApp>
|
|
|
52
44
|
backendClient: backendClient,
|
|
53
45
|
healthBridge: HealthBridge(),
|
|
54
46
|
widgetBridge: WidgetBridge(),
|
|
55
|
-
recordingBridge: createRecordingBridge(),
|
|
56
47
|
)..bootstrap();
|
|
57
48
|
_webAppUpdateMonitor = createWebAppUpdateMonitor()..start();
|
|
58
49
|
_controller.addListener(_handleControllerChanged);
|
|
@@ -155,80 +146,12 @@ class _NeoAgentAppState extends State<NeoAgentApp>
|
|
|
155
146
|
}
|
|
156
147
|
await _syncTrayMenu();
|
|
157
148
|
await _syncAssistantHotkey();
|
|
158
|
-
await _syncDesktopPresentation();
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
Future<void> _syncDesktopPresentation() async {
|
|
162
|
-
if (_syncingDesktopPresentation) {
|
|
163
|
-
return;
|
|
164
|
-
}
|
|
165
|
-
_syncingDesktopPresentation = true;
|
|
166
|
-
try {
|
|
167
|
-
final runtime = _controller.recordingRuntime;
|
|
168
|
-
if (_desktopAssistantPopupWindowMode) {
|
|
169
|
-
return;
|
|
170
|
-
}
|
|
171
|
-
final isWindowVisible = await windowManager.isVisible();
|
|
172
|
-
if (_desktopToolbarWindowMode &&
|
|
173
|
-
(!runtime.active || !runtime.floatingToolbarVisible)) {
|
|
174
|
-
await _restoreMainWindowPresentation(
|
|
175
|
-
hideAfterRestore: _desktopToolbarReturnToHidden,
|
|
176
|
-
focusWindow: false,
|
|
177
|
-
);
|
|
178
|
-
_desktopToolbarReturnToHidden = false;
|
|
179
|
-
return;
|
|
180
|
-
}
|
|
181
|
-
if (!_desktopToolbarWindowMode &&
|
|
182
|
-
runtime.active &&
|
|
183
|
-
runtime.supportsFloatingToolbar &&
|
|
184
|
-
runtime.floatingToolbarVisible &&
|
|
185
|
-
(_controller.desktopFloatingToolbarPopupRequested ||
|
|
186
|
-
!isWindowVisible)) {
|
|
187
|
-
await _showDetachedToolbarWindow(
|
|
188
|
-
focusWindow:
|
|
189
|
-
_controller.desktopFloatingToolbarPopupRequested ||
|
|
190
|
-
isWindowVisible,
|
|
191
|
-
);
|
|
192
|
-
_controller.acknowledgeDesktopFloatingToolbarPopupRequest();
|
|
193
|
-
}
|
|
194
|
-
} finally {
|
|
195
|
-
_syncingDesktopPresentation = false;
|
|
196
|
-
}
|
|
197
149
|
}
|
|
198
150
|
|
|
199
151
|
Future<void> _syncTrayMenu() async {
|
|
200
|
-
final runtime = _controller.recordingRuntime;
|
|
201
|
-
final isRecordingActive = runtime.active;
|
|
202
|
-
final pauseLabel = runtime.paused ? 'Resume' : 'Pause';
|
|
203
|
-
final toolbarLabel = runtime.floatingToolbarVisible
|
|
204
|
-
? 'Hide floating bar'
|
|
205
|
-
: 'Show floating bar';
|
|
206
152
|
_trayMenu = Menu(
|
|
207
153
|
items: <MenuItem>[
|
|
208
154
|
MenuItem(key: 'open', label: 'Open'),
|
|
209
|
-
MenuItem(
|
|
210
|
-
key: 'start_recording',
|
|
211
|
-
label: 'Start recording',
|
|
212
|
-
disabled: isRecordingActive || !_controller.canStartDesktopRecording,
|
|
213
|
-
),
|
|
214
|
-
MenuItem(
|
|
215
|
-
key: 'pause_resume_recording',
|
|
216
|
-
label: pauseLabel,
|
|
217
|
-
disabled: !isRecordingActive,
|
|
218
|
-
),
|
|
219
|
-
MenuItem(
|
|
220
|
-
key: 'stop_recording',
|
|
221
|
-
label: 'Stop',
|
|
222
|
-
disabled: !isRecordingActive,
|
|
223
|
-
),
|
|
224
|
-
MenuItem.separator(),
|
|
225
|
-
MenuItem(
|
|
226
|
-
key: 'toggle_toolbar',
|
|
227
|
-
label: toolbarLabel,
|
|
228
|
-
disabled:
|
|
229
|
-
!_controller.recordingRuntime.supportsFloatingToolbar ||
|
|
230
|
-
!isRecordingActive,
|
|
231
|
-
),
|
|
232
155
|
MenuItem(key: 'open_voice_assistant', label: 'Open voice assistant'),
|
|
233
156
|
MenuItem.separator(),
|
|
234
157
|
MenuItem(key: 'quit', label: 'Quit'),
|
|
@@ -238,9 +161,7 @@ class _NeoAgentAppState extends State<NeoAgentApp>
|
|
|
238
161
|
}
|
|
239
162
|
|
|
240
163
|
Future<void> _syncAssistantHotkey() async {
|
|
241
|
-
final shouldRegister =
|
|
242
|
-
_controller.desktopAssistantHotkeyEnabled &&
|
|
243
|
-
_controller.recordingRuntime.supportsGlobalHotkeys;
|
|
164
|
+
final shouldRegister = _controller.desktopAssistantHotkeyEnabled;
|
|
244
165
|
if (!shouldRegister) {
|
|
245
166
|
if (_assistantHotKey != null) {
|
|
246
167
|
await hotKeyManager.unregister(_assistantHotKey!);
|
|
@@ -278,7 +199,6 @@ class _NeoAgentAppState extends State<NeoAgentApp>
|
|
|
278
199
|
_assistantHotKeyPressed = true;
|
|
279
200
|
_assistantHotKeyHandledAsHold = false;
|
|
280
201
|
_assistantPttActive = false;
|
|
281
|
-
_desktopAssistantBlockedHintVisible = false;
|
|
282
202
|
_assistantHotKeyHoldTimer?.cancel();
|
|
283
203
|
_assistantHotKeyHoldTimer = Timer(
|
|
284
204
|
_desktopAssistantHoldThreshold,
|
|
@@ -291,7 +211,6 @@ class _NeoAgentAppState extends State<NeoAgentApp>
|
|
|
291
211
|
_assistantHotKeyHoldTimer?.cancel();
|
|
292
212
|
if (_assistantHotKeyHandledAsHold) {
|
|
293
213
|
_assistantHotKeyHandledAsHold = false;
|
|
294
|
-
_desktopAssistantBlockedHintVisible = false;
|
|
295
214
|
if (_assistantPttActive ||
|
|
296
215
|
_controller.isLiveVoiceCaptureStarting ||
|
|
297
216
|
_controller.isLiveVoiceCaptureActive) {
|
|
@@ -314,12 +233,7 @@ class _NeoAgentAppState extends State<NeoAgentApp>
|
|
|
314
233
|
if (!_assistantHotKeyPressed) {
|
|
315
234
|
return;
|
|
316
235
|
}
|
|
317
|
-
_desktopAssistantBlockedHintVisible = false;
|
|
318
236
|
_assistantHotKeyHandledAsHold = true;
|
|
319
|
-
if (_controller.recordingRuntime.active) {
|
|
320
|
-
await _showAssistantBlockedHint();
|
|
321
|
-
return;
|
|
322
|
-
}
|
|
323
237
|
try {
|
|
324
238
|
await _showAssistantPopupWindow();
|
|
325
239
|
await _controller.startLiveVoiceCapture();
|
|
@@ -336,19 +250,6 @@ class _NeoAgentAppState extends State<NeoAgentApp>
|
|
|
336
250
|
}
|
|
337
251
|
}
|
|
338
252
|
|
|
339
|
-
Future<void> _showAssistantBlockedHint() async {
|
|
340
|
-
_desktopAssistantBlockedHintVisible = true;
|
|
341
|
-
await _showAssistantPopupWindow();
|
|
342
|
-
if (mounted) {
|
|
343
|
-
setState(() {});
|
|
344
|
-
}
|
|
345
|
-
await Future<void>.delayed(_desktopAssistantBlockedHintDuration);
|
|
346
|
-
if (_desktopAssistantBlockedHintVisible) {
|
|
347
|
-
_desktopAssistantBlockedHintVisible = false;
|
|
348
|
-
await _hideAssistantPopupWindow();
|
|
349
|
-
}
|
|
350
|
-
}
|
|
351
|
-
|
|
352
253
|
bool _hotKeysMatch(HotKey first, HotKey second) {
|
|
353
254
|
final firstModifiers = Set<HotKeyModifier>.from(
|
|
354
255
|
first.modifiers ?? const <HotKeyModifier>[],
|
|
@@ -363,17 +264,14 @@ class _NeoAgentAppState extends State<NeoAgentApp>
|
|
|
363
264
|
}
|
|
364
265
|
|
|
365
266
|
Future<void> _openMainWindow() async {
|
|
366
|
-
if (
|
|
267
|
+
if (_desktopAssistantPopupWindowMode) {
|
|
367
268
|
await _restoreMainWindowPresentation();
|
|
368
269
|
}
|
|
369
|
-
_controller.acknowledgeDesktopFloatingToolbarPopupRequest();
|
|
370
|
-
_desktopToolbarReturnToHidden = false;
|
|
371
270
|
await windowManager.show();
|
|
372
271
|
await windowManager.focus();
|
|
373
272
|
}
|
|
374
273
|
|
|
375
274
|
Future<void> _hideMainWindow() async {
|
|
376
|
-
final runtime = _controller.recordingRuntime;
|
|
377
275
|
if (_desktopAssistantPopupWindowMode) {
|
|
378
276
|
await _restoreMainWindowPresentation(
|
|
379
277
|
hideAfterRestore: true,
|
|
@@ -381,70 +279,15 @@ class _NeoAgentAppState extends State<NeoAgentApp>
|
|
|
381
279
|
);
|
|
382
280
|
return;
|
|
383
281
|
}
|
|
384
|
-
if (runtime.active &&
|
|
385
|
-
runtime.supportsFloatingToolbar &&
|
|
386
|
-
runtime.floatingToolbarVisible) {
|
|
387
|
-
await _showDetachedToolbarWindow(focusWindow: false);
|
|
388
|
-
return;
|
|
389
|
-
}
|
|
390
|
-
if (_desktopToolbarWindowMode) {
|
|
391
|
-
await _restoreMainWindowPresentation(
|
|
392
|
-
hideAfterRestore: true,
|
|
393
|
-
focusWindow: false,
|
|
394
|
-
);
|
|
395
|
-
return;
|
|
396
|
-
}
|
|
397
282
|
await windowManager.hide();
|
|
398
283
|
}
|
|
399
284
|
|
|
400
|
-
Future<void> _showDetachedToolbarWindow({required bool focusWindow}) async {
|
|
401
|
-
final runtime = _controller.recordingRuntime;
|
|
402
|
-
if (!runtime.active || !runtime.supportsFloatingToolbar) {
|
|
403
|
-
return;
|
|
404
|
-
}
|
|
405
|
-
final isVisible = await windowManager.isVisible();
|
|
406
|
-
_desktopToolbarReturnToHidden =
|
|
407
|
-
!isVisible &&
|
|
408
|
-
!_desktopToolbarWindowMode &&
|
|
409
|
-
!_desktopAssistantPopupWindowMode;
|
|
410
|
-
if (!_desktopToolbarWindowMode && !_desktopAssistantPopupWindowMode) {
|
|
411
|
-
_desktopNormalWindowBounds = await windowManager.getBounds();
|
|
412
|
-
}
|
|
413
|
-
if (mounted &&
|
|
414
|
-
(!_desktopToolbarWindowMode || _desktopAssistantPopupWindowMode)) {
|
|
415
|
-
setState(() {
|
|
416
|
-
_desktopToolbarWindowMode = true;
|
|
417
|
-
_desktopAssistantPopupWindowMode = false;
|
|
418
|
-
});
|
|
419
|
-
}
|
|
420
|
-
await windowManager.setTitle('NeoAgent');
|
|
421
|
-
await windowManager.setBackgroundColor(Colors.transparent);
|
|
422
|
-
await windowManager.setTitleBarStyle(
|
|
423
|
-
TitleBarStyle.hidden,
|
|
424
|
-
windowButtonVisibility: false,
|
|
425
|
-
);
|
|
426
|
-
if (!kIsWeb && defaultTargetPlatform == TargetPlatform.macOS) {
|
|
427
|
-
await windowManager.setHasShadow(false);
|
|
428
|
-
}
|
|
429
|
-
await windowManager.setResizable(false);
|
|
430
|
-
await windowManager.setAlwaysOnTop(true);
|
|
431
|
-
await windowManager.setSkipTaskbar(true);
|
|
432
|
-
await windowManager.setSize(_desktopToolbarWindowSize);
|
|
433
|
-
await windowManager.center();
|
|
434
|
-
await windowManager.show(inactive: !focusWindow);
|
|
435
|
-
if (focusWindow) {
|
|
436
|
-
await windowManager.focus();
|
|
437
|
-
}
|
|
438
|
-
}
|
|
439
|
-
|
|
440
285
|
Future<void> _restoreMainWindowPresentation({
|
|
441
286
|
bool hideAfterRestore = false,
|
|
442
287
|
bool focusWindow = true,
|
|
443
288
|
}) async {
|
|
444
|
-
if (mounted &&
|
|
445
|
-
(_desktopToolbarWindowMode || _desktopAssistantPopupWindowMode)) {
|
|
289
|
+
if (mounted && _desktopAssistantPopupWindowMode) {
|
|
446
290
|
setState(() {
|
|
447
|
-
_desktopToolbarWindowMode = false;
|
|
448
291
|
_desktopAssistantPopupWindowMode = false;
|
|
449
292
|
});
|
|
450
293
|
}
|
|
@@ -476,13 +319,11 @@ class _NeoAgentAppState extends State<NeoAgentApp>
|
|
|
476
319
|
Future<void> _showAssistantPopupWindow() async {
|
|
477
320
|
final isVisible = await windowManager.isVisible();
|
|
478
321
|
_desktopAssistantReturnToHidden = !isVisible;
|
|
479
|
-
if (!
|
|
322
|
+
if (!_desktopAssistantPopupWindowMode) {
|
|
480
323
|
_desktopNormalWindowBounds = await windowManager.getBounds();
|
|
481
324
|
}
|
|
482
|
-
if (mounted &&
|
|
483
|
-
(!_desktopAssistantPopupWindowMode || _desktopToolbarWindowMode)) {
|
|
325
|
+
if (mounted && !_desktopAssistantPopupWindowMode) {
|
|
484
326
|
setState(() {
|
|
485
|
-
_desktopToolbarWindowMode = false;
|
|
486
327
|
_desktopAssistantPopupWindowMode = true;
|
|
487
328
|
});
|
|
488
329
|
}
|
|
@@ -508,7 +349,6 @@ class _NeoAgentAppState extends State<NeoAgentApp>
|
|
|
508
349
|
if (!_desktopAssistantPopupWindowMode) {
|
|
509
350
|
return;
|
|
510
351
|
}
|
|
511
|
-
_desktopAssistantBlockedHintVisible = false;
|
|
512
352
|
final shouldHideWindow = _desktopAssistantReturnToHidden;
|
|
513
353
|
_desktopAssistantReturnToHidden = false;
|
|
514
354
|
await _restoreMainWindowPresentation(
|
|
@@ -532,9 +372,6 @@ class _NeoAgentAppState extends State<NeoAgentApp>
|
|
|
532
372
|
}
|
|
533
373
|
|
|
534
374
|
Future<void> _toggleAssistantPopupCaptureFromUi() async {
|
|
535
|
-
if (_desktopAssistantBlockedHintVisible) {
|
|
536
|
-
return;
|
|
537
|
-
}
|
|
538
375
|
try {
|
|
539
376
|
_assistantPttActive = !_controller.isLiveVoiceCaptureEngaged;
|
|
540
377
|
await _controller.toggleLiveVoiceCapture();
|
|
@@ -568,11 +405,9 @@ class _NeoAgentAppState extends State<NeoAgentApp>
|
|
|
568
405
|
'|auth:${_controller.isAuthenticated}'
|
|
569
406
|
'|refresh:${_controller.isRefreshing}'
|
|
570
407
|
'|section:${_controller.selectedSection.name}'
|
|
571
|
-
'|toolbarMode:$_desktopToolbarWindowMode'
|
|
572
408
|
'|assistantPopupMode:$_desktopAssistantPopupWindowMode'
|
|
573
409
|
'|assistantPttActive:${_controller.isLiveVoiceCaptureActive}'
|
|
574
|
-
'|assistantPttStarting:${_controller.isLiveVoiceCaptureStarting}'
|
|
575
|
-
'|assistantBlockedHint:$_desktopAssistantBlockedHintVisible';
|
|
410
|
+
'|assistantPttStarting:${_controller.isLiveVoiceCaptureStarting}';
|
|
576
411
|
if (_navigatorScopeSignature != rootStateSignature) {
|
|
577
412
|
_navigatorScopeSignature = rootStateSignature;
|
|
578
413
|
_navigatorKey = GlobalKey<NavigatorState>();
|
|
@@ -591,8 +426,7 @@ class _NeoAgentAppState extends State<NeoAgentApp>
|
|
|
591
426
|
return Stack(
|
|
592
427
|
children: <Widget>[
|
|
593
428
|
if (child != null) child,
|
|
594
|
-
if (!
|
|
595
|
-
!_desktopAssistantPopupWindowMode &&
|
|
429
|
+
if (!_desktopAssistantPopupWindowMode &&
|
|
596
430
|
_controller.showOfflineBanner)
|
|
597
431
|
Positioned(
|
|
598
432
|
top: 0,
|
|
@@ -613,8 +447,7 @@ class _NeoAgentAppState extends State<NeoAgentApp>
|
|
|
613
447
|
),
|
|
614
448
|
),
|
|
615
449
|
),
|
|
616
|
-
if (!
|
|
617
|
-
!_desktopAssistantPopupWindowMode &&
|
|
450
|
+
if (!_desktopAssistantPopupWindowMode &&
|
|
618
451
|
_webAppUpdateMonitor.isSupported &&
|
|
619
452
|
_webAppUpdateMonitor.updateAvailable)
|
|
620
453
|
Positioned(
|
|
@@ -636,26 +469,16 @@ class _NeoAgentAppState extends State<NeoAgentApp>
|
|
|
636
469
|
),
|
|
637
470
|
),
|
|
638
471
|
),
|
|
639
|
-
if (_supportsDesktopShell &&
|
|
640
|
-
!_desktopToolbarWindowMode &&
|
|
641
|
-
!_desktopAssistantPopupWindowMode)
|
|
642
|
-
_DesktopFloatingToolbar(controller: _controller),
|
|
643
472
|
],
|
|
644
473
|
);
|
|
645
474
|
},
|
|
646
475
|
home: _desktopAssistantPopupWindowMode
|
|
647
476
|
? _DesktopAssistantPopupShell(
|
|
648
477
|
controller: _controller,
|
|
649
|
-
blockedHintVisible: _desktopAssistantBlockedHintVisible,
|
|
650
478
|
onPrimaryAction: _toggleAssistantPopupCaptureFromUi,
|
|
651
479
|
onCancel: _cancelAssistantPopupFromUi,
|
|
652
480
|
)
|
|
653
|
-
: (
|
|
654
|
-
? _DetachedDesktopFloatingToolbarShell(
|
|
655
|
-
controller: _controller,
|
|
656
|
-
onOpenMainWindow: _openMainWindow,
|
|
657
|
-
)
|
|
658
|
-
: NeoAgentRoot(controller: _controller)),
|
|
481
|
+
: NeoAgentRoot(controller: _controller),
|
|
659
482
|
);
|
|
660
483
|
},
|
|
661
484
|
);
|
|
@@ -676,28 +499,6 @@ class _NeoAgentAppState extends State<NeoAgentApp>
|
|
|
676
499
|
case 'open':
|
|
677
500
|
unawaited(_openMainWindow());
|
|
678
501
|
break;
|
|
679
|
-
case 'start_recording':
|
|
680
|
-
if (_controller.canStartDesktopRecording) {
|
|
681
|
-
unawaited(_controller.startDesktopRecording());
|
|
682
|
-
}
|
|
683
|
-
break;
|
|
684
|
-
case 'pause_resume_recording':
|
|
685
|
-
if (_controller.recordingRuntime.paused) {
|
|
686
|
-
unawaited(_controller.resumeDesktopRecording());
|
|
687
|
-
} else {
|
|
688
|
-
unawaited(_controller.pauseDesktopRecording());
|
|
689
|
-
}
|
|
690
|
-
break;
|
|
691
|
-
case 'stop_recording':
|
|
692
|
-
unawaited(_controller.stopRecording());
|
|
693
|
-
break;
|
|
694
|
-
case 'toggle_toolbar':
|
|
695
|
-
if (_controller.recordingRuntime.floatingToolbarVisible) {
|
|
696
|
-
unawaited(_controller.hideDesktopFloatingToolbar());
|
|
697
|
-
} else {
|
|
698
|
-
unawaited(_controller.showDesktopFloatingToolbar());
|
|
699
|
-
}
|
|
700
|
-
break;
|
|
701
502
|
case 'open_voice_assistant':
|
|
702
503
|
unawaited(_openMainWindow());
|
|
703
504
|
_controller.setSelectedSection(AppSection.voiceAssistant);
|