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
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
const {
|
|
4
|
-
ensureOwnedIntegrationConnection,
|
|
5
|
-
normalizeBoolean,
|
|
6
|
-
normalizeTrimmedText,
|
|
7
|
-
} = require('../security');
|
|
8
|
-
|
|
9
|
-
module.exports = {
|
|
10
|
-
type: 'neomail_email_received',
|
|
11
|
-
label: 'NeoMail Email Received',
|
|
12
|
-
providerKey: 'neomail',
|
|
13
|
-
appKey: 'mailbox',
|
|
14
|
-
async validateConfig(config = {}, context = {}) {
|
|
15
|
-
const connection = ensureOwnedIntegrationConnection(context.integrationManager, {
|
|
16
|
-
userId: context.userId,
|
|
17
|
-
agentId: context.agentId,
|
|
18
|
-
connectionId: config.connectionId || config.connection_id,
|
|
19
|
-
providerKey: 'neomail',
|
|
20
|
-
appKey: 'mailbox',
|
|
21
|
-
});
|
|
22
|
-
return {
|
|
23
|
-
connectionId: connection.id,
|
|
24
|
-
accountEmail: connection.account_email || null,
|
|
25
|
-
mailAccountId: normalizeTrimmedText(
|
|
26
|
-
config.mailAccountId || config.mail_account_id,
|
|
27
|
-
120,
|
|
28
|
-
),
|
|
29
|
-
folder: normalizeTrimmedText(config.folder, 200),
|
|
30
|
-
query: normalizeTrimmedText(config.query, 500),
|
|
31
|
-
unreadOnly: normalizeBoolean(
|
|
32
|
-
config.unreadOnly ?? config.unread_only,
|
|
33
|
-
false,
|
|
34
|
-
),
|
|
35
|
-
};
|
|
36
|
-
},
|
|
37
|
-
summarize(config = {}) {
|
|
38
|
-
const parts = ['NeoMail'];
|
|
39
|
-
if (config.accountEmail) parts.push(config.accountEmail);
|
|
40
|
-
if (config.mailAccountId) parts.push(`mailbox: ${config.mailAccountId}`);
|
|
41
|
-
if (config.folder) parts.push(`folder: ${config.folder}`);
|
|
42
|
-
if (config.query) parts.push(`query: ${config.query}`);
|
|
43
|
-
if (config.unreadOnly) parts.push('unread only');
|
|
44
|
-
return parts.join(' · ');
|
|
45
|
-
},
|
|
46
|
-
};
|
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
const fs = require('fs/promises');
|
|
4
|
-
const os = require('os');
|
|
5
|
-
const path = require('path');
|
|
6
|
-
|
|
7
|
-
const { analyzeImageForUser, resolveImageMimeType } = require('../ai/imageAnalysis');
|
|
8
|
-
|
|
9
|
-
function extensionForMimeType(mimeType = '') {
|
|
10
|
-
switch (String(mimeType).trim().toLowerCase()) {
|
|
11
|
-
case 'image/png':
|
|
12
|
-
return 'png';
|
|
13
|
-
case 'image/webp':
|
|
14
|
-
return 'webp';
|
|
15
|
-
case 'image/gif':
|
|
16
|
-
return 'gif';
|
|
17
|
-
case 'image/jpg':
|
|
18
|
-
case 'image/jpeg':
|
|
19
|
-
default:
|
|
20
|
-
return 'jpg';
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
async function analyzeVoiceAssistantScreenshot({
|
|
25
|
-
userId,
|
|
26
|
-
agentId = null,
|
|
27
|
-
screenshotBase64,
|
|
28
|
-
screenshotMimeType = 'image/jpeg',
|
|
29
|
-
} = {}) {
|
|
30
|
-
const encoded = String(screenshotBase64 || '').trim();
|
|
31
|
-
if (!encoded) {
|
|
32
|
-
return null;
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
const mimeType = resolveImageMimeType(
|
|
36
|
-
`screen.${extensionForMimeType(screenshotMimeType)}`,
|
|
37
|
-
screenshotMimeType,
|
|
38
|
-
);
|
|
39
|
-
const buffer = Buffer.from(encoded, 'base64');
|
|
40
|
-
if (!buffer.length) {
|
|
41
|
-
return null;
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
const tempDir = await fs.mkdtemp(
|
|
45
|
-
path.join(os.tmpdir(), 'neoagent-voice-screen-'),
|
|
46
|
-
);
|
|
47
|
-
const imagePath = path.join(
|
|
48
|
-
tempDir,
|
|
49
|
-
`capture.${extensionForMimeType(mimeType)}`,
|
|
50
|
-
);
|
|
51
|
-
|
|
52
|
-
try {
|
|
53
|
-
await fs.writeFile(imagePath, buffer);
|
|
54
|
-
const result = await analyzeImageForUser({
|
|
55
|
-
userId,
|
|
56
|
-
agentId,
|
|
57
|
-
imagePath,
|
|
58
|
-
mimeType,
|
|
59
|
-
question:
|
|
60
|
-
'Describe the user’s current screen for a voice assistant. Focus on the visible app, important UI state, readable text, alerts, selected items, and anything relevant to the user’s spoken request.',
|
|
61
|
-
});
|
|
62
|
-
return {
|
|
63
|
-
...result,
|
|
64
|
-
mimeType,
|
|
65
|
-
};
|
|
66
|
-
} finally {
|
|
67
|
-
await fs.rm(tempDir, { recursive: true, force: true });
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
module.exports = {
|
|
72
|
-
analyzeVoiceAssistantScreenshot,
|
|
73
|
-
};
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
class TurnCoordinator {
|
|
4
|
-
constructor() {
|
|
5
|
-
this._stateByKey = new Map();
|
|
6
|
-
}
|
|
7
|
-
|
|
8
|
-
async run(key, taskFactory) {
|
|
9
|
-
const normalizedKey = String(key || '').trim();
|
|
10
|
-
if (!normalizedKey) {
|
|
11
|
-
return taskFactory();
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
const state = this._stateByKey.get(normalizedKey) || { running: false, pending: null };
|
|
15
|
-
this._stateByKey.set(normalizedKey, state);
|
|
16
|
-
|
|
17
|
-
if (state.running) {
|
|
18
|
-
return new Promise((resolve, reject) => {
|
|
19
|
-
state.pending = { taskFactory, resolve, reject };
|
|
20
|
-
});
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
state.running = true;
|
|
24
|
-
try {
|
|
25
|
-
let result = await taskFactory();
|
|
26
|
-
|
|
27
|
-
// Coalesce concurrent requests: keep only latest pending task.
|
|
28
|
-
while (state.pending) {
|
|
29
|
-
const pending = state.pending;
|
|
30
|
-
state.pending = null;
|
|
31
|
-
try {
|
|
32
|
-
result = await pending.taskFactory();
|
|
33
|
-
pending.resolve(result);
|
|
34
|
-
} catch (err) {
|
|
35
|
-
pending.reject(err);
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
return result;
|
|
40
|
-
} finally {
|
|
41
|
-
state.running = false;
|
|
42
|
-
if (!state.pending) {
|
|
43
|
-
this._stateByKey.delete(normalizedKey);
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
module.exports = {
|
|
50
|
-
TurnCoordinator,
|
|
51
|
-
};
|