neoagent 2.5.1 → 2.5.2-beta.1
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/README.md +6 -24
- package/flutter_app/lib/main_operations.dart +7 -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 +3159 -3157
- package/server/routes/triggers.js +36 -18
- package/server/services/ai/engine.js +545 -46
- package/server/services/ai/tools.js +26 -16
- package/server/services/tasks/adapters/android_notification_received.js +18 -0
- package/server/services/tasks/adapters/index.js +2 -0
|
@@ -255,22 +255,32 @@ function hasAlreadySentProactiveMessage({ triggerSource, runState, deliveryState
|
|
|
255
255
|
}
|
|
256
256
|
|
|
257
257
|
function markProactiveMessageSent({ runState, deliveryState, content }) {
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
258
|
+
const message = String(content || '');
|
|
259
|
+
const sentAt = new Date().toISOString();
|
|
260
|
+
if (runState) {
|
|
261
|
+
runState.messagingSent = true;
|
|
262
|
+
runState.finalDeliverySent = true;
|
|
263
|
+
runState.lastFinalDeliveryAt = sentAt;
|
|
264
|
+
if (runState.progressLedger && typeof runState.progressLedger === 'object') {
|
|
265
|
+
runState.progressLedger.lastUserVisibleUpdateAt = sentAt;
|
|
266
|
+
runState.progressLedger.lastFinalDeliveryAt = sentAt;
|
|
267
|
+
runState.progressLedger.progressState = 'complete';
|
|
265
268
|
}
|
|
266
|
-
|
|
267
|
-
if (
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
269
|
+
runState.lastSentMessage = message;
|
|
270
|
+
if (Array.isArray(runState.sentMessages)) {
|
|
271
|
+
runState.sentMessages.push(message);
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
if (deliveryState) {
|
|
276
|
+
deliveryState.messagingSent = true;
|
|
277
|
+
deliveryState.finalDeliverySent = true;
|
|
278
|
+
deliveryState.lastFinalDeliveryAt = sentAt;
|
|
279
|
+
deliveryState.lastSentMessage = message;
|
|
280
|
+
if (!Array.isArray(deliveryState.sentMessages)) {
|
|
281
|
+
deliveryState.sentMessages = [];
|
|
282
|
+
}
|
|
283
|
+
deliveryState.sentMessages.push(message);
|
|
274
284
|
}
|
|
275
285
|
}
|
|
276
286
|
|
|
@@ -1111,7 +1121,7 @@ function getAvailableTools(app, options = {}) {
|
|
|
1111
1121
|
properties: {
|
|
1112
1122
|
name: { type: 'string', description: 'Short descriptive name for the task.' },
|
|
1113
1123
|
trigger: { type: 'object', description: 'Unified trigger object. Prefer { type: "manual" | "schedule" | integration_trigger_type, config: {...} }.' },
|
|
1114
|
-
trigger_type: { type: 'string', description: 'Trigger type such as manual, schedule, gmail_message_received, outlook_email_received, slack_message_received, teams_message_received, weather_event, or
|
|
1124
|
+
trigger_type: { type: 'string', description: 'Trigger type such as manual, schedule, gmail_message_received, outlook_email_received, slack_message_received, teams_message_received, weather_event, whatsapp_personal_message_received, or android_notification_received.' },
|
|
1115
1125
|
trigger_config: { type: 'object', description: 'Trigger-specific configuration object. For schedule triggers prefer { mode: "recurring", cronExpression: "m h dom mon dow" } or { mode: "one_time", runAt: ISO datetime }. 5-field cron only (seconds unsupported).' },
|
|
1116
1126
|
prompt: { type: 'string', description: 'The instructions the agent will run when the trigger fires.' },
|
|
1117
1127
|
enabled: { type: 'boolean', description: 'Whether to activate immediately.' },
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const { normalizeTrimmedText } = require('../security');
|
|
4
|
+
|
|
5
|
+
module.exports = {
|
|
6
|
+
type: 'android_notification_received',
|
|
7
|
+
label: 'Android Notification Received',
|
|
8
|
+
async validateConfig(config = {}, context = {}) {
|
|
9
|
+
return {
|
|
10
|
+
appPackage: normalizeTrimmedText(config.appPackage || config.app_package, 200),
|
|
11
|
+
};
|
|
12
|
+
},
|
|
13
|
+
summarize(config = {}) {
|
|
14
|
+
const parts = ['Android Notification'];
|
|
15
|
+
if (config.appPackage) parts.push(`app: ${config.appPackage}`);
|
|
16
|
+
return parts.join(' · ');
|
|
17
|
+
},
|
|
18
|
+
};
|