fix: preserve trace-frame sample lifecycle (#853)
Co-authored-by: Codex <codex@noreply.local>
This commit is contained in:
@@ -165,16 +165,22 @@ function parseElapsed(text){
|
||||
function parseRecent(text){const m=String(text||'').match(/最近\\s*(\\d+)\\s*(秒|分钟|分|小时)前/u); if(!m)return null; const n=Number(m[1]); return m[2]==='小时'?n*3600:m[2]==='秒'?n:n*60}
|
||||
function fmtDuration(seconds){if(seconds===null||seconds===undefined||!Number.isFinite(Number(seconds)))return '-'; const value=Math.max(0,Math.round(Number(seconds))); const h=Math.floor(value/3600), m=Math.floor((value%3600)/60), s=value%60; return (h>0?String(h).padStart(2,'0')+':':'')+String(m).padStart(2,'0')+':'+String(s).padStart(2,'0')}
|
||||
function terminalText(text){return /轮次完成|轮次失败|轮次取消|已记录|final response|sealed final response|turn completed|turn failed|turn canceled|completed|failed|canceled|cancelled|terminal/iu.test(String(text||''))}
|
||||
function normalizeLifecycleStatus(value){
|
||||
const raw=String(value||'').trim().toLowerCase();
|
||||
if(/^(canceled|cancelled)$/u.test(raw))return 'canceled';
|
||||
if(/^(failed|failure|error)$/u.test(raw))return 'failed';
|
||||
if(/^(completed|complete|succeeded|success|terminal)$/u.test(raw))return 'completed';
|
||||
if(/^(running|admitting|queued|pending|in_progress|in-progress)$/u.test(raw))return 'running';
|
||||
return null;
|
||||
}
|
||||
function statusFor(items,traceId=null){
|
||||
const texts=textsFor(items,traceId);
|
||||
const joined=texts.join('\\n');
|
||||
const matchedEntries=traceId?traceEntries(items,traceId):items.flatMap((sample)=>entryGroups(sample).map((entry)=>({...entry,sample,text:textOf(entry.item)})));
|
||||
const lastTurn=matchedEntries.filter((entry)=>entry.group==='turn').slice(-1)[0]?.item||null;
|
||||
const raw=String(lastTurn?.status||'').toLowerCase();
|
||||
if(/cancel/iu.test(joined)||raw.includes('cancel'))return 'canceled';
|
||||
if(/failed|error|agentrun:error/iu.test(joined)||raw.includes('fail'))return 'failed';
|
||||
if(texts.some(terminalText)||raw.includes('complete'))return 'completed';
|
||||
if(/running|运行中|Code Agent\\s*耗时|最近\\s*\\d+/iu.test(joined)||raw.includes('running'))return 'running';
|
||||
const turnStatus=normalizeLifecycleStatus(lastTurn?.status);
|
||||
if(turnStatus)return turnStatus;
|
||||
const lastMessage=matchedEntries.filter((entry)=>entry.group==='message').slice(-1)[0]?.item||null;
|
||||
const messageStatus=normalizeLifecycleStatus(lastMessage?.status);
|
||||
if(messageStatus)return messageStatus;
|
||||
return 'unknown';
|
||||
}
|
||||
function userMessageFor(items,prompt){
|
||||
@@ -189,6 +195,7 @@ function userMessageFor(items,prompt){
|
||||
function cleanFinalResponseText(text){
|
||||
const raw=String(text||'').trim();
|
||||
if(!raw) return '';
|
||||
if(/^Code Agent$/iu.test(raw)) return '';
|
||||
if(/Code Agent\\s*耗时[\\s\\S]*运行记录/iu.test(raw)) return '';
|
||||
if(/^sent\\s+当前 AgentRun 请求已取消/u.test(raw)) return '';
|
||||
if(/^(admitted|run|ok|error)\\s+/iu.test(raw)) return '';
|
||||
|
||||
Reference in New Issue
Block a user