debug-truncate.js 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. const fs = require('fs');
  2. const content = fs.readFileSync('temp/rich-outline-fail_57_1779023037497.txt', 'utf-8');
  3. const marker = '========== AI 原始响应 ';
  4. const markerIdx = content.indexOf(marker);
  5. const headerEndIdx = content.indexOf(' ==========', markerIdx);
  6. const aiStart = content.indexOf('\n', headerEndIdx) + 1;
  7. const aiEnd = content.indexOf('\n\n', aiStart);
  8. const aiResponse = content.substring(aiStart, aiEnd);
  9. const chaptersArrayStart = aiResponse.indexOf('"chapters":[');
  10. const arrayOpenPos = chaptersArrayStart + 11;
  11. console.log('Starting from arrayOpenPos:', arrayOpenPos);
  12. console.log('First 30 chars from arrayOpenPos:', JSON.stringify(aiResponse.substring(arrayOpenPos, arrayOpenPos + 30)));
  13. let bracketDepth = 0;
  14. let inString = false;
  15. let escapeNext = false;
  16. let arrayEnd = -1;
  17. for (let i = arrayOpenPos; i < aiResponse.length; i++) {
  18. const ch = aiResponse[i];
  19. if (escapeNext) { escapeNext = false; continue; }
  20. if (ch === '\\') { escapeNext = true; continue; }
  21. if (ch === '"') { inString = !inString; continue; }
  22. if (inString) continue;
  23. if (ch === '[') { bracketDepth++; }
  24. else if (ch === ']') {
  25. bracketDepth--;
  26. if (bracketDepth === 0) { arrayEnd = i; console.log('Array end found at', i); break; }
  27. }
  28. }
  29. if (arrayEnd === -1) {
  30. console.log('Array end NOT FOUND');
  31. console.log('bracketDepth after full scan:', bracketDepth);
  32. console.log('Last 100 chars:', JSON.stringify(aiResponse.slice(-100)));
  33. // Scan from arrayOpenPos and find ALL ] positions with depth info
  34. let depth = 0;
  35. inString = false;
  36. escapeNext = false;
  37. const closeBrackets = [];
  38. for (let i = arrayOpenPos; i < aiResponse.length; i++) {
  39. const ch = aiResponse[i];
  40. if (escapeNext) { escapeNext = false; continue; }
  41. if (ch === '\\') { escapeNext = true; continue; }
  42. if (ch === '"') { inString = !inString; continue; }
  43. if (inString) continue;
  44. if (ch === '[') depth++;
  45. else if (ch === ']') {
  46. depth--;
  47. closeBrackets.push({ pos: i, depth });
  48. }
  49. }
  50. console.log('Close brackets found:', closeBrackets.slice(-10));
  51. } else {
  52. console.log('arrayEnd:', arrayEnd);
  53. const arrayContent = aiResponse.substring(arrayOpenPos + 1, arrayEnd);
  54. console.log('arrayContent length:', arrayContent.length);
  55. console.log('arrayContent end:', JSON.stringify(aiResponse.substring(arrayEnd - 50, arrayEnd + 10)));
  56. }