@adhdev/daemon-standalone 0.9.35 → 0.9.36

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
@@ -30094,7 +30094,16 @@ var require_dist2 = __commonJS({
30094
30094
  if (baseMessages.length <= _ProviderCliAdapter.PARSE_MESSAGE_TAIL_LIMIT) return baseMessages;
30095
30095
  return baseMessages.slice(-_ProviderCliAdapter.PARSE_MESSAGE_TAIL_LIMIT);
30096
30096
  }
30097
+ messagesShareStableIdentity(left, right) {
30098
+ if (left === right) return true;
30099
+ if (!left || !right) return false;
30100
+ if ((left.role || "") !== (right.role || "")) return false;
30101
+ if (left.id && right.id && String(left.id) === String(right.id)) return true;
30102
+ if (typeof left.index === "number" && typeof right.index === "number" && left.index === right.index) return true;
30103
+ return false;
30104
+ }
30097
30105
  messagesComparable(left, right) {
30106
+ if (this.messagesShareStableIdentity(left, right)) return true;
30098
30107
  if (!left || !right) return false;
30099
30108
  if ((left.role || "") !== (right.role || "")) return false;
30100
30109
  const leftText = normalizeComparableTranscriptText(left.content);
@@ -31245,6 +31254,69 @@ var require_dist2 = __commonJS({
31245
31254
  this.committedMessages = normalized;
31246
31255
  this.syncMessageViews();
31247
31256
  }
31257
+ getSharedCommittedPrefixLength(parsedMessages) {
31258
+ const committedMessages = this.committedMessages;
31259
+ const max = Math.min(parsedMessages.length, committedMessages.length);
31260
+ let index = 0;
31261
+ while (index < max && this.messagesShareStableIdentity(parsedMessages[index], committedMessages[index])) {
31262
+ index += 1;
31263
+ }
31264
+ return index;
31265
+ }
31266
+ hydrateCommittedPrefixForParsedStatus(parsedMessages) {
31267
+ const sharedPrefixLength = this.getSharedCommittedPrefixLength(parsedMessages);
31268
+ if (sharedPrefixLength !== this.committedMessages.length) return null;
31269
+ const committedHydratedMessages = this.committedMessages.map((message, index) => {
31270
+ const timestamp = typeof message.timestamp === "number" && Number.isFinite(message.timestamp) ? message.timestamp : this.lastOutputAt || this.currentTurnScope?.startedAt || Date.now();
31271
+ const contentValue = message.content;
31272
+ return {
31273
+ role: message.role,
31274
+ content: typeof contentValue === "string" ? contentValue : String(contentValue || ""),
31275
+ timestamp,
31276
+ receivedAt: typeof message.receivedAt === "number" && Number.isFinite(message.receivedAt) ? message.receivedAt : timestamp,
31277
+ kind: message.kind,
31278
+ id: message.id || `msg_${index}`,
31279
+ index: typeof message.index === "number" ? message.index : index,
31280
+ meta: message.meta,
31281
+ senderName: message.senderName
31282
+ };
31283
+ });
31284
+ const extraMessages = parsedMessages.slice(sharedPrefixLength);
31285
+ if (extraMessages.length === 0) return committedHydratedMessages;
31286
+ const extraHydratedMessages = hydrateCliParsedMessages(extraMessages, {
31287
+ committedMessages: [],
31288
+ scope: this.currentTurnScope,
31289
+ lastOutputAt: this.lastOutputAt
31290
+ }).map((message, offset) => ({
31291
+ ...message,
31292
+ id: message.id || `msg_${sharedPrefixLength + offset}`,
31293
+ index: typeof message.index === "number" ? message.index : sharedPrefixLength + offset
31294
+ }));
31295
+ return [...committedHydratedMessages, ...extraHydratedMessages];
31296
+ }
31297
+ hydrateParsedMessagesForStatus(parsedMessages) {
31298
+ return this.hydrateCommittedPrefixForParsedStatus(parsedMessages) || hydrateCliParsedMessages(parsedMessages, {
31299
+ committedMessages: this.committedMessages,
31300
+ scope: this.currentTurnScope,
31301
+ lastOutputAt: this.lastOutputAt
31302
+ });
31303
+ }
31304
+ buildCommittedChatMessages() {
31305
+ return this.committedMessages.map((message, index) => {
31306
+ const contentValue = message.content;
31307
+ return buildChatMessage({
31308
+ role: message.role,
31309
+ content: typeof contentValue === "string" ? contentValue : String(contentValue || ""),
31310
+ timestamp: message.timestamp,
31311
+ kind: message.kind,
31312
+ meta: message.meta,
31313
+ senderName: message.senderName,
31314
+ id: message.id || `msg_${index}`,
31315
+ index: typeof message.index === "number" ? message.index : index,
31316
+ receivedAt: typeof message.receivedAt === "number" ? message.receivedAt : message.timestamp
31317
+ });
31318
+ });
31319
+ }
31248
31320
  /**
31249
31321
  * Script-based full parse — returns ReadChatResult.
31250
31322
  * Called by command handler / dashboard for rich content rendering.
@@ -31270,7 +31342,7 @@ var require_dist2 = __commonJS({
31270
31342
  this.onStatusChange?.();
31271
31343
  }
31272
31344
  }
31273
- if (parsed && Array.isArray(parsed.messages)) {
31345
+ if (parsed && Array.isArray(parsed.messages) && this.provider.allowInputDuringGeneration === true) {
31274
31346
  const hydratedForCommit = normalizeCliParsedMessages(parsed.messages, {
31275
31347
  committedMessages: this.committedMessages,
31276
31348
  scope: this.currentTurnScope,
@@ -31289,21 +31361,21 @@ var require_dist2 = __commonJS({
31289
31361
  const shouldPreferCommittedMessages = !this.currentTurnScope && !this.activeModal && this.currentStatus === "idle";
31290
31362
  let result;
31291
31363
  if (parsed && Array.isArray(parsed.messages)) {
31292
- const parsedHydratedMessages = hydrateCliParsedMessages(parsed.messages, {
31293
- committedMessages: this.committedMessages,
31294
- scope: this.currentTurnScope,
31295
- lastOutputAt: this.lastOutputAt
31296
- });
31297
- const committedHydratedMessages = this.committedMessages.map((message, index) => buildChatMessage({
31298
- ...message,
31299
- id: message.id || `msg_${index}`,
31300
- index: typeof message.index === "number" ? message.index : index,
31301
- receivedAt: typeof message.receivedAt === "number" ? message.receivedAt : message.timestamp
31302
- }));
31364
+ const parsedHydratedMessages = this.hydrateParsedMessagesForStatus(parsed.messages);
31303
31365
  const parsedLastAssistant = [...parsedHydratedMessages].reverse().find((message) => message.role === "assistant" && typeof message.content === "string" && message.content.trim());
31304
- const shouldAdoptParsedIdleReplay = !this.currentTurnScope && !this.activeModal && !!parsedLastAssistant && parsedTranscriptIsRicherThanCommitted(parsedHydratedMessages, committedHydratedMessages) && (this.currentStatus === "idle" || this.currentStatus === "generating" && this.isWaitingForResponse && parsed.status === "idle" && this.runDetectStatus(this.recentOutputBuffer) === "idle");
31366
+ const shouldAdoptParsedIdleReplay = !this.currentTurnScope && !this.activeModal && !!parsedLastAssistant && parsedTranscriptIsRicherThanCommitted(parsedHydratedMessages, this.committedMessages) && (this.currentStatus === "idle" || this.currentStatus === "generating" && this.isWaitingForResponse && parsed.status === "idle" && this.runDetectStatus(this.recentOutputBuffer) === "idle");
31305
31367
  if (shouldAdoptParsedIdleReplay) {
31306
- this.committedMessages = normalizeCliParsedMessages(parsed.messages, {
31368
+ this.committedMessages = this.getSharedCommittedPrefixLength(parsed.messages) === this.committedMessages.length ? parsedHydratedMessages.map((message) => ({
31369
+ role: message.role,
31370
+ content: typeof message.content === "string" ? message.content : String(message.content || ""),
31371
+ timestamp: message.timestamp,
31372
+ receivedAt: message.receivedAt,
31373
+ kind: message.kind,
31374
+ id: message.id,
31375
+ index: message.index,
31376
+ meta: message.meta,
31377
+ senderName: message.senderName
31378
+ })) : normalizeCliParsedMessages(parsed.messages, {
31307
31379
  committedMessages: this.committedMessages,
31308
31380
  scope: this.currentTurnScope,
31309
31381
  lastOutputAt: this.lastOutputAt
@@ -31322,15 +31394,9 @@ var require_dist2 = __commonJS({
31322
31394
  this.onStatusChange?.();
31323
31395
  }
31324
31396
  }
31325
- const effectiveCommittedHydratedMessages = shouldAdoptParsedIdleReplay ? this.committedMessages.map((message, index) => buildChatMessage({
31326
- ...message,
31327
- id: message.id || `msg_${index}`,
31328
- index: typeof message.index === "number" ? message.index : index,
31329
- receivedAt: typeof message.receivedAt === "number" ? message.receivedAt : message.timestamp
31330
- })) : committedHydratedMessages;
31331
- const shouldPreferCommittedHistoryReplay = !this.currentTurnScope && !this.activeModal && effectiveCommittedHydratedMessages.length > parsedHydratedMessages.length;
31397
+ const shouldPreferCommittedHistoryReplay = !this.currentTurnScope && !this.activeModal && this.committedMessages.length > parsedHydratedMessages.length;
31332
31398
  const shouldPreferCommittedIdleReplay = shouldPreferCommittedMessages && !shouldAdoptParsedIdleReplay;
31333
- const hydratedMessages = shouldPreferCommittedIdleReplay || shouldPreferCommittedHistoryReplay ? effectiveCommittedHydratedMessages : parsedHydratedMessages;
31399
+ const hydratedMessages = shouldPreferCommittedIdleReplay || shouldPreferCommittedHistoryReplay ? this.buildCommittedChatMessages() : parsedHydratedMessages;
31334
31400
  result = {
31335
31401
  id: parsed.id || "cli_session",
31336
31402
  status: parsed.status || this.currentStatus,