Add user warnings for file truncation and size limits

- Alert user when file exceeds 1MB (rejected)
- Warn in filename when file is truncated (>50KB)
- Show clear '[TRUNCATED]' marker in content
- Better error handling with user-facing messages
This commit is contained in:
2026-02-25 03:56:53 +00:00
parent 05b3ae0071
commit 2ab0875ef2

View File

@@ -547,21 +547,38 @@ function autoResizeTextarea(e) {
async function handleFileSelect(e) {
const files = Array.from(e.target.files);
const MAX_FILE_SIZE = 50000; // 50KB text limit
for (const file of files) {
try {
// Check file size first
if (file.size > 1024 * 1024) { // 1MB
alert(`File "${file.name}" is too large (${(file.size / 1024 / 1024).toFixed(1)}MB). Maximum size is 1MB.`);
continue;
}
// Read file content
const content = await readFileContent(file);
// Warn if content will be truncated
let finalContent = content;
let warning = '';
if (content.length > MAX_FILE_SIZE) {
warning = ` (truncated - file is ${Math.round(content.length / 1000)}KB, max ${MAX_FILE_SIZE / 1000}KB per file)`;
finalContent = content.substring(0, MAX_FILE_SIZE) + '\n\n... [TRUNCATED - file too large for context window]';
}
state.files.push({
id: file.name + '-' + Date.now(),
name: file.name,
name: file.name + warning,
type: file.type,
size: file.size,
content: content
content: finalContent,
truncated: content.length > MAX_FILE_SIZE
});
} catch (err) {
console.error('Failed to read file:', file.name, err);
alert(`Failed to read file "${file.name}": ${err.message}`);
}
}
@@ -573,7 +590,7 @@ function readFileContent(file) {
return new Promise((resolve, reject) => {
const reader = new FileReader();
reader.onload = () => resolve(reader.result);
reader.onerror = reject;
reader.onerror = () => reject(new Error('Failed to read file'));
reader.readAsText(file);
});
}
@@ -676,15 +693,10 @@ function buildMessageContent(text, files) {
if (!files.length) return text;
const fileContents = files.map(f => {
const maxLen = 50000; // Limit file content length
const content = f.content || '[File content not available]';
const truncated = content.length > maxLen
? content.substring(0, maxLen) + '\n... [truncated]'
: content;
return `--- ${f.name} ---\n${truncated}\n--- end of ${f.name} ---`;
return `--- ${f.name.replace(/ \(truncated.*\)$/, '')} ---\n${f.content}\n--- end of file ---`;
}).join('\n\n');
return `${text}\n\n${fileContents}`;
return `${text}\n\nAttached files:\n\n${fileContents}`;
}
function updateLastMessage(content) {