


















@@ -588,6 +588,19 @@ export const dispatchTelegramMessage = async ({
588588let streamToolProgressSuppressed = false;
589589let streamToolProgressLines: string[] = [];
590590let lastAnswerPartialText = "";
591+let activeAnswerDraftIsToolProgressOnly = false;
592+function resetAnswerToolProgressDraft() {
593+activeAnswerDraftIsToolProgressOnly = false;
594+}
595+async function prepareAnswerLaneForToolProgress() {
596+if (activeAnswerDraftIsToolProgressOnly) {
597+return;
598+}
599+if (answerLane.hasStreamedMessage) {
600+await rotateLaneForNewMessage(answerLane);
601+}
602+activeAnswerDraftIsToolProgressOnly = true;
603+}
591604const renderProgressDraft = async (options?: { flush?: boolean }) => {
592605if (!answerLane.stream || streamMode !== "progress") {
593606return;
@@ -601,6 +614,7 @@ export const dispatchTelegramMessage = async ({
601614if (!streamText || streamText === answerLane.lastPartialText) {
602615return;
603616}
617+await prepareAnswerLaneForToolProgress();
604618answerLane.lastPartialText = streamText;
605619answerLane.hasStreamedMessage = true;
606620answerLane.finalized = false;
@@ -640,6 +654,7 @@ export const dispatchTelegramMessage = async ({
640654seed: progressSeed,
641655formatLine: formatProgressAsMarkdownCode,
642656});
657+await prepareAnswerLaneForToolProgress();
643658answerLane.lastPartialText = streamText;
644659answerLane.hasStreamedMessage = true;
645660answerLane.finalized = false;
@@ -732,6 +747,9 @@ export const dispatchTelegramMessage = async ({
732747}
733748lane.hasStreamedMessage = false;
734749lane.finalized = false;
750+if (lane === answerLane) {
751+resetAnswerToolProgressDraft();
752+}
735753};
736754const rotateLaneForNewMessage = async (lane: DraftLaneState) => {
737755if (!lane.hasStreamedMessage && typeof lane.stream?.messageId() !== "number") {
@@ -742,7 +760,21 @@ export const dispatchTelegramMessage = async ({
742760lane.stream?.forceNewMessage();
743761resetDraftLaneState(lane);
744762};
763+const rotateAnswerLaneAfterToolProgress = async () => {
764+if (!activeAnswerDraftIsToolProgressOnly) {
765+return false;
766+}
767+await answerLane.stream?.stop();
768+answerLane.stream?.forceNewMessage();
769+resetDraftLaneState(answerLane);
770+streamToolProgressSuppressed = true;
771+streamToolProgressLines = [];
772+return true;
773+};
745774const prepareAnswerLaneForText = async () => {
775+if (await rotateAnswerLaneAfterToolProgress()) {
776+return;
777+}
746778if (!answerLane.finalized) {
747779return;
748780}
@@ -762,6 +794,7 @@ export const dispatchTelegramMessage = async ({
762794if (streamMode === "progress") {
763795return;
764796}
797+resetAnswerToolProgressDraft();
765798streamToolProgressSuppressed = true;
766799streamToolProgressLines = [];
767800}
@@ -1092,8 +1125,12 @@ export const dispatchTelegramMessage = async ({
10921125payload: ReplyPayload,
10931126text: string,
10941127): Promise<LaneDeliveryResult> => {
1095-await answerLane.stream?.clear();
1096-resetDraftLaneState(answerLane);
1128+if (activeAnswerDraftIsToolProgressOnly) {
1129+await rotateAnswerLaneAfterToolProgress();
1130+} else {
1131+await answerLane.stream?.clear();
1132+resetDraftLaneState(answerLane);
1133+}
10971134const delivered = await sendPayload(applyTextToPayload(payload, text), { durable: true });
10981135answerLane.finalized = true;
10991136return delivered ? { kind: "sent" } : { kind: "skipped" };
@@ -1216,6 +1253,24 @@ export const dispatchTelegramMessage = async ({
12161253const segments = split.segments;
12171254const reply = resolveSendableOutboundReplyParts(effectivePayload);
121812551256+const deliverFinalAnswerText = async (
1257+answerPayload: ReplyPayload,
1258+text: string,
1259+buttons?: TelegramInlineButtons,
1260+) => {
1261+if (streamMode === "progress") {
1262+return deliverProgressModeFinalAnswer(answerPayload, text);
1263+}
1264+await rotateAnswerLaneAfterToolProgress();
1265+return deliverLaneText({
1266+laneName: "answer",
1267+ text,
1268+payload: answerPayload,
1269+infoKind: "final",
1270+ buttons,
1271+});
1272+};
1273+12191274const flushBufferedFinalAnswer = async () => {
12201275const buffered =
12211276reasoningStepState.takeBufferedFinalAnswer(replyFenceGeneration);
@@ -1227,13 +1282,11 @@ export const dispatchTelegramMessage = async ({
12271282| { buttons?: TelegramInlineButtons }
12281283| undefined
12291284)?.buttons;
1230-await deliverLaneText({
1231-laneName: "answer",
1232-text: buffered.text,
1233-payload: buffered.payload,
1234-infoKind: "final",
1235-buttons: bufferedButtons,
1236-});
1285+await deliverFinalAnswerText(
1286+buffered.payload,
1287+buffered.text,
1288+bufferedButtons,
1289+);
12371290reasoningStepState.resetForNextStep();
12381291};
12391292@@ -1254,13 +1307,15 @@ export const dispatchTelegramMessage = async ({
12541307if (segment.lane === "reasoning") {
12551308reasoningStepState.noteReasoningHint();
12561309}
1310+if (segment.lane === "answer" && info.kind === "tool") {
1311+await prepareAnswerLaneForToolProgress();
1312+}
12571313const result =
1258-streamMode === "progress" &&
1259-segment.lane === "answer" &&
1260-info.kind === "final"
1261- ? await deliverProgressModeFinalAnswer(
1314+segment.lane === "answer" && info.kind === "final"
1315+ ? await deliverFinalAnswerText(
12621316effectivePayload,
12631317segment.update.text,
1318+telegramButtons,
12641319)
12651320 : await deliverLaneText({
12661321laneName: segment.lane,
@@ -1315,6 +1370,7 @@ export const dispatchTelegramMessage = async ({
13151370}
1316137113171372if (info.kind === "final") {
1373+await rotateAnswerLaneAfterToolProgress();
13181374await answerLane.stream?.stop();
13191375await reasoningLane.stream?.stop();
13201376reasoningStepState.resetForNextStep();
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。