@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",