Merge branch 'refactor/shared-and-tasks-components' of https://github.com/siteboon/claudecodeui into refactor/shared-and-tasks-components

This commit is contained in:
Haileyesus
2026-03-05 13:27:18 +03:00
2 changed files with 40 additions and 13 deletions

View File

@@ -1490,6 +1490,23 @@ async function getCodexSessions(projectPath, options = {}) {
} }
} }
function isVisibleCodexUserMessage(payload) {
if (!payload || payload.type !== 'user_message') {
return false;
}
// Codex logs internal context (environment, instructions) as non-plain user_message kinds.
if (payload.kind && payload.kind !== 'plain') {
return false;
}
if (typeof payload.message !== 'string' || payload.message.trim().length === 0) {
return false;
}
return true;
}
// Parse a Codex session JSONL file to extract metadata // Parse a Codex session JSONL file to extract metadata
async function parseCodexSessionFile(filePath) { async function parseCodexSessionFile(filePath) {
try { try {
@@ -1525,8 +1542,8 @@ async function parseCodexSessionFile(filePath) {
}; };
} }
// Count messages and extract user messages for summary // Count visible user messages and extract summary from the latest plain user input.
if (entry.type === 'event_msg' && entry.payload?.type === 'user_message') { if (entry.type === 'event_msg' && isVisibleCodexUserMessage(entry.payload)) {
messageCount++; messageCount++;
if (entry.payload.message) { if (entry.payload.message) {
lastUserMessage = entry.payload.message; lastUserMessage = entry.payload.message;
@@ -1634,24 +1651,35 @@ async function getCodexSessionMessages(sessionId, limit = null, offset = 0) {
} }
} }
// Extract messages from response_item // Use event_msg.user_message for user-visible inputs.
if (entry.type === 'response_item' && entry.payload?.type === 'message') { if (entry.type === 'event_msg' && isVisibleCodexUserMessage(entry.payload)) {
const content = entry.payload.content; messages.push({
const role = entry.payload.role || 'assistant'; type: 'user',
const textContent = extractText(content); timestamp: entry.timestamp,
message: {
role: 'user',
content: entry.payload.message
}
});
}
// Skip system context messages (environment_context) // response_item.message may include internal prompts for non-assistant roles.
if (textContent?.includes('<environment_context>')) { // Keep only assistant output from response_item.
continue; if (
} entry.type === 'response_item' &&
entry.payload?.type === 'message' &&
entry.payload.role === 'assistant'
) {
const content = entry.payload.content;
const textContent = extractText(content);
// Only add if there's actual content // Only add if there's actual content
if (textContent?.trim()) { if (textContent?.trim()) {
messages.push({ messages.push({
type: role === 'user' ? 'user' : 'assistant', type: 'assistant',
timestamp: entry.timestamp, timestamp: entry.timestamp,
message: { message: {
role: role, role: 'assistant',
content: textContent content: textContent
} }
}); });

View File

@@ -67,7 +67,6 @@ const useWebSocketProviderState = (): WebSocketContextType => {
try { try {
const data = JSON.parse(event.data); const data = JSON.parse(event.data);
setLatestMessage(data); setLatestMessage(data);
console.log('--->Received WebSocket message:', data);
} catch (error) { } catch (error) {
console.error('Error parsing WebSocket message:', error); console.error('Error parsing WebSocket message:', error);
} }