@adhdev/daemon-core 0.9.39 → 0.9.40
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/commands/chat-commands.d.ts +2 -0
- package/dist/index.js +72 -64
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +72 -64
- package/dist/index.mjs.map +1 -1
- package/node_modules/@adhdev/session-host-core/package.json +1 -1
- package/package.json +1 -1
- package/src/cli-adapters/provider-cli-parse.ts +25 -15
- package/src/commands/chat-commands.ts +65 -56
package/dist/index.mjs
CHANGED
|
@@ -1790,9 +1790,7 @@ function hydrateCliParsedMessages(parsedMessages, options) {
|
|
|
1790
1790
|
};
|
|
1791
1791
|
});
|
|
1792
1792
|
}
|
|
1793
|
-
function chooseMoreComparableCliMessage(left, right) {
|
|
1794
|
-
const leftComparable = normalizeComparableMessageContent(left.content || "");
|
|
1795
|
-
const rightComparable = normalizeComparableMessageContent(right.content || "");
|
|
1793
|
+
function chooseMoreComparableCliMessage(left, right, leftComparable = normalizeComparableMessageContent(left.content || ""), rightComparable = normalizeComparableMessageContent(right.content || "")) {
|
|
1796
1794
|
if (leftComparable && leftComparable === rightComparable) {
|
|
1797
1795
|
const leftNewlines = String(left.content || "").split(/\r\n|\n|\r/g).length - 1;
|
|
1798
1796
|
const rightNewlines = String(right.content || "").split(/\r\n|\n|\r/g).length - 1;
|
|
@@ -1807,24 +1805,32 @@ function dedupeConsecutiveComparableCliMessages(messages) {
|
|
|
1807
1805
|
...message,
|
|
1808
1806
|
content: typeof message.content === "string" ? message.content : String(message.content || "")
|
|
1809
1807
|
};
|
|
1808
|
+
const currentComparable = normalizeComparableMessageContent(current.content || "");
|
|
1810
1809
|
const previous = deduped[deduped.length - 1];
|
|
1811
1810
|
if (!previous) {
|
|
1812
|
-
deduped.push(current);
|
|
1811
|
+
deduped.push({ message: current, comparable: currentComparable });
|
|
1813
1812
|
continue;
|
|
1814
1813
|
}
|
|
1815
|
-
const
|
|
1816
|
-
const
|
|
1817
|
-
const
|
|
1818
|
-
const
|
|
1819
|
-
const sameSender = (previous.senderName || "") === (current.senderName || "");
|
|
1820
|
-
const comparableMatch = previousComparable && previousComparable === currentComparable;
|
|
1814
|
+
const sameRole = previous.message.role === current.role;
|
|
1815
|
+
const sameKind = (previous.message.kind || "standard") === (current.kind || "standard");
|
|
1816
|
+
const sameSender = (previous.message.senderName || "") === (current.senderName || "");
|
|
1817
|
+
const comparableMatch = previous.comparable && previous.comparable === currentComparable;
|
|
1821
1818
|
if (sameRole && sameKind && sameSender && comparableMatch) {
|
|
1822
|
-
|
|
1819
|
+
const selected = chooseMoreComparableCliMessage(
|
|
1820
|
+
previous.message,
|
|
1821
|
+
current,
|
|
1822
|
+
previous.comparable,
|
|
1823
|
+
currentComparable
|
|
1824
|
+
);
|
|
1825
|
+
deduped[deduped.length - 1] = {
|
|
1826
|
+
message: selected,
|
|
1827
|
+
comparable: selected === current ? currentComparable : previous.comparable
|
|
1828
|
+
};
|
|
1823
1829
|
continue;
|
|
1824
1830
|
}
|
|
1825
|
-
deduped.push(current);
|
|
1831
|
+
deduped.push({ message: current, comparable: currentComparable });
|
|
1826
1832
|
}
|
|
1827
|
-
return deduped;
|
|
1833
|
+
return deduped.map((entry) => entry.message);
|
|
1828
1834
|
}
|
|
1829
1835
|
function normalizeCliParsedMessages(parsedMessages, options) {
|
|
1830
1836
|
return dedupeConsecutiveComparableCliMessages(hydrateCliParsedMessages(parsedMessages, options).map((message) => ({
|
|
@@ -10470,68 +10476,66 @@ function normalizeReadChatMessages(payload) {
|
|
|
10470
10476
|
const messages = Array.isArray(payload.messages) ? payload.messages : [];
|
|
10471
10477
|
return normalizeChatMessages(messages);
|
|
10472
10478
|
}
|
|
10473
|
-
function
|
|
10474
|
-
|
|
10479
|
+
function normalizeReadChatReplayTextContent(content) {
|
|
10480
|
+
return flattenContent(content || "").replace(/\s+/g, " ").trim();
|
|
10481
|
+
}
|
|
10482
|
+
function getReadChatReplayCollapseInfo(message) {
|
|
10483
|
+
if (!message) return null;
|
|
10475
10484
|
const role = typeof message.role === "string" ? message.role.trim().toLowerCase() : "";
|
|
10476
10485
|
const kind = typeof message.kind === "string" ? message.kind.trim().toLowerCase() : "standard";
|
|
10477
10486
|
const senderName = typeof message.senderName === "string" ? message.senderName.trim().toLowerCase() : "";
|
|
10478
|
-
const
|
|
10479
|
-
return
|
|
10480
|
-
|
|
10481
|
-
|
|
10482
|
-
|
|
10483
|
-
|
|
10484
|
-
|
|
10485
|
-
|
|
10486
|
-
|
|
10487
|
-
|
|
10487
|
+
const collapsible = role === "assistant" || role === "system";
|
|
10488
|
+
if (!collapsible) return { role, kind, senderName, content: "", signature: "", collapsible };
|
|
10489
|
+
const content = normalizeReadChatReplayTextContent(message.content);
|
|
10490
|
+
return {
|
|
10491
|
+
role,
|
|
10492
|
+
kind,
|
|
10493
|
+
senderName,
|
|
10494
|
+
content,
|
|
10495
|
+
signature: `${role}:${kind}:${senderName}:${content}`,
|
|
10496
|
+
collapsible
|
|
10497
|
+
};
|
|
10488
10498
|
}
|
|
10489
|
-
function
|
|
10490
|
-
if (!
|
|
10491
|
-
|
|
10492
|
-
|
|
10493
|
-
if (
|
|
10494
|
-
if (
|
|
10495
|
-
const content = normalizeReadChatReplayText(message);
|
|
10496
|
-
if (content.length < 160) return false;
|
|
10497
|
-
if (/^(bash|shell|terminal) command\b/i.test(content)) return false;
|
|
10499
|
+
function isStableReadChatAssistantAnswerInfo(info) {
|
|
10500
|
+
if (!info) return false;
|
|
10501
|
+
if (info.role !== "assistant") return false;
|
|
10502
|
+
if (info.kind && info.kind !== "standard") return false;
|
|
10503
|
+
if (info.content.length < 160) return false;
|
|
10504
|
+
if (/^(bash|shell|terminal) command\b/i.test(info.content)) return false;
|
|
10498
10505
|
return true;
|
|
10499
10506
|
}
|
|
10500
|
-
function
|
|
10501
|
-
if (!
|
|
10502
|
-
|
|
10503
|
-
|
|
10504
|
-
|
|
10505
|
-
if (kind && kind !== "standard") return false;
|
|
10506
|
-
const content = normalizeReadChatReplayText(message);
|
|
10507
|
-
const stableContent = normalizeReadChatReplayText(stableAnswer);
|
|
10507
|
+
function isReplayedAssistantAnswerAfterStableAnswerInfo(info, stableContent) {
|
|
10508
|
+
if (!info || !stableContent) return false;
|
|
10509
|
+
if (info.role !== "assistant") return false;
|
|
10510
|
+
if (info.kind && info.kind !== "standard") return false;
|
|
10511
|
+
const content = info.content;
|
|
10508
10512
|
if (content.length < 80 || stableContent.length < 80) return false;
|
|
10509
10513
|
return content === stableContent || content.startsWith(stableContent) || stableContent.startsWith(content);
|
|
10510
10514
|
}
|
|
10511
10515
|
function collapseReplayDuplicatesFromReadChat(messages) {
|
|
10512
10516
|
const collapsed = [];
|
|
10513
10517
|
const replaySignaturesInCurrentTurn = /* @__PURE__ */ new Set();
|
|
10514
|
-
let
|
|
10518
|
+
let stableAssistantAnswerContentInCurrentTurn = "";
|
|
10519
|
+
let previousReplaySignature = "";
|
|
10515
10520
|
for (const message of messages) {
|
|
10516
|
-
const
|
|
10517
|
-
if (role === "user") {
|
|
10521
|
+
const info = getReadChatReplayCollapseInfo(message);
|
|
10522
|
+
if (info?.role === "user") {
|
|
10518
10523
|
replaySignaturesInCurrentTurn.clear();
|
|
10519
|
-
|
|
10524
|
+
stableAssistantAnswerContentInCurrentTurn = "";
|
|
10525
|
+
previousReplaySignature = "";
|
|
10520
10526
|
}
|
|
10521
|
-
|
|
10522
|
-
|
|
10523
|
-
|
|
10524
|
-
|
|
10525
|
-
if (previousSignature === signature) continue;
|
|
10526
|
-
if (replaySignaturesInCurrentTurn.has(signature)) continue;
|
|
10527
|
-
if (isReplayedAssistantAnswerAfterStableAnswer(message, stableAssistantAnswerInCurrentTurn)) continue;
|
|
10527
|
+
if (info?.collapsible && info.signature) {
|
|
10528
|
+
if (previousReplaySignature === info.signature) continue;
|
|
10529
|
+
if (replaySignaturesInCurrentTurn.has(info.signature)) continue;
|
|
10530
|
+
if (isReplayedAssistantAnswerAfterStableAnswerInfo(info, stableAssistantAnswerContentInCurrentTurn)) continue;
|
|
10528
10531
|
}
|
|
10529
10532
|
collapsed.push(message);
|
|
10530
|
-
|
|
10531
|
-
|
|
10533
|
+
previousReplaySignature = info?.collapsible ? info.signature : "";
|
|
10534
|
+
if (info?.collapsible && info.signature) {
|
|
10535
|
+
replaySignaturesInCurrentTurn.add(info.signature);
|
|
10532
10536
|
}
|
|
10533
|
-
if (
|
|
10534
|
-
|
|
10537
|
+
if (isStableReadChatAssistantAnswerInfo(info)) {
|
|
10538
|
+
stableAssistantAnswerContentInCurrentTurn = info?.content || "";
|
|
10535
10539
|
}
|
|
10536
10540
|
}
|
|
10537
10541
|
return collapsed;
|
|
@@ -10611,13 +10615,17 @@ function computeReadChatSync(messages, cursor) {
|
|
|
10611
10615
|
};
|
|
10612
10616
|
}
|
|
10613
10617
|
if (cursor.tailLimit > 0 && knownSignature === lastMessageSignature) {
|
|
10614
|
-
|
|
10615
|
-
|
|
10616
|
-
|
|
10617
|
-
|
|
10618
|
-
|
|
10619
|
-
|
|
10620
|
-
|
|
10618
|
+
const requestedTailCount = Math.min(totalMessages, cursor.tailLimit);
|
|
10619
|
+
if (knownMessageCount >= requestedTailCount) {
|
|
10620
|
+
return {
|
|
10621
|
+
syncMode: "noop",
|
|
10622
|
+
replaceFrom: totalMessages,
|
|
10623
|
+
messages: [],
|
|
10624
|
+
totalMessages,
|
|
10625
|
+
lastMessageSignature
|
|
10626
|
+
};
|
|
10627
|
+
}
|
|
10628
|
+
return buildBoundedTailSync(messages, cursor);
|
|
10621
10629
|
}
|
|
10622
10630
|
if (knownMessageCount < totalMessages) {
|
|
10623
10631
|
const anchorSignature = getChatMessageSignature(messages[knownMessageCount - 1]);
|