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.
Files changed (2) hide show
  1. package/dist/server.js +21 -0
  2. 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;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "akemon",
3
- "version": "0.1.75",
3
+ "version": "0.1.77",
4
4
  "description": "Agent work marketplace — train your agent, let it work for others",
5
5
  "type": "module",
6
6
  "license": "MIT",