[Bug] Page Crash Due to Markdown Parsing Error with <think> Tag in Model Response

### 📦 部署环境

Vercel, Official Preview

### 📌 软件版本

v1.49.9

### 💻 系统环境

macOS, iOS

### 🌐 浏览器

Chrome, Firefox, Safari

### 🐛 问题描述

我在使用DeepSeek R1模型的时候，发现在LLM回答过程中页面会崩溃，此时网页控制台显示如下错误：

<details>

```
48972-fc855fc565c2cbcb.js:1 Error: Cannot handle unknown node `inlineMath`
    at Object.Q (64747-902899483f9f894f.js:1:73064)
    at Object.o [as handle] (59704-58dbe2727a6ee9e3.js:1:216085)
    at 64747-902899483f9f894f.js:1:73691
    at Object.K [as containerPhrasing] (64747-902899483f9f894f.js:1:74074)
    at Object.paragraph (64747-902899483f9f894f.js:1:67793)
    at Object.o [as handle] (59704-58dbe2727a6ee9e3.js:1:216085)
    at Y (64747-902899483f9f894f.js:1:72810)
    at 88023-16292b7f7a064d4b.js:1:48803
    at Array.map (<anonymous>)
    at 88023-16292b7f7a064d4b.js:1:48788
    at 65238-9dd45f0d61bfdb22.js:1:766032
    at node (/html) (https://lobe-db.slinet.me/_next/static/chunks/65238-9dd45f0d61bfdb22.js:1:765476)
    at node (/root) (https://lobe-db.slinet.me/_next/static/chunks/65238-9dd45f0d61bfdb22.js:1:765696)
    at s (65238-9dd45f0d61bfdb22.js:1:765773)
    at i (65238-9dd45f0d61bfdb22.js:1:765953)
    at 88023-16292b7f7a064d4b.js:1:48503
    at 65238-9dd45f0d61bfdb22.js:1:759258
    at i (65238-9dd45f0d61bfdb22.js:1:759463)
    at n (65238-9dd45f0d61bfdb22.js:1:759421)
    at i (65238-9dd45f0d61bfdb22.js:1:759446)
    at 65238-9dd45f0d61bfdb22.js:1:759386
    at i (65238-9dd45f0d61bfdb22.js:1:759463)
    at Object.run (65238-9dd45f0d61bfdb22.js:1:759484)
    at i (65238-9dd45f0d61bfdb22.js:1:761386)
    at Function.run (65238-9dd45f0d61bfdb22.js:1:761252)
    at Function.runSync (65238-9dd45f0d61bfdb22.js:1:761542)
    at en (65238-9dd45f0d61bfdb22.js:1:21627)
    at ll (4bd1b696-7bd16320e2b3bd82.js:1:34825)
    at aZ (4bd1b696-7bd16320e2b3bd82.js:1:61426)
    at ol (4bd1b696-7bd16320e2b3bd82.js:1:72780)
    at uu (4bd1b696-7bd16320e2b3bd82.js:1:112196)
    at 4bd1b696-7bd16320e2b3bd82.js:1:112041
    at ui (4bd1b696-7bd16320e2b3bd82.js:1:112049)
    at i8 (4bd1b696-7bd16320e2b3bd82.js:1:109186)
    at uO (4bd1b696-7bd16320e2b3bd82.js:1:129158)
    at uT (4bd1b696-7bd16320e2b3bd82.js:1:127587)
    at u_ (4bd1b696-7bd16320e2b3bd82.js:1:127904)
    at 4bd1b696-7bd16320e2b3bd82.js:1:127267
l @ 48972-fc855fc565c2cbcb.js:1
aU @ 4bd1b696-7bd16320e2b3bd82.js:1
e.callback @ 4bd1b696-7bd16320e2b3bd82.js:1
oN @ 4bd1b696-7bd16320e2b3bd82.js:1
oL @ 4bd1b696-7bd16320e2b3bd82.js:1
oF @ 4bd1b696-7bd16320e2b3bd82.js:1
oq @ 4bd1b696-7bd16320e2b3bd82.js:1
o3 @ 4bd1b696-7bd16320e2b3bd82.js:1
oq @ 4bd1b696-7bd16320e2b3bd82.js:1
o3 @ 4bd1b696-7bd16320e2b3bd82.js:1
oq @ 4bd1b696-7bd16320e2b3bd82.js:1
o3 @ 4bd1b696-7bd16320e2b3bd82.js:1
oq @ 4bd1b696-7bd16320e2b3bd82.js:1
o3 @ 4bd1b696-7bd16320e2b3bd82.js:1
oq @ 4bd1b696-7bd16320e2b3bd82.js:1
o3 @ 4bd1b696-7bd16320e2b3bd82.js:1
oq @ 4bd1b696-7bd16320e2b3bd82.js:1
o3 @ 4bd1b696-7bd16320e2b3bd82.js:1
oq @ 4bd1b696-7bd16320e2b3bd82.js:1
o3 @ 4bd1b696-7bd16320e2b3bd82.js:1
oq @ 4bd1b696-7bd16320e2b3bd82.js:1
o3 @ 4bd1b696-7bd16320e2b3bd82.js:1
oq @ 4bd1b696-7bd16320e2b3bd82.js:1
o3 @ 4bd1b696-7bd16320e2b3bd82.js:1
oq @ 4bd1b696-7bd16320e2b3bd82.js:1
o3 @ 4bd1b696-7bd16320e2b3bd82.js:1
oq @ 4bd1b696-7bd16320e2b3bd82.js:1
o3 @ 4bd1b696-7bd16320e2b3bd82.js:1
oq @ 4bd1b696-7bd16320e2b3bd82.js:1
o3 @ 4bd1b696-7bd16320e2b3bd82.js:1
oq @ 4bd1b696-7bd16320e2b3bd82.js:1
o3 @ 4bd1b696-7bd16320e2b3bd82.js:1
oq @ 4bd1b696-7bd16320e2b3bd82.js:1
o3 @ 4bd1b696-7bd16320e2b3bd82.js:1
oq @ 4bd1b696-7bd16320e2b3bd82.js:1
o3 @ 4bd1b696-7bd16320e2b3bd82.js:1
oq @ 4bd1b696-7bd16320e2b3bd82.js:1
o3 @ 4bd1b696-7bd16320e2b3bd82.js:1
oq @ 4bd1b696-7bd16320e2b3bd82.js:1
o3 @ 4bd1b696-7bd16320e2b3bd82.js:1
oq @ 4bd1b696-7bd16320e2b3bd82.js:1
o3 @ 4bd1b696-7bd16320e2b3bd82.js:1
oq @ 4bd1b696-7bd16320e2b3bd82.js:1
o3 @ 4bd1b696-7bd16320e2b3bd82.js:1
oq @ 4bd1b696-7bd16320e2b3bd82.js:1
o3 @ 4bd1b696-7bd16320e2b3bd82.js:1
oq @ 4bd1b696-7bd16320e2b3bd82.js:1
o3 @ 4bd1b696-7bd16320e2b3bd82.js:1
oq @ 4bd1b696-7bd16320e2b3bd82.js:1
o3 @ 4bd1b696-7bd16320e2b3bd82.js:1
oq @ 4bd1b696-7bd16320e2b3bd82.js:1
o3 @ 4bd1b696-7bd16320e2b3bd82.js:1
oq @ 4bd1b696-7bd16320e2b3bd82.js:1
o3 @ 4bd1b696-7bd16320e2b3bd82.js:1
oq @ 4bd1b696-7bd16320e2b3bd82.js:1
o3 @ 4bd1b696-7bd16320e2b3bd82.js:1
oq @ 4bd1b696-7bd16320e2b3bd82.js:1
o3 @ 4bd1b696-7bd16320e2b3bd82.js:1
oq @ 4bd1b696-7bd16320e2b3bd82.js:1
o3 @ 4bd1b696-7bd16320e2b3bd82.js:1
oq @ 4bd1b696-7bd16320e2b3bd82.js:1
o3 @ 4bd1b696-7bd16320e2b3bd82.js:1
oq @ 4bd1b696-7bd16320e2b3bd82.js:1
o3 @ 4bd1b696-7bd16320e2b3bd82.js:1
oq @ 4bd1b696-7bd16320e2b3bd82.js:1
o3 @ 4bd1b696-7bd16320e2b3bd82.js:1
oq @ 4bd1b696-7bd16320e2b3bd82.js:1
o3 @ 4bd1b696-7bd16320e2b3bd82.js:1
oq @ 4bd1b696-7bd16320e2b3bd82.js:1
o3 @ 4bd1b696-7bd16320e2b3bd82.js:1
oq @ 4bd1b696-7bd16320e2b3bd82.js:1
o3 @ 4bd1b696-7bd16320e2b3bd82.js:1
oq @ 4bd1b696-7bd16320e2b3bd82.js:1
o3 @ 4bd1b696-7bd16320e2b3bd82.js:1
oq @ 4bd1b696-7bd16320e2b3bd82.js:1
o3 @ 4bd1b696-7bd16320e2b3bd82.js:1
oq @ 4bd1b696-7bd16320e2b3bd82.js:1
o3 @ 4bd1b696-7bd16320e2b3bd82.js:1
oq @ 4bd1b696-7bd16320e2b3bd82.js:1
o3 @ 4bd1b696-7bd16320e2b3bd82.js:1
oq @ 4bd1b696-7bd16320e2b3bd82.js:1
o3 @ 4bd1b696-7bd16320e2b3bd82.js:1
oq @ 4bd1b696-7bd16320e2b3bd82.js:1
o3 @ 4bd1b696-7bd16320e2b3bd82.js:1
oq @ 4bd1b696-7bd16320e2b3bd82.js:1
o3 @ 4bd1b696-7bd16320e2b3bd82.js:1
oq @ 4bd1b696-7bd16320e2b3bd82.js:1
o3 @ 4bd1b696-7bd16320e2b3bd82.js:1
oq @ 4bd1b696-7bd16320e2b3bd82.js:1
o3 @ 4bd1b696-7bd16320e2b3bd82.js:1
oq @ 4bd1b696-7bd16320e2b3bd82.js:1
o3 @ 4bd1b696-7bd16320e2b3bd82.js:1
oq @ 4bd1b696-7bd16320e2b3bd82.js:1
o3 @ 4bd1b696-7bd16320e2b3bd82.js:1
oq @ 4bd1b696-7bd16320e2b3bd82.js:1
o3 @ 4bd1b696-7bd16320e2b3bd82.js:1
oq @ 4bd1b696-7bd16320e2b3bd82.js:1
o3 @ 4bd1b696-7bd16320e2b3bd82.js:1
oq @ 4bd1b696-7bd16320e2b3bd82.js:1
o3 @ 4bd1b696-7bd16320e2b3bd82.js:1
oq @ 4bd1b696-7bd16320e2b3bd82.js:1
o3 @ 4bd1b696-7bd16320e2b3bd82.js:1
oq @ 4bd1b696-7bd16320e2b3bd82.js:1
o3 @ 4bd1b696-7bd16320e2b3bd82.js:1
oq @ 4bd1b696-7bd16320e2b3bd82.js:1
o3 @ 4bd1b696-7bd16320e2b3bd82.js:1
oq @ 4bd1b696-7bd16320e2b3bd82.js:1
o3 @ 4bd1b696-7bd16320e2b3bd82.js:1
oq @ 4bd1b696-7bd16320e2b3bd82.js:1
o3 @ 4bd1b696-7bd16320e2b3bd82.js:1
oq @ 4bd1b696-7bd16320e2b3bd82.js:1
o3 @ 4bd1b696-7bd16320e2b3bd82.js:1
oq @ 4bd1b696-7bd16320e2b3bd82.js:1
o3 @ 4bd1b696-7bd16320e2b3bd82.js:1
oq @ 4bd1b696-7bd16320e2b3bd82.js:1
o3 @ 4bd1b696-7bd16320e2b3bd82.js:1
oq @ 4bd1b696-7bd16320e2b3bd82.js:1
o3 @ 4bd1b696-7bd16320e2b3bd82.js:1
oq @ 4bd1b696-7bd16320e2b3bd82.js:1
o3 @ 4bd1b696-7bd16320e2b3bd82.js:1
oq @ 4bd1b696-7bd16320e2b3bd82.js:1
o3 @ 4bd1b696-7bd16320e2b3bd82.js:1
oq @ 4bd1b696-7bd16320e2b3bd82.js:1
o3 @ 4bd1b696-7bd16320e2b3bd82.js:1
oq @ 4bd1b696-7bd16320e2b3bd82.js:1
o3 @ 4bd1b696-7bd16320e2b3bd82.js:1
oq @ 4bd1b696-7bd16320e2b3bd82.js:1
o3 @ 4bd1b696-7bd16320e2b3bd82.js:1
oq @ 4bd1b696-7bd16320e2b3bd82.js:1
o3 @ 4bd1b696-7bd16320e2b3bd82.js:1
oq @ 4bd1b696-7bd16320e2b3bd82.js:1
o3 @ 4bd1b696-7bd16320e2b3bd82.js:1
oq @ 4bd1b696-7bd16320e2b3bd82.js:1
o3 @ 4bd1b696-7bd16320e2b3bd82.js:1
oq @ 4bd1b696-7bd16320e2b3bd82.js:1
o3 @ 4bd1b696-7bd16320e2b3bd82.js:1
oq @ 4bd1b696-7bd16320e2b3bd82.js:1
o3 @ 4bd1b696-7bd16320e2b3bd82.js:1
oq @ 4bd1b696-7bd16320e2b3bd82.js:1
o3 @ 4bd1b696-7bd16320e2b3bd82.js:1
oq @ 4bd1b696-7bd16320e2b3bd82.js:1
o3 @ 4bd1b696-7bd16320e2b3bd82.js:1
oq @ 4bd1b696-7bd16320e2b3bd82.js:1
o3 @ 4bd1b696-7bd16320e2b3bd82.js:1
oq @ 4bd1b696-7bd16320e2b3bd82.js:1
o3 @ 4bd1b696-7bd16320e2b3bd82.js:1
oq @ 4bd1b696-7bd16320e2b3bd82.js:1
o3 @ 4bd1b696-7bd16320e2b3bd82.js:1
oq @ 4bd1b696-7bd16320e2b3bd82.js:1
o3 @ 4bd1b696-7bd16320e2b3bd82.js:1
oq @ 4bd1b696-7bd16320e2b3bd82.js:1
o3 @ 4bd1b696-7bd16320e2b3bd82.js:1
oq @ 4bd1b696-7bd16320e2b3bd82.js:1
o3 @ 4bd1b696-7bd16320e2b3bd82.js:1
oq @ 4bd1b696-7bd16320e2b3bd82.js:1
o3 @ 4bd1b696-7bd16320e2b3bd82.js:1
oq @ 4bd1b696-7bd16320e2b3bd82.js:1
o3 @ 4bd1b696-7bd16320e2b3bd82.js:1
oq @ 4bd1b696-7bd16320e2b3bd82.js:1
o3 @ 4bd1b696-7bd16320e2b3bd82.js:1
oq @ 4bd1b696-7bd16320e2b3bd82.js:1
o3 @ 4bd1b696-7bd16320e2b3bd82.js:1
oq @ 4bd1b696-7bd16320e2b3bd82.js:1
o3 @ 4bd1b696-7bd16320e2b3bd82.js:1
oq @ 4bd1b696-7bd16320e2b3bd82.js:1
o3 @ 4bd1b696-7bd16320e2b3bd82.js:1
oq @ 4bd1b696-7bd16320e2b3bd82.js:1
o3 @ 4bd1b696-7bd16320e2b3bd82.js:1
oq @ 4bd1b696-7bd16320e2b3bd82.js:1
o3 @ 4bd1b696-7bd16320e2b3bd82.js:1
oq @ 4bd1b696-7bd16320e2b3bd82.js:1
o3 @ 4bd1b696-7bd16320e2b3bd82.js:1
oq @ 4bd1b696-7bd16320e2b3bd82.js:1
o3 @ 4bd1b696-7bd16320e2b3bd82.js:1
oq @ 4bd1b696-7bd16320e2b3bd82.js:1
o3 @ 4bd1b696-7bd16320e2b3bd82.js:1
oq @ 4bd1b696-7bd16320e2b3bd82.js:1
o3 @ 4bd1b696-7bd16320e2b3bd82.js:1
oq @ 4bd1b696-7bd16320e2b3bd82.js:1
o3 @ 4bd1b696-7bd16320e2b3bd82.js:1
oq @ 4bd1b696-7bd16320e2b3bd82.js:1
o3 @ 4bd1b696-7bd16320e2b3bd82.js:1
oq @ 4bd1b696-7bd16320e2b3bd82.js:1
o3 @ 4bd1b696-7bd16320e2b3bd82.js:1
oq @ 4bd1b696-7bd16320e2b3bd82.js:1
o3 @ 4bd1b696-7bd16320e2b3bd82.js:1
oq @ 4bd1b696-7bd16320e2b3bd82.js:1
o3 @ 4bd1b696-7bd16320e2b3bd82.js:1
oq @ 4bd1b696-7bd16320e2b3bd82.js:1
o3 @ 4bd1b696-7bd16320e2b3bd82.js:1
oq @ 4bd1b696-7bd16320e2b3bd82.js:1
o3 @ 4bd1b696-7bd16320e2b3bd82.js:1
oq @ 4bd1b696-7bd16320e2b3bd82.js:1
o3 @ 4bd1b696-7bd16320e2b3bd82.js:1
oq @ 4bd1b696-7bd16320e2b3bd82.js:1
o3 @ 4bd1b696-7bd16320e2b3bd82.js:1
oq @ 4bd1b696-7bd16320e2b3bd82.js:1
o3 @ 4bd1b696-7bd16320e2b3bd82.js:1
oq @ 4bd1b696-7bd16320e2b3bd82.js:1
o3 @ 4bd1b696-7bd16320e2b3bd82.js:1
```

