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/index.js CHANGED
@@ -11957,7 +11957,16 @@ var init_provider_cli_adapter = __esm({
11957
11957
  if (baseMessages.length <= _ProviderCliAdapter.PARSE_MESSAGE_TAIL_LIMIT) return baseMessages;
11958
11958
  return baseMessages.slice(-_ProviderCliAdapter.PARSE_MESSAGE_TAIL_LIMIT);
11959
11959
  }
11960
+ messagesShareStableIdentity(left2, right2) {
11961
+ if (left2 === right2) return true;
11962
+ if (!left2 || !right2) return false;
11963
+ if ((left2.role || "") !== (right2.role || "")) return false;
11964
+ if (left2.id && right2.id && String(left2.id) === String(right2.id)) return true;
11965
+ if (typeof left2.index === "number" && typeof right2.index === "number" && left2.index === right2.index) return true;
11966
+ return false;
11967
+ }
11960
11968
  messagesComparable(left2, right2) {
11969
+ if (this.messagesShareStableIdentity(left2, right2)) return true;
11961
11970
  if (!left2 || !right2) return false;
11962
11971
  if ((left2.role || "") !== (right2.role || "")) return false;
11963
11972
  const leftText = normalizeComparableTranscriptText(left2.content);
@@ -13108,6 +13117,69 @@ var init_provider_cli_adapter = __esm({
13108
13117
  this.committedMessages = normalized;
13109
13118
  this.syncMessageViews();
13110
13119
  }
13120
+ getSharedCommittedPrefixLength(parsedMessages) {
13121
+ const committedMessages = this.committedMessages;
13122
+ const max = Math.min(parsedMessages.length, committedMessages.length);
13123
+ let index = 0;
13124
+ while (index < max && this.messagesShareStableIdentity(parsedMessages[index], committedMessages[index])) {
13125
+ index += 1;
13126
+ }
13127
+ return index;
13128
+ }
13129
+ hydrateCommittedPrefixForParsedStatus(parsedMessages) {
13130
+ const sharedPrefixLength = this.getSharedCommittedPrefixLength(parsedMessages);
13131
+ if (sharedPrefixLength !== this.committedMessages.length) return null;
13132
+ const committedHydratedMessages = this.committedMessages.map((message, index) => {
13133
+ const timestamp = typeof message.timestamp === "number" && Number.isFinite(message.timestamp) ? message.timestamp : this.lastOutputAt || this.currentTurnScope?.startedAt || Date.now();
13134
+ const contentValue = message.content;
13135
+ return {
13136
+ role: message.role,
13137
+ content: typeof contentValue === "string" ? contentValue : String(contentValue || ""),
13138
+ timestamp,
13139
+ receivedAt: typeof message.receivedAt === "number" && Number.isFinite(message.receivedAt) ? message.receivedAt : timestamp,
13140
+ kind: message.kind,
13141
+ id: message.id || `msg_${index}`,
13142
+ index: typeof message.index === "number" ? message.index : index,
13143
+ meta: message.meta,
13144
+ senderName: message.senderName
13145
+ };
13146
+ });
13147
+ const extraMessages = parsedMessages.slice(sharedPrefixLength);
13148
+ if (extraMessages.length === 0) return committedHydratedMessages;
13149
+ const extraHydratedMessages = hydrateCliParsedMessages(extraMessages, {
13150
+ committedMessages: [],
13151
+ scope: this.currentTurnScope,
13152
+ lastOutputAt: this.lastOutputAt
13153
+ }).map((message, offset) => ({
13154
+ ...message,
13155
+ id: message.id || `msg_${sharedPrefixLength + offset}`,
13156
+ index: typeof message.index === "number" ? message.index : sharedPrefixLength + offset
13157
+ }));
13158
+ return [...committedHydratedMessages, ...extraHydratedMessages];
13159
+ }
13160
+ hydrateParsedMessagesForStatus(parsedMessages) {
13161
+ return this.hydrateCommittedPrefixForParsedStatus(parsedMessages) || hydrateCliParsedMessages(parsedMessages, {
13162
+ committedMessages: this.committedMessages,
13163
+ scope: this.currentTurnScope,
13164
+ lastOutputAt: this.lastOutputAt
13165
+ });
13166
+ }
13167
+ buildCommittedChatMessages() {
13168
+ return this.committedMessages.map((message, index) => {
13169
+ const contentValue = message.content;
13170
+ return buildChatMessage({
13171
+ role: message.role,
13172
+ content: typeof contentValue === "string" ? contentValue : String(contentValue || ""),
13173
+ timestamp: message.timestamp,
13174
+ kind: message.kind,
13175
+ meta: message.meta,
13176
+ senderName: message.senderName,
13177
+ id: message.id || `msg_${index}`,
13178
+ index: typeof message.index === "number" ? message.index : index,
13179
+ receivedAt: typeof message.receivedAt === "number" ? message.receivedAt : message.timestamp
13180
+ });
13181
+ });
13182
+ }
13111
13183
  /**
13112
13184
  * Script-based full parse — returns ReadChatResult.
13113
13185
  * Called by command handler / dashboard for rich content rendering.
@@ -13133,7 +13205,7 @@ var init_provider_cli_adapter = __esm({
13133
13205
  this.onStatusChange?.();
13134
13206
  }
13135
13207
  }
13136
- if (parsed && Array.isArray(parsed.messages)) {
13208
+ if (parsed && Array.isArray(parsed.messages) && this.provider.allowInputDuringGeneration === true) {
13137
13209
  const hydratedForCommit = normalizeCliParsedMessages(parsed.messages, {
13138
13210
  committedMessages: this.committedMessages,
13139
13211
  scope: this.currentTurnScope,
@@ -13152,21 +13224,21 @@ var init_provider_cli_adapter = __esm({
13152
13224
  const shouldPreferCommittedMessages = !this.currentTurnScope && !this.activeModal && this.currentStatus === "idle";
13153
13225
  let result;
13154
13226
  if (parsed && Array.isArray(parsed.messages)) {
13155
- const parsedHydratedMessages = hydrateCliParsedMessages(parsed.messages, {
13156
- committedMessages: this.committedMessages,
13157
- scope: this.currentTurnScope,
13158
- lastOutputAt: this.lastOutputAt
13159
- });
13160
- const committedHydratedMessages = this.committedMessages.map((message, index) => buildChatMessage({
13161
- ...message,
13162
- id: message.id || `msg_${index}`,
13163
- index: typeof message.index === "number" ? message.index : index,
13164
- receivedAt: typeof message.receivedAt === "number" ? message.receivedAt : message.timestamp
13165
- }));
13227
+ const parsedHydratedMessages = this.hydrateParsedMessagesForStatus(parsed.messages);
13166
13228
  const parsedLastAssistant = [...parsedHydratedMessages].reverse().find((message) => message.role === "assistant" && typeof message.content === "string" && message.content.trim());
13167
- 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");
13229
+ 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");
13168
13230
  if (shouldAdoptParsedIdleReplay) {
13169
- this.committedMessages = normalizeCliParsedMessages(parsed.messages, {
13231
+ this.committedMessages = this.getSharedCommittedPrefixLength(parsed.messages) === this.committedMessages.length ? parsedHydratedMessages.map((message) => ({
13232
+ role: message.role,
13233
+ content: typeof message.content === "string" ? message.content : String(message.content || ""),
13234
+ timestamp: message.timestamp,
13235
+ receivedAt: message.receivedAt,
13236
+ kind: message.kind,
13237
+ id: message.id,
13238
+ index: message.index,
13239
+ meta: message.meta,
13240
+ senderName: message.senderName
13241
+ })) : normalizeCliParsedMessages(parsed.messages, {
13170
13242
  committedMessages: this.committedMessages,
13171
13243
  scope: this.currentTurnScope,
13172
13244
  lastOutputAt: this.lastOutputAt
@@ -13185,15 +13257,9 @@ var init_provider_cli_adapter = __esm({
13185
13257
  this.onStatusChange?.();
13186
13258
  }
13187
13259
  }
13188
- const effectiveCommittedHydratedMessages = shouldAdoptParsedIdleReplay ? this.committedMessages.map((message, index) => buildChatMessage({
13189
- ...message,
13190
- id: message.id || `msg_${index}`,
13191
- index: typeof message.index === "number" ? message.index : index,
13192
- receivedAt: typeof message.receivedAt === "number" ? message.receivedAt : message.timestamp
13193
- })) : committedHydratedMessages;
13194
- const shouldPreferCommittedHistoryReplay = !this.currentTurnScope && !this.activeModal && effectiveCommittedHydratedMessages.length > parsedHydratedMessages.length;
13260
+ const shouldPreferCommittedHistoryReplay = !this.currentTurnScope && !this.activeModal && this.committedMessages.length > parsedHydratedMessages.length;
13195
13261
  const shouldPreferCommittedIdleReplay = shouldPreferCommittedMessages && !shouldAdoptParsedIdleReplay;
13196
- const hydratedMessages = shouldPreferCommittedIdleReplay || shouldPreferCommittedHistoryReplay ? effectiveCommittedHydratedMessages : parsedHydratedMessages;
13262
+ const hydratedMessages = shouldPreferCommittedIdleReplay || shouldPreferCommittedHistoryReplay ? this.buildCommittedChatMessages() : parsedHydratedMessages;
13197
13263
  result = {
13198
13264
  id: parsed.id || "cli_session",
13199
13265
  status: parsed.status || this.currentStatus,
@@ -56449,7 +56515,7 @@ var init_adhdev_daemon = __esm({
56449
56515
  init_version();
56450
56516
  init_src();
56451
56517
  init_runtime_defaults();
56452
- pkgVersion = resolvePackageVersion({ injectedVersion: "0.9.35" });
56518
+ pkgVersion = resolvePackageVersion({ injectedVersion: "0.9.36" });
56453
56519
  AdhdevDaemon = class _AdhdevDaemon {
56454
56520
  localHttpServer = null;
56455
56521
  localWss = null;