adhdev 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/cli/index.js CHANGED
@@ -12913,7 +12913,16 @@ var init_provider_cli_adapter = __esm({
12913
12913
  if (baseMessages.length <= _ProviderCliAdapter.PARSE_MESSAGE_TAIL_LIMIT) return baseMessages;
12914
12914
  return baseMessages.slice(-_ProviderCliAdapter.PARSE_MESSAGE_TAIL_LIMIT);
12915
12915
  }
12916
+ messagesShareStableIdentity(left2, right2) {
12917
+ if (left2 === right2) return true;
12918
+ if (!left2 || !right2) return false;
12919
+ if ((left2.role || "") !== (right2.role || "")) return false;
12920
+ if (left2.id && right2.id && String(left2.id) === String(right2.id)) return true;
12921
+ if (typeof left2.index === "number" && typeof right2.index === "number" && left2.index === right2.index) return true;
12922
+ return false;
12923
+ }
12916
12924
  messagesComparable(left2, right2) {
12925
+ if (this.messagesShareStableIdentity(left2, right2)) return true;
12917
12926
  if (!left2 || !right2) return false;
12918
12927
  if ((left2.role || "") !== (right2.role || "")) return false;
12919
12928
  const leftText = normalizeComparableTranscriptText(left2.content);
@@ -14064,6 +14073,69 @@ var init_provider_cli_adapter = __esm({
14064
14073
  this.committedMessages = normalized;
14065
14074
  this.syncMessageViews();
14066
14075
  }
14076
+ getSharedCommittedPrefixLength(parsedMessages) {
14077
+ const committedMessages = this.committedMessages;
14078
+ const max = Math.min(parsedMessages.length, committedMessages.length);
14079
+ let index = 0;
14080
+ while (index < max && this.messagesShareStableIdentity(parsedMessages[index], committedMessages[index])) {
14081
+ index += 1;
14082
+ }
14083
+ return index;
14084
+ }
14085
+ hydrateCommittedPrefixForParsedStatus(parsedMessages) {
14086
+ const sharedPrefixLength = this.getSharedCommittedPrefixLength(parsedMessages);
14087
+ if (sharedPrefixLength !== this.committedMessages.length) return null;
14088
+ const committedHydratedMessages = this.committedMessages.map((message, index) => {
14089
+ const timestamp = typeof message.timestamp === "number" && Number.isFinite(message.timestamp) ? message.timestamp : this.lastOutputAt || this.currentTurnScope?.startedAt || Date.now();
14090
+ const contentValue = message.content;
14091
+ return {
14092
+ role: message.role,
14093
+ content: typeof contentValue === "string" ? contentValue : String(contentValue || ""),
14094
+ timestamp,
14095
+ receivedAt: typeof message.receivedAt === "number" && Number.isFinite(message.receivedAt) ? message.receivedAt : timestamp,
14096
+ kind: message.kind,
14097
+ id: message.id || `msg_${index}`,
14098
+ index: typeof message.index === "number" ? message.index : index,
14099
+ meta: message.meta,
14100
+ senderName: message.senderName
14101
+ };
14102
+ });
14103
+ const extraMessages = parsedMessages.slice(sharedPrefixLength);
14104
+ if (extraMessages.length === 0) return committedHydratedMessages;
14105
+ const extraHydratedMessages = hydrateCliParsedMessages(extraMessages, {
14106
+ committedMessages: [],
14107
+ scope: this.currentTurnScope,
14108
+ lastOutputAt: this.lastOutputAt
14109
+ }).map((message, offset) => ({
14110
+ ...message,
14111
+ id: message.id || `msg_${sharedPrefixLength + offset}`,
14112
+ index: typeof message.index === "number" ? message.index : sharedPrefixLength + offset
14113
+ }));
14114
+ return [...committedHydratedMessages, ...extraHydratedMessages];
14115
+ }
14116
+ hydrateParsedMessagesForStatus(parsedMessages) {
14117
+ return this.hydrateCommittedPrefixForParsedStatus(parsedMessages) || hydrateCliParsedMessages(parsedMessages, {
14118
+ committedMessages: this.committedMessages,
14119
+ scope: this.currentTurnScope,
14120
+ lastOutputAt: this.lastOutputAt
14121
+ });
14122
+ }
14123
+ buildCommittedChatMessages() {
14124
+ return this.committedMessages.map((message, index) => {
14125
+ const contentValue = message.content;
14126
+ return buildChatMessage({
14127
+ role: message.role,
14128
+ content: typeof contentValue === "string" ? contentValue : String(contentValue || ""),
14129
+ timestamp: message.timestamp,
14130
+ kind: message.kind,
14131
+ meta: message.meta,
14132
+ senderName: message.senderName,
14133
+ id: message.id || `msg_${index}`,
14134
+ index: typeof message.index === "number" ? message.index : index,
14135
+ receivedAt: typeof message.receivedAt === "number" ? message.receivedAt : message.timestamp
14136
+ });
14137
+ });
14138
+ }
14067
14139
  /**
14068
14140
  * Script-based full parse — returns ReadChatResult.
14069
14141
  * Called by command handler / dashboard for rich content rendering.
@@ -14089,7 +14161,7 @@ var init_provider_cli_adapter = __esm({
14089
14161
  this.onStatusChange?.();
14090
14162
  }
14091
14163
  }
14092
- if (parsed && Array.isArray(parsed.messages)) {
14164
+ if (parsed && Array.isArray(parsed.messages) && this.provider.allowInputDuringGeneration === true) {
14093
14165
  const hydratedForCommit = normalizeCliParsedMessages(parsed.messages, {
14094
14166
  committedMessages: this.committedMessages,
14095
14167
  scope: this.currentTurnScope,
@@ -14108,21 +14180,21 @@ var init_provider_cli_adapter = __esm({
14108
14180
  const shouldPreferCommittedMessages = !this.currentTurnScope && !this.activeModal && this.currentStatus === "idle";
14109
14181
  let result;
14110
14182
  if (parsed && Array.isArray(parsed.messages)) {
14111
- const parsedHydratedMessages = hydrateCliParsedMessages(parsed.messages, {
14112
- committedMessages: this.committedMessages,
14113
- scope: this.currentTurnScope,
14114
- lastOutputAt: this.lastOutputAt
14115
- });
14116
- const committedHydratedMessages = this.committedMessages.map((message, index) => buildChatMessage({
14117
- ...message,
14118
- id: message.id || `msg_${index}`,
14119
- index: typeof message.index === "number" ? message.index : index,
14120
- receivedAt: typeof message.receivedAt === "number" ? message.receivedAt : message.timestamp
14121
- }));
14183
+ const parsedHydratedMessages = this.hydrateParsedMessagesForStatus(parsed.messages);
14122
14184
  const parsedLastAssistant = [...parsedHydratedMessages].reverse().find((message) => message.role === "assistant" && typeof message.content === "string" && message.content.trim());
14123
- 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");
14185
+ 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");
14124
14186
  if (shouldAdoptParsedIdleReplay) {
14125
- this.committedMessages = normalizeCliParsedMessages(parsed.messages, {
14187
+ this.committedMessages = this.getSharedCommittedPrefixLength(parsed.messages) === this.committedMessages.length ? parsedHydratedMessages.map((message) => ({
14188
+ role: message.role,
14189
+ content: typeof message.content === "string" ? message.content : String(message.content || ""),
14190
+ timestamp: message.timestamp,
14191
+ receivedAt: message.receivedAt,
14192
+ kind: message.kind,
14193
+ id: message.id,
14194
+ index: message.index,
14195
+ meta: message.meta,
14196
+ senderName: message.senderName
14197
+ })) : normalizeCliParsedMessages(parsed.messages, {
14126
14198
  committedMessages: this.committedMessages,
14127
14199
  scope: this.currentTurnScope,
14128
14200
  lastOutputAt: this.lastOutputAt
@@ -14141,15 +14213,9 @@ var init_provider_cli_adapter = __esm({
14141
14213
  this.onStatusChange?.();
14142
14214
  }
14143
14215
  }
14144
- const effectiveCommittedHydratedMessages = shouldAdoptParsedIdleReplay ? this.committedMessages.map((message, index) => buildChatMessage({
14145
- ...message,
14146
- id: message.id || `msg_${index}`,
14147
- index: typeof message.index === "number" ? message.index : index,
14148
- receivedAt: typeof message.receivedAt === "number" ? message.receivedAt : message.timestamp
14149
- })) : committedHydratedMessages;
14150
- const shouldPreferCommittedHistoryReplay = !this.currentTurnScope && !this.activeModal && effectiveCommittedHydratedMessages.length > parsedHydratedMessages.length;
14216
+ const shouldPreferCommittedHistoryReplay = !this.currentTurnScope && !this.activeModal && this.committedMessages.length > parsedHydratedMessages.length;
14151
14217
  const shouldPreferCommittedIdleReplay = shouldPreferCommittedMessages && !shouldAdoptParsedIdleReplay;
14152
- const hydratedMessages = shouldPreferCommittedIdleReplay || shouldPreferCommittedHistoryReplay ? effectiveCommittedHydratedMessages : parsedHydratedMessages;
14218
+ const hydratedMessages = shouldPreferCommittedIdleReplay || shouldPreferCommittedHistoryReplay ? this.buildCommittedChatMessages() : parsedHydratedMessages;
14153
14219
  result = {
14154
14220
  id: parsed.id || "cli_session",
14155
14221
  status: parsed.status || this.currentStatus,
@@ -88169,7 +88235,7 @@ var init_adhdev_daemon = __esm({
88169
88235
  init_version();
88170
88236
  init_src();
88171
88237
  init_runtime_defaults();
88172
- pkgVersion = resolvePackageVersion({ injectedVersion: "0.9.35" });
88238
+ pkgVersion = resolvePackageVersion({ injectedVersion: "0.9.36" });
88173
88239
  AdhdevDaemon = class _AdhdevDaemon {
88174
88240
  localHttpServer = null;
88175
88241
  localWss = null;