mirror of
https://github.com/Ed1s0nZ/CyberStrikeAI.git
synced 2026-08-19 17:37:23 +02:00
Add files via upload
This commit is contained in:
@@ -410,6 +410,34 @@ if (typeof window !== 'undefined') {
|
|||||||
window.normalizeStreamingDeltaJs = normalizeStreamingDeltaJs;
|
window.normalizeStreamingDeltaJs = normalizeStreamingDeltaJs;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* SSE data.accumulated:服务端权威流式全文。有则直接用作 buffer,避免双端 normalize 叠字。
|
||||||
|
* @param {object|null|undefined} data
|
||||||
|
* @returns {string|null} 有快照时返回全文;否则 null(回退 delta 归一化)
|
||||||
|
*/
|
||||||
|
function streamBufferFromAccumulated(data) {
|
||||||
|
if (!data || data.accumulated == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return String(data.accumulated);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @returns {string} 合并后的 buffer
|
||||||
|
*/
|
||||||
|
function mergeStreamBuffer(current, delta, data) {
|
||||||
|
const acc = streamBufferFromAccumulated(data);
|
||||||
|
if (acc !== null) {
|
||||||
|
return acc;
|
||||||
|
}
|
||||||
|
return normalizeStreamingDeltaJs(current, delta)[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (typeof window !== 'undefined') {
|
||||||
|
window.streamBufferFromAccumulated = streamBufferFromAccumulated;
|
||||||
|
window.mergeStreamBuffer = mergeStreamBuffer;
|
||||||
|
}
|
||||||
|
|
||||||
/** 流式 delta:纯文本,避免每条全量 marked + DOMPurify */
|
/** 流式 delta:纯文本,避免每条全量 marked + DOMPurify */
|
||||||
function setTimelineItemContentStreamPlain(contentEl, text) {
|
function setTimelineItemContentStreamPlain(contentEl, text) {
|
||||||
if (!contentEl) return;
|
if (!contentEl) return;
|
||||||
@@ -1411,8 +1439,7 @@ function handleStreamEvent(event, progressElement, progressId,
|
|||||||
const s = state.get(streamId);
|
const s = state.get(streamId);
|
||||||
|
|
||||||
const delta = event.message || '';
|
const delta = event.message || '';
|
||||||
const merged = normalizeStreamingDeltaJs(s.buffer, delta);
|
s.buffer = mergeStreamBuffer(s.buffer, delta, d);
|
||||||
s.buffer = merged[0];
|
|
||||||
|
|
||||||
const item = document.getElementById(s.itemId);
|
const item = document.getElementById(s.itemId);
|
||||||
if (item) {
|
if (item) {
|
||||||
@@ -1710,12 +1737,11 @@ function handleStreamEvent(event, progressElement, progressId,
|
|||||||
const streamId = d.streamId || null;
|
const streamId = d.streamId || null;
|
||||||
if (!streamId) break;
|
if (!streamId) break;
|
||||||
const delta = event.message || '';
|
const delta = event.message || '';
|
||||||
if (!delta) break;
|
if (!delta && streamBufferFromAccumulated(d) === null) break;
|
||||||
const stateMap = einoAgentReplyStreamStateByProgressId.get(progressId);
|
const stateMap = einoAgentReplyStreamStateByProgressId.get(progressId);
|
||||||
if (!stateMap || !stateMap.has(streamId)) break;
|
if (!stateMap || !stateMap.has(streamId)) break;
|
||||||
const s = stateMap.get(streamId);
|
const s = stateMap.get(streamId);
|
||||||
const merged = normalizeStreamingDeltaJs(s.buffer, delta);
|
s.buffer = mergeStreamBuffer(s.buffer, delta, d);
|
||||||
s.buffer = merged[0];
|
|
||||||
const item = document.getElementById(s.itemId);
|
const item = document.getElementById(s.itemId);
|
||||||
if (item) {
|
if (item) {
|
||||||
let contentEl = item.querySelector('.timeline-item-content');
|
let contentEl = item.querySelector('.timeline-item-content');
|
||||||
@@ -1901,8 +1927,8 @@ function handleStreamEvent(event, progressElement, progressId,
|
|||||||
}
|
}
|
||||||
|
|
||||||
const deltaContent = event.message || '';
|
const deltaContent = event.message || '';
|
||||||
const mergedResp = normalizeStreamingDeltaJs(state.buffer, deltaContent);
|
if (!deltaContent && streamBufferFromAccumulated(responseData) === null) break;
|
||||||
state.buffer = mergedResp[0];
|
state.buffer = mergeStreamBuffer(state.buffer, deltaContent, responseData);
|
||||||
|
|
||||||
// 更新时间线条目内容
|
// 更新时间线条目内容
|
||||||
if (state.itemId) {
|
if (state.itemId) {
|
||||||
|
|||||||
+27
-12
@@ -2924,11 +2924,16 @@ function runWebshellAiSend(conn, inputEl, sendBtn, messagesContainer) {
|
|||||||
messagesContainer.scrollTop = messagesContainer.scrollHeight;
|
messagesContainer.scrollTop = messagesContainer.scrollHeight;
|
||||||
} else if (_et === 'response_delta') {
|
} else if (_et === 'response_delta') {
|
||||||
var deltaText = (_em != null && _em !== '') ? String(_em) : '';
|
var deltaText = (_em != null && _em !== '') ? String(_em) : '';
|
||||||
if (deltaText) {
|
var mergeBuf = (typeof window.mergeStreamBuffer === 'function')
|
||||||
var normR = (typeof window.normalizeStreamingDeltaJs === 'function')
|
? window.mergeStreamBuffer
|
||||||
? window.normalizeStreamingDeltaJs(streamingTarget, deltaText)
|
: function (cur, dlt) {
|
||||||
: [streamingTarget + deltaText, deltaText];
|
var normR = (typeof window.normalizeStreamingDeltaJs === 'function')
|
||||||
streamingTarget = normR[0];
|
? window.normalizeStreamingDeltaJs(cur, dlt)
|
||||||
|
: [cur + dlt, dlt];
|
||||||
|
return normR[0];
|
||||||
|
};
|
||||||
|
if (deltaText || (_ed && _ed.accumulated != null)) {
|
||||||
|
streamingTarget = mergeBuf(streamingTarget, deltaText, _ed);
|
||||||
webshellStreamingTypingId += 1;
|
webshellStreamingTypingId += 1;
|
||||||
streamingTypingId = webshellStreamingTypingId;
|
streamingTypingId = webshellStreamingTypingId;
|
||||||
runWebshellAiStreamingTyping(assistantDiv, streamingTarget, streamingTypingId, messagesContainer);
|
runWebshellAiStreamingTyping(assistantDiv, streamingTarget, streamingTypingId, messagesContainer);
|
||||||
@@ -3001,12 +3006,17 @@ function runWebshellAiSend(conn, inputEl, sendBtn, messagesContainer) {
|
|||||||
wsThinkingStreams.set(_ed.streamId, { el: thinkSItem, body: thinkSPre, buf: '' });
|
wsThinkingStreams.set(_ed.streamId, { el: thinkSItem, body: thinkSPre, buf: '' });
|
||||||
}
|
}
|
||||||
if (!streamingTarget) assistantDiv.textContent = '…';
|
if (!streamingTarget) assistantDiv.textContent = '…';
|
||||||
} else if ((_et === 'thinking_stream_delta' || _et === 'reasoning_chain_stream_delta') && _ed.streamId) {
|
} else if ((_et === 'thinking_stream_delta' || _et === 'reasoning_chain_stream_delta') && _ed && _ed.streamId) {
|
||||||
var tsD = wsThinkingStreams.get(_ed.streamId);
|
var tsD = wsThinkingStreams.get(_ed.streamId);
|
||||||
if (tsD) {
|
if (tsD) {
|
||||||
var normT = (typeof window.normalizeStreamingDeltaJs === 'function')
|
var mergeThink = (typeof window.mergeStreamBuffer === 'function')
|
||||||
? window.normalizeStreamingDeltaJs(tsD.buf, _em || '') : [tsD.buf + (_em || ''), _em || ''];
|
? window.mergeStreamBuffer
|
||||||
tsD.buf = normT[0];
|
: function (cur, dlt) {
|
||||||
|
var normT = (typeof window.normalizeStreamingDeltaJs === 'function')
|
||||||
|
? window.normalizeStreamingDeltaJs(cur, dlt) : [cur + dlt, dlt];
|
||||||
|
return normT[0];
|
||||||
|
};
|
||||||
|
tsD.buf = mergeThink(tsD.buf, _em || '', _ed);
|
||||||
if (typeof formatMarkdown === 'function') {
|
if (typeof formatMarkdown === 'function') {
|
||||||
tsD.body.innerHTML = formatMarkdown(tsD.buf);
|
tsD.body.innerHTML = formatMarkdown(tsD.buf);
|
||||||
} else {
|
} else {
|
||||||
@@ -3136,9 +3146,14 @@ function runWebshellAiSend(conn, inputEl, sendBtn, messagesContainer) {
|
|||||||
} else if (_et === 'eino_agent_reply_stream_delta' && _ed.streamId) {
|
} else if (_et === 'eino_agent_reply_stream_delta' && _ed.streamId) {
|
||||||
var stD = einoSubReplyStreams.get(_ed.streamId);
|
var stD = einoSubReplyStreams.get(_ed.streamId);
|
||||||
if (stD) {
|
if (stD) {
|
||||||
var normS = (typeof window.normalizeStreamingDeltaJs === 'function')
|
var mergeSub = (typeof window.mergeStreamBuffer === 'function')
|
||||||
? window.normalizeStreamingDeltaJs(stD.buf, _em || '') : [stD.buf + (_em || ''), _em || ''];
|
? window.mergeStreamBuffer
|
||||||
stD.buf = normS[0];
|
: function (cur, dlt) {
|
||||||
|
var normS = (typeof window.normalizeStreamingDeltaJs === 'function')
|
||||||
|
? window.normalizeStreamingDeltaJs(cur, dlt) : [cur + dlt, dlt];
|
||||||
|
return normS[0];
|
||||||
|
};
|
||||||
|
stD.buf = mergeSub(stD.buf, _em || '', _ed);
|
||||||
var preD = stD.el.querySelector('.webshell-eino-reply-stream-body');
|
var preD = stD.el.querySelector('.webshell-eino-reply-stream-body');
|
||||||
if (!preD) {
|
if (!preD) {
|
||||||
preD = document.createElement('pre');
|
preD = document.createElement('pre');
|
||||||
|
|||||||
Reference in New Issue
Block a user