@adhdev/daemon-standalone 0.9.82-rc.61 → 0.9.82-rc.63
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/index.js
CHANGED
|
@@ -24492,12 +24492,34 @@ Follow these recovery rules:
|
|
|
24492
24492
|
if (session.expiresAt <= now) remoteIdleSessions.delete(key);
|
|
24493
24493
|
}
|
|
24494
24494
|
}
|
|
24495
|
+
function readRefineJobId(event) {
|
|
24496
|
+
const metadata = readRecord(event.metadataEvent) || event;
|
|
24497
|
+
const result = readRecord(metadata.result);
|
|
24498
|
+
const refineJob = readRecord(result?.refineJob);
|
|
24499
|
+
return readNonEmptyString2(metadata.jobId) || readNonEmptyString2(refineJob?.jobId);
|
|
24500
|
+
}
|
|
24501
|
+
function buildRefineTerminalEventFingerprint(meshId, eventName, metadataEvent) {
|
|
24502
|
+
const jobId = readRefineJobId({ metadataEvent });
|
|
24503
|
+
return jobId && REFINE_TERMINAL_EVENTS.has(eventName) ? `${meshId}::${eventName}::${jobId}` : "";
|
|
24504
|
+
}
|
|
24505
|
+
function hasPendingRefineTerminalEventDuplicate(event) {
|
|
24506
|
+
if (!REFINE_TERMINAL_EVENTS.has(event.event)) return false;
|
|
24507
|
+
const jobId = readRefineJobId(event);
|
|
24508
|
+
if (!jobId) return false;
|
|
24509
|
+
return getPendingMeshCoordinatorEvents(event.meshId).some(
|
|
24510
|
+
(pending) => pending.event === event.event && readRefineJobId(pending) === jobId
|
|
24511
|
+
);
|
|
24512
|
+
}
|
|
24495
24513
|
function getPendingEventsPath(meshId) {
|
|
24496
24514
|
const safe = meshId.replace(/[^a-zA-Z0-9_-]/g, "_");
|
|
24497
24515
|
return (0, import_path6.join)(getLedgerDir(), `${safe}.pending-events.jsonl`);
|
|
24498
24516
|
}
|
|
24499
24517
|
function queuePendingMeshCoordinatorEvent(event) {
|
|
24500
24518
|
try {
|
|
24519
|
+
if (hasPendingRefineTerminalEventDuplicate(event)) {
|
|
24520
|
+
LOG2.info("MeshEvents", `Suppressed duplicate pending ${event.event} for refine job ${readRefineJobId(event)}`);
|
|
24521
|
+
return true;
|
|
24522
|
+
}
|
|
24501
24523
|
(0, import_fs7.appendFileSync)(getPendingEventsPath(event.meshId), JSON.stringify(event) + "\n", "utf-8");
|
|
24502
24524
|
return true;
|
|
24503
24525
|
} catch (e) {
|
|
@@ -24635,6 +24657,17 @@ Follow these recovery rules:
|
|
|
24635
24657
|
recentCompletionFingerprints.set(fingerprint, now);
|
|
24636
24658
|
return false;
|
|
24637
24659
|
}
|
|
24660
|
+
function isDuplicateRefineTerminalEvent(meshId, eventName, metadataEvent) {
|
|
24661
|
+
const fingerprint = buildRefineTerminalEventFingerprint(meshId, eventName, metadataEvent);
|
|
24662
|
+
if (!fingerprint) return false;
|
|
24663
|
+
const now = Date.now();
|
|
24664
|
+
for (const [key, seenAt] of recentCompletionFingerprints.entries()) {
|
|
24665
|
+
if (now - seenAt > RECENT_COMPLETION_FINGERPRINT_TTL_MS) recentCompletionFingerprints.delete(key);
|
|
24666
|
+
}
|
|
24667
|
+
if (recentCompletionFingerprints.has(fingerprint)) return true;
|
|
24668
|
+
recentCompletionFingerprints.set(fingerprint, now);
|
|
24669
|
+
return false;
|
|
24670
|
+
}
|
|
24638
24671
|
function tryAssignQueueTask(components, meshId, nodeId, sessionId, providerType) {
|
|
24639
24672
|
const task = claimNextTask(meshId, nodeId, sessionId);
|
|
24640
24673
|
if (!task) {
|
|
@@ -24977,6 +25010,32 @@ Do NOT retry on this node. Consider reassigning to a different node or asking th
|
|
|
24977
25010
|
if (args.event === "monitor:long_generating") {
|
|
24978
25011
|
return `[System] ${args.nodeLabel} has been generating for a long time${metadata}. Use mesh_read_chat once for a status check, but do not poll repeatedly.`;
|
|
24979
25012
|
}
|
|
25013
|
+
if (args.event === "refine:accepted") {
|
|
25014
|
+
const jobId = readRefineJobId({ metadataEvent: args.metadataEvent });
|
|
25015
|
+
return `[System] Refinery accepted async job${jobId ? ` ${jobId}` : ""} for ${args.nodeLabel}. Completion/failure will be delivered as a terminal refine event; do not poll repeatedly.`;
|
|
25016
|
+
}
|
|
25017
|
+
if (args.event === "refine:completed") {
|
|
25018
|
+
const jobId = readRefineJobId({ metadataEvent: args.metadataEvent });
|
|
25019
|
+
const result = readRecord(args.metadataEvent.result);
|
|
25020
|
+
const validationSummary = readRecord(result?.validationSummary);
|
|
25021
|
+
const validationStatus = readNonEmptyString2(validationSummary?.status);
|
|
25022
|
+
const into = readNonEmptyString2(result?.into);
|
|
25023
|
+
const branch = readNonEmptyString2(result?.branch);
|
|
25024
|
+
const details = [
|
|
25025
|
+
jobId ? `job_id=${jobId}` : "",
|
|
25026
|
+
branch && into ? `${branch}\u2192${into}` : "",
|
|
25027
|
+
validationStatus ? `validation=${validationStatus}` : ""
|
|
25028
|
+
].filter(Boolean).join("; ");
|
|
25029
|
+
return `[System] Refinery async job for ${args.nodeLabel} completed successfully${details ? ` (${details})` : ""}. The worktree was merged and cleanup completed; continue from the updated mesh state.`;
|
|
25030
|
+
}
|
|
25031
|
+
if (args.event === "refine:failed") {
|
|
25032
|
+
const jobId = readRefineJobId({ metadataEvent: args.metadataEvent });
|
|
25033
|
+
const result = readRecord(args.metadataEvent.result);
|
|
25034
|
+
const code = readNonEmptyString2(result?.code);
|
|
25035
|
+
const error48 = readNonEmptyString2(result?.error);
|
|
25036
|
+
const details = [jobId ? `job_id=${jobId}` : "", code ? `code=${code}` : ""].filter(Boolean).join("; ");
|
|
25037
|
+
return `[System] Refinery async job for ${args.nodeLabel} failed${details ? ` (${details})` : ""}${error48 ? `: ${error48}` : "."} Review the terminal refine event/ledger before retrying.`;
|
|
25038
|
+
}
|
|
24980
25039
|
return "";
|
|
24981
25040
|
}
|
|
24982
25041
|
function injectMeshSystemMessage(components, args) {
|
|
@@ -24996,6 +25055,10 @@ Do NOT retry on this node. Consider reassigning to a different node or asking th
|
|
|
24996
25055
|
LOG2.info("MeshEvents", `Suppressed ${args.event} for intentionally cleanup-stopped session ${eventSessionId || "(unknown session)"}`);
|
|
24997
25056
|
return { success: true, forwarded: 0, suppressed: true, intentionalCleanupStop: true };
|
|
24998
25057
|
}
|
|
25058
|
+
if (isDuplicateRefineTerminalEvent(args.meshId, args.event, args.metadataEvent)) {
|
|
25059
|
+
LOG2.info("MeshEvents", `Suppressed duplicate ${args.event} for refine job ${readRefineJobId({ metadataEvent: args.metadataEvent })}`);
|
|
25060
|
+
return { success: true, forwarded: 0, suppressed: true, duplicateRefineTerminalEvent: true };
|
|
25061
|
+
}
|
|
24999
25062
|
const eventTimestamp = readEventTimestamp(args.metadataEvent.timestamp);
|
|
25000
25063
|
if (args.event === "agent:generating_completed" && eventSessionId) {
|
|
25001
25064
|
const duplicateCompletion = isDuplicateMeshCompletionEvent({
|
|
@@ -25245,6 +25308,14 @@ Do NOT retry on this node. Consider reassigning to a different node or asking th
|
|
|
25245
25308
|
providerType: readNonEmptyString2(payload.providerType),
|
|
25246
25309
|
providerSessionId: readNonEmptyString2(payload.providerSessionId),
|
|
25247
25310
|
finalSummary: readNonEmptyString2(payload.finalSummary) || readNonEmptyString2(payload.summary),
|
|
25311
|
+
jobId: readNonEmptyString2(payload.jobId),
|
|
25312
|
+
interactionId: readNonEmptyString2(payload.interactionId),
|
|
25313
|
+
status: readNonEmptyString2(payload.status),
|
|
25314
|
+
targetDaemonId: readNonEmptyString2(payload.targetDaemonId),
|
|
25315
|
+
startedAt: readNonEmptyString2(payload.startedAt),
|
|
25316
|
+
completedAt: readNonEmptyString2(payload.completedAt),
|
|
25317
|
+
retryOfJobId: readNonEmptyString2(payload.retryOfJobId),
|
|
25318
|
+
...payload.result && typeof payload.result === "object" && !Array.isArray(payload.result) ? { result: payload.result } : {},
|
|
25248
25319
|
...payload.timestamp !== void 0 ? { timestamp: payload.timestamp } : {},
|
|
25249
25320
|
intentional: payload.intentional === true,
|
|
25250
25321
|
intentionalStop: payload.intentionalStop === true,
|
|
@@ -25292,6 +25363,7 @@ Do NOT retry on this node. Consider reassigning to a different node or asking th
|
|
|
25292
25363
|
var import_path6;
|
|
25293
25364
|
var REMOTE_IDLE_SESSION_TTL_MS;
|
|
25294
25365
|
var remoteIdleSessions;
|
|
25366
|
+
var REFINE_TERMINAL_EVENTS;
|
|
25295
25367
|
var MESH_COORDINATOR_EVENTS;
|
|
25296
25368
|
var EVENT_TO_LEDGER_KIND;
|
|
25297
25369
|
var INTENTIONAL_CLEANUP_STOP_SUPPRESSION_MS;
|
|
@@ -25313,13 +25385,17 @@ Do NOT retry on this node. Consider reassigning to a different node or asking th
|
|
|
25313
25385
|
init_mesh_work_queue();
|
|
25314
25386
|
REMOTE_IDLE_SESSION_TTL_MS = 5 * 60 * 1e3;
|
|
25315
25387
|
remoteIdleSessions = /* @__PURE__ */ new Map();
|
|
25388
|
+
REFINE_TERMINAL_EVENTS = /* @__PURE__ */ new Set(["refine:completed", "refine:failed"]);
|
|
25316
25389
|
MESH_COORDINATOR_EVENTS = /* @__PURE__ */ new Set([
|
|
25317
25390
|
"agent:generating_started",
|
|
25318
25391
|
"agent:generating_completed",
|
|
25319
25392
|
"agent:waiting_approval",
|
|
25320
25393
|
"agent:stopped",
|
|
25321
25394
|
"agent:ready",
|
|
25322
|
-
"monitor:long_generating"
|
|
25395
|
+
"monitor:long_generating",
|
|
25396
|
+
"refine:accepted",
|
|
25397
|
+
"refine:completed",
|
|
25398
|
+
"refine:failed"
|
|
25323
25399
|
]);
|
|
25324
25400
|
EVENT_TO_LEDGER_KIND = {
|
|
25325
25401
|
"agent:generating_completed": "task_completed",
|