fix(web): 会话进度行时长从本轮开始算到结论正文,不再显示 0 秒(FIX-9)
Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
1 parent
41a39f3cc8
commit
c5987a9db3
3 files changed
+74
-12
No files matched your search
@@ -291,13 +291,23 @@ export function buildConversation(
|
||||
return out;
|
||||
}
|
||||
|
||||
/** 一段进度的起止时间(毫秒);没有工具调用为 null */
|
||||
export function activitySpan(activity: ActivityItem[]): number | null {
|
||||
const calls = activity.flatMap((a) => (a.kind === "tool" ? [a.call] : []));
|
||||
if (!calls.length) return null;
|
||||
const start = Math.min(...calls.map((c) => Date.parse(c.startedAt)));
|
||||
const end = Math.max(...calls.map((c) => Date.parse(c.endedAt ?? c.startedAt)));
|
||||
return Number.isFinite(start) && Number.isFinite(end) ? end - start : null;
|
||||
/**
|
||||
* 一段进度的时长(毫秒):从这一轮开始(since,如会话开始 / 用户消息的时间)或首个步骤,
|
||||
* 到最后一个步骤结束或结论正文开始(until)。只算工具起止会漏掉模型思考的时间(整轮 7 秒显示成 0 秒)。
|
||||
* 没有任何步骤为 null。
|
||||
*/
|
||||
export function activitySpan(
|
||||
activity: ActivityItem[],
|
||||
bounds: { since?: string | null; until?: string | null } = {},
|
||||
): number | null {
|
||||
if (!activity.length) return null;
|
||||
const starts = activity.map((a) => Date.parse(a.kind === "tool" ? a.call.startedAt : a.at));
|
||||
const ends = activity.map((a) => Date.parse(a.kind === "tool" ? (a.call.endedAt ?? a.call.startedAt) : a.at));
|
||||
const since = bounds.since ? Date.parse(bounds.since) : Number.NaN;
|
||||
const until = bounds.until ? Date.parse(bounds.until) : Number.NaN;
|
||||
const start = Math.min(...starts.filter(Number.isFinite), ...(Number.isFinite(since) ? [since] : []));
|
||||
const end = Math.max(...ends.filter(Number.isFinite), ...(Number.isFinite(until) ? [until] : []));
|
||||
return Number.isFinite(start) && Number.isFinite(end) && end >= start ? end - start : null;
|
||||
}
|
||||
|
||||
/** 长正文:超过 ~12 行或 600 字按长文处理(收起时限高) */
|
||||
|
||||
Reference in new issue
Block a user