neoagent 3.2.1-beta.1 → 3.2.1-beta.10

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 (172) hide show
  1. package/extensions/chrome-browser/background.mjs +318 -88
  2. package/extensions/chrome-browser/http.mjs +136 -0
  3. package/extensions/chrome-browser/protocol.mjs +654 -90
  4. package/flutter_app/lib/main_chat.dart +118 -739
  5. package/flutter_app/lib/main_controller.dart +111 -20
  6. package/flutter_app/lib/main_integrations.dart +607 -8
  7. package/flutter_app/lib/main_models.dart +3 -0
  8. package/flutter_app/lib/main_operations.dart +334 -321
  9. package/flutter_app/lib/main_security.dart +266 -112
  10. package/flutter_app/lib/main_settings.dart +4 -3
  11. package/flutter_app/lib/main_shared.dart +14 -11
  12. package/flutter_app/lib/src/backend_client.dart +78 -0
  13. package/flutter_app/lib/src/desktop_companion_actions.dart +185 -31
  14. package/flutter_app/lib/src/desktop_companion_io.dart +319 -86
  15. package/flutter_app/windows/runner/flutter_window.cpp +143 -32
  16. package/landing/index.html +3 -1
  17. package/lib/manager.js +106 -89
  18. package/lib/schema_migrations.js +115 -13
  19. package/package.json +30 -15
  20. package/runtime/paths.js +49 -5
  21. package/server/db/database.js +2 -2
  22. package/server/guest-agent.cli.package.json +13 -0
  23. package/server/guest_agent.js +85 -40
  24. package/server/http/middleware.js +24 -0
  25. package/server/http/routes.js +11 -6
  26. package/server/public/.last_build_id +1 -1
  27. package/server/public/assets/fonts/MaterialIcons-Regular.otf +0 -0
  28. package/server/public/flutter_bootstrap.js +2 -2
  29. package/server/public/main.dart.js +73083 -72209
  30. package/server/routes/admin.js +1 -1
  31. package/server/routes/android.js +30 -34
  32. package/server/routes/browser.js +23 -15
  33. package/server/routes/desktop.js +18 -1
  34. package/server/routes/integrations.js +107 -1
  35. package/server/routes/memory.js +1 -0
  36. package/server/routes/settings.js +16 -5
  37. package/server/routes/social_reach.js +12 -3
  38. package/server/routes/social_video.js +4 -0
  39. package/server/services/agents/manager.js +1 -1
  40. package/server/services/ai/capabilityHealth.js +62 -96
  41. package/server/services/ai/compaction.js +7 -2
  42. package/server/services/ai/history.js +45 -6
  43. package/server/services/ai/integrated_tools/http_request.js +8 -0
  44. package/server/services/ai/loop/agent_engine_core.js +390 -162
  45. package/server/services/ai/loop/blank_recovery.js +5 -4
  46. package/server/services/ai/loop/callbacks.js +1 -0
  47. package/server/services/ai/loop/completion_judge.js +121 -5
  48. package/server/services/ai/loop/conversation_loop.js +510 -332
  49. package/server/services/ai/loop/messaging_delivery.js +129 -57
  50. package/server/services/ai/loop/model_call_guard.js +91 -0
  51. package/server/services/ai/loop/model_io.js +20 -45
  52. package/server/services/ai/loop/progress_classification.js +2 -0
  53. package/server/services/ai/loop/tool_dispatch.js +19 -8
  54. package/server/services/ai/loopPolicy.js +48 -21
  55. package/server/services/ai/messagingFallback.js +17 -17
  56. package/server/services/ai/model_discovery.js +227 -0
  57. package/server/services/ai/model_failure_cache.js +108 -0
  58. package/server/services/ai/model_identity.js +71 -0
  59. package/server/services/ai/models.js +68 -163
  60. package/server/services/ai/providerRetry.js +17 -59
  61. package/server/services/ai/provider_selector.js +166 -0
  62. package/server/services/ai/providers/anthropic.js +2 -2
  63. package/server/services/ai/providers/claudeCode.js +21 -33
  64. package/server/services/ai/providers/githubCopilot.js +41 -20
  65. package/server/services/ai/providers/google.js +135 -97
  66. package/server/services/ai/providers/grok.js +4 -3
  67. package/server/services/ai/providers/grokOauth.js +19 -27
  68. package/server/services/ai/providers/nvidia.js +10 -5
  69. package/server/services/ai/providers/ollama.js +111 -84
  70. package/server/services/ai/providers/ollama_stream.js +142 -0
  71. package/server/services/ai/providers/openai.js +39 -5
  72. package/server/services/ai/providers/openaiCodex.js +11 -4
  73. package/server/services/ai/providers/openrouter.js +29 -7
  74. package/server/services/ai/providers/provider_error.js +36 -0
  75. package/server/services/ai/settings.js +26 -2
  76. package/server/services/ai/systemPrompt.js +19 -12
  77. package/server/services/ai/taskAnalysis.js +58 -10
  78. package/server/services/ai/terminal_reply.js +18 -0
  79. package/server/services/ai/toolEvidence.js +350 -29
  80. package/server/services/ai/tools.js +190 -111
  81. package/server/services/android/controller.js +770 -237
  82. package/server/services/android/process.js +140 -0
  83. package/server/services/android/sdk_download.js +143 -0
  84. package/server/services/android/uia.js +6 -5
  85. package/server/services/artifacts/store.js +24 -0
  86. package/server/services/browser/controller.js +843 -385
  87. package/server/services/browser/extension/gateway.js +40 -16
  88. package/server/services/browser/extension/protocol.js +15 -1
  89. package/server/services/browser/extension/provider.js +71 -47
  90. package/server/services/browser/extension/registry.js +155 -34
  91. package/server/services/cli/executor.js +62 -9
  92. package/server/services/credentials/bitwarden_cli.js +322 -0
  93. package/server/services/credentials/broker.js +594 -0
  94. package/server/services/desktop/gateway.js +41 -4
  95. package/server/services/desktop/protocol.js +3 -0
  96. package/server/services/desktop/provider.js +39 -42
  97. package/server/services/desktop/registry.js +137 -52
  98. package/server/services/integrations/bitwarden/constants.js +14 -0
  99. package/server/services/integrations/bitwarden/provider.js +197 -0
  100. package/server/services/integrations/bitwarden/snapshot.js +65 -0
  101. package/server/services/integrations/figma/provider.js +78 -12
  102. package/server/services/integrations/github/common.js +11 -6
  103. package/server/services/integrations/github/provider.js +52 -53
  104. package/server/services/integrations/google/provider.js +55 -19
  105. package/server/services/integrations/home_assistant/network.js +17 -20
  106. package/server/services/integrations/home_assistant/provider.js +7 -5
  107. package/server/services/integrations/home_assistant/tools.js +17 -5
  108. package/server/services/integrations/http.js +51 -0
  109. package/server/services/integrations/manager.js +159 -53
  110. package/server/services/integrations/microsoft/provider.js +80 -13
  111. package/server/services/integrations/neoarchive/provider.js +55 -29
  112. package/server/services/integrations/neorecall/client.js +17 -10
  113. package/server/services/integrations/neorecall/provider.js +20 -11
  114. package/server/services/integrations/notion/provider.js +16 -13
  115. package/server/services/integrations/oauth_provider.js +115 -51
  116. package/server/services/integrations/registry.js +2 -0
  117. package/server/services/integrations/slack/provider.js +98 -9
  118. package/server/services/integrations/spotify/provider.js +67 -71
  119. package/server/services/integrations/trello/provider.js +21 -7
  120. package/server/services/integrations/weather/provider.js +18 -12
  121. package/server/services/integrations/whatsapp/provider.js +76 -16
  122. package/server/services/manager.js +110 -1
  123. package/server/services/memory/embedding_index.js +20 -8
  124. package/server/services/memory/embeddings.js +151 -90
  125. package/server/services/memory/ingestion.js +50 -9
  126. package/server/services/memory/ingestion_documents.js +13 -3
  127. package/server/services/memory/manager.js +52 -19
  128. package/server/services/messaging/automation.js +85 -10
  129. package/server/services/messaging/formatting_guides.js +7 -4
  130. package/server/services/messaging/http_platforms.js +33 -13
  131. package/server/services/messaging/inbound_queue.js +78 -24
  132. package/server/services/messaging/inbound_store.js +224 -0
  133. package/server/services/messaging/manager.js +326 -51
  134. package/server/services/messaging/typing_keepalive.js +5 -2
  135. package/server/services/messaging/whatsapp.js +22 -14
  136. package/server/services/network/http.js +210 -0
  137. package/server/services/network/safe_request.js +307 -0
  138. package/server/services/runtime/backends/local-vm.js +227 -67
  139. package/server/services/runtime/docker-vm-manager.js +9 -0
  140. package/server/services/runtime/guest_bootstrap.js +30 -4
  141. package/server/services/runtime/guest_image.js +43 -12
  142. package/server/services/runtime/manager.js +77 -23
  143. package/server/services/runtime/validation.js +7 -6
  144. package/server/services/security/tool_categories.js +6 -0
  145. package/server/services/social_reach/channels/github.js +10 -4
  146. package/server/services/social_reach/channels/reddit.js +4 -4
  147. package/server/services/social_reach/channels/rss.js +2 -2
  148. package/server/services/social_reach/channels/social_video.js +12 -7
  149. package/server/services/social_reach/channels/v2ex.js +21 -8
  150. package/server/services/social_reach/channels/x.js +2 -2
  151. package/server/services/social_reach/channels/xueqiu.js +5 -5
  152. package/server/services/social_reach/service.js +9 -6
  153. package/server/services/social_reach/utils.js +65 -14
  154. package/server/services/social_video/service.js +160 -50
  155. package/server/services/tasks/integration_runtime.js +18 -8
  156. package/server/services/tasks/runtime.js +39 -4
  157. package/server/services/voice/agentBridge.js +17 -4
  158. package/server/services/voice/bufferedLiveRelayAdapter.js +5 -0
  159. package/server/services/voice/liveSession.js +31 -0
  160. package/server/services/voice/message.js +1 -1
  161. package/server/services/voice/openaiSpeech.js +33 -8
  162. package/server/services/voice/providers.js +233 -151
  163. package/server/services/voice/runtime.js +2 -2
  164. package/server/services/voice/runtimeManager.js +118 -20
  165. package/server/services/voice/turnRunner.js +6 -0
  166. package/server/services/wearable/firmware_manifest.js +51 -13
  167. package/server/services/wearable/service.js +1 -0
  168. package/server/utils/abort.js +96 -0
  169. package/server/utils/cloud-security.js +110 -3
  170. package/server/utils/files.js +31 -0
  171. package/server/utils/image_payload.js +95 -0
  172. package/server/utils/retry.js +107 -0
