@adhdev/daemon-core 0.9.82-rc.57 → 0.9.82-rc.58

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
@@ -2284,10 +2284,15 @@ function isMeshCoordinatorEvent(eventName) {
2284
2284
  return typeof eventName === "string" && MESH_COORDINATOR_EVENTS.has(eventName);
2285
2285
  }
2286
2286
  function formatCompletionMetadata(event) {
2287
+ const completionDiagnostic = event.completionDiagnostic && typeof event.completionDiagnostic === "object" ? event.completionDiagnostic : null;
2288
+ const diagnosticReason = completionDiagnostic ? readNonEmptyString(completionDiagnostic.blockReason) || "present" : "";
2289
+ const finalAssistantPresent = typeof completionDiagnostic?.finalAssistantPresent === "boolean" ? String(completionDiagnostic.finalAssistantPresent) : "";
2287
2290
  const parts = [
2288
2291
  readNonEmptyString(event.targetSessionId) ? `session_id=${readNonEmptyString(event.targetSessionId)}` : "",
2289
2292
  readNonEmptyString(event.providerType) ? `provider=${readNonEmptyString(event.providerType)}` : "",
2290
- readNonEmptyString(event.providerSessionId) ? `provider_session_id=${readNonEmptyString(event.providerSessionId)}` : ""
2293
+ readNonEmptyString(event.providerSessionId) ? `provider_session_id=${readNonEmptyString(event.providerSessionId)}` : "",
2294
+ diagnosticReason ? `completion_diagnostic=${diagnosticReason}` : "",
2295
+ finalAssistantPresent ? `final_assistant=${finalAssistantPresent}` : ""
2291
2296
  ].filter(Boolean);
2292
2297
  return parts.length > 0 ? ` (${parts.join("; ")})` : "";
2293
2298
  }
@@ -2831,6 +2836,7 @@ function injectMeshSystemMessage(components, args) {
2831
2836
  taskId: completedTaskForLedger?.id || void 0,
2832
2837
  providerSessionId: readNonEmptyString(args.metadataEvent.providerSessionId) || void 0,
2833
2838
  finalSummary: readNonEmptyString(args.metadataEvent.finalSummary) || void 0,
2839
+ completionDiagnostic: args.metadataEvent.completionDiagnostic && typeof args.metadataEvent.completionDiagnostic === "object" ? args.metadataEvent.completionDiagnostic : void 0,
2834
2840
  evidence: completionEvidence
2835
2841
  }
2836
2842
  });
