- Split server/chat.py, server/status.py, server/tasks.py into sub-packages
- Split utils/context_manager.py, utils/conversation_manager.py into mixin packages
- Split modules/file_manager.py, persistent_terminal.py, terminal_ops.py, mcp_client_manager.py into packages
- Split core/main_terminal_parts/context.py into base + mixins
- Split static/src/app/methods/{ui,message,upload,taskPolling,conversation} into sub-modules
- Fix flattened method exports, dynamic import paths, missing cross-module imports
- Add missing permission/network/execution mode constants and _PERMISSION_MODE_LABEL
- Update AGENTS.md, CLAUDE.md and project memories to reflect new structure
2.5 KiB
2.5 KiB
| name | description |
|---|---|
| frontend_debug_log_to_file | 当需要把前端日志输出到后端文件(如调试目标模式、轮询状态等)时,应该索引本记忆 |
前端日志输出到文件
背景
项目已内置一套轻量级的前端 → 后端日志上报机制,用于把浏览器端的状态变化/调试信息持久化到服务器日志文件,便于复现和排查问题。
基础设施
后端端点
- 文件:
server/app_legacy.py - 端点:
POST /api/client_debug_log - 写入函数:
log_goal_mode_debug_entry(data: Dict[str, Any]) - 日志文件:
{LOGS_DIR}/goal_mode_debug.log- 宿主机模式示例:
/Users/jojo/.agents/agents/host/logs/goal_mode_debug.log
- 宿主机模式示例:
前端函数
- 文件:
static/src/app/methods/common.ts - 函数:
goalModeDebugLog(event: string, payload: Record<string, any> = {}) - 默认关闭,避免日常刷屏
启用方式
方式一:浏览器控制台临时开启(无需改代码)
localStorage.setItem('goalModeDebug', '1')
// 刷新页面后生效
方式二:代码里强制开启
在 common.ts 中修改 isGoalModeDebugEnabled(),让它默认返回 true:
function isGoalModeDebugEnabled() {
// ...
return true; // 强制开启
}
方式三:运行时开关
window.__GOAL_MODE_DEBUG__ = true
使用方式
在前端需要记录状态的位置调用:
import { goalModeDebugLog } from './common';
goalModeDebugLog('event_name', {
conversationId: this.currentConversationId,
someState: this.someState,
// 其他需要记录的字段
});
调用后会:
- 在浏览器控制台输出
[GOAL_MODE_DEBUG]前缀日志 - 通过
fetch('/api/client_debug_log', ...)上报到后端 - 后端写入
goal_mode_debug.log
注意事项
- 日志默认关闭,只有显式开启后才会输出
fetch调用使用void前缀,不会阻塞业务流程- 上报失败会被静默捕获,不影响主流程
- 如需长期保留某类日志,应把调用代码保留在目标文件中;临时调试后建议清理调用点,只保留
common.ts和后端端点基础设施
历史应用
- 曾用于排查"第一个对话开启目标模式后停止,目标状态被错误继承到下一个对话"的问题
- 修复代码位于
server/tasks/api.py:/api/tasks/<task_id>/cancel取消任务时同步停止工作区目标状态POST /api/tasks创建非目标模式任务时清理残留的活动目标状态