@@ -4890,6 +4890,88 @@ class NeoAgentController extends ChangeNotifier {
4890
4890
  }
4891
4891
  }
4892
4892
 
4893
+ Future<Map<String, dynamic>> unlockBitwarden(
4894
+ String masterPassword, {
4895
+ required int idleTimeoutMinutes,
4896
+ }) async {
4897
+ try {
4898
+ errorMessage = null;
4899
+ return await _backendClient.unlockBitwarden(
4900
+ backendUrl,
4901
+ masterPassword: masterPassword,
4902
+ idleTimeoutMinutes: idleTimeoutMinutes,
4903
+ agentId: _scopedAgentId,
4904
+ );
4905
+ } catch (error) {
4906
+ errorMessage = _friendlyErrorMessage(error);
4907
+ rethrow;
4908
+ } finally {
4909
+ notifyListeners();
4910
+ }
4911
+ }
4912
+
4913
+ Future<void> lockBitwarden() async {
4914
+ try {
4915
+ errorMessage = null;
4916
+ await _backendClient.lockBitwarden(backendUrl, agentId: _scopedAgentId);
4917
+ } catch (error) {
4918
+ errorMessage = _friendlyErrorMessage(error);
4919
+ rethrow;
4920
+ } finally {
4921
+ notifyListeners();
4922
+ }
4923
+ }
4924
+
4925
+ Future<List<Map<String, dynamic>>> fetchBitwardenItems() async {
4926
+ final response = await _backendClient.fetchBitwardenItems(
4927
+ backendUrl,
4928
+ agentId: _scopedAgentId,
4929
+ );
4930
+ return _jsonMapList(
4931
+ response['items'],
4932
+ ).map((row) => Map<String, dynamic>.from(row)).toList();
4933
+ }
4934
+
4935
+ Future<List<Map<String, dynamic>>> fetchCredentialBindings() async {
4936
+ final response = await _backendClient.fetchCredentialBindings(
4937
+ backendUrl,
4938
+ agentId: _scopedAgentId,
4939
+ );
4940
+ return _jsonMapList(
4941
+ response['bindings'],
4942
+ ).map((row) => Map<String, dynamic>.from(row)).toList();
4943
+ }
4944
+
4945
+ Future<void> createCredentialBinding(Map<String, dynamic> binding) async {
4946
+ try {
4947
+ errorMessage = null;
4948
+ await _backendClient.createCredentialBinding(
4949
+ backendUrl,
4950
+ binding: binding,
4951
+ agentId: _scopedAgentId,
4952
+ );
4953
+ await refreshSkills();
4954
+ } catch (error) {
4955
+ errorMessage = _friendlyErrorMessage(error);
4956
+ rethrow;
4957
+ }
4958
+ }
4959
+
4960
+ Future<void> deleteCredentialBinding(String bindingId) async {
4961
+ try {
4962
+ errorMessage = null;
4963
+ await _backendClient.deleteCredentialBinding(
4964
+ backendUrl,
4965
+ bindingId,
4966
+ agentId: _scopedAgentId,
4967
+ );
4968
+ await refreshSkills();
4969
+ } catch (error) {
4970
+ errorMessage = _friendlyErrorMessage(error);
4971
+ rethrow;
4972
+ }
4973
+ }
4974
+
4893
4975
  Future<void> disconnectOfficialIntegration(
4894
4976
  String providerId, {
4895
4977
  required int connectionId,
@@ -5950,11 +6032,13 @@ class NeoAgentController extends ChangeNotifier {
5950
6032
  List<String> get enabledModelIds {
5951
6033
  final raw = settings['enabled_models'];
5952
6034
  if (raw is List) {
5953
- final knownIds = supportedModels.map((model) => model.id).toSet();
5954
- final filtered = raw
5955
- .map((item) => item.toString())
5956
- .where((id) => knownIds.contains(id))
5957
- .toList();
6035
+ final filtered = <String>[];
6036
+ for (final item in raw) {
6037
+ final model = _modelForValue(item.toString(), supportedModels);
6038
+ if (model != null && !filtered.contains(model.id)) {
6039
+ filtered.add(model.id);
6040
+ }
6041
+ }
5958
6042
  if (filtered.isNotEmpty) {
5959
6043
  return filtered;
5960
6044
  }
@@ -5965,18 +6049,30 @@ class NeoAgentController extends ChangeNotifier {
5965
6049
  .toList();
5966
6050
  }
5967
6051
 
5968
- String get defaultChatModel =>
5969
- settings['default_chat_model']?.toString() ?? 'auto';
6052
+ String get defaultChatModel => _ensureModelValue(
6053
+ settings['default_chat_model']?.toString() ?? 'auto',
6054
+ supportedModels,
6055
+ allowAuto: true,
6056
+ );
5970
6057
 
5971
- String get defaultSubagentModel =>
5972
- settings['default_subagent_model']?.toString() ?? 'auto';
6058
+ String get defaultSubagentModel => _ensureModelValue(
6059
+ settings['default_subagent_model']?.toString() ?? 'auto',
6060
+ supportedModels,
6061
+ allowAuto: true,
6062
+ );
5973
6063
 
5974
- String get defaultSpeechModel =>
5975
- settings['default_speech_model']?.toString() ?? 'auto';
6064
+ String get defaultSpeechModel => _ensureModelValue(
6065
+ settings['default_speech_model']?.toString() ?? 'auto',
6066
+ supportedModels,
6067
+ allowAuto: true,
6068
+ );
5976
6069
 
5977
- String get fallbackModel =>
5978
- settings['fallback_model_id']?.toString() ??
5979
- _firstAvailableModelId(supportedModels);
6070
+ String get fallbackModel => _ensureModelValue(
6071
+ settings['fallback_model_id']?.toString() ??
6072
+ _firstAvailableModelId(supportedModels),
6073
+ supportedModels,
6074
+ allowAuto: false,
6075
+ );
5980
6076
 
5981
6077
  String get voiceSttProvider =>
5982
6078
  _settingString('voice_stt_provider', 'openai', lowercase: true);
@@ -6117,12 +6213,7 @@ class NeoAgentController extends ChangeNotifier {
6117
6213
  }
6118
6214
 
6119
6215
  ModelMeta? _modelById(String id) {
6120
- for (final model in supportedModels) {
6121
- if (model.id == id) {
6122
- return model;
6123
- }
6124
- }
6125
- return null;
6216
+ return _modelForValue(id, supportedModels);
6126
6217
  }
6127
6218
 
6128
6219
  void _ensureUpdatePolling() {