工作目录与清理
说明 Agent 任务工作目录、Worktree 的退出清理与定期 GC 的边界。
工作目录与清理
Daemon 在 MOPHEUS_WORKDIR 下为 Agent 任务准备工作目录。任务目录可包含 Provider 状态、skills、运行时配置、事件与用量队列,以及通过 mopheus repo checkout 创建的 Git worktree。
工作目录会在两条独立路径上被清理:任务退出时的即时清理,以及按 TTL 运行的定期 GC。
任务退出清理
任务退出时,Daemon 按阶段释放资源:
| 阶段 | 适用结果 | 内容 |
|---|---|---|
| 强制清理 | 所有退出 | 协议、进程、临时配置、Provider home、skills、注入的 runtime config marker。 |
| 成功清理 | 服务端确认 Completed=true | 可选的 Worktree 删除。 |
| 最终释放 | 所有退出 | environment 与仓库引用。 |
失败、取消、中断和未确认完成不会触发 Worktree 清理,保留现场以供重试或排查。Pending=true 会继续同会话交互;既非 Completed 也非 Pending 的响应保留终态记录,等待后续确认。
成功后的 Worktree 清理
默认不在任务成功后立即删除 Worktree。启用以下环境变量后,Daemon 仅在服务端确认成功时执行强制删除:
MOPHEUS_AGENT_TASK_CLEANUP_WORKTREE=true该开关接受 true 或 1。删除使用显式强制授权,可能丢弃 Worktree 中的未提交、未跟踪或未推送修改。仅在确认这些本地修改可丢弃时启用。
实际删除成功后,Daemon 才会从任务 GC 元数据中移除对应 Worktree 路径;删除失败时元数据会保留。
定期 GC
当配置了 MOPHEUS_WORKDIR 时,Daemon 自动启用工作目录 GC。首次扫描在启动 90 秒后开始,之后按间隔执行。可使用 mopheus daemon disk-usage 查看当前磁盘占用。
| 环境变量 | 默认值 | 说明 |
|---|---|---|
MOPHEUS_GC_INTERVAL | 4 小时 | 扫描频率。 |
MOPHEUS_GC_TTL | 7 天 | Ticket 保持 done、cancelled 或 archived 超过该时长后,GC 会强制删除其整个任务目录。 |
MOPHEUS_GC_ORPHAN_TTL | 72 小时 | 无元数据或服务端不可达目录的保留时长。 |
MOPHEUS_GC_ARTIFACT_TTL | 12 小时 | node_modules、.next、.turbo 等可再生目录的清理延迟;0 禁用。 |
MOPHEUS_GC_ARTIFACT_PATTERNS | node_modules,.next,.turbo | 可再生 artifact 目录 basename,逗号分隔。 |
GC 会保留未终态的 Ticket 以及状态为 failed 的 Ticket,也会保护仍有待上报终态记录的任务目录。TTL 到期清理是破坏性的整目录删除,包括目录中残留的 Worktree 内容。它是容量回收机制,不是任务退出即时清理的替代品。启用成功后的 Worktree 清理也不会改变 GC 的 TTL、扫描频率或 orphan 策略。
本地 worktree 注册表
daemon 会将每个受管 worktree 原子记录到 <bare>.git.metadata/worktrees/,与现有的 <bare>.git.codegraph-cache/ 并列,绝不会移动缓存。列表和清理只使用本地记录及 Git 状态,因此数据库记录或 task 目录删除后仍可工作。
可使用 mopheus repo worktree list --ticket <uuid>、--task <uuid>,或 --untracked --repo <url>。记录会归并为 active、missing、drifted、untracked 状态。受管记录使用 ticket/task selector 清理;untracked 清理必须指定 --repo 和显式 --force。有本地改动、未推送提交或分支漂移的 worktree 默认受保护,强制模式才会删除。多个工作区存在同一 URL 时用 --workspace <uuid> 缩小范围;否则 prune 会拒绝歧义且不修改。-o table 是表格,-o json 是纯 JSON。删除 bare repo 会同时删除 .git、.git.metadata、.git.codegraph-cache。