akemon 0.1.75 → 0.1.77
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/dist/server.js +21 -0
- package/package.json +1 -1
package/dist/server.js
CHANGED
|
@@ -15,6 +15,18 @@ import { selfDir, initWorld, initBioState, initGuide, biosPath, loadBioState, sa
|
|
|
15
15
|
let engineBusy = false;
|
|
16
16
|
let engineBusySince = 0;
|
|
17
17
|
let lastEngineTrace = []; // execution trace for order reporting
|
|
18
|
+
/** Report an execution log to the relay (fire-and-forget) */
|
|
19
|
+
function reportExecutionLog(relayHttp, secretKey, agentName, type, refId, status, error, trace) {
|
|
20
|
+
if (!relayHttp || !secretKey)
|
|
21
|
+
return;
|
|
22
|
+
const traceJson = trace.length > 0 ? JSON.stringify(trace).slice(0, 50000) : "";
|
|
23
|
+
fetch(`${relayHttp}/v1/agent/${encodeURIComponent(agentName)}/logs`, {
|
|
24
|
+
method: "POST",
|
|
25
|
+
headers: { Authorization: `Bearer ${secretKey}`, "Content-Type": "application/json" },
|
|
26
|
+
body: JSON.stringify({ type, ref_id: refId, status, error: error.slice(0, 2000), trace: traceJson }),
|
|
27
|
+
signal: AbortSignal.timeout(10_000),
|
|
28
|
+
}).catch(() => { }); // fire-and-forget
|
|
29
|
+
}
|
|
18
30
|
// Order push notification — urgent orders bypass 30s poll
|
|
19
31
|
const urgentOrderIds = new Set();
|
|
20
32
|
let triggerWork = null;
|
|
@@ -1080,6 +1092,7 @@ Reply ONLY with JSON.`;
|
|
|
1080
1092
|
}
|
|
1081
1093
|
catch (err) {
|
|
1082
1094
|
console.log(`[self] Digestion engine failed: ${err.message}`);
|
|
1095
|
+
reportExecutionLog(relayHttp, secretKey, agentName, "self_cycle", "digestion", "failed", err.message, lastEngineTrace);
|
|
1083
1096
|
engineBusy = false;
|
|
1084
1097
|
return;
|
|
1085
1098
|
}
|
|
@@ -1088,6 +1101,7 @@ Reply ONLY with JSON.`;
|
|
|
1088
1101
|
const jsonMatch = digestResult.match(/\{[\s\S]*\}/);
|
|
1089
1102
|
if (!jsonMatch) {
|
|
1090
1103
|
console.log("[self] Digestion produced no JSON");
|
|
1104
|
+
reportExecutionLog(relayHttp, secretKey, agentName, "self_cycle", "digestion", "failed", "no JSON in response", [{ role: "assistant", content: digestResult.slice(0, 4000) }]);
|
|
1091
1105
|
return;
|
|
1092
1106
|
}
|
|
1093
1107
|
let digest;
|
|
@@ -1096,6 +1110,7 @@ Reply ONLY with JSON.`;
|
|
|
1096
1110
|
}
|
|
1097
1111
|
catch {
|
|
1098
1112
|
console.log("[self] Failed to parse digestion JSON");
|
|
1113
|
+
reportExecutionLog(relayHttp, secretKey, agentName, "self_cycle", "digestion", "failed", "invalid JSON in response", [{ role: "assistant", content: digestResult.slice(0, 4000) }]);
|
|
1099
1114
|
return;
|
|
1100
1115
|
}
|
|
1101
1116
|
// Save structured memory files
|
|
@@ -1195,6 +1210,7 @@ Reply ONLY with the summary text, no JSON, no markdown headers.`;
|
|
|
1195
1210
|
}
|
|
1196
1211
|
catch (err) {
|
|
1197
1212
|
console.log(`[self] Activity ${activity} failed: ${err.message}`);
|
|
1213
|
+
reportExecutionLog(relayHttp, secretKey, agentName, "self_cycle", activity, "failed", err.message, lastEngineTrace);
|
|
1198
1214
|
}
|
|
1199
1215
|
engineBusy = false;
|
|
1200
1216
|
}
|
|
@@ -1206,6 +1222,7 @@ Reply ONLY with the summary text, no JSON, no markdown headers.`;
|
|
|
1206
1222
|
}
|
|
1207
1223
|
catch (err) {
|
|
1208
1224
|
console.log(`[self] Digestion error: ${err.message}`);
|
|
1225
|
+
reportExecutionLog(relayHttp, secretKey, agentName, "self_cycle", "digestion", "failed", err.message, lastEngineTrace);
|
|
1209
1226
|
}
|
|
1210
1227
|
}
|
|
1211
1228
|
async function syncToRelay(workdir, agentName, sd, relayHttp, secretKey, bio) {
|
|
@@ -1399,6 +1416,7 @@ When sub-order completes, incorporate result_text into YOUR delivery. Then call
|
|
|
1399
1416
|
});
|
|
1400
1417
|
if (deliverRes.ok) {
|
|
1401
1418
|
console.log(`[orders] Delivered order ${order.id} (${result.length} bytes)`);
|
|
1419
|
+
reportExecutionLog(relayHttp, secretKey, agentName, "order", order.id, "success", "", trace);
|
|
1402
1420
|
retryState.delete(order.id);
|
|
1403
1421
|
try {
|
|
1404
1422
|
await onTaskCompleted(workdir, agentName, true);
|
|
@@ -1415,6 +1433,7 @@ When sub-order completes, incorporate result_text into YOUR delivery. Then call
|
|
|
1415
1433
|
}
|
|
1416
1434
|
catch (err) {
|
|
1417
1435
|
console.log(`[orders] Failed to fulfill ${order.id}: ${err.message}`);
|
|
1436
|
+
reportExecutionLog(relayHttp, secretKey, agentName, "order", order.id, "failed", err.message, lastEngineTrace);
|
|
1418
1437
|
// Check if agent self-delivered despite empty stdout
|
|
1419
1438
|
try {
|
|
1420
1439
|
const checkRes = await fetch(`${relayHttp}/v1/orders/${order.id}`);
|
|
@@ -1493,6 +1512,7 @@ When sub-order completes, incorporate result_text into YOUR delivery. Then call
|
|
|
1493
1512
|
}
|
|
1494
1513
|
catch (err) {
|
|
1495
1514
|
console.log(`[tasks] Failed to execute ${task.id}: ${err.message}`);
|
|
1515
|
+
reportExecutionLog(relayHttp, secretKey, agentName, "platform_task", task.id, "failed", err.message, lastEngineTrace);
|
|
1496
1516
|
}
|
|
1497
1517
|
finally {
|
|
1498
1518
|
engineBusy = false;
|
|
@@ -1515,6 +1535,7 @@ When sub-order completes, incorporate result_text into YOUR delivery. Then call
|
|
|
1515
1535
|
}
|
|
1516
1536
|
catch (err) {
|
|
1517
1537
|
console.log(`[user-tasks] Failed: ${task.title}: ${err.message}`);
|
|
1538
|
+
reportExecutionLog(relayHttp, secretKey, agentName, "user_task", task.title, "failed", err.message, lastEngineTrace);
|
|
1518
1539
|
}
|
|
1519
1540
|
finally {
|
|
1520
1541
|
engineBusy = false;
|