docs: 更新 README 和 UPDATE_LOG 文档,新增日志持久化与面板修复记录
This commit is contained in:
@@ -192,4 +192,46 @@
|
||||
- **修复**: 在 `scene-script.js` 层加固了前置拦截规则:
|
||||
1. **直接拦截节点**: 当检测到传入 `cc.Node` 或 `Node` 作为组件类型时直接驳回,并返回富含指导意义的中文提示词(如“请使用 create-node 创建节点”)。
|
||||
2. **继承链校验**: 提取引擎类定义后,强制要求通过 `cc.js.isChildClassOf` 判断该类必须继承自 `cc.Component`。若不合法则即时截断并提示。
|
||||
- **价值**: 通过将冰冷的底层异常翻译为“手把手教 AI 怎么重试”的指导性异常,彻底根治了 AI 在操作组件时乱认对象、反复撞墙的通病。
|
||||
- **价值**: 通过将冰冷的底层异常翻译为"手把手教 AI 怎么重试"的指导性异常,彻底根治了 AI 在操作组件时乱认对象、反复撞墙的通病。
|
||||
|
||||
---
|
||||
|
||||
## 日志系统持久化与健壮性优化 (2026-02-27)
|
||||
|
||||
### 1. 日志文件持久化
|
||||
|
||||
- **问题**: 插件的所有运行日志只保存在内存中(`logBuffer`),编辑器重启后日志全部丢失,无法进行会话级别的问题回溯。
|
||||
- **优化**: 在 `main.js` 的 `addLog` 函数中新增文件写入逻辑。所有日志实时追加写入项目目录下的 `settings/mcp-bridge.log` 文件(懒初始化路径)。
|
||||
- **实现细节**:
|
||||
- 新增 `getLogFilePath()` 辅助函数,通过 `Editor.assetdb.urlToFspath` 推导项目根目录,将日志存放在 `settings/` 子目录中。
|
||||
- 日志格式统一为 `[时间戳] [类型] 内容`,与面板日志保持一致。
|
||||
- 文件写入使用 `fs.appendFileSync` 同步追加,失败时静默不影响主流程。
|
||||
|
||||
### 2. 日志缓冲区内存保护
|
||||
|
||||
- **问题**: 长时间运行的编辑器会话中,`logBuffer` 数组无限增长,最终导致内存压力。
|
||||
- **优化**: 在 `addLog` 中增加上限检查,当日志条数超过 2000 时自动截断旧日志,仅保留最近 1500 条。
|
||||
|
||||
### 3. 请求关联计数器 (`_requestCounter`)
|
||||
|
||||
- **优化**: 新增全局 `_requestCounter` 变量,为每个 HTTP 请求分配唯一的自增序号,便于在高并发场景下追踪同一请求的完整生命周期(从入队到执行到响应)。
|
||||
|
||||
### 4. CommandQueue 兜底超时保护
|
||||
|
||||
- **问题**: 原有的 `processNextCommand` 队列机制依赖每个指令主动调用 `done()` 回调来释放队列。如果某个工具函数内部逻辑异常导致 `done()` 未被调用,整个队列将永久停滞。
|
||||
- **优化**: 在 `enqueueCommand` 中为每个入队指令注册 60 秒兜底超时定时器 (`setTimeout`)。超时后强制释放队列位置并记录错误日志 `[CommandQueue] 指令执行超时(60s),强制释放队列`,确保后续指令不被阻塞。
|
||||
- **正常路径**: 指令正常完成时通过 `clearTimeout` 取消定时器,无额外开销。
|
||||
|
||||
### 5. 日志仅输出关键信息到编辑器控制台
|
||||
|
||||
- **优化**: `addLog` 函数不再将所有类型的日志输出到编辑器控制台,仅 `error` 和 `warn` 级别日志通过 `Editor.error()` / `Editor.warn()` 输出,防止 `info` / `success` / `mcp` 类型日志刷屏干扰开发者。
|
||||
|
||||
---
|
||||
|
||||
## 面板加载修复 (2026-02-24)
|
||||
|
||||
### 1. `panel/index.js` 语法错误修复
|
||||
|
||||
- **问题**: 面板加载时出现 `SyntaxError: Invalid or unexpected token`,导致 MCP Bridge 插件面板完全无法渲染。
|
||||
- **原因**: `index.js` 中存在非法字符或格式错误,被 Cocos Creator 的面板加载器拒绝解析。
|
||||
- **修复**: 清理了文件中的语法问题,确保面板能够正常加载和初始化。
|
||||
|
||||
Reference in New Issue
Block a user