incognitolm commited on
Commit ·
a16dc1f
1
Parent(s): cfae871
Update wsHandler.js
Browse files- server/wsHandler.js +11 -4
server/wsHandler.js
CHANGED
|
@@ -214,7 +214,11 @@ const handlers = {
|
|
| 214 |
async onDone(text, toolCalls, aborted, sessionNameFromTag) {
|
| 215 |
activeStreams.delete(ws);
|
| 216 |
const finalText = text || fullText;
|
| 217 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 218 |
|
| 219 |
const resolvedMap = new Map(toolCallsCollected.map(c => [c.id, c]));
|
| 220 |
const mergedCalls = (toolCalls || []).map(c => {
|
|
@@ -227,7 +231,8 @@ const handlers = {
|
|
| 227 |
let newRootMessage = rootMessage ? validateAndRepairTree(JSON.parse(JSON.stringify(rootMessage))) : null;
|
| 228 |
|
| 229 |
if (!newRootMessage) {
|
| 230 |
-
// First message in session
|
|
|
|
| 231 |
newRootMessage = userEntry;
|
| 232 |
const asstWrap = { ...asstEntry };
|
| 233 |
newRootMessage.versions[0].tail = [asstWrap];
|
|
@@ -236,7 +241,9 @@ const handlers = {
|
|
| 236 |
const currentVerIdx = newRootMessage.currentVersionIdx ?? 0;
|
| 237 |
let currentTail = newRootMessage.versions[currentVerIdx].tail || [];
|
| 238 |
currentTail = JSON.parse(JSON.stringify(currentTail));
|
| 239 |
-
|
|
|
|
|
|
|
| 240 |
currentTail.push(asstEntry);
|
| 241 |
newRootMessage.versions[currentVerIdx].tail = currentTail;
|
| 242 |
}
|
|
@@ -433,7 +440,7 @@ function extractFlatHistory(rootMessage) {
|
|
| 433 |
|
| 434 |
// Helper to ensure message has valid content
|
| 435 |
const ensureValidContent = (msg) => {
|
| 436 |
-
if (
|
| 437 |
console.warn(`Message ${msg.id} has missing content, defaulting to empty string`);
|
| 438 |
msg.content = '';
|
| 439 |
}
|
|
|
|
| 214 |
async onDone(text, toolCalls, aborted, sessionNameFromTag) {
|
| 215 |
activeStreams.delete(ws);
|
| 216 |
const finalText = text || fullText;
|
| 217 |
+
|
| 218 |
+
// Only create user entry if content was actually provided
|
| 219 |
+
const userEntry = (content !== undefined && content !== null && content !== '')
|
| 220 |
+
? buildEntry('user', content)
|
| 221 |
+
: null;
|
| 222 |
|
| 223 |
const resolvedMap = new Map(toolCallsCollected.map(c => [c.id, c]));
|
| 224 |
const mergedCalls = (toolCalls || []).map(c => {
|
|
|
|
| 231 |
let newRootMessage = rootMessage ? validateAndRepairTree(JSON.parse(JSON.stringify(rootMessage))) : null;
|
| 232 |
|
| 233 |
if (!newRootMessage) {
|
| 234 |
+
// First message in session - must have user entry
|
| 235 |
+
if (!userEntry) return safeSend(ws, { type: 'error', message: 'No content for first message' });
|
| 236 |
newRootMessage = userEntry;
|
| 237 |
const asstWrap = { ...asstEntry };
|
| 238 |
newRootMessage.versions[0].tail = [asstWrap];
|
|
|
|
| 241 |
const currentVerIdx = newRootMessage.currentVersionIdx ?? 0;
|
| 242 |
let currentTail = newRootMessage.versions[currentVerIdx].tail || [];
|
| 243 |
currentTail = JSON.parse(JSON.stringify(currentTail));
|
| 244 |
+
if (userEntry) {
|
| 245 |
+
currentTail.push(userEntry);
|
| 246 |
+
}
|
| 247 |
currentTail.push(asstEntry);
|
| 248 |
newRootMessage.versions[currentVerIdx].tail = currentTail;
|
| 249 |
}
|
|
|
|
| 440 |
|
| 441 |
// Helper to ensure message has valid content
|
| 442 |
const ensureValidContent = (msg) => {
|
| 443 |
+
if (msg.content === undefined || msg.content === null) {
|
| 444 |
console.warn(`Message ${msg.id} has missing content, defaulting to empty string`);
|
| 445 |
msg.content = '';
|
| 446 |
}
|