</details>



### 📷 复现步骤

可手动修改正常对话中的模型回复为以下内容，保存后页面就会崩溃，我在macOS与iOS的不同浏览器，自部署与演示站点中均成功复现。

```
<think>好的，我需要帮用户给他提供的Bash脚本添加清除空文件夹的功能。首先，我要仔细阅读现有的脚本，理解它的结构和工作原理。当前的脚本主要功能是清理Downloads目录中超过指定天数的文件和文件夹。对于文件夹，它检查内部最新文件的修改时间，如果超过天数，则移动到垃圾桶。用户现在想增加清除空文件夹的功能，无论这些空文件夹的存在时间如何。我需要考虑以下几点：1. **如何识别空文件夹**：使用`find`命令的`-empty`选项可以找到空目录。2. **处理时机**：可能在处理旧文件之后，再清理空文件夹，或者作为独立的部分。3. **与现有逻辑的整合**：现有的循环是处理每个项目，判断是否为文件夹。但空文件夹可能在循环中被遗漏，因为如果文件夹本身是空的，内部的文件检查可能找不到任何文件。4. **是否需要考虑天数限制**：用户需求是清除空文件夹，无论存在多久，所以应该直接删除所有空文件夹，无论其创建时间。5. **dryrun模式的支持**：需要确保在模拟运行时显示将要删除的空文件夹，实际运行时才执行删除。6. **安全删除**：使用`mv`移动到垃圾桶而不是直接删除，保持一致性。现有的脚本在循环中处理每个项目，但对于空文件夹，可能在原有逻辑中不会被处理，因为它们没有最新文件的时间戳。因此，可能需要单独处理空文件夹。可能的实现步骤：- 在第一层目录下查找空文件夹，使用`find "$downloads_dir" -mindepth 1 -maxdepth 1 -type d -empty`- 遍历这些空文件夹，在dryrun模式下显示提示，否则移动到垃圾箱。需要考虑是否在原有循环外单独处理，或者在循环中添加检查。但原有循环已经处理了非空的旧文件夹，而空文件夹可能在循环中被忽略，因为当文件夹为空时，`newest_file_time`会是空的，但脚本中会使用文件夹自身的修改时间。此时，如果文件夹自身的修改时间超过指定天数，会被删除。但用户希望不管存在多久，只要空的都删除。因此，用户的需求可能与现有逻辑中的文件夹处理不同，需要单独处理所有空文件夹，无论它们的年龄。因此，应该在现有循环外，单独添加一个步骤来删除所有空文件夹。需要确认这一点：用户是否希望无论空文件夹存在多久，都进行删除？根据用户的问题描述，答案是肯定的。因此，添加如下步骤：在现有的处理循环结束后，执行另一个`find`命令来查找所有空文件夹，并处理它们，dryrun模式下显示信息，否则移动到垃圾桶。这样实现的话，不会影响原有逻辑，且能独立处理空文件夹。同时，原有的对文件夹的处理是基于其最新文件的时间，而新加的是无论时间，只要是空文件夹就删除。具体代码实现：在脚本末尾，done之后，添加：# 处理空文件夹if $dryrun; then  echo "=== 开始清理空文件夹 ==="fifind "$downloads_dir" -mindepth 1 -maxdepth 1 -type d -empty -print0 | while IFS= read -r -d '' dir; do  if $dryrun; then    echo "[将删除空文件夹]：${dir##*/}"  else    echo "[已删除空文件夹]：${dir##*/}"    mv "$dir" "$trash_dir/"  fidoneif $dryrun; then  echo "=== 空文件夹清理完成 ==="fi这样，在dryrun模式下会显示将要删除的空文件夹，实际运行时移动它们。同时，不影响原有的对旧文件夹的处理。需要注意，原有脚本中处理文件夹的逻辑是基于存在文件的，而空文件夹可能在那个逻辑中被处理吗？比如，如果一个空文件夹的修改时间超过指定天数，是否会被原脚本处理？在原有脚本中，对于文件夹的处理是检查其内部最新文件的时间。如果是空文件夹，`newest_file_time`会是空，于是会执行`newest_file_time=$(stat -f %m "$item")`，即使用文件夹自身的修改时间。如果文件夹的修改时间超过指定天数，那么会被移动到垃圾桶。否则不会被处理。这样，原有的逻辑会处理修改时间超过天数的空文件夹，但可能不会处理修改时间在指定天数内的空文件夹。而用户希望无论空文件夹存在多久，只要现在是空的，就删除。因此，必须与原逻辑分开处理，确保无论修改时间如何，只要空就删。因此，新增的代码段是正确的，因为它独立于天数检查，直接处理所有空文件夹。这样，原有的逻辑处理根据时间的文件夹，新增的逻辑处理所有空文件夹，不管时间。这符合用户的需求。最终，在脚本中添加上述代码块即可实现所需功能。</think>以下是为您的脚本添加空文件夹清理功能的升级版：```bash#!/bin/bash# ... [保持原有变量和帮助函数不变] ...# 处理空文件夹的函数clean_empty_dirs() {  local target_dir=$1  find "$target_dir" -mindepth 1 -maxdepth 1 -type d -empty -print0 | while IFS= read -r -d '' dir; do    if $dryrun; then      echo "[将删除空文件夹]：${dir##*/}"    else      echo "[已删除空文件夹]：${dir##*/}"      mv "$dir" "$trash_dir/"    fi  done}# ... [保持原有参数处理逻辑不变] ...# 主处理逻辑结束后添加空文件夹清理if $dryrun; then  echo "=== 开始清理空文件夹 ==="ficlean_empty_dirs "$downloads_dir"if $dryrun; then  echo "=== 空文件夹清理完成 ==="fi# ... [保持原有结束信息不变] ...```**改进说明：**1. **新增独立函数**：   ```bash   clean_empty_dirs() {     # 具体实现   }   ```   将空文件夹清理逻辑封装为独立函数，提高代码可维护性2. **优化空文件夹检测**：   ```bash   find "$target_dir" -mindepth 1 -maxdepth 1 -type d -empty   ```   使用专用`find`命令高效定位空目录：   - `-type d`：只搜索目录   - `-empty`：匹配空目录   - `-mindepth 1`：排除自身目录   - `-maxdepth 1`：仅检查直接子目录3. **Dry-run模式支持**：   与主逻辑保持一致的模拟运行提示，确保用户可预测操作结果4. **处理方式统一**：   使用`mv`命令将空文件夹移动到系统垃圾桶（`~/.Trash`），而不是直接删除，保持与主逻辑一致的安全策略**注意事项：**- 该功能会清理所有层级的直接子空目录（不递归处理下级目录）- 自动跳过包含隐藏文件的"空"目录（因`-empty`参数会自动判断）- 可与原有天数参数配合使用（空文件夹清理不受天数限制）**使用示例：**```bash# 常规清理（包含空文件夹）./cleaner.sh# 模拟运行查看空文件夹清理情况./cleaner.sh -n# 清理7天前内容并清除空文件夹./cleaner.sh -d 7```
```

### 🚦 期望结果

正常显示模型输出。

### 📝 补充信息

_No response_

Labels: released
State: closed