@@ -3912,7 +3918,9 @@ function resolveCliSpawnPlan(options) {
3912
3918
  const configuredCommand = typeof runtimeSettings.executablePath === "string" && runtimeSettings.executablePath.trim() ? runtimeSettings.executablePath.trim() : spawnConfig.command;
3913
3919
  const binaryPath = findBinary(configuredCommand);
3914
3920
  const isWin = os10.platform() === "win32";
3915
- const allArgs = [...spawnConfig.args, ...extraArgs];
3921
+ const allArgs = [...spawnConfig.args, ...extraArgs].map(
3922
+ (arg) => typeof arg === "string" ? arg.replace(/\{\{workingDir\}\}/g, workingDir) : arg
3923
+ );
3916
3924
  let shellCmd;
3917
3925
  let shellArgs;
3918
3926
  const useShellUnix = !isWin && (!!spawnConfig.shell || !path15.isAbsolute(binaryPath) || isScriptBinary(binaryPath) || !looksLikeMachOOrElf(binaryPath));
@@ -18777,6 +18785,44 @@ var CliProviderInstance = class {
18777
18785
  const content = lastVisible ? flattenContent(lastVisible.content).trim() : "";
18778
18786
  return role === "assistant" && !!content;
18779
18787
  }
18788
+ buildCompletedFinalizationDiagnostic(args) {
18789
+ let parsed = null;
18790
+ let parseError;
18791
+ try {
18792
+ parsed = this.adapter.getScriptParsedStatus();
18793
+ } catch (error) {
18794
+ parseError = error?.message || String(error);
18795
+ }
18796
+ const visibleMessages = (Array.isArray(parsed?.messages) ? parsed.messages : []).filter((message) => isUserFacingChatMessage(message));
18797
+ const lastVisible = visibleMessages[visibleMessages.length - 1];
18798
+ const lastVisibleRole = typeof lastVisible?.role === "string" ? lastVisible.role.trim().toLowerCase() : null;
18799
+ const lastVisibleKind = typeof lastVisible?.kind === "string" ? lastVisible.kind : null;
18800
+ const lastVisibleContentLength = lastVisible ? flattenContent(lastVisible.content).trim().length : 0;
18801
+ return {
18802
+ providerType: this.type,
18803
+ sessionId: this.instanceId,
18804
+ providerSessionId: this.providerSessionId || null,
18805
+ workspace: this.workingDir,
18806
+ blockReason: args.blockReason,
18807
+ emittedAfterFinalizationTimeout: args.emittedAfterFinalizationTimeout,
18808
+ waitedMs: args.waitedMs,
18809
+ maxWaitMs: COMPLETED_FINALIZATION_MAX_WAIT_MS,
18810
+ adapterStatus: typeof args.latestStatus?.status === "string" ? args.latestStatus.status : null,
18811
+ latestVisibleStatus: args.latestVisibleStatus,
18812
+ parsedStatus: typeof parsed?.status === "string" ? parsed.status : parseError ? "parse_error" : "unknown",
18813
+ parseError: parseError || void 0,
18814
+ finalAssistantPresent: this.completionHasFinalAssistantMessage(parsed?.messages),
18815
+ visibleMessageCount: visibleMessages.length,
18816
+ lastVisibleRole,
18817
+ lastVisibleKind,
18818
+ lastVisibleContentLength,
18819
+ pendingStartedAt: this.generatingStartedAt || null,
18820
+ pendingFirstObservedAt: args.pending.firstObservedAt,
18821
+ pendingTimestamp: args.pending.timestamp,
18822
+ pendingDurationSec: args.pending.duration,
18823
+ previousBlockReason: args.pending.loggedBlockReason || null
18824
+ };
18825
+ }
18780
18826
  hasAdapterPendingResponse() {
18781
18827
  const adapterAny = this.adapter;
18782
18828
  if (adapterAny?.isWaitingForResponse === true) return true;
@@ -18849,7 +18895,23 @@ var CliProviderInstance = class {
18849
18895
  this.scheduleCompletedDebounceFlush(COMPLETED_FINALIZATION_RETRY_MS);
18850
18896
  return;
18851
18897
  }
18852
- LOG.warn("CLI", `[${this.type}] suppressed completed event after ${waitedMs}ms without finalized assistant turn (${blockReason})`);
18898
+ const completionDiagnostic = this.buildCompletedFinalizationDiagnostic({
18899
+ blockReason,
18900
+ latestStatus,
18901
+ latestVisibleStatus,
18902
+ waitedMs,
18903
+ pending,
18904
+ emittedAfterFinalizationTimeout: true
18905
+ });
18906
+ LOG.warn("CLI", `[${this.type}] emitting completed event after ${waitedMs}ms without finalized assistant turn (${blockReason})`);
18907
+ this.pushEvent({
18908
+ event: "agent:generating_completed",
18909
+ chatTitle: pending.chatTitle,
18910
+ duration: pending.duration,
18911
+ timestamp: pending.timestamp,
18912
+ finalSummary: extractFinalSummaryFromMessages(this.adapter?.getScriptParsedStatus()?.messages),
18913
+ completionDiagnostic
18914
+ });
18853
18915
  this.completedDebouncePending = null;
18854
18916
  this.completedDebounceTimer = null;
18855
18917
  this.generatingStartedAt = 0;